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: =?utf-8?b?VG9tw6HFoSBNcsOheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5vcmc+?= To: git-commits@fedoraproject.org Subject: [rpms/openssl] rebase_40beta: - update to new upstream version, no soname bump needed Date: Tue, 09 Jun 2026 12:41:56 GMT Message-ID: <178100891655.1.7160128694986093778.rpms-openssl-27847ae31820@fedoraproject.org> List-ID: X-Git-Repo: rpms/openssl X-Git-Branch: rebase_40beta X-Git-Rev: 27847ae31820b1348530be491a8c9575a39bdb5f ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvb3BlbnNzbAogICAgICAgICAgICBCcmFuY2ggOiByZWJhc2VfNDBiZXRhCiAg ICAgICAgICAgIENvbW1pdCA6IDI3ODQ3YWUzMTgyMGIxMzQ4NTMwYmU0OTFhOGM5NTc1YTM5YmRi NWYKICAgICAgICAgICAgQXV0aG9yIDogVG9tw6HFoSBNcsOheiA8dG1yYXpAZmVkb3JhcHJvamVj dC5vcmc+CiAgICAgICAgICAgIERhdGUgICA6IDIwMDktMTEtMTJUMjE6MTU6MjQrMDA6MDAKICAg ICAgICAgICAgU3RhdHMgIDogKzEyNzQwLy0xNDYwOCBpbiAzMCBmaWxlKHMpCiAgICAgICAgICAg IFVSTCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3JnL3JwbXMvb3BlbnNzbC9jLzI3 ODQ3YWUzMTgyMGIxMzQ4NTMwYmU0OTFhOGM5NTc1YTM5YmRiNWY/YnJhbmNoPXJlYmFzZV80MGJl dGEKCiAgICAgICAgICAgIExvZzoKICAgICAgICAgICAgLSB1cGRhdGUgdG8gbmV3IHVwc3RyZWFt IHZlcnNpb24sIG5vIHNvbmFtZSBidW1wIG5lZWRlZAotIGZpeCBDVkUtMjAwOS0zNTU1IC0gbm90 ZSB0aGF0IHRoZSBmaXggaXMgYnlwYXNzZWQgaWYgU1NMX09QX0FMTCBpcyB1c2VkCiAgICBzbyB0 aGUgY29tcGF0aWJpbGl0eSB3aXRoIHVuZml4ZWQgY2xpZW50cyBpcyBub3QgYnJva2VuLiBUaGUg cHJvdG9jb2wKICAgIGV4dGVuc2lvbiBpcyBhbHNvIG5vdCBmaW5hbC4KCi0tLQpkaWZmIC0tZ2l0 IGEvLmN2c2lnbm9yZSBiLy5jdnNpZ25vcmUKaW5kZXggMzdlMjcyMi4uMzgxOTY0NyAxMDA2NDQK LS0tIGEvLmN2c2lnbm9yZQorKysgYi8uY3ZzaWdub3JlCkBAIC0xICsxIEBACi1vcGVuc3NsLTEu MC4wLWJldGEzLXVzYS50YXIuYnoyCitvcGVuc3NsLTEuMC4wLWJldGE0LXVzYS50YXIuYnoyCgpk aWZmIC0tZ2l0IGEvb3BlbnNzbC0wLjkuOGItYWxpYXNpbmctYnVnLnBhdGNoIGIvb3BlbnNzbC0w LjkuOGItYWxpYXNpbmctYnVnLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4 ZDNiMzZhLi4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMC45LjhiLWFsaWFzaW5nLWJ1Zy5wYXRjaAor KysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLQotVGhpcyBwYXRjaCBmaXhlcyBhIHZpb2xh dGlvbiBvZiB0aGUgQyBhbGlhc2luZyBydWxlcyB0aGF0IGNhbiBjYXVzZQotbWlzY29tcGlsYXRp b24gd2l0aCBzb21lIGNvbXBpbGVyIHZlcnNpb25zLgotCi0tLS0gb3BlbnNzbC0wLjkuOGIvY3J5 cHRvL2Rzby9kc29fZGxmY24uYy5vcmlnCTIwMDYtMTAtMzAgMTg6MjE6MzUuMDAwMDAwMDAwICsw MTAwCi0rKysgb3BlbnNzbC0wLjkuOGIvY3J5cHRvL2Rzby9kc29fZGxmY24uYwkyMDA2LTEwLTMw IDE4OjIxOjM3LjAwMDAwMDAwMCArMDEwMAotQEAgLTIzNyw3ICsyMzcsNyBAQCBzdGF0aWMgdm9p ZCAqZGxmY25fYmluZF92YXIoRFNPICpkc28sIGNvCi0gc3RhdGljIERTT19GVU5DX1RZUEUgZGxm Y25fYmluZF9mdW5jKERTTyAqZHNvLCBjb25zdCBjaGFyICpzeW1uYW1lKQotIAl7Ci0gCXZvaWQg KnB0cjsKLS0JRFNPX0ZVTkNfVFlQRSBzeW0sICp0c3ltID0gJnN5bTsKLSsJRFNPX0ZVTkNfVFlQ RSBzeW07Ci0gCi0gCWlmKChkc28gPT0gTlVMTCkgfHwgKHN5bW5hbWUgPT0gTlVMTCkpCi0gCQl7 Ci1AQCAtMjU1LDcgKzI1NSw3IEBAIHN0YXRpYyBEU09fRlVOQ19UWVBFIGRsZmNuX2JpbmRfZnVu YyhEU08KLSAJCURTT2VycihEU09fRl9ETEZDTl9CSU5EX0ZVTkMsRFNPX1JfTlVMTF9IQU5ETEUp OwotIAkJcmV0dXJuKE5VTEwpOwotIAkJfQotLQkqKHZvaWQgKiopKHRzeW0pID0gZGxzeW0ocHRy LCBzeW1uYW1lKTsKLSsJc3ltID0gZGxzeW0ocHRyLCBzeW1uYW1lKTsKLSAJaWYoc3ltID09IE5V TEwpCi0gCQl7Ci0gCQlEU09lcnIoRFNPX0ZfRExGQ05fQklORF9GVU5DLERTT19SX1NZTV9GQUlM VVJFKTsKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTAuOS44ai1jYS1kaXIucGF0Y2ggYi9vcGVuc3Ns LTAuOS44ai1jYS1kaXIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3Y2Qz ZjkuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0wLjkuOGotY2EtZGlyLnBhdGNoCisrKyAvZGV2L251 bGwKQEAgLTEsMzYgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0wLjkuOGovYXBwcy9vcGVuc3Ns LmNuZi5jYS1kaXIgb3BlbnNzbC0wLjkuOGovYXBwcy9vcGVuc3NsLmNuZgotLS0tIG9wZW5zc2wt MC45LjhqL2FwcHMvb3BlbnNzbC5jbmYuY2EtZGlyCTIwMDktMDEtMTMgMjM6MjA6MTAuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0wLjkuOGovYXBwcy9vcGVuc3NsLmNuZgkyMDA5LTAxLTEz IDIzOjIwOjEwLjAwMDAwMDAwMCArMDEwMAotQEAgLTM0LDcgKzM0LDcgQEAgZGVmYXVsdF9jYQk9 IENBX2RlZmF1bHQJCSMgVGhlIGRlZmF1bHQgYwotICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gWyBDQV9kZWZhdWx0 IF0KLSAKLS1kaXIJCT0gLi9kZW1vQ0EJCSMgV2hlcmUgZXZlcnl0aGluZyBpcyBrZXB0Ci0rZGly CQk9IC9ldGMvcGtpL0NBCQkjIFdoZXJlIGV2ZXJ5dGhpbmcgaXMga2VwdAotIGNlcnRzCQk9ICRk aXIvY2VydHMJCSMgV2hlcmUgdGhlIGlzc3VlZCBjZXJ0cyBhcmUga2VwdAotIGNybF9kaXIJCT0g JGRpci9jcmwJCSMgV2hlcmUgdGhlIGlzc3VlZCBjcmwgYXJlIGtlcHQKLSBkYXRhYmFzZQk9ICRk aXIvaW5kZXgudHh0CSMgZGF0YWJhc2UgaW5kZXggZmlsZS4KLWRpZmYgLXVwIG9wZW5zc2wtMC45 LjhqL2FwcHMvQ0Euc2guY2EtZGlyIG9wZW5zc2wtMC45LjhqL2FwcHMvQ0Euc2gKLS0tLSBvcGVu c3NsLTAuOS44ai9hcHBzL0NBLnNoLmNhLWRpcgkyMDA1LTA3LTA0IDIzOjQ0OjIyLjAwMDAwMDAw MCArMDIwMAotKysrIG9wZW5zc2wtMC45LjhqL2FwcHMvQ0Euc2gJMjAwOS0wMS0xMyAyMzoyMDox MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0zOSw3ICszOSw3IEBAIENBPSIkT1BFTlNTTCBjYSAkU1NM RUFZX0NPTkZJRyIKLSBWRVJJRlk9IiRPUEVOU1NMIHZlcmlmeSIKLSBYNTA5PSIkT1BFTlNTTCB4 NTA5IgotIAotLUNBVE9QPS4vZGVtb0NBCi0rQ0FUT1A9L2V0Yy9wa2kvQ0EKLSBDQUtFWT0uL2Nh a2V5LnBlbQotIENBUkVRPS4vY2FyZXEucGVtCi0gQ0FDRVJUPS4vY2FjZXJ0LnBlbQotZGlmZiAt dXAgb3BlbnNzbC0wLjkuOGovYXBwcy9DQS5wbC5pbi5jYS1kaXIgb3BlbnNzbC0wLjkuOGovYXBw cy9DQS5wbC5pbgotLS0tIG9wZW5zc2wtMC45LjhqL2FwcHMvQ0EucGwuaW4uY2EtZGlyCTIwMDYt MDQtMjggMDI6Mjg6NTEuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0wLjkuOGovYXBwcy9D QS5wbC5pbgkyMDA5LTAxLTEzIDIzOjIwOjEwLjAwMDAwMDAwMCArMDEwMAotQEAgLTUzLDcgKzUz LDcgQEAgJFZFUklGWT0iJG9wZW5zc2wgdmVyaWZ5IjsKLSAkWDUwOT0iJG9wZW5zc2wgeDUwOSI7 Ci0gJFBLQ1MxMj0iJG9wZW5zc2wgcGtjczEyIjsKLSAKLS0kQ0FUT1A9Ii4vZGVtb0NBIjsKLSsk Q0FUT1A9Ii9ldGMvcGtpL0NBIjsKLSAkQ0FLRVk9ImNha2V5LnBlbSI7Ci0gJENBUkVRPSJjYXJl cS5wZW0iOwotICRDQUNFUlQ9ImNhY2VydC5wZW0iOwoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMC45 LjhrLWFsZ28tZG9jLnBhdGNoIGIvb3BlbnNzbC0wLjkuOGstYWxnby1kb2MucGF0Y2gKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NTIxYTQuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0w LjkuOGstYWxnby1kb2MucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotZGlm ZiAtdXAgb3BlbnNzbC0wLjkuOGsvZG9jL2NyeXB0by9FVlBfRGlnZXN0SW5pdC5wb2QuYWxnby1k b2Mgb3BlbnNzbC0wLjkuOGsvZG9jL2NyeXB0by9FVlBfRGlnZXN0SW5pdC5wb2QKLS0tLSBvcGVu c3NsLTAuOS44ay9kb2MvY3J5cHRvL0VWUF9EaWdlc3RJbml0LnBvZC5hbGdvLWRvYwkyMDA0LTA1 LTIwIDIzOjM5OjUwLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMC45LjhrL2RvYy9jcnlw dG8vRVZQX0RpZ2VzdEluaXQucG9kCTIwMDktMDYtMzAgMTI6MDQ6NDcuMDAwMDAwMDAwICswMjAw Ci1AQCAtNiw3ICs2LDggQEAgRVZQX01EX0NUWF9pbml0LCBFVlBfTURfQ1RYX2NyZWF0ZSwgRVZQ XwotIEVWUF9EaWdlc3RGaW5hbF9leCwgRVZQX01EX0NUWF9jbGVhbnVwLCBFVlBfTURfQ1RYX2Rl c3Ryb3ksIEVWUF9NQVhfTURfU0laRSwKLSBFVlBfTURfQ1RYX2NvcHlfZXgsIEVWUF9NRF9DVFhf Y29weSwgRVZQX01EX3R5cGUsIEVWUF9NRF9wa2V5X3R5cGUsIEVWUF9NRF9zaXplLAotIEVWUF9N RF9ibG9ja19zaXplLCBFVlBfTURfQ1RYX21kLCBFVlBfTURfQ1RYX3NpemUsIEVWUF9NRF9DVFhf YmxvY2tfc2l6ZSwgRVZQX01EX0NUWF90eXBlLAotLUVWUF9tZF9udWxsLCBFVlBfbWQyLCBFVlBf bWQ1LCBFVlBfc2hhLCBFVlBfc2hhMSwgRVZQX2RzcywgRVZQX2RzczEsIEVWUF9tZGMyLAotK0VW UF9tZF9udWxsLCBFVlBfbWQyLCBFVlBfbWQ1LCBFVlBfc2hhLCBFVlBfc2hhMSwgRVZQX3NoYTIy NCwKLStFVlBfc2hhMjU2LCBFVlBfc2hhMzg0LCBFVlBfc2hhNTEyLCBFVlBfZHNzLCBFVlBfZHNz MSwgRVZQX21kYzIsCi0gRVZQX3JpcGVtZDE2MCwgRVZQX2dldF9kaWdlc3RieW5hbWUsIEVWUF9n ZXRfZGlnZXN0YnluaWQsIEVWUF9nZXRfZGlnZXN0YnlvYmogLQotIEVWUCBkaWdlc3Qgcm91dGlu ZXMKLSAKLUBAIC01MSw2ICs1MiwxMCBAQCBFVlAgZGlnZXN0IHJvdXRpbmVzCi0gIGNvbnN0IEVW UF9NRCAqRVZQX21kNSh2b2lkKTsKLSAgY29uc3QgRVZQX01EICpFVlBfc2hhKHZvaWQpOwotICBj b25zdCBFVlBfTUQgKkVWUF9zaGExKHZvaWQpOwotKyBjb25zdCBFVlBfTUQgKkVWUF9zaGEyMjQo dm9pZCk7Ci0rIGNvbnN0IEVWUF9NRCAqRVZQX3NoYTI1Nih2b2lkKTsKLSsgY29uc3QgRVZQX01E ICpFVlBfc2hhMzg0KHZvaWQpOwotKyBjb25zdCBFVlBfTUQgKkVWUF9zaGE1MTIodm9pZCk7Ci0g IGNvbnN0IEVWUF9NRCAqRVZQX2Rzcyh2b2lkKTsKLSAgY29uc3QgRVZQX01EICpFVlBfZHNzMSh2 b2lkKTsKLSAgY29uc3QgRVZQX01EICpFVlBfbWRjMih2b2lkKTsKLUBAIC03MCw3ICs3NSw3IEBA IEVWUF9NRF9DVFhfY3JlYXRlKCkgYWxsb2NhdGVzLCBpbml0aWFsaXoKLSAKLSBFVlBfRGlnZXN0 SW5pdF9leCgpIHNldHMgdXAgZGlnZXN0IGNvbnRleHQgQjxjdHg+IHRvIHVzZSBhIGRpZ2VzdAot IEI8dHlwZT4gZnJvbSBFTkdJTkUgQjxpbXBsPi4gQjxjdHg+IG11c3QgYmUgaW5pdGlhbGl6ZWQg YmVmb3JlIGNhbGxpbmcgdGhpcwotLWZ1bmN0aW9uLiBCPHR5cGU+IHdpbGwgdHlwaWNhbGx5IGJl IHN1cHBsaWVkIGJ5IGEgZnVuY3Rpb25zdWNoIGFzIEVWUF9zaGExKCkuCi0rZnVuY3Rpb24uIEI8 dHlwZT4gd2lsbCB0eXBpY2FsbHkgYmUgc3VwcGxpZWQgYnkgYSBmdW5jdGlvbiBzdWNoIGFzIEVW UF9zaGExKCkuCi0gSWYgQjxpbXBsPiBpcyBOVUxMIHRoZW4gdGhlIGRlZmF1bHQgaW1wbGVtZW50 YXRpb24gb2YgZGlnZXN0IEI8dHlwZT4gaXMgdXNlZC4KLSAKLSBFVlBfRGlnZXN0VXBkYXRlKCkg aGFzaGVzIEI8Y250PiBieXRlcyBvZiBkYXRhIGF0IEI8ZD4gaW50byB0aGUKLUBAIC0xMjcsOSAr MTMyLDExIEBAIHdpdGggdGhpcyBkaWdlc3QuIEZvciBleGFtcGxlIEVWUF9zaGExKCkKLSByZXR1 cm4gQjxOSURfc2hhMVdpdGhSU0FFbmNyeXB0aW9uPi4gVGhpcyAibGluayIgYmV0d2VlbiBkaWdl c3RzIGFuZCBzaWduYXR1cmUKLSBhbGdvcml0aG1zIG1heSBub3QgYmUgcmV0YWluZWQgaW4gZnV0 dXJlIHZlcnNpb25zIG9mIE9wZW5TU0wuCi0gCi0tRVZQX21kMigpLCBFVlBfbWQ1KCksIEVWUF9z aGEoKSwgRVZQX3NoYTEoKSwgRVZQX21kYzIoKSBhbmQgRVZQX3JpcGVtZDE2MCgpCi0tcmV0dXJu IEI8RVZQX01EPiBzdHJ1Y3R1cmVzIGZvciB0aGUgTUQyLCBNRDUsIFNIQSwgU0hBMSwgTURDMiBh bmQgUklQRU1EMTYwIGRpZ2VzdAotLWFsZ29yaXRobXMgcmVzcGVjdGl2ZWx5LiBUaGUgYXNzb2Np YXRlZCBzaWduYXR1cmUgYWxnb3JpdGhtIGlzIFJTQSBpbiBlYWNoIGNhc2UuCi0rRVZQX21kMigp LCBFVlBfbWQ1KCksIEVWUF9zaGEoKSwgRVZQX3NoYTEoKSwgRVZQX3NoYTIyNCgpLCBFVlBfc2hh MjU2KCksCi0rRVZQX3NoYTM4NCgpLCBFVlBfc2hhNTEyKCksIEVWUF9tZGMyKCkgYW5kIEVWUF9y aXBlbWQxNjAoKQotK3JldHVybiBCPEVWUF9NRD4gc3RydWN0dXJlcyBmb3IgdGhlIE1EMiwgTUQ1 LCBTSEEsIFNIQTEsIFNIQTIyNCwgU0hBMjU2LCBTSEEzODQsCi0rU0hBNTEyLCBNREMyIGFuZCBS SVBFTUQxNjAgZGlnZXN0IGFsZ29yaXRobXMgcmVzcGVjdGl2ZWx5LiBUaGUgYXNzb2NpYXRlZAot K3NpZ25hdHVyZSBhbGdvcml0aG0gaXMgUlNBIGluIGVhY2ggY2FzZS4KLSAKLSBFVlBfZHNzKCkg YW5kIEVWUF9kc3MxKCkgcmV0dXJuIEI8RVZQX01EPiBzdHJ1Y3R1cmVzIGZvciBTSEEgYW5kIFNI QTEgZGlnZXN0Ci0gYWxnb3JpdGhtcyBidXQgdXNpbmcgRFNTIChEU0EpIGZvciB0aGUgc2lnbmF0 dXJlIGFsZ29yaXRobS4KLUBAIC0xNTYsNyArMTYzLDggQEAgRVZQX01EX3NpemUoKSwgRVZQX01E X2Jsb2NrX3NpemUoKSwgRVZQXwotIEVWUF9NRF9DVFhfYmxvY2tfc2l6ZSgpCWFuZCBFVlBfTURf YmxvY2tfc2l6ZSgpIHJldHVybiB0aGUgZGlnZXN0IG9yIGJsb2NrCi0gc2l6ZSBpbiBieXRlcy4K LSAKLS1FVlBfbWRfbnVsbCgpLCBFVlBfbWQyKCksIEVWUF9tZDUoKSwgRVZQX3NoYSgpLCBFVlBf c2hhMSgpLCBFVlBfZHNzKCksCi0rRVZQX21kX251bGwoKSwgRVZQX21kMigpLCBFVlBfbWQ1KCks IEVWUF9zaGEoKSwgRVZQX3NoYTEoKSwKLStFVlBfc2hhMjI0KCksIEVWUF9zaGEyNTYoKSwgRVZQ X3NoYTM4NCgpLCBFVlBfc2hhNTEyKCksIEVWUF9kc3MoKSwKLSBFVlBfZHNzMSgpLCBFVlBfbWRj MigpIGFuZCBFVlBfcmlwZW1kMTYwKCkgcmV0dXJuIHBvaW50ZXJzIHRvIHRoZQotIGNvcnJlc3Bv bmRpbmcgRVZQX01EIHN0cnVjdHVyZXMuCi0gCi1kaWZmIC11cCBvcGVuc3NsLTAuOS44ay9kb2Mv Y3J5cHRvL0VWUF9FbmNyeXB0SW5pdC5wb2QuYWxnby1kb2Mgb3BlbnNzbC0wLjkuOGsvZG9jL2Ny eXB0by9FVlBfRW5jcnlwdEluaXQucG9kCi0tLS0gb3BlbnNzbC0wLjkuOGsvZG9jL2NyeXB0by9F VlBfRW5jcnlwdEluaXQucG9kLmFsZ28tZG9jCTIwMDUtMDQtMTUgMTg6MDE6MzUuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0wLjkuOGsvZG9jL2NyeXB0by9FVlBfRW5jcnlwdEluaXQucG9k CTIwMDktMDYtMzAgMTI6MDQ6NDcuMDAwMDAwMDAwICswMjAwCi1AQCAtOTEsNiArOTEsMzIgQEAg RVZQX0NJUEhFUl9DVFhfc2V0X3BhZGRpbmcgLSBFVlAgY2lwaGVyIAotICBpbnQgRVZQX0NJUEhF Ul9wYXJhbV90b19hc24xKEVWUF9DSVBIRVJfQ1RYICpjLCBBU04xX1RZUEUgKnR5cGUpOwotICBp bnQgRVZQX0NJUEhFUl9hc24xX3RvX3BhcmFtKEVWUF9DSVBIRVJfQ1RYICpjLCBBU04xX1RZUEUg KnR5cGUpOwotIAotKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfZGVzX2VkZTModm9pZCk7Ci0rIGNv bnN0IEVWUF9DSVBIRVIgKkVWUF9kZXNfZWRlM19lY2Iodm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBI RVIgKkVWUF9kZXNfZWRlM19jZmI2NCh2b2lkKTsKLSsgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Rl c19lZGUzX2NmYjEodm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9kZXNfZWRlM19jZmI4 KHZvaWQpOwotKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfZGVzX2VkZTNfb2ZiKHZvaWQpOwotKyBj b25zdCBFVlBfQ0lQSEVSICpFVlBfZGVzX2VkZTNfY2JjKHZvaWQpOwotKyBjb25zdCBFVlBfQ0lQ SEVSICpFVlBfYWVzXzEyOF9lY2Iodm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNf MTI4X2NiYyh2b2lkKTsKLSsgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xMjhfY2ZiMSh2b2lk KTsKLSsgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xMjhfY2ZiOCh2b2lkKTsKLSsgY29uc3Qg RVZQX0NJUEhFUiAqRVZQX2Flc18xMjhfY2ZiMTI4KHZvaWQpOwotKyBjb25zdCBFVlBfQ0lQSEVS ICpFVlBfYWVzXzEyOF9vZmIodm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTky X2VjYih2b2lkKTsKLSsgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xOTJfY2JjKHZvaWQpOwot KyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml9jZmIxKHZvaWQpOwotKyBjb25zdCBFVlBf Q0lQSEVSICpFVlBfYWVzXzE5Ml9jZmI4KHZvaWQpOwotKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBf YWVzXzE5Ml9jZmIxMjgodm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX29m Yih2b2lkKTsKLSsgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfZWNiKHZvaWQpOwotKyBj b25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9jYmModm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBI RVIgKkVWUF9hZXNfMjU2X2NmYjEodm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNf MjU2X2NmYjgodm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X2NmYjEyOCh2 b2lkKTsKLSsgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfb2ZiKHZvaWQpOwotKwotID1o ZWFkMSBERVNDUklQVElPTgotIAotIFRoZSBFVlAgY2lwaGVyIHJvdXRpbmVzIGFyZSBhIGhpZ2gg bGV2ZWwgaW50ZXJmYWNlIHRvIGNlcnRhaW4KLUBAIC0yOTcsNiArMzIzLDE4IEBAIFRocmVlIGtl eSB0cmlwbGUgREVTIGluIENCQywgRUNCLCBDRkIgYW4KLSAKLSBERVNYIGFsZ29yaXRobSBpbiBD QkMgbW9kZS4KLSAKLSs9aXRlbSBFVlBfYWVzXzEyOF9jYmModm9pZCksIEVWUF9hZXNfMTI4X2Vj YigpLCBFVlBfYWVzXzEyOF9vZmIodm9pZCksIEVWUF9hZXNfMTI4X2NmYjEodm9pZCksIEVWUF9h ZXNfMTI4X2NmYjgodm9pZCksIEVWUF9hZXNfMTI4X2NmYjEyOCh2b2lkKQotKwotK0FFUyB3aXRo IDEyOCBiaXQga2V5IGxlbmd0aCBpbiBDQkMsIEVDQiwgT0ZCIGFuZCBDRkIgbW9kZXMgcmVzcGVj dGl2ZWx5LgotKwotKz1pdGVtIEVWUF9hZXNfMTkyX2NiYyh2b2lkKSwgRVZQX2Flc18xOTJfZWNi KCksIEVWUF9hZXNfMTkyX29mYih2b2lkKSwgRVZQX2Flc18xOTJfY2ZiMSh2b2lkKSwgRVZQX2Fl c18xOTJfY2ZiOCh2b2lkKSwgRVZQX2Flc18xOTJfY2ZiMTI4KHZvaWQpCi0rCi0rQUVTIHdpdGgg MTkyIGJpdCBrZXkgbGVuZ3RoIGluIENCQywgRUNCLCBPRkIgYW5kIENGQiBtb2RlcyByZXNwZWN0 aXZlbHkuCi0rCi0rPWl0ZW0gRVZQX2Flc18yNTZfY2JjKHZvaWQpLCBFVlBfYWVzXzI1Nl9lY2Io KSwgRVZQX2Flc18yNTZfb2ZiKHZvaWQpLCBFVlBfYWVzXzI1Nl9jZmIxKHZvaWQpLCBFVlBfYWVz XzI1Nl9jZmI4KHZvaWQpLCBFVlBfYWVzXzI1Nl9jZmIxMjgodm9pZCkKLSsKLStBRVMgd2l0aCAy NTYgYml0IGtleSBsZW5ndGggaW4gQ0JDLCBFQ0IsIE9GQiBhbmQgQ0ZCIG1vZGVzIHJlc3BlY3Rp dmVseS4KLSsKLSA9aXRlbSBFVlBfcmM0KHZvaWQpCi0gCi0gUkM0IHN0cmVhbSBjaXBoZXIuIFRo aXMgaXMgYSB2YXJpYWJsZSBrZXkgbGVuZ3RoIGNpcGhlciB3aXRoIGRlZmF1bHQga2V5IGxlbmd0 aCAxMjggYml0cy4KCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWJldGEzLWNhbWVsbGlhLXJv dW5kcy5wYXRjaCBiL29wZW5zc2wtMS4wLjAtYmV0YTMtY2FtZWxsaWEtcm91bmRzLnBhdGNoCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDNiNjAyLi4wMDAwMDAwCi0tLSBhL29wZW5z c2wtMS4wLjAtYmV0YTMtY2FtZWxsaWEtcm91bmRzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEs MTIgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vY2FtZWxsaWEv YXNtL2NtbGwteDg2XzY0LnBsLnJvdW5kcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9jYW1l bGxpYS9hc20vY21sbC14ODZfNjQucGwKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9j YW1lbGxpYS9hc20vY21sbC14ODZfNjQucGwucm91bmRzCTIwMDktMDktMTUgMTI6MDk6MDguMDAw MDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vY2FtZWxsaWEvYXNt L2NtbGwteDg2XzY0LnBsCTIwMDktMDktMTUgMTI6MDk6NDguMDAwMDAwMDAwICswMjAwCi1AQCAt NjU2LDcgKzY1Niw3IEBAIENhbWVsbGlhX2NiY19lbmNyeXB0OgotIAltb3YJJXJzaSwkb3V0CQkj IG91dCBhcmd1bWVudAotIAltb3YJJXI4LCVyYngJCSMgaXZwIGFyZ3VtZW50Ci0gCW1vdgklcmN4 LCRrZXkJCSMga2V5IGFyZ3VtZW50Ci0tCW1vdgkyNzIoJXJjeCksJGtleWVuZAkjIGdyYW5kUm91 bmRzCi0rCW1vdgkyNzIoJXJjeCksJHtrZXllbmR9ZAkjIGdyYW5kUm91bmRzCi0gCi0gCW1vdgkl cjgsJF9pdnAKLSAJbW92CSVyYnAsJF9yc3AKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWJl dGEzLWNvbnN0LnBhdGNoIGIvb3BlbnNzbC0xLjAuMC1iZXRhMy1jb25zdC5wYXRjaApkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdjMWM5NS4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEu MC4wLWJldGEzLWNvbnN0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9kb2Mvc3NsL1NTTF9DSVBIRVJfZ2V0X25hbWUucG9k LmNvbnN0IG9wZW5zc2wtMS4wLjAtYmV0YTMvZG9jL3NzbC9TU0xfQ0lQSEVSX2dldF9uYW1lLnBv ZAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvZG9jL3NzbC9TU0xfQ0lQSEVSX2dldF9uYW1lLnBv ZC5jb25zdAkyMDA5LTAyLTE0IDIyOjQ5OjM3LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wt MS4wLjAtYmV0YTMvZG9jL3NzbC9TU0xfQ0lQSEVSX2dldF9uYW1lLnBvZAkyMDA5LTA4LTIyIDE2 OjE1OjMyLjAwMDAwMDAwMCArMDIwMAotQEAgLTExLDcgKzExLDcgQEAgU1NMX0NJUEhFUl9nZXRf bmFtZSwgU1NMX0NJUEhFUl9nZXRfYml0cwotICBjb25zdCBjaGFyICpTU0xfQ0lQSEVSX2dldF9u YW1lKGNvbnN0IFNTTF9DSVBIRVIgKmNpcGhlcik7Ci0gIGludCBTU0xfQ0lQSEVSX2dldF9iaXRz KGNvbnN0IFNTTF9DSVBIRVIgKmNpcGhlciwgaW50ICphbGdfYml0cyk7Ci0gIGNoYXIgKlNTTF9D SVBIRVJfZ2V0X3ZlcnNpb24oY29uc3QgU1NMX0NJUEhFUiAqY2lwaGVyKTsKLS0gY2hhciAqU1NM X0NJUEhFUl9kZXNjcmlwdGlvbihTU0xfQ0lQSEVSICpjaXBoZXIsIGNoYXIgKmJ1ZiwgaW50IHNp emUpOwotKyBjaGFyICpTU0xfQ0lQSEVSX2Rlc2NyaXB0aW9uKGNvbnN0IFNTTF9DSVBIRVIgKmNp cGhlciwgY2hhciAqYnVmLCBpbnQgc2l6ZSk7Ci0gCi0gPWhlYWQxIERFU0NSSVBUSU9OCi0gCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9zc2xfY2lwaC5jLmNvbnN0IG9wZW5zc2wt MS4wLjAtYmV0YTMvc3NsL3NzbF9jaXBoLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9z c2xfY2lwaC5jLmNvbnN0CTIwMDktMDgtMjIgMTU6NTY6MTIuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvc3NsX2NpcGguYwkyMDA5LTA4LTIyIDE1OjU2OjEyLjAw MDAwMDAwMCArMDIwMAotQEAgLTE0NTgsNyArMTQ1OCw3IEBAIFNUQUNLX09GKFNTTF9DSVBIRVIp ICpzc2xfY3JlYXRlX2NpcGhlcl8KLSAJcmV0dXJuKGNpcGhlcnN0YWNrKTsKLSAJfQotIAotLWNo YXIgKlNTTF9DSVBIRVJfZGVzY3JpcHRpb24oU1NMX0NJUEhFUiAqY2lwaGVyLCBjaGFyICpidWYs IGludCBsZW4pCi0rY2hhciAqU1NMX0NJUEhFUl9kZXNjcmlwdGlvbihjb25zdCBTU0xfQ0lQSEVS ICpjaXBoZXIsIGNoYXIgKmJ1ZiwgaW50IGxlbikKLSAJewotIAlpbnQgaXNfZXhwb3J0LHBrbCxr bDsKLSAJY29uc3QgY2hhciAqdmVyLCpleHBfc3RyOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1i ZXRhMy9zc2wvc3NsLmguY29uc3Qgb3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvc3NsLmgKLS0tLSBv cGVuc3NsLTEuMC4wLWJldGEzL3NzbC9zc2wuaC5jb25zdAkyMDA5LTA4LTIyIDE1OjU2OjExLjAw MDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvc3NsL3NzbC5oCTIwMDktMDgt MjIgMTU6NTY6MTIuMDAwMDAwMDAwICswMjAwCi1AQCAtMTYzOCw3ICsxNjM4LDcgQEAgbG9uZyBT U0xfZ2V0X2RlZmF1bHRfdGltZW91dChjb25zdCBTU0wgKgotIAotIGludCBTU0xfbGlicmFyeV9p bml0KHZvaWQgKTsKLSAKLS1jaGFyICpTU0xfQ0lQSEVSX2Rlc2NyaXB0aW9uKFNTTF9DSVBIRVIg KixjaGFyICpidWYsaW50IHNpemUpOwotK2NoYXIgKlNTTF9DSVBIRVJfZGVzY3JpcHRpb24oY29u c3QgU1NMX0NJUEhFUiAqLGNoYXIgKmJ1ZixpbnQgc2l6ZSk7Ci0gU1RBQ0tfT0YoWDUwOV9OQU1F KSAqU1NMX2R1cF9DQV9saXN0KFNUQUNLX09GKFg1MDlfTkFNRSkgKnNrKTsKLSAKLSBTU0wgKlNT TF9kdXAoU1NMICpzc2wpOwoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0YTMtY3VybC5w YXRjaCBiL29wZW5zc2wtMS4wLjAtYmV0YTMtY3VybC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggNjE0MWMwZS4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4wLWJldGEzLWN1 cmwucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGEzL2FwcHMvdHNnZXQuY3VybCBvcGVuc3NsLTEuMC4wLWJldGEzL2FwcHMvdHNn ZXQKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2FwcHMvdHNnZXQuY3VybAkyMDA2LTAyLTEzIDAw OjExOjIxLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvYXBwcy90c2dl dAkyMDA5LTA4LTIxIDE1OjM3OjI0LjAwMDAwMDAwMCArMDIwMAotQEAgLTcsNyArNyw3IEBAIHVz ZSBzdHJpY3Q7Ci0gdXNlIElPOjpIYW5kbGU7Ci0gdXNlIEdldG9wdDo6U3RkOwotIHVzZSBGaWxl OjpCYXNlbmFtZTsKLS11c2UgV1dXOjpDdXJsOjplYXN5OwotK3VzZSBXV1c6OkN1cmw6OkVhc3k7 Ci0gCi0gdXNlIHZhcnMgcXcoJW9wdGlvbnMpOwotIAotQEAgLTM3LDcgKzM3LDcgQEAgc3ViIGNy ZWF0ZV9jdXJsIHsKLSAgICAgbXkgJHVybCA9IHNoaWZ0OwotIAotICAgICAjIENyZWF0ZSBDdXJs IG9iamVjdC4KLS0gICAgbXkgJGN1cmwgPSBXV1c6OkN1cmw6OmVhc3k6Om5ldygpOwotKyAgICBt eSAkY3VybCA9IFdXVzo6Q3VybDo6RWFzeTo6bmV3KCk7Ci0gCi0gICAgICMgRXJyb3ItaGFuZGxp bmcgcmVsYXRlZCBvcHRpb25zLgotICAgICAkY3VybC0+c2V0b3B0KENVUkxPUFRfVkVSQk9TRSwg MSkgaWYgJG9wdGlvbnN7ZH07Ci1AQCAtMTkyLDQgKzE5Miw0IEBAIFJFUVVFU1Q6IGZvcmVhY2gg KEBBUkdWKSB7Ci0gICAgIFNUREVSUi0+cHJpbnRmbHVzaCgiLCAkb3V0cHV0IHdyaXR0ZW4uXG4i KSBpZiAkb3B0aW9uc3t2fTsKLSB9Ci0gJGN1cmwtPmNsZWFudXAoKTsKLS1XV1c6OkN1cmw6OmVh c3k6Omdsb2JhbF9jbGVhbnVwKCk7Ci0rV1dXOjpDdXJsOjpFYXN5OjpnbG9iYWxfY2xlYW51cCgp OwoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0YTMtZGVmYXVsdC1wYXRocy5wYXRjaCBi L29wZW5zc2wtMS4wLjAtYmV0YTMtZGVmYXVsdC1wYXRocy5wYXRjaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggNGVkMDJlMC4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4wLWJldGEz LWRlZmF1bHQtcGF0aHMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi1kaWZm IC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2FwcHMvc19jbGllbnQuYy5kZWZhdWx0LXBhdGhzIG9w ZW5zc2wtMS4wLjAtYmV0YTMvYXBwcy9zX2NsaWVudC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRh My9hcHBzL3NfY2xpZW50LmMuZGVmYXVsdC1wYXRocwkyMDA5LTA2LTMwIDE4OjEwOjI0LjAwMDAw MDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvYXBwcy9zX2NsaWVudC5jCTIwMDkt MDgtMDUgMTg6MTc6NTIuMDAwMDAwMDAwICswMjAwCi1AQCAtODg4LDEyICs4ODgsMTMgQEAgYmFk OgotIAlpZiAoIXNldF9jZXJ0X2tleV9zdHVmZihjdHgsY2VydCxrZXkpKQotIAkJZ290byBlbmQ7 Ci0gCi0tCWlmICgoIVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKGN0eCxDQWZpbGUsQ0Fw YXRoKSkgfHwKLS0JCSghU1NMX0NUWF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoY3R4KSkpCi0r CWlmICghU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY3R4LENBZmlsZSxDQXBhdGgpKQot KwkJewotKwkJRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKLSsJCX0KLSsJaWYgKCFTU0xfQ1RY X3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyhjdHgpKQotIAkJewotLQkJLyogQklPX3ByaW50Zihi aW9fZXJyLCJlcnJvciBzZXR0aW5nIGRlZmF1bHQgdmVyaWZ5IGxvY2F0aW9uc1xuIik7ICovCi0g CQlFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOwotLQkJLyogZ290byBlbmQ7ICovCi0gCQl9Ci0g Ci0gI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRh My9hcHBzL3Nfc2VydmVyLmMuZGVmYXVsdC1wYXRocyBvcGVuc3NsLTEuMC4wLWJldGEzL2FwcHMv c19zZXJ2ZXIuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvYXBwcy9zX3NlcnZlci5jLmRlZmF1 bHQtcGF0aHMJMjAwOS0wNi0zMCAxODoxMDoyNC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4wLWJldGEzL2FwcHMvc19zZXJ2ZXIuYwkyMDA5LTA4LTA1IDE4OjE4OjQwLjAwMDAwMDAw MCArMDIwMAotQEAgLTE0MDMsMTIgKzE0MDMsMTMgQEAgYmFkOgotIAkJfQotICNlbmRpZgotIAot LQlpZiAoKCFTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjdHgsQ0FmaWxlLENBcGF0aCkp IHx8Ci0tCQkoIVNTTF9DVFhfc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKGN0eCkpKQotKwlpZiAo IVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKGN0eCxDQWZpbGUsQ0FwYXRoKSkKLSsJCXsK LSsJCUVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7Ci0rCQl9Ci0rCWlmICghU1NMX0NUWF9zZXRf ZGVmYXVsdF92ZXJpZnlfcGF0aHMoY3R4KSkKLSAJCXsKLS0JCS8qIEJJT19wcmludGYoYmlvX2Vy ciwiWDUwOV9sb2FkX3ZlcmlmeV9sb2NhdGlvbnNcbiIpOyAqLwotIAkJRVJSX3ByaW50X2Vycm9y cyhiaW9fZXJyKTsKLS0JCS8qIGdvdG8gZW5kOyAqLwotIAkJfQotIAlpZiAodnBtKQotIAkJU1NM X0NUWF9zZXQxX3BhcmFtKGN0eCwgdnBtKTsKLUBAIC0xNDU3LDggKzE0NTgsMTEgQEAgYmFkOgot IAotIAkJU1NMX0NUWF9zZXNzX3NldF9jYWNoZV9zaXplKGN0eDIsMTI4KTsKLSAKLS0JCWlmICgo IVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKGN0eDIsQ0FmaWxlLENBcGF0aCkpIHx8Ci0t CQkJKCFTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyhjdHgyKSkpCi0rCQlpZiAoIVNT TF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKGN0eDIsQ0FmaWxlLENBcGF0aCkpCi0rCQkJewot KwkJCUVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7Ci0rCQkJfQotKwkJaWYgKCFTU0xfQ1RYX3Nl dF9kZWZhdWx0X3ZlcmlmeV9wYXRocyhjdHgyKSkKLSAJCQl7Ci0gCQkJRVJSX3ByaW50X2Vycm9y cyhiaW9fZXJyKTsKLSAJCQl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2FwcHMvc190 aW1lLmMuZGVmYXVsdC1wYXRocyBvcGVuc3NsLTEuMC4wLWJldGEzL2FwcHMvc190aW1lLmMKLS0t LSBvcGVuc3NsLTEuMC4wLWJldGEzL2FwcHMvc190aW1lLmMuZGVmYXVsdC1wYXRocwkyMDA2LTA0 LTE3IDE0OjIyOjEzLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvYXBw cy9zX3RpbWUuYwkyMDA5LTA4LTA1IDE4OjAwOjM1LjAwMDAwMDAwMCArMDIwMAotQEAgLTM3Mywx MiArMzczLDEzIEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAKLSAJU1NMX2xv YWRfZXJyb3Jfc3RyaW5ncygpOwotIAotLQlpZiAoKCFTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0 aW9ucyh0bV9jdHgsQ0FmaWxlLENBcGF0aCkpIHx8Ci0tCQkoIVNTTF9DVFhfc2V0X2RlZmF1bHRf dmVyaWZ5X3BhdGhzKHRtX2N0eCkpKQotKwlpZiAoIVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRp b25zKHRtX2N0eCxDQWZpbGUsQ0FwYXRoKSkKLSsJCXsKLSsJCUVSUl9wcmludF9lcnJvcnMoYmlv X2Vycik7Ci0rCQl9Ci0rCWlmICghU1NMX0NUWF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHModG1f Y3R4KSkKLSAJCXsKLS0JCS8qIEJJT19wcmludGYoYmlvX2VyciwiZXJyb3Igc2V0dGluZyBkZWZh dWx0IHZlcmlmeSBsb2NhdGlvbnNcbiIpOyAqLwotIAkJRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJy KTsKLS0JCS8qIGdvdG8gZW5kOyAqLwotIAkJfQotIAotIAlpZiAodG1fY2lwaGVyID09IE5VTEwp CgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMC1iZXRhMy1kc3MxLnBhdGNoIGIvb3BlbnNzbC0x LjAuMC1iZXRhMy1kc3MxLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODNk ZGM4Li4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtYmV0YTMtZHNzMS5wYXRjaAorKysgL2Rl di9udWxsCkBAIC0xLDExICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5 cHRvL2RzYS9kc2FfcG1ldGguYy5kc3MxIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2RzYS9k c2FfcG1ldGguYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2RzYS9kc2FfcG1ldGgu Yy5kc3MxCTIwMDgtMTEtMDUgMTk6Mzg6NTYuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0x LjAuMC1iZXRhMy9jcnlwdG8vZHNhL2RzYV9wbWV0aC5jCTIwMDktMDgtMzEgMTI6NTM6NDcuMDAw MDAwMDAwICswMjAwCi1AQCAtMTg2LDYgKzE4Niw3IEBAIHN0YXRpYyBpbnQgcGtleV9kc2FfY3Ry bChFVlBfUEtFWV9DVFggKmMKLSAKLSAJCWNhc2UgRVZQX1BLRVlfQ1RSTF9NRDoKLSAJCWlmIChF VlBfTURfdHlwZSgoY29uc3QgRVZQX01EICopcDIpICE9IE5JRF9zaGExICAgJiYKLSsJCSAgICBF VlBfTURfdHlwZSgoY29uc3QgRVZQX01EICopcDIpICE9IE5JRF9kc2EgICAgJiYKLSAJCSAgICBF VlBfTURfdHlwZSgoY29uc3QgRVZQX01EICopcDIpICE9IE5JRF9zaGEyMjQgJiYKLSAJCSAgICBF VlBfTURfdHlwZSgoY29uc3QgRVZQX01EICopcDIpICE9IE5JRF9zaGEyNTYpCi0gCQkJewoKZGlm ZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0YTMtZHRsczEtZml4LnBhdGNoIGIvb3BlbnNzbC0x LjAuMC1iZXRhMy1kdGxzMS1maXgucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDMyZTdiNTYuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMC1iZXRhMy1kdGxzMS1maXgucGF0 Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi1JbmRleDogb3BlbnNzbC9zc2wvZDFf Y2xudC5jCi1SQ1MgRmlsZTogL3Yvb3BlbnNzbC9jdnMvb3BlbnNzbC9zc2wvZDFfY2xudC5jLHYK LXJjc2RpZmYgLXEgLWtrICctcjEuMTYuMi4xMCcgJy1yMS4xNi4yLjExJyAtdSAnL3Yvb3BlbnNz bC9jdnMvb3BlbnNzbC9zc2wvZDFfY2xudC5jLHYnIDI+L2Rldi9udWxsCi0tLS0gb3BlbnNzbC9z c2wvZDFfY2xudC5jIDIwMDkvMDcvMTUgMTE6MzI6NTcgMS4xNi4yLjEwCi0rKysgb3BlbnNzbC9z c2wvZDFfY2xudC5jIDIwMDkvMDcvMjQgMTE6NTI6MzIgMS4xNi4yLjExCi1AQCAtMjIzLDYgKzIy Myw4IEBACi0gCQkJcy0+aW5pdF9udW09MDsKLSAJCQkvKiBtYXJrIGNsaWVudF9yYW5kb20gdW5p bml0aWFsaXplZCAqLwotIAkJCW1lbXNldChzLT5zMy0+Y2xpZW50X3JhbmRvbSwwLHNpemVvZihz LT5zMy0+Y2xpZW50X3JhbmRvbSkpOwotKwkJCXMtPmQxLT5zZW5kX2Nvb2tpZSA9IDA7Ci0rCQkJ cy0+aGl0ID0gMDsKLSAJCQlicmVhazsKLSAKLSAJCWNhc2UgU1NMM19TVF9DV19DTE5UX0hFTExP X0E6Ci1JbmRleDogb3BlbnNzbC9zc2wvZDFfcGt0LmMKLVJDUyBGaWxlOiAvdi9vcGVuc3NsL2N2 cy9vcGVuc3NsL3NzbC9kMV9wa3QuYyx2Ci1yY3NkaWZmIC1xIC1rayAnLXIxLjI3LjIuMTMnICct cjEuMjcuMi4xNCcgLXUgJy92L29wZW5zc2wvY3ZzL29wZW5zc2wvc3NsL2QxX3BrdC5jLHYnIDI+ L2Rldi9udWxsCi0tLS0gb3BlbnNzbC9zc2wvZDFfcGt0LmMgMjAwOS8wNy8xMyAxMTo0NDowNCAx LjI3LjIuMTMKLSsrKyBvcGVuc3NsL3NzbC9kMV9wa3QuYyAyMDA5LzA3LzI0IDExOjUyOjMyIDEu MjcuMi4xNAotQEAgLTc3NSw3ICs3NzUsNyBAQAotIAkvKiBDaGVjayBmb3IgdGltZW91dCAqLwot IAlpZiAoZHRsczFfaXNfdGltZXJfZXhwaXJlZChzKSkKLSAJCXsKLS0JCWlmIChkdGxzMV9yZWFk X2ZhaWxlZChzLCAtMSkgPiAwKTsKLSsJCWlmIChkdGxzMV9yZWFkX2ZhaWxlZChzLCAtMSkgPiAw KQotIAkJCWdvdG8gc3RhcnQ7Ci0gCQl9Ci0gCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMC1i ZXRhMy1lbmdpbmVzZGlyLnBhdGNoIGIvb3BlbnNzbC0xLjAuMC1iZXRhMy1lbmdpbmVzZGlyLnBh dGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGEzYzUwLi4wMDAwMDAwCi0tLSBh L29wZW5zc2wtMS4wLjAtYmV0YTMtZW5naW5lc2Rpci5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0x LDUyICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvQ29uZmlndXJlLmVuZ2lu ZXNkaXIgb3BlbnNzbC0xLjAuMC1iZXRhMy9Db25maWd1cmUKLS0tLSBvcGVuc3NsLTEuMC4wLWJl dGEzL0NvbmZpZ3VyZS5lbmdpbmVzZGlyCTIwMDktMDgtMTAgMTk6NDY6MzIuMDAwMDAwMDAwICsw MjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9Db25maWd1cmUJMjAwOS0wOC0xMCAxOTo0Njoz Mi4wMDAwMDAwMDAgKzAyMDAKLUBAIC02MTYsNiArNjE2LDcgQEAgbXkgJGlkeF9tdWx0aWxpYiA9 ICRpZHgrKzsKLSAKLSBteSAkcHJlZml4PSIiOwotIG15ICRvcGVuc3NsZGlyPSIiOwotK215ICRl bmdpbmVzZGlyPSIiOwotIG15ICRleGVfZXh0PSIiOwotIG15ICRpbnN0YWxsX3ByZWZpeD0iIjsK LSBteSAkY3Jvc3NfY29tcGlsZV9wcmVmaXg9IiI7Ci1AQCAtODIwLDYgKzgyMSwxMCBAQCBQUk9D RVNTX0FSR1M6Ci0gCQkJCXsKLSAJCQkJJG9wZW5zc2xkaXI9JDE7Ci0gCQkJCX0KLSsJCQllbHNp ZiAoL14tLWVuZ2luZXNkaXI9KC4qKSQvKQotKwkJCQl7Ci0rCQkJCSRlbmdpbmVzZGlyPSQxOwot KwkJCQl9Ci0gCQkJZWxzaWYgKC9eLS1pbnN0YWxsLnByZWZpeD0oLiopJC8pCi0gCQkJCXsKLSAJ CQkJJGluc3RhbGxfcHJlZml4PSQxOwotQEAgLTEwMzcsNyArMTA0Miw3IEBAIGNob3AgJHByZWZp eCBpZiAkcHJlZml4ID1+IC8uXC8kLzsKLSAKLSAkb3BlbnNzbGRpcj0kcHJlZml4IC4gIi9zc2wi IGlmICRvcGVuc3NsZGlyIGVxICIiOwotICRvcGVuc3NsZGlyPSRwcmVmaXggLiAiLyIgLiAkb3Bl bnNzbGRpciBpZiAkb3BlbnNzbGRpciAhfiAvKF5cL3xeW2EtekEtWl06W1xcXC9dKS87Ci0tCi0r JGVuZ2luZXNkaXI9IiRwcmVmaXgvbGliL2VuZ2luZXMiIGlmICRlbmdpbmVzZGlyIGVxICIiOwot IAotIHByaW50ICJJc01LMU1GPSRJc01LMU1GXG4iOwotIAotQEAgLTE2NDUsNyArMTY1MCw3IEBA IHdoaWxlICg8SU4+KQotIAkJIyAkZm9vIGlzIHRvIGJlY29tZSAiJHByZWZpeC9saWIkbXVsdGls aWIvZW5naW5lcyI7Ci0gCQkjIGFzIE1ha2VmaWxlLm9yZyBhbmQgZW5naW5lcy9NYWtlZmlsZSBh cmUgYWRhcHRlZCBmb3IKLSAJCSMgJG11bHRpbGliIHN1ZmZpeC4KLS0JCW15ICRmb28gPSAiJHBy ZWZpeC9saWIvZW5naW5lcyI7Ci0rCQlteSAkZm9vID0gIiRlbmdpbmVzZGlyIjsKLSAJCSRmb28g PX4gcy9cXC9cXFxcL2c7Ci0gCQlwcmludCBPVVQgIiNkZWZpbmUgRU5HSU5FU0RJUiBcIiRmb29c IlxuIjsKLSAJCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvZW5naW5lcy9NYWtlZmls ZS5lbmdpbmVzZGlyIG9wZW5zc2wtMS4wLjAtYmV0YTMvZW5naW5lcy9NYWtlZmlsZQotLS0tIG9w ZW5zc2wtMS4wLjAtYmV0YTMvZW5naW5lcy9NYWtlZmlsZS5lbmdpbmVzZGlyCTIwMDktMDYtMTQg MDQ6Mzc6MjIuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9lbmdpbmVz L01ha2VmaWxlCTIwMDktMDgtMTAgMTk6NDY6NDguMDAwMDAwMDAwICswMjAwCi1AQCAtMTIzLDcg KzEyMyw3IEBAIGluc3RhbGw6Ci0gCQkJCXNmeD0iLnNvIjsgXAotIAkJCQljcCBjeWckJGwuZGxs ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9saWIvZW5naW5lcy8kJHBmeCQkbCQkc2Z4 Lm5ldzsgXAotIAkJCSAgZmk7IFwKLS0JCQkgIGNobW9kIDU1NSAkKElOU1RBTExfUFJFRklYKSQo SU5TVEFMTFRPUCkvbGliL2VuZ2luZXMvJCRwZngkJGwkJHNmeC5uZXc7IFwKLSsJCQkgIGNobW9k IDc1NSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvbGliL2VuZ2luZXMvJCRwZngkJGwk JHNmeC5uZXc7IFwKLSAJCQkgIG12IC1mICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9s aWIvZW5naW5lcy8kJHBmeCQkbCQkc2Z4Lm5ldyAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRP UCkvbGliL2VuZ2luZXMvJCRwZngkJGwkJHNmeCApOyBcCi0gCQlkb25lOyBcCi0gCWZpCgpkaWZm IC0tZ2l0IGEvb3BlbnNzbC0xLjAuMC1iZXRhMy1maXBzLnBhdGNoIGIvb3BlbnNzbC0xLjAuMC1i ZXRhMy1maXBzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTQwNGU2Li4w MDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtYmV0YTMtZmlwcy5wYXRjaAorKysgL2Rldi9udWxs CkBAIC0xLDEyMTEzICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvQ29uZmln dXJlLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9Db25maWd1cmUKLS0tLSBvcGVuc3NsLTEuMC4w LWJldGEzL0NvbmZpZ3VyZS5maXBzCTIwMDktMDktMzAgMTM6MjU6NTcuMDAwMDAwMDAwICswMjAw Ci0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9Db25maWd1cmUJMjAwOS0wOS0zMCAxMzoyNTo1OC4w MDAwMDAwMDAgKzAyMDAKLUBAIC02NTQsNiArNjU0LDcgQEAgbXkgJGNtbGxfZW5jPSJjYW1lbGxp YS5vIGNtbGxfbWlzYy5vIGNtbAotIG15ICRwcm9jZXNzb3I9IiI7Ci0gbXkgJGRlZmF1bHRfcmFu bGliOwotIG15ICRwZXJsOwotK215ICRmaXBzPTA7Ci0gCi0gCi0gIyBBbGwgb2YgdGhlIGZvbGxv d2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IChSQzUgd2FzIGVuYWJsZWQgYmVmb3JlIDAuOS44 KToKLUBAIC03OTcsNiArNzk4LDEwIEBAIFBST0NFU1NfQVJHUzoKLSAJCQl9Ci0gCQllbHNpZiAo L14zODYkLykKLSAJCQl7ICRwcm9jZXNzb3I9Mzg2OyB9Ci0rCQllbHNpZiAoL15maXBzJC8pCi0r CQkJewotKwkJCSRmaXBzPTE7Ci0rCQkgICAgICAgIH0KLSAJCWVsc2lmICgvXnJzYXJlZiQvKQot IAkJCXsKLSAJCQkjIE5vIFJTQXJlZiBzdXBwb3J0IGFueSBtb3JlIHNpbmNlIGl0J3Mgbm90IG5l ZWRlZC4KLUBAIC0xMzQ5LDYgKzEzNTQsMTEgQEAgJGNmbGFncy49IiAtRE9QRU5TU0xfSUEzMl9T U0UyIiBpZiAoISRubwotIAotICRjZmxhZ3MuPSIgLURPUEVOU1NMX0JOX0FTTV9NT05UIiBpZiAo JGJuX29iaiA9fiAvLW1vbnQvKTsKLSAKLStpZiAoJGZpcHMpCi0rCXsKLSsJJG9wZW5zc2xfb3Ro ZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9GSVBTXG4iOwotKwl9Ci0rCi0gJGNwdWlkX29i aj0ibWVtX2Nsci5vIgl1bmxlc3MgKCRjcHVpZF9vYmogPX4gL1wubyQvKTsKLSAkZGVzX29iaj0k ZGVzX2VuYwl1bmxlc3MgKCRkZXNfb2JqID1+IC9cLm8kLyk7Ci0gJGJmX29iaj0kYmZfZW5jCQl1 bmxlc3MgKCRiZl9vYmogPX4gL1wubyQvKTsKLUBAIC0xNTA0LDYgKzE1MTQsMTAgQEAgd2hpbGUg KDxJTj4pCi0gCXMvXkxJQktSQjU9LiovTElCS1JCNT0kd2l0aGFyZ3N7ImtyYjUtbGliIn0vOwot IAlzL15MSUJaTElCPS4qL0xJQlpMSUI9JHdpdGhhcmdzeyJ6bGliLWxpYiJ9LzsKLSAJcy9eWkxJ Ql9JTkNMVURFPS4qL1pMSUJfSU5DTFVERT0kd2l0aGFyZ3N7InpsaWItaW5jbHVkZSJ9LzsKLSsJ aWYgKCRmaXBzKQotKwkJewotKwkJcy9eRklQUz0uKi9GSVBTPXllcy87Ci0rCQl9Ci0gCXMvXlNI TElCX1RBUkdFVD0uKi9TSExJQl9UQVJHRVQ9JHNoYXJlZF90YXJnZXQvOwotIAlzL15TSExJQl9N QVJLPS4qL1NITElCX01BUks9JHNoYXJlZF9tYXJrLzsKLSAJcy9eU0hBUkVEX0xJQlM9LiovU0hB UkVEX0xJQlM9XCQoU0hBUkVEX0NSWVBUTykgXCQoU0hBUkVEX1NTTCkvIGlmICghJG5vX3NoYXJl ZCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9iZi9iZl9za2V5LmMuZmlw cyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9iZi9iZl9za2V5LmMKLS0tLSBvcGVuc3NsLTEu MC4wLWJldGEzL2NyeXB0by9iZi9iZl9za2V5LmMuZmlwcwkyMDA4LTExLTEyIDA0OjU3OjUyLjAw MDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2JmL2JmX3NrZXku YwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTU5LDEwICs1OSwxNSBA QAotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8 b3BlbnNzbC9ibG93ZmlzaC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0g I2luY2x1ZGUgImJmX2xvY2wuaCIKLSAjaW5jbHVkZSAiYmZfcGkuaCIKLSAKLS12b2lkIEJGX3Nl dF9rZXkoQkZfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCi0r RklQU19OT05fRklQU19WQ0lQSEVSX0luaXQoQkYpCi0gCXsKLSAJaW50IGk7Ci0gCUJGX0xPTkcg KnAscmksaW5bMl07Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9iZi9ibG93 ZmlzaC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vYmYvYmxvd2Zpc2guaAotLS0t IG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2JmL2Jsb3dmaXNoLmguZmlwcwkyMDA5LTA5LTMw IDEzOjI1OjU3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRv L2JmL2Jsb3dmaXNoLmgJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0x MDQsNyArMTA0LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgYmZfa2V5X3N0Ci0gCUJGX0xPTkcgU1s0KjI1 Nl07Ci0gCX0gQkZfS0VZOwotIAotLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTIAotK3ZvaWQgcHJp dmF0ZV9CRl9zZXRfa2V5KEJGX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFy ICpkYXRhKTsKLSsjZW5kaWYKLSB2b2lkIEJGX3NldF9rZXkoQkZfS0VZICprZXksIGludCBsZW4s IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwotIAotIHZvaWQgQkZfZW5jcnlwdChCRl9MT05H ICpkYXRhLGNvbnN0IEJGX0tFWSAqa2V5KTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2JuL2JuLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ibi9ibi5oCi0t LS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vYm4vYm4uaC5maXBzCTIwMDktMDktMzAgMTM6 MjU6NTcuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vYm4v Ym4uaAkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTU0MCw2ICs1NDAs MTcgQEAgaW50CUJOX2lzX3ByaW1lX2V4KGNvbnN0IEJJR05VTSAqcCxpbnQgbgotIGludAlCTl9p c19wcmltZV9mYXN0dGVzdF9leChjb25zdCBCSUdOVU0gKnAsaW50IG5jaGVja3MsIEJOX0NUWCAq Y3R4LAotIAkJaW50IGRvX3RyaWFsX2RpdmlzaW9uLCBCTl9HRU5DQiAqY2IpOwotIAotK2ludCBC Tl9YOTMxX2dlbmVyYXRlX1hwcShCSUdOVU0gKlhwLCBCSUdOVU0gKlhxLCBpbnQgbmJpdHMsIEJO X0NUWCAqY3R4KTsKLSsKLStpbnQgQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgoQklHTlVNICpwLCBC SUdOVU0gKnAxLCBCSUdOVU0gKnAyLAotKwkJCWNvbnN0IEJJR05VTSAqWHAsIGNvbnN0IEJJR05V TSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwKLSsJCQljb25zdCBCSUdOVU0gKmUsIEJOX0NUWCAq Y3R4LCBCTl9HRU5DQiAqY2IpOwotK2ludCBCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KEJJR05V TSAqcCwgQklHTlVNICpwMSwgQklHTlVNICpwMiwKLSsJCQlCSUdOVU0gKlhwMSwgQklHTlVNICpY cDIsCi0rCQkJY29uc3QgQklHTlVNICpYcCwKLSsJCQljb25zdCBCSUdOVU0gKmUsIEJOX0NUWCAq Y3R4LAotKwkJCUJOX0dFTkNCICpjYik7Ci0rCi0gQk5fTU9OVF9DVFggKkJOX01PTlRfQ1RYX25l dyh2b2lkICk7Ci0gdm9pZCBCTl9NT05UX0NUWF9pbml0KEJOX01PTlRfQ1RYICpjdHgpOwotIGlu dCBCTl9tb2RfbXVsX21vbnRnb21lcnkoQklHTlVNICpyLGNvbnN0IEJJR05VTSAqYSxjb25zdCBC SUdOVU0gKmIsCi1kaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8v Ym4vYm5feDkzMXAuYwotLS0tIC9kZXYvbnVsbAkyMDA5LTA5LTIzIDEwOjU2OjAyLjE0ODAwMTc1 MiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2JuL2JuX3g5MzFwLmMJMjAw OS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMjcyIEBACi0rLyog Ym5feDkzMXAuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVA b3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsv KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0 LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRp b24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh dHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZv bGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0r ICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBt dXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAg bGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1h eSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgot KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJl ZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xs b3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0r ICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1Qg YGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pF Q1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs Ci0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRl cyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlA Y3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBi eSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNp bmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rCi0rLyogWDkuMzEg cm91dGluZXMgZm9yIHByaW1lIGRlcml2YXRpb24gKi8KLSsKLSsvKiBYOS4zMSBwcmltZSBkZXJp dmF0aW9uLiBUaGlzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHByaW1lcyBwaQotKyAqIChwMSwg cDIsIHExLCBxMikgZnJvbSBhIHBhcmFtZXRlciBYcGkgYnkgY2hlY2tpbmcgc3VjY2Vzc2l2ZSBv ZGQKLSsgKiBpbnRlZ2Vycy4KLSsgKi8KLSsKLStzdGF0aWMgaW50IGJuX3g5MzFfZGVyaXZlX3Bp KEJJR05VTSAqcGksIGNvbnN0IEJJR05VTSAqWHBpLCBCTl9DVFggKmN0eCwKLSsJCQlCTl9HRU5D QiAqY2IpCi0rCXsKLSsJaW50IGkgPSAwOwotKwlpZiAoIUJOX2NvcHkocGksIFhwaSkpCi0rCQly ZXR1cm4gMDsKLSsJaWYgKCFCTl9pc19vZGQocGkpICYmICFCTl9hZGRfd29yZChwaSwgMSkpCi0r CQlyZXR1cm4gMDsKLSsJZm9yKDs7KQotKwkJewotKwkJaSsrOwotKwkJQk5fR0VOQ0JfY2FsbChj YiwgMCwgaSk7Ci0rCQkvKiBOQiAyNyBNUiBpcyBzcGVjaWZpY2VkIGluIFg5LjMxICovCi0rCQlp ZiAoQk5faXNfcHJpbWVfZmFzdHRlc3RfZXgocGksIDI3LCBjdHgsIDEsIGNiKSkKLSsJCQlicmVh azsKLSsJCWlmICghQk5fYWRkX3dvcmQocGksIDIpKQotKwkJCXJldHVybiAwOwotKwkJfQotKwlC Tl9HRU5DQl9jYWxsKGNiLCAyLCBpKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsvKiBUaGlzIGlz IHRoZSBtYWluIFg5LjMxIHByaW1lIGRlcml2YXRpb24gZnVuY3Rpb24uIEZyb20gcGFyYW1ldGVy cwotKyAqIFhwMSwgWHAyIGFuZCBYcCBkZXJpdmUgdGhlIHByaW1lIHAuIElmIHRoZSBwYXJhbWV0 ZXJzIHAxIG9yIHAyIGFyZQotKyAqIG5vdCBOVUxMIHRoZXkgd2lsbCBiZSByZXR1cm5lZCB0b286 IHRoaXMgaXMgbmVlZGVkIGZvciB0ZXN0aW5nLgotKyAqLwotKwotK2ludCBCTl9YOTMxX2Rlcml2 ZV9wcmltZV9leChCSUdOVU0gKnAsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsCi0rCQkJY29uc3Qg QklHTlVNICpYcCwgY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLAotKwkJCWNv bnN0IEJJR05VTSAqZSwgQk5fQ1RYICpjdHgsIEJOX0dFTkNCICpjYikKLSsJewotKwlpbnQgcmV0 ID0gMDsKLSsKLSsJQklHTlVNICp0LCAqcDFwMiwgKnBtMTsKLSsKLSsJLyogT25seSBldmVuIGUg c3VwcG9ydGVkICovCi0rCWlmICghQk5faXNfb2RkKGUpKQotKwkJcmV0dXJuIDA7Ci0rCi0rCUJO X0NUWF9zdGFydChjdHgpOwotKwlpZiAoIXAxKQotKwkJcDEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0r Ci0rCWlmICghcDIpCi0rCQlwMiA9IEJOX0NUWF9nZXQoY3R4KTsKLSsKLSsJdCA9IEJOX0NUWF9n ZXQoY3R4KTsKLSsKLSsJcDFwMiA9IEJOX0NUWF9nZXQoY3R4KTsKLSsKLSsJcG0xID0gQk5fQ1RY X2dldChjdHgpOwotKwotKwlpZiAoIWJuX3g5MzFfZGVyaXZlX3BpKHAxLCBYcDEsIGN0eCwgY2Ip KQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICghYm5feDkzMV9kZXJpdmVfcGkocDIsIFhwMiwgY3R4 LCBjYikpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKCFCTl9tdWwocDFwMiwgcDEsIHAyLCBjdHgp KQotKwkJZ290byBlcnI7Ci0rCi0rCS8qIEZpcnN0IHNldCBwIHRvIHZhbHVlIG9mIFJwICovCi0r Ci0rCWlmICghQk5fbW9kX2ludmVyc2UocCwgcDIsIHAxLCBjdHgpKQotKwkJZ290byBlcnI7Ci0r Ci0rCWlmICghQk5fbXVsKHAsIHAsIHAyLCBjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICgh Qk5fbW9kX2ludmVyc2UodCwgcDEsIHAyLCBjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICgh Qk5fbXVsKHQsIHQsIHAxLCBjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICghQk5fc3ViKHAs IHAsIHQpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmIChwLT5uZWcgJiYgIUJOX2FkZChwLCBwLCBw MXAyKSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBwIG5vdyBlcXVhbHMgUnAgKi8KLSsKLSsJaWYg KCFCTl9tb2Rfc3ViKHAsIHAsIFhwLCBwMXAyLCBjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlm ICghQk5fYWRkKHAsIHAsIFhwKSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBwIG5vdyBlcXVhbHMg WXAwICovCi0rCi0rCWZvciAoOzspCi0rCQl7Ci0rCQlpbnQgaSA9IDE7Ci0rCQlCTl9HRU5DQl9j YWxsKGNiLCAwLCBpKyspOwotKwkJaWYgKCFCTl9jb3B5KHBtMSwgcCkpCi0rCQkJZ290byBlcnI7 Ci0rCQlpZiAoIUJOX3N1Yl93b3JkKHBtMSwgMSkpCi0rCQkJZ290byBlcnI7Ci0rCQlpZiAoIUJO X2djZCh0LCBwbTEsIGUsIGN0eCkpCi0rCQkJZ290byBlcnI7Ci0rCQlpZiAoQk5faXNfb25lKHQp Ci0rCQkvKiBYOS4zMSBzcGVjaWZpZXMgOCBNUiBhbmQgMSBMdWNhcyB0ZXN0IG9yIGFueSBwcmlt ZSB0ZXN0Ci0rCQkgKiBvZmZlcmluZyBzaW1pbGFyIG9yIGJldHRlciBndWFyYW50ZWVzIDUwIE1S IGlzIGNvbnNpZGVyYWJseSAKLSsJCSAqIGJldHRlci4KLSsJCSAqLwotKwkJCSYmIEJOX2lzX3By aW1lX2Zhc3R0ZXN0X2V4KHAsIDUwLCBjdHgsIDEsIGNiKSkKLSsJCQlicmVhazsKLSsJCWlmICgh Qk5fYWRkKHAsIHAsIHAxcDIpKQotKwkJCWdvdG8gZXJyOwotKwkJfQotKwotKwlCTl9HRU5DQl9j YWxsKGNiLCAzLCAwKTsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyOgotKwotKwlCTl9DVFhfZW5k KGN0eCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLSsvKiBHZW5lcmF0ZSBwYWlyIG9mIHBh cmFtdGVycyBYcCwgWHEgZm9yIFg5LjMxIHByaW1lIGdlbmVyYXRpb24uCi0rICogTm90ZTogbmJp dHMgcGFyYW10ZXIgaXMgc3VtIG9mIG51bWJlciBvZiBiaXRzIGluIGJvdGguCi0rICovCi0rCi0r aW50IEJOX1g5MzFfZ2VuZXJhdGVfWHBxKEJJR05VTSAqWHAsIEJJR05VTSAqWHEsIGludCBuYml0 cywgQk5fQ1RYICpjdHgpCi0rCXsKLSsJQklHTlVNICp0OwotKwlpbnQgaTsKLSsJLyogTnVtYmVy IG9mIGJpdHMgZm9yIGVhY2ggcHJpbWUgaXMgb2YgdGhlIGZvcm0KLSsJICogNTEyKzEyOHMgZm9y IHMgPSAwLCAxLCAuLi4KLSsJICovCi0rCWlmICgobmJpdHMgPCAxMDI0KSB8fCAobmJpdHMgJiAw eGZmKSkKLSsJCXJldHVybiAwOwotKwluYml0cyA+Pj0gMTsKLSsJLyogVGhlIHJhbmRvbSB2YWx1 ZSBYcCBtdXN0IGJlIGJldHdlZW4gc3FydCgyKSAqIDJeKG5iaXRzLTEpIGFuZAotKwkgKiAyXm5i aXRzIC0gMS4gQnkgc2V0dGluZyB0aGUgdG9wIHR3byBiaXRzIHdlIGVuc3VyZSB0aGF0IHRoZSBs b3dlcgotKwkgKiBib3VuZCBpcyBleGNlZWRlZC4KLSsJICovCi0rCWlmICghQk5fcmFuZChYcCwg bmJpdHMsIDEsIDApKQotKwkJcmV0dXJuIDA7Ci0rCi0rCUJOX0NUWF9zdGFydChjdHgpOwotKwl0 ID0gQk5fQ1RYX2dldChjdHgpOwotKwotKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKQotKwkJ ewotKwkJaWYgKCFCTl9yYW5kKFhxLCBuYml0cywgMSwgMCkpCi0rCQkJcmV0dXJuIDA7Ci0rCQkv KiBDaGVjayB0aGF0IHxYcCAtIFhxfCA+IDJeKG5iaXRzIC0gMTAwKSAqLwotKwkJQk5fc3ViKHQs IFhwLCBYcSk7Ci0rCQlpZiAoQk5fbnVtX2JpdHModCkgPiAobmJpdHMgLSAxMDApKQotKwkJCWJy ZWFrOwotKwkJfQotKwotKwlCTl9DVFhfZW5kKGN0eCk7Ci0rCi0rCWlmIChpIDwgMTAwMCkKLSsJ CXJldHVybiAxOwotKwotKwlyZXR1cm4gMDsKLSsKLSsJfQotKwotKy8qIEdlbmVyYXRlIHByaW1l cyB1c2luZyBYOS4zMSBhbGdvcml0aG0uIE9mIHRoZSB2YWx1ZXMgcCwgcDEsIHAyLCBYcDEKLSsg KiBhbmQgWHAyIG9ubHkgJ3AnIG5lZWRzIHRvIGJlIG5vbi1OVUxMLiBJZiBhbnkgb2YgdGhlIG90 aGVycyBhcmUgbm90IE5VTEwKLSsgKiB0aGUgcmVsZXZhbnQgcGFyYW1ldGVyIHdpbGwgYmUgc3Rv cmVkIGluIGl0LgotKyAqCi0rICogRHVlIHRvIHRoZSBmYWN0IHRoYXQgfFhwIC0gWHF8ID4gMl4o bmJpdHMgLSAxMDApIG11c3QgYmUgc2F0aXNmaWVkIFhwIGFuZCBYcQotKyAqIGFyZSBnZW5lcmF0 ZWQgdXNpbmcgdGhlIHByZXZpb3VzIGZ1bmN0aW9uIGFuZCBzdXBwbGllZCBhcyBpbnB1dC4KLSsg Ki8KLSsKLStpbnQgQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChCSUdOVU0gKnAsIEJJR05VTSAq cDEsIEJJR05VTSAqcDIsCi0rCQkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLAotKwkJCWNvbnN0 IEJJR05VTSAqWHAsCi0rCQkJY29uc3QgQklHTlVNICplLCBCTl9DVFggKmN0eCwKLSsJCQlCTl9H RU5DQiAqY2IpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCi0rCUJOX0NUWF9zdGFydChjdHgpOwot KwlpZiAoIVhwMSkKLSsJCVhwMSA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJaWYgKCFYcDIpCi0rCQlY cDIgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCi0rCWlmICghQk5fcmFuZChYcDEsIDEwMSwgMCwgMCkp Ci0rCQlnb3RvIGVycm9yOwotKwlpZiAoIUJOX3JhbmQoWHAyLCAxMDEsIDAsIDApKQotKwkJZ290 byBlcnJvcjsKLSsJaWYgKCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChwLCBwMSwgcDIsIFhwLCBY cDEsIFhwMiwgZSwgY3R4LCBjYikpCi0rCQlnb3RvIGVycm9yOwotKwotKwlyZXQgPSAxOwotKwot KwllcnJvcjoKLSsJQk5fQ1RYX2VuZChjdHgpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwl9Ci0r Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ibi9NYWtlZmlsZS5maXBzIG9w ZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2JuL01ha2VmaWxlCi0tLS0gb3BlbnNzbC0xLjAuMC1i ZXRhMy9jcnlwdG8vYm4vTWFrZWZpbGUuZmlwcwkyMDA4LTExLTEyIDA5OjE5OjAyLjAwMDAwMDAw MCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2JuL01ha2VmaWxlCTIwMDkt MDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtMjYsMTMgKzI2LDEzIEBAIExJQlNS Qz0JYm5fYWRkLmMgYm5fZGl2LmMgYm5fZXhwLmMgYm5fbGkKLSAJYm5fcHJpbnQuYyBibl9yYW5k LmMgYm5fc2hpZnQuYyBibl93b3JkLmMgYm5fYmxpbmQuYyBcCi0gCWJuX2tyb24uYyBibl9zcXJ0 LmMgYm5fZ2NkLmMgYm5fcHJpbWUuYyBibl9lcnIuYyBibl9zcXIuYyBibl9hc20uYyBcCi0gCWJu X3JlY3AuYyBibl9tb250LmMgYm5fbXBpLmMgYm5fZXhwMi5jIGJuX2dmMm0uYyBibl9uaXN0LmMg XAotLQlibl9kZXByLmMgYm5fY29uc3QuYwotKwlibl9kZXByLmMgYm5fY29uc3QuYyBibl94OTMx cC5jCi0gCi0gTElCT0JKPQlibl9hZGQubyBibl9kaXYubyBibl9leHAubyBibl9saWIubyBibl9j dHgubyBibl9tdWwubyBibl9tb2QubyBcCi0gCWJuX3ByaW50Lm8gYm5fcmFuZC5vIGJuX3NoaWZ0 Lm8gYm5fd29yZC5vIGJuX2JsaW5kLm8gXAotIAlibl9rcm9uLm8gYm5fc3FydC5vIGJuX2djZC5v IGJuX3ByaW1lLm8gYm5fZXJyLm8gYm5fc3FyLm8gJChCTl9BU00pIFwKLSAJYm5fcmVjcC5vIGJu X21vbnQubyBibl9tcGkubyBibl9leHAyLm8gYm5fZ2YybS5vIGJuX25pc3QubyBcCi0tCWJuX2Rl cHIubyBibl9jb25zdC5vCi0rCWJuX2RlcHIubyBibl9jb25zdC5vIGJuX3g5MzFwLm8KLSAKLSBT UkM9ICQoTElCU1JDKQotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vY2Ft ZWxsaWEvYXNtL2NtbGwteDg2LnBsLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vY2Ft ZWxsaWEvYXNtL2NtbGwteDg2LnBsCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vY2Ft ZWxsaWEvYXNtL2NtbGwteDg2LnBsLmZpcHMJMjAwOS0wNC0wNiAxNjoyNTowMi4wMDAwMDAwMDAg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9jYW1lbGxpYS9hc20vY21sbC14 ODYucGwJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC03MjIsMTIgKzcy MiwxNSBAQCBteSAkYmlhcz1pbnQoQFRbMF0pP3NoaWZ0KEBUKTowOwotIH0KLSAmZnVuY3Rpb25f ZW5kKCJDYW1lbGxpYV9Fa2V5Z2VuIik7Ci0gCi0rJHNldGtleWZ1bmMgPSAiQ2FtZWxsaWFfc2V0 X2tleSI7Ci0rJHNldGtleWZ1bmMgPSAicHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5IiBpZiAoJEVO VntGSVBTfSBuZSAiIik7Ci0rCi0gaWYgKCRPUEVOU1NMKSB7Ci0gIyBpbnQgQ2FtZWxsaWFfc2V0 X2tleSAoCi0gIwkJY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwKLSAjCQlpbnQgYml0cywK LSAjCQlDQU1FTExJQV9LRVkgKmtleSkKLS0mZnVuY3Rpb25fYmVnaW5fQigiQ2FtZWxsaWFfc2V0 X2tleSIpOwotKyZmdW5jdGlvbl9iZWdpbl9CKCRzZXRrZXlmdW5jKTsKLSAJJnB1c2gJKCJlYngi KTsKLSAJJm1vdgkoImVjeCIsJndwYXJhbSgwKSk7CSMgcHVsbCBhcmd1bWVudHMKLSAJJm1vdgko ImVieCIsJndwYXJhbSgxKSk7Ci1AQCAtNzYwLDcgKzc2Myw3IEBAIGlmICgkT1BFTlNTTCkgewot ICZzZXRfbGFiZWwoImRvbmUiLDQpOwotIAkmcG9wCSgiZWJ4Iik7Ci0gCSZyZXQJKCk7Ci0tJmZ1 bmN0aW9uX2VuZF9CKCJDYW1lbGxpYV9zZXRfa2V5Iik7Ci0rJmZ1bmN0aW9uX2VuZF9CKCRzZXRr ZXlmdW5jKTsKLSB9Ci0gCi0gQFNCT1g9KAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9j cnlwdG8vY2FtZWxsaWEvY2FtZWxsaWEuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRv L2NhbWVsbGlhL2NhbWVsbGlhLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9jYW1l bGxpYS9jYW1lbGxpYS5oLmZpcHMJMjAwOS0wOS0zMCAxMzoyNTo1Ni4wMDAwMDAwMDAgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9jYW1lbGxpYS9jYW1lbGxpYS5oCTIwMDkt MDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtODgsNiArODgsMTEgQEAgc3RydWN0 IGNhbWVsbGlhX2tleV9zdCAKLSAJfTsKLSB0eXBlZGVmIHN0cnVjdCBjYW1lbGxpYV9rZXlfc3Qg Q0FNRUxMSUFfS0VZOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgcHJpdmF0ZV9DYW1l bGxpYV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRz LAotKwlDQU1FTExJQV9LRVkgKmtleSk7Ci0rI2VuZGlmCi0rCi0gaW50IENhbWVsbGlhX3NldF9r ZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCi0gCUNBTUVM TElBX0tFWSAqa2V5KTsKLSAKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGEz L2NyeXB0by9jYW1lbGxpYS9jbWxsX2ZibGsuYwotLS0tIC9kZXYvbnVsbAkyMDA5LTA5LTIzIDEw OjU2OjAyLjE0ODAwMTc1MiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2Nh bWVsbGlhL2NtbGxfZmJsay5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1A QCAtMCwwICsxLDY4IEBACi0rLyogY3J5cHRvL2NhbWVsbGlhL2NhbWVsbGlhX21pc2MuYyAtKi0g bW9kZTpDOyBjLWZpbGUtc3R5bGU6ICJlYXkiIC0qLSAqLwotKy8qID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICog Q29weXJpZ2h0IChjKSAyMDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsg KgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdt ZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9w ZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8K LSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0 ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNz bC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBt YXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBl YXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lv biBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9m IGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFj a25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFO WQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICog QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKyAqCi0rICovCi0rIAotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY2FtZWxsaWEuaD4KLSsjaW5jbHVkZSAiY21sbF9sb2NsLmgi Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0raW50IENhbWVsbGlhX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29u c3QgaW50IGJpdHMsCi0rCUNBTUVMTElBX0tFWSAqa2V5KQotKwl7Ci0rCWlmIChGSVBTX21vZGUo KSkKLSsJCUZJUFNfQkFEX0FCT1JUKENBTUVMTElBKQotKwlyZXR1cm4gcHJpdmF0ZV9DYW1lbGxp YV9zZXRfa2V5KHVzZXJLZXksIGJpdHMsIGtleSk7Ci0rCX0KLSsjZW5kaWYKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2NhbWVsbGlhL2NtbGxfbWlzYy5jLmZpcHMgb3BlbnNz bC0xLjAuMC1iZXRhMy9jcnlwdG8vY2FtZWxsaWEvY21sbF9taXNjLmMKLS0tLSBvcGVuc3NsLTEu MC4wLWJldGEzL2NyeXB0by9jYW1lbGxpYS9jbWxsX21pc2MuYy5maXBzCTIwMDgtMTAtMjggMTM6 MTM6NTIuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vY2Ft ZWxsaWEvY21sbF9taXNjLmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBA IC01MiwxMSArNTIsMjAgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotICNpbmNs dWRlIDxvcGVuc3NsL2NhbWVsbGlhLmg+Ci0gI2luY2x1ZGUgImNtbGxfbG9jbC5oIgotKyNpbmNs dWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0gCi0gY29uc3QgY2hhciBDQU1FTExJQV92ZXJzaW9u W109IkNBTUVMTElBIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7Ci0gCi0rI2lmZGVmIE9QRU5TU0xf RklQUwotK2ludCBwcml2YXRlX0NhbWVsbGlhX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAq dXNlcktleSwgY29uc3QgaW50IGJpdHMsCi0rCUNBTUVMTElBX0tFWSAqa2V5KQotKyNlbHNlCi0g aW50IENhbWVsbGlhX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3Qg aW50IGJpdHMsCi0gCUNBTUVMTElBX0tFWSAqa2V5KQotKyNlbmRpZgotIAl7Ci0gCWlmKCF1c2Vy S2V5IHx8ICFrZXkpCi0gCQlyZXR1cm4gLTE7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEz L2NyeXB0by9jYW1lbGxpYS9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRv L2NhbWVsbGlhL01ha2VmaWxlCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vY2FtZWxs aWEvTWFrZWZpbGUuZmlwcwkyMDA4LTEyLTIzIDEyOjMzOjAwLjAwMDAwMDAwMCArMDEwMAotKysr IG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2NhbWVsbGlhL01ha2VmaWxlCTIwMDktMDktMzAg MTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtMjMsOSArMjMsOSBAQCBBUFBTPQotIAotIExJ Qj0kKFRPUCkvbGliY3J5cHRvLmEKLSBMSUJTUkM9Y2FtZWxsaWEuYyBjbWxsX21pc2MuYyBjbWxs X2VjYi5jIGNtbGxfY2JjLmMgY21sbF9vZmIuYyBcCi0tCSAgIGNtbGxfY2ZiLmMgY21sbF9jdHIu YyAKLSsJICAgY21sbF9jZmIuYyBjbWxsX2N0ci5jIGNtbGxfZmJsay5jCi0gCi0tTElCT0JKPSBj bWxsX2VjYi5vIGNtbGxfb2ZiLm8gY21sbF9jZmIubyBjbWxsX2N0ci5vICQoQ01MTF9FTkMpCi0r TElCT0JKPSBjbWxsX2VjYi5vIGNtbGxfb2ZiLm8gY21sbF9jZmIubyBjbWxsX2N0ci5vICQoQ01M TF9FTkMpIGNtbGxfZmJsay5vCi0gCi0gU1JDPSAkKExJQlNSQykKLSAKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjAtYmV0YTMvY3J5cHRvL2Nhc3QvY2FzdC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRh My9jcnlwdG8vY2FzdC9jYXN0LmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9jYXN0 L2Nhc3QuaC5maXBzCTIwMDktMDktMzAgMTM6MjU6NTcuMDAwMDAwMDAwICswMjAwCi0rKysgb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vY2FzdC9jYXN0LmgJMjAwOS0wOS0zMCAxMzoyNTo1OC4w MDAwMDAwMDAgKzAyMDAKLUBAIC04Myw3ICs4Myw5IEBAIHR5cGVkZWYgc3RydWN0IGNhc3Rfa2V5 X3N0Ci0gCWludCBzaG9ydF9rZXk7CS8qIFVzZSByZWR1Y2VkIHJvdW5kcyBmb3Igc2hvcnQga2V5 ICovCi0gCX0gQ0FTVF9LRVk7Ci0gCi0tIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMgCi0rdm9pZCBw cml2YXRlX0NBU1Rfc2V0X2tleShDQVNUX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25l ZCBjaGFyICpkYXRhKTsKLSsjZW5kaWYKLSB2b2lkIENBU1Rfc2V0X2tleShDQVNUX0tFWSAqa2V5 LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKLSB2b2lkIENBU1RfZWNiX2Vu Y3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sdW5zaWduZWQgY2hhciAqb3V0LENBU1RfS0VZ ICprZXksCi0gCQkgICAgICBpbnQgZW5jKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2Nhc3QvY19za2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9jYXN0 L2Nfc2tleS5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vY2FzdC9jX3NrZXkuYy5m aXBzCTIwMDAtMDYtMDMgMTY6MTM6MzUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhMy9jcnlwdG8vY2FzdC9jX3NrZXkuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAw MCArMDIwMAotQEAgLTU3LDYgKzU3LDExIEBACi0gICovCi0gCi0gI2luY2x1ZGUgPG9wZW5zc2wv Y2FzdC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gI2luY2x1ZGUgImNh c3RfbGNsLmgiCi0gI2luY2x1ZGUgImNhc3Rfcy5oIgotIAotQEAgLTcyLDcgKzc3LDcgQEAKLSAj ZGVmaW5lIFM2IENBU1RfU190YWJsZTYKLSAjZGVmaW5lIFM3IENBU1RfU190YWJsZTcKLSAKLS12 b2lkIENBU1Rfc2V0X2tleShDQVNUX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBj aGFyICpkYXRhKQotK0ZJUFNfTk9OX0ZJUFNfVkNJUEhFUl9Jbml0KENBU1QpCi0gCXsKLSAJQ0FT VF9MT05HIHhbMTZdOwotIAlDQVNUX0xPTkcgelsxNl07Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4w LWJldGEzL2NyeXB0by9jcnlwdG8uaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2Ny eXB0by5oCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vY3J5cHRvLmguZmlwcwkyMDA5 LTA5LTMwIDEzOjI1OjU3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2NyeXB0by5oCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAt NTQ2LDEyICs1NDYsNjkgQEAgdm9pZCBPcGVuU1NMRGllKGNvbnN0IGNoYXIgKmZpbGUsaW50IGxp bgotIHVuc2lnbmVkIGxvbmcgKk9QRU5TU0xfaWEzMmNhcF9sb2Modm9pZCk7Ci0gI2RlZmluZSBP UEVOU1NMX2lhMzJjYXAgKCooT1BFTlNTTF9pYTMyY2FwX2xvYygpKSkKLSAKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rI2RlZmluZSBGSVBTX0VSUk9SX0lHTk9SRUQoYWxnKSBPcGVuU1NMRGllKF9f RklMRV9fLCBfX0xJTkVfXywgXAotKwkJYWxnICIgcHJldmlvdXMgRklQUyBmb3JiaWRkZW4gYWxn b3JpdGhtIGVycm9yIGlnbm9yZWQiKTsKLSsKLSsjZGVmaW5lIEZJUFNfQkFEX0FCT1JUKGFsZykg T3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKLSsJCSNhbGcgIiBBbGdvcml0aG0gZm9y YmlkZGVuIGluIEZJUFMgbW9kZSIpOwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFNfU1RSSUNUCi0r I2RlZmluZSBGSVBTX0JBRF9BTEdPUklUSE0oYWxnKSBGSVBTX0JBRF9BQk9SVChhbGcpCi0rI2Vs c2UKLSsjZGVmaW5lIEZJUFNfQkFEX0FMR09SSVRITShhbGcpIFwKLSsJeyBcCi0rCUZJUFNlcnIo RklQU19GX0hBU0hfRklOQUwsRklQU19SX05PTl9GSVBTX01FVEhPRCk7IFwKLSsJRVJSX2FkZF9l cnJvcl9kYXRhKDIsICJBbGdvcml0aG09IiwgI2FsZyk7IFwKLSsJcmV0dXJuIDA7IFwKLSsJfQot KyNlbmRpZgotKwotKy8qIExvdyBsZXZlbCBkaWdlc3QgQVBJIGJsb2NraW5nIG1hY3JvICovCi0r Ci0rI2RlZmluZSBGSVBTX05PTl9GSVBTX01EX0luaXQoYWxnKSBcCi0rCWludCBhbGcjI19Jbml0 KGFsZyMjX0NUWCAqYykgXAotKwkJeyBcCi0rCQlpZiAoRklQU19tb2RlKCkpIFwKLSsJCQlGSVBT X0JBRF9BTEdPUklUSE0oYWxnKSBcCi0rCQlyZXR1cm4gcHJpdmF0ZV8jI2FsZyMjX0luaXQoYyk7 IFwKLSsJCX0gXAotKwlpbnQgcHJpdmF0ZV8jI2FsZyMjX0luaXQoYWxnIyNfQ1RYICpjKQotKwot Ky8qIEZvciBjaXBoZXJzIHRoZSBBUEkgb2Z0ZW4gdmFyaWVzIGZyb20gY2lwaGVyIHRvIGNpcGhl ciBhbmQgZWFjaCBuZWVkcyB0bwotKyAqIGJlIHRyZWF0ZWQgYXMgYSBzcGVjaWFsIGNhc2UuIFZh cmlhYmxlIGtleSBsZW5ndGggY2lwaGVycyAoQmxvd2Zpc2gsIFJDNCwKLSsgKiBDQVNUKSBob3dl dmVyIGFyZSB2ZXJ5IHNpbWlsYXIgYW5kIGNhbiB1c2UgYSBibG9ja2luZyBtYWNyby4KLSsgKi8K LSsKLSsjZGVmaW5lIEZJUFNfTk9OX0ZJUFNfVkNJUEhFUl9Jbml0KGFsZykgXAotKwl2b2lkIGFs ZyMjX3NldF9rZXkoYWxnIyNfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmRhdGEpIFwKLSsJCXsgXAotKwkJaWYgKEZJUFNfbW9kZSgpKSBcCi0rCQkJRklQU19CQURfQUJP UlQoYWxnKSBcCi0rCQlwcml2YXRlXyMjYWxnIyNfc2V0X2tleShrZXksIGxlbiwgZGF0YSk7IFwK LSsJCX0gXAotKwl2b2lkIHByaXZhdGVfIyNhbGcjI19zZXRfa2V5KGFsZyMjX0tFWSAqa2V5LCBp bnQgbGVuLCBcCi0rCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQotKwotKyNlbHNlCi0r Ci0rI2RlZmluZSBGSVBTX05PTl9GSVBTX1ZDSVBIRVJfSW5pdChhbGcpIFwKLSsJdm9pZCBhbGcj I19zZXRfa2V5KGFsZyMjX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpk YXRhKQotKwotKyNkZWZpbmUgRklQU19OT05fRklQU19NRF9Jbml0KGFsZykgXAotKwlpbnQgYWxn IyNfSW5pdChhbGcjI19DVFggKmMpIAotKwotKyNlbmRpZiAvKiBkZWYgT1BFTlNTTF9GSVBTICov Ci0rCi0gLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KLSAvKiBUaGUgZm9sbG93aW5nIGxpbmVzIGFy ZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcwotICAq IG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0 IGlzIG5leHQgcnVuLgotICAqLwotIHZvaWQgRVJSX2xvYWRfQ1JZUFRPX3N0cmluZ3Modm9pZCk7 Ci0gCi0rI2RlZmluZSBPUEVOU1NMX0hBVkVfSU5JVAkxCi0rdm9pZCBPUEVOU1NMX2luaXRfbGli cmFyeSh2b2lkKTsKLSsKLSAvKiBFcnJvciBjb2RlcyBmb3IgdGhlIENSWVBUTyBmdW5jdGlvbnMu ICovCi0gCi0gLyogRnVuY3Rpb24gY29kZXMuICovCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGEzL2NyeXB0by9kaC9kaF9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2Ro L2RoX2Vyci5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZGgvZGhfZXJyLmMuZmlw cwkyMDA2LTExLTIxIDIyOjI5OjM3LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAt YmV0YTMvY3J5cHRvL2RoL2RoX2Vyci5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICsw MjAwCi1AQCAtNzMsNiArNzMsOCBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIERIX3N0cl9mdW5j dHNbXT0KLSB7RVJSX0ZVTkMoREhfRl9DT01QVVRFX0tFWSksCSJDT01QVVRFX0tFWSJ9LAotIHtF UlJfRlVOQyhESF9GX0RIUEFSQU1TX1BSSU5UX0ZQKSwJIkRIcGFyYW1zX3ByaW50X2ZwIn0sCi0g e0VSUl9GVU5DKERIX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMpLAkiREhfQlVJTFRJTl9HRU5QQVJB TVMifSwKLSt7RVJSX0ZVTkMoREhfRl9ESF9DT01QVVRFX0tFWSksCSJESF9jb21wdXRlX2tleSJ9 LAotK3tFUlJfRlVOQyhESF9GX0RIX0dFTkVSQVRFX0tFWSksCSJESF9nZW5lcmF0ZV9rZXkifSwK LSB7RVJSX0ZVTkMoREhfRl9ESF9ORVdfTUVUSE9EKSwJIkRIX25ld19tZXRob2QifSwKLSB7RVJS X0ZVTkMoREhfRl9ESF9QQVJBTV9ERUNPREUpLAkiREhfUEFSQU1fREVDT0RFIn0sCi0ge0VSUl9G VU5DKERIX0ZfREhfUFJJVl9ERUNPREUpLAkiREhfUFJJVl9ERUNPREUifSwKLUBAIC05NCw2ICs5 Niw3IEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgREhfc3RyX3JlYXNvbnNbXT0KLSB7RVJSX1JF QVNPTihESF9SX0JOX0VSUk9SKSAgICAgICAgICAgICAgICwiYm4gZXJyb3IifSwKLSB7RVJSX1JF QVNPTihESF9SX0RFQ09ERV9FUlJPUikgICAgICAgICAgICwiZGVjb2RlIGVycm9yIn0sCi0ge0VS Ul9SRUFTT04oREhfUl9JTlZBTElEX1BVQktFWSkgICAgICAgICAsImludmFsaWQgcHVibGljIGtl eSJ9LAotK3tFUlJfUkVBU09OKERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKSAgICAgLCJrZXkgc2l6 ZSB0b28gc21hbGwifSwKLSB7RVJSX1JFQVNPTihESF9SX0tFWVNfTk9UX1NFVCkgICAgICAgICAg ICwia2V5cyBub3Qgc2V0In0sCi0ge0VSUl9SRUFTT04oREhfUl9NT0RVTFVTX1RPT19MQVJHRSkg ICAgICAsIm1vZHVsdXMgdG9vIGxhcmdlIn0sCi0ge0VSUl9SRUFTT04oREhfUl9OT19QQVJBTUVU RVJTX1NFVCkgICAgICAsIm5vIHBhcmFtZXRlcnMgc2V0In0sCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4wLWJldGEzL2NyeXB0by9kaC9kaF9nZW4uYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5 cHRvL2RoL2RoX2dlbi5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZGgvZGhfZ2Vu LmMuZmlwcwkyMDA1LTA0LTI2IDIwOjUzOjE1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wt MS4wLjAtYmV0YTMvY3J5cHRvL2RoL2RoX2dlbi5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAw MDAwICswMjAwCi1AQCAtNjUsNiArNjUsMTAgQEAKLSAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSAj aW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAKLSBzdGF0aWMgaW50IGRoX2J1aWx0aW5fZ2VucGFyYW1z KERIICpyZXQsIGludCBwcmltZV9sZW4sIGludCBnZW5lcmF0b3IsIEJOX0dFTkNCICpjYik7Ci0g Ci1AQCAtMTA2LDYgKzExMCwyMCBAQCBzdGF0aWMgaW50IGRoX2J1aWx0aW5fZ2VucGFyYW1zKERI ICpyZXQsCi0gCWludCBnLG9rPSAtMTsKLSAJQk5fQ1RYICpjdHg9TlVMTDsKLSAKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBT ZXJyKEZJUFNfRl9ESF9CVUlMVElOX0dFTlBBUkFNUyxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlM RUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCi0rCWlmIChGSVBTX21vZGUoKSAmJiAocHJpbWVf bGVuIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJREhlcnIo REhfRl9ESF9CVUlMVElOX0dFTlBBUkFNUywgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJ Z290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWN0eD1CTl9DVFhfbmV3KCk7Ci0gCWlmIChj dHggPT0gTlVMTCkgZ290byBlcnI7Ci0gCUJOX0NUWF9zdGFydChjdHgpOwotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZGgvZGguaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2RoL2RoLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9kaC9kaC5oLmZp cHMJMjAwOS0wOS0zMCAxMzoyNTo1Ny4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4w LWJldGEzL2NyeXB0by9kaC9kaC5oCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAw Ci1AQCAtNzcsNiArNzcsOCBAQAotICMgZGVmaW5lIE9QRU5TU0xfREhfTUFYX01PRFVMVVNfQklU UwkxMDAwMAotICNlbmRpZgotIAotKyNkZWZpbmUgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVT X0JJVFMgMTAyNAotKwotICNkZWZpbmUgREhfRkxBR19DQUNIRV9NT05UX1AgICAgIDB4MDEKLSAj ZGVmaW5lIERIX0ZMQUdfTk9fRVhQX0NPTlNUVElNRSAweDAyIC8qIG5ldyB3aXRoIDAuOS43aDsg dGhlIGJ1aWx0LWluIERICi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KiBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyBjb25zdGFudCB0aW1lCi1AQCAtMjQwLDYgKzI0Miw4 IEBAIHZvaWQgRVJSX2xvYWRfREhfc3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5lIERIX0ZfR0VORVJB VEVfUEFSQU1FVEVSUwkJCSAxMDQKLSAjZGVmaW5lIERIX0ZfUEtFWV9ESF9ERVJJVkUJCQkJIDEx MgotICNkZWZpbmUgREhfRl9QS0VZX0RIX0tFWUdFTgkJCQkgMTEzCi0rI2RlZmluZSBESF9GX0RI X0NPTVBVVEVfS0VZCQkJCSAxMTQKLSsjZGVmaW5lIERIX0ZfREhfR0VORVJBVEVfS0VZCQkJIDEx NQotIAotIC8qIFJlYXNvbiBjb2Rlcy4gKi8KLSAjZGVmaW5lIERIX1JfQkFEX0dFTkVSQVRPUgkJ CQkgMTAxCi1AQCAtMjUyLDYgKzI1Niw3IEBAIHZvaWQgRVJSX2xvYWRfREhfc3RyaW5ncyh2b2lk KTsKLSAjZGVmaW5lIERIX1JfTk9fUEFSQU1FVEVSU19TRVQJCQkJIDEwNwotICNkZWZpbmUgREhf Ul9OT19QUklWQVRFX1ZBTFVFCQkJCSAxMDAKLSAjZGVmaW5lIERIX1JfUEFSQU1FVEVSX0VOQ09E SU5HX0VSUk9SCQkJIDEwNQotKyNkZWZpbmUgREhfUl9LRVlfU0laRV9UT09fU01BTEwJCQkJIDEx MAotIAotICNpZmRlZiAgX19jcGx1c3BsdXMKLSB9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGEzL2NyeXB0by9kaC9kaF9rZXkuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2Ro L2RoX2tleS5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZGgvZGhfa2V5LmMuZmlw cwkyMDA3LTAzLTI4IDAyOjE1OjIzLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAt YmV0YTMvY3J5cHRvL2RoL2RoX2tleS5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICsw MjAwCi1AQCAtNjEsNiArNjEsOSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0gI2luY2x1 ZGUgPG9wZW5zc2wvcmFuZC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAKLSBzdGF0 aWMgaW50IGdlbmVyYXRlX2tleShESCAqZGgpOwotIHN0YXRpYyBpbnQgY29tcHV0ZV9rZXkodW5z aWduZWQgY2hhciAqa2V5LCBjb25zdCBCSUdOVU0gKnB1Yl9rZXksIERIICpkaCk7Ci1AQCAtMTA3 LDYgKzExMCwxNCBAQCBzdGF0aWMgaW50IGdlbmVyYXRlX2tleShESCAqZGgpCi0gCUJOX01PTlRf Q1RYICptb250PU5VTEw7Ci0gCUJJR05VTSAqcHViX2tleT1OVUxMLCpwcml2X2tleT1OVUxMOwot IAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0 cyhkaC0+cCkgPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlE SGVycihESF9GX0dFTkVSQVRFX0tFWSwgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJcmV0 dXJuIDA7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWN0eCA9IEJOX0NUWF9uZXcoKTsKLSAJaWYgKGN0 eCA9PSBOVUxMKSBnb3RvIGVycjsKLSAKLUBAIC0xODQsNiArMTk1LDEzIEBAIHN0YXRpYyBpbnQg Y29tcHV0ZV9rZXkodW5zaWduZWQgY2hhciAqa2UKLSAJCURIZXJyKERIX0ZfQ09NUFVURV9LRVks REhfUl9NT0RVTFVTX1RPT19MQVJHRSk7Ci0gCQlnb3RvIGVycjsKLSAJCX0KLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZGgtPnApIDwgT1BF TlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJREhlcnIoREhfRl9DT01Q VVRFX0tFWSwgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0r I2VuZGlmCi0gCi0gCWN0eCA9IEJOX0NUWF9uZXcoKTsKLSAJaWYgKGN0eCA9PSBOVUxMKSBnb3Rv IGVycjsKLUBAIC0yNTEsNiArMjY5LDkgQEAgc3RhdGljIGludCBkaF9ibl9tb2RfZXhwKGNvbnN0 IERIICpkaCwgQgotIAotIHN0YXRpYyBpbnQgZGhfaW5pdChESCAqZGgpCi0gCXsKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJZGgtPmZs YWdzIHw9IERIX0ZMQUdfQ0FDSEVfTU9OVF9QOwotIAlyZXR1cm4oMSk7Ci0gCX0KLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcyBvcGVuc3NsLTEu MC4wLWJldGEzL2NyeXB0by9kc2EvZHNhX2dlbi5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9j cnlwdG8vZHNhL2RzYV9nZW4uYy5maXBzCTIwMDgtMTItMjYgMTg6MTc6MjEuMDAwMDAwMDAwICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZHNhL2RzYV9nZW4uYwkyMDA5LTA5 LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTc3LDggKzc3LDEyIEBACi0gI2luY2x1 ZGUgImNyeXB0bGliLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0gI2luY2x1ZGUgPG9w ZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSAjaW5jbHVkZSA8b3BlbnNz bC9yYW5kLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAjaW5jbHVkZSAiZHNhX2xv Y2wuaCIKLSAKLSBpbnQgRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoRFNBICpyZXQsIGludCBi aXRzLAotQEAgLTEyNiw2ICsxMzAsMjEgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAq cmV0LCBzaXplXwotIAlCTl9DVFggKmN0eD1OVUxMOwotIAl1bnNpZ25lZCBpbnQgaD0yOwotIAot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAg IHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOLAotKwkJICAgIEZJ UFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICBnb3RvIGVycjsKLSsJICAgIH0KLSsK LSsJaWYgKEZJUFNfbW9kZSgpICYmIChiaXRzIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxV U19CSVRTKSkKLSsJCXsKLSsJCURTQWVycihEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTiwgRFNB X1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKyNlbmRpZgotKwot IAlpZiAocXNpemUgIT0gU0hBX0RJR0VTVF9MRU5HVEggJiYgcXNpemUgIT0gU0hBMjI0X0RJR0VT VF9MRU5HVEggJiYKLSAJICAgIHFzaXplICE9IFNIQTI1Nl9ESUdFU1RfTEVOR1RIKQotIAkJLyog aW52YWxpZCBxIHNpemUgKi8KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2Rz YS9kc2EuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2RzYS9kc2EuaAotLS0tIG9w ZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2RzYS9kc2EuaC5maXBzCTIwMDktMDktMzAgMTM6MjU6 NTcuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZHNhL2Rz YS5oCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtODgsNiArODgsOCBA QAotICMgZGVmaW5lIE9QRU5TU0xfRFNBX01BWF9NT0RVTFVTX0JJVFMJMTAwMDAKLSAjZW5kaWYK LSAKLSsjZGVmaW5lIE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0Ci0rCi0g I2RlZmluZSBEU0FfRkxBR19DQUNIRV9NT05UX1AJMHgwMQotICNkZWZpbmUgRFNBX0ZMQUdfTk9f RVhQX0NPTlNUVElNRSAgICAgICAweDAyIC8qIG5ldyB3aXRoIDAuOS43aDsgdGhlIGJ1aWx0LWlu IERTQQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGlt cGxlbWVudGF0aW9uIG5vdyB1c2VzIGNvbnN0YW50IHRpbWUKLUBAIC05Nyw2ICs5OSwyMSBAQAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJlIHVzZWQg Zm9yIGFsbCBleHBvbmVudHMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICovCi0gCi0rLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgRFNBIG1ldGhvZCBp cyBGSVBTIGNvbXBsaWFudCBhbmQgY2FuIGJlIHVzZWQKLSsgKiBpbiBGSVBTIG1vZGUuIFRoaXMg aXMgc2V0IGluIHRoZSB2YWxpZGF0ZWQgbW9kdWxlIG1ldGhvZC4gSWYgYW4KLSsgKiBhcHBsaWNh dGlvbiBzZXRzIHRoaXMgZmxhZyBpbiBpdHMgb3duIG1ldGhvZHMgaXQgaXMgaXRzIHJlcG9zaWJp bGl0eQotKyAqIHRvIGVuc3VyZSB0aGUgcmVzdWx0IGlzIGNvbXBsaWFudC4KLSsgKi8KLSsKLSsj ZGVmaW5lIERTQV9GTEFHX0ZJUFNfTUVUSE9ECQkJMHgwNDAwCi0rCi0rLyogSWYgdGhpcyBmbGFn IGlzIHNldCB0aGUgb3BlcmF0aW9ucyBub3JtYWxseSBkaXNhYmxlZCBpbiBGSVBTIG1vZGUgYXJl Ci0rICogcGVybWl0dGVkIGl0IGlzIHRoZW4gdGhlIGFwcGxpY2F0aW9ucyByZXNwb25zaWJpbGl0 eSB0byBlbnN1cmUgdGhhdCB0aGUKLSsgKiB1c2FnZSBpcyBjb21wbGlhbnQuCi0rICovCi0rCi0r I2RlZmluZSBEU0FfRkxBR19OT05fRklQU19BTExPVwkJCTB4MDQwMAotKwotICNpZmRlZiAgX19j cGx1c3BsdXMKLSBleHRlcm4gIkMiIHsKLSAjZW5kaWYKLUBAIC0yNzAsOCArMjg3LDExIEBAIHZv aWQgRVJSX2xvYWRfRFNBX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBEU0FfRl9ET19EU0FfUFJJ TlQJCQkJIDEwNAotICNkZWZpbmUgRFNBX0ZfRFNBUEFSQU1TX1BSSU5UCQkJCSAxMDAKLSAjZGVm aW5lIERTQV9GX0RTQVBBUkFNU19QUklOVF9GUAkJCSAxMDEKLSsjZGVmaW5lIERTQV9GX0RTQV9C VUlMVElOX0tFWUdFTgkJCSAxMjQKLSsjZGVmaW5lIERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VO CQkJIDEyMwotICNkZWZpbmUgRFNBX0ZfRFNBX0RPX1NJR04JCQkJIDExMgotICNkZWZpbmUgRFNB X0ZfRFNBX0RPX1ZFUklGWQkJCQkgMTEzCi0rI2RlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVfUEFS QU1FVEVSUwkJCSAxMjUKLSAjZGVmaW5lIERTQV9GX0RTQV9ORVdfTUVUSE9ECQkJCSAxMDMKLSAj ZGVmaW5lIERTQV9GX0RTQV9QQVJBTV9ERUNPREUJCQkJIDExOQotICNkZWZpbmUgRFNBX0ZfRFNB X1BSSU5UX0ZQCQkJCSAxMDUKLUBAIC0yOTYsOSArMzE2LDEyIEBAIHZvaWQgRVJSX2xvYWRfRFNB X3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBEU0FfUl9EQVRBX1RPT19MQVJHRV9GT1JfS0VZX1NJ WkUJCSAxMDAKLSAjZGVmaW5lIERTQV9SX0RFQ09ERV9FUlJPUgkJCQkgMTA0Ci0gI2RlZmluZSBE U0FfUl9JTlZBTElEX0RJR0VTVF9UWVBFCQkJIDEwNgotKyNkZWZpbmUgRFNBX1JfS0VZX1NJWkVf VE9PX1NNQUxMCQkJIDExMAotICNkZWZpbmUgRFNBX1JfTUlTU0lOR19QQVJBTUVURVJTCQkJIDEw MQotICNkZWZpbmUgRFNBX1JfTU9EVUxVU19UT09fTEFSR0UJCQkJIDEwMwotKyNkZWZpbmUgRFNB X1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMTEKLSAjZGVmaW5lIERTQV9SX05PX1BBUkFNRVRFUlNf U0VUCQkJCSAxMDcKLSsjZGVmaW5lIERTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBT X01PREUJIDExMgotICNkZWZpbmUgRFNBX1JfUEFSQU1FVEVSX0VOQ09ESU5HX0VSUk9SCQkJIDEw NQotIAotICNpZmRlZiAgX19jcGx1c3BsdXMKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9kc2Ev ZHNhX2tleS5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZHNhL2RzYV9rZXkuYy5m aXBzCTIwMDctMDMtMjggMDI6MTU6MjUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhMy9jcnlwdG8vZHNhL2RzYV9rZXkuYwkyMDA5LTA5LTMwIDE3OjAxOjM0LjAwMDAwMDAw MCArMDIwMAotQEAgLTYzLDkgKzYzLDUzIEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSAj aW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSAKLSBzdGF0aWMg aW50IGRzYV9idWlsdGluX2tleWdlbihEU0EgKmRzYSk7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwotK3N0YXRpYyBpbnQgZmlwc19kc2FfcGFpcndpc2VfZmFpbCA9IDA7Ci0rCi0rdm9pZCBG SVBTX2NvcnJ1cHRfZHNhX2tleWdlbih2b2lkKQotKwl7Ci0rCWZpcHNfZHNhX3BhaXJ3aXNlX2Zh aWwgPSAxOwotKwl9Ci0rCi0raW50IGZpcHNfY2hlY2tfZHNhKERTQSAqZHNhKQotKwl7Ci0rCUVW UF9QS0VZICpwazsKLSsJdW5zaWduZWQgY2hhciB0YnNbXSA9ICJEU0EgUGFpcndpc2UgQ2hlY2sg RGF0YSI7Ci0rCWludCByZXQgPSAwOwotKwotKyAgICAJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkg PT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwotKwlFVlBfUEtFWV9zZXQxX0RTQShwaywgZHNhKTsK LSsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsCi0rCQkJCQlO VUxMLCAwLCBFVlBfc2hhMSgpLCAwLCBOVUxMKSkKLSsJCWdvdG8gZXJyOwotKwotKwlyZXQgPSAx OwotKwotK2VycjoKLSsJaWYgKHJldCA9PSAwKQotKwkJewotKwkJZmlwc19zZXRfc2VsZnRlc3Rf ZmFpbCgpOwotKwkJRklQU2VycihGSVBTX0ZfRklQU19DSEVDS19EU0EsRklQU19SX1BBSVJXSVNF X1RFU1RfRkFJTEVEKTsKLSsJCX0KLSsKLSsJaWYgKHBrKQotKwkJRVZQX1BLRVlfZnJlZShwayk7 Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsjZW5kaWYKLSsKLSBpbnQgRFNBX2dlbmVyYXRlX2tl eShEU0EgKmRzYSkKLSAJewotIAlpZihkc2EtPm1ldGgtPmRzYV9rZXlnZW4pCi1AQCAtNzksNiAr MTIzLDE0IEBAIHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKQotIAlCTl9D VFggKmN0eD1OVUxMOwotIAlCSUdOVU0gKnB1Yl9rZXk9TlVMTCwqcHJpdl9rZXk9TlVMTDsKLSAK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMo ZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlE U0FlcnIoRFNBX0ZfRFNBX0JVSUxUSU5fS0VZR0VOLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwp OwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmICgoY3R4PUJOX0NUWF9uZXco KSkgPT0gTlVMTCkgZ290byBlcnI7Ci0gCi0gCWlmIChkc2EtPnByaXZfa2V5ID09IE5VTEwpCi1A QCAtMTE3LDYgKzE2OSwxNSBAQCBzdGF0aWMgaW50IGRzYV9idWlsdGluX2tleWdlbihEU0EgKmRz YSkKLSAKLSAJZHNhLT5wcml2X2tleT1wcml2X2tleTsKLSAJZHNhLT5wdWJfa2V5PXB1Yl9rZXk7 Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZiAo Zmlwc19kc2FfcGFpcndpc2VfZmFpbCkKLSsJCQlCTl9hZGRfd29yZChkc2EtPnB1Yl9rZXksIDEp OwotKwkJaWYoIWZpcHNfY2hlY2tfZHNhKGRzYSkpCi0rCQkgICAgZ290byBlcnI7Ci0rCQl9Ci0r I2VuZGlmCi0gCW9rPTE7Ci0gCi0gZXJyOgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9j cnlwdG8vZHNhL2RzYV9vc3NsLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9kc2Ev ZHNhX29zc2wuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2RzYS9kc2Ffb3NzbC5j LmZpcHMJMjAwNy0wMy0yOCAwMjoxNToyNi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEu MC4wLWJldGEzL2NyeXB0by9kc2EvZHNhX29zc2wuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAw MDAwMCArMDIwMAotQEAgLTY1LDYgKzY1LDkgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4K LSAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvYXNuMS5oPgot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlm Ci0gCi0gc3RhdGljIERTQV9TSUcgKmRzYV9kb19zaWduKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRn c3QsIGludCBkbGVuLCBEU0EgKmRzYSk7Ci0gc3RhdGljIGludCBkc2Ffc2lnbl9zZXR1cChEU0Eg KmRzYSwgQk5fQ1RYICpjdHhfaW4sIEJJR05VTSAqKmtpbnZwLCBCSUdOVU0gKipycCk7Ci1AQCAt ODIsNyArODUsNyBAQCBOVUxMLCAvKiBkc2FfbW9kX2V4cCwgKi8KLSBOVUxMLCAvKiBkc2FfYm5f bW9kX2V4cCwgKi8KLSBkc2FfaW5pdCwKLSBkc2FfZmluaXNoLAotLTAsCi0rRFNBX0ZMQUdfRklQ U19NRVRIT0QsCi0gTlVMTCwKLSBOVUxMLAotIE5VTEwKLUBAIC0xMzcsNiArMTQwLDIwIEBAIHN0 YXRpYyBEU0FfU0lHICpkc2FfZG9fc2lnbihjb25zdCB1bnNpZ24KLSAJaW50IHJlYXNvbj1FUlJf Ul9CTl9MSUI7Ci0gCURTQV9TSUcgKnJldD1OVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQ U19GX0RTQV9ET19TSUdOLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICByZXR1 cm4gTlVMTDsKLSsJICAgIH0KLSsKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0cyhk c2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKLSsJCXsKLSsJCURT QWVycihEU0FfRl9EU0FfRE9fU0lHTiwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCXJl dHVybiBOVUxMOwotKwkJfQotKyNlbmRpZgotKwotIAlCTl9pbml0KCZtKTsKLSAJQk5faW5pdCgm eHIpOwotIAotQEAgLTMxMiw2ICszMjksMjAgQEAgc3RhdGljIGludCBkc2FfZG9fdmVyaWZ5KGNv bnN0IHVuc2lnbmVkIAotIAkJcmV0dXJuIC0xOwotIAkJfQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIo RklQU19GX0RTQV9ET19WRVJJRlksRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJICAg IHJldHVybiAtMTsKLSsJICAgIH0KLSsKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0 cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKLSsJCXsKLSsJ CURTQWVycihEU0FfRl9EU0FfRE9fVkVSSUZZLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwot KwkJcmV0dXJuIC0xOwotKwkJfQotKyNlbmRpZgotKwotIAlpID0gQk5fbnVtX2JpdHMoZHNhLT5x KTsKLSAJLyogZmlwcyAxODYtMyBhbGxvd3Mgb25seSBkaWZmZXJlbnQgc2l6ZXMgZm9yIHEgKi8K LSAJaWYgKGkgIT0gMTYwICYmIGkgIT0gMjI0ICYmIGkgIT0gMjU2KQotQEAgLTQwMyw2ICs0MzQs OSBAQCBzdGF0aWMgaW50IGRzYV9kb192ZXJpZnkoY29uc3QgdW5zaWduZWQgCi0gCi0gc3RhdGlj IGludCBkc2FfaW5pdChEU0EgKmRzYSkKLSB7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBT X3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCWRzYS0+ZmxhZ3N8PURTQV9GTEFHX0NBQ0hF X01PTlRfUDsKLSAJcmV0dXJuKDEpOwotIH0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2Vyci9lcnJfYWxsLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9lcnIv ZXJyX2FsbC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXJyL2Vycl9hbGwuYy5m aXBzCTIwMDgtMTEtMjQgMTg6Mjc6MDYuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhMy9jcnlwdG8vZXJyL2Vycl9hbGwuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAw MCArMDIwMAotQEAgLTk2LDYgKzk2LDkgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9vY3NwLmg+Ci0g I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvdHMuaD4KLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotICNp Zm5kZWYgT1BFTlNTTF9OT19DTVMKLSAjaW5jbHVkZSA8b3BlbnNzbC9jbXMuaD4KLSAjZW5kaWYK LUBAIC0xNDgsNiArMTUxLDkgQEAgdm9pZCBFUlJfbG9hZF9jcnlwdG9fc3RyaW5ncyh2b2lkKQot ICNlbmRpZgotIAlFUlJfbG9hZF9PQ1NQX3N0cmluZ3MoKTsKLSAJRVJSX2xvYWRfVUlfc3RyaW5n cygpOwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRVJSX2xvYWRfRklQU19zdHJpbmdzKCk7Ci0r I2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0NNUwotIAlFUlJfbG9hZF9DTVNfc3RyaW5ncygp OwotICNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL2RpZ2Vz dC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL2RpZ2VzdC5jCi0tLS0gb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL2RpZ2VzdC5jLmZpcHMJMjAwOC0xMS0wNCAxMzow NjowOS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAv ZGlnZXN0LmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xMTYsNiAr MTE2LDcgQEAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0gI2luY2x1ZGUgPG9wZW5zc2wv ZW5naW5lLmg+Ci0gI2VuZGlmCi0rI2luY2x1ZGUgImV2cF9sb2NsLmgiCi0gCi0gdm9pZCBFVlBf TURfQ1RYX2luaXQoRVZQX01EX0NUWCAqY3R4KQotIAl7Ci1AQCAtMTM3LDkgKzEzOCw1MCBAQCBp bnQgRVZQX0RpZ2VzdEluaXQoRVZQX01EX0NUWCAqY3R4LCBjb25zCi0gCXJldHVybiBFVlBfRGln ZXN0SW5pdF9leChjdHgsIHR5cGUsIE5VTEwpOwotIAl9Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwotKy8qIFRoZSBwdXJwb3NlIG9mIHRoZXNlIGlzIHRvIHRyYXAgcHJvZ3JhbXMgdGhhdCBh dHRlbXB0IHRvIHVzZSBub24gRklQUwotKyAqIGFsZ29yaXRobXMgaW4gRklQUyBtb2RlIGFuZCBp Z25vcmUgdGhlIGVycm9ycy4KLSsgKi8KLSsKLStzdGF0aWMgaW50IGJhZF9pbml0KEVWUF9NRF9D VFggKmN0eCkKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCBpbml0Iik7IHJldHVybiAw O30KLSsKLStzdGF0aWMgaW50IGJhZF91cGRhdGUoRVZQX01EX0NUWCAqY3R4LGNvbnN0IHZvaWQg KmRhdGEsc2l6ZV90IGNvdW50KQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IHVwZGF0 ZSIpOyByZXR1cm4gMDt9Ci0rCi0rc3RhdGljIGludCBiYWRfZmluYWwoRVZQX01EX0NUWCAqY3R4 LHVuc2lnbmVkIGNoYXIgKm1kKQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IEZpbmFs Iik7IHJldHVybiAwO30KLSsKLStzdGF0aWMgY29uc3QgRVZQX01EIGJhZF9tZCA9Ci0rCXsKLSsJ MCwKLSsJMCwKLSsJMCwKLSsJMCwKLSsJYmFkX2luaXQsCi0rCWJhZF91cGRhdGUsCi0rCWJhZF9m aW5hbCwKLSsJTlVMTCwKLSsJTlVMTCwKLSsJTlVMTCwKLSsJMCwKLSsJezAsMCwwLDB9LAotKwl9 OwotKwotKyNlbmRpZgotKwotIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgs IGNvbnN0IEVWUF9NRCAqdHlwZSwgRU5HSU5FICppbXBsKQotIAl7Ci0gCUVWUF9NRF9DVFhfY2xl YXJfZmxhZ3MoY3R4LEVWUF9NRF9DVFhfRkxBR19DTEVBTkVEKTsKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNf Rl9FVlBfRElHRVNUSU5JVF9FWCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJY3R4 LT5kaWdlc3QgPSAmYmFkX21kOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rI2VuZGlmCi0gI2lmbmRl ZiBPUEVOU1NMX05PX0VOR0lORQotIAkvKiBXaGV0aGVyIGl0J3MgbmljZSBvciBub3QsICJJbml0 cyIgY2FuIGJlIHVzZWQgb24gIkZpbmFsIidkIGNvbnRleHRzCi0gCSAqIHNvIHRoaXMgY29udGV4 dCBtYXkgYWxyZWFkeSBoYXZlIGFuIEVOR0lORSEgVHJ5IHRvIGF2b2lkIHJlbGVhc2luZwotQEAg LTE5NSw2ICsyMzcsMTggQEAgaW50IEVWUF9EaWdlc3RJbml0X2V4KEVWUF9NRF9DVFggKmN0eCwg YwotICNlbmRpZgotIAlpZiAoY3R4LT5kaWdlc3QgIT0gdHlwZSkKLSAJCXsKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rCQlpZiAoRklQU19tb2RlKCkpCi0rCQkJewotKwkJCWlmICghKHR5cGUtPmZs YWdzICYgRVZQX01EX0ZMQUdfRklQUykgCi0rCQkJICYmICEoY3R4LT5mbGFncyAmIEVWUF9NRF9D VFhfRkxBR19OT05fRklQU19BTExPVykpCi0rCQkJCXsKLSsJCQkJRVZQZXJyKEVWUF9GX0VWUF9E SUdFU1RJTklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7Ci0rCQkJCWN0eC0+ZGlnZXN0 ID0gJmJhZF9tZDsKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJCX0KLSsJCQl9Ci0rI2VuZGlmCi0gCQlp ZiAoY3R4LT5kaWdlc3QgJiYgY3R4LT5kaWdlc3QtPmN0eF9zaXplKQotIAkJCU9QRU5TU0xfZnJl ZShjdHgtPm1kX2RhdGEpOwotIAkJY3R4LT5kaWdlc3Q9dHlwZTsKLUBAIC0yMjIsNiArMjc2LDkg QEAgc2tpcF90b19pbml0OgotIAotIGludCBFVlBfRGlnZXN0VXBkYXRlKEVWUF9NRF9DVFggKmN0 eCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGNvdW50KQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xf RklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCXJldHVybiBjdHgtPnVw ZGF0ZShjdHgsZGF0YSxjb3VudCk7Ci0gCX0KLSAKLUBAIC0yMzgsNiArMjk1LDkgQEAgaW50IEVW UF9EaWdlc3RGaW5hbChFVlBfTURfQ1RYICpjdHgsIHVucwotIGludCBFVlBfRGlnZXN0RmluYWxf ZXgoRVZQX01EX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICptZCwgdW5zaWduZWQgaW50ICpzaXpl KQotIAl7Ci0gCWludCByZXQ7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0 X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCi0gCU9QRU5TU0xfYXNzZXJ0KGN0eC0+ZGlnZXN0LT5tZF9z aXplIDw9IEVWUF9NQVhfTURfU0laRSk7Ci0gCXJldD1jdHgtPmRpZ2VzdC0+ZmluYWwoY3R4LG1k KTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2V2cC9lX2Flcy5jLmZpcHMg b3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL2VfYWVzLmMKLS0tLSBvcGVuc3NsLTEuMC4w LWJldGEzL2NyeXB0by9ldnAvZV9hZXMuYy5maXBzCTIwMDQtMDEtMjggMjA6MDU6MzMuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL2VfYWVzLmMJMjAw OS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC02OSwzMiArNjksMjkgQEAgdHlw ZWRlZiBzdHJ1Y3QKLSAKLSBJTVBMRU1FTlRfQkxPQ0tfQ0lQSEVSKGFlc18xMjgsIGtzLCBBRVMs IEVWUF9BRVNfS0VZLAotIAkJICAgICAgIE5JRF9hZXNfMTI4LCAxNiwgMTYsIDE2LCAxMjgsCi0t CQkgICAgICAgMCwgYWVzX2luaXRfa2V5LCBOVUxMLCAKLS0JCSAgICAgICBFVlBfQ0lQSEVSX3Nl dF9hc24xX2l2LAotLQkJICAgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0tCQkgICAgICAg TlVMTCkKLSsJCSAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxU X0FTTjEsCi0rCQkgICAgICAgYWVzX2luaXRfa2V5LAotKwkJICAgICAgIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwpCi0gSU1QTEVNRU5UX0JMT0NLX0NJUEhFUihhZXNfMTkyLCBrcywgQUVTLCBFVlBf QUVTX0tFWSwKLSAJCSAgICAgICBOSURfYWVzXzE5MiwgMTYsIDI0LCAxNiwgMTI4LAotLQkJICAg ICAgIDAsIGFlc19pbml0X2tleSwgTlVMTCwgCi0tCQkgICAgICAgRVZQX0NJUEhFUl9zZXRfYXNu MV9pdiwKLS0JCSAgICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAotLQkJICAgICAgIE5VTEwp Ci0rCQkgICAgICAgRVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04x LAotKwkJICAgICAgIGFlc19pbml0X2tleSwKLSsJCSAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMKQotIElNUExFTUVOVF9CTE9DS19DSVBIRVIoYWVzXzI1Niwga3MsIEFFUywgRVZQX0FFU19L RVksCi0gCQkgICAgICAgTklEX2Flc18yNTYsIDE2LCAzMiwgMTYsIDEyOCwKLS0JCSAgICAgICAw LCBhZXNfaW5pdF9rZXksIE5VTEwsIAotLQkJICAgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYs Ci0tCQkgICAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKLS0JCSAgICAgICBOVUxMKQotLQot LSNkZWZpbmUgSU1QTEVNRU5UX0FFU19DRkJSKGtzaXplLGNiaXRzKQlJTVBMRU1FTlRfQ0ZCUihh ZXMsQUVTLEVWUF9BRVNfS0VZLGtzLGtzaXplLGNiaXRzLDE2KQotLQotLUlNUExFTUVOVF9BRVNf Q0ZCUigxMjgsMSkKLS1JTVBMRU1FTlRfQUVTX0NGQlIoMTkyLDEpCi0tSU1QTEVNRU5UX0FFU19D RkJSKDI1NiwxKQotLQotLUlNUExFTUVOVF9BRVNfQ0ZCUigxMjgsOCkKLS1JTVBMRU1FTlRfQUVT X0NGQlIoMTkyLDgpCi0tSU1QTEVNRU5UX0FFU19DRkJSKDI1Niw4KQotKwkJICAgICAgIEVWUF9D SVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKLSsJCSAgICAgICBhZXNf aW5pdF9rZXksCi0rCQkgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKLSsKLSsjZGVmaW5l IElNUExFTUVOVF9BRVNfQ0ZCUihrc2l6ZSxjYml0cyxmbGFncykJSU1QTEVNRU5UX0NGQlIoYWVz LEFFUyxFVlBfQUVTX0tFWSxrcyxrc2l6ZSxjYml0cywxNixmbGFncykKLSsKLStJTVBMRU1FTlRf QUVTX0NGQlIoMTI4LDEsRVZQX0NJUEhfRkxBR19GSVBTKQotK0lNUExFTUVOVF9BRVNfQ0ZCUigx OTIsMSxFVlBfQ0lQSF9GTEFHX0ZJUFMpCi0rSU1QTEVNRU5UX0FFU19DRkJSKDI1NiwxLEVWUF9D SVBIX0ZMQUdfRklQUykKLSsKLStJTVBMRU1FTlRfQUVTX0NGQlIoMTI4LDgsRVZQX0NJUEhfRkxB R19GSVBTKQotK0lNUExFTUVOVF9BRVNfQ0ZCUigxOTIsOCxFVlBfQ0lQSF9GTEFHX0ZJUFMpCi0r SU1QTEVNRU5UX0FFU19DRkJSKDI1Niw4LEVWUF9DSVBIX0ZMQUdfRklQUykKLSAKLSBzdGF0aWMg aW50IGFlc19pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFy ICprZXksCi0gCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgaW50IGVuYykKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2V2cC9lX2NhbWVsbGlhLmMuZmlwcyBvcGVuc3Ns LTEuMC4wLWJldGEzL2NyeXB0by9ldnAvZV9jYW1lbGxpYS5jCi0tLS0gb3BlbnNzbC0xLjAuMC1i ZXRhMy9jcnlwdG8vZXZwL2VfY2FtZWxsaWEuYy5maXBzCTIwMDYtMDgtMzEgMjI6NTY6MjAuMDAw MDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL2VfY2FtZWxs aWEuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTkzLDcgKzkzLDcg QEAgSU1QTEVNRU5UX0JMT0NLX0NJUEhFUihjYW1lbGxpYV8yNTYsIGtzLAotIAlFVlBfQ0lQSEVS X2dldF9hc24xX2l2LAotIAlOVUxMKQotIAotLSNkZWZpbmUgSU1QTEVNRU5UX0NBTUVMTElBX0NG QlIoa3NpemUsY2JpdHMpCUlNUExFTUVOVF9DRkJSKGNhbWVsbGlhLENhbWVsbGlhLEVWUF9DQU1F TExJQV9LRVksa3Msa3NpemUsY2JpdHMsMTYpCi0rI2RlZmluZSBJTVBMRU1FTlRfQ0FNRUxMSUFf Q0ZCUihrc2l6ZSxjYml0cykJSU1QTEVNRU5UX0NGQlIoY2FtZWxsaWEsQ2FtZWxsaWEsRVZQX0NB TUVMTElBX0tFWSxrcyxrc2l6ZSxjYml0cywxNiwwKQotIAotIElNUExFTUVOVF9DQU1FTExJQV9D RkJSKDEyOCwxKQotIElNUExFTUVOVF9DQU1FTExJQV9DRkJSKDE5MiwxKQotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL2VfZGVzMy5jLmZpcHMgb3BlbnNzbC0xLjAuMC1i ZXRhMy9jcnlwdG8vZXZwL2VfZGVzMy5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8v ZXZwL2VfZGVzMy5jLmZpcHMJMjAwOC0xMi0yOSAxMzozNTo0Ny4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvZV9kZXMzLmMJMjAwOS0wOS0zMCAxMzoy NTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0yMDYsOSArMjA2LDkgQEAgc3RhdGljIGludCBkZXNf ZWRlM19jZmI4X2NpcGhlcihFVlBfQ0lQSAotICAgICB9Ci0gCi0gQkxPQ0tfQ0lQSEVSX2RlZnMo ZGVzX2VkZSwgREVTX0VERV9LRVksIE5JRF9kZXNfZWRlLCA4LCAxNiwgOCwgNjQsCi0tCQkJRVZQ X0NJUEhfUkFORF9LRVksIGRlc19lZGVfaW5pdF9rZXksIE5VTEwsIAotLQkJCUVWUF9DSVBIRVJf c2V0X2FzbjFfaXYsCi0tCQkJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKLSsJCUVWUF9DSVBIX1JB TkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKLSsJ CQlkZXNfZWRlX2luaXRfa2V5LAotKwkJCU5VTEwsIE5VTEwsIE5VTEwsCi0gCQkJZGVzM19jdHJs KQotIAotICNkZWZpbmUgZGVzX2VkZTNfY2ZiNjRfY2lwaGVyIGRlc19lZGVfY2ZiNjRfY2lwaGVy Ci1AQCAtMjE3LDIxICsyMTcsMjEgQEAgQkxPQ0tfQ0lQSEVSX2RlZnMoZGVzX2VkZSwgREVTX0VE RV9LRVksIAotICNkZWZpbmUgZGVzX2VkZTNfZWNiX2NpcGhlciBkZXNfZWRlX2VjYl9jaXBoZXIK LSAKLSBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlMywgREVTX0VERV9LRVksIE5JRF9kZXNfZWRl MywgOCwgMjQsIDgsIDY0LAotLQkJCUVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0X2tl eSwgTlVMTCwgCi0tCQkJRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKLS0JCQlFVlBfQ0lQSEVSX2dl dF9hc24xX2l2LAotKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9D SVBIX0ZMQUdfREVGQVVMVF9BU04xLAotKwkJCWRlc19lZGUzX2luaXRfa2V5LAotKwkJCU5VTEws IE5VTEwsIE5VTEwsCi0gCQkJZGVzM19jdHJsKQotIAotIEJMT0NLX0NJUEhFUl9kZWZfY2ZiKGRl c19lZGUzLERFU19FREVfS0VZLE5JRF9kZXNfZWRlMywyNCw4LDEsCi0tCQkgICAgIEVWUF9DSVBI X1JBTkRfS0VZLCBkZXNfZWRlM19pbml0X2tleSxOVUxMLAotLQkJICAgICBFVlBfQ0lQSEVSX3Nl dF9hc24xX2l2LAotLQkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAotKwkJRVZQX0NJUEhf UkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAot KwkJICAgICBkZXNfZWRlM19pbml0X2tleSwKLSsJCSAgICAgTlVMTCwgTlVMTCwgTlVMTCwKLSAJ CSAgICAgZGVzM19jdHJsKQotIAotIEJMT0NLX0NJUEhFUl9kZWZfY2ZiKGRlc19lZGUzLERFU19F REVfS0VZLE5JRF9kZXNfZWRlMywyNCw4LDgsCi0tCQkgICAgIEVWUF9DSVBIX1JBTkRfS0VZLCBk ZXNfZWRlM19pbml0X2tleSxOVUxMLAotLQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAot LQkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAotKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQ X0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAotKwkJICAgICBkZXNf ZWRlM19pbml0X2tleSwKLSsJCSAgICAgTlVMTCwgTlVMTCwgTlVMTCwKLSAJCSAgICAgZGVzM19j dHJsKQotIAotIHN0YXRpYyBpbnQgZGVzX2VkZV9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4 LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEz L2NyeXB0by9ldnAvZV9udWxsLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAv ZV9udWxsLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvZV9udWxsLmMuZmlw cwkyMDA4LTEwLTMxIDIwOjQ4OjI0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAt YmV0YTMvY3J5cHRvL2V2cC9lX251bGwuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCAr MDIwMAotQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgbl9jaXBoZXI9 Ci0gCXsKLSAJTklEX3VuZGVmLAotIAkxLDAsMCwKLS0JMCwKLSsJRVZQX0NJUEhfRkxBR19GSVBT LAotIAludWxsX2luaXRfa2V5LAotIAludWxsX2NpcGhlciwKLSAJTlVMTCwKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2V2cC9ldnBfZW5jLmMuZmlwcyBvcGVuc3NsLTEuMC4w LWJldGEzL2NyeXB0by9ldnAvZXZwX2VuYy5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlw dG8vZXZwL2V2cF9lbmMuYy5maXBzCTIwMDgtMTEtMTIgMDQ6NTg6MDAuMDAwMDAwMDAwICswMTAw Ci0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL2V2cF9lbmMuYwkyMDA5LTA5LTMw IDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTY4LDggKzY4LDUzIEBACi0gCi0gY29uc3Qg Y2hhciBFVlBfdmVyc2lvbltdPSJFVlAiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rCi0rLyogVGhlIHB1cnBvc2Ugb2YgdGhlc2UgaXMgdG8gdHJhcCBw cm9ncmFtcyB0aGF0IGF0dGVtcHQgdG8gdXNlIG5vbiBGSVBTCi0rICogYWxnb3JpdGhtcyBpbiBG SVBTIG1vZGUgYW5kIGlnbm9yZSB0aGUgZXJyb3JzLgotKyAqLwotKwotK3N0YXRpYyBpbnQgYmFk X2luaXQoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotKwkJ ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBpbnQgZW5jKQotKwl7IEZJUFNfRVJST1JfSUdO T1JFRCgiQ2lwaGVyIGluaXQiKTsgcmV0dXJuIDA7fQotKwotK3N0YXRpYyBpbnQgYmFkX2RvX2Np cGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCi0rCQkJIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQotKwl7IEZJUFNfRVJST1JfSUdO T1JFRCgiQ2lwaGVyIHVwZGF0ZSIpOyByZXR1cm4gMDt9Ci0rCi0rLyogTkI6IG5vIGNsZWFudXAg YmVjYXVzZSBpdCBpcyBhbGxvd2VkIGFmdGVyIGZhaWxlZCBpbml0ICovCi0rCi0rc3RhdGljIGlu dCBiYWRfc2V0X2FzbjEoRVZQX0NJUEhFUl9DVFggKmN0eCwgQVNOMV9UWVBFICp0eXApCi0rCXsg RklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgc2V0X2FzbjEiKTsgcmV0dXJuIDA7fQotK3N0YXRp YyBpbnQgYmFkX2dldF9hc24xKEVWUF9DSVBIRVJfQ1RYICpjdHgsIEFTTjFfVFlQRSAqdHlwKQot Kwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIGdldF9hc24xIik7IHJldHVybiAwO30KLStz dGF0aWMgaW50IGJhZF9jdHJsKEVWUF9DSVBIRVJfQ1RYICpjdHgsIGludCB0eXBlLCBpbnQgYXJn LCB2b2lkICpwdHIpCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgY3RybCIpOyByZXR1 cm4gMDt9Ci0rCi0rc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgYmFkX2NpcGhlciA9Ci0rCXsKLSsJ MCwKLSsJMCwKLSsJMCwKLSsJMCwKLSsJMCwKLSsJYmFkX2luaXQsCi0rCWJhZF9kb19jaXBoZXIs Ci0rCU5VTEwsCi0rCTAsCi0rCWJhZF9zZXRfYXNuMSwKLSsJYmFkX2dldF9hc24xLAotKwliYWRf Y3RybCwKLSsJTlVMTAotKwl9OwotKwotKyNlbmRpZgotKwotIHZvaWQgRVZQX0NJUEhFUl9DVFhf aW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4KQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlG SVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCW1lbXNldChjdHgsMCxzaXplb2YoRVZQ X0NJUEhFUl9DVFgpKTsKLSAJLyogY3R4LT5jaXBoZXI9TlVMTDsgKi8KLSAJfQotQEAgLTEwMSw2 ICsxNDYsMTQgQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpjdAotIAkJ CWVuYyA9IDE7Ci0gCQljdHgtPmVuY3J5cHQgPSBlbmM7Ci0gCQl9Ci0rI2lmZGVmIE9QRU5TU0xf RklQUwotKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJewotKwkJRklQU2VycihGSVBT X0ZfRVZQX0NJUEhFUklOSVRfRVgsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCWN0 eC0+Y2lwaGVyID0gJmJhZF9jaXBoZXI7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5kaWYKLSAj aWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0gCS8qIFdoZXRoZXIgaXQncyBuaWNlIG9yIG5vdCwg IkluaXRzIiBjYW4gYmUgdXNlZCBvbiAiRmluYWwiJ2QgY29udGV4dHMKLSAJICogc28gdGhpcyBj b250ZXh0IG1heSBhbHJlYWR5IGhhdmUgYW4gRU5HSU5FISBUcnkgdG8gYXZvaWQgcmVsZWFzaW5n Ci1AQCAtMjE5LDYgKzI3MiwyMiBAQCBza2lwX3RvX2luaXQ6Ci0gCQl9Ci0gCX0KLSAKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rCS8qIEFmdGVyICdrZXknIGlzIHNldCBubyBmdXJ0aGVyIHBhcmFt ZXRlcnMgY2hhbmdlcyBhcmUgcGVybWlzc2libGUuCi0rCSAqIFNvIG9ubHkgY2hlY2sgZm9yIG5v biBGSVBTIGVuYWJsaW5nIGF0IHRoaXMgcG9pbnQuCi0rCSAqLwotKwlpZiAoa2V5ICYmIEZJUFNf bW9kZSgpKQotKwkJewotKwkJaWYgKCEoY3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfRkxB R19GSVBTKQotKwkJCSYgIShjdHgtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExP VykpCi0rCQkJewotKwkJCUVWUGVycihFVlBfRl9FVlBfQ0lQSEVSSU5JVF9FWCwgRVZQX1JfRElT QUJMRURfRk9SX0ZJUFMpOwotKwkJCWN0eC0+Y2lwaGVyID0gJmJhZF9jaXBoZXI7Ci0rCQkJcmV0 dXJuIDA7Ci0rCQkJfQotKwkJfQotKyNlbmRpZgotKwotIAlpZihrZXkgfHwgKGN0eC0+Y2lwaGVy LT5mbGFncyAmIEVWUF9DSVBIX0FMV0FZU19DQUxMX0lOSVQpKSB7Ci0gCQlpZighY3R4LT5jaXBo ZXItPmluaXQoY3R4LGtleSxpdixlbmMpKSByZXR1cm4gMDsKLSAJfQotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL2V2cF9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0 YTMvY3J5cHRvL2V2cC9ldnBfZXJyLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9l dnAvZXZwX2Vyci5jLmZpcHMJMjAwOC0xMi0yOSAxNzoxMTo1NC4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvZXZwX2Vyci5jCTIwMDktMDktMzAgMTM6 MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtMTU0LDYgKzE1NCw3IEBAIHN0YXRpYyBFUlJfU1RS SU5HX0RBVEEgRVZQX3N0cl9yZWFzb25zW10KLSB7RVJSX1JFQVNPTihFVlBfUl9ERUNPREVfRVJS T1IpICAgICAgICAgICwiZGVjb2RlIGVycm9yIn0sCi0ge0VSUl9SRUFTT04oRVZQX1JfRElGRkVS RU5UX0tFWV9UWVBFUykgICAsImRpZmZlcmVudCBrZXkgdHlwZXMifSwKLSB7RVJSX1JFQVNPTihF VlBfUl9ESUZGRVJFTlRfUEFSQU1FVEVSUykgICwiZGlmZmVyZW50IHBhcmFtZXRlcnMifSwKLSt7 RVJSX1JFQVNPTihFVlBfUl9ESVNBQkxFRF9GT1JfRklQUykgICAgICwiZGlzYWJsZWQgZm9yIGZp cHMifSwKLSB7RVJSX1JFQVNPTihFVlBfUl9FTkNPREVfRVJST1IpICAgICAgICAgICwiZW5jb2Rl IGVycm9yIn0sCi0ge0VSUl9SRUFTT04oRVZQX1JfRVZQX1BCRV9DSVBIRVJJTklUX0VSUk9SKSwi ZXZwIHBiZSBjaXBoZXJpbml0IGVycm9yIn0sCi0ge0VSUl9SRUFTT04oRVZQX1JfRVhQRUNUSU5H X0FOX1JTQV9LRVkpICAsImV4cGVjdGluZyBhbiByc2Ega2V5In0sCi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGEzL2NyeXB0by9ldnAvZXZwLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2Ny eXB0by9ldnAvZXZwLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvZXZwLmgu ZmlwcwkyMDA5LTA5LTMwIDEzOjI1OjU3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4w LjAtYmV0YTMvY3J5cHRvL2V2cC9ldnAuaAkyMDA5LTA5LTMwIDE0OjQwOjU0LjAwMDAwMDAwMCAr MDIwMAotQEAgLTc1LDYgKzc1LDEwIEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0gI2Vu ZGlmCi0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K LSsjZW5kaWYKLSsKLSAvKgotICNkZWZpbmUgRVZQX1JDMl9LRVlfU0laRQkJMTYKLSAjZGVmaW5l IEVWUF9SQzRfS0VZX1NJWkUJCTE2Ci1AQCAtMTk3LDYgKzIwMSw4IEBAIHR5cGVkZWYgaW50IGV2 cF92ZXJpZnlfbWV0aG9kKGludCB0eXBlLGMKLSAKLSAjZGVmaW5lIEVWUF9NRF9GTEFHX1BLRVlf TUVUSE9EX1NJR05BVFVSRQkweDAwMDQKLSAKLSsjZGVmaW5lIEVWUF9NRF9GTEFHX0ZJUFMJMHgw NDAwIC8qIE5vdGUgaWYgc3VpdGFibGUgZm9yIHVzZSBpbiBGSVBTIG1vZGUgKi8KLSsKLSAvKiBE aWdlc3RBbGdvcml0aG1JZGVudGlmaWVyIGZsYWdzLi4uICovCi0gCi0gI2RlZmluZSBFVlBfTURf RkxBR19ESUdBTEdJRF9NQVNLCQkweDAwMTgKLUBAIC0yNjksMTAgKzI3NSw2IEBAIHN0cnVjdCBl bnZfbWRfY3R4X3N0Ci0gCQkJCQkJKiBjbGVhbmVkICovCi0gI2RlZmluZSBFVlBfTURfQ1RYX0ZM QUdfUkVVU0UJCTB4MDAwNCAvKiBEb24ndCBmcmVlIHVwIGN0eC0+bWRfZGF0YQotIAkJCQkJCSog aW4gRVZQX01EX0NUWF9jbGVhbnVwICovCi0tLyogRklQUyBhbmQgcGFkIG9wdGlvbnMgYXJlIGln bm9yZWQgaW4gMS4wLjAsIGRlZmluaXRpb25zIGFyZSBoZXJlCi0tICogc28gd2UgZG9uJ3QgYWNj aWRlbnRhbGx5IHJldXNlIHRoZSB2YWx1ZXMgZm9yIG90aGVyIHB1cnBvc2VzLgotLSAqLwotLQot ICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XCTB4MDAwOAkvKiBBbGxvdyB1 c2Ugb2Ygbm9uIEZJUFMgZGlnZXN0Ci0gCQkJCQkJICogaW4gRklQUyBtb2RlICovCi0gCi1AQCAt Mjg0LDYgKzI4NiwxMCBAQCBzdHJ1Y3QgZW52X21kX2N0eF9zdAotICNkZWZpbmUgRVZQX01EX0NU WF9GTEFHX1BBRF9QS0NTMQkweDAwCS8qIFBLQ1MjMSB2MS41IG1vZGUgKi8KLSAjZGVmaW5lIEVW UF9NRF9DVFhfRkxBR19QQURfWDkzMQkweDEwCS8qIFg5LjMxIG1vZGUgKi8KLSAjZGVmaW5lIEVW UF9NRF9DVFhfRkxBR19QQURfUFNTCQkweDIwCS8qIFBTUyBtb2RlICovCi0rI2RlZmluZSBNX0VW UF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpIFwKLSsJCSgoY3R4LT5mbGFncz4+MTYpICYweEZG RkYpIC8qIHNlZWQgbGVuZ3RoICovCi0rI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVO CTB4RkZGRgkvKiBzYWx0IGxlbiBzYW1lIGFzIGRpZ2VzdCAqLwotKyNkZWZpbmUgRVZQX01EX0NU WF9GTEFHX1BTU19NUkVDCTB4RkZGRQkvKiBzYWx0IG1heCBvciBhdXRvIHJlY292ZXJlZCAqLwot IAotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX05PX0lOSVQJCTB4MDEwMCAvKiBEb24ndCBpbml0 aWFsaXplIG1kX2RhdGEgKi8KLSAKLUBAIC0zMzAsNiArMzM2LDE0IEBAIHN0cnVjdCBldnBfY2lw aGVyX3N0Ci0gI2RlZmluZSAJRVZQX0NJUEhfTk9fUEFERElORwkJMHgxMDAKLSAvKiBjaXBoZXIg aGFuZGxlcyByYW5kb20ga2V5IGdlbmVyYXRpb24gKi8KLSAjZGVmaW5lIAlFVlBfQ0lQSF9SQU5E X0tFWQkJMHgyMDAKLSsvKiBOb3RlIGlmIHN1aXRhYmxlIGZvciB1c2UgaW4gRklQUyBtb2RlICov Ci0rI2RlZmluZQkJRVZQX0NJUEhfRkxBR19GSVBTCQkweDQwMAotKy8qIEFsbG93IG5vbiBGSVBT IGNpcGhlciBpbiBGSVBTIG1vZGUgKi8KLSsjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX05PTl9GSVBT X0FMTE9XCTB4ODAwCi0rLyogQWxsb3cgdXNlIGRlZmF1bHQgQVNOMSBnZXQvc2V0IGl2ICovCi0r I2RlZmluZQkJRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEJMHgxMDAwCi0rLyogQnVmZmVyIGxl bmd0aCBpbiBiaXRzIG5vdCBieXRlczogQ0ZCMSBtb2RlIG9ubHkgKi8KLSsjZGVmaW5lCQlFVlBf Q0lQSF9GTEFHX0xFTkdUSF9CSVRTCTB4MjAwMAotIAotIC8qIGN0cmwoKSB2YWx1ZXMgKi8KLSAK LUBAIC01MDcsNiArNTIxLDEwIEBAIGludAlFVlBfQnl0ZXNUb0tleShjb25zdCBFVlBfQ0lQSEVS ICp0eXAKLSAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhbHQsIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmRhdGEsCi0gCQlpbnQgZGF0YWwsIGludCBjb3VudCwgdW5zaWduZWQgY2hhciAqa2V5LHVuc2ln bmVkIGNoYXIgKml2KTsKLSAKLSt2b2lkCUVWUF9DSVBIRVJfQ1RYX3NldF9mbGFncyhFVlBfQ0lQ SEVSX0NUWCAqY3R4LCBpbnQgZmxhZ3MpOwotK3ZvaWQJRVZQX0NJUEhFUl9DVFhfY2xlYXJfZmxh Z3MoRVZQX0NJUEhFUl9DVFggKmN0eCwgaW50IGZsYWdzKTsKLStpbnQgCUVWUF9DSVBIRVJfQ1RY X3Rlc3RfZmxhZ3MoY29uc3QgRVZQX0NJUEhFUl9DVFggKmN0eCxpbnQgZmxhZ3MpOwotKwotIGlu dAlFVlBfRW5jcnlwdEluaXQoRVZQX0NJUEhFUl9DVFggKmN0eCxjb25zdCBFVlBfQ0lQSEVSICpj aXBoZXIsCi0gCQljb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIg Kml2KTsKLSBpbnQJRVZQX0VuY3J5cHRJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpjdHgsY29uc3Qg RVZQX0NJUEhFUiAqY2lwaGVyLCBFTkdJTkUgKmltcGwsCi1AQCAtMTIyNSw2ICsxMjQzLDcgQEAg dm9pZCBFUlJfbG9hZF9FVlBfc3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5lIEVWUF9SX0RFQ09ERV9F UlJPUgkJCQkgMTE0Ci0gI2RlZmluZSBFVlBfUl9ESUZGRVJFTlRfS0VZX1RZUEVTCQkJIDEwMQot ICNkZWZpbmUgRVZQX1JfRElGRkVSRU5UX1BBUkFNRVRFUlMJCQkgMTUzCi0rI2RlZmluZSBFVlBf Ul9ESVNBQkxFRF9GT1JfRklQUwkJCQkgMTYwCi0gI2RlZmluZSBFVlBfUl9FTkNPREVfRVJST1IJ CQkJIDExNQotICNkZWZpbmUgRVZQX1JfRVZQX1BCRV9DSVBIRVJJTklUX0VSUk9SCQkJIDExOQot ICNkZWZpbmUgRVZQX1JfRVhQRUNUSU5HX0FOX1JTQV9LRVkJCQkgMTI3Ci1kaWZmIC11cCBvcGVu c3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvZXZwX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMC1i ZXRhMy9jcnlwdG8vZXZwL2V2cF9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRv L2V2cC9ldnBfbGliLmMuZmlwcwkyMDA5LTA0LTEwIDEyOjMwOjI3LjAwMDAwMDAwMCArMDIwMAot KysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2V2cC9ldnBfbGliLmMJMjAwOS0wOS0zMCAx MzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC02Nyw2ICs2Nyw4IEBAIGludCBFVlBfQ0lQSEVS X3BhcmFtX3RvX2FzbjEoRVZQX0NJUEhFUl8KLSAKLSAJaWYgKGMtPmNpcGhlci0+c2V0X2FzbjFf cGFyYW1ldGVycyAhPSBOVUxMKQotIAkJcmV0PWMtPmNpcGhlci0+c2V0X2FzbjFfcGFyYW1ldGVy cyhjLHR5cGUpOwotKwllbHNlIGlmIChjLT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfRkxBR19E RUZBVUxUX0FTTjEpCi0rCQlyZXQ9RVZQX0NJUEhFUl9zZXRfYXNuMV9pdihjLCB0eXBlKTsKLSAJ ZWxzZQotIAkJcmV0PS0xOwotIAlyZXR1cm4ocmV0KTsKLUBAIC03OCw2ICs4MCw4IEBAIGludCBF VlBfQ0lQSEVSX2FzbjFfdG9fcGFyYW0oRVZQX0NJUEhFUl8KLSAKLSAJaWYgKGMtPmNpcGhlci0+ Z2V0X2FzbjFfcGFyYW1ldGVycyAhPSBOVUxMKQotIAkJcmV0PWMtPmNpcGhlci0+Z2V0X2FzbjFf cGFyYW1ldGVycyhjLHR5cGUpOwotKwllbHNlIGlmIChjLT5jaXBoZXItPmZsYWdzICYgRVZQX0NJ UEhfRkxBR19ERUZBVUxUX0FTTjEpCi0rCQlyZXQ9RVZQX0NJUEhFUl9nZXRfYXNuMV9pdihjLCB0 eXBlKTsKLSAJZWxzZQotIAkJcmV0PS0xOwotIAlyZXR1cm4ocmV0KTsKLUBAIC0xODAsNiArMTg0 LDkgQEAgaW50IEVWUF9DSVBIRVJfQ1RYX2Jsb2NrX3NpemUoY29uc3QgRVZQXwotIAotIGludCBF VlBfQ2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgY29uc3Qg dW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCi0gCXsKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJcmV0dXJuIGN0eC0+ Y2lwaGVyLT5kb19jaXBoZXIoY3R4LG91dCxpbixpbmwpOwotIAl9Ci0gCi1AQCAtMjg5LDMgKzI5 NiwxOCBAQCBpbnQgRVZQX01EX0NUWF90ZXN0X2ZsYWdzKGNvbnN0IEVWUF9NRF9DCi0gCXsKLSAJ cmV0dXJuIChjdHgtPmZsYWdzICYgZmxhZ3MpOwotIAl9Ci0rCi0rdm9pZCBFVlBfQ0lQSEVSX0NU WF9zZXRfZmxhZ3MoRVZQX0NJUEhFUl9DVFggKmN0eCwgaW50IGZsYWdzKQotKwl7Ci0rCWN0eC0+ ZmxhZ3MgfD0gZmxhZ3M7Ci0rCX0KLSsKLSt2b2lkIEVWUF9DSVBIRVJfQ1RYX2NsZWFyX2ZsYWdz KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGludCBmbGFncykKLSsJewotKwljdHgtPmZsYWdzICY9IH5m bGFnczsKLSsJfQotKwotK2ludCBFVlBfQ0lQSEVSX0NUWF90ZXN0X2ZsYWdzKGNvbnN0IEVWUF9D SVBIRVJfQ1RYICpjdHgsIGludCBmbGFncykKLSsJewotKwlyZXR1cm4gKGN0eC0+ZmxhZ3MgJiBm bGFncyk7Ci0rCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2V2cC9ldnBf bG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL2V2cF9sb2NsLmgKLS0t LSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvZXZwX2xvY2wuaC5maXBzCTIwMDktMDkt MzAgMTM6MjU6NTcuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlw dG8vZXZwL2V2cF9sb2NsLmgJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBA IC0xMTEsMTEgKzExMSwxMSBAQCBzdGF0aWMgaW50IGNuYW1lIyNfY2JjX2NpcGhlcihFVlBfQ0lQ SEVSCi0gc3RhdGljIGludCBjbmFtZSMjX2NmYiMjY2JpdHMjI19jaXBoZXIoRVZQX0NJUEhFUl9D VFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6 ZV90IGlubCkgXAotIHtcCi0gCXNpemVfdCBjaHVuaz1FVlBfTUFYQ0hVTks7XAotLQlpZiAoY2Jp dHM9PTEpICBjaHVuaz4+PTM7XAotKwlpZiAoY2JpdHM9PTEgJiYgIShjdHgtPmZsYWdzICYgRVZQ X0NJUEhfRkxBR19MRU5HVEhfQklUUykpICBjaHVuaz4+PTM7XAotIAlpZiAoaW5sPGNodW5rKSBj aHVuaz1pbmw7XAotIAl3aGlsZShpbmwgJiYgaW5sPj1jaHVuaylcCi0gCSAgICB7XAotLQkgICAg Y3ByZWZpeCMjX2NmYiMjY2JpdHMjI19lbmNyeXB0KGluLCBvdXQsIChsb25nKShjYml0cz09MT9j aHVuayo4OmNodW5rKSwgJigoa3N0cnVjdCAqKWN0eC0+Y2lwaGVyX2RhdGEpLT5rc2NoZWQsIGN0 eC0+aXYsICZjdHgtPm51bSwgY3R4LT5lbmNyeXB0KTtcCi0rCSAgICBjcHJlZml4IyNfY2ZiIyNj Yml0cyMjX2VuY3J5cHQoaW4sIG91dCwgKGxvbmcpKGNiaXRzPT0xICYmICEoY3R4LT5mbGFncyAm IEVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpP2NodW5rKjg6Y2h1bmspLCAmKChrc3RydWN0ICop Y3R4LT5jaXBoZXJfZGF0YSktPmtzY2hlZCwgY3R4LT5pdiwgJmN0eC0+bnVtLCBjdHgtPmVuY3J5 cHQpO1wKLSAJICAgIGlubC09Y2h1bms7XAotIAkgICAgaW4gKz1jaHVuaztcCi0gCSAgICBvdXQr PWNodW5rO1wKLUBAIC0yNTQsMTQgKzI1NCwyOSBAQCBjb25zdCBFVlBfQ0lQSEVSICpFVlBfIyNj bmFtZSMjX2VjYih2b2lkCi0gCi0gI2RlZmluZSBFVlBfQ19EQVRBKGtzdHJ1Y3QsIGN0eCkJKChr c3RydWN0ICopKGN0eCktPmNpcGhlcl9kYXRhKQotIAotLSNkZWZpbmUgSU1QTEVNRU5UX0NGQlIo Y2lwaGVyLGNwcmVmaXgsa3N0cnVjdCxrc2NoZWQsa2V5c2l6ZSxjYml0cyxpdl9sZW4pIFwKLSsj ZGVmaW5lIElNUExFTUVOVF9DRkJSKGNpcGhlcixjcHJlZml4LGtzdHJ1Y3Qsa3NjaGVkLGtleXNp emUsY2JpdHMsaXZfbGVuLGZsKSBcCi0gCUJMT0NLX0NJUEhFUl9mdW5jX2NmYihjaXBoZXIjI18j I2tleXNpemUsY3ByZWZpeCxjYml0cyxrc3RydWN0LGtzY2hlZCkgXAotIAlCTE9DS19DSVBIRVJf ZGVmX2NmYihjaXBoZXIjI18jI2tleXNpemUsa3N0cnVjdCwgXAotIAkJCSAgICAgTklEXyMjY2lw aGVyIyNfIyNrZXlzaXplLCBrZXlzaXplLzgsIGl2X2xlbiwgY2JpdHMsIFwKLS0JCQkgICAgIDAs IGNpcGhlciMjX2luaXRfa2V5LCBOVUxMLCBcCi0tCQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24x X2l2LCBcCi0tCQkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LCBcCi0tCQkJICAgICBOVUxM KQotKwkJCSAgICAgKGZsKXxFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwgXAotKwkJCSAgICAg Y2lwaGVyIyNfaW5pdF9rZXksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCi0rCi0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKyNkZWZpbmUgUkMyX3NldF9rZXkJcHJpdmF0ZV9SQzJfc2V0X2tleQotKyNk ZWZpbmUgUkM0X3NldF9rZXkJcHJpdmF0ZV9SQzRfc2V0X2tleQotKyNkZWZpbmUgQ0FTVF9zZXRf a2V5CXByaXZhdGVfQ0FTVF9zZXRfa2V5Ci0rI2RlZmluZSBSQzVfMzJfc2V0X2tleQlwcml2YXRl X1JDNV8zMl9zZXRfa2V5Ci0rI2RlZmluZSBCRl9zZXRfa2V5CXByaXZhdGVfQkZfc2V0X2tleQot KyNkZWZpbmUgQ2FtZWxsaWFfc2V0X2tleSBwcml2YXRlX0NhbWVsbGlhX3NldF9rZXkKLSsjZGVm aW5lIGlkZWFfc2V0X2VuY3J5cHRfa2V5IHByaXZhdGVfaWRlYV9zZXRfZW5jcnlwdF9rZXkKLSsK LSsjZGVmaW5lIE1ENV9Jbml0CXByaXZhdGVfTUQ1X0luaXQKLSsjZGVmaW5lIE1ENF9Jbml0CXBy aXZhdGVfTUQ0X0luaXQKLSsjZGVmaW5lIE1EMl9Jbml0CXByaXZhdGVfTUQyX0luaXQKLSsjZGVm aW5lIE1EQzJfSW5pdAlwcml2YXRlX01EQzJfSW5pdAotKyNkZWZpbmUgU0hBX0luaXQJcHJpdmF0 ZV9TSEFfSW5pdAotKwotKyNlbmRpZgotIAotIHN0cnVjdCBldnBfcGtleV9jdHhfc3QKLSAJewot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL21fZHNzLmMuZmlwcyBvcGVu c3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvbV9kc3MuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0 YTMvY3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMJMjAwNi0wNC0xOSAxOTowNTo1Ny4wMDAwMDAwMDAg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvbV9kc3MuYwkyMDA5LTA5 LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIGNv bnN0IEVWUF9NRCBkc2FfbWQ9Ci0gCU5JRF9kc2FXaXRoU0hBLAotIAlOSURfZHNhV2l0aFNIQSwK LSAJU0hBX0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNULAotKwlFVlBf TURfRkxBR19QS0VZX0RJR0VTVHxFVlBfTURfRkxBR19GSVBTLAotIAlpbml0LAotIAl1cGRhdGUs Ci0gCWZpbmFsLAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL21fZHNz MS5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL21fZHNzMS5jCi0tLS0gb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL21fZHNzMS5jLmZpcHMJMjAwNi0wNC0xOSAxOTow NTo1Ny4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAv bV9kc3MxLmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC04Miw3ICs4 Miw3IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgZHNzMV9tZD0KLSAJTklEX2RzYSwKLSAJTklEX2Rz YVdpdGhTSEExLAotIAlTSEFfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtFWV9ESUdF U1QsCi0rCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNUfEVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQs Ci0gCXVwZGF0ZSwKLSAJZmluYWwsCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0 by9ldnAvbV9zaGExLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvbV9zaGEx LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvbV9zaGExLmMuZmlwcwkyMDA4 LTAzLTEyIDIyOjE0OjI0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2V2cC9tX3NoYTEuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAot QEAgLTgyLDcgKzgyLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGExX21kPQotIAlOSURfc2hh MSwKLSAJTklEX3NoYTFXaXRoUlNBRW5jcnlwdGlvbiwKLSAJU0hBX0RJR0VTVF9MRU5HVEgsCi0t CUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9B QlNFTlQsCi0rCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19E SUdBTEdJRF9BQlNFTlR8Ci0rCQlFVlBfTURfRkxBR19GSVBTLAotIAlpbml0LAotIAl1cGRhdGUs Ci0gCWZpbmFsLAotQEAgLTExOSw3ICsxMjAsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTIy NF9tZD0KLSAJTklEX3NoYTIyNCwKLSAJTklEX3NoYTIyNFdpdGhSU0FFbmNyeXB0aW9uLAotIAlT SEEyMjRfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJF fEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0Rf U0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKLSsJCUVWUF9NRF9GTEFHX0ZJ UFMsCi0gCWluaXQyMjQsCi0gCXVwZGF0ZTI1NiwKLSAJZmluYWwyNTYsCi1AQCAtMTM4LDcgKzE0 MCw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMjU2X21kPQotIAlOSURfc2hhMjU2LAotIAlO SURfc2hhMjU2V2l0aFJTQUVuY3J5cHRpb24sCi0gCVNIQTI1Nl9ESUdFU1RfTEVOR1RILAotLQlF VlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJT RU5ULAotKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElH QUxHSURfQUJTRU5UfAotKwkJRVZQX01EX0ZMQUdfRklQUywKLSAJaW5pdDI1NiwKLSAJdXBkYXRl MjU2LAotIAlmaW5hbDI1NiwKLUBAIC0xNjksNyArMTcyLDggQEAgc3RhdGljIGNvbnN0IEVWUF9N RCBzaGEzODRfbWQ9Ci0gCU5JRF9zaGEzODQsCi0gCU5JRF9zaGEzODRXaXRoUlNBRW5jcnlwdGlv biwKLSAJU0hBMzg0X0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJ R05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCi0rCUVWUF9NRF9GTEFHX1BLRVlf TUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8Ci0rCQlFVlBfTURf RkxBR19GSVBTLAotIAlpbml0Mzg0LAotIAl1cGRhdGU1MTIsCi0gCWZpbmFsNTEyLAotQEAgLTE4 OCw3ICsxOTIsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTUxMl9tZD0KLSAJTklEX3NoYTUx MiwKLSAJTklEX3NoYTUxMldpdGhSU0FFbmNyeXB0aW9uLAotIAlTSEE1MTJfRElHRVNUX0xFTkdU SCwKLS0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FM R0lEX0FCU0VOVCwKLSsJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9G TEFHX0RJR0FMR0lEX0FCU0VOVHwKLSsJCUVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQ1MTIsCi0g CXVwZGF0ZTUxMiwKLSAJZmluYWw1MTIsCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2Ny eXB0by9ldnAvbmFtZXMuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2V2cC9uYW1l cy5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL25hbWVzLmMuZmlwcwkyMDA5 LTA0LTEwIDEyOjMwOjI3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2V2cC9uYW1lcy5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1A QCAtNjYsNiArNjYsMTAgQEAgaW50IEVWUF9hZGRfY2lwaGVyKGNvbnN0IEVWUF9DSVBIRVIgKmMp Ci0gCXsKLSAJaW50IHI7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlPUEVOU1NMX2luaXRf bGlicmFyeSgpOwotKyNlbmRpZgotKwotIAlyPU9CSl9OQU1FX2FkZChPQkpfbmlkMnNuKGMtPm5p ZCksT0JKX05BTUVfVFlQRV9DSVBIRVJfTUVUSCwoY29uc3QgY2hhciAqKWMpOwotIAlpZiAociA9 PSAwKSByZXR1cm4oMCk7Ci0gCWNoZWNrX2RlZmVyKGMtPm5pZCk7Ci1AQCAtNzksNiArODMsMTAg QEAgaW50IEVWUF9hZGRfZGlnZXN0KGNvbnN0IEVWUF9NRCAqbWQpCi0gCWludCByOwotIAljb25z dCBjaGFyICpuYW1lOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJT1BFTlNTTF9pbml0X2xp YnJhcnkoKTsKLSsjZW5kaWYKLSsKLSAJbmFtZT1PQkpfbmlkMnNuKG1kLT50eXBlKTsKLSAJcj1P QkpfTkFNRV9hZGQobmFtZSxPQkpfTkFNRV9UWVBFX01EX01FVEgsKGNvbnN0IGNoYXIgKiltZCk7 Ci0gCWlmIChyID09IDApIHJldHVybigwKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2V2cC9wX3NpZ24uYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2V2cC9w X3NpZ24uYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2V2cC9wX3NpZ24uYy5maXBz CTIwMDYtMDUtMjQgMTU6Mjk6MzAuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1i ZXRhMy9jcnlwdG8vZXZwL3Bfc2lnbi5jCTIwMDktMDktMzAgMTU6MDc6MTQuMDAwMDAwMDAwICsw MjAwCi1AQCAtNjEsNiArNjEsNyBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotICNpbmNs dWRlIDxvcGVuc3NsL29iamVjdHMuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gCi0gI2lmZGVmIHVuZGVmCi0gdm9pZCBFVlBfU2lnbklu aXQoRVZQX01EX0NUWCAqY3R4LCBFVlBfTUQgKnR5cGUpCi1AQCAtMTAxLDYgKzEwMiwyMiBAQCBp bnQgRVZQX1NpZ25GaW5hbChFVlBfTURfQ1RYICpjdHgsIHVuc2lnCi0gCQkJZ290byBlcnI7Ci0g CQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9zaWduYXR1cmVfbWQocGtjdHgsIGN0eC0+ZGlnZXN0KSA8 PSAwKQotIAkJCWdvdG8gZXJyOwotKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdf UEFEX1g5MzEpCi0rCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJT QV9YOTMxX1BBRERJTkcpIDw9IDApCi0rCQkJCWdvdG8gZXJyOwotKwkJaWYgKGN0eC0+ZmxhZ3Mg JiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUykKLSsJCQl7Ci0rCQkJaW50IHNhbHRsZW47Ci0rCQkJ aWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9QS0NTMV9QU1NfUEFE RElORykgPD0gMCkKLSsJCQkJZ290byBlcnI7Ci0rCQkJc2FsdGxlbiA9IE1fRVZQX01EX0NUWF9G TEFHX1BTU19TQUxUKGN0eCk7Ci0rCQkJaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BT U19NRExFTikKLSsJCQkJc2FsdGxlbiA9IC0xOwotKwkJCWVsc2UgaWYgKHNhbHRsZW4gPT0gRVZQ X01EX0NUWF9GTEFHX1BTU19NUkVDKQotKwkJCQlzYWx0bGVuID0gLTI7Ci0rCQkJaWYgKEVWUF9Q S0VZX0NUWF9zZXRfcnNhX3Bzc19zYWx0bGVuKHBrY3R4LCBzYWx0bGVuKSA8PSAwKQotKwkJCQln b3RvIGVycjsKLSsJCQl9Ci0gCQlpZiAoRVZQX1BLRVlfc2lnbihwa2N0eCwgc2lncmV0LCAmc2x0 bXAsIG0sIG1fbGVuKSA8PSAwKQotIAkJCWdvdG8gZXJyOwotIAkJKnNpZ2xlbiA9IHNsdG1wOwot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMuZmlwcyBv cGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvcF92ZXJpZnkuYwotLS0tIG9wZW5zc2wtMS4w LjAtYmV0YTMvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jLmZpcHMJMjAwOC0xMS0xMiAwNDo1ODowMS4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9ldnAvcF92ZXJp ZnkuYwkyMDA5LTA5LTMwIDE1OjA3OjI3LjAwMDAwMDAwMCArMDIwMAotQEAgLTYxLDYgKzYxLDcg QEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3Rz Lmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5o PgotIAotIGludCBFVlBfVmVyaWZ5RmluYWwoRVZQX01EX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25l ZCBjaGFyICpzaWdidWYsCi0gCSAgICAgdW5zaWduZWQgaW50IHNpZ2xlbiwgRVZQX1BLRVkgKnBr ZXkpCi1AQCAtODYsNiArODcsMjIgQEAgaW50IEVWUF9WZXJpZnlGaW5hbChFVlBfTURfQ1RYICpj dHgsIGNvbgotIAkJCWdvdG8gZXJyOwotIAkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJl X21kKHBrY3R4LCBjdHgtPmRpZ2VzdCkgPD0gMCkKLSAJCQlnb3RvIGVycjsKLSsJCWlmIChjdHgt PmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKQotKwkJCWlmIChFVlBfUEtFWV9DVFhf c2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfWDkzMV9QQURESU5HKSA8PSAwKQotKwkJCQlnb3Rv IGVycjsKLSsJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MpCi0rCQkJ ewotKwkJCWludCBzYWx0bGVuOwotKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5n KHBrY3R4LCBSU0FfUEtDUzFfUFNTX1BBRERJTkcpIDw9IDApCi0rCQkJCWdvdG8gZXJyOwotKwkJ CXNhbHRsZW4gPSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpOwotKwkJCWlmIChzYWx0 bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4pCi0rCQkJCXNhbHRsZW4gPSAtMTsKLSsJ CQllbHNlIGlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQykKLSsJCQkJc2Fs dGxlbiA9IC0yOwotKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxlbihwa2N0 eCwgc2FsdGxlbikgPD0gMCkKLSsJCQkJZ290byBlcnI7Ci0rCQkJfQotIAkJaSA9IEVWUF9QS0VZ X3ZlcmlmeShwa2N0eCwgc2lnYnVmLCBzaWdsZW4sIG0sIG1fbGVuKTsKLSAJCWVycjoKLSAJCUVW UF9QS0VZX0NUWF9mcmVlKHBrY3R4KTsKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4w LWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYwotLS0tIC9kZXYvbnVsbAkyMDA5 LTA5LTIzIDEwOjU2OjAyLjE0ODAwMTc1MiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAw MDAwICswMjAwCi1AQCAtMCwwICsxLDkzOSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJp Z2h0IChjKSAyMDA0IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot KyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZl cnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAq ICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50Ogot KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wg VG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAg ICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg d2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVy bWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcu Ci0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90 IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4g dGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0 aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBm b3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xl ZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAq IEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsg KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwot Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rICBOSVNU IEFFUyBBbGdvcml0aG0gVmFsaWRhdGlvbiBTdWl0ZQotKyAgVGVzdCBQcm9ncmFtCi0rCi0rICBE b25hdGVkIHRvIE9wZW5TU0wgYnk6Ci0rICBWLU9ORSBDb3Jwb3JhdGlvbgotKyAgMjAyNTAgQ2Vu dHVyeSBCbHZkLCBTdWl0ZSAzMDAKLSsgIEdlcm1hbnRvd24sIE1EIDIwODc0Ci0rICBVLlMuQS4K LSsgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwot KyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3Ry aW5nLmg+Ci0rI2luY2x1ZGUgPGVycm5vLmg+Ci0rI2luY2x1ZGUgPGFzc2VydC5oPgotKyNpbmNs dWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rCi0rI2luY2x1ZGUgPG9wZW5z c2wvZXJyLmg+Ci0rI2luY2x1ZGUgImVfb3MuaCIKLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwot KwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5v IEZJUFMgQUVTIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0r Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwot KyNkZWZpbmUgQUVTX0JMT0NLX1NJWkUgMTYKLSsKLSsjZGVmaW5lIFZFUkJPU0UgMAotKwotKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotK2lu dCBBRVNUZXN0KEVWUF9DSVBIRVJfQ1RYICpjdHgsCi0rCSAgICBjaGFyICphbW9kZSwgaW50IGFr ZXlzeiwgdW5zaWduZWQgY2hhciAqYUtleSwgCi0rCSAgICB1bnNpZ25lZCBjaGFyICppVmVjLCAK LSsJICAgIGludCBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJICAgIHVu c2lnbmVkIGNoYXIgKnBsYWludGV4dCwgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwgaW50IGxl bikKLSsgICAgewotKyAgICBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIgPSBOVUxMOwotKwotKyAg ICBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNCQyIpID09IDApCi0rCXsKLSsJc3dpdGNoIChha2V5 c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NiYygpOwot KwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NiYygp OwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2Ni YygpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCi0rCX0KLSsgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChh bW9kZSwgIkVDQiIpID09IDApCi0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNl IDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2VjYigpOwotKwkJYnJlYWs7Ci0rCi0rCQlj YXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2VjYigpOwotKwkJYnJlYWs7Ci0rCi0r CQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2VjYigpOwotKwkJYnJlYWs7Ci0r CQl9Ci0rCX0KLSsgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNGQjEyOCIpID09IDAp Ci0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9 IEVWUF9hZXNfMTI4X2NmYjEyOCgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNp cGhlciA9IEVWUF9hZXNfMTkyX2NmYjEyOCgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoK LSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2NmYjEyOCgpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCi0r CX0KLSsgICAgZWxzZSBpZiAoc3RybmNhc2VjbXAoYW1vZGUsICJPRkIiLCAzKSA9PSAwKQotKwl7 Ci0rCXN3aXRjaCAoYWtleXN6KQotKwkJewotKwkJY2FzZSAxMjg6Ci0rCQljaXBoZXIgPSBFVlBf YWVzXzEyOF9vZmIoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBF VlBfYWVzXzE5Ml9vZmIoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAyNTY6Ci0rCQljaXBoZXIg PSBFVlBfYWVzXzI1Nl9vZmIoKTsKLSsJCWJyZWFrOwotKwkJfQotKwl9Ci0rICAgIGVsc2UgaWYo IXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJewotKwlzd2l0Y2ggKGFrZXlzeikKLSsJCXsK LSsJCWNhc2UgMTI4OgotKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2ZiMSgpOwotKwkJYnJlYWs7 Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NmYjEoKTsKLSsJCWJy ZWFrOwotKwotKwkJY2FzZSAyNTY6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jZmIxKCk7Ci0r CQlicmVhazsKLSsJCX0KLSsJfQotKyAgICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkI4 IikpCi0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhl ciA9IEVWUF9hZXNfMTI4X2NmYjgoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQlj aXBoZXIgPSBFVlBfYWVzXzE5Ml9jZmI4KCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMjU2Ogot KwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2ZiOCgpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCX0KLSsg ICAgZWxzZQotKwl7Ci0rCXByaW50ZigiVW5rbm93biBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwly ZXR1cm4gMDsKLSsJfQotKyAgICBpZiAoIWNpcGhlcikKLSsJewotKwlwcmludGYoIkludmFsaWQg a2V5IHNpemU6ICVkXG4iLCBha2V5c3opOwotKwlyZXR1cm4gMDsgCi0rCX0KLSsgICAgaWYgKEVW UF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBhS2V5LCBpVmVjLCBkaXIpIDw9IDAp Ci0rCXJldHVybiAwOwotKyAgICBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQotKwlNX0VW UF9DSVBIRVJfQ1RYX3NldF9mbGFncyhjdHgsIEVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpOwot KyAgICBpZiAoZGlyKQotKwkJRVZQX0NpcGhlcihjdHgsIGNpcGhlcnRleHQsIHBsYWludGV4dCwg bGVuKTsKLSsJZWxzZQotKwkJRVZQX0NpcGhlcihjdHgsIHBsYWludGV4dCwgY2lwaGVydGV4dCwg bGVuKTsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLStjaGFyICp0X3RhZ1syXSA9IHsiUExBSU5U RVhUIiwgIkNJUEhFUlRFWFQifTsKLStjaGFyICp0X21vZGVbNl0gPSB7IkNCQyIsIkVDQiIsIk9G QiIsIkNGQjEiLCJDRkI4IiwiQ0ZCMTI4In07Ci0rZW51bSBNb2RlIHtDQkMsIEVDQiwgT0ZCLCBD RkIxLCBDRkI4LCBDRkIxMjh9OwotK2VudW0gWENyeXB0IHtYREVDUllQVCwgWEVOQ1JZUFR9Owot KwotKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotKy8qICBNb250ZSBDYXJsbyBU ZXN0cyAgICAgICAgICAqLwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwot Ky8qI2RlZmluZSBnYihhLGIpICgoKGEpWyhiKS84XSA+PiAoKGIpJTgpKSYxKSovCi0rLyojZGVm aW5lIHNiKGEsYix2KSAoKGEpWyhiKS84XT0oKGEpWyhiKS84XSZ+KDEgPDwgKChiKSU4KSkpfCgh ISh2KSA8PCAoKGIpJTgpKSkqLwotKwotKyNkZWZpbmUgZ2IoYSxiKSAoKChhKVsoYikvOF0gPj4g KDctKGIpJTgpKSYxKQotKyNkZWZpbmUgc2IoYSxiLHYpICgoYSlbKGIpLzhdPSgoYSlbKGIpLzhd Jn4oMSA8PCAoNy0oYiklOCkpKXwoISEodikgPDwgKDctKGIpJTgpKSkKLSsKLStpbnQgZG9fbWN0 KGNoYXIgKmFtb2RlLCAKLSsJICAgaW50IGFrZXlzeiwgdW5zaWduZWQgY2hhciAqYUtleSx1bnNp Z25lZCBjaGFyICppVmVjLAotKwkgICBpbnQgZGlyLCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBpbnQg bGVuLAotKwkgICBGSUxFICpyZnApCi0rICAgIHsKLSsgICAgaW50IHJldCA9IDA7Ci0rICAgIHVu c2lnbmVkIGNoYXIga2V5WzEwMV1bMzJdOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2WzEwMV1bQUVT X0JMT0NLX1NJWkVdOwotKyAgICB1bnNpZ25lZCBjaGFyIHB0ZXh0WzEwMDFdWzMyXTsKLSsgICAg dW5zaWduZWQgY2hhciBjdGV4dFsxMDAxXVszMl07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVy dGV4dFs2NCs0XTsKLSsgICAgaW50IGksIGosIG4sIG4xLCBuMjsKLSsgICAgaW50IGltb2RlID0g MCwgbmtleXN6ID0gYWtleXN6Lzg7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQ X0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgaWYgKGxlbiA+IDMyKQotKwl7Ci0rCXBy aW50ZigiXG4+Pj4+IExlbmd0aCBleGNlZWRzIDMyIGZvciAlcyAlZCA8PDw8XG5cbiIsIAotKwkg ICAgICAgYW1vZGUsIGFrZXlzeik7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICBmb3IgKGltb2Rl ID0gMDsgaW1vZGUgPCA2OyArK2ltb2RlKQotKwlpZiAoc3RyY21wKGFtb2RlLCB0X21vZGVbaW1v ZGVdKSA9PSAwKQotKwkgICAgYnJlYWs7Ci0rICAgIGlmIChpbW9kZSA9PSA2KQotKwl7IAotKwlw cmludGYoIlVucmVjb2duaXplZCBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwlyZXR1cm4gLTE7Ci0r CX0KLSsKLSsgICAgbWVtY3B5KGtleVswXSwgYUtleSwgbmtleXN6KTsKLSsgICAgaWYgKGlWZWMp Ci0rCW1lbWNweShpdlswXSwgaVZlYywgQUVTX0JMT0NLX1NJWkUpOwotKyAgICBpZiAoZGlyID09 IFhFTkNSWVBUKQotKwltZW1jcHkocHRleHRbMF0sIHRleHQsIGxlbik7Ci0rICAgIGVsc2UKLSsJ bWVtY3B5KGN0ZXh0WzBdLCB0ZXh0LCBsZW4pOwotKyAgICBmb3IgKGkgPSAwOyBpIDwgMTAwOyAr K2kpCi0rCXsKLSsJLyogcHJpbnRmKCJJdGVyYXRpb24gJWRcbiIsIGkpOyAqLwotKwlpZiAoaSA+ IDApCi0rCSAgICB7Ci0rCSAgICBmcHJpbnRmKHJmcCwiQ09VTlQgPSAlZFxuIixpKTsKLSsJICAg IE91dHB1dFZhbHVlKCJLRVkiLGtleVtpXSxua2V5c3oscmZwLDApOwotKwkgICAgaWYgKGltb2Rl ICE9IEVDQikgIC8qIEVDQiAqLwotKwkJT3V0cHV0VmFsdWUoIklWIixpdltpXSxBRVNfQkxPQ0tf U0laRSxyZnAsMCk7Ci0rCSAgICAvKiBPdXRwdXQgQ2lwaGVydGV4dCB8IFBsYWludGV4dCAqLwot KwkgICAgT3V0cHV0VmFsdWUodF90YWdbZGlyXjFdLGRpciA/IHB0ZXh0WzBdIDogY3RleHRbMF0s bGVuLHJmcCwKLSsJCQlpbW9kZSA9PSBDRkIxKTsKLSsJICAgIH0KLSsJZm9yIChqID0gMDsgaiA8 IDEwMDA7ICsraikKLSsJICAgIHsKLSsJICAgIHN3aXRjaCAoaW1vZGUpCi0rCQl7Ci0rCSAgICBj YXNlIEVDQjoKLSsJCWlmIChqID09IDApCi0rCQkgICAgeyAvKiBzZXQgdXAgZW5jcnlwdGlvbiAq LwotKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwga2V5W2ldLCBOVUxM LCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBw dGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJ CQltZW1jcHkocHRleHRbaisxXSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJCW1l bWNweShjdGV4dFtqKzFdLCBwdGV4dFtqXSwgbGVuKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkg ICAgewotKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCi0rCQkJewotKwkJCUVWUF9DaXBoZXIo JmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBj dGV4dFtqXSwgbGVuKTsKLSsJCQl9Ci0rCQkgICAgZWxzZQotKwkJCXsKLSsJCQlFVlBfQ2lwaGVy KCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCQltZW1jcHkoY3RleHRbaisxXSwg cHRleHRbal0sIGxlbik7Ci0rCQkJfQotKwkJICAgIH0KLSsJCWJyZWFrOwotKwotKwkgICAgY2Fz ZSBDQkM6Ci0rCSAgICBjYXNlIE9GQjogIAotKwkgICAgY2FzZSBDRkIxMjg6Ci0rCQlpZiAoaiA9 PSAwKQotKwkJICAgIHsKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3os IGtleVtpXSwgaXZbaV0sIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlw dCAqLwotKwkJCQkgIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCSAgICBpZiAoZGlyID09 IFhFTkNSWVBUKQotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBpdltpXSwgbGVuKTsKLSsJCSAgICBl bHNlCi0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sIGl2W2ldLCBsZW4pOwotKwkJICAgIH0KLSsJCWVs c2UKLSsJCSAgICB7Ci0rCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJCQl7Ci0rCQkJRVZQ X0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7Ci0rCQkJbWVtY3B5KHB0ZXh0 W2orMV0sIGN0ZXh0W2otMV0sIGxlbik7Ci0rCQkJfQotKwkJICAgIGVsc2UKLSsJCQl7Ci0rCQkJ RVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkJbWVtY3B5KGN0 ZXh0W2orMV0sIHB0ZXh0W2otMV0sIGxlbik7Ci0rCQkJfQotKwkJICAgIH0KLSsJCWJyZWFrOwot KwotKwkgICAgY2FzZSBDRkI4OgotKwkJaWYgKGogPT0gMCkKLSsJCSAgICB7Ci0rCQkgICAgcmV0 ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBrZXlbaV0sIGl2W2ldLCAKLSsJCQkJICBk aXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBwdGV4dFtqXSwgY3Rl eHRbal0sIGxlbik7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZiAoZGly ID09IFhFTkNSWVBUKQotKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBs ZW4pOwotKwkJICAgIGVsc2UKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtq XSwgbGVuKTsKLSsJCSAgICB9Ci0rCQlpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJICAgIHsKLSsJ CSAgICBpZiAoaiA8IDE2KQotKwkJCW1lbWNweShwdGV4dFtqKzFdLCAmaXZbaV1bal0sIGxlbik7 Ci0rCQkgICAgZWxzZQotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqLTE2XSwgbGVuKTsK LSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGlmIChqIDwgMTYpCi0rCQkJbWVt Y3B5KGN0ZXh0W2orMV0sICZpdltpXVtqXSwgbGVuKTsKLSsJCSAgICBlbHNlCi0rCQkJbWVtY3B5 KGN0ZXh0W2orMV0sIHB0ZXh0W2otMTZdLCBsZW4pOwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwot KwkgICAgY2FzZSBDRkIxOgotKwkJaWYoaiA9PSAwKQotKwkJICAgIHsKLSsjaWYgMAotKwkJICAg IC8qIGNvbXBlbnNhdGUgZm9yIHdyb25nIGVuZGlhbm5lc3Mgb2YgaW5wdXQgZmlsZSAqLwotKwkJ ICAgIGlmKGkgPT0gMCkKLSsJCQlwdGV4dFswXVswXTw8PTc7Ci0rI2VuZGlmCi0rCQkgICAgcmV0 ID0gQUVTVGVzdCgmY3R4LGFtb2RlLGFrZXlzeixrZXlbaV0saXZbaV0sZGlyLAotKwkJCQlwdGV4 dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAg ICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0 ZXh0W2pdLCBsZW4pOwotKwkJICAgIGVsc2UKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pd LCBjdGV4dFtqXSwgbGVuKTsKLSsKLSsJCSAgICB9Ci0rCQlpZihkaXIgPT0gWEVOQ1JZUFQpCi0r CQkgICAgewotKwkJICAgIGlmKGogPCAxMjgpCi0rCQkJc2IocHRleHRbaisxXSwwLGdiKGl2W2ld LGopKTsKLSsJCSAgICBlbHNlCi0rCQkJc2IocHRleHRbaisxXSwwLGdiKGN0ZXh0W2otMTI4XSww KSk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZihqIDwgMTI4KQotKwkJ CXNiKGN0ZXh0W2orMV0sMCxnYihpdltpXSxqKSk7Ci0rCQkgICAgZWxzZQotKwkJCXNiKGN0ZXh0 W2orMV0sMCxnYihwdGV4dFtqLTEyOF0sMCkpOwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwkJfQot KwkgICAgfQotKwktLWo7IC8qIHJlc2V0IHRvIGxhc3Qgb2YgcmFuZ2UgKi8KLSsJLyogT3V0cHV0 IENpcGhlcnRleHQgfCBQbGFpbnRleHQgKi8KLSsJT3V0cHV0VmFsdWUodF90YWdbZGlyXSxkaXIg PyBjdGV4dFtqXSA6IHB0ZXh0W2pdLGxlbixyZnAsCi0rCQkgICAgaW1vZGUgPT0gQ0ZCMSk7Ci0r CWZwcmludGYocmZwLCAiXG4iKTsgIC8qIGFkZCBzZXBhcmF0b3IgKi8KLSsKLSsJLyogQ29tcHV0 ZSBuZXh0IEtFWSAqLwotKwlpZiAoZGlyID09IFhFTkNSWVBUKQotKwkgICAgewotKwkgICAgaWYg KGltb2RlID09IENGQjgpCi0rCQl7IC8qIGN0ID0gQ1Rbai0xNV0gfHwgQ1Rbai0xNF0gfHwgLi4u IHx8IENUW2pdICovCi0rCQlmb3IgKG4xID0gMCwgbjIgPSBua2V5c3otMTsgbjEgPCBua2V5c3o7 ICsrbjEsIC0tbjIpCi0rCQkgICAgY2lwaGVydGV4dFtuMV0gPSBjdGV4dFtqLW4yXVswXTsKLSsJ CX0KLSsJICAgIGVsc2UgaWYoaW1vZGUgPT0gQ0ZCMSkKLSsJCXsKLSsJCWZvcihuMT0wLG4yPWFr ZXlzei0xIDsgbjEgPCBha2V5c3ogOyArK24xLC0tbjIpCi0rCQkgICAgc2IoY2lwaGVydGV4dCxu MSxnYihjdGV4dFtqLW4yXSwwKSk7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQlzd2l0Y2ggKGFrZXlz eikKLSsJCSAgICB7Ci0rCQljYXNlIDEyODoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3Rl eHRbal0sIDE2KTsKLSsJCSAgICBicmVhazsKLSsJCWNhc2UgMTkyOgotKwkJICAgIG1lbWNweShj aXBoZXJ0ZXh0LCBjdGV4dFtqLTFdKzgsIDgpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0Kzgs IGN0ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJlYWs7Ci0rCQljYXNlIDI1NjoKLSsJCSAgICBtZW1j cHkoY2lwaGVydGV4dCwgY3RleHRbai0xXSwgMTYpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0 KzE2LCBjdGV4dFtqXSwgMTYpOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJICAgIH0KLSsJ ZWxzZQotKwkgICAgewotKwkgICAgaWYgKGltb2RlID09IENGQjgpCi0rCQl7IC8qIGN0ID0gQ1Rb ai0xNV0gfHwgQ1Rbai0xNF0gfHwgLi4uIHx8IENUW2pdICovCi0rCQlmb3IgKG4xID0gMCwgbjIg PSBua2V5c3otMTsgbjEgPCBua2V5c3o7ICsrbjEsIC0tbjIpCi0rCQkgICAgY2lwaGVydGV4dFtu MV0gPSBwdGV4dFtqLW4yXVswXTsKLSsJCX0KLSsJICAgIGVsc2UgaWYoaW1vZGUgPT0gQ0ZCMSkK LSsJCXsKLSsJCWZvcihuMT0wLG4yPWFrZXlzei0xIDsgbjEgPCBha2V5c3ogOyArK24xLC0tbjIp Ci0rCQkgICAgc2IoY2lwaGVydGV4dCxuMSxnYihwdGV4dFtqLW4yXSwwKSk7Ci0rCQl9Ci0rCSAg ICBlbHNlCi0rCQlzd2l0Y2ggKGFrZXlzeikKLSsJCSAgICB7Ci0rCQljYXNlIDEyODoKLSsJCSAg ICBtZW1jcHkoY2lwaGVydGV4dCwgcHRleHRbal0sIDE2KTsKLSsJCSAgICBicmVhazsKLSsJCWNh c2UgMTkyOgotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBwdGV4dFtqLTFdKzgsIDgpOwotKwkJ ICAgIG1lbWNweShjaXBoZXJ0ZXh0KzgsIHB0ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJlYWs7Ci0r CQljYXNlIDI1NjoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgcHRleHRbai0xXSwgMTYpOwot KwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzE2LCBwdGV4dFtqXSwgMTYpOwotKwkJICAgIGJyZWFr OwotKwkJICAgIH0KLSsJICAgIH0KLSsJLyogQ29tcHV0ZSBuZXh0IGtleTogS2V5W2krMV0gPSBL ZXlbaV0geG9yIGN0ICovCi0rCWZvciAobiA9IDA7IG4gPCBua2V5c3o7ICsrbikKLSsJICAgIGtl eVtpKzFdW25dID0ga2V5W2ldW25dIF4gY2lwaGVydGV4dFtuXTsKLSsJCi0rCS8qIENvbXB1dGUg bmV4dCBJViBhbmQgdGV4dCAqLwotKwlpZiAoZGlyID09IFhFTkNSWVBUKQotKwkgICAgewotKwkg ICAgc3dpdGNoIChpbW9kZSkKLSsJCXsKLSsJICAgIGNhc2UgRUNCOgotKwkJbWVtY3B5KHB0ZXh0 WzBdLCBjdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENC QzoKLSsJICAgIGNhc2UgT0ZCOgotKwkgICAgY2FzZSBDRkIxMjg6Ci0rCQltZW1jcHkoaXZbaSsx XSwgY3RleHRbal0sIEFFU19CTE9DS19TSVpFKTsKLSsJCW1lbWNweShwdGV4dFswXSwgY3RleHRb ai0xXSwgQUVTX0JMT0NLX1NJWkUpOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENGQjg6Ci0rCQkv KiBJVltpKzFdID0gY3QgKi8KLSsJCWZvciAobjEgPSAwLCBuMiA9IDE1OyBuMSA8IDE2OyArK24x LCAtLW4yKQotKwkJICAgIGl2W2krMV1bbjFdID0gY3RleHRbai1uMl1bMF07Ci0rCQlwdGV4dFsw XVswXSA9IGN0ZXh0W2otMTZdWzBdOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENGQjE6Ci0rCQlm b3IobjE9MCxuMj0xMjcgOyBuMSA8IDEyOCA7ICsrbjEsLS1uMikKLSsJCSAgICBzYihpdltpKzFd LG4xLGdiKGN0ZXh0W2otbjJdLDApKTsKLSsJCXB0ZXh0WzBdWzBdPWN0ZXh0W2otMTI4XVswXSYw eDgwOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICB9Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAgIHN3 aXRjaCAoaW1vZGUpCi0rCQl7Ci0rCSAgICBjYXNlIEVDQjoKLSsJCW1lbWNweShjdGV4dFswXSwg cHRleHRbal0sIEFFU19CTE9DS19TSVpFKTsKLSsJCWJyZWFrOwotKwkgICAgY2FzZSBDQkM6Ci0r CSAgICBjYXNlIE9GQjoKLSsJICAgIGNhc2UgQ0ZCMTI4OgotKwkJbWVtY3B5KGl2W2krMV0sIHB0 ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7Ci0rCQltZW1jcHkoY3RleHRbMF0sIHB0ZXh0W2otMV0s IEFFU19CTE9DS19TSVpFKTsKLSsJCWJyZWFrOwotKwkgICAgY2FzZSBDRkI4OgotKwkJZm9yIChu MSA9IDAsIG4yID0gMTU7IG4xIDwgMTY7ICsrbjEsIC0tbjIpCi0rCQkgICAgaXZbaSsxXVtuMV0g PSBwdGV4dFtqLW4yXVswXTsKLSsJCWN0ZXh0WzBdWzBdID0gcHRleHRbai0xNl1bMF07Ci0rCQli cmVhazsKLSsJICAgIGNhc2UgQ0ZCMToKLSsJCWZvcihuMT0wLG4yPTEyNyA7IG4xIDwgMTI4IDsg KytuMSwtLW4yKQotKwkJICAgIHNiKGl2W2krMV0sbjEsZ2IocHRleHRbai1uMl0sMCkpOwotKwkJ Y3RleHRbMF1bMF09cHRleHRbai0xMjhdWzBdJjB4ODA7Ci0rCQlicmVhazsKLSsJCX0KLSsJICAg IH0KLSsJfQotKyAgICAKLSsgICAgcmV0dXJuIHJldDsKLSsgICAgfQotKwotKy8qPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLSsvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KLSsgICMgQ29uZmlnIGluZm8gZm9yIHYtb25lCi0rICAjIEFFU1ZT IE1NVCB0ZXN0IGRhdGEgZm9yIEVDQgotKyAgIyBTdGF0ZSA6IEVuY3J5cHQgYW5kIERlY3J5cHQK LSsgICMgS2V5IExlbmd0aCA6IDI1NgotKyAgIyBGcmkgQXVnIDMwIDA0OjA3OjIyIFBNCi0rICAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLStpbnQgcHJvY19maWxlKGNoYXIgKnJx ZmlsZSwgY2hhciAqcnNwZmlsZSkKLSsgICAgewotKyAgICBjaGFyIGFmblsyNTZdLCByZm5bMjU2 XTsKLSsgICAgRklMRSAqYWZwID0gTlVMTCwgKnJmcCA9IE5VTEw7Ci0rICAgIGNoYXIgaWJ1Zlsy MDQ4XTsKLSsgICAgY2hhciB0YnVmWzIwNDhdOwotKyAgICBpbnQgaWxlbiwgbGVuLCByZXQgPSAw OwotKyAgICBjaGFyIGFsZ29bOF0gPSAiIjsKLSsgICAgY2hhciBhbW9kZVs4XSA9ICIiOwotKyAg ICBjaGFyIGF0ZXN0WzhdID0gIiI7Ci0rICAgIGludCBha2V5c3ogPSAwOwotKyAgICB1bnNpZ25l ZCBjaGFyIGlWZWNbMjBdLCBhS2V5WzQwXTsKLSsgICAgaW50IGRpciA9IC0xLCBlcnIgPSAwLCBz dGVwID0gMDsKLSsgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMjA0OF07Ci0rICAgIHVuc2ln bmVkIGNoYXIgY2lwaGVydGV4dFsyMDQ4XTsKLSsgICAgY2hhciAqcnA7Ci0rICAgIEVWUF9DSVBI RVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgaWYg KCFycWZpbGUgfHwgISgqcnFmaWxlKSkKLSsJewotKwlwcmludGYoIk5vIHJlcSBmaWxlXG4iKTsK LSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIHN0cmNweShhZm4sIHJxZmlsZSk7Ci0rCi0rICAgIGlm ICgoYWZwID0gZm9wZW4oYWZuLCAiciIpKSA9PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90 IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKLSsJICAgICAgIGFmbiwgc3RyZXJyb3IoZXJybm8pKTsK LSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIGlmICghcnNwZmlsZSkKLSsJewotKwlzdHJjcHkocmZu LGFmbik7Ci0rCXJwPXN0cnN0cihyZm4sInJlcS8iKTsKLSsjaWZkZWYgT1BFTlNTTF9TWVNfV0lO MzIKLSsJaWYgKCFycCkKLSsJICAgIHJwPXN0cnN0cihyZm4sInJlcVxcIik7Ci0rI2VuZGlmCi0r CWFzc2VydChycCk7Ci0rCW1lbWNweShycCwicnNwIiwzKTsKLSsJcnAgPSBzdHJzdHIocmZuLCAi LnJlcSIpOwotKwltZW1jcHkocnAsICIucnNwIiwgNCk7Ci0rCXJzcGZpbGUgPSByZm47Ci0rCX0K LSsgICAgaWYgKChyZnAgPSBmb3Blbihyc3BmaWxlLCAidyIpKSA9PSBOVUxMKQotKwl7Ci0rCXBy aW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKLSsJICAgICAgIHJmbiwgc3RyZXJy b3IoZXJybm8pKTsKLSsJZmNsb3NlKGFmcCk7Ci0rCWFmcCA9IE5VTEw7Ci0rCXJldHVybiAtMTsK LSsJfQotKyAgICB3aGlsZSAoIWVyciAmJiAoZmdldHMoaWJ1Ziwgc2l6ZW9mKGlidWYpLCBhZnAp KSAhPSBOVUxMKQotKwl7Ci0rCXRpZHlfbGluZSh0YnVmLCBpYnVmKTsKLSsJaWxlbiA9IHN0cmxl bihpYnVmKTsKLSsJLyogICAgICBwcmludGYoInN0ZXA9JWQgaWJ1Zj0lcyIsc3RlcCxpYnVmKTsg Ki8KLSsJc3dpdGNoIChzdGVwKQotKwkgICAgewotKwljYXNlIDA6ICAvKiByZWFkIHByZWFtYmxl ICovCi0rCSAgICBpZiAoaWJ1ZlswXSA9PSAnXG4nKQotKwkJeyAvKiBlbmQgb2YgcHJlYW1ibGUg Ki8KLSsJCWlmICgoKmFsZ28gPT0gJ1wwJykgfHwKLSsJCSAgICAoKmFtb2RlID09ICdcMCcpIHx8 Ci0rCQkgICAgKGFrZXlzeiA9PSAwKSkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJNaXNzaW5n IEFsZ29yaXRobSwgTW9kZSBvciBLZXlTaXplICglcy8lcy8lZClcbiIsCi0rCQkJICAgYWxnbyxh bW9kZSxha2V5c3opOwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAg IHsKLSsJCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJICAgICsrIHN0ZXA7Ci0rCQkgICAgfQot KwkJfQotKwkgICAgZWxzZSBpZiAoaWJ1ZlswXSAhPSAnIycpCi0rCQl7Ci0rCQlwcmludGYoIklu dmFsaWQgcHJlYW1ibGUgaXRlbTogJXNcbiIsIGlidWYpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJ ICAgIGVsc2UKLSsJCXsgLyogcHJvY2VzcyBwcmVhbWJsZSAqLwotKwkJY2hhciAqeHAsICpwcCA9 IGlidWYrMjsKLSsJCWludCBuOwotKwkJaWYgKGFrZXlzeikKLSsJCSAgICB7IC8qIGluc2VydCBj dXJyZW50IHRpbWUgJiBkYXRlICovCi0rCQkgICAgdGltZV90IHJ0aW0gPSB0aW1lKDApOwotKwkJ ICAgIGZwcmludGYocmZwLCAiIyAlcyIsIGN0aW1lKCZydGltKSk7Ci0rCQkgICAgfQotKwkJZWxz ZQotKwkJICAgIHsKLSsJCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJICAgIGlmIChzdHJuY21w KHBwLCAiQUVTVlMgIiwgNikgPT0gMCkKLSsJCQl7Ci0rCQkJc3RyY3B5KGFsZ28sICJBRVMiKTsK LSsJCQkvKiBnZXQgdGVzdCB0eXBlICovCi0rCQkJcHAgKz0gNjsKLSsJCQl4cCA9IHN0cmNocihw cCwgJyAnKTsKLSsJCQluID0geHAtcHA7Ci0rCQkJc3RybmNweShhdGVzdCwgcHAsIG4pOwotKwkJ CWF0ZXN0W25dID0gJ1wwJzsKLSsJCQkvKiBnZXQgbW9kZSAqLwotKwkJCXhwID0gc3RycmNocihw cCwgJyAnKTsgLyogZ2V0IG1vZGUiICovCi0rCQkJbiA9IHN0cmxlbih4cCsxKS0xOwotKwkJCXN0 cm5jcHkoYW1vZGUsIHhwKzEsIG4pOwotKwkJCWFtb2RlW25dID0gJ1wwJzsKLSsJCQkvKiBhbW9k ZVszXSA9ICdcMCc7ICovCi0rCQkJaWYgKFZFUkJPU0UpCi0rCQkJCXByaW50ZigiVGVzdCA9ICVz LCBNb2RlID0gJXNcbiIsIGF0ZXN0LCBhbW9kZSk7Ci0rCQkJfQotKwkJICAgIGVsc2UgaWYgKHN0 cm5jYXNlY21wKHBwLCAiS2V5IExlbmd0aCA6ICIsIDEzKSA9PSAwKQotKwkJCXsKLSsJCQlha2V5 c3ogPSBhdG9pKHBwKzEzKTsKLSsJCQlpZiAoVkVSQk9TRSkKLSsJCQkJcHJpbnRmKCJLZXkgc2l6 ZSA9ICVkXG4iLCBha2V5c3opOwotKwkJCX0KLSsJCSAgICB9Ci0rCQl9Ci0rCSAgICBicmVhazsK LSsKLSsJY2FzZSAxOiAgLyogW0VOQ1JZUFRdIHwgW0RFQ1JZUFRdICovCi0rCSAgICBpZiAoaWJ1 ZlswXSA9PSAnWycpCi0rCQl7Ci0rCQlmcHV0cyhpYnVmLCByZnApOwotKwkJKytzdGVwOwotKwkJ aWYgKHN0cm5jYXNlY21wKGlidWYsICJbRU5DUllQVF0iLCA5KSA9PSAwKQotKwkJICAgIGRpciA9 IDE7Ci0rCQllbHNlIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0RFQ1JZUFRdIiwgOSkgPT0gMCkK LSsJCSAgICBkaXIgPSAwOwotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFs aWQga2V5d29yZDogJXNcbiIsIGlidWYpOwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJ YnJlYWs7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmIChkaXIgPT0gLTEpCi0rCQl7Ci0rCQllcnIgPSAx OwotKwkJcHJpbnRmKCJNaXNzaW5nIEVOQ1JZUFQvREVDUllQVCBrZXl3b3JkXG4iKTsKLSsJCWJy ZWFrOwotKwkJfQotKwkgICAgZWxzZSAKLSsJCXN0ZXAgPSAyOwotKwotKwljYXNlIDI6IC8qIEtF WSA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZigqaWJ1ZiA9PSAn XG4nKQotKwkJYnJlYWs7Ci0rCSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQgPSAiLDgp KQotKwkJYnJlYWs7Ci0rCi0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIktFWSA9ICIsIDYp ICE9IDApCi0rCQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0r CQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzYsIGFL ZXkpOwotKwkJaWYgKGxlbiA8IDApCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBL RVlcbiIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlQcmlu dFZhbHVlKCJLRVkiLCBhS2V5LCBsZW4pOwotKwkJaWYgKHN0cmNtcChhbW9kZSwgIkVDQiIpID09 IDApCi0rCQkgICAgewotKwkJICAgIG1lbXNldChpVmVjLCAwLCBzaXplb2YoaVZlYykpOwotKwkJ ICAgIHN0ZXAgPSAoZGlyKT8gNDogNTsgIC8qIG5vIGl2ZWMgZm9yIEVDQiAqLwotKwkJICAgIH0K LSsJCWVsc2UKLSsJCSAgICArK3N0ZXA7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSAz OiAvKiBJViA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZiAoc3Ry bmNhc2VjbXAoaWJ1ZiwgIklWID0gIiwgNSkgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2lu ZyBJVlxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJbGVuID0g aGV4MmJpbigoY2hhciopaWJ1Zis1LCBpVmVjKTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsK LSsJCSAgICBwcmludGYoIkludmFsaWQgSVZcbiIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBi cmVhazsKLSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJJViIsIGlWZWMsIGxlbik7Ci0rCQlzdGVw ID0gKGRpcik/IDQ6IDU7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSA0OiAvKiBQTEFJ TlRFWFQgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYgKHN0cm5j YXNlY21wKGlidWYsICJQTEFJTlRFWFQgPSAiLCAxMikgIT0gMCkKLSsJCXsKLSsJCXByaW50Zigi TWlzc2luZyBQTEFJTlRFWFRcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJ CXsKLSsJCWludCBubiA9IHN0cmxlbihpYnVmKzEyKTsKLSsJCWlmKCFzdHJjbXAoYW1vZGUsIkNG QjEiKSkKLSsJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMixubi0xLHBsYWludGV4dCk7Ci0rCQll bHNlCi0rCQkgICAgbGVuPWhleDJiaW4oaWJ1ZisxMiwgcGxhaW50ZXh0KTsKLSsJCWlmIChsZW4g PCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgUExBSU5URVhUOiAlcyIsIGli dWYrMTIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlpZiAo bGVuID49IHNpemVvZihwbGFpbnRleHQpKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkJ1ZmZl ciBvdmVyZmxvd1xuIik7Ci0rCQkgICAgfQotKwkJUHJpbnRWYWx1ZSgiUExBSU5URVhUIiwgKHVu c2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYXRlc3QsICJNQ1Qi KSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVzdCAqLwotKwkJICAgIHsKLSsJCSAgICBpZihkb19t Y3QoYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJICAgICAgZGlyLCAodW5zaWduZWQg Y2hhciopcGxhaW50ZXh0LCBsZW4sIAotKwkJCSAgICAgIHJmcCkgPCAwKQotKwkJCUVYSVQoMSk7 Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgs IGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0 LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKLSsJ CSAgICBPdXRwdXRWYWx1ZSgiQ0lQSEVSVEVYVCIsY2lwaGVydGV4dCxsZW4scmZwLAotKwkJCQkh c3RyY21wKGFtb2RlLCJDRkIxIikpOwotKwkJICAgIH0KLSsJCXN0ZXAgPSA2OwotKwkJfQotKwkg ICAgYnJlYWs7Ci0rCi0rCWNhc2UgNTogLyogQ0lQSEVSVEVYVCA9IHh4eHggKi8KLSsJICAgIGZw dXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIkNJUEhFUlRFWFQg PSAiLCAxMykgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOwotKwkJZXJy ID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEi KSkKLSsJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMyxzdHJsZW4oaWJ1ZisxMyktMSxjaXBoZXJ0 ZXh0KTsKLSsJCWVsc2UKLSsJCSAgICBsZW4gPSBoZXgyYmluKGlidWYrMTMsY2lwaGVydGV4dCk7 Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIENJUEhF UlRFWFRcbiIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCi0r CQlQcmludFZhbHVlKCJDSVBIRVJURVhUIiwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCWlmIChzdHJj bXAoYXRlc3QsICJNQ1QiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVzdCAqLwotKwkJICAgIHsK LSsJCSAgICBkb19tY3QoYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJICAgZGlyLCBj aXBoZXJ0ZXh0LCBsZW4sIHJmcCk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAg ICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAotKwkJCQkg IGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIHBsYWludGV4dCwg Y2lwaGVydGV4dCwgbGVuKTsKLSsJCSAgICBPdXRwdXRWYWx1ZSgiUExBSU5URVhUIiwodW5zaWdu ZWQgY2hhciAqKXBsYWludGV4dCxsZW4scmZwLAotKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikp OwotKwkJICAgIH0KLSsJCXN0ZXAgPSA2OwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2Ug NjoKLSsJICAgIGlmIChpYnVmWzBdICE9ICdcbicpCi0rCQl7Ci0rCQllcnIgPSAxOwotKwkJcHJp bnRmKCJNaXNzaW5nIHRlcm1pbmF0b3JcbiIpOwotKwkJfQotKwkgICAgZWxzZSBpZiAoc3RyY21w KGF0ZXN0LCAiTUNUIikgIT0gMCkKLSsJCXsgLyogTUNUIGFscmVhZHkgYWRkZWQgdGVybWluYXRp bmcgbmwgKi8KLSsJCWZwdXRzKGlidWYsIHJmcCk7Ci0rCQl9Ci0rCSAgICBzdGVwID0gMTsKLSsJ ICAgIGJyZWFrOwotKwkgICAgfQotKwl9Ci0rICAgIGlmIChyZnApCi0rCWZjbG9zZShyZnApOwot KyAgICBpZiAoYWZwKQotKwlmY2xvc2UoYWZwKTsKLSsgICAgcmV0dXJuIGVycjsKLSsgICAgfQot KwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K LSsgIFByb2Nlc3NlcyBlaXRoZXIgYSBzaW5nbGUgZmlsZSBvciAKLSsgIGEgc2V0IG9mIGZpbGVz IHdob3NlIG5hbWVzIGFyZSBwYXNzZWQgaW4gYSBmaWxlLgotKyAgQSBzaW5nbGUgZmlsZSBpcyBz cGVjaWZpZWQgYXM6Ci0rICAgIGFlc190ZXN0IC1mIHh4eC5yZXEKLSsgIEEgc2V0IG9mIGZpbGVz IGlzIHNwZWNpZmllZCBhczoKLSsgICAgYWVzX3Rlc3QgLWQgeHh4eHgueHh4Ci0rICBUaGUgZGVm YXVsdCBpczogLWQgcmVxLnR4dAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKi8KLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rICAg IHsKLSsgICAgY2hhciAqcnFsaXN0ID0gInJlcS50eHQiLCAqcnNwZmlsZSA9IE5VTEw7Ci0rICAg IEZJTEUgKmZwID0gTlVMTDsKLSsgICAgY2hhciBmblsyNTBdID0gIiIsIHJmblsyNTZdID0gIiI7 Ci0rICAgIGludCBmX29wdCA9IDAsIGRfb3B0ID0gMTsKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rICAgIGlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwot KwlFWElUKDEpOwotKwl9Ci0rI2VuZGlmCi0rICAgIGlmIChhcmdjID4gMSkKLSsJewotKwlpZiAo c3RyY2FzZWNtcChhcmd2WzFdLCAiLWQiKSA9PSAwKQotKwkgICAgewotKwkgICAgZF9vcHQgPSAx OwotKwkgICAgfQotKwllbHNlIGlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZiIpID09IDApCi0r CSAgICB7Ci0rCSAgICBmX29wdCA9IDE7Ci0rCSAgICBkX29wdCA9IDA7Ci0rCSAgICB9Ci0rCWVs c2UKLSsJICAgIHsKLSsJICAgIHByaW50ZigiSW52YWxpZCBwYXJhbWV0ZXI6ICVzXG4iLCBhcmd2 WzFdKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwlpZiAoYXJnYyA8IDMpCi0rCSAgICB7 Ci0rCSAgICBwcmludGYoIk1pc3NpbmcgcGFyYW1ldGVyXG4iKTsKLSsJICAgIHJldHVybiAwOwot KwkgICAgfQotKwlpZiAoZF9vcHQpCi0rCSAgICBycWxpc3QgPSBhcmd2WzJdOwotKwllbHNlCi0r CSAgICB7Ci0rCSAgICBzdHJjcHkoZm4sIGFyZ3ZbMl0pOwotKwkgICAgcnNwZmlsZSA9IGFyZ3Zb M107Ci0rCSAgICB9Ci0rCX0KLSsgICAgaWYgKGRfb3B0KQotKwl7IC8qIGxpc3Qgb2YgZmlsZXMg KGRpcmVjdG9yeSkgKi8KLSsJaWYgKCEoZnAgPSBmb3BlbihycWxpc3QsICJyIikpKQotKwkgICAg ewotKwkgICAgcHJpbnRmKCJDYW5ub3Qgb3BlbiByZXEgbGlzdCBmaWxlXG4iKTsKLSsJICAgIHJl dHVybiAtMTsKLSsJICAgIH0KLSsJd2hpbGUgKGZnZXRzKGZuLCBzaXplb2YoZm4pLCBmcCkpCi0r CSAgICB7Ci0rCSAgICBzdHJ0b2soZm4sICJcclxuIik7Ci0rCSAgICBzdHJjcHkocmZuLCBmbik7 Ci0rCSAgICBpZiAoVkVSQk9TRSkKLSsJCXByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIHJmbik7 Ci0rCSAgICBpZiAocHJvY19maWxlKHJmbiwgcnNwZmlsZSkpCi0rCQl7Ci0rCQlwcmludGYoIj4+ PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwgcmZuKTsKLSsJCUVYSVQoMSk7Ci0r CQl9Ci0rCSAgICB9Ci0rCWZjbG9zZShmcCk7Ci0rCX0KLSsgICAgZWxzZSAvKiBzaW5nbGUgZmls ZSAqLwotKwl7Ci0rCWlmIChWRVJCT1NFKQotKwkgICAgcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xu IiwgZm4pOwotKwlpZiAocHJvY19maWxlKGZuLCByc3BmaWxlKSkKLSsJICAgIHsKLSsJICAgIHBy aW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCBmbik7Ci0rCSAgICB9 Ci0rCX0KLSsgICAgRVhJVCgwKTsKLSsgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsjZW5kaWYK LWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzL2NhdnMv Zmlwc19kZXNtb3ZzLmMKLS0tLSAvZGV2L251bGwJMjAwOS0wOS0yMyAxMDo1NjowMi4xNDgwMDE3 NTIgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19k ZXNtb3ZzLmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEs NzAyIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVGhlIE9wZW5T U0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu IAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAg ZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50 aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNw bGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcv KSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wg UHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFj dAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgot KyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHBy aW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0r ICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJl dGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3Bl blNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg T3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0r ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJ QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsgIE5JU1QgREVTIE1vZGVzIG9mIE9wZXJhdGlv biBWYWxpZGF0aW9uIFN5c3RlbQotKyAgVGVzdCBQcm9ncmFtCi0rCi0rICBCYXNlZCBvbiB0aGUg QUVTIFZhbGlkYXRpb24gU3VpdGUsIHdoaWNoIHdhczoKLSsgIERvbmF0ZWQgdG8gT3BlblNTTCBi eToKLSsgIFYtT05FIENvcnBvcmF0aW9uCi0rICAyMDI1MCBDZW50dXJ5IEJsdmQsIFN1aXRlIDMw MAotKyAgR2VybWFudG93biwgTUQgMjA4NzQKLSsgIFUuUy5BLgotKyAgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+ Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8 ZXJybm8uaD4KLSsjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZGVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvYm4uaD4KLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVk ZSAiZV9vcy5oIgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rCi0raW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBERVMgc3VwcG9ydFxu Iik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rI2RlZmluZSBERVNfQkxPQ0tf U0laRSA4Ci0rCi0rI2RlZmluZSBWRVJCT1NFIDAKLSsKLStpbnQgREVTVGVzdChFVlBfQ0lQSEVS X0NUWCAqY3R4LAotKwkgICAgY2hhciAqYW1vZGUsIGludCBha2V5c3osIHVuc2lnbmVkIGNoYXIg KmFLZXksIAotKwkgICAgdW5zaWduZWQgY2hhciAqaVZlYywgCi0rCSAgICBpbnQgZGlyLCAgLyog MCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCi0rCSAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVu c2lnbmVkIGNoYXIgKmluLCBpbnQgbGVuKQotKyAgICB7Ci0rICAgIGNvbnN0IEVWUF9DSVBIRVIg KmNpcGhlciA9IE5VTEw7Ci0rCi0rICAgIGlmIChha2V5c3ogIT0gMTkyKQotKwl7Ci0rCXByaW50 ZigiSW52YWxpZCBrZXkgc2l6ZTogJWRcbiIsIGFrZXlzeik7Ci0rCUVYSVQoMSk7Ci0rCX0KLSsK LSsgICAgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJDQkMiKSA9PSAwKQotKwljaXBoZXIgPSBFVlBf ZGVzX2VkZTNfY2JjKCk7Ci0rICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJFQ0IiKSA9 PSAwKQotKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfZWNiKCk7Ci0rICAgIGVsc2UgaWYgKHN0cmNh c2VjbXAoYW1vZGUsICJDRkI2NCIpID09IDApCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jZmI2 NCgpOwotKyAgICBlbHNlIGlmIChzdHJuY2FzZWNtcChhbW9kZSwgIk9GQiIsIDMpID09IDApCi0r CWNpcGhlciA9IEVWUF9kZXNfZWRlM19vZmIoKTsKLSsgICAgZWxzZSBpZighc3RyY2FzZWNtcChh bW9kZSwiQ0ZCOCIpKQotKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2ZiOCgpOwotKyAgICBlbHNl IGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikpCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19j ZmIxKCk7Ci0rICAgIGVsc2UKLSsJewotKwlwcmludGYoIlVua25vd24gbW9kZTogJXNcbiIsIGFt b2RlKTsKLSsJRVhJVCgxKTsKLSsJfQotKwotKyAgICBpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4 LCBjaXBoZXIsIE5VTEwsIGFLZXksIGlWZWMsIGRpcikgPD0gMCkKLSsJcmV0dXJuIDA7Ci0rICAg IGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikpCi0rCU1fRVZQX0NJUEhFUl9DVFhfc2V0X2Zs YWdzKGN0eCwgRVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUyk7Ci0rICAgIEVWUF9DaXBoZXIoY3R4 LCBvdXQsIGluLCBsZW4pOwotKwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotK3ZvaWQgRGVi dWdWYWx1ZShjaGFyICp0YWcsIHVuc2lnbmVkIGNoYXIgKnZhbCwgaW50IGxlbikKLSsgICAgewot KyAgICBjaGFyIG9idWZbMjA0OF07Ci0rICAgIGludCBvbGVuOwotKyAgICBvbGVuID0gYmluMmhl eCh2YWwsIGxlbiwgb2J1Zik7Ci0rICAgIHByaW50ZigiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4s IG9idWYpOwotKyAgICB9Ci0rCi0rdm9pZCBzaGlmdGluKHVuc2lnbmVkIGNoYXIgKmRzdCx1bnNp Z25lZCBjaGFyICpzcmMsaW50IG5iaXRzKQotKyAgICB7Ci0rICAgIGludCBuOwotKwotKyAgICAv KiBtb3ZlIHRoZSBieXRlcy4uLiAqLwotKyAgICBtZW1tb3ZlKGRzdCxkc3QrbmJpdHMvOCwzKjgt bmJpdHMvOCk7Ci0rICAgIC8qIGFwcGVuZCBuZXcgZGF0YSAqLwotKyAgICBtZW1jcHkoZHN0KzMq OC1uYml0cy84LHNyYywobmJpdHMrNykvOCk7Ci0rICAgIC8qIGxlZnQgc2hpZnQgdGhlIGJpdHMg Ki8KLSsgICAgaWYobmJpdHMlOCkKLSsJZm9yKG49MCA7IG4gPCAzKjggOyArK24pCi0rCSAgICBk c3Rbbl09KGRzdFtuXSA8PCAobmJpdHMlOCkpfChkc3RbbisxXSA+PiAoOC1uYml0cyU4KSk7Ci0r ICAgIH0JCi0rCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSovCi0rY2hhciAqdF90YWdbMl0gPSB7IlBMQUlOVEVYVCIsICJDSVBIRVJURVhUIn07Ci0r Y2hhciAqdF9tb2RlWzZdID0geyJDQkMiLCJFQ0IiLCJPRkIiLCJDRkIxIiwiQ0ZCOCIsIkNGQjY0 In07Ci0rZW51bSBNb2RlIHtDQkMsIEVDQiwgT0ZCLCBDRkIxLCBDRkI4LCBDRkI2NH07Ci0raW50 IFNpemVzWzZdPXs2NCw2NCw2NCwxLDgsNjR9OwotKwotK3ZvaWQgZG9fbWN0KGNoYXIgKmFtb2Rl LCAKLSsJICAgIGludCBha2V5c3osIGludCBudW1rZXlzLCB1bnNpZ25lZCBjaGFyICpha2V5LHVu c2lnbmVkIGNoYXIgKml2ZWMsCi0rCSAgICBpbnQgZGlyLCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBp bnQgbGVuLAotKwkgICAgRklMRSAqcmZwKQotKyAgICB7Ci0rICAgIGludCBpLGltb2RlOwotKyAg ICB1bnNpZ25lZCBjaGFyIG5rWzQqOF07IC8qIGxvbmdlc3Qga2V5KzggKi8KLSsgICAgdW5zaWdu ZWQgY2hhciB0ZXh0MFs4XTsKLSsKLSsgICAgZm9yIChpbW9kZT0wIDsgaW1vZGUgPCA2IDsgKytp bW9kZSkKLSsJaWYoIXN0cmNtcChhbW9kZSx0X21vZGVbaW1vZGVdKSkKLSsJICAgIGJyZWFrOwot KyAgICBpZiAoaW1vZGUgPT0gNikKLSsJeyAKLSsJcHJpbnRmKCJVbnJlY29nbml6ZWQgbW9kZTog JXNcbiIsIGFtb2RlKTsKLSsJRVhJVCgxKTsKLSsJfQotKwotKyAgICBmb3IoaT0wIDsgaSA8IDQw MCA7ICsraSkKLSsJewotKwlpbnQgajsKLSsJaW50IG47Ci0rCWludCBrcD1ha2V5c3ovNjQ7Ci0r CXVuc2lnbmVkIGNoYXIgb2xkX2l2WzhdOwotKwlFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rCUVWUF9D SVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rCWZwcmludGYocmZwLCJcbkNPVU5UID0gJWRcbiIs aSk7Ci0rCWlmKGtwID09IDEpCi0rCSAgICBPdXRwdXRWYWx1ZSgiS0VZIixha2V5LDgscmZwLDAp OwotKwllbHNlCi0rCSAgICBmb3Iobj0wIDsgbiA8IGtwIDsgKytuKQotKwkJewotKwkJZnByaW50 ZihyZnAsIktFWSVkIixuKzEpOwotKwkJT3V0cHV0VmFsdWUoIiIsYWtleStuKjgsOCxyZnAsMCk7 Ci0rCQl9Ci0rCi0rCWlmKGltb2RlICE9IEVDQikKLSsJICAgIE91dHB1dFZhbHVlKCJJViIsaXZl Yyw4LHJmcCwwKTsKLSsJT3V0cHV0VmFsdWUodF90YWdbZGlyXjFdLHRleHQsbGVuLHJmcCxpbW9k ZSA9PSBDRkIxKTsKLSsjaWYgMAotKwkvKiBjb21wZW5zYXRlIGZvciBlbmRpYW5uZXNzICovCi0r CWlmKGltb2RlID09IENGQjEpCi0rCSAgICB0ZXh0WzBdPDw9NzsKLSsjZW5kaWYKLSsJbWVtY3B5 KHRleHQwLHRleHQsOCk7Ci0rCi0rCWZvcihqPTAgOyBqIDwgMTAwMDAgOyArK2opCi0rCSAgICB7 Ci0rCSAgICB1bnNpZ25lZCBjaGFyIG9sZF90ZXh0WzhdOwotKwotKwkgICAgbWVtY3B5KG9sZF90 ZXh0LHRleHQsOCk7Ci0rCSAgICBpZihqID09IDApCi0rCQl7Ci0rCQltZW1jcHkob2xkX2l2LGl2 ZWMsOCk7Ci0rCQlERVNUZXN0KCZjdHgsYW1vZGUsYWtleXN6LGFrZXksaXZlYyxkaXIsdGV4dCx0 ZXh0LGxlbik7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQltZW1jcHkob2xkX2l2LGN0eC5p diw4KTsKLSsJCUVWUF9DaXBoZXIoJmN0eCx0ZXh0LHRleHQsbGVuKTsKLSsJCX0KLSsJICAgIGlm KGogPT0gOTk5OSkKLSsJCXsKLSsJCU91dHB1dFZhbHVlKHRfdGFnW2Rpcl0sdGV4dCxsZW4scmZw LGltb2RlID09IENGQjEpOwotKwkJLyoJCW1lbWNweShpdmVjLHRleHQsOCk7ICovCi0rCQl9Ci0r CSAgICAvKgkgICAgRGVidWdWYWx1ZSgiaXYiLGN0eC5pdiw4KTsgKi8KLSsJICAgIC8qIGFjY3Vt dWxhdGUgbWF0ZXJpYWwgZm9yIHRoZSBuZXh0IGtleSAqLwotKwkgICAgc2hpZnRpbihuayx0ZXh0 LFNpemVzW2ltb2RlXSk7Ci0rCSAgICAvKgkgICAgRGVidWdWYWx1ZSgibmsiLG5rLDI0KTsqLwot KwkgICAgaWYoKGRpciAmJiAoaW1vZGUgPT0gQ0ZCMSB8fCBpbW9kZSA9PSBDRkI4IHx8IGltb2Rl ID09IENGQjY0Ci0rCQkJfHwgaW1vZGUgPT0gQ0JDKSkgfHwgaW1vZGUgPT0gT0ZCKQotKwkJbWVt Y3B5KHRleHQsb2xkX2l2LDgpOwotKwotKwkgICAgaWYoIWRpciAmJiAoaW1vZGUgPT0gQ0ZCMSB8 fCBpbW9kZSA9PSBDRkI4IHx8IGltb2RlID09IENGQjY0KSkKLSsJCXsKLSsJCS8qIHRoZSB0ZXN0 IHNwZWNpZmllcyB1c2luZyB0aGUgb3V0cHV0IG9mIHRoZSByYXcgREVTIG9wZXJhdGlvbgotKwkJ ICAgd2hpY2ggd2UgZG9uJ3QgaGF2ZSwgc28gcmVjb25zdHJ1Y3QgaXQuLi4gKi8KLSsJCWZvcihu PTAgOyBuIDwgOCA7ICsrbikKLSsJCSAgICB0ZXh0W25dXj1vbGRfdGV4dFtuXTsKLSsJCX0KLSsJ ICAgIH0KLSsJZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkgICAgYWtleVtuXV49bmtbMTYrbl07 Ci0rCWZvcihuPTAgOyBuIDwgOCA7ICsrbikKLSsJICAgIGFrZXlbOCtuXV49bmtbOCtuXTsKLSsJ Zm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkgICAgYWtleVsxNituXV49bmtbbl07Ci0rCWlmKG51 bWtleXMgPCAzKQotKwkgICAgbWVtY3B5KCZha2V5WzIqOF0sYWtleSw4KTsKLSsJaWYobnVta2V5 cyA8IDIpCi0rCSAgICBtZW1jcHkoJmFrZXlbOF0sYWtleSw4KTsKLSsJREVTX3NldF9vZGRfcGFy aXR5KChERVNfY2Jsb2NrICopYWtleSk7Ci0rCURFU19zZXRfb2RkX3Bhcml0eSgoREVTX2NibG9j ayAqKShha2V5KzgpKTsKLSsJREVTX3NldF9vZGRfcGFyaXR5KChERVNfY2Jsb2NrICopKGFrZXkr MTYpKTsKLSsJbWVtY3B5KGl2ZWMsY3R4Lml2LDgpOwotKwotKwkvKiBwb2ludGxlc3MgZXhlcmNp c2UgLSB0aGUgZmluYWwgdGV4dCBkb2Vzbid0IGRlcGVuZCBvbiB0aGUKLSsJICAgaW5pdGlhbCB0 ZXh0IGluIE9GQiBtb2RlLCBzbyB3aG8gY2FyZXMgd2hhdCBpdCBpcz8gKFdobwotKwkgICBkZXNp Z25lZCB0aGVzZSB0ZXN0cz8pICovCi0rCWlmKGltb2RlID09IE9GQikKLSsJICAgIGZvcihuPTAg OyBuIDwgOCA7ICsrbikKLSsJCXRleHRbbl09dGV4dDBbbl1eb2xkX2l2W25dOwotKwl9Ci0rICAg IH0KLSsgICAgCi0raW50IHByb2NfZmlsZShjaGFyICpycWZpbGUsIGNoYXIgKnJzcGZpbGUpCi0r ICAgIHsKLSsgICAgY2hhciBhZm5bMjU2XSwgcmZuWzI1Nl07Ci0rICAgIEZJTEUgKmFmcCA9IE5V TEwsICpyZnAgPSBOVUxMOwotKyAgICBjaGFyIGlidWZbMjA0OF0sIHRidWZbMjA0OF07Ci0rICAg IGludCBpbGVuLCBsZW4sIHJldCA9IDA7Ci0rICAgIGNoYXIgYW1vZGVbOF0gPSAiIjsKLSsgICAg Y2hhciBhdGVzdFsxMDBdID0gIiI7Ci0rICAgIGludCBha2V5c3o9MDsKLSsgICAgdW5zaWduZWQg Y2hhciBpVmVjWzIwXSwgYUtleVs0MF07Ci0rICAgIGludCBkaXIgPSAtMSwgZXJyID0gMCwgc3Rl cCA9IDA7Ci0rICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzIwNDhdOwotKyAgICB1bnNpZ25l ZCBjaGFyIGNpcGhlcnRleHRbMjA0OF07Ci0rICAgIGNoYXIgKnJwOwotKyAgICBFVlBfQ0lQSEVS X0NUWCBjdHg7Ci0rICAgIGludCBudW1rZXlzPTE7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQo JmN0eCk7Ci0rCi0rICAgIGlmICghcnFmaWxlIHx8ICEoKnJxZmlsZSkpCi0rCXsKLSsJcHJpbnRm KCJObyByZXEgZmlsZVxuIik7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICBzdHJjcHkoYWZuLCBy cWZpbGUpOwotKwotKyAgICBpZiAoKGFmcCA9IGZvcGVuKGFmbiwgInIiKSkgPT0gTlVMTCkKLSsJ ewotKwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCi0rCSAgICAgICBhZm4s IHN0cmVycm9yKGVycm5vKSk7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICBpZiAoIXJzcGZpbGUp Ci0rCXsKLSsJc3RyY3B5KHJmbixhZm4pOwotKwlycD1zdHJzdHIocmZuLCJyZXEvIik7Ci0rI2lm ZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rCWlmICghcnApCi0rCSAgICBycD1zdHJzdHIocmZuLCJy ZXFcXCIpOwotKyNlbmRpZgotKwlhc3NlcnQocnApOwotKwltZW1jcHkocnAsInJzcCIsMyk7Ci0r CXJwID0gc3Ryc3RyKHJmbiwgIi5yZXEiKTsKLSsJbWVtY3B5KHJwLCAiLnJzcCIsIDQpOwotKwly c3BmaWxlID0gcmZuOwotKwl9Ci0rICAgIGlmICgocmZwID0gZm9wZW4ocnNwZmlsZSwgInciKSkg PT0gTlVMTCkKLSsJewotKwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCi0r CSAgICAgICByZm4sIHN0cmVycm9yKGVycm5vKSk7Ci0rCWZjbG9zZShhZnApOwotKwlhZnAgPSBO VUxMOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsgICAgd2hpbGUgKCFlcnIgJiYgKGZnZXRzKGlidWYs IHNpemVvZihpYnVmKSwgYWZwKSkgIT0gTlVMTCkKLSsJewotKwl0aWR5X2xpbmUodGJ1ZiwgaWJ1 Zik7Ci0rCWlsZW4gPSBzdHJsZW4oaWJ1Zik7Ci0rCS8qCXByaW50Zigic3RlcD0lZCBpYnVmPSVz IixzdGVwLGlidWYpOyovCi0rCWlmKHN0ZXAgPT0gMyAmJiAhc3RyY21wKGFtb2RlLCJFQ0IiKSkK LSsJICAgIHsKLSsJICAgIG1lbXNldChpVmVjLCAwLCBzaXplb2YoaVZlYykpOwotKwkgICAgc3Rl cCA9IChkaXIpPyA0OiA1OyAgLyogbm8gaXZlYyBmb3IgRUNCICovCi0rCSAgICB9Ci0rCXN3aXRj aCAoc3RlcCkKLSsJICAgIHsKLSsJY2FzZSAwOiAgLyogcmVhZCBwcmVhbWJsZSAqLwotKwkgICAg aWYgKGlidWZbMF0gPT0gJ1xuJykKLSsJCXsgLyogZW5kIG9mIHByZWFtYmxlICovCi0rCQlpZiAo KmFtb2RlID09ICdcMCcpCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiTWlzc2luZyBNb2RlXG4i KTsKLSsJCSAgICBlcnIgPSAxOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAg ZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCSAgICArKyBzdGVwOwotKwkJICAgIH0KLSsJCX0KLSsJICAg IGVsc2UgaWYgKGlidWZbMF0gIT0gJyMnKQotKwkJewotKwkJcHJpbnRmKCJJbnZhbGlkIHByZWFt YmxlIGl0ZW06ICVzXG4iLCBpYnVmKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0r CQl7IC8qIHByb2Nlc3MgcHJlYW1ibGUgKi8KLSsJCWNoYXIgKnhwLCAqcHAgPSBpYnVmKzI7Ci0r CQlpbnQgbjsKLSsJCWlmKCphbW9kZSkKLSsJCSAgICB7IC8qIGluc2VydCBjdXJyZW50IHRpbWUg JiBkYXRlICovCi0rCQkgICAgdGltZV90IHJ0aW0gPSB0aW1lKDApOwotKwkJICAgIGZwcmludGYo cmZwLCAiIyAlcyIsIGN0aW1lKCZydGltKSk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsK LSsJCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJICAgIGlmKCFzdHJuY21wKHBwLCJJTlZFUlNF ICIsOCkgfHwgIXN0cm5jbXAocHAsIkRFUyAiLDQpCi0rCQkgICAgICAgfHwgIXN0cm5jbXAocHAs IlRERVMgIiw1KQotKwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJQRVJNVVRBVElPTiAiLDEyKQot KwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJTVUJTVElUVVRJT04gIiwxMykKLSsJCSAgICAgICB8 fCAhc3RybmNtcChwcCwiVkFSSUFCTEUgIiw5KSkKLSsJCQl7Ci0rCQkJLyogZ2V0IHRlc3QgdHlw ZSAqLwotKwkJCWlmKCFzdHJuY21wKHBwLCJERVMgIiw0KSkKLSsJCQkgICAgcHArPTQ7Ci0rCQkJ ZWxzZSBpZighc3RybmNtcChwcCwiVERFUyAiLDUpKQotKwkJCSAgICBwcCs9NTsKLSsJCQl4cCA9 IHN0cmNocihwcCwgJyAnKTsKLSsJCQluID0geHAtcHA7Ci0rCQkJc3RybmNweShhdGVzdCwgcHAs IG4pOwotKwkJCWF0ZXN0W25dID0gJ1wwJzsKLSsJCQkvKiBnZXQgbW9kZSAqLwotKwkJCXhwID0g c3RycmNocihwcCwgJyAnKTsgLyogZ2V0IG1vZGUiICovCi0rCQkJbiA9IHN0cmxlbih4cCsxKS0x OwotKwkJCXN0cm5jcHkoYW1vZGUsIHhwKzEsIG4pOwotKwkJCWFtb2RlW25dID0gJ1wwJzsKLSsJ CQkvKiBhbW9kZVszXSA9ICdcMCc7ICovCi0rCQkJaWYgKFZFUkJPU0UpCi0rCQkJCXByaW50Zigi VGVzdD0lcywgTW9kZT0lc1xuIixhdGVzdCxhbW9kZSk7Ci0rCQkJfQotKwkJICAgIH0KLSsJCX0K LSsJICAgIGJyZWFrOwotKwotKwljYXNlIDE6ICAvKiBbRU5DUllQVF0gfCBbREVDUllQVF0gKi8K LSsJICAgIGlmKGlidWZbMF0gPT0gJ1xuJykKLSsJCWJyZWFrOwotKwkgICAgaWYgKGlidWZbMF0g PT0gJ1snKQotKwkJewotKwkJZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCSsrc3RlcDsKLSsJCWlmIChz dHJuY2FzZWNtcChpYnVmLCAiW0VOQ1JZUFRdIiwgOSkgPT0gMCkKLSsJCSAgICBkaXIgPSAxOwot KwkJZWxzZSBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltERUNSWVBUXSIsIDkpID09IDApCi0rCQkg ICAgZGlyID0gMDsKLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIGtl eXdvcmQ6ICVzXG4iLCBpYnVmKTsKLSsJCSAgICBlcnIgPSAxOwotKwkJICAgIH0KLSsJCWJyZWFr OwotKwkJfQotKwkgICAgZWxzZSBpZiAoZGlyID09IC0xKQotKwkJewotKwkJZXJyID0gMTsKLSsJ CXByaW50ZigiTWlzc2luZyBFTkNSWVBUL0RFQ1JZUFQga2V5d29yZFxuIik7Ci0rCQlicmVhazsK LSsJCX0KLSsJICAgIGVsc2UgCi0rCQlzdGVwID0gMjsKLSsKLSsJY2FzZSAyOiAvKiBLRVkgPSB4 eHh4ICovCi0rCSAgICBpZigqaWJ1ZiA9PSAnXG4nKQotKwkJewotKwkgICAgICAgIGZwdXRzKGli dWYsIHJmcCk7Ci0rCQlicmVhazsKLSsgICAgICAgICAgICAgICAgfQotKwkgICAgaWYoIXN0cm5j YXNlY21wKGlidWYsIkNPVU5UID0gIiw4KSkKLSsJCXsKLSsJICAgICAgICBmcHV0cyhpYnVmLCBy ZnApOwotKwkJYnJlYWs7Ci0rICAgICAgICAgICAgICAgIH0KLSsJICAgIGlmKCFzdHJuY2FzZWNt cChpYnVmLCJDT1VOVD0iLDYpKQotKwkJewotKwkgICAgICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0r CQlicmVhazsKLSsgICAgICAgICAgICAgICAgfQotKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYs Ik51bUtleXMgPSAiLDEwKSkKLSsJCXsKLSsJCW51bWtleXM9YXRvaShpYnVmKzEwKTsKLSsJCWJy ZWFrOwotKwkJfQotKwkgIAotKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJICAgIGlmKCFzdHJu Y2FzZWNtcChpYnVmLCJLRVkgPSAiLDYpKQotKwkJewotKwkJYWtleXN6PTY0OwotKwkJbGVuID0g aGV4MmJpbigoY2hhciopaWJ1Zis2LCBhS2V5KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsK LSsJCSAgICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsKLSsJCSAgICBlcnI9MTsKLSsJCSAgICBi cmVhazsKLSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJLRVkiLCBhS2V5LCBsZW4pOwotKwkJKytz dGVwOwotKwkJfQotKwkgICAgZWxzZSBpZighc3RybmNhc2VjbXAoaWJ1ZiwiS0VZcyA9ICIsNykp Ci0rCQl7Ci0rCQlha2V5c3o9NjQqMzsKLSsJCWxlbj1oZXgyYmluKGlidWYrNyxhS2V5KTsKLSsJ CWlmKGxlbiAhPSA4KQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsK LSsJCSAgICBlcnI9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQltZW1jcHkoYUtleSs4 LGFLZXksOCk7Ci0rCQltZW1jcHkoYUtleSsxNixhS2V5LDgpOwotKwkJaWJ1Zls0XT0nXDAnOwot KwkJUHJpbnRWYWx1ZSgiS0VZcyIsYUtleSxsZW4pOwotKwkJKytzdGVwOwotKwkJfQotKwkgICAg ZWxzZSBpZighc3RybmNhc2VjbXAoaWJ1ZiwiS0VZIiwzKSkKLSsJCXsKLSsJCWludCBuPWlidWZb M10tJzEnOwotKwotKwkJYWtleXN6PTY0KjM7Ci0rCQlsZW49aGV4MmJpbihpYnVmKzcsYUtleStu KjgpOwotKwkJaWYobGVuICE9IDgpCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBL RVlcbiIpOwotKwkJICAgIGVycj0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCWlidWZb NF09J1wwJzsKLSsJCVByaW50VmFsdWUoaWJ1ZixhS2V5LGxlbik7Ci0rCQlpZihuID09IDIpCi0r CQkgICAgKytzdGVwOwotKwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJcHJpbnRmKCJNaXNzaW5n IEtFWVxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgMzog LyogSVYgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYgKHN0cm5j YXNlY21wKGlidWYsICJJViA9ICIsIDUpICE9IDApCi0rCQl7Ci0rCQlwcmludGYoIk1pc3Npbmcg SVZcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWxlbiA9IGhl eDJiaW4oKGNoYXIqKWlidWYrNSwgaVZlYyk7Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0r CQkgICAgcHJpbnRmKCJJbnZhbGlkIElWXG4iKTsKLSsJCSAgICBlcnIgPTE7Ci0rCQkgICAgYnJl YWs7Ci0rCQkgICAgfQotKwkJUHJpbnRWYWx1ZSgiSVYiLCBpVmVjLCBsZW4pOwotKwkJc3RlcCA9 IChkaXIpPyA0OiA1OwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgNDogLyogUExBSU5U RVhUID0geHh4eCAqLwotKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJICAgIGlmIChzdHJuY2Fz ZWNtcChpYnVmLCAiUExBSU5URVhUID0gIiwgMTIpICE9IDApCi0rCQl7Ci0rCQlwcmludGYoIk1p c3NpbmcgUExBSU5URVhUXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7 Ci0rCQlpbnQgbm4gPSBzdHJsZW4oaWJ1ZisxMik7Ci0rCQlpZighc3RyY21wKGFtb2RlLCJDRkIx IikpCi0rCQkgICAgbGVuPWJpbnQyYmluKGlidWYrMTIsbm4tMSxwbGFpbnRleHQpOwotKwkJZWxz ZQotKwkJICAgIGxlbj1oZXgyYmluKGlidWYrMTIsIHBsYWludGV4dCk7Ci0rCQlpZiAobGVuIDwg MCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIFBMQUlOVEVYVDogJXMiLCBpYnVm KzEyKTsKLSsJCSAgICBlcnIgPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJaWYgKGxl biA+PSBzaXplb2YocGxhaW50ZXh0KSkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJCdWZmZXIg b3ZlcmZsb3dcbiIpOwotKwkJICAgIH0KLSsJCVByaW50VmFsdWUoIlBMQUlOVEVYVCIsICh1bnNp Z25lZCBjaGFyKilwbGFpbnRleHQsIGxlbik7Ci0rCQlpZiAoc3RyY21wKGF0ZXN0LCAiTW9udGUi KSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVzdCAqLwotKwkJICAgIHsKLSsJCSAgICBkb19tY3Qo YW1vZGUsYWtleXN6LG51bWtleXMsYUtleSxpVmVjLGRpcixwbGFpbnRleHQsbGVuLHJmcCk7Ci0r CQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBhc3NlcnQoZGlyID09IDEpOwotKwkJ ICAgIHJldCA9IERFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJ CSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCi0rCQkJCSAgY2lwaGVydGV4 dCwgcGxhaW50ZXh0LCBsZW4pOwotKwkJICAgIE91dHB1dFZhbHVlKCJDSVBIRVJURVhUIixjaXBo ZXJ0ZXh0LGxlbixyZnAsCi0rCQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7Ci0rCQkgICAgfQot KwkJc3RlcCA9IDY7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSA1OiAvKiBDSVBIRVJU RVhUID0geHh4eCAqLwotKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJICAgIGlmIChzdHJuY2Fz ZWNtcChpYnVmLCAiQ0lQSEVSVEVYVCA9ICIsIDEzKSAhPSAwKQotKwkJewotKwkJcHJpbnRmKCJN aXNzaW5nIEtFWVxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJ aWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQotKwkJICAgIGxlbj1iaW50MmJpbihpYnVmKzEzLHN0 cmxlbihpYnVmKzEzKS0xLGNpcGhlcnRleHQpOwotKwkJZWxzZQotKwkJICAgIGxlbiA9IGhleDJi aW4oaWJ1ZisxMyxjaXBoZXJ0ZXh0KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAg ICBwcmludGYoIkludmFsaWQgQ0lQSEVSVEVYVFxuIik7Ci0rCQkgICAgZXJyID0xOwotKwkJICAg IGJyZWFrOwotKwkJICAgIH0KLSsJCQotKwkJUHJpbnRWYWx1ZSgiQ0lQSEVSVEVYVCIsIGNpcGhl cnRleHQsIGxlbik7Ci0rCQlpZiAoc3RyY21wKGF0ZXN0LCAiTW9udGUiKSA9PSAwKSAgLyogTW9u dGUgQ2FybG8gVGVzdCAqLwotKwkJICAgIHsKLSsJCSAgICBkb19tY3QoYW1vZGUsIGFrZXlzeiwg bnVta2V5cywgYUtleSwgaVZlYywgCi0rCQkJICAgZGlyLCBjaXBoZXJ0ZXh0LCBsZW4sIHJmcCk7 Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBhc3NlcnQoZGlyID09IDApOwot KwkJICAgIHJldCA9IERFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0r CQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCi0rCQkJCSAgcGxhaW50 ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOwotKwkJICAgIE91dHB1dFZhbHVlKCJQTEFJTlRFWFQiLCh1 bnNpZ25lZCBjaGFyICopcGxhaW50ZXh0LGxlbixyZnAsCi0rCQkJCSFzdHJjbXAoYW1vZGUsIkNG QjEiKSk7Ci0rCQkgICAgfQotKwkJc3RlcCA9IDY7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJ Y2FzZSA2OgotKwkgICAgaWYgKGlidWZbMF0gIT0gJ1xuJykKLSsJCXsKLSsJCWVyciA9IDE7Ci0r CQlwcmludGYoIk1pc3NpbmcgdGVybWluYXRvclxuIik7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmIChz dHJjbXAoYXRlc3QsICJNQ1QiKSAhPSAwKQotKwkJeyAvKiBNQ1QgYWxyZWFkeSBhZGRlZCB0ZXJt aW5hdGluZyBubCAqLwotKwkJZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCX0KLSsJICAgIHN0ZXAgPSAx OwotKwkgICAgYnJlYWs7Ci0rCSAgICB9Ci0rCX0KLSsgICAgaWYgKHJmcCkKLSsJZmNsb3NlKHJm cCk7Ci0rICAgIGlmIChhZnApCi0rCWZjbG9zZShhZnApOwotKyAgICByZXR1cm4gZXJyOwotKyAg ICB9Ci0rCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQotKyAgUHJvY2Vzc2VzIGVpdGhlciBhIHNpbmdsZSBmaWxlIG9yIAotKyAgYSBzZXQgb2Yg ZmlsZXMgd2hvc2UgbmFtZXMgYXJlIHBhc3NlZCBpbiBhIGZpbGUuCi0rICBBIHNpbmdsZSBmaWxl IGlzIHNwZWNpZmllZCBhczoKLSsgICAgYWVzX3Rlc3QgLWYgeHh4LnJlcQotKyAgQSBzZXQgb2Yg ZmlsZXMgaXMgc3BlY2lmaWVkIGFzOgotKyAgICBhZXNfdGVzdCAtZCB4eHh4eC54eHgKLSsgIFRo ZSBkZWZhdWx0IGlzOiAtZCByZXEudHh0Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK LSsgICAgewotKyAgICBjaGFyICpycWxpc3QgPSAicmVxLnR4dCIsICpyc3BmaWxlID0gTlVMTDsK LSsgICAgRklMRSAqZnAgPSBOVUxMOwotKyAgICBjaGFyIGZuWzI1MF0gPSAiIiwgcmZuWzI1Nl0g PSAiIjsKLSsgICAgaW50IGZfb3B0ID0gMCwgZF9vcHQgPSAxOwotKwotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsgICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCXsKLSsJZG9fcHJpbnRfZXJyb3Jz KCk7Ci0rCUVYSVQoMSk7Ci0rCX0KLSsjZW5kaWYKLSsgICAgaWYgKGFyZ2MgPiAxKQotKwl7Ci0r CWlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZCIpID09IDApCi0rCSAgICB7Ci0rCSAgICBkX29w dCA9IDE7Ci0rCSAgICB9Ci0rCWVsc2UgaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1mIikgPT0g MCkKLSsJICAgIHsKLSsJICAgIGZfb3B0ID0gMTsKLSsJICAgIGRfb3B0ID0gMDsKLSsJICAgIH0K LSsJZWxzZQotKwkgICAgewotKwkgICAgcHJpbnRmKCJJbnZhbGlkIHBhcmFtZXRlcjogJXNcbiIs IGFyZ3ZbMV0pOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCWlmIChhcmdjIDwgMykKLSsJ ICAgIHsKLSsJICAgIHByaW50ZigiTWlzc2luZyBwYXJhbWV0ZXJcbiIpOwotKwkgICAgcmV0dXJu IDA7Ci0rCSAgICB9Ci0rCWlmIChkX29wdCkKLSsJICAgIHJxbGlzdCA9IGFyZ3ZbMl07Ci0rCWVs c2UKLSsJICAgIHsKLSsJICAgIHN0cmNweShmbiwgYXJndlsyXSk7Ci0rCSAgICByc3BmaWxlID0g YXJndlszXTsKLSsJICAgIH0KLSsJfQotKyAgICBpZiAoZF9vcHQpCi0rCXsgLyogbGlzdCBvZiBm aWxlcyAoZGlyZWN0b3J5KSAqLwotKwlpZiAoIShmcCA9IGZvcGVuKHJxbGlzdCwgInIiKSkpCi0r CSAgICB7Ci0rCSAgICBwcmludGYoIkNhbm5vdCBvcGVuIHJlcSBsaXN0IGZpbGVcbiIpOwotKwkg ICAgcmV0dXJuIC0xOwotKwkgICAgfQotKwl3aGlsZSAoZmdldHMoZm4sIHNpemVvZihmbiksIGZw KSkKLSsJICAgIHsKLSsJICAgIHN0cnRvayhmbiwgIlxyXG4iKTsKLSsJICAgIHN0cmNweShyZm4s IGZuKTsKLSsJICAgIHByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIHJmbik7Ci0rCSAgICBpZiAo cHJvY19maWxlKHJmbiwgcnNwZmlsZSkpCi0rCQl7Ci0rCQlwcmludGYoIj4+PiBQcm9jZXNzaW5n IGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwgcmZuKTsKLSsJCUVYSVQoMSk7Ci0rCQl9Ci0rCSAgICB9 Ci0rCWZjbG9zZShmcCk7Ci0rCX0KLSsgICAgZWxzZSAvKiBzaW5nbGUgZmlsZSAqLwotKwl7Ci0r CWlmIChWRVJCT1NFKQotKwkJcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgZm4pOwotKwlpZiAo cHJvY19maWxlKGZuLCByc3BmaWxlKSkKLSsJICAgIHsKLSsJICAgIHByaW50ZigiPj4+IFByb2Nl c3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCBmbik7Ci0rCSAgICB9Ci0rCX0KLSsgICAgRVhJ VCgwKTsKLSsgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYv bnVsbCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19kc3N2cy5jCi0t LS0gL2Rldi9udWxsCTIwMDktMDktMjMgMTA6NTY6MDIuMTQ4MDAxNzUyICswMjAwCi0rKysgb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMuYwkyMDA5LTA5LTMw IDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSw1MzcgQEAKLSsjaW5jbHVkZSA8 b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1 ZGUgPHN0ZGlvLmg+Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotK3sKLSsg ICAgcHJpbnRmKCJObyBGSVBTIERTQSBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30K LSsjZWxzZQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv ZHNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsj aW5jbHVkZSA8Y3R5cGUuaD4KLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLStzdGF0aWMg dm9pZCBwYm4oY29uc3QgY2hhciAqbmFtZSwgQklHTlVNICpibikKLSsJewotKwlpbnQgbGVuLCBp OwotKwl1bnNpZ25lZCBjaGFyICp0bXA7Ci0rCWxlbiA9IEJOX251bV9ieXRlcyhibik7Ci0rCXRt cCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7Ci0rCWlmICghdG1wKQotKwkJewotKwkJZnByaW50Zihz dGRlcnIsICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0r CUJOX2JuMmJpbihibiwgdG1wKTsKLSsJcHJpbnRmKCIlcyA9ICIsIG5hbWUpOwotKwlmb3IgKGkg PSAwOyBpIDwgbGVuOyBpKyspCi0rCQlwcmludGYoIiUwMlgiLCB0bXBbaV0pOwotKwlmcHV0cygi XG4iLCBzdGRvdXQpOwotKwlPUEVOU1NMX2ZyZWUodG1wKTsKLSsJcmV0dXJuOwotKwl9Ci0rCi0r dm9pZCBwcmltZXMoKQotKyAgICB7Ci0rICAgIGNoYXIgYnVmWzEwMjQwXTsKLSsgICAgY2hhciBs YnVmWzEwMjQwXTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwotKyAgICB3aGlsZShm Z2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlmcHV0cyhidWYsc3Rk b3V0KTsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0r CQljb250aW51ZTsKLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJQcmltZSIpKQotKwkgICAgewotKwkg ICAgQklHTlVNICpwcDsKLSsKLSsJICAgIHBwPUJOX25ldygpOwotKwkgICAgZG9faGV4MmJuKCZw cCx2YWx1ZSk7Ci0rCSAgICBwcmludGYoInJlc3VsdD0gJWNcbiIsCi0rCQkgICBCTl9pc19wcmlt ZV9leChwcCwyMCxOVUxMLE5VTEwpID8gJ1AnIDogJ0YnKTsKLSsJICAgIH0JICAgIAotKwl9Ci0r ICAgIH0KLSsKLSt2b2lkIHBxZygpCi0rICAgIHsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAg IGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBpbnQg bm1vZD0wOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVM TCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkK LSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJY29udGludWU7Ci0rCQl9Ci0rCWlmKCFz dHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKLSsJZWxzZSBp Zighc3RyY21wKGtleXdvcmQsIk4iKSkKLSsJICAgIHsKLSsJICAgIGludCBuPWF0b2kodmFsdWUp OwotKwotKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7Ci0rCi0rCSAgICB3aGls ZShuLS0pCi0rCQl7Ci0rCQl1bnNpZ25lZCBjaGFyIHNlZWRbMjBdOwotKwkJRFNBICpkc2E7Ci0r CQlpbnQgY291bnRlcjsKLSsJCXVuc2lnbmVkIGxvbmcgaDsKLSsJCWRzYSA9IEZJUFNfZHNhX25l dygpOwotKwotKwkJaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2Qsc2Vl ZCwwLCZjb3VudGVyLCZoLE5VTEwpKQotKwkJCXsKLSsJCQlkb19wcmludF9lcnJvcnMoKTsKLSsJ CQlleGl0KDEpOwotKwkJCX0KLSsJCXBibigiUCIsZHNhLT5wKTsKLSsJCXBibigiUSIsZHNhLT5x KTsKLSsJCXBibigiRyIsZHNhLT5nKTsKLSsJCXB2KCJTZWVkIixzZWVkLDIwKTsKLSsJCXByaW50 ZigiYyA9ICVkXG4iLGNvdW50ZXIpOwotKwkJcHJpbnRmKCJIID0gJWx4XG4iLGgpOwotKwkJcHV0 YygnXG4nLHN0ZG91dCk7Ci0rCQl9Ci0rCSAgICB9Ci0rCWVsc2UKLSsJICAgIGZwdXRzKGJ1Zixz dGRvdXQpOwotKwl9Ci0rICAgIH0KLSsKLSt2b2lkIHBxZ3ZlcigpCi0rICAgIHsKLSsgICAgY2hh ciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwg KnZhbHVlOwotKyAgICBCSUdOVU0gKnAgPSBOVUxMLCAqcSA9IE5VTEwsICpnID0gTlVMTDsKLSsg ICAgaW50IGNvdW50ZXIsIGNvdW50ZXIyOwotKyAgICB1bnNpZ25lZCBsb25nIGgsIGgyOwotKyAg ICBEU0EgKmRzYT1OVUxMOwotKyAgICBpbnQgbm1vZD0wOwotKyAgICB1bnNpZ25lZCBjaGFyIHNl ZWRbMTAyNF07Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBO VUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYp KQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJZnB1 dHMoYnVmLCBzdGRvdXQpOwotKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKLSsJICAgIG5t b2Q9YXRvaSh2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJQIikpCi0rCSAgICBw PWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJRIikpCi0rCSAgICBx PWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCi0rCSAgICBn PWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJTZWVkIikpCi0rCSAg ICB7Ci0rCSAgICBpbnQgc2xlbiA9IGhleDJiaW4odmFsdWUsIHNlZWQpOwotKwkgICAgaWYgKHNs ZW4gIT0gMjApCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIlNlZWQgcGFyc2UgbGVuZ3RoIGVy cm9yXG4iKTsKLSsJCWV4aXQgKDEpOwotKwkJfQotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAo a2V5d29yZCwiYyIpKQotKwkgICAgY291bnRlciA9YXRvaShidWYrNCk7Ci0rCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJIIikpCi0rCSAgICB7Ci0rCSAgICBoID0gYXRvaSh2YWx1ZSk7Ci0rCSAg ICBpZiAoIXAgfHwgIXEgfHwgIWcpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIlBhcnNlIEVy cm9yXG4iKTsKLSsJCWV4aXQgKDEpOwotKwkJfQotKwkgICAgZHNhID0gRklQU19kc2FfbmV3KCk7 Ci0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxzZWVkLDIw ICwmY291bnRlcjIsJmgyLE5VTEwpKQotKwkJCXsKLSsJCQlkb19wcmludF9lcnJvcnMoKTsKLSsJ CQlleGl0KDEpOwotKwkJCX0KLSsgICAgICAgICAgICBpZiAoQk5fY21wKGRzYS0+cCwgcCkgfHwg Qk5fY21wKGRzYS0+cSwgcSkgfHwgQk5fY21wKGRzYS0+ZywgZykKLSsJCXx8IChjb3VudGVyICE9 IGNvdW50ZXIyKSB8fCAoaCAhPSBoMikpCi0rCSAgICAJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsK LSsJICAgIGVsc2UKLSsJICAgIAlwcmludGYoIlJlc3VsdCA9IFBcbiIpOwotKwkgICAgQk5fZnJl ZShwKTsKLSsJICAgIEJOX2ZyZWUocSk7Ci0rCSAgICBCTl9mcmVlKGcpOwotKwkgICAgcCA9IE5V TEw7Ci0rCSAgICBxID0gTlVMTDsKLSsJICAgIGcgPSBOVUxMOwotKwkgICAgRklQU19kc2FfZnJl ZShkc2EpOwotKwkgICAgZHNhID0gTlVMTDsKLSsJICAgIH0KLSsJfQotKyAgICB9Ci0rCi0rLyog S2V5cGFpciB2ZXJpZmljYXRpb24gcm91dGluZS4gTkI6IHRoaXMgaXNuJ3QgcGFydCBvZiB0aGUg c3RhbmRhcmQgRklQUzE0MC0yCi0rICogYWxnb3JpdGhtIHRlc3RzLiBJdCBpcyBhbiBhZGRpdGlv bmFsIHRlc3QgdG8gcGVyZm9ybSBzYW5pdHkgY2hlY2tzIG9uIHRoZQotKyAqIG91dHB1dCBvZiB0 aGUgS2V5UGFpciB0ZXN0LgotKyAqLwotKwotK3N0YXRpYyBpbnQgZHNzX3BhcmFtY2hlY2soaW50 IG5tb2QsIEJJR05VTSAqcCwgQklHTlVNICpxLCBCSUdOVU0gKmcsCi0rCQkJCQkJCUJOX0NUWCAq Y3R4KQotKyAgICB7Ci0rICAgIEJJR05VTSAqcmVtID0gTlVMTDsKLSsgICAgaWYgKEJOX251bV9i aXRzKHApICE9IG5tb2QpCi0rCXJldHVybiAwOwotKyAgICBpZiAoQk5fbnVtX2JpdHMocSkgIT0g MTYwKQotKwlyZXR1cm4gMDsKLSsgICAgaWYgKEJOX2lzX3ByaW1lX2V4KHAsIEJOX3ByaW1lX2No ZWNrcywgY3R4LCBOVUxMKSAhPSAxKQotKwlyZXR1cm4gMDsKLSsgICAgaWYgKEJOX2lzX3ByaW1l X2V4KHEsIEJOX3ByaW1lX2NoZWNrcywgY3R4LCBOVUxMKSAhPSAxKQotKwlyZXR1cm4gMDsKLSsg ICAgcmVtID0gQk5fbmV3KCk7Ci0rICAgIGlmICghQk5fbW9kKHJlbSwgcCwgcSwgY3R4KSB8fCAh Qk5faXNfb25lKHJlbSkKLSsgICAgCXx8IChCTl9jbXAoZywgQk5fdmFsdWVfb25lKCkpIDw9IDAp Ci0rCXx8ICFCTl9tb2RfZXhwKHJlbSwgZywgcSwgcCwgY3R4KSB8fCAhQk5faXNfb25lKHJlbSkp Ci0rCXsKLSsJQk5fZnJlZShyZW0pOwotKwlyZXR1cm4gMDsKLSsJfQotKyAgICAvKiBUb2RvOiBj aGVjayBnICovCi0rICAgIEJOX2ZyZWUocmVtKTsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsK LSt2b2lkIGtleXZlcigpCi0rICAgIHsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIg bGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBCSUdOVU0gKnAg PSBOVUxMLCAqcSA9IE5VTEwsICpnID0gTlVMTCwgKlggPSBOVUxMLCAqWSA9IE5VTEw7Ci0rICAg IEJJR05VTSAqWTI7Ci0rICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsKLSsgICAgaW50IG5tb2Q9MCwg cGFyYW1jaGVjayA9IDA7Ci0rCi0rICAgIGN0eCA9IEJOX0NUWF9uZXcoKTsKLSsgICAgWTIgPSBC Tl9uZXcoKTsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5V TEwpCi0rCXsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1Zikp Ci0rCQl7Ci0rCQlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJCWNvbnRpbnVlOwotKwkJfQotKwlpZigh c3RyY21wKGtleXdvcmQsIlttb2QiKSkKLSsJICAgIHsKLSsJICAgIGlmIChwKQotKwkJQk5fZnJl ZShwKTsKLSsJICAgIHAgPSBOVUxMOwotKwkgICAgaWYgKHEpCi0rCQlCTl9mcmVlKHEpOwotKwkg ICAgcSA9IE5VTEw7Ci0rCSAgICBpZiAoZykKLSsJCUJOX2ZyZWUoZyk7Ci0rCSAgICBnID0gTlVM TDsKLSsJICAgIHBhcmFtY2hlY2sgPSAwOwotKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKLSsJICAg IH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlAiKSkKLSsJICAgIHA9aGV4MmJuKHZhbHVl KTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlEiKSkKLSsJICAgIHE9aGV4MmJuKHZhbHVl KTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkciKSkKLSsJICAgIGc9aGV4MmJuKHZhbHVl KTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlgiKSkKLSsJICAgIFg9aGV4MmJuKHZhbHVl KTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlkiKSkKLSsJICAgIHsKLSsJICAgIFk9aGV4 MmJuKHZhbHVlKTsKLSsJICAgIGlmICghcCB8fCAhcSB8fCAhZyB8fCAhWCB8fCAhWSkKLSsJCXsK LSsJCWZwcmludGYoc3RkZXJyLCAiUGFyc2UgRXJyb3JcbiIpOwotKwkJZXhpdCAoMSk7Ci0rCQl9 Ci0rCSAgICBwYm4oIlAiLHApOwotKwkgICAgcGJuKCJRIixxKTsKLSsJICAgIHBibigiRyIsZyk7 Ci0rCSAgICBwYm4oIlgiLFgpOwotKwkgICAgcGJuKCJZIixZKTsKLSsJICAgIGlmICghcGFyYW1j aGVjaykKLSsJCXsKLSsJCWlmIChkc3NfcGFyYW1jaGVjayhubW9kLCBwLCBxLCBnLCBjdHgpKQot KwkJCXBhcmFtY2hlY2sgPSAxOwotKwkJZWxzZQotKwkJCXBhcmFtY2hlY2sgPSAtMTsKLSsJCX0K LSsJICAgIGlmIChwYXJhbWNoZWNrICE9IDEpCi0rCSAgIAlwcmludGYoIlJlc3VsdCA9IEZcbiIp OwotKwkgICAgZWxzZQotKwkJewotKwkJaWYgKCFCTl9tb2RfZXhwKFkyLCBnLCBYLCBwLCBjdHgp IHx8IEJOX2NtcChZMiwgWSkpCi0rCSAgICAJCXByaW50ZigiUmVzdWx0ID0gRlxuIik7Ci0rCSAg ICAgICAgZWxzZQotKwkgICAgCQlwcmludGYoIlJlc3VsdCA9IFBcbiIpOwotKwkJfQotKwkgICAg Qk5fZnJlZShYKTsKLSsJICAgIEJOX2ZyZWUoWSk7Ci0rCSAgICBYID0gTlVMTDsKLSsJICAgIFkg PSBOVUxMOwotKwkgICAgfQotKwl9Ci0rCWlmIChwKQotKwkgICAgQk5fZnJlZShwKTsKLSsJaWYg KHEpCi0rCSAgICBCTl9mcmVlKHEpOwotKwlpZiAoZykKLSsJICAgIEJOX2ZyZWUoZyk7Ci0rCWlm IChZMikKLSsJICAgIEJOX2ZyZWUoWTIpOwotKyAgICB9Ci0rCi0rdm9pZCBrZXlwYWlyKCkKLSsg ICAgewotKyAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICBj aGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rICAgIGludCBubW9kPTA7Ci0rCi0rICAgIHdoaWxlKGZn ZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGlu ZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91 dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCi0r CSAgICBubW9kPWF0b2kodmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTiIpKQot KwkgICAgewotKwkgICAgRFNBICpkc2E7Ci0rCSAgICBpbnQgbj1hdG9pKHZhbHVlKTsKLSsKLSsJ ICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOwotKwkgICAgZHNhID0gRklQU19kc2Ff bmV3KCk7Ci0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxO VUxMLDAsTlVMTCxOVUxMLE5VTEwpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQll eGl0KDEpOwotKwkJfQotKwkgICAgcGJuKCJQIixkc2EtPnApOwotKwkgICAgcGJuKCJRIixkc2Et PnEpOwotKwkgICAgcGJuKCJHIixkc2EtPmcpOwotKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0r Ci0rCSAgICB3aGlsZShuLS0pCi0rCQl7Ci0rCQlpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkK LSsJCQl7Ci0rCQkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQkJZXhpdCgxKTsKLSsJCQl9Ci0rCi0r CQlwYm4oIlgiLGRzYS0+cHJpdl9rZXkpOwotKwkJcGJuKCJZIixkc2EtPnB1Yl9rZXkpOwotKwkJ cHV0YygnXG4nLHN0ZG91dCk7Ci0rCQl9Ci0rCSAgICB9Ci0rCX0KLSsgICAgfQotKwotK3ZvaWQg c2lnZ2VuKCkKLSsgICAgewotKyAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBsYnVmWzEw MjRdOwotKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rICAgIGludCBubW9kPTA7Ci0rICAg IERTQSAqZHNhPU5VTEw7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGlu KSAhPSBOVUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVm LCBidWYpKQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsKLSsJCX0K LSsJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICB7Ci0rCSAgICBubW9kPWF0b2ko dmFsdWUpOwotKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7Ci0rCSAgICBpZiAo ZHNhKQotKwkJRklQU19kc2FfZnJlZShkc2EpOwotKwkgICAgZHNhID0gRklQU19kc2FfbmV3KCk7 Ci0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxOVUxMLDAs TlVMTCxOVUxMLE5VTEwpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlleGl0KDEp OwotKwkJfQotKwkgICAgcGJuKCJQIixkc2EtPnApOwotKwkgICAgcGJuKCJRIixkc2EtPnEpOwot KwkgICAgcGJuKCJHIixkc2EtPmcpOwotKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCSAgICB9 Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJNc2ciKSkKLSsJICAgIHsKLSsJICAgIHVuc2ln bmVkIGNoYXIgbXNnWzEwMjRdOwotKwkgICAgdW5zaWduZWQgY2hhciBzYnVmWzYwXTsKLSsJICAg IHVuc2lnbmVkIGludCBzbGVuOwotKwkgICAgaW50IG47Ci0rCSAgICBFVlBfUEtFWSBwazsKLSsJ ICAgIEVWUF9NRF9DVFggbWN0eDsKLSsJICAgIERTQV9TSUcgKnNpZzsKLSsJICAgIEVWUF9NRF9D VFhfaW5pdCgmbWN0eCk7Ci0rCi0rCSAgICBuPWhleDJiaW4odmFsdWUsbXNnKTsKLSsJICAgIHB2 KCJNc2ciLG1zZyxuKTsKLSsKLSsJICAgIGlmICghRFNBX2dlbmVyYXRlX2tleShkc2EpKQotKwkJ ewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlleGl0KDEpOwotKwkJfQotKwkgICAgcGsudHlw ZSA9IEVWUF9QS0VZX0RTQTsKLSsJICAgIHBrLnBrZXkuZHNhID0gZHNhOwotKwkgICAgcGJuKCJZ Iixkc2EtPnB1Yl9rZXkpOwotKwotKwkgICAgRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfZHNz MSgpLCBOVUxMKTsKLSsJICAgIEVWUF9TaWduVXBkYXRlKCZtY3R4LCBtc2csIG4pOwotKwkgICAg RVZQX1NpZ25GaW5hbCgmbWN0eCwgc2J1ZiwgJnNsZW4sICZwayk7Ci0rCi0rCSAgICBzaWcgPSBE U0FfU0lHX25ldygpOwotKwkgICAgRklQU19kc2Ffc2lnX2RlY29kZShzaWcsIHNidWYsIHNsZW4p OwotKwotKwkgICAgcGJuKCJSIixzaWctPnIpOwotKwkgICAgcGJuKCJTIixzaWctPnMpOwotKwkg ICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCSAgICBEU0FfU0lHX2ZyZWUoc2lnKTsKLSsJICAgIEVW UF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0rCSAgICB9Ci0rCX0KLSsJaWYgKGRzYSkKLSsJCUZJ UFNfZHNhX2ZyZWUoZHNhKTsKLSsgICAgfQotKwotK3ZvaWQgc2lndmVyKCkKLSsgICAgewotKyAg ICBEU0EgKmRzYT1OVUxMOwotKyAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBsYnVmWzEw MjRdOwotKyAgICB1bnNpZ25lZCBjaGFyIG1zZ1sxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwg KnZhbHVlOwotKyAgICBpbnQgbm1vZD0wLCBuPTA7Ci0rICAgIERTQV9TSUcgc2csICpzaWcgPSAm c2c7Ci0rCi0rICAgIHNpZy0+ciA9IE5VTEw7Ci0rICAgIHNpZy0+cyA9IE5VTEw7Ci0rCi0rICAg IHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWlmICgh cGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJewotKwkJZnB1dHMo YnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJb bW9kIikpCi0rCSAgICB7Ci0rCSAgICBubW9kPWF0b2kodmFsdWUpOwotKwkgICAgaWYoZHNhKQot KwkJRklQU19kc2FfZnJlZShkc2EpOwotKwkgICAgZHNhPUZJUFNfZHNhX25ldygpOwotKwkgICAg fQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUCIpKQotKwkgICAgZHNhLT5wPWhleDJibih2 YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJRIikpCi0rCSAgICBkc2EtPnE9aGV4 MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkciKSkKLSsJICAgIHsKLSsJ ICAgIGRzYS0+Zz1oZXgyYm4odmFsdWUpOwotKwotKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5c biIsbm1vZCk7Ci0rCSAgICBwYm4oIlAiLGRzYS0+cCk7Ci0rCSAgICBwYm4oIlEiLGRzYS0+cSk7 Ci0rCSAgICBwYm4oIkciLGRzYS0+Zyk7Ci0rCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKLSsJICAg IH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk1zZyIpKQotKwkgICAgewotKwkgICAgbj1o ZXgyYmluKHZhbHVlLG1zZyk7Ci0rCSAgICBwdigiTXNnIixtc2csbik7Ci0rCSAgICB9Ci0rCWVs c2UgaWYoIXN0cmNtcChrZXl3b3JkLCJZIikpCi0rCSAgICBkc2EtPnB1Yl9rZXk9aGV4MmJuKHZh bHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlIiKSkKLSsJICAgIHNpZy0+cj1oZXgy Ym4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUyIpKQotKwkgICAgewotKwkg ICAgRVZQX01EX0NUWCBtY3R4OwotKwkgICAgRVZQX1BLRVkgcGs7Ci0rCSAgICB1bnNpZ25lZCBj aGFyIHNpZ2J1Zls2MF07Ci0rCSAgICB1bnNpZ25lZCBpbnQgc2xlbjsKLSsJICAgIGludCByOwot KwkgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKLSsJICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9E U0E7Ci0rCSAgICBway5wa2V5LmRzYSA9IGRzYTsKLSsJICAgIHNpZy0+cz1oZXgyYm4odmFsdWUp OwotKwkKLSsJICAgIHBibigiWSIsZHNhLT5wdWJfa2V5KTsKLSsJICAgIHBibigiUiIsc2lnLT5y KTsKLSsJICAgIHBibigiUyIsc2lnLT5zKTsKLSsKLSsJICAgIHNsZW4gPSBGSVBTX2RzYV9zaWdf ZW5jb2RlKHNpZ2J1Ziwgc2lnKTsKLSsJICAgIEVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBf ZHNzMSgpLCBOVUxMKTsKLSsJICAgIEVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIG1zZywgbik7Ci0r CSAgICByID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBzaWdidWYsIHNsZW4sICZwayk7Ci0rCSAg ICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwotKwkKLSsJICAgIHByaW50ZigiUmVzdWx0ID0g JWNcbiIsIHIgPT0gMSA/ICdQJyA6ICdGJyk7Ci0rCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKLSsJ ICAgIH0KLSsJfQotKyAgICB9Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCi0r ICAgIHsKLSsgICAgaWYoYXJnYyAhPSAyKQotKwl7Ci0rCWZwcmludGYoc3RkZXJyLCIlcyBbcHJp bWV8cHFnfHBxZ3ZlcnxrZXlwYWlyfHNpZ2dlbnxzaWd2ZXJdXG4iLGFyZ3ZbMF0pOwotKwlleGl0 KDEpOwotKwl9Ci0rICAgIGlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwl7Ci0rCWRvX3ByaW50X2Vy cm9ycygpOwotKwlleGl0KDEpOwotKwl9Ci0rICAgIGlmKCFzdHJjbXAoYXJndlsxXSwicHJpbWUi KSkKLSsJcHJpbWVzKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJwcWciKSkKLSsJ cHFnKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJwcWd2ZXIiKSkKLSsJcHFndmVy KCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJrZXlwYWlyIikpCi0rCWtleXBhaXIo KTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sImtleXZlciIpKQotKwlrZXl2ZXIoKTsK LSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInNpZ2dlbiIpKQotKwlzaWdnZW4oKTsKLSsg ICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInNpZ3ZlciIpKQotKwlzaWd2ZXIoKTsKLSsgICAg ZWxzZQotKwl7Ci0rCWZwcmludGYoc3RkZXJyLCJEb24ndCBrbm93IGhvdyB0byAlcy5cbiIsYXJn dlsxXSk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsKLSsgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsj ZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBz L2NhdnMvZmlwc19ybmd2cy5jCi0tLS0gL2Rldi9udWxsCTIwMDktMDktMjMgMTA6NTY6MDIuMTQ4 MDAxNzUyICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfcm5ndnMuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCAr MSwyMzAgQEAKLSsvKgotKyAqIENydWRlIHRlc3QgZHJpdmVyIGZvciBwcm9jZXNzaW5nIHRoZSBW U1QgYW5kIE1DVCB0ZXN0dmVjdG9yIGZpbGVzCi0rICogZ2VuZXJhdGVkIGJ5IHRoZSBDTVZQIFJO R1ZTIHByb2R1Y3QuCi0rICoKLSsgKiBOb3RlIHRoZSBpbnB1dCBmaWxlcyBhcmUgYXNzdW1lZCB0 byBoYXZlIGEgX3ZlcnlfIHNwZWNpZmljIGZvcm1hdAotKyAqIGFzIGRlc2NyaWJlZCBpbiB0aGUg TklTVCBkb2N1bWVudCAiVGhlIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yCi0rICogVmFsaWRhdGlv biBTeXN0ZW0gKFJOR1ZTKSIsIE1heSAyNSwgMjAwNC4KLSsgKgotKyAqLwotKyNpbmNsdWRlIDxv cGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVk ZSA8c3RkaW8uaD4KLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rewotKyAg ICBwcmludGYoIk5vIEZJUFMgUk5HIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4gMDsKLSt9Ci0r I2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Rz YS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19y YW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5o PgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotK3Zv aWQgdnN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyICprZXkgPSBOVUxMOwotKyAgICB1 bnNpZ25lZCBjaGFyICp2ID0gTlVMTDsKLSsgICAgdW5zaWduZWQgY2hhciAqZHQgPSBOVUxMOwot KyAgICB1bnNpZ25lZCBjaGFyIHJldFsxNl07Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBj aGFyIGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgbG9uZyBp LCBrZXlsZW47Ci0rCi0rICAgIGtleWxlbiA9IDA7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1Zixz aXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwlp Zighc3RybmNtcChidWYsIltBRVMgMTI4LUtleV0iLCAxMykpCi0rCQlrZXlsZW4gPSAxNjsKLSsJ ZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMTkyLUtleV0iLCAxMykpCi0rCQlrZXlsZW4gPSAy NDsKLSsJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMjU2LUtleV0iLCAxMykpCi0rCQlrZXls ZW4gPSAzMjsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1Zikp Ci0rCQljb250aW51ZTsKLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkKLSsJICAgIHsKLSsJ ICAgIGtleT1oZXgyYmluX20odmFsdWUsJmkpOwotKwkgICAgaWYgKGkgIT0ga2V5bGVuKQotKwkJ ewotKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGtleSBsZW5ndGgsIGV4cGVjdGluZyAlbGRc biIsIGtleWxlbik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNt cChrZXl3b3JkLCJEVCIpKQotKwkgICAgewotKwkgICAgZHQ9aGV4MmJpbl9tKHZhbHVlLCZpKTsK LSsJICAgIGlmIChpICE9IDE2KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIERU IGxlbmd0aFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNt cChrZXl3b3JkLCJWIikpCi0rCSAgICB7Ci0rCSAgICB2PWhleDJiaW5fbSh2YWx1ZSwmaSk7Ci0r CSAgICBpZiAoaSAhPSAxNikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBWIGxl bmd0aFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCi0rCSAgICBpZiAoIWtleSB8fCAhZHQpCi0r CQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIk1pc3Npbmcga2V5IG9yIERUXG4iKTsKLSsJCXJldHVy bjsKLSsJCX0KLSsKLSsJICAgIEZJUFNfcmFuZF9zZXRfa2V5KGtleSwga2V5bGVuKTsKLSsJICAg IEZJUFNfcmFuZF9zZWVkKHYsMTYpOwotKwkgICAgRklQU19yYW5kX3NldF9kdChkdCk7Ci0rCSAg ICBpZiAoRklQU19yYW5kX2J5dGVzKHJldCwxNikgPD0gMCkKLSsJCXsKLSsJCWZwcmludGYoc3Rk ZXJyLCAiRXJyb3IgZ2V0dGluZyBQUk5HIHZhbHVlXG4iKTsKLSsJICAgICAgICByZXR1cm47Ci0r CSAgICAgICAgfQotKwotKwkgICAgcHYoIlIiLHJldCwxNik7Ci0rCSAgICBPUEVOU1NMX2ZyZWUo a2V5KTsKLSsJICAgIGtleSA9IE5VTEw7Ci0rCSAgICBPUEVOU1NMX2ZyZWUoZHQpOwotKwkgICAg ZHQgPSBOVUxMOwotKwkgICAgT1BFTlNTTF9mcmVlKHYpOwotKwkgICAgdiA9IE5VTEw7Ci0rCSAg ICB9Ci0rCX0KLSsgICAgfQotKwotK3ZvaWQgbWN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBj aGFyICprZXkgPSBOVUxMOwotKyAgICB1bnNpZ25lZCBjaGFyICp2ID0gTlVMTDsKLSsgICAgdW5z aWduZWQgY2hhciAqZHQgPSBOVUxMOwotKyAgICB1bnNpZ25lZCBjaGFyIHJldFsxNl07Ci0rICAg IGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFyIGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdv cmQsICp2YWx1ZTsKLSsgICAgbG9uZyBpLCBrZXlsZW47Ci0rICAgIGludCBqOwotKwotKyAgICBr ZXlsZW4gPSAwOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0g TlVMTCkKLSsJewotKwlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJaWYoIXN0cm5jbXAoYnVmLCJbQUVT IDEyOC1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMTY7Ci0rCWVsc2UgaWYoIXN0cm5jbXAoYnVm LCJbQUVTIDE5Mi1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMjQ7Ci0rCWVsc2UgaWYoIXN0cm5j bXAoYnVmLCJbQUVTIDI1Ni1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMzI7Ci0rCWlmICghcGFy c2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJY29udGludWU7Ci0rCWlm KCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCi0rCSAgICB7Ci0rCSAgICBrZXk9aGV4MmJpbl9tKHZh bHVlLCZpKTsKLSsJICAgIGlmIChpICE9IGtleWxlbikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJy LCAiSW52YWxpZCBrZXkgbGVuZ3RoLCBleHBlY3RpbmcgJWxkXG4iLCBrZXlsZW4pOwotKwkJcmV0 dXJuOwotKwkJfQotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRFQiKSkKLSsJ ICAgIHsKLSsJICAgIGR0PWhleDJiaW5fbSh2YWx1ZSwmaSk7Ci0rCSAgICBpZiAoaSAhPSAxNikK LSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBEVCBsZW5ndGhcbiIpOwotKwkJcmV0 dXJuOwotKwkJfQotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiViIpKQotKwkg ICAgewotKwkgICAgdj1oZXgyYmluX20odmFsdWUsJmkpOwotKwkgICAgaWYgKGkgIT0gMTYpCi0r CQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgViBsZW5ndGhcbiIpOwotKwkJcmV0dXJu OwotKwkJfQotKwotKwkgICAgaWYgKCFrZXkgfHwgIWR0KQotKwkJewotKwkJZnByaW50ZihzdGRl cnIsICJNaXNzaW5nIGtleSBvciBEVFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCi0rCSAgICBG SVBTX3JhbmRfc2V0X2tleShrZXksIGtleWxlbik7Ci0rCSAgICBGSVBTX3JhbmRfc2VlZCh2LDE2 KTsKLSsJICAgIGZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKQotKwkJewotKwkJICAgIEZJUFNf cmFuZF9zZXRfZHQoZHQpOwotKwkJICAgIGlmIChGSVBTX3JhbmRfYnl0ZXMocmV0LDE2KSA8PSAw KQotKwkJCXsKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGdldHRpbmcgUFJORyB2YWx1ZVxu Iik7Ci0rCQkgICAgICAgIHJldHVybjsKLSsJCSAgICAgICAgfQotKwkJICAgIC8qIEluY3JlbWVu dCBEVCAqLwotKwkJICAgIGZvciAoaiA9IDE1OyBqID49IDA7IGotLSkKLSsJCQl7Ci0rCQkJZHRb al0rKzsKLSsJCQlpZiAoZHRbal0pCi0rCQkJCWJyZWFrOwotKwkJCX0KLSsJCX0KLSsKLSsJICAg IHB2KCJSIixyZXQsMTYpOwotKwkgICAgT1BFTlNTTF9mcmVlKGtleSk7Ci0rCSAgICBrZXkgPSBO VUxMOwotKwkgICAgT1BFTlNTTF9mcmVlKGR0KTsKLSsJICAgIGR0ID0gTlVMTDsKLSsJICAgIE9Q RU5TU0xfZnJlZSh2KTsKLSsJICAgIHYgPSBOVUxMOwotKwkgICAgfQotKwl9Ci0rICAgIH0KLSsK LStpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKLSsgICAgewotKyAgICBpZihhcmdjICE9 IDIpCi0rCXsKLSsJZnByaW50ZihzdGRlcnIsIiVzIFttY3R8dnN0XVxuIixhcmd2WzBdKTsKLSsJ ZXhpdCgxKTsKLSsJfQotKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKLSsJewotKwlkb19wcmlu dF9lcnJvcnMoKTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBGSVBTX3JhbmRfcmVzZXQoKTsKLSsg ICAgaWYgKCFGSVBTX3JhbmRfdGVzdF9tb2RlKCkpCi0rCXsKLSsJZnByaW50ZihzdGRlcnIsICJF cnJvciBzZXR0aW5nIFBSTkcgdGVzdCBtb2RlXG4iKTsKLSsJZG9fcHJpbnRfZXJyb3JzKCk7Ci0r CWV4aXQoMSk7Ci0rCX0KLSsgICAgaWYoIXN0cmNtcChhcmd2WzFdLCJtY3QiKSkKLSsJbWN0KCk7 Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJ2c3QiKSkKLSsJdnN0KCk7Ci0rICAgIGVs c2UKLSsJewotKwlmcHJpbnRmKHN0ZGVyciwiRG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3Zb MV0pOwotKwlleGl0KDEpOwotKwl9Ci0rCi0rICAgIHJldHVybiAwOwotKyAgICB9Ci0rI2VuZGlm Ci1kaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfcnNhZ3Rlc3QuYwotLS0tIC9kZXYvbnVsbAkyMDA5LTA5LTIzIDEwOjU2OjAyLjE0ODAw MTc1MiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X3JzYWd0ZXN0LmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAg KzEsMzkwIEBACi0rLyogZmlwc19yc2FndGVzdC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVw aGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJv amVjdCAyMDA1LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA1 LDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAq IDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVk ICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1l cyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NM IFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNv ZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0r ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0 cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VE IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAq IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ Q0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICog T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICoK LSsgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVu IGJ5IEVyaWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5cHRzb2Z0 LmNvbSkuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8Y3R5 cGUuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+Ci0rCi0rI2lm bmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQot K3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDAp OwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotK2ludCByc2Ff dGVzdChGSUxFICpvdXQsIEZJTEUgKmluKTsKLStzdGF0aWMgaW50IHJzYV9wcmludGtleTEoRklM RSAqb3V0LCBSU0EgKnJzYSwKLSsJCUJJR05VTSAqWHAxLCBCSUdOVU0gKlhwMiwgQklHTlVNICpY cCwKLSsJCUJJR05VTSAqZSk7Ci0rc3RhdGljIGludCByc2FfcHJpbnRrZXkyKEZJTEUgKm91dCwg UlNBICpyc2EsCi0rCQlCSUdOVU0gKlhxMSwgQklHTlVNICpYcTIsIEJJR05VTSAqWHEpOwotKwot K2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsJewotKwlGSUxFICppbiA9IE5VTEws ICpvdXQgPSBOVUxMOwotKwotKwlpbnQgcmV0ID0gMTsKLSsKLSsJaWYoIUZJUFNfbW9kZV9zZXQo MSkpCi0rCQl7Ci0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwot KwlpZiAoYXJnYyA9PSAxKQotKwkJaW4gPSBzdGRpbjsKLSsJZWxzZQotKwkJaW4gPSBmb3Blbihh cmd2WzFdLCAiciIpOwotKwotKwlpZiAoYXJnYyA8IDIpCi0rCQlvdXQgPSBzdGRvdXQ7Ci0rCWVs c2UKLSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7Ci0rCi0rCWlmICghaW4pCi0rCQl7Ci0r CQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsK LSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIW91dCkKLSsJCXsKLSsJCWZwcmludGYoc3Rk ZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5k OwotKwkJfQotKwotKwlpZiAoIXJzYV90ZXN0KG91dCwgaW4pKQotKwkJewotKwkJZnByaW50Zihz dGRlcnIsICJGQVRBTCBSU0FHVEVTVCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOwotKwkJZ290 byBlbmQ7Ci0rCQl9Ci0rCWVsc2UKLSsJCXJldCA9IDA7Ci0rCi0rCWVuZDoKLSsKLSsJaWYgKHJl dCkKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwotKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkK LSsJCWZjbG9zZShpbik7Ci0rCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQotKwkJZmNsb3Nl KG91dCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCX0KLSsKLSsjZGVmaW5lIFJTQV9URVNUX01B WExJTkVMRU4JMTAyNDAKLSsKLStpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbikKLSsJ ewotKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKLSsJY2hhciAqa2V5d29yZCwg KnZhbHVlOwotKwlSU0EgKnJzYSA9IE5VTEw7Ci0rCUJJR05VTSAqWHAxID0gTlVMTCwgKlhwMiA9 IE5VTEwsICpYcCA9IE5VTEw7Ci0rCUJJR05VTSAqWHExID0gTlVMTCwgKlhxMiA9IE5VTEwsICpY cSA9IE5VTEw7Ci0rCUJJR05VTSAqZSA9IE5VTEw7Ci0rCWludCByZXQgPSAwOwotKwlpbnQgbG51 bSA9IDA7Ci0rCi0rCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxF Tik7Ci0rCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKLSsK LSsJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCXdoaWxl IChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwgaW4pKQotKwkJewotKwkJbG51 bSsrOwotKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKLSsJCWtleXdvcmQgPSBsaW5lYnVm OwotKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWdu ZWQgY2hhcikqa2V5d29yZCkpCi0rCQkJa2V5d29yZCsrOwotKwotKwkJLyogTG9vayBmb3IgPSBz aWduICovCi0rCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Ci0rCi0rCQkvKiBJZiBubyA9IG9y IHN0YXJ0cyB3aXRoIFsgKGZvciBbZm9vID0gYmFyXSBsaW5lKSBqdXN0IGNvcHkgKi8KLSsJCWlm ICghcCB8fCAqa2V5d29yZD09J1snKQotKwkJCXsKLSsJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91 dCkgPCAwKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsKLSsJCXEg PSBwIC0gMTsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlz c3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJCSpxLS0gPSAwOwotKwotKwkJKnAgPSAwOwot KwkJdmFsdWUgPSBwICsgMTsKLSsKLSsJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFs dWUgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCi0rCQkJdmFs dWUrKzsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCQlw ID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKLSsKLSsJCXdoaWxlICgqcCA9PSAnXG4nIHx8 IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAwOwotKwotKwkJaWYgKCFz dHJjbXAoa2V5d29yZCwgInhwMSIpKQotKwkJCXsKLSsJCQlpZiAoWHAxIHx8ICFkb19oZXgyYm4o JlhwMSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCAieHAyIikpCi0rCQkJewotKwkJCWlmIChYcDIgfHwgIWRvX2hleDJi bigmWHAyLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlm ICghc3RyY21wKGtleXdvcmQsICJYcCIpKQotKwkJCXsKLSsJCQlpZiAoWHAgfHwgIWRvX2hleDJi bigmWHAsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgInhxMSIpKQotKwkJCXsKLSsJCQlpZiAoWHExIHx8ICFkb19oZXgy Ym4oJlhxMSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBp ZiAoIXN0cmNtcChrZXl3b3JkLCAieHEyIikpCi0rCQkJewotKwkJCWlmIChYcTIgfHwgIWRvX2hl eDJibigmWHEyLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNl IGlmICghc3RyY21wKGtleXdvcmQsICJYcSIpKQotKwkJCXsKLSsJCQlpZiAoWHEgfHwgIWRvX2hl eDJibigmWHEsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwgImUiKSkKLSsJCQl7Ci0rCQkJaWYgKGUgfHwgIWRvX2hleDJi bigmZSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCAicDEiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwgInAyIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJwIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQs ICJxMSIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicTIi KSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInEiKSkKLSsJ CQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIm4iKSkKLSsJCQljb250 aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgImQiKSkKLSsJCQljb250aW51ZTsK LSsJCWVsc2UKLSsJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwotKwkJZnB1dHMob2xpbmVidWYsIG91 dCk7Ci0rCi0rCQlpZiAoZSAmJiBYcDEgJiYgWHAyICYmIFhwKQotKwkJCXsKLSsJCQlyc2EgPSBG SVBTX3JzYV9uZXcoKTsKLSsJCQlpZiAoIXJzYSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlpZiAo IXJzYV9wcmludGtleTEob3V0LCByc2EsIFhwMSwgWHAyLCBYcCwgZSkpCi0rCQkJCWdvdG8gZXJy b3I7Ci0rCQkJQk5fZnJlZShYcDEpOwotKwkJCVhwMSA9IE5VTEw7Ci0rCQkJQk5fZnJlZShYcDIp OwotKwkJCVhwMiA9IE5VTEw7Ci0rCQkJQk5fZnJlZShYcCk7Ci0rCQkJWHAgPSBOVUxMOwotKwkJ CUJOX2ZyZWUoZSk7Ci0rCQkJZSA9IE5VTEw7Ci0rCQkJfQotKwotKwkJaWYgKHJzYSAmJiBYcTEg JiYgWHEyICYmIFhxKQotKwkJCXsKLSsJCQlpZiAoIXJzYV9wcmludGtleTIob3V0LCByc2EsIFhx MSwgWHEyLCBYcSkpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJQk5fZnJlZShYcTEpOwotKwkJCVhx MSA9IE5VTEw7Ci0rCQkJQk5fZnJlZShYcTIpOwotKwkJCVhxMiA9IE5VTEw7Ci0rCQkJQk5fZnJl ZShYcSk7Ci0rCQkJWHEgPSBOVUxMOwotKwkJCUZJUFNfcnNhX2ZyZWUocnNhKTsKLSsJCQlyc2Eg PSBOVUxMOwotKwkJCX0KLSsJCX0KLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCi0rCWlm IChvbGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVmKQot KwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOwotKwotKwlpZiAoWHAxKQotKwkJQk5fZnJlZShYcDEp OwotKwlpZiAoWHAyKQotKwkJQk5fZnJlZShYcDIpOwotKwlpZiAoWHApCi0rCQlCTl9mcmVlKFhw KTsKLSsJaWYgKFhxMSkKLSsJCUJOX2ZyZWUoWHExKTsKLSsJaWYgKFhxMSkKLSsJCUJOX2ZyZWUo WHExKTsKLSsJaWYgKFhxMikKLSsJCUJOX2ZyZWUoWHEyKTsKLSsJaWYgKFhxKQotKwkJQk5fZnJl ZShYcSk7Ci0rCWlmIChlKQotKwkJQk5fZnJlZShlKTsKLSsJaWYgKHJzYSkKLSsJCUZJUFNfcnNh X2ZyZWUocnNhKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJcGFyc2VfZXJyb3I6Ci0rCi0rCWZw cmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBs bnVtKTsKLSsKLSsJZ290byBlcnJvcjsKLSsKLSsJfQotKwotK3N0YXRpYyBpbnQgcnNhX3ByaW50 a2V5MShGSUxFICpvdXQsIFJTQSAqcnNhLAotKwkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLCBC SUdOVU0gKlhwLAotKwkJQklHTlVNICplKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwlCSUdOVU0g KnAxID0gTlVMTCwgKnAyID0gTlVMTDsKLSsJcDEgPSBCTl9uZXcoKTsKLSsJcDIgPSBCTl9uZXco KTsKLSsJaWYgKCFwMSB8fCAhcDIpCi0rCQlnb3RvIGVycm9yOwotKwotKwlpZiAoIVJTQV9YOTMx X2Rlcml2ZV9leChyc2EsIHAxLCBwMiwgTlVMTCwgTlVMTCwgWHAxLCBYcDIsIFhwLAotKwkJCQkJ CU5VTEwsIE5VTEwsIE5VTEwsIGUsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJZG9fYm5f cHJpbnRfbmFtZShvdXQsICJwMSIsIHAxKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwMiIs IHAyKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwIiwgcnNhLT5wKTsKLSsKLSsJcmV0ID0g MTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChwMSkKLSsJCUJOX2ZyZWUocDEpOwotKwlpZiAocDIpCi0r CQlCTl9mcmVlKHAyKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK3N0YXRpYyBpbnQgcnNh X3ByaW50a2V5MihGSUxFICpvdXQsIFJTQSAqcnNhLAotKwkJQklHTlVNICpYcTEsIEJJR05VTSAq WHEyLCBCSUdOVU0gKlhxKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwlCSUdOVU0gKnExID0gTlVM TCwgKnEyID0gTlVMTDsKLSsJcTEgPSBCTl9uZXcoKTsKLSsJcTIgPSBCTl9uZXcoKTsKLSsJaWYg KCFxMSB8fCAhcTIpCi0rCQlnb3RvIGVycm9yOwotKwotKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9l eChyc2EsIE5VTEwsIE5VTEwsIHExLCBxMiwgTlVMTCwgTlVMTCwgTlVMTCwKLSsJCQkJCQlYcTEs IFhxMiwgWHEsIE5VTEwsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJZG9fYm5fcHJpbnRf bmFtZShvdXQsICJxMSIsIHExKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJxMiIsIHEyKTsK LSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJxIiwgcnNhLT5xKTsKLSsJZG9fYm5fcHJpbnRfbmFt ZShvdXQsICJuIiwgcnNhLT5uKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJkIiwgcnNhLT5k KTsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChxMSkKLSsJCUJOX2ZyZWUocTEp OwotKwlpZiAocTIpCi0rCQlCTl9mcmVlKHEyKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwot KyNlbmRpZgotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMKLS0tLSAvZGV2L251bGwJMjAwOS0wOS0yMyAxMDo1Njow Mi4xNDgwMDE3NTIgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzL2Nh dnMvZmlwc19yc2FzdGVzdC5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1A QCAtMCwwICsxLDM3MCBAQAotKy8qIGZpcHNfcnNhc3Rlc3QuYyAqLwotKy8qIFdyaXR0ZW4gYnkg RHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAot KyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAo YykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgot KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgot KyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBz b2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDov L3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xr aXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv dXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Np b24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0r ICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxs ZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5h bWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5T U0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0 c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0ICho dHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNT RUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0r ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsg KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsg KgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0 ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlwdHNv ZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxj dHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KLSsKLSsj aWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p Ci0rewotKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4o MCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rc3RhdGlj IGludCByc2Ffc3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50IFNhbHRsZW4pOwotK3N0YXRp YyBpbnQgcnNhX3ByaW50c2lnKEZJTEUgKm91dCwgUlNBICpyc2EsIGNvbnN0IEVWUF9NRCAqZGdz dCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sIGludCBTYWx0bGVuKTsKLSsK LStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rCXsKLSsJRklMRSAqaW4gPSBOVUxM LCAqb3V0ID0gTlVMTDsKLSsKLSsJaW50IHJldCA9IDEsIFNhbHRsZW4gPSAtMTsKLSsKLSsJaWYo IUZJUFNfbW9kZV9zZXQoMSkpCi0rCQl7Ci0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCWdvdG8g ZW5kOwotKwkJfQotKwotKwlpZiAoKGFyZ2MgPiAyKSAmJiAhc3RyY21wKCItc2FsdGxlbiIsIGFy Z3ZbMV0pKQotKwkJewotKwkJU2FsdGxlbiA9IGF0b2koYXJndlsyXSk7Ci0rCQlpZiAoU2FsdGxl biA8IDApCi0rCQkJewotKwkJCWZwcmludGYoc3RkZXJyLCAiRkFUQUw6IEludmFsaWQgc2FsdCBs ZW5ndGhcbiIpOwotKwkJCWdvdG8gZW5kOwotKwkJCX0KLSsJCWFyZ2MgLT0gMjsKLSsJCWFyZ3Yg Kz0gMjsKLSsJCX0KLSsJZWxzZSBpZiAoKGFyZ2MgPiAxKSAmJiAhc3RyY21wKCIteDkzMSIsIGFy Z3ZbMV0pKQotKwkJewotKwkJU2FsdGxlbiA9IC0yOwotKwkJYXJnYy0tOwotKwkJYXJndisrOwot KwkJfQotKwotKwlpZiAoYXJnYyA9PSAxKQotKwkJaW4gPSBzdGRpbjsKLSsJZWxzZQotKwkJaW4g PSBmb3Blbihhcmd2WzFdLCAiciIpOwotKwotKwlpZiAoYXJnYyA8IDIpCi0rCQlvdXQgPSBzdGRv dXQ7Ci0rCWVsc2UKLSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7Ci0rCi0rCWlmICghaW4p Ci0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVy cm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIW91dCkKLSsJCXsKLSsJCWZw cmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJ CWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIXJzYV9zdGVzdChvdXQsIGluLCBTYWx0bGVuKSkK LSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBU1RFU1QgZmlsZSBwcm9jZXNzaW5n IGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwllbHNlCi0rCQlyZXQgPSAwOwotKwot KwllbmQ6Ci0rCi0rCWlmIChyZXQpCi0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsKLSsJaWYgKGlu ICYmIChpbiAhPSBzdGRpbikpCi0rCQlmY2xvc2UoaW4pOwotKwlpZiAob3V0ICYmIChvdXQgIT0g c3Rkb3V0KSkKLSsJCWZjbG9zZShvdXQpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwl9Ci0rCi0r I2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCi0rCi0raW50IHJzYV9zdGVzdChGSUxF ICpvdXQsIEZJTEUgKmluLCBpbnQgU2FsdGxlbikKLSsJewotKwljaGFyICpsaW5lYnVmLCAqb2xp bmVidWYsICpwLCAqcTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwlSU0EgKnJzYSA9IE5V TEw7Ci0rCWNvbnN0IEVWUF9NRCAqZGdzdCA9IE5VTEw7Ci0rCXVuc2lnbmVkIGNoYXIgKk1zZyA9 IE5VTEw7Ci0rCWxvbmcgTXNnbGVuID0gLTE7Ci0rCWludCBrZXlsZW4gPSAtMSwgY3VycmVudF9r ZXlsZW4gPSAtMTsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBsbnVtID0gMDsKLSsKLSsJb2xpbmVi dWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKLSsJbGluZWJ1ZiA9IE9Q RU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOwotKwotKwlpZiAoIWxpbmVidWYgfHwg IW9saW5lYnVmKQotKwkJZ290byBlcnJvcjsKLSsKLSsJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBS U0FfVEVTVF9NQVhMSU5FTEVOLCBpbikpCi0rCQl7Ci0rCQlsbnVtKys7Ci0rCQlzdHJjcHkobGlu ZWJ1Ziwgb2xpbmVidWYpOwotKwkJa2V5d29yZCA9IGxpbmVidWY7Ci0rCQkvKiBTa2lwIGxlYWRp bmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkK LSsJCQlrZXl3b3JkKys7Ci0rCi0rCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KLSsJCXAgPSBzdHJj aHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJCS8qIElmIG5vID0ganVzdCBjb3B5ICovCi0rCQlpZiAo IXApCi0rCQkJewotKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCi0rCQkJCWdvdG8g ZXJyb3I7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwotKwkJcSA9IHAgLSAxOwotKwotKwkJLyog UmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hh cikqcSkpCi0rCQkJKnEtLSA9IDA7Ci0rCi0rCQkqcCA9IDA7Ci0rCQl2YWx1ZSA9IHAgKyAxOwot KwotKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJd2hpbGUgKGlz c3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCQl2YWx1ZSsrOwotKwotKwkJLyogUmVt b3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXAgPSB2YWx1ZSArIHN0cmxlbih2 YWx1ZSkgLSAxOwotKwotKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQg Y2hhcikqcCkpCi0rCQkJKnAtLSA9IDA7Ci0rCi0rCQkvKiBMb29rIGZvciBbbW9kID0gWFhYXSBm b3Iga2V5IGxlbmd0aCAqLwotKwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIlttb2QiKSkKLSsJ CQl7Ci0rCQkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCQkJaWYgKCpwICE9ICdd JykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQkqcCA9IDA7Ci0rCQkJa2V5bGVuID0gYXRv aSh2YWx1ZSk7Ci0rCQkJaWYgKGtleWxlbiA8IDApCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0r CQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiU0hBQWxnIikpCi0rCQkJewotKwkJ CWlmICghc3RyY21wKHZhbHVlLCAiU0hBMSIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTEoKTsKLSsJ CQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMjI0IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hh MjI0KCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTI1NiIpKQotKwkJCQlkZ3N0 ID0gRVZQX3NoYTI1NigpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEzODQiKSkK LSsJCQkJZGdzdCA9IEVWUF9zaGEzODQoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAi U0hBNTEyIikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhNTEyKCk7Ci0rCQkJZWxzZQotKwkJCQl7Ci0r CQkJCWZwcmludGYoc3RkZXJyLAotKwkJCQkJIkZBVEFMOiB1bnN1cHBvcnRlZCBhbGdvcml0aG0g XCIlc1wiXG4iLAotKwkJCQkJCQkJdmFsdWUpOwotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJ CQl9Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNnIikpCi0rCQkJewot KwkJCWlmIChNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJaWYgKHN0cmxlbih2YWx1 ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUpID0gJzAnOwotKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1 ZSwgJk1zZ2xlbik7Ci0rCQkJaWYgKCFNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJ fQotKwotKwkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCi0rCQkvKiBJZiBrZXkgbGVuZ3RoIGhh cyBjaGFuZ2VkLCBnZW5lcmF0ZSBhbmQgb3V0cHV0IHB1YmxpYwotKwkJICoga2V5IGNvbXBvbmVu dHMgb2YgbmV3IFJTQSBwcml2YXRlIGtleS4KLSsJCSAqLwotKwotKwkJaWYgKGtleWxlbiAhPSBj dXJyZW50X2tleWxlbikKLSsJCQl7Ci0rCQkJQklHTlVNICpibl9lOwotKwkJCWlmIChyc2EpCi0r CQkJCUZJUFNfcnNhX2ZyZWUocnNhKTsKLSsJCQlyc2EgPSBGSVBTX3JzYV9uZXcoKTsKLSsJCQlp ZiAoIXJzYSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlibl9lID0gQk5fbmV3KCk7Ci0rCQkJaWYg KCFibl9lIHx8ICFCTl9zZXRfd29yZChibl9lLCAweDEwMDEpKQotKwkJCQlnb3RvIGVycm9yOwot KwkJCWlmICghUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KHJzYSwga2V5bGVuLCBibl9lLCBOVUxM KSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlCTl9mcmVlKGJuX2UpOwotKwkJCWZwdXRzKCJuID0g Iiwgb3V0KTsKLSsJCQlkb19ibl9wcmludChvdXQsIHJzYS0+bik7Ci0rCQkJZnB1dHMoIlxuZSA9 ICIsIG91dCk7Ci0rCQkJZG9fYm5fcHJpbnQob3V0LCByc2EtPmUpOwotKwkJCWZwdXRzKCJcbiIs IG91dCk7Ci0rCQkJY3VycmVudF9rZXlsZW4gPSBrZXlsZW47Ci0rCQkJfQotKwotKwkJaWYgKE1z ZyAmJiBkZ3N0KQotKwkJCXsKLSsJCQlpZiAoIXJzYV9wcmludHNpZyhvdXQsIHJzYSwgZGdzdCwg TXNnLCBNc2dsZW4sCi0rCQkJCQkJCQlTYWx0bGVuKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlP UEVOU1NMX2ZyZWUoTXNnKTsKLSsJCQlNc2cgPSBOVUxMOwotKwkJCX0KLSsKLSsJCX0KLSsKLSsJ cmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCi0rCWlmIChvbGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJl ZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOwot KwlpZiAocnNhKQotKwkJRklQU19yc2FfZnJlZShyc2EpOwotKwotKwlyZXR1cm4gcmV0OwotKwot KwlwYXJzZV9lcnJvcjoKLSsKLSsJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBw cm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOwotKwotKwlnb3RvIGVycm9yOwotKwotKwl9Ci0r Ci0rc3RhdGljIGludCByc2FfcHJpbnRzaWcoRklMRSAqb3V0LCBSU0EgKnJzYSwgY29uc3QgRVZQ X01EICpkZ3N0LAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBsb25nIE1zZ2xlbiwgaW50IFNhbHRs ZW4pCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgKnNpZ2J1ZiA9IE5VTEw7 Ci0rCWludCBpLCBzaWdsZW47Ci0rCS8qIEVWUF9QS0VZIHN0cnVjdHVyZSAqLwotKwlFVlBfUEtF WSBwazsKLSsJRVZQX01EX0NUWCBjdHg7Ci0rCXBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7Ci0rCXBr LnBrZXkucnNhID0gcnNhOwotKwotKwlzaWdsZW4gPSBSU0Ffc2l6ZShyc2EpOwotKwlzaWdidWYg PSBPUEVOU1NMX21hbGxvYyhzaWdsZW4pOwotKwlpZiAoIXNpZ2J1ZikKLSsJCWdvdG8gZXJyb3I7 Ci0rCi0rCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKLSsKLSsJaWYgKFNhbHRsZW4gPj0gMCkKLSsJ CXsKLSsJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwKLSsJCQlFVlBfTURfQ1RYX0ZMQUdf UEFEX1BTUyB8IChTYWx0bGVuIDw8IDE2KSk7Ci0rCQl9Ci0rCWVsc2UgaWYgKFNhbHRsZW4gPT0g LTIpCi0rCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhfRkxBR19QQURf WDkzMSk7Ci0rCWlmICghRVZQX1NpZ25Jbml0X2V4KCZjdHgsIGRnc3QsIE5VTEwpKQotKwkJZ290 byBlcnJvcjsKLSsJaWYgKCFFVlBfU2lnblVwZGF0ZSgmY3R4LCBNc2csIE1zZ2xlbikpCi0rCQln b3RvIGVycm9yOwotKwlpZiAoIUVWUF9TaWduRmluYWwoJmN0eCwgc2lnYnVmLCAodW5zaWduZWQg aW50ICopJnNpZ2xlbiwgJnBrKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCUVWUF9NRF9DVFhfY2xl YW51cCgmY3R4KTsKLSsKLSsJZnB1dHMoIlMgPSAiLCBvdXQpOwotKwotKwlmb3IgKGkgPSAwOyBp IDwgc2lnbGVuOyBpKyspCi0rCQlmcHJpbnRmKG91dCwgIiUwMlgiLCBzaWdidWZbaV0pOwotKwot KwlmcHV0cygiXG4iLCBvdXQpOwotKwotKwlyZXQgPSAxOwotKwotKwllcnJvcjoKLSsKLSsJcmV0 dXJuIHJldDsKLSsJfQotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAt YmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMKLS0tLSAvZGV2L251bGwJMjAw OS0wOS0yMyAxMDo1NjowMi4xNDgwMDE3NTIgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEz L2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAw MDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDM3NyBAQAotKy8qIGZpcHNfcnNhdnRlc3QuYyAqLwot Ky8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZv ciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot KyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6 Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5T U0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg bWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBw ZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Np b24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBv ZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBh Y2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBB TlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMg Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAq IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGlj IHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSku ICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRz b24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5o PgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wveDUwOXYzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9yc2EuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIp OwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgImZpcHNfdXRs LmgiCi0rCi0raW50IHJzYV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBzYWx0bGVuKTsK LStzdGF0aWMgaW50IHJzYV9wcmludHZlcihGSUxFICpvdXQsCi0rCQlCSUdOVU0gKm4sIEJJR05V TSAqZSwKLSsJCWNvbnN0IEVWUF9NRCAqZGdzdCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9u ZyBNc2dsZW4sCi0rCQl1bnNpZ25lZCBjaGFyICpTLCBsb25nIFNsZW4sIGludCBTYWx0bGVuKTsK LSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rCXsKLSsJRklMRSAqaW4gPSBO VUxMLCAqb3V0ID0gTlVMTDsKLSsKLSsJaW50IHJldCA9IDE7Ci0rCWludCBTYWx0bGVuID0gLTE7 Ci0rCi0rCWlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7 Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKChhcmdjID4gMikgJiYgIXN0cmNtcCgiLXNh bHRsZW4iLCBhcmd2WzFdKSkKLSsJCXsKLSsJCVNhbHRsZW4gPSBhdG9pKGFyZ3ZbMl0pOwotKwkJ aWYgKFNhbHRsZW4gPCAwKQotKwkJCXsKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBJbnZh bGlkIHNhbHQgbGVuZ3RoXG4iKTsKLSsJCQlnb3RvIGVuZDsKLSsJCQl9Ci0rCQlhcmdjIC09IDI7 Ci0rCQlhcmd2ICs9IDI7Ci0rCQl9Ci0rCWVsc2UgaWYgKChhcmdjID4gMSkgJiYgIXN0cmNtcCgi LXg5MzEiLCBhcmd2WzFdKSkKLSsJCXsKLSsJCVNhbHRsZW4gPSAtMjsKLSsJCWFyZ2MtLTsKLSsJ CWFyZ3YrKzsKLSsJCX0KLSsKLSsJaWYgKGFyZ2MgPT0gMSkKLSsJCWluID0gc3RkaW47Ci0rCWVs c2UKLSsJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKLSsKLSsJaWYgKGFyZ2MgPCAyKQotKwkJ b3V0ID0gc3Rkb3V0OwotKwllbHNlCi0rCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOwotKwot KwlpZiAoIWluKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFs aXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFvdXQpCi0r CQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJv clxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFyc2FfdGVzdChvdXQsIGluLCBT YWx0bGVuKSkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBVlRFU1QgZmlsZSBw cm9jZXNzaW5nIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwllbHNlCi0rCQlyZXQg PSAwOwotKwotKwllbmQ6Ci0rCi0rCWlmIChyZXQpCi0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsK LSsJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCi0rCQlmY2xvc2UoaW4pOwotKwlpZiAob3V0ICYm IChvdXQgIT0gc3Rkb3V0KSkKLSsJCWZjbG9zZShvdXQpOwotKwotKwlyZXR1cm4gcmV0OwotKwot Kwl9Ci0rCi0rI2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCi0rCi0raW50IHJzYV90 ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBTYWx0bGVuKQotKwl7Ci0rCWNoYXIgKmxpbmVi dWYsICpvbGluZWJ1ZiwgKnAsICpxOwotKwljaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rCWNvbnN0 IEVWUF9NRCAqZGdzdCA9IE5VTEw7Ci0rCUJJR05VTSAqbiA9IE5VTEwsICplID0gTlVMTDsKLSsJ dW5zaWduZWQgY2hhciAqTXNnID0gTlVMTCwgKlMgPSBOVUxMOwotKwlsb25nIE1zZ2xlbiwgU2xl bjsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBsbnVtID0gMDsKLSsKLSsJb2xpbmVidWYgPSBPUEVO U1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKLSsJbGluZWJ1ZiA9IE9QRU5TU0xfbWFs bG9jKFJTQV9URVNUX01BWExJTkVMRU4pOwotKwotKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVm KQotKwkJZ290byBlcnJvcjsKLSsKLSsJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9N QVhMSU5FTEVOLCBpbikpCi0rCQl7Ci0rCQlsbnVtKys7Ci0rCQlzdHJjcHkobGluZWJ1Ziwgb2xp bmVidWYpOwotKwkJa2V5d29yZCA9IGxpbmVidWY7Ci0rCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2Ug Ki8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKLSsJCQlrZXl3 b3JkKys7Ci0rCi0rCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KLSsJCXAgPSBzdHJjaHIobGluZWJ1 ZiwgJz0nKTsKLSsKLSsJCS8qIElmIG5vID0gb3Igc3RhcnRzIHdpdGggWyAoZm9yIFtmb28gPSBi YXJdIGxpbmUpIGp1c3QgY29weSAqLwotKwkJaWYgKCFwIHx8ICprZXl3b3JkPT0nWycpCi0rCQkJ ewotKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCi0rCQkJCWdvdG8gZXJyb3I7Ci0r CQkJY29udGludWU7Ci0rCQkJfQotKwotKwkJcSA9IHAgLSAxOwotKwotKwkJLyogUmVtb3ZlIHRy YWlsaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCi0r CQkJKnEtLSA9IDA7Ci0rCi0rCQkqcCA9IDA7Ci0rCQl2YWx1ZSA9IHAgKyAxOwotKwotKwkJLyog UmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVu c2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCQl2YWx1ZSsrOwotKwotKwkJLyogUmVtb3ZlIHRyYWls aW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAx OwotKwotKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkp Ci0rCQkJKnAtLSA9IDA7Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAibiIpKQotKwkJCXsK LSsJCQlpZiAoIWRvX2hleDJibigmbix2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0r CQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiZSIpKQotKwkJCXsKLSsJCQlpZiAo IWRvX2hleDJibigmZSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiU0hBQWxnIikpCi0rCQkJewotKwkJCWlmICghc3Ry Y21wKHZhbHVlLCAiU0hBMSIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTEoKTsKLSsJCQllbHNlIGlm ICghc3RyY21wKHZhbHVlLCAiU0hBMjI0IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMjI0KCk7Ci0r CQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTI1NiIpKQotKwkJCQlkZ3N0ID0gRVZQX3No YTI1NigpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEzODQiKSkKLSsJCQkJZGdz dCA9IEVWUF9zaGEzODQoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBNTEyIikp Ci0rCQkJCWRnc3QgPSBFVlBfc2hhNTEyKCk7Ci0rCQkJZWxzZQotKwkJCQl7Ci0rCQkJCWZwcmlu dGYoc3RkZXJyLAotKwkJCQkJIkZBVEFMOiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gXCIlc1wiXG4i LAotKwkJCQkJCQkJdmFsdWUpOwotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCQl9Ci0rCQkJ fQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNnIikpCi0rCQkJewotKwkJCWlmIChN c2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQot KwkJCQkqKC0tdmFsdWUpID0gJzAnOwotKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1zZ2xl bik7Ci0rCQkJaWYgKCFNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUyIpKQotKwkJCXsKLSsJCQlpZiAoUykKLSsJCQkJZ290 byBwYXJzZV9lcnJvcjsKLSsJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCi0rCQkJCSooLS12YWx1 ZSkgPSAnMCc7Ci0rCQkJUyA9IGhleDJiaW5fbSh2YWx1ZSwgJlNsZW4pOwotKwkJCWlmICghUykK LSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsICJSZXN1bHQiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UKLSsJCQlnb3RvIHBhcnNlX2Vy cm9yOwotKwotKwkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCi0rCQlpZiAobiAmJiBlICYmIE1z ZyAmJiBTICYmIGRnc3QpCi0rCQkJewotKwkJCWlmICghcnNhX3ByaW50dmVyKG91dCwgbiwgZSwg ZGdzdCwKLSsJCQkJCU1zZywgTXNnbGVuLCBTLCBTbGVuLCBTYWx0bGVuKSkKLSsJCQkJZ290byBl cnJvcjsKLSsJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJCQlNc2cgPSBOVUxMOwotKwkJCU9QRU5T U0xfZnJlZShTKTsKLSsJCQlTID0gTlVMTDsKLSsJCQl9Ci0rCi0rCQl9Ci0rCi0rCi0rCXJldCA9 IDE7Ci0rCi0rCi0rCWVycm9yOgotKwotKwlpZiAob2xpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUo b2xpbmVidWYpOwotKwlpZiAobGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKLSsJ aWYgKG4pCi0rCQlCTl9mcmVlKG4pOwotKwlpZiAoZSkKLSsJCUJOX2ZyZWUoZSk7Ci0rCi0rCXJl dHVybiByZXQ7Ci0rCi0rCXBhcnNlX2Vycm9yOgotKwotKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFM IHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7Ci0rCi0rCWdvdG8gZXJy b3I7Ci0rCi0rCX0KLSsKLStzdGF0aWMgaW50IHJzYV9wcmludHZlcihGSUxFICpvdXQsCi0rCQlC SUdOVU0gKm4sIEJJR05VTSAqZSwKLSsJCWNvbnN0IEVWUF9NRCAqZGdzdCwKLSsJCXVuc2lnbmVk IGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sCi0rCQl1bnNpZ25lZCBjaGFyICpTLCBsb25nIFNsZW4s IGludCBTYWx0bGVuKQotKwl7Ci0rCWludCByZXQgPSAwLCByOwotKwkvKiBTZXR1cCBSU0EgYW5k IEVWUF9QS0VZIHN0cnVjdHVyZXMgKi8KLSsJUlNBICpyc2FfcHVia2V5ID0gTlVMTDsKLSsJRVZQ X1BLRVkgcGs7Ci0rCUVWUF9NRF9DVFggY3R4OwotKwl1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxM OwotKwlyc2FfcHVia2V5ID0gRklQU19yc2FfbmV3KCk7Ci0rCWlmICghcnNhX3B1YmtleSkKLSsJ CWdvdG8gZXJyb3I7Ci0rCXJzYV9wdWJrZXktPm4gPSBCTl9kdXAobik7Ci0rCXJzYV9wdWJrZXkt PmUgPSBCTl9kdXAoZSk7Ci0rCWlmICghcnNhX3B1YmtleS0+biB8fCAhcnNhX3B1YmtleS0+ZSkK LSsJCWdvdG8gZXJyb3I7Ci0rCXBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7Ci0rCXBrLnBrZXkucnNh ID0gcnNhX3B1YmtleTsKLSsKLSsJRVZQX01EX0NUWF9pbml0KCZjdHgpOwotKwotKwlpZiAoU2Fs dGxlbiA+PSAwKQotKwkJewotKwkJTV9FVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LAotKwkJCUVW UF9NRF9DVFhfRkxBR19QQURfUFNTIHwgKFNhbHRsZW4gPDwgMTYpKTsKLSsJCX0KLSsJZWxzZSBp ZiAoU2FsdGxlbiA9PSAtMikKLSsJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01E X0NUWF9GTEFHX1BBRF9YOTMxKTsKLSsJaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmY3R4LCBkZ3N0 LCBOVUxMKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCWlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmY3R4LCBN c2csIE1zZ2xlbikpCi0rCQlnb3RvIGVycm9yOwotKwotKwlyID0gRVZQX1ZlcmlmeUZpbmFsKCZj dHgsIFMsIFNsZW4sICZwayk7Ci0rCi0rCi0rCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKLSsK LSsJaWYgKHIgPCAwKQotKwkJZ290byBlcnJvcjsKLSsJRVJSX2NsZWFyX2Vycm9yKCk7Ci0rCi0r CWlmIChyID09IDApCi0rCQlmcHV0cygiUmVzdWx0ID0gRlxuIiwgb3V0KTsKLSsJZWxzZQotKwkJ ZnB1dHMoIlJlc3VsdCA9IFBcbiIsIG91dCk7Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycm9yOgot KwlpZiAocnNhX3B1YmtleSkKLSsJCUZJUFNfcnNhX2ZyZWUocnNhX3B1YmtleSk7Ci0rCWlmIChi dWYpCi0rCQlPUEVOU1NMX2ZyZWUoYnVmKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKyNlbmRp ZgotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX3NoYXRlc3QuYwotLS0tIC9kZXYvbnVsbAkyMDA5LTA5LTIzIDEwOjU2OjAyLjE0ODAw MTc1MiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X3NoYXRlc3QuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCAr MSwzODggQEAKLSsvKiBmaXBzX3NoYXRlc3QuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhl biBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2pl Y3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNSBU aGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRo ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK LSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJp YWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBt dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVu U1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAi T3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBw cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAg ICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFz ZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5T U0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhv dXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVj dC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11 c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3 Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0r ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUg UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRo aXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJp YyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4K LSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgot KyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgotKwotKyNpZm5kZWYg T1BFTlNTTF9GSVBTCi0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0r ICAgIHByaW50ZigiTm8gRklQUyBTSEFYWFggc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsK LSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLStzdGF0aWMgaW50 IGRnc3RfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluKTsKLStzdGF0aWMgaW50IHByaW50X2Rnc3Qo Y29uc3QgRVZQX01EICptZCwgRklMRSAqb3V0LAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQg TXNnbGVuKTsKLStzdGF0aWMgaW50IHByaW50X21vbnRlKGNvbnN0IEVWUF9NRCAqbWQsIEZJTEUg Km91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKlNlZWQsIGludCBTZWVkTGVuKTsKLSsKLStpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rCXsKLSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0g TlVMTDsKLSsKLSsJaW50IHJldCA9IDE7Ci0rCi0rCWlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwkJ ewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKGFy Z2MgPT0gMSkKLSsJCWluID0gc3RkaW47Ci0rCWVsc2UKLSsJCWluID0gZm9wZW4oYXJndlsxXSwg InIiKTsKLSsKLSsJaWYgKGFyZ2MgPCAyKQotKwkJb3V0ID0gc3Rkb3V0OwotKwllbHNlCi0rCQlv dXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOwotKwotKwlpZiAoIWluKQotKwkJewotKwkJZnByaW50 ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3Rv IGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFvdXQpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZB VEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0K LSsKLSsJaWYgKCFkZ3N0X3Rlc3Qob3V0LCBpbikpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwg IkZBVEFMIGRpZ2VzdCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0r CQl9Ci0rCWVsc2UKLSsJCXJldCA9IDA7Ci0rCi0rCWVuZDoKLSsKLSsJaWYgKHJldCkKLSsJCWRv X3ByaW50X2Vycm9ycygpOwotKwotKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKLSsJCWZjbG9z ZShpbik7Ci0rCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQotKwkJZmNsb3NlKG91dCk7Ci0r Ci0rCXJldHVybiByZXQ7Ci0rCi0rCX0KLSsKLSsjZGVmaW5lIFNIQV9URVNUX01BWF9CSVRTCTEw MjQwMAotKyNkZWZpbmUgU0hBX1RFU1RfTUFYTElORUxFTgkoKChTSEFfVEVTVF9NQVhfQklUUyA+ PiAzKSAqIDIpICsgMTAwKQotKwotK2ludCBkZ3N0X3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbikK LSsJewotKwljb25zdCBFVlBfTUQgKm1kID0gTlVMTDsKLSsJY2hhciAqbGluZWJ1ZiwgKm9saW5l YnVmLCAqcCwgKnE7Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsJdW5zaWduZWQgY2hhciAq TXNnID0gTlVMTCwgKlNlZWQgPSBOVUxMOwotKwlsb25nIE1zZ0xlbiA9IC0xLCBMZW4gPSAtMSwg U2VlZExlbiA9IC0xOwotKwlpbnQgcmV0ID0gMDsKLSsJaW50IGxudW0gPSAwOwotKwotKwlvbGlu ZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFNIQV9URVNUX01BWExJTkVMRU4pOwotKwlsaW5lYnVmID0g T1BFTlNTTF9tYWxsb2MoU0hBX1RFU1RfTUFYTElORUxFTik7Ci0rCi0rCWlmICghbGluZWJ1ZiB8 fCAhb2xpbmVidWYpCi0rCQlnb3RvIGVycm9yOwotKwotKwotKwl3aGlsZSAoZmdldHMob2xpbmVi dWYsIFNIQV9URVNUX01BWExJTkVMRU4sIGluKSkKLSsJCXsKLSsJCWxudW0rKzsKLSsJCXN0cmNw eShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCQlrZXl3b3JkID0gbGluZWJ1ZjsKLSsJCS8qIFNraXAg bGVhZGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdv cmQpKQotKwkJCWtleXdvcmQrKzsKLSsKLSsJCS8qIExvb2sgZm9yID0gc2lnbiAqLwotKwkJcCA9 IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkJLyogSWYgbm8gPSBvciBzdGFydHMgd2l0aCBb IChmb3IgW0w9MjBdIGxpbmUpIGp1c3QgY29weSAqLwotKwkJaWYgKCFwKQotKwkJCXsKLSsJCQlm cHV0cyhvbGluZWJ1Ziwgb3V0KTsKLSsJCQljb250aW51ZTsKLSsJCQl9Ci0rCi0rCQlxID0gcCAt IDE7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNl KCh1bnNpZ25lZCBjaGFyKSpxKSkKLSsJCQkqcS0tID0gMDsKLSsKLSsJCSpwID0gMDsKLSsJCXZh bHVlID0gcCArIDE7Ci0rCi0rCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICov Ci0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQotKwkJCXZhbHVlKys7 Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJcCA9IHZh bHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNl KCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCQkqcC0tID0gMDsKLSsKLSsJCWlmICghc3RyY21wKGtl eXdvcmQsIltMIikgJiYgKnA9PSddJykKLSsJCQl7Ci0rCQkJc3dpdGNoIChhdG9pKHZhbHVlKSkK LSsJCQkJewotKwkJCQljYXNlIDIwOiBtZD1FVlBfc2hhMSgpOyAgIGJyZWFrOwotKwkJCQljYXNl IDI4OiBtZD1FVlBfc2hhMjI0KCk7IGJyZWFrOwotKwkJCQljYXNlIDMyOiBtZD1FVlBfc2hhMjU2 KCk7IGJyZWFrOwotKwkJCQljYXNlIDQ4OiBtZD1FVlBfc2hhMzg0KCk7IGJyZWFrOwotKwkJCQlj YXNlIDY0OiBtZD1FVlBfc2hhNTEyKCk7IGJyZWFrOwotKwkJCQlkZWZhdWx0OiBnb3RvIHBhcnNl X2Vycm9yOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTGVu IikpCi0rCQkJewotKwkJCWlmIChMZW4gIT0gLTEpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0r CQkJTGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQkJaWYgKExlbiA8IDApCi0rCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7Ci0rCQkJLyogT25seSBoYW5kbGUgbXVsdGlwbGVzIG9mIDggYml0cyAqLwotKwkJCWlm IChMZW4gJiAweDcpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJaWYgKExlbiA+IFNIQV9U RVNUX01BWF9CSVRTKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCU1zZ0xlbiA9IExlbiA+ PiAzOwotKwkJCX0KLSsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQotKwkJ CXsKLSsJCQlsb25nIHRtcGxlbjsKLSsJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCi0rCQkJCSoo LS12YWx1ZSkgPSAnMCc7Ci0rCQkJaWYgKE1zZykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJ CQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZ0bXBsZW4pOwotKwkJCWlmICghTXNnKQotKwkJCQln b3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlNl ZWQiKSkKLSsJCQl7Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUp ID0gJzAnOwotKwkJCWlmIChTZWVkKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCVNlZWQg PSBoZXgyYmluX20odmFsdWUsICZTZWVkTGVuKTsKLSsJCQlpZiAoIVNlZWQpCi0rCQkJCWdvdG8g cGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTUQiKSkK LSsJCQljb250aW51ZTsKLSsJCWVsc2UKLSsJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwotKwkJZnB1 dHMob2xpbmVidWYsIG91dCk7Ci0rCi0rCQlpZiAobWQgJiYgTXNnICYmIChNc2dMZW4gPj0gMCkp Ci0rCQkJewotKwkJCWlmICghcHJpbnRfZGdzdChtZCwgb3V0LCBNc2csIE1zZ0xlbikpCi0rCQkJ CWdvdG8gZXJyb3I7Ci0rCQkJT1BFTlNTTF9mcmVlKE1zZyk7Ci0rCQkJTXNnID0gTlVMTDsKLSsJ CQlNc2dMZW4gPSAtMTsKLSsJCQlMZW4gPSAtMTsKLSsJCQl9Ci0rCQllbHNlIGlmIChtZCAmJiBT ZWVkICYmIChTZWVkTGVuID4gMCkpCi0rCQkJewotKwkJCWlmICghcHJpbnRfbW9udGUobWQsIG91 dCwgU2VlZCwgU2VlZExlbikpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJT1BFTlNTTF9mcmVlKFNl ZWQpOwotKwkJCVNlZWQgPSBOVUxMOwotKwkJCVNlZWRMZW4gPSAtMTsKLSsJCQl9Ci0rCQotKwot KwkJfQotKwotKwotKwlyZXQgPSAxOwotKwotKwotKwllcnJvcjoKLSsKLSsJaWYgKG9saW5lYnVm KQotKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKLSsJaWYgKGxpbmVidWYpCi0rCQlPUEVOU1NM X2ZyZWUobGluZWJ1Zik7Ci0rCWlmIChNc2cpCi0rCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJaWYg KFNlZWQpCi0rCQlPUEVOU1NMX2ZyZWUoU2VlZCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCXBh cnNlX2Vycm9yOgotKwotKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nl c3NpbmcgbGluZSAlZFxuIiwgbG51bSk7Ci0rCi0rCWdvdG8gZXJyb3I7Ci0rCi0rCX0KLSsKLStz dGF0aWMgaW50IHByaW50X2Rnc3QoY29uc3QgRVZQX01EICplbWQsIEZJTEUgKm91dCwKLSsJCXVu c2lnbmVkIGNoYXIgKk1zZywgaW50IE1zZ2xlbikKLSsJewotKwlpbnQgaSwgbWRsZW47Ci0rCXVu c2lnbmVkIGNoYXIgbWRbRVZQX01BWF9NRF9TSVpFXTsKLSsJaWYgKCFFVlBfRGlnZXN0KE1zZywg TXNnbGVuLCBtZCwgKHVuc2lnbmVkIGludCAqKSZtZGxlbiwgZW1kLCBOVUxMKSkKLSsJCXsKLSsJ CWZwdXRzKCJFcnJvciBjYWxjdWxhdGluZyBIQVNIXG4iLCBzdGRlcnIpOwotKwkJcmV0dXJuIDA7 Ci0rCQl9Ci0rCWZwdXRzKCJNRCA9ICIsIG91dCk7Ci0rCWZvciAoaSA9IDA7IGkgPCBtZGxlbjsg aSsrKQotKwkJZnByaW50ZihvdXQsICIlMDJ4IiwgbWRbaV0pOwotKwlmcHV0cygiXG4iLCBvdXQp OwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgcHJpbnRfbW9udGUoY29uc3QgRVZQ X01EICptZCwgRklMRSAqb3V0LAotKwkJdW5zaWduZWQgY2hhciAqU2VlZCwgaW50IFNlZWRMZW4p Ci0rCXsKLSsJdW5zaWduZWQgaW50IGksIGosIGs7Ci0rCWludCByZXQgPSAwOwotKwlFVlBfTURf Q1RYIGN0eDsKLSsJdW5zaWduZWQgY2hhciAqbTEsICptMiwgKm0zLCAqcDsKLSsJdW5zaWduZWQg aW50IG1sZW4sIG0xbGVuLCBtMmxlbiwgbTNsZW47Ci0rCi0rCUVWUF9NRF9DVFhfaW5pdCgmY3R4 KTsKLSsKLSsJaWYgKFNlZWRMZW4gPiBFVlBfTUFYX01EX1NJWkUpCi0rCQltbGVuID0gU2VlZExl bjsKLSsJZWxzZQotKwkJbWxlbiA9IEVWUF9NQVhfTURfU0laRTsKLSsKLSsJbTEgPSBPUEVOU1NM X21hbGxvYyhtbGVuKTsKLSsJbTIgPSBPUEVOU1NMX21hbGxvYyhtbGVuKTsKLSsJbTMgPSBPUEVO U1NMX21hbGxvYyhtbGVuKTsKLSsKLSsJaWYgKCFtMSB8fCAhbTIgfHwgIW0zKQotKwkJZ290byBt Y19lcnJvcjsKLSsKLSsJbTFsZW4gPSBtMmxlbiA9IG0zbGVuID0gU2VlZExlbjsKLSsJbWVtY3B5 KG0xLCBTZWVkLCBTZWVkTGVuKTsKLSsJbWVtY3B5KG0yLCBTZWVkLCBTZWVkTGVuKTsKLSsJbWVt Y3B5KG0zLCBTZWVkLCBTZWVkTGVuKTsKLSsKLSsJZnB1dHMoIlxuIiwgb3V0KTsKLSsKLSsJZm9y IChqID0gMDsgaiA8IDEwMDsgaisrKQotKwkJewotKwkJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkr KykKLSsJCQl7Ci0rCQkJRVZQX0RpZ2VzdEluaXRfZXgoJmN0eCwgbWQsIE5VTEwpOwotKwkJCUVW UF9EaWdlc3RVcGRhdGUoJmN0eCwgbTEsIG0xbGVuKTsKLSsJCQlFVlBfRGlnZXN0VXBkYXRlKCZj dHgsIG0yLCBtMmxlbik7Ci0rCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMywgbTNsZW4pOwot KwkJCXAgPSBtMTsKLSsJCQltMSA9IG0yOwotKwkJCW0xbGVuID0gbTJsZW47Ci0rCQkJbTIgPSBt MzsKLSsJCQltMmxlbiA9IG0zbGVuOwotKwkJCW0zID0gcDsKLSsJCQlFVlBfRGlnZXN0RmluYWxf ZXgoJmN0eCwgbTMsICZtM2xlbik7Ci0rCQkJfQotKwkJZnByaW50ZihvdXQsICJDT1VOVCA9ICVk XG4iLCBqKTsKLSsJCWZwdXRzKCJNRCA9ICIsIG91dCk7Ci0rCQlmb3IgKGsgPSAwOyBrIDwgbTNs ZW47IGsrKykKLSsJCQlmcHJpbnRmKG91dCwgIiUwMngiLCBtM1trXSk7Ci0rCQlmcHV0cygiXG5c biIsIG91dCk7Ci0rCQltZW1jcHkobTEsIG0zLCBtM2xlbik7Ci0rCQltZW1jcHkobTIsIG0zLCBt M2xlbik7Ci0rCQltMWxlbiA9IG0ybGVuID0gbTNsZW47Ci0rCQl9Ci0rCi0rCXJldCA9IDE7Ci0r Ci0rCW1jX2Vycm9yOgotKwlpZiAobTEpCi0rCQlPUEVOU1NMX2ZyZWUobTEpOwotKwlpZiAobTIp Ci0rCQlPUEVOU1NMX2ZyZWUobTIpOwotKwlpZiAobTMpCi0rCQlPUEVOU1NMX2ZyZWUobTMpOwot KwotKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsK LSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9m aXBzL2NhdnMvZmlwc191dGwuaAotLS0tIC9kZXYvbnVsbAkyMDA5LTA5LTIzIDEwOjU2OjAyLjE0 ODAwMTc1MiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9m aXBzX3V0bC5oCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsx LDM0MyBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA3IFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0r ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAg IGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK LSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgot KyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQot KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotK3ZvaWQgZG9fcHJpbnRfZXJy b3JzKHZvaWQpCi0rCXsKLSsJY29uc3QgY2hhciAqZmlsZSwgKmRhdGE7Ci0rCWludCBsaW5lLCBm bGFnczsKLSsJdW5zaWduZWQgbG9uZyBsOwotKwl3aGlsZSAoKGwgPSBFUlJfZ2V0X2Vycm9yX2xp bmVfZGF0YSgmZmlsZSwgJmxpbmUsICZkYXRhLCAmZmxhZ3MpKSkKLSsJCXsKLSsJCWZwcmludGYo c3RkZXJyLCAiRVJST1I6JWx4OmxpYj0lZCxmdW5jPSVkLHJlYXNvbj0lZCIKLSsJCQkJIjpmaWxl PSVzOmxpbmU9JWQ6JXNcbiIsCi0rCQkJbCwgRVJSX0dFVF9MSUIobCksIEVSUl9HRVRfRlVOQyhs KSwgRVJSX0dFVF9SRUFTT04obCksCi0rCQkJZmlsZSwgbGluZSwgZmxhZ3MgJiBFUlJfVFhUX1NU UklORyA/IGRhdGEgOiAiIik7Ci0rCQl9Ci0rCX0KLSsKLStpbnQgaGV4MmJpbihjb25zdCBjaGFy ICppbiwgdW5zaWduZWQgY2hhciAqb3V0KQotKyAgICB7Ci0rICAgIGludCBuMSwgbjI7Ci0rICAg IHVuc2lnbmVkIGNoYXIgY2g7Ci0rCi0rICAgIGZvciAobjE9MCxuMj0wIDsgaW5bbjFdICYmIGlu W24xXSAhPSAnXG4nIDsgKQotKwl7IC8qIGZpcnN0IGJ5dGUgKi8KLSsJaWYgKChpbltuMV0gPj0g JzAnKSAmJiAoaW5bbjFdIDw9ICc5JykpCi0rCSAgICBjaCA9IGluW24xKytdIC0gJzAnOwotKwll bHNlIGlmICgoaW5bbjFdID49ICdBJykgJiYgKGluW24xXSA8PSAnRicpKQotKwkgICAgY2ggPSBp bltuMSsrXSAtICdBJyArIDEwOwotKwllbHNlIGlmICgoaW5bbjFdID49ICdhJykgJiYgKGluW24x XSA8PSAnZicpKQotKwkgICAgY2ggPSBpbltuMSsrXSAtICdhJyArIDEwOwotKwllbHNlCi0rCSAg ICByZXR1cm4gLTE7Ci0rCWlmKCFpbltuMV0pCi0rCSAgICB7Ci0rCSAgICBvdXRbbjIrK109Y2g7 Ci0rCSAgICBicmVhazsKLSsJICAgIH0KLSsJb3V0W24yXSA9IGNoIDw8IDQ7Ci0rCS8qIHNlY29u ZCBieXRlICovCi0rCWlmICgoaW5bbjFdID49ICcwJykgJiYgKGluW24xXSA8PSAnOScpKQotKwkg ICAgY2ggPSBpbltuMSsrXSAtICcwJzsKLSsJZWxzZSBpZiAoKGluW24xXSA+PSAnQScpICYmIChp bltuMV0gPD0gJ0YnKSkKLSsJICAgIGNoID0gaW5bbjErK10gLSAnQScgKyAxMDsKLSsJZWxzZSBp ZiAoKGluW24xXSA+PSAnYScpICYmIChpbltuMV0gPD0gJ2YnKSkKLSsJICAgIGNoID0gaW5bbjEr K10gLSAnYScgKyAxMDsKLSsJZWxzZQotKwkgICAgcmV0dXJuIC0xOwotKwlvdXRbbjIrK10gfD0g Y2g7Ci0rCX0KLSsgICAgcmV0dXJuIG4yOwotKyAgICB9Ci0rCi0rdW5zaWduZWQgY2hhciAqaGV4 MmJpbl9tKGNvbnN0IGNoYXIgKmluLCBsb25nICpwbGVuKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIg KnA7Ci0rCXAgPSBPUEVOU1NMX21hbGxvYygoc3RybGVuKGluKSArIDEpLzIpOwotKwkqcGxlbiA9 IGhleDJiaW4oaW4sIHApOwotKwlyZXR1cm4gcDsKLSsJfQotKwotK2ludCBkb19oZXgyYm4oQklH TlVNICoqcHIsIGNvbnN0IGNoYXIgKmluKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgKnA7Ci0rCWxv bmcgcGxlbjsKLSsJaW50IHIgPSAwOwotKwlwID0gaGV4MmJpbl9tKGluLCAmcGxlbik7Ci0rCWlm ICghcCkKLSsJCXJldHVybiAwOwotKwlpZiAoISpwcikKLSsJCSpwciA9IEJOX25ldygpOwotKwlp ZiAoISpwcikKLSsJCXJldHVybiAwOwotKwlpZiAoQk5fYmluMmJuKHAsIHBsZW4sICpwcikpCi0r CQlyID0gMTsKLSsJT1BFTlNTTF9mcmVlKHApOwotKwlyZXR1cm4gcjsKLSsJfQotKwotK2ludCBk b19ibl9wcmludChGSUxFICpvdXQsIEJJR05VTSAqYm4pCi0rCXsKLSsJaW50IGxlbiwgaTsKLSsJ dW5zaWduZWQgY2hhciAqdG1wOwotKwlsZW4gPSBCTl9udW1fYnl0ZXMoYm4pOwotKwlpZiAobGVu ID09IDApCi0rCQl7Ci0rCQlmcHV0cygiMDAiLCBvdXQpOwotKwkJcmV0dXJuIDE7Ci0rCQl9Ci0r Ci0rCXRtcCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7Ci0rCWlmICghdG1wKQotKwkJewotKwkJZnBy aW50ZihzdGRlcnIsICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0rCQlyZXR1cm4gMDsK LSsJCX0KLSsJQk5fYm4yYmluKGJuLCB0bXApOwotKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKysp Ci0rCQlmcHJpbnRmKG91dCwgIiUwMngiLCB0bXBbaV0pOwotKwlPUEVOU1NMX2ZyZWUodG1wKTsK LSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgZG9fYm5fcHJpbnRfbmFtZShGSUxFICpvdXQsIGNv bnN0IGNoYXIgKm5hbWUsIEJJR05VTSAqYm4pCi0rCXsKLSsJaW50IHI7Ci0rCWZwcmludGYob3V0 LCAiJXMgPSAiLCBuYW1lKTsKLSsJciA9IGRvX2JuX3ByaW50KG91dCwgYm4pOwotKwlpZiAoIXIp Ci0rCQlyZXR1cm4gMDsKLSsJZnB1dHMoIlxuIiwgb3V0KTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsK LStpbnQgcGFyc2VfbGluZShjaGFyICoqcGt3LCBjaGFyICoqcHZhbCwgY2hhciAqbGluZWJ1Ziwg Y2hhciAqb2xpbmVidWYpCi0rCXsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlLCAqcCwgKnE7Ci0r CXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCWtleXdvcmQgPSBsaW5lYnVmOwotKwkvKiBT a2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtl eXdvcmQpKQotKwkJa2V5d29yZCsrOwotKwotKwkvKiBMb29rIGZvciA9IHNpZ24gKi8KLSsJcCA9 IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkvKiBJZiBubyAnPScgZXhpdCAqLwotKwlpZiAo IXApCi0rCQlyZXR1cm4gMDsKLSsKLSsJcSA9IHAgLSAxOwotKwotKwkvKiBSZW1vdmUgdHJhaWxp bmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJKnEt LSA9IDA7Ci0rCi0rCSpwID0gMDsKLSsJdmFsdWUgPSBwICsgMTsKLSsKLSsJLyogUmVtb3ZlIGxl YWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hh cikqdmFsdWUpKQotKwkJdmFsdWUrKzsKLSsKLSsJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZy b20gdmFsdWUgKi8KLSsJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCi0rCXdoaWxl ICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJKnAtLSA9IDA7 Ci0rCi0rCSpwa3cgPSBrZXl3b3JkOwotKwkqcHZhbCA9IHZhbHVlOwotKwlyZXR1cm4gMTsKLSsJ fQotKwotK0JJR05VTSAqaGV4MmJuKGNvbnN0IGNoYXIgKmluKQotKyAgICB7Ci0rICAgIEJJR05V TSAqcD1OVUxMOwotKwotKyAgICBpZiAoIWRvX2hleDJibigmcCwgaW4pKQotKwlyZXR1cm4gTlVM TDsKLSsKLSsgICAgcmV0dXJuIHA7Ci0rICAgIH0KLSsKLStpbnQgYmluMmhleChjb25zdCB1bnNp Z25lZCBjaGFyICppbixpbnQgbGVuLGNoYXIgKm91dCkKLSsgICAgewotKyAgICBpbnQgbjEsIG4y OwotKyAgICB1bnNpZ25lZCBjaGFyIGNoOwotKwotKyAgICBmb3IgKG4xPTAsbjI9MCA7IG4xIDwg bGVuIDsgKytuMSkKLSsJewotKwljaD1pbltuMV0gPj4gNDsKLSsJaWYgKGNoIDw9IDB4MDkpCi0r CSAgICBvdXRbbjIrK109Y2grJzAnOwotKwllbHNlCi0rCSAgICBvdXRbbjIrK109Y2gtMTArJ2En OwotKwljaD1pbltuMV0gJiAweDBmOwotKwlpZihjaCA8PSAweDA5KQotKwkgICAgb3V0W24yKytd PWNoKycwJzsKLSsJZWxzZQotKwkgICAgb3V0W24yKytdPWNoLTEwKydhJzsKLSsJfQotKyAgICBv dXRbbjJdPSdcMCc7Ci0rICAgIHJldHVybiBuMjsKLSsgICAgfQotKwotK3ZvaWQgcHYoY29uc3Qg Y2hhciAqdGFnLGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZhbCxpbnQgbGVuKQotKyAgICB7Ci0rICAg IGNoYXIgb2J1ZlsyMDQ4XTsKLSsKLSsgICAgYmluMmhleCh2YWwsbGVuLG9idWYpOwotKyAgICBw cmludGYoIiVzID0gJXNcbiIsdGFnLG9idWYpOwotKyAgICB9Ci0rCi0rLyogVG8gYXZvaWQgZXh0 ZW5zaXZlIGNoYW5nZXMgdG8gdGVzdCBwcm9ncmFtIGF0IHRoaXMgc3RhZ2UganVzdCBjb252ZXJ0 Ci0rICogdGhlIGlucHV0IGxpbmUgaW50byBhbiBhY2NlcHRhYmxlIGZvcm0uIEtleXdvcmQgbGlu ZXMgY29udmVydGVkIHRvIGZvcm0KLSsgKiAia2V5d29yZCA9IHZhbHVlXG4iIG5vIG1hdHRlciB3 aGF0IHdoaXRlIHNwYWNlIHByZXNlbnQsIGFsbCBvdGhlciBsaW5lcwotKyAqIGp1c3QgaGF2ZSBs ZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZSByZW1vdmVkLgotKyAqLwotKwotK2ludCB0aWR5X2xp bmUoY2hhciAqbGluZWJ1ZiwgY2hhciAqb2xpbmVidWYpCi0rCXsKLSsJY2hhciAqa2V5d29yZCwg KnZhbHVlLCAqcCwgKnE7Ci0rCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCWtleXdvcmQg PSBsaW5lYnVmOwotKwkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3BhY2Uo KHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQotKwkJa2V5d29yZCsrOwotKwkvKiBMb29rIGZvciA9 IHNpZ24gKi8KLSsJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkvKiBJZiBubyAnPScg anVzdCBjaG9wIGxlYWRpbmcsIHRyYWlsaW5nIHdzICovCi0rCWlmICghcCkKLSsJCXsKLSsJCXAg PSBrZXl3b3JkICsgc3RybGVuKGtleXdvcmQpIC0gMTsKLSsJCXdoaWxlICgqcCA9PSAnXG4nIHx8 IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAwOwotKwkJc3RyY3B5KG9s aW5lYnVmLCBrZXl3b3JkKTsKLSsJCXN0cmNhdChvbGluZWJ1ZiwgIlxuIik7Ci0rCQlyZXR1cm4g MTsKLSsJCX0KLSsKLSsJcSA9IHAgLSAxOwotKwotKwkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2Ug Ki8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJKnEtLSA9IDA7Ci0r Ci0rCSpwID0gMDsKLSsJdmFsdWUgPSBwICsgMTsKLSsKLSsJLyogUmVtb3ZlIGxlYWRpbmcgc3Bh Y2UgZnJvbSB2YWx1ZSAqLwotKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUp KQotKwkJdmFsdWUrKzsKLSsKLSsJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUg Ki8KLSsJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCi0rCXdoaWxlICgqcCA9PSAn XG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJKnAtLSA9IDA7Ci0rCi0rCXN0 cmNweShvbGluZWJ1Ziwga2V5d29yZCk7Ci0rCXN0cmNhdChvbGluZWJ1ZiwgIiA9ICIpOwotKwlz dHJjYXQob2xpbmVidWYsIHZhbHVlKTsKLSsJc3RyY2F0KG9saW5lYnVmLCAiXG4iKTsKLSsKLSsJ cmV0dXJuIDE7Ci0rCX0KLSsKLSsvKiBOQjogdGhpcyByZXR1cm4gdGhlIG51bWJlciBvZiBfYml0 c18gcmVhZCAqLwotK2ludCBiaW50MmJpbihjb25zdCBjaGFyICppbiwgaW50IGxlbiwgdW5zaWdu ZWQgY2hhciAqb3V0KQotKyAgICB7Ci0rICAgIGludCBuOwotKwotKyAgICBtZW1zZXQob3V0LDAs bGVuKTsKLSsgICAgZm9yKG49MCA7IG4gPCBsZW4gOyArK24pCi0rCWlmKGluW25dID09ICcxJykK LSsJICAgIG91dFtuLzhdfD0oMHg4MCA+PiAobiU4KSk7Ci0rICAgIHJldHVybiBsZW47Ci0rICAg IH0KLSsKLStpbnQgYmluMmJpbnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4saW50IGxlbixjaGFy ICpvdXQpCi0rICAgIHsKLSsgICAgaW50IG47Ci0rCi0rICAgIGZvcihuPTAgOyBuIDwgbGVuIDsg KytuKQotKwlvdXRbbl09KGluW24vOF0mKDB4ODAgPj4gKG4lOCkpKSA/ICcxJyA6ICcwJzsKLSsg ICAgcmV0dXJuIG47Ci0rICAgIH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLSt2b2lkIFByaW50VmFsdWUoY2hhciAqdGFnLCB1bnNp Z25lZCBjaGFyICp2YWwsIGludCBsZW4pCi0rewotKyNpZiBWRVJCT1NFCi0rICBjaGFyIG9idWZb MjA0OF07Ci0rICBpbnQgb2xlbjsKLSsgIG9sZW4gPSBiaW4yaGV4KHZhbCwgbGVuLCBvYnVmKTsK LSsgIHByaW50ZigiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOwotKyNlbmRpZgotK30K LSsKLSt2b2lkIE91dHB1dFZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBpbnQg bGVuLCBGSUxFICpyZnAsaW50IGJpdG1vZGUpCi0rICAgIHsKLSsgICAgY2hhciBvYnVmWzIwNDhd OwotKyAgICBpbnQgb2xlbjsKLSsKLSsgICAgaWYoYml0bW9kZSkKLSsJb2xlbj1iaW4yYmludCh2 YWwsbGVuLG9idWYpOwotKyAgICBlbHNlCi0rCW9sZW49YmluMmhleCh2YWwsbGVuLG9idWYpOwot KwotKyAgICBmcHJpbnRmKHJmcCwgIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsKLSsj aWYgVkVSQk9TRQotKyAgICBwcmludGYoIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsK LSsjZW5kaWYKLSsgICAgfQotKwotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0 YTMvY3J5cHRvL2ZpcHNfZXJyLmMKLS0tLSAvZGV2L251bGwJMjAwOS0wOS0yMyAxMDo1NjowMi4x NDgwMDE3NTIgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzX2Vyci5j CTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDcgQEAKLSsj aW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsjIGluY2x1ZGUgImZpcHNfZXJyLmgiCi0rI2Vsc2UKLStzdGF0aWMgdm9pZCAqZHVtbXk9JmR1 bW15OwotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5 cHRvL2ZpcHNfZXJyLmgKLS0tLSAvZGV2L251bGwJMjAwOS0wOS0yMyAxMDo1NjowMi4xNDgwMDE3 NTIgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzX2Vyci5oCTIwMDkt MDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDEzNyBAQAotKy8qIGNy eXB0by9maXBzX2Vyci5oICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDE5 OTktMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgot KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgot KyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBz b2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDov L3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xr aXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv dXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Np b24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQE9wZW5TU0wub3JnLgotKyAq Ci0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBj YWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWly IG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9w ZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3 aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBS RVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JT IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU Ci0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK LSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdy aXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlw dHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKy8qIE5PVEU6IHRoaXMgZmlsZSB3YXMgYXV0byBn ZW5lcmF0ZWQgYnkgdGhlIG1rZXJyLnBsIHNjcmlwdDogYW55IGNoYW5nZXMKLSsgKiBtYWRlIHRv IGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IG5leHQgdXBkYXRlcyB0aGlz IGZpbGUsCi0rICogb25seSByZWFzb24gc3RyaW5ncyB3aWxsIGJlIHByZXNlcnZlZC4KLSsgKi8K LSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rCi0rLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KLSsjaWZu ZGVmIE9QRU5TU0xfTk9fRVJSCi0rCi0rI2RlZmluZSBFUlJfRlVOQyhmdW5jKSBFUlJfUEFDSyhF UlJfTElCX0ZJUFMsZnVuYywwKQotKyNkZWZpbmUgRVJSX1JFQVNPTihyZWFzb24pIEVSUl9QQUNL KEVSUl9MSUJfRklQUywwLHJlYXNvbikKLSsKLStzdGF0aWMgRVJSX1NUUklOR19EQVRBIEZJUFNf c3RyX2Z1bmN0c1tdPQotKwl7Ci0re0VSUl9GVU5DKEZJUFNfRl9ESF9CVUlMVElOX0dFTlBBUkFN UyksCSJESF9CVUlMVElOX0dFTlBBUkFNUyJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRFNBX0JVSUxU SU5fUEFSQU1HRU4pLAkiRFNBX0JVSUxUSU5fUEFSQU1HRU4ifSwKLSt7RVJSX0ZVTkMoRklQU19G X0RTQV9ET19TSUdOKSwJIkRTQV9kb19zaWduIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9EU0FfRE9f VkVSSUZZKSwJIkRTQV9kb192ZXJpZnkifSwKLSt7RVJSX0ZVTkMoRklQU19GX0VWUF9DSVBIRVJJ TklUX0VYKSwJIkVWUF9DaXBoZXJJbml0X2V4In0sCi0re0VSUl9GVU5DKEZJUFNfRl9FVlBfRElH RVNUSU5JVF9FWCksCSJFVlBfRGlnZXN0SW5pdF9leCJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQ U19DSEVDS19EU0EpLAkiRklQU19DSEVDS19EU0EifSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJUFNf Q0hFQ0tfSU5DT1JFX0ZJTkdFUlBSSU5UKSwJIkZJUFNfQ0hFQ0tfSU5DT1JFX0ZJTkdFUlBSSU5U In0sCi0re0VSUl9GVU5DKEZJUFNfRl9GSVBTX0NIRUNLX1JTQSksCSJGSVBTX0NIRUNLX1JTQSJ9 LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19EU0FfQ0hFQ0spLAkiRklQU19EU0FfQ0hFQ0sifSwK LSt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfTU9ERV9TRVQpLAkiRklQU19tb2RlX3NldCJ9LAotK3tF UlJfRlVOQyhGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVSRV9URVNUKSwJImZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdCJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVMpLAkiRklQ U19zZWxmdGVzdF9hZXMifSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfREVTKSwJ IkZJUFNfc2VsZnRlc3RfZGVzIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0RT QSksCSJGSVBTX3NlbGZ0ZXN0X2RzYSJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVT VF9ITUFDKSwJIkZJUFNfc2VsZnRlc3RfaG1hYyJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19T RUxGVEVTVF9STkcpLAkiRklQU19zZWxmdGVzdF9ybmcifSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJ UFNfU0VMRlRFU1RfU0hBMSksCSJGSVBTX3NlbGZ0ZXN0X3NoYTEifSwKLSt7RVJSX0ZVTkMoRklQ U19GX0hBU0hfRklOQUwpLAkiSEFTSF9GSU5BTCJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfUlNBX0JV SUxUSU5fS0VZR0VOKSwJIlJTQV9CVUlMVElOX0tFWUdFTiJ9LAotK3tFUlJfRlVOQyhGSVBTX0Zf UlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQpLAkiUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQifSwKLSt7 RVJSX0ZVTkMoRklQU19GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBUKSwJIlJTQV9FQVlfUFJJVkFU RV9FTkNSWVBUIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBUKSwJ IlJTQV9FQVlfUFVCTElDX0RFQ1JZUFQifSwKLSt7RVJSX0ZVTkMoRklQU19GX1JTQV9FQVlfUFVC TElDX0VOQ1JZUFQpLAkiUlNBX0VBWV9QVUJMSUNfRU5DUllQVCJ9LAotK3tFUlJfRlVOQyhGSVBT X0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYKSwJIlJTQV9YOTMxX2dlbmVyYXRlX2tleV9leCJ9 LAotK3tFUlJfRlVOQyhGSVBTX0ZfU1NMRUFZX1JBTkRfQllURVMpLAkiU1NMRUFZX1JBTkRfQllU RVMifSwKLSt7MCxOVUxMfQotKwl9OwotKwotK3N0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRklQU19z dHJfcmVhc29uc1tdPQotKwl7Ci0re0VSUl9SRUFTT04oRklQU19SX0NBTk5PVF9SRUFEX0VYRSkg ICAgICAsImNhbm5vdCByZWFkIGV4ZSJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9DQU5OT1RfUkVB RF9FWEVfRElHRVNUKSwiY2Fubm90IHJlYWQgZXhlIGRpZ2VzdCJ9LAotK3tFUlJfUkVBU09OKEZJ UFNfUl9DT05UUkFESUNUSU5HX0VWSURFTkNFKSwiY29udHJhZGljdGluZyBldmlkZW5jZSJ9LAot K3tFUlJfUkVBU09OKEZJUFNfUl9FWEVfRElHRVNUX0RPRVNfTk9UX01BVENIKSwiZXhlIGRpZ2Vz dCBkb2VzIG5vdCBtYXRjaCJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9GSU5HRVJQUklOVF9ET0VT X05PVF9NQVRDSCksImZpbmdlcnByaW50IGRvZXMgbm90IG1hdGNoIn0sCi0re0VSUl9SRUFTT04o RklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX05PTlBJQ19SRUxPQ0FURUQpLCJmaW5n ZXJwcmludCBkb2VzIG5vdCBtYXRjaCBub25waWMgcmVsb2NhdGVkIn0sCi0re0VSUl9SRUFTT04o RklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX1NFR01FTlRfQUxJQVNJTkcpLCJmaW5n ZXJwcmludCBkb2VzIG5vdCBtYXRjaCBzZWdtZW50IGFsaWFzaW5nIn0sCi0re0VSUl9SRUFTT04o RklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NFVCksImZpcHMgbW9kZSBhbHJlYWR5IHNldCJ9LAot K3tFUlJfUkVBU09OKEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCkgLCJmaXBzIHNlbGZ0ZXN0 IGZhaWxlZCJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9JTlZBTElEX0tFWV9MRU5HVEgpICAgLCJp bnZhbGlkIGtleSBsZW5ndGgifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfS0VZX1RPT19TSE9SVCkg ICAgICAgICwia2V5IHRvbyBzaG9ydCJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9OT05fRklQU19N RVRIT0QpICAgICAgLCJub24gZmlwcyBtZXRob2QifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfUEFJ UldJU0VfVEVTVF9GQUlMRUQpICwicGFpcndpc2UgdGVzdCBmYWlsZWQifSwKLSt7RVJSX1JFQVNP TihGSVBTX1JfUlNBX0RFQ1JZUFRfRVJST1IpICAgICwicnNhIGRlY3J5cHQgZXJyb3IifSwKLSt7 RVJSX1JFQVNPTihGSVBTX1JfUlNBX0VOQ1JZUFRfRVJST1IpICAgICwicnNhIGVuY3J5cHQgZXJy b3IifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKSAgICAgICwic2VsZnRl c3QgZmFpbGVkIn0sCi0re0VSUl9SRUFTT04oRklQU19SX1RFU1RfRkFJTFVSRSkgICAgICAgICAs InRlc3QgZmFpbHVyZSJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9VTlNVUFBPUlRFRF9QTEFURk9S TSkgLCJ1bnN1cHBvcnRlZCBwbGF0Zm9ybSJ9LAotK3swLE5VTEx9Ci0rCX07Ci0rCi0rI2VuZGlm Ci0rCi0rdm9pZCBFUlJfbG9hZF9GSVBTX3N0cmluZ3Modm9pZCkKLSsJewotKyNpZm5kZWYgT1BF TlNTTF9OT19FUlIKLSsKLSsJaWYgKEVSUl9mdW5jX2Vycm9yX3N0cmluZyhGSVBTX3N0cl9mdW5j dHNbMF0uZXJyb3IpID09IE5VTEwpCi0rCQl7Ci0rCQlFUlJfbG9hZF9zdHJpbmdzKDAsRklQU19z dHJfZnVuY3RzKTsKLSsJCUVSUl9sb2FkX3N0cmluZ3MoMCxGSVBTX3N0cl9yZWFzb25zKTsKLSsJ CX0KLSsjZW5kaWYKLSsJfQotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYwotLS0tIC9kZXYvbnVsbAkyMDA5LTA5LTIz IDEwOjU2OjAyLjE0ODAwMTc1MiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRv L2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCAr MDIwMAotQEAgLTAsMCArMSwxMDEgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAo YykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgot KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgot KyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBz b2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xr aXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv dXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Np b24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAq Ci0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBj YWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWly IG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9w ZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3 aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBS RVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JT IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU Ci0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK LSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsj aW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKwotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLStzdGF0aWMgc3RydWN0Ci0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBr ZXlbMTZdOwotKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsxNl07Ci0rICAgIHVuc2lnbmVk IGNoYXIgY2lwaGVydGV4dFsxNl07Ci0rICAgIH0gdGVzdHNbXT0KLSsJewotKwl7Ci0rCXsgMHgw MCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3LAotKwkgIDB4MDgsMHgwOSwweDBB LDB4MEIsMHgwQywweDBELDB4MEUsMHgwRiB9LAotKwl7IDB4MDAsMHgxMSwweDIyLDB4MzMsMHg0 NCwweDU1LDB4NjYsMHg3NywKLSsJICAweDg4LDB4OTksMHhBQSwweEJCLDB4Q0MsMHhERCwweEVF LDB4RkYgfSwKLSsJeyAweDY5LDB4QzQsMHhFMCwweEQ4LDB4NkEsMHg3QiwweDA0LDB4MzAsCi0r CSAgMHhEOCwweENELDB4QjcsMHg4MCwweDcwLDB4QjQsMHhDNSwweDVBIH0sCi0rCX0sCi0rCX07 Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfYWVzKCkKLSsgICAgewotKyAgICB0ZXN0c1swXS5rZXlb MF0rKzsKLSsgICAgfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2FlcygpCi0rICAgIHsKLSsgICAg aW50IG47Ci0rICAgIGludCByZXQgPSAwOwotKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rICAg IEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rICAgIGZvcihuPTAgOyBuIDwgMSA7ICsr bikKLSsJewotKwlpZiAoZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSwK LSsJCQkJdGVzdHNbbl0ua2V5LCBOVUxMLAotKwkJCQl0ZXN0c1tuXS5wbGFpbnRleHQsCi0rCQkJ CXRlc3RzW25dLmNpcGhlcnRleHQsCi0rCQkJCTE2KSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCX0K LSsgICAgcmV0ID0gMTsKLSsgICAgZXJyOgotKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZj dHgpOwotKyAgICBpZiAocmV0ID09IDApCi0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZU RVNUX0FFUyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgcmV0dXJuIHJldDsKLSsgICAg fQotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRv L2ZpcHMvZmlwcy5jCi0tLS0gL2Rldi9udWxsCTIwMDktMDktMjMgMTA6NTY6MDIuMTQ4MDAxNzUy ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9maXBzLmMJMjAwOS0w OS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsNDE5IEBACi0rLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsg KiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgot KyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQu IFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBu b3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5z c2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkg Ik9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsg KiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRp c3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93 aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAq Ci0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBg QVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBP U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNU IE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAot KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgotKyAqCi0rICovCi0rCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUg PGxpbWl0cy5oPgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKwotKyNpZm5kZWYgUEFUSF9NQVgK LSsjZGVmaW5lIFBBVEhfTUFYIDEwMjQKLSsjZW5kaWYKLSsKLStzdGF0aWMgaW50IGZpcHNfc2Vs ZnRlc3RfZmFpbDsKLStzdGF0aWMgaW50IGZpcHNfbW9kZTsKLStzdGF0aWMgY29uc3Qgdm9pZCAq Zmlwc19yYW5kX2NoZWNrOwotKwotK3N0YXRpYyB2b2lkIGZpcHNfc2V0X21vZGUoaW50IG9ub2Zm KQotKwl7Ci0rCWludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7Ci0r Ci0rCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKLSsJCXsKLSsJCWlmICghb3duaW5nX3RocmVhZCkg Zmlwc193X2xvY2soKTsKLSsJCWZpcHNfbW9kZSA9IG9ub2ZmOwotKwkJaWYgKCFvd25pbmdfdGhy ZWFkKSBmaXBzX3dfdW5sb2NrKCk7Ci0rCQl9Ci0rCX0KLSsKLStzdGF0aWMgdm9pZCBmaXBzX3Nl dF9yYW5kX2NoZWNrKGNvbnN0IHZvaWQgKnJhbmRfY2hlY2spCi0rCXsKLSsJaW50IG93bmluZ190 aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKLSsKLSsJaWYgKGZpcHNfaXNfc3RhcnRl ZCgpKQotKwkJewotKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3dfbG9jaygpOwotKwkJZmlw c19yYW5kX2NoZWNrID0gcmFuZF9jaGVjazsKLSsJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc193 X3VubG9jaygpOwotKwkJfQotKwl9Ci0rCi0raW50IEZJUFNfbW9kZSh2b2lkKQotKwl7Ci0rCWlu dCByZXQgPSAwOwotKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgp OwotKwotKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCi0rCQl7Ci0rCQlpZiAoIW93bmluZ190aHJl YWQpIGZpcHNfcl9sb2NrKCk7Ci0rCQlyZXQgPSBmaXBzX21vZGU7Ci0rCQlpZiAoIW93bmluZ190 aHJlYWQpIGZpcHNfcl91bmxvY2soKTsKLSsJCX0KLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK2Nv bnN0IHZvaWQgKkZJUFNfcmFuZF9jaGVjayh2b2lkKQotKwl7Ci0rCWNvbnN0IHZvaWQgKnJldCA9 IDA7Ci0rCWludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7Ci0rCi0r CWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKLSsJCXsKLSsJCWlmICghb3duaW5nX3RocmVhZCkgZmlw c19yX2xvY2soKTsKLSsJCXJldCA9IGZpcHNfcmFuZF9jaGVjazsKLSsJCWlmICghb3duaW5nX3Ro cmVhZCkgZmlwc19yX3VubG9jaygpOwotKwkJfQotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0raW50 IEZJUFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQpCi0rICAgIHsKLSsgICAgaW50IHJldCA9IDA7Ci0r ICAgIGlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKLSsJewotKwlpbnQgb3duaW5nX3RocmVhZCA9IGZp cHNfaXNfb3duaW5nX3RocmVhZCgpOwotKwotKwlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl9s b2NrKCk7Ci0rCXJldCA9IGZpcHNfc2VsZnRlc3RfZmFpbDsKLSsJaWYgKCFvd25pbmdfdGhyZWFk KSBmaXBzX3JfdW5sb2NrKCk7Ci0rCX0KLSsgICAgcmV0dXJuIHJldDsKLSsgICAgfQotKwotKy8q IFNlbGZ0ZXN0IGZhaWx1cmUgZmF0YWwgZXhpdCByb3V0aW5lLiBUaGlzIHdpbGwgYmUgY2FsbGVk Ci0rICogZHVyaW5nICphbnkqIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uLiBJdCBoYXMgdGhlIG1p bmltdW0KLSsgKiBvdmVyaGVhZCBwb3NzaWJsZSB0byBhdm9pZCB0b28gYmlnIGEgcGVyZm9ybWFu Y2UgaGl0LgotKyAqLwotKwotK3ZvaWQgRklQU19zZWxmdGVzdF9jaGVjayh2b2lkKQotKyAgICB7 Ci0rICAgIGlmIChmaXBzX3NlbGZ0ZXN0X2ZhaWwpCi0rCXsKLSsJT3BlblNTTERpZShfX0ZJTEVf XyxfX0xJTkVfXywgIkZBVEFMIEZJUFMgU0VMRlRFU1QgRkFJTFVSRSIpOwotKwl9Ci0rICAgIH0K LSsKLSt2b2lkIGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwodm9pZCkKLSsgICAgewotKyAgICBmaXBz X3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKyAgICB9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3QoKQotKyAg ICB7Ci0rCi0rICAgIHJldHVybiBGSVBTX3NlbGZ0ZXN0X3NoYTEoKQotKwkmJiBGSVBTX3NlbGZ0 ZXN0X2htYWMoKQotKwkmJiBGSVBTX3NlbGZ0ZXN0X2FlcygpCi0rCSYmIEZJUFNfc2VsZnRlc3Rf ZGVzKCkKLSsJJiYgRklQU19zZWxmdGVzdF9yc2EoKQotKwkmJiBGSVBTX3NlbGZ0ZXN0X2RzYSgp OwotKyAgICB9Ci0rCi0raW50IEZJUFNfbW9kZV9zZXQoaW50IG9ub2ZmKQotKyAgICB7Ci0rICAg IGludCBmaXBzX3NldF9vd25pbmdfdGhyZWFkKCk7Ci0rICAgIGludCBmaXBzX2NsZWFyX293bmlu Z190aHJlYWQoKTsKLSsgICAgaW50IHJldCA9IDA7Ci0rCi0rICAgIGZpcHNfd19sb2NrKCk7Ci0r ICAgIGZpcHNfc2V0X3N0YXJ0ZWQoKTsKLSsgICAgZmlwc19zZXRfb3duaW5nX3RocmVhZCgpOwot KwotKyAgICBpZihvbm9mZikKLSsJewotKwl1bnNpZ25lZCBjaGFyIGJ1Zls0OF07Ci0rCi0rCWZp cHNfc2VsZnRlc3RfZmFpbCA9IDA7Ci0rCi0rCS8qIERvbid0IGdvIGludG8gRklQUyBtb2RlIHR3 aWNlLCBqdXN0IHNvIHdlIGNhbiBkbyBhdXRvbWFnaWMKLSsJICAgc2VlZGluZyAqLwotKwlpZihG SVBTX21vZGUoKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9ERV9TRVQs RklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NFVCk7Ci0rCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwg PSAxOwotKwkgICAgcmV0ID0gMDsKLSsJICAgIGdvdG8gZW5kOwotKwkgICAgfQotKwotKyNpZmRl ZiBPUEVOU1NMX0lBMzJfU1NFMgotKwlpZiAoKE9QRU5TU0xfaWEzMmNhcCAmICgxPDwyNXwxPDwy NikpICE9ICgxPDwyNXwxPDwyNikpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBT X01PREVfU0VULEZJUFNfUl9VTlNVUFBPUlRFRF9QTEFURk9STSk7Ci0rCSAgICBmaXBzX3NlbGZ0 ZXN0X2ZhaWwgPSAxOwotKwkgICAgcmV0ID0gMDsKLSsJICAgIGdvdG8gZW5kOwotKwkgICAgfQot KyNlbmRpZgotKwotKwkvKiBQZXJmb3JtIFJORyBLQVQgYmVmb3JlIHNlZWRpbmcgKi8KLSsJaWYg KCFGSVBTX3NlbGZ0ZXN0X3JuZygpKQotKwkgICAgewotKwkgICAgZmlwc19zZWxmdGVzdF9mYWls ID0gMTsKLSsJICAgIHJldCA9IDA7Ci0rCSAgICBnb3RvIGVuZDsKLSsJICAgIH0KLSsKLSsJLyog YXV0b21hZ2ljYWxseSBzZWVkIFBSTkcgaWYgbm90IGFscmVhZHkgc2VlZGVkICovCi0rCWlmKCFG SVBTX3JhbmRfc3RhdHVzKCkpCi0rCSAgICB7Ci0rCSAgICBpZihSQU5EX2J5dGVzKGJ1ZixzaXpl b2YgYnVmKSA8PSAwKQotKwkJewotKwkJZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKLSsJCXJldCA9 IDA7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsJICAgIEZJUFNfcmFuZF9zZXRfa2V5KGJ1ZiwzMik7 Ci0rCSAgICBGSVBTX3JhbmRfc2VlZChidWYrMzIsMTYpOwotKwkgICAgfQotKwotKwkvKiBub3cg c3dpdGNoIGludG8gRklQUyBtb2RlICovCi0rCWZpcHNfc2V0X3JhbmRfY2hlY2soRklQU19yYW5k X21ldGhvZCgpKTsKLSsJUkFORF9zZXRfcmFuZF9tZXRob2QoRklQU19yYW5kX21ldGhvZCgpKTsK LSsJaWYoRklQU19zZWxmdGVzdCgpKQotKwkgICAgZmlwc19zZXRfbW9kZSgxKTsKLSsJZWxzZQot KwkgICAgewotKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKLSsJICAgIHJldCA9IDA7Ci0r CSAgICBnb3RvIGVuZDsKLSsJICAgIH0KLSsJcmV0ID0gMTsKLSsJZ290byBlbmQ7Ci0rCX0KLSsg ICAgZmlwc19zZXRfbW9kZSgwKTsKLSsgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKLSsgICAg cmV0ID0gMTsKLStlbmQ6Ci0rICAgIGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCgpOwotKyAgICBm aXBzX3dfdW5sb2NrKCk7Ci0rICAgIHJldHVybiByZXQ7Ci0rICAgIH0KLSsKLSt2b2lkIGZpcHNf d19sb2NrKHZvaWQpCQl7IENSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRklQUyk7IH0KLSt2b2lk IGZpcHNfd191bmxvY2sodm9pZCkJeyBDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQUyk7 IH0KLSt2b2lkIGZpcHNfcl9sb2NrKHZvaWQpCQl7IENSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tf RklQUyk7IH0KLSt2b2lkIGZpcHNfcl91bmxvY2sodm9pZCkJeyBDUllQVE9fcl91bmxvY2soQ1JZ UFRPX0xPQ0tfRklQUyk7IH0KLSsKLStzdGF0aWMgaW50IGZpcHNfc3RhcnRlZCA9IDA7Ci0rc3Rh dGljIHVuc2lnbmVkIGxvbmcgZmlwc190aHJlYWQgPSAwOwotKwotK3ZvaWQgZmlwc19zZXRfc3Rh cnRlZCh2b2lkKQotKwl7Ci0rCWZpcHNfc3RhcnRlZCA9IDE7Ci0rCX0KLSsKLStpbnQgZmlwc19p c19zdGFydGVkKHZvaWQpCi0rCXsKLSsJcmV0dXJuIGZpcHNfc3RhcnRlZDsKLSsJfQotKwotK2lu dCBmaXBzX2lzX293bmluZ190aHJlYWQodm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsKLSsJ aWYgKGZpcHNfaXNfc3RhcnRlZCgpKQotKwkJewotKwkJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9D S19GSVBTMik7Ci0rCQlpZiAoZmlwc190aHJlYWQgIT0gMCAmJiBmaXBzX3RocmVhZCA9PSBDUllQ VE9fdGhyZWFkX2lkKCkpCi0rCQkJcmV0ID0gMTsKLSsJCUNSWVBUT19yX3VubG9jayhDUllQVE9f TE9DS19GSVBTMik7Ci0rCQl9Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStpbnQgZmlwc19zZXRf b3duaW5nX3RocmVhZCh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwotKwlpZiAoZmlwc19p c19zdGFydGVkKCkpCi0rCQl7Ci0rCQlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsK LSsJCWlmIChmaXBzX3RocmVhZCA9PSAwKQotKwkJCXsKLSsJCQlmaXBzX3RocmVhZCA9IENSWVBU T190aHJlYWRfaWQoKTsKLSsJCQlyZXQgPSAxOwotKwkJCX0KLSsJCUNSWVBUT193X3VubG9jayhD UllQVE9fTE9DS19GSVBTMik7Ci0rCQl9Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStpbnQgZmlw c19jbGVhcl9vd25pbmdfdGhyZWFkKHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCi0rCWlm IChmaXBzX2lzX3N0YXJ0ZWQoKSkKLSsJCXsKLSsJCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tf RklQUzIpOwotKwkJaWYgKGZpcHNfdGhyZWFkID09IENSWVBUT190aHJlYWRfaWQoKSkKLSsJCQl7 Ci0rCQkJZmlwc190aHJlYWQgPSAwOwotKwkJCXJldCA9IDE7Ci0rCQkJfQotKwkJQ1JZUFRPX3df dW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCX0KLSsJcmV0dXJuIHJldDsKLSsJfQotKwot Ky8qIEdlbmVyYWxpemVkIHB1YmxpYyBrZXkgdGVzdCByb3V0aW5lLiBTaWducyBhbmQgdmVyaWZp ZXMgdGhlIGRhdGEKLSsgKiBzdXBwbGllZCBpbiB0YnMgdXNpbmcgbWVzYWdlIGRpZ2VzdCBtZCBh bmQgc2V0dGluZyBvcHRpb24gZGlnZXN0Ci0rICogZmxhZ3MgbWRfZmxhZ3MuIElmIHRoZSAna2F0 JyBwYXJhbWV0ZXIgaXMgbm90IE5VTEwgaXQgd2lsbAotKyAqIGFkZGl0aW9uYWxseSBjaGVjayB0 aGUgc2lnbmF0dXJlIG1hdGNoZXMgaXQ6IGEga25vd24gYW5zd2VyIHRlc3QKLSsgKiBUaGUgc3Ry aW5nICJmYWlsX3N0ciIgaXMgdXNlZCBmb3IgaWRlbnRpZmljYXRpb24gcHVycG9zZXMgaW4gY2Fz ZQotKyAqIG9mIGZhaWx1cmUuCi0rICovCi0rCi0raW50IGZpcHNfcGtleV9zaWduYXR1cmVfdGVz dChFVlBfUEtFWSAqcGtleSwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIGludCB0YnNs ZW4sCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0LCB1bnNpZ25lZCBpbnQga2F0bGVuLAot KwkJCWNvbnN0IEVWUF9NRCAqZGlnZXN0LCB1bnNpZ25lZCBpbnQgbWRfZmxhZ3MsCi0rCQkJY29u c3QgY2hhciAqZmFpbF9zdHIpCi0rCXsJCi0rCWludCByZXQgPSAwOwotKwl1bnNpZ25lZCBjaGFy IHNpZ3RtcFsyNTZdLCAqc2lnID0gc2lndG1wOwotKwl1bnNpZ25lZCBpbnQgc2lnbGVuOwotKwlF VlBfTURfQ1RYIG1jdHg7Ci0rCUVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rCi0rCWlmICgocGtl eS0+dHlwZSA9PSBFVlBfUEtFWV9SU0EpCi0rCQkmJiAoUlNBX3NpemUocGtleS0+cGtleS5yc2Ep ID4gc2l6ZW9mKHNpZ3RtcCkpKQotKwkJewotKwkJc2lnID0gT1BFTlNTTF9tYWxsb2MoUlNBX3Np emUocGtleS0+cGtleS5yc2EpKTsKLSsJCWlmICghc2lnKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotKwkJ CXJldHVybiAwOwotKwkJCX0KLSsJCX0KLSsKLSsJaWYgKHRic2xlbiA9PSAtMSkKLSsJCXRic2xl biA9IHN0cmxlbigoY2hhciAqKXRicyk7Ci0rCi0rCWlmIChtZF9mbGFncykKLSsJCUVWUF9NRF9D VFhfc2V0X2ZsYWdzKCZtY3R4LCBtZF9mbGFncyk7Ci0rCi0rCWlmICghRVZQX1NpZ25Jbml0X2V4 KCZtY3R4LCBkaWdlc3QsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBfU2lnblVw ZGF0ZSgmbWN0eCwgdGJzLCB0YnNsZW4pKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBfU2ln bkZpbmFsKCZtY3R4LCBzaWcsICZzaWdsZW4sIHBrZXkpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJ aWYgKGthdCAmJiAoKHNpZ2xlbiAhPSBrYXRsZW4pIHx8IG1lbWNtcChrYXQsIHNpZywga2F0bGVu KSkpCi0rCQlnb3RvIGVycm9yOwotKwotKwlpZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBk aWdlc3QsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZt Y3R4LCB0YnMsIHRic2xlbikpCi0rCQlnb3RvIGVycm9yOwotKwlyZXQgPSBFVlBfVmVyaWZ5Rmlu YWwoJm1jdHgsIHNpZywgc2lnbGVuLCBwa2V5KTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChzaWcgIT0g c2lndG1wKQotKwkJT1BFTlNTTF9mcmVlKHNpZyk7Ci0rCUVWUF9NRF9DVFhfY2xlYW51cCgmbWN0 eCk7Ci0rCWlmIChyZXQgIT0gMSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfUEtFWV9T SUdOQVRVUkVfVEVTVCxGSVBTX1JfVEVTVF9GQUlMVVJFKTsKLSsJCWlmIChmYWlsX3N0cikKLSsJ CQlFUlJfYWRkX2Vycm9yX2RhdGEoMiwgIlR5cGU9IiwgZmFpbF9zdHIpOwotKwkJcmV0dXJuIDA7 Ci0rCQl9Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rLyogR2VuZXJhbGl6ZWQgc3ltbWV0cmljIGNp cGhlciB0ZXN0IHJvdXRpbmUuIEVuY3J5cHQgZGF0YSwgdmVyaWZ5IHJlc3VsdAotKyAqIGFnYWlu c3Qga25vd24gYW5zd2VyLCBkZWNyeXB0IGFuZCBjb21wYXJlIHdpdGggb3JpZ2luYWwgcGxhaW50 ZXh0LgotKyAqLwotKwotK2ludCBmaXBzX2NpcGhlcl90ZXN0KEVWUF9DSVBIRVJfQ1RYICpjdHgs IGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICprZXks Ci0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAq cGxhaW50ZXh0LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsCi0rCQkJaW50 IGxlbikKLSsJewotKwl1bnNpZ25lZCBjaGFyIHBsdG1wW0ZJUFNfTUFYX0NJUEhFUl9URVNUX1NJ WkVdOwotKwl1bnNpZ25lZCBjaGFyIGNpdG1wW0ZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkVdOwot KwlPUEVOU1NMX2Fzc2VydChsZW4gPD0gRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRSk7Ci0rCWlm IChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwga2V5LCBpdiwgMSkgPD0gMCkK LSsJCXJldHVybiAwOwotKwlFVlBfQ2lwaGVyKGN0eCwgY2l0bXAsIHBsYWludGV4dCwgbGVuKTsK LSsJaWYgKG1lbWNtcChjaXRtcCwgY2lwaGVydGV4dCwgbGVuKSkKLSsJCXJldHVybiAwOwotKwlp ZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGtleSwgaXYsIDApIDw9IDAp Ci0rCQlyZXR1cm4gMDsKLSsJRVZQX0NpcGhlcihjdHgsIHBsdG1wLCBjaXRtcCwgbGVuKTsKLSsJ aWYgKG1lbWNtcChwbHRtcCwgcGxhaW50ZXh0LCBsZW4pKQotKwkJcmV0dXJuIDA7Ci0rCXJldHVy biAxOwotKwl9Ci0rCi0rI2lmIDAKLSsvKiBUaGUgcHVycG9zZSBvZiB0aGlzIGlzIHRvIGVuc3Vy ZSB0aGUgZXJyb3IgY29kZSBleGlzdHMgYW5kIHRoZSBmdW5jdGlvbgotKyAqIG5hbWUgaXMgdG8g a2VlcCB0aGUgZXJyb3IgY2hlY2tpbmcgc2NyaXB0IHF1aWV0Ci0rICovCi0rdm9pZCBoYXNoX2Zp bmFsKHZvaWQpCi0rCXsKLSsJRklQU2VycihGSVBTX0ZfSEFTSF9GSU5BTCxGSVBTX1JfTk9OX0ZJ UFNfTUVUSE9EKTsKLSsJfQotKyNlbmRpZgotKwotKwotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9u dWxsIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYwot LS0tIC9kZXYvbnVsbAkyMDA5LTA5LTIzIDEwOjU2OjAyLjE0ODAwMTc1MiArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYwkyMDA5LTA5 LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSwxMzcgQEAKLSsvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAq IGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0r ICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4g VGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5v dCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNz bC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAi T3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAq ICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlz dHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dp bmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoK LSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBB UyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1Qg T1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0r ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwotK3N0YXRpYyBzdHJ1Y3QKLSsgICAgewotKyAgICB1bnNpZ25lZCBj aGFyIGtleVsxNl07Ci0rICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzhdOwotKyAgICB1bnNp Z25lZCBjaGFyIGNpcGhlcnRleHRbOF07Ci0rICAgIH0gdGVzdHMyW109Ci0rCXsKLSsJewotKwl7 IDB4N2MsMHg0ZiwweDZlLDB4ZjcsMHhhMiwweDA0LDB4MTYsMHhlYywKLSsJICAweDBiLDB4NmIs MHg3YywweDllLDB4NWUsMHgxOSwweGE3LDB4YzQgfSwKLSsJeyAweDA2LDB4YTcsMHhkOCwweDc5 LDB4YWEsMHhjZSwweDY5LDB4ZWYgfSwKLSsJeyAweDRjLDB4MTEsMHgxNywweDU1LDB4YmYsMHhj NCwweDRlLDB4ZmQgfQotKwl9LAotKwl7Ci0rCXsgMHg1ZCwweDllLDB4MDEsMHhkMywweDI1LDB4 YzcsMHgzZSwweDM0LAotKwkgIDB4MDEsMHgxNiwweDdjLDB4ODUsMHgyMywweGRmLDB4ZTAsMHg2 OCB9LAotKwl7IDB4OWMsMHg1MCwweDA5LDB4MGYsMHg1ZSwweDdkLDB4NjksMHg3ZSB9LAotKwl7 IDB4ZDIsMHgwYiwweDE4LDB4ZGYsMHhkOSwweDBkLDB4OWUsMHhmZiB9LAotKwl9Ci0rCX07Ci0r Ci0rc3RhdGljIHN0cnVjdAotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5WzI0XTsKLSsg ICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbOF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVy dGV4dFs4XTsKLSsgICAgfSB0ZXN0czNbXT0KLSsJewotKwl7Ci0rCXsgMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkgIDB4RkUsMHhEQywweEJBLDB4OTgsMHg3Niww eDU0LDB4MzIsMHgxMCwKLSsJICAweDEyLDB4MzQsMHg1NiwweDc4LDB4OWEsMHhiYywweGRlLDB4 ZjAgfSwKLSsJeyAweDhmLDB4OGYsMHhiZiwweDliLDB4NWQsMHg0OCwweGI0LDB4MWMgfSwKLSsJ eyAweDU5LDB4OGMsMHhlNSwweGQzLDB4NmMsMHhhMiwweGVhLDB4MWIgfSwKLSsJfSwKLSsJewot Kwl7IDB4REMsMHhCQSwweDk4LDB4NzYsMHg1NCwweDMyLDB4MTAsMHhGRSwKLSsJICAweDAxLDB4 MjMsMHg0NSwweDY3LDB4ODksMHhBQiwweENELDB4RUYsCi0rCSAgMHhFRCwweDM5LDB4RDksMHg1 MCwweEZBLDB4NzQsMHhCQywweEM0IH0sCi0rCXsgMHgwMSwweDIzLDB4NDUsMHg2NywweDg5LDB4 QUIsMHhDRCwweEVGIH0sCi0rCXsgMHgxMSwweDI1LDB4YjAsMHgzNSwweGJlLDB4YTAsMHg4Miww eDg2IH0sCi0rCX0sCi0rCX07Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfZGVzKCkKLSsgICAgewot KyAgICB0ZXN0czJbMF0ucGxhaW50ZXh0WzBdKys7Ci0rICAgIH0KLSsKLStpbnQgRklQU19zZWxm dGVzdF9kZXMoKQotKyAgICB7Ci0rICAgIGludCBuLCByZXQgPSAwOwotKyAgICBFVlBfQ0lQSEVS X0NUWCBjdHg7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rICAgIC8qIEVuY3J5 cHQvZGVjcnlwdCB3aXRoIDIta2V5IDNERVMgYW5kIGNvbXBhcmUgdG8ga25vd24gYW5zd2VycyAq LwotKyAgICBmb3Iobj0wIDsgbiA8IDIgOyArK24pCi0rCXsKLSsJaWYgKCFmaXBzX2NpcGhlcl90 ZXN0KCZjdHgsIEVWUF9kZXNfZWRlX2VjYigpLAotKwkJCQl0ZXN0czJbbl0ua2V5LCBOVUxMLAot KwkJCQl0ZXN0czJbbl0ucGxhaW50ZXh0LCB0ZXN0czJbbl0uY2lwaGVydGV4dCwgOCkpCi0rCQln b3RvIGVycjsKLSsJfQotKwotKyAgICAvKiBFbmNyeXB0L2RlY3J5cHQgd2l0aCAzREVTIGFuZCBj b21wYXJlIHRvIGtub3duIGFuc3dlcnMgKi8KLSsgICAgZm9yKG49MCA7IG4gPCAyIDsgKytuKQot Kwl7Ci0rCWlmICghZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksCi0r CQkJCXRlc3RzM1tuXS5rZXksIE5VTEwsCi0rCQkJCXRlc3RzM1tuXS5wbGFpbnRleHQsIHRlc3Rz M1tuXS5jaXBoZXJ0ZXh0LCA4KSkKLSsJCWdvdG8gZXJyOwotKwl9Ci0rICAgIHJldCA9IDE7Ci0r ICAgIGVycjoKLSsgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKLSsgICAgaWYgKHJl dCA9PSAwKQotKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9ERVMsRklQU19SX1NF TEZURVNUX0ZBSUxFRCk7Ci0rCi0rICAgIHJldHVybiByZXQ7Ci0rICAgIH0KLSsjZW5kaWYKLWRp ZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfZHNh X3NlbGZ0ZXN0LmMKLS0tLSAvZGV2L251bGwJMjAwOS0wOS0yMyAxMDo1NjowMi4xNDgwMDE3NTIg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0 ZXN0LmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMTg0 IEBACi0rLyogY3J5cHRvL2RzYS9kc2F0ZXN0LmMgKi8KLSsvKiBDb3B5cmlnaHQgKEMpIDE5OTUt MTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKLSsgKiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotKyAqCi0rICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0 dGVuCi0rICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotKyAqIFRoZSBpbXBs ZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNT TC4KLSsgKiAKLSsgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9u LWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSsgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg YXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcHBseSB0byBh bGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAot KyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBT U0wgZG9jdW1lbnRhdGlvbgotKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMg Y292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKLSsgKiBleGNlcHQgdGhhdCB0aGUg aG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKiAKLSsgKiBDb3B5 cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90 aWNlcyBpbgotKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSsgKiBJZiB0aGlz IHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVu IGF0dHJpYnV0aW9uCi0rICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJh cnkgdXNlZC4KLSsgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2Fn ZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKLSsgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3Ig dGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSsgKiAKLSsgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK LSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0rICogMy4g QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzIHNvZnR3YXJlCi0rICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0 d2FyZSB3cml0dGVuIGJ5Ci0rICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIK LSsgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSBy b3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKLSsgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRv Z3JhcGhpYyByZWxhdGVkIDotKS4KLSsgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBz cGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKLSsgKiAgICB0aGUg YXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNr bm93bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3Jp dHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0rICogCi0rICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSsgKiBBTlkg RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotKyAqIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0rICog Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwKLSsgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotKyAqIE9SIFNFUlZJQ0VTOyBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQot KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwgU1RSSUNUCi0rICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotKyAqIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YKLSsgKiBTVUNIIERBTUFHRS4KLSsgKiAKLSsgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJp YnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgotKyAq IGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNv ZGUgY2Fubm90IHNpbXBseSBiZQotKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlz dHJpYnV0aW9uIGxpY2VuY2UKLSsgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2Uu XQotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlw dG8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0r Lyogc2VlZCwgb3V0X3AsIG91dF9xLCBvdXRfZyBhcmUgdGFrZW4gdGhlIE5JU1QgdGVzdCB2ZWN0 b3JzICovCi0rCi0rc3RhdGljIHVuc2lnbmVkIGNoYXIgc2VlZFsyMF0gPSB7Ci0rCTB4NzcsIDB4 OGYsIDB4NDAsIDB4NzQsIDB4NmYsIDB4NjYsIDB4YmUsIDB4MzMsIDB4Y2UsIDB4YmUsIDB4OTks IDB4MzQsCi0rCTB4NGMsIDB4ZmMsIDB4ZjMsIDB4MjgsIDB4YWEsIDB4NzAsIDB4MmQsIDB4M2EK LSsgIAl9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9wW10gPSB7Ci0rCTB4ZjcsIDB4 N2MsIDB4MWIsIDB4ODMsIDB4ZDgsIDB4ZTgsIDB4NWMsIDB4N2YsIDB4ODUsIDB4MzAsIDB4MTcs IDB4NTcsCi0rCTB4MjEsIDB4OTUsIDB4ZmUsIDB4MjYsIDB4MDQsIDB4ZWIsIDB4NDcsIDB4NGMs IDB4M2EsIDB4NGEsIDB4ODEsIDB4NGIsCi0rCTB4NzEsIDB4MmUsIDB4ZWQsIDB4NmUsIDB4NGYs IDB4M2QsIDB4MTEsIDB4MGYsIDB4N2MsIDB4ZmUsIDB4MzYsIDB4NDMsCi0rCTB4NTEsIDB4ZDks IDB4ODEsIDB4MzksIDB4MTcsIDB4ZGYsIDB4NjIsIDB4ZjYsIDB4OWMsIDB4MDEsIDB4YTgsIDB4 NjksCi0rCTB4NzEsIDB4ZGQsIDB4MjksIDB4N2YsIDB4NDcsIDB4ZTYsIDB4NjUsIDB4YTYsIDB4 MjIsIDB4ZTgsIDB4NmEsIDB4MTIsCi0rCTB4MmIsIDB4YzIsIDB4ODEsIDB4ZmYsIDB4MzIsIDB4 NzAsIDB4MmYsIDB4OWUsIDB4Y2EsIDB4NTMsIDB4MjYsIDB4NDcsCi0rCTB4MGYsIDB4NTksIDB4 ZDcsIDB4OWUsIDB4MmMsIDB4YTUsIDB4MDcsIDB4YzQsIDB4NDksIDB4NTIsIDB4YTMsIDB4ZTQs Ci0rCTB4NmIsIDB4MDQsIDB4MDAsIDB4MjUsIDB4NDksIDB4ZTIsIDB4ZTYsIDB4N2YsIDB4Mjgs IDB4NzgsIDB4OTcsIDB4YjgsCi0rCTB4M2EsIDB4MzIsIDB4MTQsIDB4MzgsIDB4YTIsIDB4NTEs IDB4MzMsIDB4MjIsIDB4NDQsIDB4N2UsIDB4ZDcsIDB4ZWYsCi0rCTB4NDUsIDB4ZGIsIDB4MDYs IDB4NGEsIDB4ZDIsIDB4ODIsIDB4NGEsIDB4ODIsIDB4MmMsIDB4YjEsIDB4ZDcsIDB4ZDgsCi0r CTB4YjYsIDB4NzMsIDB4MDAsIDB4NGQsIDB4OTQsIDB4NzcsIDB4OTQsIDB4ZWYKLSsJfTsKLSsK LStzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRfcVtdID0gewotKwkweGQ0LCAweDBhLCAweGFjLCAw eDlmLCAweGJkLCAweDhjLCAweDgwLCAweGMyLCAweDM4LCAweDdlLCAweDJlLCAweDBjLAotKwkw eDUyLCAweDVjLCAweGVhLCAweDM0LCAweGExLCAweDgzLCAweDMyLCAweGYzCi0rCX07Ci0rCi0r c3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X2dbXSA9IHsKLSsJMHgzNCwgMHg3MywgMHg4YiwgMHg1 NywgMHg4NCwgMHg4ZSwgMHg1NSwgMHhiZiwgMHg1NywgMHhjYywgMHg0MSwgMHhiYiwKLSsJMHg1 ZSwgMHgyYiwgMHhkNSwgMHg0MiwgMHhkZCwgMHgyNCwgMHgyMiwgMHgyYSwgMHgwOSwgMHhlYSwg MHgyNiwgMHgxZSwKLSsJMHgxNywgMHg2NSwgMHhjYiwgMHgxYSwgMHhiMywgMHgxMiwgMHg0NCwg MHhhMywgMHg5ZSwgMHg5OSwgMHhlOSwgMHg2MywKLSsJMHhlYiwgMHgzMCwgMHhiMSwgMHg3OCwg MHg3YiwgMHgwOSwgMHg0MCwgMHgzMCwgMHhmYSwgMHg4MywgMHhjMiwgMHgzNSwKLSsJMHhlMSwg MHhjNCwgMHgyZCwgMHg3NCwgMHgxYSwgMHhiMSwgMHg4MywgMHg1NCwgMHhkOCwgMHgyOSwgMHhm NCwgMHhjZiwKLSsJMHg3ZiwgMHg2ZiwgMHg2NywgMHgxYywgMHgzNiwgMHg0OSwgMHhlZSwgMHg2 YywgMHhhMiwgMHgzYywgMHgyZCwgMHg2YSwKLSsJMHhlOSwgMHhkMywgMHg5YSwgMHhmNiwgMHg1 NywgMHg3OCwgMHg2ZiwgMHhmZCwgMHgzMywgMHhjZCwgMHgzYywgMHhlZCwKLSsJMHhmZCwgMHhk NCwgMHg0MSwgMHhlNiwgMHg1YywgMHg4YiwgMHhlMCwgMHg2OCwgMHgzMSwgMHg0NywgMHg0Nywg MHhhZiwKLSsJMHgxMiwgMHhhNywgMHhmOSwgMHgzMiwgMHgwZCwgMHg5NCwgMHgxNSwgMHg0OCwg MHhkMCwgMHg1NCwgMHg4NSwgMHhiMiwKLSsJMHgwNCwgMHhiNSwgMHg0ZCwgMHhkNCwgMHg5ZCwg MHgwNSwgMHgyMiwgMHgyNSwgMHhkOSwgMHhmZCwgMHg2YywgMHgzNiwKLSsJMHhlZiwgMHhiZSwg MHg2OSwgMHg2YywgMHg1NSwgMHhmNCwgMHhlZSwgMHhlYwotKwl9OwotKwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHN0cjFbXT0iMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiOwotKwotK3ZvaWQg RklQU19jb3JydXB0X2RzYSgpCi0rICAgIHsKLSsgICAgKytzZWVkWzBdOwotKyAgICB9Ci0rCi0r aW50IEZJUFNfc2VsZnRlc3RfZHNhKCkKLSsgICAgewotKyAgICBEU0EgKmRzYTsKLSsgICAgaW50 IGNvdW50ZXIsaSxqLCByZXQgPSAwOwotKyAgICB1bnNpZ25lZCBpbnQgc2xlbjsKLSsgICAgdW5z aWduZWQgY2hhciBidWZbMjU2XTsKLSsgICAgdW5zaWduZWQgbG9uZyBoOwotKyAgICBFVlBfTURf Q1RYIG1jdHg7Ci0rICAgIEVWUF9QS0VZICpwayA9IE5VTEw7Ci0rCi0rICAgIEVWUF9NRF9DVFhf aW5pdCgmbWN0eCk7Ci0rCi0rICAgIGRzYSA9IERTQV9uZXcoKTsKLSsKLSsgICAgaWYoZHNhID09 IE5VTEwpCi0rCWdvdG8gZXJyOwotKyAgICBpZighRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgo ZHNhLCAxMDI0LHNlZWQsMjAsJmNvdW50ZXIsJmgsTlVMTCkpCi0rCWdvdG8gZXJyOwotKyAgICBp ZiAoY291bnRlciAhPSAzNzgpIAotKwlnb3RvIGVycjsKLSsgICAgaWYgKGggIT0gMikKLSsJZ290 byBlcnI7Ci0rICAgIGk9Qk5fYm4yYmluKGRzYS0+cSxidWYpOwotKyAgICBqPXNpemVvZihvdXRf cSk7Ci0rICAgIGlmIChpICE9IGogfHwgbWVtY21wKGJ1ZixvdXRfcSxpKSAhPSAwKQotKwlnb3Rv IGVycjsKLSsKLSsgICAgaT1CTl9ibjJiaW4oZHNhLT5wLGJ1Zik7Ci0rICAgIGo9c2l6ZW9mKG91 dF9wKTsKLSsgICAgaWYgKGkgIT0gaiB8fCBtZW1jbXAoYnVmLG91dF9wLGkpICE9IDApCi0rCWdv dG8gZXJyOwotKwotKyAgICBpPUJOX2JuMmJpbihkc2EtPmcsYnVmKTsKLSsgICAgaj1zaXplb2Yo b3V0X2cpOwotKyAgICBpZiAoaSAhPSBqIHx8IG1lbWNtcChidWYsb3V0X2csaSkgIT0gMCkKLSsJ Z290byBlcnI7Ci0rICAgIERTQV9nZW5lcmF0ZV9rZXkoZHNhKTsKLSsKLSsgICAgaWYgKChwaz1F VlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsJZ290byBlcnI7Ci0rICAgIEVWUF9QS0VZX2Fzc2ln bl9EU0EocGssIGRzYSk7Ci0rCi0rICAgIGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBf ZHNzMSgpLCBOVUxMKSkKLSsJZ290byBlcnI7Ci0rICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1j dHgsIHN0cjEsIDIwKSkKLSsJZ290byBlcnI7Ci0rICAgIGlmICghRVZQX1NpZ25GaW5hbCgmbWN0 eCwgYnVmLCAmc2xlbiwgcGspKQotKwlnb3RvIGVycjsKLSsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5 SW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCi0rCWdvdG8gZXJyOwotKyAgICBpZiAo IUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIHN0cjEsIDIwKSkKLSsJZ290byBlcnI7Ci0rICAgIGlm IChFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIGJ1Ziwgc2xlbiwgcGspICE9IDEpCi0rCWdvdG8gZXJy OwotKwotKyAgICByZXQgPSAxOwotKwotKyAgICBlcnI6Ci0rICAgIEVWUF9NRF9DVFhfY2xlYW51 cCgmbWN0eCk7Ci0rICAgIGlmIChwaykKLSsJRVZQX1BLRVlfZnJlZShwayk7Ci0rICAgIGVsc2Ug aWYgKGRzYSkKLSsJRFNBX2ZyZWUoZHNhKTsKLSsgICAgaWYgKHJldCA9PSAwKQotKwkgICAgRklQ U2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9EU0EsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0r ICAgIHJldHVybiByZXQ7Ci0rICAgIH0KLSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVu c3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzL2ZpcHMuaAotLS0tIC9kZXYvbnVsbAkyMDA5LTA5 LTIzIDEwOjU2OjAyLjE0ODAwMTc1MiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5 cHRvL2ZpcHMvZmlwcy5oCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAt MCwwICsxLDE2MyBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRo ZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot KyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJP cGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAg IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNl IGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQ cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3Bl blNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0 aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9q ZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIg bXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK LSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxv cGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjZXJyb3Ig RklQUyBpcyBkaXNhYmxlZC4KLSsjZW5kaWYKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0r I2lmZGVmICBfX2NwbHVzcGx1cwotK2V4dGVybiAiQyIgewotKyNlbmRpZgotKwotK3N0cnVjdCBk c2Ffc3Q7Ci0rc3RydWN0IGV2cF9wa2V5X3N0OwotK3N0cnVjdCBlbnZfbWRfc3Q7Ci0rc3RydWN0 IGV2cF9jaXBoZXJfc3Q7Ci0rc3RydWN0IGV2cF9jaXBoZXJfY3R4X3N0OwotKwotK2ludCBGSVBT X21vZGVfc2V0KGludCBvbm9mZik7Ci0raW50IEZJUFNfbW9kZSh2b2lkKTsKLStjb25zdCB2b2lk ICpGSVBTX3JhbmRfY2hlY2sodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQp OwotK3ZvaWQgRklQU19zZWxmdGVzdF9jaGVjayh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9z aGExKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTEodm9pZCk7Ci0rdm9pZCBGSVBTX2Nv cnJ1cHRfYWVzKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Flcyh2b2lkKTsKLSt2b2lkIEZJ UFNfY29ycnVwdF9kZXModm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfZGVzKHZvaWQpOwotK3Zv aWQgRklQU19jb3JydXB0X3JzYSh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9yc2Ffa2V5Z2Vu KHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X3JzYSh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVw dF9kc2Eodm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbih2b2lkKTsKLStpbnQg RklQU19zZWxmdGVzdF9kc2Eodm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfcm5nKHZvaWQpOwot K3ZvaWQgRklQU19ybmdfc3RpY2sodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3Rfcm5nKHZvaWQp OwotK2ludCBGSVBTX3NlbGZ0ZXN0X2htYWModm9pZCk7Ci0rCi0raW50IGZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdChzdHJ1Y3QgZXZwX3BrZXlfc3QgKnBrZXksCi0rCQkJY29uc3QgdW5zaWduZWQg Y2hhciAqdGJzLCBpbnQgdGJzbGVuLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdCwgdW5z aWduZWQgaW50IGthdGxlbiwKLSsJCQljb25zdCBzdHJ1Y3QgZW52X21kX3N0ICpkaWdlc3QsIHVu c2lnbmVkIGludCBtZF9mbGFncywKLSsJCQljb25zdCBjaGFyICpmYWlsX3N0cik7Ci0rCi0raW50 IGZpcHNfY2lwaGVyX3Rlc3Qoc3RydWN0IGV2cF9jaXBoZXJfY3R4X3N0ICpjdHgsCi0rCQkJY29u c3Qgc3RydWN0IGV2cF9jaXBoZXJfc3QgKmNpcGhlciwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFy ICprZXksCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCi0rCQkJY29uc3QgdW5zaWduZWQg Y2hhciAqcGxhaW50ZXh0LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsCi0r CQkJaW50IGxlbik7Ci0rCi0rLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KLSsvKiBUaGUgZm9sbG93 aW5nIGxpbmVzIGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkg Y2hhbmdlcwotKyAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hl biB0aGUgc2NyaXB0IGlzIG5leHQgcnVuLgotKyAqLwotK3ZvaWQgRVJSX2xvYWRfRklQU19zdHJp bmdzKHZvaWQpOwotKwotKy8qIEVycm9yIGNvZGVzIGZvciB0aGUgRklQUyBmdW5jdGlvbnMuICov Ci0rCi0rLyogRnVuY3Rpb24gY29kZXMuICovCi0rI2RlZmluZSBGSVBTX0ZfREhfQlVJTFRJTl9H RU5QQVJBTVMJCQkgMTAwCi0rI2RlZmluZSBGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4JCQkg MTAxCi0rI2RlZmluZSBGSVBTX0ZfRFNBX0RPX1NJR04JCQkJIDEwMgotKyNkZWZpbmUgRklQU19G X0RTQV9ET19WRVJJRlkJCQkJIDEwMwotKyNkZWZpbmUgRklQU19GX0VWUF9DSVBIRVJJTklUX0VY CQkJIDEyNAotKyNkZWZpbmUgRklQU19GX0VWUF9ESUdFU1RJTklUX0VYCQkJIDEyNQotKyNkZWZp bmUgRklQU19GX0ZJUFNfQ0hFQ0tfRFNBCQkJCSAxMDQKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0NI RUNLX0lOQ09SRV9GSU5HRVJQUklOVAkJIDEwNQotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tf UlNBCQkJCSAxMDYKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RTQV9DSEVDSwkJCQkgMTA3Ci0rI2Rl ZmluZSBGSVBTX0ZfRklQU19NT0RFX1NFVAkJCQkgMTA4Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19Q S0VZX1NJR05BVFVSRV9URVNUCQkJIDEwOQotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1Rf QUVTCQkJIDExMAotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfREVTCQkJIDExMQotKyNk ZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfRFNBCQkJIDExMgotKyNkZWZpbmUgRklQU19GX0ZJ UFNfU0VMRlRFU1RfSE1BQwkJCSAxMTMKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1JO RwkJCSAxMTQKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEJCQkgMTE1Ci0rI2Rl ZmluZSBGSVBTX0ZfSEFTSF9GSU5BTAkJCQkgMTIzCi0rI2RlZmluZSBGSVBTX0ZfUlNBX0JVSUxU SU5fS0VZR0VOCQkJIDExNgotKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBU CQkJIDExNwotKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBUCQkJIDExOAot KyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQJCQkgMTE5Ci0rI2RlZmluZSBG SVBTX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVAkJCSAxMjAKLSsjZGVmaW5lIEZJUFNfRl9SU0Ff WDkzMV9HRU5FUkFURV9LRVlfRVgJCQkgMTIxCi0rI2RlZmluZSBGSVBTX0ZfU1NMRUFZX1JBTkRf QllURVMJCQkgMTIyCi0rCi0rLyogUmVhc29uIGNvZGVzLiAqLwotKyNkZWZpbmUgRklQU19SX0NB Tk5PVF9SRUFEX0VYRQkJCQkgMTAzCi0rI2RlZmluZSBGSVBTX1JfQ0FOTk9UX1JFQURfRVhFX0RJ R0VTVAkJCSAxMDQKLSsjZGVmaW5lIEZJUFNfUl9DT05UUkFESUNUSU5HX0VWSURFTkNFCQkJIDEx NAotKyNkZWZpbmUgRklQU19SX0VYRV9ESUdFU1RfRE9FU19OT1RfTUFUQ0gJCSAxMDUKLSsjZGVm aW5lIEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSAkJIDExMAotKyNkZWZpbmUgRklQ U19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX05PTlBJQ19SRUxPQ0FURUQgMTExCi0rI2Rl ZmluZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfU0VHTUVOVF9BTElBU0lORyAx MTIKLSsjZGVmaW5lIEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9TRVQJCQkgMTAyCi0rI2RlZmlu ZSBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQJCQkgMTA2Ci0rI2RlZmluZSBGSVBTX1JfSU5W QUxJRF9LRVlfTEVOR1RICQkJIDEwOQotKyNkZWZpbmUgRklQU19SX0tFWV9UT09fU0hPUlQJCQkJ IDEwOAotKyNkZWZpbmUgRklQU19SX05PTl9GSVBTX01FVEhPRAkJCQkgMTAwCi0rI2RlZmluZSBG SVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQJCQkgMTA3Ci0rI2RlZmluZSBGSVBTX1JfUlNBX0RF Q1JZUFRfRVJST1IJCQkgMTE1Ci0rI2RlZmluZSBGSVBTX1JfUlNBX0VOQ1JZUFRfRVJST1IJCQkg MTE2Ci0rI2RlZmluZSBGSVBTX1JfU0VMRlRFU1RfRkFJTEVECQkJCSAxMDEKLSsjZGVmaW5lIEZJ UFNfUl9URVNUX0ZBSUxVUkUJCQkJIDExNwotKyNkZWZpbmUgRklQU19SX1VOU1VQUE9SVEVEX1BM QVRGT1JNCQkJIDExMwotKwotKyNpZmRlZiAgX19jcGx1c3BsdXMKLSt9Ci0rI2VuZGlmCi0rI2Vu ZGlmCi1kaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9m aXBzX2htYWNfc2VsZnRlc3QuYwotLS0tIC9kZXYvbnVsbAkyMDA5LTA5LTIzIDEwOjU2OjAyLjE0 ODAwMTc1MiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19o bWFjX3NlbGZ0ZXN0LmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0w LDAgKzEsMTM1IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhl IE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0r ICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFs cyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVz dCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAot KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9w ZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2Ug Y29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVu U1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRo b3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2pl Y3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBt dXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhF IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0 cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQ UwotK3R5cGVkZWYgc3RydWN0IHsKLSsJY29uc3QgRVZQX01EICooKmFsZykodm9pZCk7Ci0rCWNv bnN0IGNoYXIgKmtleSwgKml2OwotKwl1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0la RV07Ci0rfSBITUFDX0tBVDsKLSsKLStzdGF0aWMgY29uc3QgSE1BQ19LQVQgdmVjdG9yW10gPSB7 Ci0rICAgIHsJRVZQX3NoYTEsCi0rCS8qIGZyb20gaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGlj YXRpb25zL2ZpcHMvZmlwczE5OC9maXBzLTE5OGEucGRmICovCi0rCSIwMTIzNDU2Nzg5Ojs8PT4/ QEFCQyIsCi0rCSJTYW1wbGUgIzIiLAotKwl7IDB4MDksMHgyMiwweGQzLDB4NDAsMHg1ZiwweGFh LDB4M2QsMHgxOSwKLSsJICAweDRmLDB4ODIsMHhhNCwweDU4LDB4MzAsMHg3MywweDdkLDB4NWMs Ci0rCSAgMHhjNiwweGM3LDB4NWQsMHgyNCB9Ci0rICAgIH0sCi0rICAgIHsJRVZQX3NoYTIyNCwK LSsJLyoganVzdCBrZWVwIGV4dGVuZGluZyB0aGUgYWJvdmUuLi4gKi8KLSsJIjAxMjM0NTY3ODk6 Ozw9Pj9AQUJDIiwKLSsJIlNhbXBsZSAjMiIsCi0rCXsgMHhkZCwweGVmLDB4MGEsMHg0MCwweGNi LDB4N2QsMHg1MCwweGZiLAotKwkgIDB4NmUsMHhlNiwweGNlLDB4YTEsMHgyMCwweGJhLDB4MjYs MHhhYSwKLSsJICAweDA4LDB4ZjMsMHgwNywweDc1LDB4ODcsMHhiOCwweGFkLDB4MWIsCi0rCSAg MHg4YywweDhkLDB4MTIsMHhjNyB9Ci0rICAgIH0sCi0rICAgIHsJRVZQX3NoYTI1NiwKLSsJIjAx MjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsJIlNhbXBsZSAjMiIsCi0rCXsgMHhiOCwweGYyLDB4MGQs MHhiNSwweDQxLDB4ZWEsMHg0MywweDA5LAotKwkgIDB4Y2EsMHg0ZSwweGE5LDB4MzgsMHgwYyww eGQwLDB4ZTgsMHgzNCwKLSsJICAweGY3LDB4MWYsMHhiZSwweDkxLDB4NzQsMHhhMiwweDYxLDB4 MzgsCi0rCSAgMHgwZCwweGMxLDB4N2UsMHhhZSwweDZhLDB4MzQsMHg1MSwweGQ5IH0KLSsgICAg fSwKLSsgICAgewlFVlBfc2hhMzg0LAotKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAotKwkiU2Ft cGxlICMyIiwKLSsJeyAweDA4LDB4YmMsMHhiMCwweGRhLDB4NDksMHgxZSwweDg3LDB4YWQsCi0r CSAgMHg5YSwweDFkLDB4NmEsMHhjZSwweDIzLDB4YzUsMHgwYiwweGY2LAotKwkgIDB4YjcsMHgx OCwweDA2LDB4YTUsMHg3NywweGNkLDB4NDksMHgwNCwKLSsJICAweDg5LDB4ZjEsMHhlNiwweDIz LDB4NDQsMHg1MSwweDUxLDB4OWYsCi0rCSAgMHg4NSwweDU2LDB4ODAsMHg3OSwweDBjLDB4YmQs MHg0ZCwweDUwLAotKwkgIDB4YTQsMHg1ZiwweDI5LDB4ZTMsMHg5MywweGYwLDB4ZTgsMHg3ZiB9 Ci0rICAgIH0sCi0rICAgIHsJRVZQX3NoYTUxMiwKLSsJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwK LSsJIlNhbXBsZSAjMiIsCi0rCXsgMHg4MCwweDlkLDB4NDQsMHgwNSwweDdjLDB4NWIsMHg5NSww eDQxLAotKwkgIDB4MDUsMHhiZCwweDA0LDB4MTMsMHgxNiwweGRiLDB4MGYsMHhhYywKLSsJICAw eDQ0LDB4ZDUsMHhhNCwweGQ1LDB4ZDAsMHg4OSwweDJiLDB4ZDAsCi0rCSAgMHg0ZSwweDg2LDB4 NjQsMHgxMiwweGMwLDB4OTAsMHg3NywweDY4LAotKwkgIDB4ZjEsMHg4NywweGI3LDB4N2MsMHg0 ZiwweGFlLDB4MmMsMHgyZiwKLSsJICAweDIxLDB4YTUsMHhiNSwweDY1LDB4OWEsMHg0ZiwweDRi LDB4YTcsCi0rCSAgMHg0NywweDAyLDB4YTMsMHhkZSwweDliLDB4NTEsMHhmMSwweDQ1LAotKwkg IDB4YmQsMHg0ZiwweDI1LDB4MjcsMHg0MiwweDk4LDB4OTksMHgwNSB9Ci0rICAgIH0sCi0rfTsK LSsKLStpbnQgRklQU19zZWxmdGVzdF9obWFjKCkKLSsgICAgewotKyAgICBpbnQgbjsKLSsgICAg dW5zaWduZWQgaW50ICAgIG91dGxlbjsKLSsgICAgdW5zaWduZWQgY2hhciAgIG91dFtFVlBfTUFY X01EX1NJWkVdOwotKyAgICBjb25zdCBFVlBfTUQgICAqbWQ7Ci0rICAgIGNvbnN0IEhNQUNfS0FU ICp0OwotKwotKyAgICBmb3Iobj0wLHQ9dmVjdG9yOyBuPHNpemVvZih2ZWN0b3IpL3NpemVvZih2 ZWN0b3JbMF0pOyBuKyssdCsrKQotKwl7Ci0rCW1kID0gKCp0LT5hbGcpKCk7Ci0rCUhNQUMobWQs dC0+a2V5LHN0cmxlbih0LT5rZXkpLAotKwkJKGNvbnN0IHVuc2lnbmVkIGNoYXIgKil0LT5pdixz dHJsZW4odC0+aXYpLAotKwkJb3V0LCZvdXRsZW4pOwotKwotKwlpZihtZW1jbXAob3V0LHQtPmth dmFsLG91dGxlbikpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNU X0hNQUMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0K LSsJfQotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9udWxs IG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMKLS0tLSAvZGV2L251 bGwJMjAwOS0wOS0yMyAxMDo1NjowMi4xNDgwMDE3NTIgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4w LWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAw MDAwICswMjAwCi1AQCAtMCwwICsxLDQxMCBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJp Z2h0IChjKSAyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot KyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZl cnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAq ICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50Ogot KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wg VG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAg ICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg d2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVy bWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcu Ci0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90 IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4g dGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0 aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBm b3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xl ZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAq IEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsg KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwot KwotKy8qCi0rICogVGhpcyBpcyBhIEZJUFMgYXBwcm92ZWQgQUVTIFBSTkcgYmFzZWQgb24gQU5T SSBYOS4zMSBBLjIuNC4KLSsgKi8KLSsKLSsjaW5jbHVkZSAiZV9vcy5oIgotKwotKy8qIElmIHdl IGRvbid0IGRlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVELCBzdHJ1Y3QgdGltZXZhbCB3b24n dAotKyAgIGJlIGRlZmluZWQgYW5kIGdldHRpbWVvZmRheSgpIHdvbid0IGJlIGRlY2xhcmVkIHdp dGggc3RyaWN0IGNvbXBpbGVycwotKyAgIGxpa2UgREVDIEMgaW4gQU5TSSBDIG1vZGUuICAqLwot KyNpZm5kZWYgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAotKyNkZWZpbmUgX1hPUEVOX1NPVVJDRV9F WFRFTkRFRCAxCi0rI2VuZGlmCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2Flcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpZm5kZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsjaW5j bHVkZSA8c3lzL3RpbWUuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0rI2lmbmRl ZiBPUEVOU1NMX1NZU19XSU4zMgotKyMgaWZkZWYgT1BFTlNTTF9VTklTVEQKLSsjICBpbmNsdWRl IE9QRU5TU0xfVU5JU1RECi0rIyBlbHNlCi0rIyAgaW5jbHVkZSA8dW5pc3RkLmg+Ci0rIyBlbmRp ZgotKyNlbmRpZgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsK LSt2b2lkICpPUEVOU1NMX3N0ZGVycih2b2lkKTsKLSsKLSsjZGVmaW5lIEFFU19CTE9DS19MRU5H VEgJMTYKLSsKLSsKLSsvKiBBRVMgRklQUyBQUk5HIGltcGxlbWVudGF0aW9uICovCi0rCi0rdHlw ZWRlZiBzdHJ1Y3QgCi0rCXsKLSsJaW50IHNlZWRlZDsKLSsJaW50IGtleWVkOwotKwlpbnQgdGVz dF9tb2RlOwotKwlpbnQgc2Vjb25kOwotKwlpbnQgZXJyb3I7Ci0rCXVuc2lnbmVkIGxvbmcgY291 bnRlcjsKLSsJQUVTX0tFWSBrczsKLSsJaW50IHZwb3M7Ci0rCS8qIFRlbXBvcmFyeSBzdG9yYWdl IGZvciBrZXkgaWYgaXQgZXF1YWxzIHNlZWQgbGVuZ3RoICovCi0rCXVuc2lnbmVkIGNoYXIgdG1w X2tleVtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJdW5zaWduZWQgY2hhciBWW0FFU19CTE9DS19MRU5H VEhdOwotKwl1bnNpZ25lZCBjaGFyIERUW0FFU19CTE9DS19MRU5HVEhdOwotKwl1bnNpZ25lZCBj aGFyIGxhc3RbQUVTX0JMT0NLX0xFTkdUSF07Ci0rCX0gRklQU19QUk5HX0NUWDsKLSsKLStzdGF0 aWMgRklQU19QUk5HX0NUWCBzY3R4OwotKwotK3N0YXRpYyBpbnQgZmlwc19wcm5nX2ZhaWwgPSAw OwotKwotK3ZvaWQgRklQU19ybmdfc3RpY2sodm9pZCkKLSsJewotKwlmaXBzX3BybmdfZmFpbCA9 IDE7Ci0rCX0KLSsKLSt2b2lkIGZpcHNfcmFuZF9wcm5nX3Jlc2V0KEZJUFNfUFJOR19DVFggKmN0 eCkKLSsJewotKwljdHgtPnNlZWRlZCA9IDA7Ci0rCWN0eC0+a2V5ZWQgPSAwOwotKwljdHgtPnRl c3RfbW9kZSA9IDA7Ci0rCWN0eC0+Y291bnRlciA9IDA7Ci0rCWN0eC0+c2Vjb25kID0gMDsKLSsJ Y3R4LT5lcnJvciA9IDA7Ci0rCWN0eC0+dnBvcyA9IDA7Ci0rCU9QRU5TU0xfY2xlYW5zZShjdHgt PlYsIEFFU19CTE9DS19MRU5HVEgpOwotKwlPUEVOU1NMX2NsZWFuc2UoJmN0eC0+a3MsIHNpemVv ZihBRVNfS0VZKSk7Ci0rCX0KLSsJCi0rCi0rc3RhdGljIGludCBmaXBzX3NldF9wcm5nX2tleShG SVBTX1BSTkdfQ1RYICpjdHgsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBGSVBTX1JB TkRfU0laRV9UIGtleWxlbikKLSsJewotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rCWlmIChr ZXlsZW4gIT0gMTYgJiYga2V5bGVuICE9IDI0ICYmIGtleWxlbiAhPSAzMikKLSsJCXsKLSsJCS8q IGVycm9yOiBpbnZhbGlkIGtleSBzaXplICovCi0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJQUVTX3Nl dF9lbmNyeXB0X2tleShrZXksIGtleWxlbiA8PCAzLCAmY3R4LT5rcyk7Ci0rCWlmIChrZXlsZW4g PT0gMTYpCi0rCQl7Ci0rCQltZW1jcHkoY3R4LT50bXBfa2V5LCBrZXksIDE2KTsKLSsJCWN0eC0+ a2V5ZWQgPSAyOwotKwkJfQotKwllbHNlCi0rCQljdHgtPmtleWVkID0gMTsKLSsJY3R4LT5zZWVk ZWQgPSAwOwotKwljdHgtPnNlY29uZCA9IDA7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGlj IGludCBmaXBzX3NldF9wcm5nX3NlZWQoRklQU19QUk5HX0NUWCAqY3R4LAotKwkJCWNvbnN0IHVu c2lnbmVkIGNoYXIgKnNlZWQsIEZJUFNfUkFORF9TSVpFX1Qgc2VlZGxlbikKLSsJewotKwlpbnQg aTsKLSsJaWYgKCFjdHgtPmtleWVkKQotKwkJcmV0dXJuIDA7Ci0rCS8qIEluIHRlc3QgbW9kZSBz ZWVkIGlzIGp1c3Qgc3VwcGxpZWQgZGF0YSAqLwotKwlpZiAoY3R4LT50ZXN0X21vZGUpCi0rCQl7 Ci0rCQlpZiAoc2VlZGxlbiAhPSBBRVNfQkxPQ0tfTEVOR1RIKQotKwkJCXJldHVybiAwOwotKwkJ bWVtY3B5KGN0eC0+Viwgc2VlZCwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCQljdHgtPnNlZWRlZCA9 IDE7Ci0rCQlyZXR1cm4gMTsKLSsJCX0KLSsJLyogT3V0c2lkZSB0ZXN0IG1vZGUgWE9SIHN1cHBs aWVkIGRhdGEgd2l0aCBleGlzdGluZyBzZWVkICovCi0rCWZvciAoaSA9IDA7IGkgPCBzZWVkbGVu OyBpKyspCi0rCQl7Ci0rCQljdHgtPlZbY3R4LT52cG9zKytdIF49IHNlZWRbaV07Ci0rCQlpZiAo Y3R4LT52cG9zID09IEFFU19CTE9DS19MRU5HVEgpCi0rCQkJewotKwkJCWN0eC0+dnBvcyA9IDA7 Ci0rCQkJLyogU3BlY2lhbCBjYXNlIGlmIGZpcnN0IHNlZWQgYW5kIGtleSBsZW5ndGggZXF1YWxz Ci0rIAkJCSAqIGJsb2NrIHNpemUgY2hlY2sga2V5IGFuZCBzZWVkIGRvIG5vdCBtYXRjaC4KLSsg CQkJICovIAotKwkJCWlmIChjdHgtPmtleWVkID09IDIpCi0rCQkJCXsKLSsJCQkJaWYgKCFtZW1j bXAoY3R4LT50bXBfa2V5LCBjdHgtPlYsIDE2KSkKLSsJCQkJCXsKLSsJCQkJCVJBTkRlcnIoUkFO RF9GX0ZJUFNfU0VUX1BSTkdfU0VFRCwKLSsJCQkJCQlSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9U X01BVENIX0tFWSk7Ci0rCQkJCQlyZXR1cm4gMDsKLSsJCQkJCX0KLSsJCQkJT1BFTlNTTF9jbGVh bnNlKGN0eC0+dG1wX2tleSwgMTYpOwotKwkJCQljdHgtPmtleWVkID0gMTsKLSsJCQkJfQotKwkJ CWN0eC0+c2VlZGVkID0gMTsKLSsJCQl9Ci0rCQl9Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0raW50 IGZpcHNfc2V0X3Rlc3RfbW9kZShGSVBTX1BSTkdfQ1RYICpjdHgpCi0rCXsKLSsJaWYgKGN0eC0+ a2V5ZWQpCi0rCQl7Ci0rCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1NFVF9URVNUX01PREUsUkFORF9S X1BSTkdfS0VZRUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWN0eC0+dGVzdF9tb2RlID0gMTsK LSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgRklQU19yYW5kX3Rlc3RfbW9kZSh2b2lkKQotKwl7 Ci0rCXJldHVybiBmaXBzX3NldF90ZXN0X21vZGUoJnNjdHgpOwotKwl9Ci0rCi0raW50IEZJUFNf cmFuZF9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpCi0rCXsKLSsJaWYgKCFzY3R4LnRlc3RfbW9k ZSkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORF9TRVRfRFQsUkFORF9SX05PVF9J Tl9URVNUX01PREUpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCW1lbWNweShzY3R4LkRULCBkdCwg QUVTX0JMT0NLX0xFTkdUSCk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIHZvaWQgZmlw c19nZXRfZHQoRklQU19QUk5HX0NUWCAqY3R4KQotKyAgICB7Ci0rI2lmZGVmIE9QRU5TU0xfU1lT X1dJTjMyCi0rCUZJTEVUSU1FIGZ0OwotKyNlbHNlCi0rCXN0cnVjdCB0aW1ldmFsIHR2OwotKyNl bmRpZgotKwl1bnNpZ25lZCBjaGFyICpidWYgPSBjdHgtPkRUOwotKwotKyNpZm5kZWYgR0VUUElE X0lTX01FQU5JTkdMRVNTCi0rCXVuc2lnbmVkIGxvbmcgcGlkOwotKyNlbmRpZgotKwotKyNpZmRl ZiBPUEVOU1NMX1NZU19XSU4zMgotKwlHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgmZnQpOwotKwli dWZbMF0gPSAodW5zaWduZWQgY2hhcikgKGZ0LmR3SGlnaERhdGVUaW1lICYgMHhmZik7Ci0rCWJ1 ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3SGlnaERhdGVUaW1lID4+IDgpICYgMHhmZik7 Ci0rCWJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3SGlnaERhdGVUaW1lID4+IDE2KSAm IDB4ZmYpOwotKwlidWZbM10gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0hpZ2hEYXRlVGltZSA+ PiAyNCkgJiAweGZmKTsKLSsJYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpIChmdC5kd0xvd0RhdGVU aW1lICYgMHhmZik7Ci0rCWJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3TG93RGF0ZVRp bWUgPj4gOCkgJiAweGZmKTsKLSsJYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dE YXRlVGltZSA+PiAxNikgJiAweGZmKTsKLSsJYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpICgoZnQu ZHdMb3dEYXRlVGltZSA+PiAyNCkgJiAweGZmKTsKLSsjZWxzZQotKwlnZXR0aW1lb2ZkYXkoJnR2 LE5VTEwpOwotKwlidWZbMF0gPSAodW5zaWduZWQgY2hhcikgKHR2LnR2X3NlYyAmIDB4ZmYpOwot KwlidWZbMV0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl9zZWMgPj4gOCkgJiAweGZmKTsKLSsJ YnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfc2VjID4+IDE2KSAmIDB4ZmYpOwotKwli dWZbM10gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl9zZWMgPj4gMjQpICYgMHhmZik7Ci0rCWJ1 Zls0XSA9ICh1bnNpZ25lZCBjaGFyKSAodHYudHZfdXNlYyAmIDB4ZmYpOwotKwlidWZbNV0gPSAo dW5zaWduZWQgY2hhcikgKCh0di50dl91c2VjID4+IDgpICYgMHhmZik7Ci0rCWJ1Zls2XSA9ICh1 bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4gMTYpICYgMHhmZik7Ci0rCWJ1Zls3XSA9ICh1 bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4gMjQpICYgMHhmZik7Ci0rI2VuZGlmCi0rCWJ1 Zls4XSA9ICh1bnNpZ25lZCBjaGFyKSAoY3R4LT5jb3VudGVyICYgMHhmZik7Ci0rCWJ1Zls5XSA9 ICh1bnNpZ25lZCBjaGFyKSAoKGN0eC0+Y291bnRlciA+PiA4KSAmIDB4ZmYpOwotKwlidWZbMTBd ID0gKHVuc2lnbmVkIGNoYXIpICgoY3R4LT5jb3VudGVyID4+IDE2KSAmIDB4ZmYpOwotKwlidWZb MTFdID0gKHVuc2lnbmVkIGNoYXIpICgoY3R4LT5jb3VudGVyID4+IDI0KSAmIDB4ZmYpOwotKwot KwljdHgtPmNvdW50ZXIrKzsKLSsKLSsKLSsjaWZuZGVmIEdFVFBJRF9JU19NRUFOSU5HTEVTUwot KwlwaWQ9KHVuc2lnbmVkIGxvbmcpZ2V0cGlkKCk7Ci0rCWJ1ZlsxMl0gPSAodW5zaWduZWQgY2hh cikgKHBpZCAmIDB4ZmYpOwotKwlidWZbMTNdID0gKHVuc2lnbmVkIGNoYXIpICgocGlkID4+IDgp ICYgMHhmZik7Ci0rCWJ1ZlsxNF0gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4gMTYpICYgMHhm Zik7Ci0rCWJ1ZlsxNV0gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4gMjQpICYgMHhmZik7Ci0r I2VuZGlmCi0rICAgIH0KLSsKLStzdGF0aWMgaW50IGZpcHNfcmFuZChGSVBTX1BSTkdfQ1RYICpj dHgsCi0rCQkJdW5zaWduZWQgY2hhciAqb3V0LCBGSVBTX1JBTkRfU0laRV9UIG91dGxlbikKLSsJ ewotKwl1bnNpZ25lZCBjaGFyIFJbQUVTX0JMT0NLX0xFTkdUSF0sIElbQUVTX0JMT0NLX0xFTkdU SF07Ci0rCXVuc2lnbmVkIGNoYXIgdG1wW0FFU19CTE9DS19MRU5HVEhdOwotKwlpbnQgaTsKLSsJ aWYgKGN0eC0+ZXJyb3IpCi0rCQl7Ci0rCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9S X1BSTkdfRVJST1IpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWlmICghY3R4LT5rZXllZCkKLSsJ CXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfTk9fS0VZX1NFVCk7Ci0rCQly ZXR1cm4gMDsKLSsJCX0KLSsJaWYgKCFjdHgtPnNlZWRlZCkKLSsJCXsKLSsJCVJBTkRlcnIoUkFO RF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19OT1RfU0VFREVEKTsKLSsJCXJldHVybiAwOwotKwkJ fQotKwlmb3IgKDs7KQotKwkJewotKwkJaWYgKCFjdHgtPnRlc3RfbW9kZSkKLSsJCQlmaXBzX2dl dF9kdChjdHgpOwotKwkJQUVTX2VuY3J5cHQoY3R4LT5EVCwgSSwgJmN0eC0+a3MpOwotKwkJZm9y IChpID0gMDsgaSA8IEFFU19CTE9DS19MRU5HVEg7IGkrKykKLSsJCQl0bXBbaV0gPSBJW2ldIF4g Y3R4LT5WW2ldOwotKwkJQUVTX2VuY3J5cHQodG1wLCBSLCAmY3R4LT5rcyk7Ci0rCQlmb3IgKGkg PSAwOyBpIDwgQUVTX0JMT0NLX0xFTkdUSDsgaSsrKQotKwkJCXRtcFtpXSA9IFJbaV0gXiBJW2ld OwotKwkJQUVTX2VuY3J5cHQodG1wLCBjdHgtPlYsICZjdHgtPmtzKTsKLSsJCS8qIENvbnRpbnVv dXMgUFJORyB0ZXN0ICovCi0rCQlpZiAoY3R4LT5zZWNvbmQpCi0rCQkJewotKwkJCWlmIChmaXBz X3BybmdfZmFpbCkKLSsJCQkJbWVtY3B5KGN0eC0+bGFzdCwgUiwgQUVTX0JMT0NLX0xFTkdUSCk7 Ci0rCQkJaWYgKCFtZW1jbXAoUiwgY3R4LT5sYXN0LCBBRVNfQkxPQ0tfTEVOR1RIKSkKLSsJCQkJ ewotKwkgICAgCQkJUkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9QUk5HX1NUVUNLKTsK LSsJCQkJY3R4LT5lcnJvciA9IDE7Ci0rCQkJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKLSsJ CQkJcmV0dXJuIDA7Ci0rCQkJCX0KLSsJCQl9Ci0rCQltZW1jcHkoY3R4LT5sYXN0LCBSLCBBRVNf QkxPQ0tfTEVOR1RIKTsKLSsJCWlmICghY3R4LT5zZWNvbmQpCi0rCQkJewotKwkJCWN0eC0+c2Vj b25kID0gMTsKLSsJCQlpZiAoIWN0eC0+dGVzdF9tb2RlKQotKwkJCQljb250aW51ZTsKLSsJCQl9 Ci0rCi0rCQlpZiAob3V0bGVuIDw9IEFFU19CTE9DS19MRU5HVEgpCi0rCQkJewotKwkJCW1lbWNw eShvdXQsIFIsIG91dGxlbik7Ci0rCQkJYnJlYWs7Ci0rCQkJfQotKwotKwkJbWVtY3B5KG91dCwg UiwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCQlvdXQgKz0gQUVTX0JMT0NLX0xFTkdUSDsKLSsJCW91 dGxlbiAtPSBBRVNfQkxPQ0tfTEVOR1RIOwotKwkJfQotKwlyZXR1cm4gMTsKLSsJfQotKwotKwot K2ludCBGSVBTX3JhbmRfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIEZJUFNfUkFO RF9TSVpFX1Qga2V5bGVuKQotKwl7Ci0rCWludCByZXQ7Ci0rCUNSWVBUT193X2xvY2soQ1JZUFRP X0xPQ0tfUkFORCk7Ci0rCXJldCA9IGZpcHNfc2V0X3Bybmdfa2V5KCZzY3R4LCBrZXksIGtleWxl bik7Ci0rCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0dXJuIHJldDsK LSsJfQotKwotK2ludCBGSVBTX3JhbmRfc2VlZChjb25zdCB2b2lkICpzZWVkLCBGSVBTX1JBTkRf U0laRV9UIHNlZWRsZW4pCi0rCXsKLSsJaW50IHJldDsKLSsJQ1JZUFRPX3dfbG9jayhDUllQVE9f TE9DS19SQU5EKTsKLSsJcmV0ID0gZmlwc19zZXRfcHJuZ19zZWVkKCZzY3R4LCBzZWVkLCBzZWVk bGVuKTsKLSsJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXR1cm4gcmV0 OwotKwl9Ci0rCi0rCi0raW50IEZJUFNfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIEZJ UFNfUkFORF9TSVpFX1QgY291bnQpCi0rCXsKLSsJaW50IHJldDsKLSsJQ1JZUFRPX3dfbG9jayhD UllQVE9fTE9DS19SQU5EKTsKLSsJcmV0ID0gZmlwc19yYW5kKCZzY3R4LCBvdXQsIGNvdW50KTsK LSsJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXR1cm4gcmV0OwotKwl9 Ci0rCi0raW50IEZJUFNfcmFuZF9zdGF0dXModm9pZCkKLSsJewotKwlpbnQgcmV0OwotKwlDUllQ VE9fcl9sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXQgPSBzY3R4LnNlZWRlZDsKLSsJQ1JZ UFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0r dm9pZCBGSVBTX3JhbmRfcmVzZXQodm9pZCkKLSsJewotKwlDUllQVE9fd19sb2NrKENSWVBUT19M T0NLX1JBTkQpOwotKwlmaXBzX3JhbmRfcHJuZ19yZXNldCgmc2N0eCk7Ci0rCUNSWVBUT193X3Vu bG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJfQotKwotK3N0YXRpYyB2b2lkIGZpcHNfZG9fcmFu ZF9zZWVkKGNvbnN0IHZvaWQgKnNlZWQsIEZJUFNfUkFORF9TSVpFX1Qgc2VlZGxlbikKLSsJewot KwlGSVBTX3JhbmRfc2VlZChzZWVkLCBzZWVkbGVuKTsKLSsJfQotKwotK3N0YXRpYyB2b2lkIGZp cHNfZG9fcmFuZF9hZGQoY29uc3Qgdm9pZCAqc2VlZCwgRklQU19SQU5EX1NJWkVfVCBzZWVkbGVu LAotKwkJCQkJZG91YmxlIGFkZF9lbnRyb3B5KQotKwl7Ci0rCUZJUFNfcmFuZF9zZWVkKHNlZWQs IHNlZWRsZW4pOwotKwl9Ci0rCi0rc3RhdGljIGNvbnN0IFJBTkRfTUVUSE9EIHJhbmRfZmlwc19t ZXRoPQotKyAgICB7Ci0rICAgIGZpcHNfZG9fcmFuZF9zZWVkLAotKyAgICBGSVBTX3JhbmRfYnl0 ZXMsCi0rICAgIEZJUFNfcmFuZF9yZXNldCwKLSsgICAgZmlwc19kb19yYW5kX2FkZCwKLSsgICAg RklQU19yYW5kX2J5dGVzLAotKyAgICBGSVBTX3JhbmRfc3RhdHVzCi0rICAgIH07Ci0rCi0rY29u c3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9tZXRob2Qodm9pZCkKLSt7Ci0rICByZXR1cm4gJnJh bmRfZmlwc19tZXRoOwotK30KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3Ns LTEuMC4wLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oCi0tLS0gL2Rldi9udWxsCTIwMDkt MDktMjMgMTA6NTY6MDIuMTQ4MDAxNzUyICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9j cnlwdG8vZmlwcy9maXBzX3JhbmQuaAkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIw MAotQEAgLTAsMCArMSw3NyBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAy MDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlz dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0 Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICog ICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBt YXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3 YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIg YW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNl IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAot KyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwg cGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50Ogot KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpZm5k ZWYgSEVBREVSX0ZJUFNfUkFORF9ICi0rI2RlZmluZSBIRUFERVJfRklQU19SQU5EX0gKLSsKLSsj aW5jbHVkZSAiZGVzLmgiCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKyNpZmRlZiAgX19j cGx1c3BsdXMKLStleHRlcm4gIkMiIHsKLSsjZW5kaWYKLSsKLStpbnQgRklQU19yYW5kX3NldF9r ZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBGSVBTX1JBTkRfU0laRV9UIGtleWxlbik7Ci0r aW50IEZJUFNfcmFuZF9zZWVkKGNvbnN0IHZvaWQgKmJ1ZiwgRklQU19SQU5EX1NJWkVfVCBudW0p OwotK2ludCBGSVBTX3JhbmRfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBGSVBTX1JBTkRfU0la RV9UIG91dGxlbik7Ci0rCi0raW50IEZJUFNfcmFuZF90ZXN0X21vZGUodm9pZCk7Ci0rdm9pZCBG SVBTX3JhbmRfcmVzZXQodm9pZCk7Ci0raW50IEZJUFNfcmFuZF9zZXRfZHQodW5zaWduZWQgY2hh ciAqZHQpOwotKwotK2ludCBGSVBTX3JhbmRfc3RhdHVzKHZvaWQpOwotKwotK2NvbnN0IFJBTkRf TUVUSE9EICpGSVBTX3JhbmRfbWV0aG9kKHZvaWQpOwotKwotKyNpZmRlZiAgX19jcGx1c3BsdXMK LSt9Ci0rI2VuZGlmCi0rI2VuZGlmCi0rI2VuZGlmCi1kaWZmIC11cCAvZGV2L251bGwgb3BlbnNz bC0xLjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYwotLS0tIC9kZXYv bnVsbAkyMDA5LTA5LTIzIDEwOjU2OjAyLjE0ODAwMTc1MiArMDIwMAotKysrIG9wZW5zc2wtMS4w LjAtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMJMjAwOS0wOS0zMCAxMzoy NTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMzcxIEBACi0rLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0 OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK LSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICog My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1l cyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNl ZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBv cGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wi IGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJt aXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlv bnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICog ICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBB TkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICog SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ REVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT IChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK LSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot KyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5k Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xf RklQUwotKwotKwotKwotK3R5cGVkZWYgc3RydWN0Ci0rCXsKLSsJdW5zaWduZWQgY2hhciBEVFsx Nl07Ci0rCXVuc2lnbmVkIGNoYXIgVlsxNl07Ci0rCXVuc2lnbmVkIGNoYXIgUlsxNl07Ci0rCX0g QUVTX1BSTkdfVFY7Ci0rCi0rLyogVGhlIGZvbGxvd2luZyB0ZXN0IHZlY3RvcnMgYXJlIHRha2Vu IGRpcmVjdGx5IGZyb20gdGhlIFJHTlZTIHNwZWMgKi8KLSsKLStzdGF0aWMgdW5zaWduZWQgY2hh ciBhZXNfMTI4X2tleVsxNl0gPQotKwkJezB4ZjMsMHhiMSwweDY2LDB4NmQsMHgxMywweDYwLDB4 NzIsMHg0MiwKLSsJCSAweGVkLDB4MDYsMHgxYywweGFiLDB4YjgsMHhkNCwweDYyLDB4MDJ9Owot KwotK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMTI4X3R2W10gPSB7Ci0rCXsKLSsJCQkJLyogRFQg Ki8KLSsJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCi0rCQkgMHhk NywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMiwweGY5fSwKLSsJCQkJLyogViAqLwotKwkJ ezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHg1OSww eDUzLDB4MWUsMHhkMSwweDNiLDB4YjAsMHhjMCwweDU1LAotKwkJIDB4ODQsMHg3OSwweDY2LDB4 ODUsMHhjMSwweDJmLDB4NzYsMHg0MX0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4 ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKLSsJCSAweGQ3LDB4MWQsMHg0 YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4ZmF9LAotKwkJCQkvKiBWICovCi0rCQl7MHhjMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDdjLDB4MjIsMHgyYyww eGY0LDB4Y2EsMHg4ZiwweGEyLDB4NGMsCi0rCQkgMHgxYywweDljLDB4YjYsMHg0MSwweGE5LDB4 ZjMsMHgyMiwweDBkfQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhlNiwweGIzLDB4 YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAotKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhi MCwweGU5LDB4MjIsMHhmYn0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGUwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4OGEsMHhhYSwweDAwLDB4MzksMHg2Niww eDY3LDB4NWIsMHhlNSwKLSsJCSAweDI5LDB4MTQsMHgyOCwweDgxLDB4YTksMHg0ZCwweDRlLDB4 Yzd9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4 MmEsMHgyMywweGZhLDB4NjIsCi0rCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgy MiwweGZjfSwKLSsJCQkJLyogViAqLwotKwkJezB4ZjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9 LAotKwkJCQkvKiBSICovCi0rCQl7MHg4OCwweGRkLDB4YTQsMHg1NiwweDMwLDB4MjQsMHgyMyww eGU1LAotKwkJIDB4ZjYsMHg5ZCwweGE1LDB4N2UsMHg3YiwweDk1LDB4YzcsMHgzYX0KLSsJfSwK LSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4 ZmEsMHg2MiwKLSsJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4ZmR9LAot KwkJCQkvKiBWICovCi0rCQl7MHhmOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8q IFIgKi8KLSsJCXsweDA1LDB4MjUsMHg5MiwweDQ2LDB4NjEsMHg3OSwweGQyLDB4Y2IsCi0rCQkg MHg3OCwweGM0LDB4MGIsMHgxNCwweDBhLDB4NWEsMHg5YSwweGM4fQotKwl9LAotKwl7Ci0rCQkJ CS8qIERUICovCi0rCQl7MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAot KwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4MjMsMHg3N30sCi0rCQkJCS8qIFYg Ki8KLSsJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0rCQkgMHhm ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlfSwKLSsJCQkJLyogUiAqLwotKwkJ ezB4MGQsMHhkNSwweGEwLDB4MzYsMHg3YSwweDU5LDB4MjYsMHhiYywKLSsJCSAweDQ4LDB4ZDks MHgzOCwweGJmLDB4ZjAsMHg4NSwweDhmLDB4ZWF9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8K LSsJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCi0rCQkgMHhkNyww eDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMywweDc4fSwKLSsJCQkJLyogViAqLwotKwkJezB4 ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLSsJCSAweGZmLDB4ZmYsMHhm ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmZ9LAotKwkJCQkvKiBSICovCi0rCQl7MHhhZSwweDUz LDB4ODcsMHhlZSwweDhjLDB4ZDksMHgxMiwweGY1LAotKwkJIDB4NzMsMHg1MywweGFlLDB4MDMs MHhmOSwweGQ1LDB4MTMsMHgzM30KLSsJfSwKLSt9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFy IGFlc18xOTJfa2V5WzI0XSA9Ci0rCQl7MHgxNSwweGQ4LDB4NzgsMHgwZCwweDYyLDB4ZDMsMHgy NSwweDZlLAotKwkJIDB4NDQsMHg2NCwweDEwLDB4MTMsMHg2MCwweDJiLDB4YTksMHhiYywKLSsJ CSAweDRhLDB4ZmIsMHhjYSwweGViLDB4NGMsMHg4YiwweDk5LDB4M2J9OwotKwotK3N0YXRpYyBB RVNfUFJOR19UViBhZXNfMTkyX3R2W10gPSB7Ci0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweDNm LDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCi0rCQkgMHhiZiwweDk5LDB4N2Qs MHhhNCwweDI0LDB4NzgsMHhmMywweDRifSwKLSsJCQkJLyogViAqLwotKwkJezB4ODAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHgxNywweDA3LDB4ZDUsMHgy OCwweDE5LDB4NzksMHgxZSwweGVmLAotKwkJIDB4YTUsMHgwYywweGJmLDB4MjUsMHhlNSwweDU2 LDB4YjQsMHg5M30KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4M2YsMHhkOCwweGZm LDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKLSsJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQs MHg3OCwweGYzLDB4NGN9LAotKwkJCQkvKiBWICovCi0rCQl7MHhjMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDkyLDB4OGQsMHhiZSwweDA3LDB4ZGQsMHhj NywweDU4LDB4YzAsCi0rCQkgMHg2ZiwweDM1LDB4NDEsMHg5YiwweDE3LDB4YzksMHhiZCwweDli fQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgw LDB4NjksMHg4YiwweGMxLAotKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMs MHg0ZH0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwK LSsJCQkJLyogUiAqLwotKwkJezB4ZDUsMHhkZSwweGY0LDB4NTAsMHhmMywweGI3LDB4MTAsMHg0 ZSwKLSsJCSAweGI4LDB4YzYsMHhmOCwweGNmLDB4ZTIsMHhiMSwweGNhLDB4YTJ9Ci0rCX0sCi0r CXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhi LDB4YzEsCi0rCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweDRlfSwKLSsJ CQkJLyogViAqLwotKwkJezB4ZjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwK LSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBS ICovCi0rCQl7MHhjZSwweDI5LDB4MDgsMHg0MywweGZjLDB4MzQsMHg0MSwweGU3LAotKwkJIDB4 NDcsMHg4ZiwweGIzLDB4NjYsMHgyYiwweDQ2LDB4YjEsMHhiYn0KLSsJfSwKLSsJewotKwkJCQkv KiBEVCAqLwotKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKLSsJ CSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4NGZ9LAotKwkJCQkvKiBWICov Ci0rCQl7MHhmOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsw eGIzLDB4MjYsMHgwZiwweGY1LDB4ZDYsMHhjYSwweGE4LDB4YmYsCi0rCQkgMHg4OSwweGI4LDB4 NWUsMHgyZiwweDIyLDB4NTYsMHg5MiwweDJmfQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0r CQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMxLAotKwkJIDB4YmYsMHg5 OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMsMHhjOX0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGZm LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0rCQkgMHhmZiwweGZmLDB4ZmYs MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlfSwKLSsJCQkJLyogUiAqLwotKwkJezB4MDUsMHhlYiww eDE4LDB4NTIsMHgzNCwweDQzLDB4MDAsMHg0MywKLSsJCSAweDZlLDB4NWEsMHhhNSwweGZlLDB4 N2IsMHgzMiwweGM0LDB4MmR9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweDNmLDB4 ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCi0rCQkgMHhiZiwweDk5LDB4N2QsMHhh NCwweDI0LDB4NzgsMHhmMywweGNhfSwKLSsJCQkJLyogViAqLwotKwkJezB4ZmYsMHhmZiwweGZm LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLSsJCSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYs MHhmZiwweGZmLDB4ZmZ9LAotKwkJCQkvKiBSICovCi0rCQl7MHgxNSwweDNjLDB4ZTgsMHhkMSww eDA0LDB4YzcsMHhhZCwweDUwLAotKwkJIDB4MGIsMHhmMCwweDA3LDB4MTYsMHhlNywweDU2LDB4 N2EsMHhlYX0KLSsJfSwKLSt9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18yNTZfa2V5 WzMyXSA9Ci0rCQl7MHg2ZCwweDE0LDB4MDYsMHg2YywweGI2LDB4ZDgsMHgyMSwweDJkLAotKwkJ IDB4ODIsMHg4ZCwweGZhLDB4ZjIsMHg3YSwweDAzLDB4YjcsMHg5ZiwKLSsJCSAweDBjLDB4Yzcs MHgzZSwweGNkLDB4NzYsMHhlYiwweGVlLDB4YjUsCi0rCQkgMHgyMSwweDA1LDB4OGMsMHg0Ziww eDMxLDB4N2EsMHg4MCwweGJifTsKLSsKLStzdGF0aWMgQUVTX1BSTkdfVFYgYWVzXzI1Nl90dltd ID0gewotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4 YTMsMHhiMCwweGQ1LAotKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWUsMHg4 OH0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJ CQkJLyogUiAqLwotKwkJezB4MzUsMHhjNywweGVmLDB4YTcsMHg3OCwweDRkLDB4MjksMHhiYywK LSsJCSAweDgyLDB4NzksMHg5OSwweGZiLDB4ZDAsMHhiMywweDNiLDB4NzJ9Ci0rCX0sCi0rCXsK LSsJCQkJLyogRFQgKi8KLSsJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4 ZDUsCi0rCQkgMHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZSwweDg5fSwKLSsJCQkJ LyogViAqLwotKwkJezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJ CSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICov Ci0rCQl7MHg2YywweGY0LDB4NDIsMHg1ZCwweGM3LDB4MDQsMHgxYSwweDQxLAotKwkJIDB4Mjgs MHgyYSwweDc4LDB4YTksMHhiMCwweDEyLDB4YzQsMHg5NX0KLSsJfSwKLSsJewotKwkJCQkvKiBE VCAqLwotKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKLSsJCSAw eGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDllLDB4OGF9LAotKwkJCQkvKiBWICovCi0r CQl7MHhlMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDE2 LDB4OTAsMHhhNCwweGZmLDB4N2IsMHg3ZSwweGI5LDB4MzAsCi0rCQkgMHhkYiwweDY3LDB4NGIs MHhhYywweDJkLDB4ZTEsMHhkMSwweDc1fQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7 MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAotKwkJIDB4ZjIsMHhhOSww eDRlLDB4MzQsMHg3NCwweDhlLDB4OWUsMHg4Yn0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGYwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4MTQsMHg2ZiwweGY1 LDB4OTUsMHhhMSwweDQ2LDB4NjUsMHgzMCwKLSsJCSAweGJjLDB4NTcsMHhlMiwweDRhLDB4Zjcs MHg0NSwweDYyLDB4MDV9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGRhLDB4M2Es MHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCi0rCQkgMHhmMiwweGE5LDB4NGUsMHgzNCww eDc0LDB4OGUsMHg5ZSwweDhjfSwKLSsJCQkJLyogViAqLwotKwkJezB4ZjgsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHg5NiwweGUyLDB4YjQsMHgxZSwweDY2 LDB4NWUsMHgwZiwweGE0LAotKwkJIDB4YzUsMHhjZCwweGEyLDB4MDcsMHhjYywweGI3LDB4OTQs MHg0MH0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMs MHgxZCwweGEzLDB4YjAsMHhkNSwKLSsJCSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSww eDlmLDB4MDZ9LAotKwkJCQkvKiBWICovCi0rCQl7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4 ZmYsMHhmZiwweGZmLAotKwkJIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhm ZX0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDYxLDB4Y2UsMHgxZCwweDZhLDB4NDgsMHg3NSwweDk3 LDB4MjgsCi0rCQkgMHg0YiwweDQxLDB4ZGUsMHgxOCwweDQ0LDB4NGYsMHg1NiwweGVjfQotKwl9 LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMs MHhiMCwweGQ1LAotKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWYsMHgwN30s Ci0rCQkJCS8qIFYgKi8KLSsJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4 ZmYsCi0rCQkgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmfSwKLSsJCQkJ LyogUiAqLwotKwkJezB4NTIsMHg4OSwweDU5LDB4NzksMHgyZCwweGFhLDB4MjgsMHhiMywKLSsJ CSAweGIwLDB4OGEsMHgzZSwweDcwLDB4ZmEsMHg3MSwweDU5LDB4ODR9Ci0rCX0sCi0rfTsKLSsK LSsKLSt2b2lkIEZJUFNfY29ycnVwdF9ybmcoKQotKyAgICB7Ci0rICAgIGFlc18xOTJfdHZbMF0u VlswXSsrOwotKyAgICB9Ci0rCi0rI2RlZmluZSBmaXBzX3JhbmRfdGVzdChrZXksIHR2KSBcCi0r CWRvX3JhbmRfdGVzdChrZXksIHNpemVvZiBrZXksIHR2LCBzaXplb2YodHYpL3NpemVvZihBRVNf UFJOR19UVikpCi0rCi0rc3RhdGljIGludCBkb19yYW5kX3Rlc3QodW5zaWduZWQgY2hhciAqa2V5 LCBpbnQga2V5bGVuLAotKwkJCUFFU19QUk5HX1RWICp0diwgaW50IG50dikKLSsJewotKwl1bnNp Z25lZCBjaGFyIFJbMTZdOwotKwlpbnQgaTsKLSsJaWYgKCFGSVBTX3JhbmRfc2V0X2tleShrZXks IGtleWxlbikpCi0rCQlyZXR1cm4gMDsKLSsJZm9yIChpID0gMDsgaSA8IG50djsgaSsrKQotKwkJ ewotKwkJRklQU19yYW5kX3NlZWQodHZbaV0uViwgMTYpOwotKwkJRklQU19yYW5kX3NldF9kdCh0 dltpXS5EVCk7Ci0rCQlGSVBTX3JhbmRfYnl0ZXMoUiwgMTYpOwotKwkJaWYgKG1lbWNtcChSLCB0 dltpXS5SLCAxNikpCi0rCQkJcmV0dXJuIDA7Ci0rCQl9Ci0rCXJldHVybiAxOwotKwl9Ci0rCQot KwotK2ludCBGSVBTX3NlbGZ0ZXN0X3JuZygpCi0rCXsKLSsJRklQU19yYW5kX3Jlc2V0KCk7Ci0r CWlmICghRklQU19yYW5kX3Rlc3RfbW9kZSgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQ U19TRUxGVEVTVF9STkcsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJ CX0KLSsJaWYgKCFmaXBzX3JhbmRfdGVzdChhZXNfMTI4X2tleSxhZXNfMTI4X3R2KQotKwkJfHwg IWZpcHNfcmFuZF90ZXN0KGFlc18xOTJfa2V5LCBhZXNfMTkyX3R2KQotKwkJfHwgIWZpcHNfcmFu ZF90ZXN0KGFlc18yNTZfa2V5LCBhZXNfMjU2X3R2KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19G X0ZJUFNfU0VMRlRFU1RfUk5HLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwkJcmV0dXJuIDA7 Ci0rCQl9Ci0rCUZJUFNfcmFuZF9yZXNldCgpOwotKwlyZXR1cm4gMTsKLSsJfQotKwotKyNlbmRp ZgotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvZmlw c19yYW5kdGVzdC5jCi0tLS0gL2Rldi9udWxsCTIwMDktMDktMjMgMTA6NTY6MDIuMTQ4MDAxNzUy ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0 LmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMjQ4IEBA Ci0rLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5j b20pCi0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFRoaXMgcGFja2FnZSBpcyBh biBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlw dHNvZnQuY29tKS4KLSsgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8g Y29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0rICogCi0rICogVGhpcyBsaWJyYXJ5IGlzIGZy ZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCi0rICog dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBj b25kaXRpb25zCi0rICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRp b24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSsgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3Qg anVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KLSsgKiBpbmNsdWRlZCB3 aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRl cm1zCi0rICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRz b2Z0LmNvbSkuCi0rICogCi0rICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQg YXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSsgKiB0aGUgY29kZSBhcmUgbm90IHRv IGJlIHJlbW92ZWQuCi0rICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBF cmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgotKyAqIGFzIHRoZSBhdXRob3Ig b2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0rICogVGhpcyBjYW4gYmUgaW4gdGhl IGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0rICogaW4g ZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2th Z2UuCi0rICogCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsg KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSsg KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotKyAqICAgIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQotKyAqICAgICBFcmljIFlv dW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0rICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMn IGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0rICogICAg YmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCi0rICogNC4gSWYg eW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRo ZXJlb2YpIGZyb20gCi0rICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2Rl KSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29m dC5jb20pIgotKyAqIAotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VO RyBgYEFTIElTJycgQU5ECi0rICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK LSsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09O VFJJQlVUT1JTIEJFIExJQUJMRQotKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0rICogREFNQUdFUyAo SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMKLSsgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotKyAqIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H IElOIEFOWSBXQVkKLSsgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0rICogU1VDSCBEQU1BR0UuCi0rICogCi0r ICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkg YXZhaWxhYmxlIHZlcnNpb24gb3IKLSsgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3Qg YmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKLSsgKiBjb3BpZWQg YW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0rICogW2luY2x1ZGlu ZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENv cHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoK LSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMK LSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVu U1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0r ICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVu IHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wu b3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK LSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws Ci0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsg Ki8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1 ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3Jh bmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKwotKyNpbmNsdWRlICJlX29zLmgi Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIFJBTkQgc3VwcG9ydFxuIik7Ci0rICAgIHJl dHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLSt0 eXBlZGVmIHN0cnVjdAotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgRFRbMTZdOwotKwl1bnNpZ25lZCBj aGFyIFZbMTZdOwotKwl1bnNpZ25lZCBjaGFyIFJbMTZdOwotKwl9IEFFU19QUk5HX01DVDsKLSsK LStzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMTI4X21jdF9rZXlbMTZdID0KLSsJezB4OWYsMHg1 YiwweDUxLDB4MjAsMHgwYiwweGYzLDB4MzQsMHhiNSwKLSsJIDB4ZDgsMHgyYiwweGU4LDB4YzMs MHg3MiwweDU1LDB4YzgsMHg0OH07Ci0rCi0rc3RhdGljIEFFU19QUk5HX01DVCBhZXNfMTI4X21j dF90diA9IHsKLSsJCQkvKiBEVCAqLwotKwl7MHg2MywweDc2LDB4YmIsMHhlNSwweDI5LDB4MDIs MHhiYSwweDNiLAotKwkgMHg2NywweGM5LDB4MjUsMHhmYSwweDcwLDB4MWYsMHgxMSwweGFjfSwK LSsJCQkvKiBWICovCi0rCXsweDU3LDB4MmMsMHg4ZSwweDc2LDB4ODcsMHgyNiwweDQ3LDB4OTcs Ci0rCSAweDdlLDB4NzQsMHhmYiwweGRkLDB4YzQsMHg5NSwweDAxLDB4ZDF9LAotKwkJCS8qIFIg Ki8KLSsJezB4NDgsMHhlOSwweGJkLDB4MGQsMHgwNiwweGVlLDB4MTgsMHhmYiwKLSsJIDB4ZTQs MHg1NywweDkwLDB4ZDUsMHhjMywweGZjLDB4OWIsMHg3M30KLSt9OwotKwotK3N0YXRpYyB1bnNp Z25lZCBjaGFyIGFlc18xOTJfbWN0X2tleVsyNF0gPQotKwl7MHhiNywweDZjLDB4MzQsMHhkMSww eDA5LDB4NjcsMHhhYiwweDczLAotKwkgMHg0ZCwweDVhLDB4ZDUsMHgzNCwweDk4LDB4MTYsMHgw YiwweDkxLAotKwkgMHhiYywweDM1LDB4NTEsMHgxNiwweDZiLDB4YWUsMHg5MywweDhhfTsKLSsK LStzdGF0aWMgQUVTX1BSTkdfTUNUIGFlc18xOTJfbWN0X3R2ID0gewotKwkJCS8qIERUICovCi0r CXsweDg0LDB4Y2UsMHgyMiwweDdkLDB4OTEsMHg1YSwweGEzLDB4YzksCi0rCSAweDg0LDB4M2Ms MHgwYSwweGIzLDB4YTksMHg2MywweDE1LDB4NTJ9LAotKwkJCS8qIFYgKi8KLSsJezB4YjYsMHhh ZiwweGU2LDB4OGYsMHg5OSwweDllLDB4OTAsMHg2NCwKLSsJIDB4ZGQsMHhjNywweDdhLDB4YzEs MHhiYiwweDkwLDB4M2EsMHg2ZH0sCi0rCQkJLyogUiAqLwotKwl7MHhmYywweDg1LDB4NjAsMHg5 YSwweDI5LDB4NmYsMHhlZiwweDIxLAotKwkgMHhkZCwweDg2LDB4MjAsMHgzMiwweDhhLDB4Mjks MHg2ZiwweDQ3fQotK307Ci0rCi0rc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9tY3Rfa2V5 WzMyXSA9Ci0rCXsweDliLDB4MDUsMHhjOCwweDY4LDB4ZmYsMHg0NywweGY4LDB4M2EsCi0rCSAw eGE2LDB4M2EsMHhhOCwweGNiLDB4NGUsMHg3MSwweGIyLDB4ZTAsCi0rCSAweGI4LDB4N2UsMHhm MSwweDM3LDB4YjYsMHhiNCwweGY2LDB4NmQsCi0rCSAweDg2LDB4MzIsMHhmYywweDFmLDB4NWUs MHgxZCwweDFlLDB4NTB9OwotKwotK3N0YXRpYyBBRVNfUFJOR19NQ1QgYWVzXzI1Nl9tY3RfdHYg PSB7Ci0rCQkJLyogRFQgKi8KLSsJezB4MzEsMHg2ZSwweDM1LDB4OWEsMHhiMSwweDQ0LDB4ZjAs MHhlZSwKLSsJIDB4NjIsMHg2ZCwweDA0LDB4NDYsMHhlMCwweGEzLDB4OTIsMHg0Y30sCi0rCQkJ LyogViAqLwotKwl7MHg0ZiwweGNkLDB4YzEsMHg4NywweDgyLDB4MWYsMHg0ZCwweGExLAotKwkg MHgzZSwweDBlLDB4NTYsMHg0NCwweDU5LDB4ZTgsMHg4MywweGNhfSwKLSsJCQkvKiBSICovCi0r CXsweGM4LDB4ODcsMHhjMiwweDYxLDB4NWIsMHhkMCwweGI5LDB4ZTEsCi0rCSAweGU3LDB4ZjMs MHg4YiwweGQ3LDB4NWIsMHhkNSwweGYxLDB4OGR9Ci0rfTsKLSsKLStzdGF0aWMgdm9pZCBkdW1w KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmIsaW50IG4pCi0rICAgIHsKLSsgICAgd2hpbGUobi0tID4g MCkKLSsJewotKwlwcmludGYoIiAlMDJ4IiwqYisrKTsKLSsJfQotKyAgICB9Ci0rCi0rc3RhdGlj IHZvaWQgY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFyICpyZXN1bHQsY29uc3QgdW5zaWduZWQg Y2hhciAqZXhwZWN0ZWQsCi0rCQkgICAgaW50IG4pCi0rICAgIHsKLSsgICAgaW50IGk7Ci0rCi0r ICAgIGZvcihpPTAgOyBpIDwgbiA7ICsraSkKLSsJaWYocmVzdWx0W2ldICE9IGV4cGVjdGVkW2ld KQotKwkgICAgewotKwkgICAgcHV0cygiUmFuZG9tIHRlc3QgZmFpbGVkLCBnb3Q6Iik7Ci0rCSAg ICBkdW1wKHJlc3VsdCxuKTsKLSsJICAgIHB1dHMoIlxuICAgICAgICAgICAgICAgZXhwZWN0ZWQ6 Iik7Ci0rCSAgICBkdW1wKGV4cGVjdGVkLG4pOwotKwkgICAgcHV0Y2hhcignXG4nKTsKLSsJICAg IEVYSVQoMSk7Ci0rCSAgICB9Ci0rICAgIH0KLSsKLSsKLStzdGF0aWMgdm9pZCBydW5fdGVzdCh1 bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIEFFU19QUk5HX01DVCAqdHYpCi0rICAgIHsK LSsgICAgdW5zaWduZWQgY2hhciBidWZbMTZdLCBkdFsxNl07Ci0rICAgIGludCBpLCBqOwotKyAg ICBGSVBTX3JhbmRfcmVzZXQoKTsKLSsgICAgRklQU19yYW5kX3Rlc3RfbW9kZSgpOwotKyAgICBG SVBTX3JhbmRfc2V0X2tleShrZXksIGtleWxlbik7Ci0rICAgIEZJUFNfcmFuZF9zZWVkKHR2LT5W LCAxNik7Ci0rICAgIG1lbWNweShkdCwgdHYtPkRULCAxNik7Ci0rICAgIGZvciAoaSA9IDA7IGkg PCAxMDAwMDsgaSsrKQotKwl7Ci0rICAgIAlGSVBTX3JhbmRfc2V0X2R0KGR0KTsKLSsJRklQU19y YW5kX2J5dGVzKGJ1ZiwgMTYpOwotKwkvKiBJbmNyZW1lbnQgRFQgKi8KLSsJZm9yIChqID0gMTU7 IGogPj0gMDsgai0tKQotKwkJewotKwkJZHRbal0rKzsKLSsJCWlmIChkdFtqXSkKLSsJCQlicmVh azsKLSsJCX0KLSsJfQotKwotKyAgICBjb21wYXJlKGJ1Zix0di0+UiwgMTYpOwotKyAgICB9Ci0r Ci0raW50IG1haW4oKQotKwl7Ci0rCXJ1bl90ZXN0KGFlc18xMjhfbWN0X2tleSwgMTYsICZhZXNf MTI4X21jdF90dik7Ci0rCXByaW50ZigiRklQUyBQUk5HIHRlc3QgMSBkb25lXG4iKTsKLSsJcnVu X3Rlc3QoYWVzXzE5Ml9tY3Rfa2V5LCAyNCwgJmFlc18xOTJfbWN0X3R2KTsKLSsJcHJpbnRmKCJG SVBTIFBSTkcgdGVzdCAyIGRvbmVcbiIpOwotKwlydW5fdGVzdChhZXNfMjU2X21jdF9rZXksIDMy LCAmYWVzXzI1Nl9tY3RfdHYpOwotKwlwcmludGYoIkZJUFMgUFJORyB0ZXN0IDMgZG9uZVxuIik7 Ci0rCXJldHVybiAwOwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCAvZGV2L251bGwgb3BlbnNz bC0xLjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jCi0tLS0gL2Rldi9u dWxsCTIwMDktMDktMjMgMTA6NTY6MDIuMTQ4MDAxNzUyICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jCTIwMDktMDktMzAgMTM6MjU6 NTguMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDQzOSBAQAotKy8qID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0r ICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUg bWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0r ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBu YW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUg dXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBG b3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29y ZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5T U0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBw ZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1 dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0r ICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMn JyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0r ICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9y c2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xf RklQUwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG5bXSA9Ci0rIlx4MDBceEJCXHhGOFx4MkZc eDA5XHgwNlx4ODJceENFXHg5Q1x4MjNceDM4XHhBQ1x4MkJceDlEXHhBOFx4NzEiCi0rIlx4Rjdc eDM2XHg4RFx4MDdceEVFXHhENFx4MTBceDQzXHhBNFx4NDBceEQ2XHhCNlx4RjBceDc0XHg1NFx4 RjUiCi0rIlx4MUZceEI4XHhERlx4QkFceEFGXHgwM1x4NUNceDAyXHhBQlx4NjFceEVBXHg0OFx4 Q0VceEVCXHg2Rlx4Q0QiCi0rIlx4NDhceDc2XHhFRFx4NTJceDBEXHg2MFx4RTFceEVDXHg0Nlx4 MTlceDcxXHg5RFx4OEFceDVCXHg4Qlx4ODAiCi0rIlx4N0ZceEFGXHhCOFx4RTBceEEzXHhERlx4 QzdceDM3XHg3Mlx4M0VceEU2XHhCNFx4QjdceEQ5XHgzQVx4MjUiCi0rIlx4ODRceEVFXHg2QVx4 NjRceDlEXHgwNlx4MDlceDUzXHg3NFx4ODhceDM0XHhCMlx4NDVceDQ1XHg5OFx4MzkiCi0rIlx4 NEVceEUwXHhBQVx4QjFceDJEXHg3Qlx4NjFceEE1XHgxRlx4NTJceDdBXHg5QVx4NDFceEY2XHhD MVx4NjgiCi0rIlx4N0ZceEUyXHg1M1x4NzJceDk4XHhDQVx4MkFceDhGXHg1OVx4NDZceEY4XHhF NVx4RkRceDA5XHgxRFx4QkQiCi0rIlx4Q0IiOwotKwotKwotK3N0YXRpYyBpbnQgc2V0cnNha2V5 KFJTQSAqa2V5KQotKyAgICB7Ci0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVbXSA9 ICJceDExIjsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZFtdID0KLSsiXHgw MFx4QTVceERBXHhGQ1x4NTNceDQxXHhGQVx4RjJceDg5XHhDNFx4QjlceDg4XHhEQlx4MzBceEMx XHhDRCIKLSsiXHhGOFx4M0ZceDMxXHgyNVx4MUVceDA2XHg2OFx4QjRceDI3XHg4NFx4ODFceDM4 XHgwMVx4NTdceDk2XHg0MSIKLSsiXHhCMlx4OTRceDEwXHhCM1x4QzdceDk5XHg4RFx4NkJceEM0 XHg2NVx4NzRceDVFXHg1Q1x4MzlceDI2XHg2OSIKLSsiXHhENlx4ODdceDBEXHhBMlx4QzBceDgy XHhBOVx4MzlceEUzXHg3Rlx4RENceEI4XHgyRVx4QzlceDNFXHhEQSIKLSsiXHhDOVx4N0ZceEYz XHhBRFx4NTlceDUwXHhBQ1x4Q0ZceEJDXHgxMVx4MUNceDc2XHhGMVx4QTlceDUyXHg5NCIKLSsi XHg0NFx4RTVceDZBXHhBRlx4NjhceEM1XHg2Q1x4MDlceDJDXHhEM1x4OERceEMzXHhCRVx4RjVc eEQyXHgwQSIKLSsiXHg5M1x4OTlceDI2XHhFRFx4NEZceDc0XHhBMVx4M0VceEREXHhGQlx4RTFc eEExXHhDRVx4Q0NceDQ4XHg5NCIKLSsiXHhBRlx4OTRceDI4XHhDMlx4QjdceEI4XHg4OFx4M0Zc eEU0XHg0Nlx4M0FceDRCXHhDOFx4NUJceDFDXHhCMyIKLSsiXHhDMSI7Ci0rCi0rICAgIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHBbXSA9Ci0rIlx4MDBceEVFXHhDRlx4QUVceDgxXHhCMVx4 QjlceEIzXHhDOVx4MDhceDgxXHgwQlx4MTBceEExXHhCNVx4NjAiCi0rIlx4MDFceDk5XHhFQlx4 OUZceDQ0XHhBRVx4RjRceEZEXHhBNFx4OTNceEI4XHgxQVx4OUVceDNEXHg4NFx4RjYiCi0rIlx4 MzJceDEyXHg0RVx4RjBceDIzXHg2RVx4NURceDFFXHgzQlx4N0VceDI4XHhGQVx4RTdceEFBXHgw NFx4MEEiCi0rIlx4MkRceDVCXHgyNVx4MjFceDc2XHg0NVx4OURceDFGXHgzOVx4NzVceDQxXHhC QVx4MkFceDU4XHhGQlx4NjUiCi0rIlx4OTkiOwotKwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBxW10gPQotKyJceDAwXHhDOVx4N0ZceEIxXHhGMFx4MjdceEY0XHg1M1x4RjZceDM0 XHgxMlx4MzNceEVBXHhBQVx4RDFceEQ5IgotKyJceDM1XHgzRlx4NkNceDQyXHhEMFx4ODhceDY2 XHhCMVx4RDBceDVBXHgwRlx4MjBceDM1XHgwMlx4OEJceDlEIgotKyJceDg2XHg5OFx4NDBceEI0 XHgxNlx4NjZceEI0XHgyRVx4OTJceEVBXHgwRFx4QTNceEI0XHgzMlx4MDRceEI1IgotKyJceENG XHhDRVx4MzNceDUyXHg1Mlx4NERceDA0XHgxNlx4QTVceEE0XHg0MVx4RTdceDAwXHhBRlx4NDZc eDE1IgotKyJceDAzIjsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZG1wMVtd ID0KLSsiXHg1NFx4NDlceDRDXHhBNlx4M0VceEJBXHgwM1x4MzdceEU0XHhFMlx4NDBceDIzXHhG Q1x4RDZceDlBXHg1QSIKLSsiXHhFQlx4MDdceEREXHhEQ1x4MDFceDgzXHhBNFx4RDBceEFDXHg5 Qlx4NTRceEIwXHg1MVx4RjJceEIxXHgzRSIKLSsiXHhEOVx4NDlceDA5XHg3NVx4RUFceEI3XHg3 NFx4MTRceEZGXHg1OVx4QzFceEY3XHg2OVx4MkVceDlBXHgyRSIKLSsiXHgyMFx4MkJceDM4XHhG Q1x4OTFceDBBXHg0N1x4NDFceDc0XHhBRFx4QzlceDNDXHgxRlx4NjdceEM5XHg4MSI7Ci0rCi0r ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRtcTFbXSA9Ci0rIlx4NDdceDFFXHgwMlx4 OTBceEZGXHgwQVx4RjBceDc1XHgwM1x4NTFceEI3XHhGOFx4NzhceDg2XHg0Q1x4QTkiCi0rIlx4 NjFceEFEXHhCRFx4M0FceDhBXHg3RVx4OTlceDFDXHg1Q1x4MDVceDU2XHhBOVx4NENceDMxXHg0 Nlx4QTciCi0rIlx4RjlceDgwXHgzRlx4OEZceDZGXHg4QVx4RTNceDQyXHhFOVx4MzFceEZEXHg4 QVx4RTRceDdBXHgyMlx4MEQiCi0rIlx4MUJceDk5XHhBNFx4OTVceDg0XHg5OFx4MDdceEZFXHgz OVx4RjlceDI0XHg1QVx4OThceDM2XHhEQVx4M0QiOwotKyAgICAKLSsgICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaXFtcFtdID0KLSsiXHgwMFx4QjBceDZDXHg0Rlx4REFceEJCXHg2M1x4 MDFceDE5XHg4RFx4MjZceDVCXHhEQlx4QUVceDk0XHgyMyIKLSsiXHhCM1x4ODBceEYyXHg3MVx4 RjdceDM0XHg1M1x4ODhceDUwXHg5M1x4MDdceDdGXHhDRFx4MzlceEUyXHgxMSIKLSsiXHg5Rlx4 QzlceDg2XHgzMlx4MTVceDRGXHg1OFx4ODNceEIxXHg2N1x4QTlceDY3XHhCRlx4NDBceDJCXHg0 RSIKLSsiXHg5RVx4MkVceDBGXHg5Nlx4NTZceEU2XHg5OFx4RUFceDM2XHg2Nlx4RURceEZCXHgy NVx4NzlceDgwXHgzOSIKLSsiXHhGNyI7Ci0rCi0rICAgIGtleS0+biA9IEJOX2JpbjJibihuLCBz aXplb2YobiktMSwga2V5LT5uKTsKLSsgICAga2V5LT5lID0gQk5fYmluMmJuKGUsIHNpemVvZihl KS0xLCBrZXktPmUpOwotKyAgICBrZXktPmQgPSBCTl9iaW4yYm4oZCwgc2l6ZW9mKGQpLTEsIGtl eS0+ZCk7Ci0rICAgIGtleS0+cCA9IEJOX2JpbjJibihwLCBzaXplb2YocCktMSwga2V5LT5wKTsK LSsgICAga2V5LT5xID0gQk5fYmluMmJuKHEsIHNpemVvZihxKS0xLCBrZXktPnEpOwotKyAgICBr ZXktPmRtcDEgPSBCTl9iaW4yYm4oZG1wMSwgc2l6ZW9mKGRtcDEpLTEsIGtleS0+ZG1wMSk7Ci0r ICAgIGtleS0+ZG1xMSA9IEJOX2JpbjJibihkbXExLCBzaXplb2YoZG1xMSktMSwga2V5LT5kbXEx KTsKLSsgICAga2V5LT5pcW1wID0gQk5fYmluMmJuKGlxbXAsIHNpemVvZihpcW1wKS0xLCBrZXkt PmlxbXApOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotK3ZvaWQgRklQU19jb3JydXB0X3Jz YSgpCi0rICAgIHsKLSsgICAgblswXSsrOwotKyAgICB9Ci0rCi0rLyogS25vd24gQW5zd2VyIFRl c3QgKEtBVCkgZGF0YSBmb3IgdGhlIGFib3ZlIFJTQSBwcml2YXRlIGtleSBzaWduaW5nCi0rICog a2F0X3Ricy4KLSsgKi8KLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfdGJzW10g PSAiT3BlblNTTCBGSVBTIDE0MC0yIFB1YmxpYyBLZXkgUlNBIEtBVCI7Ci0rCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMVtdID0gewotKyAgMHgyRCwgMHhBRiwg MHg2RSwgMHhDMiwgMHg5OCwgMHhGQiwgMHg4QSwgMHhBMSwgMHhCOSwgMHg0NiwgMHhEQSwgMHgw RiwKLSsgIDB4MDEsIDB4MUUsIDB4MzcsIDB4OTMsIDB4QzIsIDB4NTUsIDB4MjcsIDB4RTQsIDB4 MUQsIDB4RDIsIDB4OTAsIDB4QkIsCi0rICAweEY0LCAweEJGLCAweDRBLCAweDc0LCAweDM5LCAw eDUxLCAweEJCLCAweEU4LCAweDBDLCAweEI3LCAweEY4LCAweEQzLAotKyAgMHhEMSwgMHhERiwg MHhFNywgMHhCRSwgMHg4MCwgMHgwNSwgMHhDMywgMHhCNSwgMHhDNywgMHg4MywgMHhENSwgMHg0 QywKLSsgIDB4N0YsIDB4NDksIDB4RkIsIDB4M0YsIDB4MjksIDB4OUIsIDB4RTEsIDB4MTIsIDB4 NTEsIDB4NjAsIDB4RDAsIDB4QTcsCi0rICAweDBELCAweEE5LCAweDI4LCAweDU2LCAweDczLCAw eEQ5LCAweDA3LCAweEUzLCAweDVFLCAweDNGLCAweDlCLCAweEY1LAotKyAgMHhCNiwgMHhGMywg MHhGMiwgMHg1RSwgMHg3NCwgMHhDOSwgMHg4MywgMHg4MSwgMHg0NywgMHhGMCwgMHhDNSwgMHg0 NSwKLSsgIDB4MEEsIDB4RTksIDB4OEUsIDB4MzgsIDB4RDcsIDB4MTgsIDB4QzYsIDB4MkEsIDB4 MEYsIDB4RjgsIDB4QjcsIDB4MzEsCi0rICAweEQ2LCAweDU1LCAweEU0LCAweDY2LCAweDc4LCAw eDgxLCAweEQ0LCAweEU2LCAweERCLCAweDlGLCAweEJBLCAweEU4LAotKyAgMHgyMywgMHhCNSwg MHg3RiwgMHhEQywgMHgwOCwgMHhFQSwgMHhENSwgMHgyNiwgMHgxRSwgMHgyMCwgMHgyNSwgMHg4 NCwKLSsgIDB4MjYsIDB4QzYsIDB4NzksIDB4QzksIDB4OUIsIDB4M0QsIDB4N0UsIDB4QTkKLSt9 OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTIyNFtdID0g ewotKyAgMHgzOSwgMHg0QSwgMHg2QSwgMHgyMCwgMHhCQywgMHhFOSwgMHgzMywgMHhFRCwgMHhF RiwgMHhDNSwgMHg1OCwgMHhBNywKLSsgIDB4RkUsIDB4ODEsIDB4QzQsIDB4MzYsIDB4NTAsIDB4 OUEsIDB4MkMsIDB4ODIsIDB4OTgsIDB4MDgsIDB4OTUsIDB4RkEsCi0rICAweEIxLCAweDlFLCAw eEQyLCAweDU1LCAweDYxLCAweDg3LCAweDIxLCAweDU5LCAweDg3LCAweDdCLCAweDFGLCAweDU3 LAotKyAgMHgzMCwgMHg5RCwgMHgwRCwgMHg0QSwgMHgwNiwgMHhFQiwgMHg1MiwgMHgzNywgMHg1 NSwgMHg1NCwgMHgxQywgMHg4OSwKLSsgIDB4ODMsIDB4NzUsIDB4NTksIDB4NjUsIDB4NjQsIDB4 OTAsIDB4MkUsIDB4MTYsIDB4Q0MsIDB4ODYsIDB4MDUsIDB4RUUsCi0rICAweEIxLCAweEU2LCAw eDdCLCAweEJBLCAweDE2LCAweDc1LCAweDBELCAweDBDLCAweDY0LCAweDBCLCAweEFCLCAweDIy LAotKyAgMHgxNSwgMHg3OCwgMHg2QiwgMHg2RiwgMHhBNCwgMHhGQiwgMHg3NywgMHg0MCwgMHg2 NCwgMHg2MiwgMHhEMSwgMHhCNSwKLSsgIDB4MzcsIDB4MUUsIDB4RTAsIDB4M0QsIDB4QTgsIDB4 RjksIDB4RDIsIDB4QkQsIDB4QUEsIDB4MzgsIDB4MjQsIDB4NDksCi0rICAweDU4LCAweEQyLCAw eDc0LCAweDg1LCAweEY0LCAweEI1LCAweDkzLCAweDhFLCAweEY1LCAweDAzLCAweEVBLCAweDJE LAotKyAgMHhDOCwgMHg1MiwgMHhGQSwgMHhDRiwgMHg3RSwgMHgzNSwgMHhCMCwgMHg2QSwgMHhB RiwgMHg5NSwgMHhDMCwgMHgwMCwKLSsgIDB4NTQsIDB4NzYsIDB4M0QsIDB4MEMsIDB4OUMsIDB4 QjIsIDB4RUUsIDB4QzAKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9S U0FfUFNTX1NIQTI1NltdID0gewotKyAgMHg2RCwgMHgzRCwgMHhCRSwgMHg4RiwgMHg2MCwgMHg2 RCwgMHgyNSwgMHgxNCwgMHhGMCwgMHgzMSwgMHhFMywgMHg4OSwKLSsgIDB4MDAsIDB4OTcsIDB4 RkEsIDB4OTksIDB4NzEsIDB4MjgsIDB4RTUsIDB4MTAsIDB4MjUsIDB4OUEsIDB4RjMsIDB4OEYs Ci0rICAweDdCLCAweEM1LCAweEE4LCAweDRBLCAweDc0LCAweDUxLCAweDM2LCAweEUyLCAweDhE LCAweDdELCAweDczLCAweDI4LAotKyAgMHhDMSwgMHg3NywgMHhDNiwgMHgyNywgMHg5NywgMHgw MCwgMHg4QiwgMHgwMCwgMHhBMywgMHg5NiwgMHg3MywgMHg0RSwKLSsgIDB4N0QsIDB4MkUsIDB4 MkMsIDB4MzQsIDB4NjgsIDB4OEMsIDB4OEUsIDB4REYsIDB4OUQsIDB4NDksIDB4NDcsIDB4MDUs Ci0rICAweEFCLCAweEY1LCAweDAxLCAweEQ2LCAweDgxLCAweDQ3LCAweDcwLCAweEY1LCAweDFE LCAweDZELCAweDI2LCAweEJBLAotKyAgMHgyRiwgMHg3QSwgMHg1NCwgMHg1MywgMHg0RSwgMHhF RCwgMHg3MSwgMHhEOSwgMHg1QSwgMHhGMywgMHhEQSwgMHhCNiwKLSsgIDB4MEIsIDB4NDcsIDB4 MzQsIDB4QUYsIDB4OTAsIDB4REMsIDB4QzgsIDB4RDksIDB4NkYsIDB4NTYsIDB4Q0QsIDB4OUYs Ci0rICAweDIxLCAweEI3LCAweDdFLCAweEFELCAweDdDLCAweDJGLCAweDc1LCAweDUwLCAweDQ3 LCAweDEyLCAweEU0LCAweDZELAotKyAgMHg1RiwgMHhCNywgMHgwMSwgMHhERiwgMHhDMywgMHgx MSwgMHg2QywgMHhBOSwgMHg5RSwgMHg0OSwgMHhCOSwgMHhGNiwKLSsgIDB4NzIsIDB4RjQsIDB4 RjYsIDB4RUYsIDB4ODgsIDB4MUUsIDB4MkQsIDB4MUMKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTM4NFtdID0gewotKyAgMHg0MCwgMHhGQiwgMHhB MSwgMHgyMSwgMHhGNCwgMHhCMiwgMHg0MCwgMHg5QSwgMHhCNCwgMHgzMSwgMHhBOCwgMHhGMiwK LSsgIDB4RUMsIDB4MUMsIDB4QzQsIDB4QzgsIDB4N0MsIDB4MjIsIDB4NjUsIDB4OUMsIDB4NTcs IDB4NDUsIDB4Q0QsIDB4NUUsCi0rICAweDg2LCAweDAwLCAweEY3LCAweDI1LCAweDc4LCAweERF LCAweERDLCAweDdBLCAweDcxLCAweDQ0LCAweDlBLCAweENELAotKyAgMHhBQSwgMHgyNSwgMHhG NCwgMHhCMiwgMHhGQywgMHhGMCwgMHg3NSwgMHhEOSwgMHgyRiwgMHg3OCwgMHgyMywgMHg3RiwK LSsgIDB4NkYsIDB4MDIsIDB4RUYsIDB4QzEsIDB4QUYsIDB4QTYsIDB4MjgsIDB4MTYsIDB4MzEs IDB4REMsIDB4NDIsIDB4NkMsCi0rICAweEIyLCAweDQ0LCAweEU1LCAweDRELCAweDY2LCAweEEy LCAweEU2LCAweDcxLCAweEYzLCAweEFDLCAweDRGLCAweEZCLAotKyAgMHg5MSwgMHhDQSwgMHhG NSwgMHg3MCwgMHhFRiwgMHg2QiwgMHg5RCwgMHhBNCwgMHhFRiwgMHhEOSwgMHgzRCwgMHgyRiwK LSsgIDB4M0EsIDB4QkUsIDB4ODksIDB4MzgsIDB4NTksIDB4MDEsIDB4QkEsIDB4REEsIDB4MzIs IDB4QUQsIDB4NDIsIDB4ODksCi0rICAweDk4LCAweDhCLCAweDM5LCAweDQ0LCAweEYwLCAweEZD LCAweDM4LCAweEFDLCAweDg3LCAweDFGLCAweENBLCAweDZGLAotKyAgMHg0OCwgMHhGNiwgMHhB RSwgMHhENywgMHg0NSwgMHhFRSwgMHhBRSwgMHg4OCwgMHgwRSwgMHg2MCwgMHhGNCwgMHg1NSwK LSsgIDB4NDgsIDB4NDQsIDB4RUUsIDB4MUYsIDB4OTAsIDB4MTgsIDB4NEIsIDB4RjEKLSt9Owot KwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTUxMltdID0gewot KyAgMHgwNywgMHgxRSwgMHhEOCwgMHhENSwgMHgwNSwgMHhFOCwgMHhFNiwgMHhFNiwgMHg1Nywg MHhBRSwgMHg2MywgMHg4QywKLSsgIDB4QzYsIDB4ODMsIDB4QjcsIDB4QTAsIDB4NTksIDB4QkIs IDB4RjIsIDB4QzYsIDB4OEYsIDB4MTIsIDB4NTMsIDB4OUEsCi0rICAweDlCLCAweDU0LCAweDlF LCAweEIzLCAweEMxLCAweDFELCAweDIzLCAweDRELCAweDUxLCAweEVELCAweDlFLCAweERELAot KyAgMHg0QiwgMHhGMywgMHg0NiwgMHg5QiwgMHg2QiwgMHhGNiwgMHg3QywgMHgyNCwgMHg2MCwg MHg3OSwgMHgyMywgMHgzOSwKLSsgIDB4MDEsIDB4MUMsIDB4NTEsIDB4Q0IsIDB4RDgsIDB4RTks IDB4OUEsIDB4MDEsIDB4NjcsIDB4NUYsIDB4RkUsIDB4RDcsCi0rICAweDdDLCAweEUzLCAweDdG LCAweEVELCAweERCLCAweDg3LCAweEJCLCAweEYwLCAweDNELCAweDc4LCAweDU1LCAweDYxLAot KyAgMHg1NywgMHhFMywgMHgwRiwgMHhFMywgMHhEMiwgMHg5RCwgMHgwQywgMHgyQSwgMHgyMCwg MHhCMCwgMHg4NSwgMHgxMywKLSsgIDB4QzUsIDB4NDcsIDB4MzQsIDB4MEQsIDB4MzIsIDB4MTUs IDB4QzgsIDB4QUUsIDB4OUEsIDB4NkEsIDB4MzksIDB4NjMsCi0rICAweDJELCAweDYwLCAweEY1 LCAweDRDLCAweERGLCAweDhBLCAweDQ4LCAweDRCLCAweEJGLCAweEY0LCAweEE4LCAweEZFLAot KyAgMHg3NiwgMHhGMiwgMHgzMiwgMHgxQiwgMHg5QywgMHg3QywgMHhDQSwgMHhGRSwgMHg3Riwg MHg4MCwgMHhDMiwgMHg4OCwKLSsgIDB4NUMsIDB4OTcsIDB4NzAsIDB4QjQsIDB4MjYsIDB4Qzks IDB4MTQsIDB4OEIKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0Ff U0hBMVtdID0gewotKyAgMHg3MSwgMHhFRSwgMHgxQSwgMHhDMCwgMHhGRSwgMHgwMSwgMHg5Mywg MHg1NCwgMHg3OSwgMHg1QywgMHhGMiwgMHg0QywKLSsgIDB4NEEsIDB4RkQsIDB4MUEsIDB4MDUs IDB4OEYsIDB4NjQsIDB4QjEsIDB4NkQsIDB4NjEsIDB4MzMsIDB4OEQsIDB4OUIsCi0rICAweEU3 LCAweEZELCAweDYwLCAweEEzLCAweDgzLCAweEI1LCAweEEzLCAweDUxLCAweDU1LCAweDc3LCAw eDkwLCAweENGLAotKyAgMHhEQywgMHgyMiwgMHgzNywgMHg4RSwgMHhEMCwgMHhFMSwgMHhBRSwg MHgwOSwgMHhFMywgMHgzRCwgMHgxRSwgMHhGOCwKLSsgIDB4ODAsIDB4RDEsIDB4OEIsIDB4QzIs IDB4RUMsIDB4MEEsIDB4RDcsIDB4NkIsIDB4ODgsIDB4OEIsIDB4OEIsIDB4QTEsCi0rICAweDIw LCAweDIyLCAweEJFLCAweDU5LCAweDVCLCAweEUwLCAweDIzLCAweDI0LCAweEExLCAweDQ5LCAw eDMwLCAweEJBLAotKyAgMHhBOSwgMHg5RSwgMHhFOCwgMHhCMSwgMHg4QSwgMHg2MiwgMHgxNiwg MHhCRiwgMHg0RSwgMHhDQSwgMHgyRSwgMHg0RSwKLSsgIDB4QkMsIDB4MjksIDB4QTgsIDB4Njcs IDB4MTMsIDB4QjcsIDB4OUYsIDB4MUQsIDB4MDQsIDB4NDQsIDB4RTUsIDB4NUYsCi0rICAweDM1 LCAweDA3LCAweDExLCAweEJDLCAweEVELCAweDE5LCAweDM3LCAweDIxLCAweENGLCAweDIzLCAw eDQ4LCAweDFGLAotKyAgMHg3MiwgMHgwNSwgMHhERSwgMHhFNiwgMHhFOCwgMHg3RiwgMHgzMywg MHg4QSwgMHg3NiwgMHg0QiwgMHgyRiwgMHg5NSwKLSsgIDB4REYsIDB4RjEsIDB4NUYsIDB4ODQs IDB4ODAsIDB4RDksIDB4NDYsIDB4QjQKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGthdF9SU0FfU0hBMjI0W10gPSB7Ci0rICAweDYyLCAweEFBLCAweDc5LCAweEE5LCAweDE4 LCAweDBFLCAweDVGLCAweDhDLCAweEJCLCAweEI3LCAweDE1LCAweEY5LAotKyAgMHgyNSwgMHhC QiwgMHhGQSwgMHhENCwgMHgzQSwgMHgzNCwgMHhFRCwgMHg5RSwgMHhBMCwgMHhBOSwgMHgxOCwg MHg4RCwKLSsgIDB4NUIsIDB4NTUsIDB4OUEsIDB4N0UsIDB4MUUsIDB4MDgsIDB4MDgsIDB4NjAs IDB4QzUsIDB4MUEsIDB4QzUsIDB4ODksCi0rICAweDA4LCAweEUyLCAweDFCLCAweEJELCAweDYy LCAweDUwLCAweDE3LCAweDc2LCAweDMwLCAweDJDLCAweDlFLCAweENELAotKyAgMHhBNCwgMHgw MiwgMHhBRCwgMHhCMSwgMHg2RCwgMHg0NCwgMHg2RCwgMHhENSwgMHhDNiwgMHg0NSwgMHg0MSwg MHhFNSwKLSsgIDB4RUUsIDB4MUYsIDB4OEQsIDB4N0UsIDB4MDgsIDB4MTYsIDB4QTYsIDB4RTEs IDB4NUUsIDB4MEIsIDB4QTksIDB4Q0MsCi0rICAweERCLCAweDU5LCAweDU1LCAweDg3LCAweDA5 LCAweDI1LCAweDcwLCAweDg2LCAweDg0LCAweDAyLCAweEM2LCAweDNCLAotKyAgMHgwQiwgMHg0 NCwgMHg0QywgMHg0NiwgMHg5NSwgMHhGNCwgMHhGOCwgMHg1QSwgMHg5MSwgMHgyOCwgMHgzRSwg MHhCMiwKLSsgIDB4NTgsIDB4MkUsIDB4MDYsIDB4NDUsIDB4NDksIDB4RTAsIDB4OTIsIDB4RTIs IDB4QzAsIDB4NjYsIDB4RTYsIDB4MzUsCi0rICAweEQ5LCAweDc5LCAweDdGLCAweDE3LCAweDVF LCAweDAyLCAweDczLCAweDA0LCAweDc3LCAweDgyLCAweEU2LCAweERDLAotKyAgMHg0MCwgMHgy MSwgMHg4OSwgMHg4QiwgMHgzNywgMHgzRSwgMHgxRSwgMHg4RAotK307Ci0rCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEyNTZbXSA9IHsKLSsgIDB4MEQsIDB4NTUsIDB4 RTIsIDB4QUEsIDB4ODEsIDB4REIsIDB4OEUsIDB4ODIsIDB4MDUsIDB4MTcsIDB4QTUsIDB4MjMs Ci0rICAweEU3LCAweDNCLCAweDFELCAweEFGLCAweEZCLCAweDhDLCAweEQwLCAweDgxLCAweDIw LCAweDdCLCAweEFBLCAweDIzLAotKyAgMHg5MiwgMHg4NywgMHg4QywgMHhEMSwgMHg1MywgMHg4 NSwgMHgxNiwgMHhEQywgMHhCRSwgMHhBRCwgMHg2RiwgMHgzNSwKLSsgIDB4OTgsIDB4MkQsIDB4 NjksIDB4ODQsIDB4QkYsIDB4RDksIDB4OEEsIDB4MDEsIDB4MTcsIDB4NTgsIDB4QjIsIDB4NkUs Ci0rICAweDJDLCAweDQ0LCAweDlCLCAweDkwLCAweEYxLCAweEZCLCAweDUxLCAweEU4LCAweDZB LCAweDkwLCAweDJELCAweDE4LAotKyAgMHgwRSwgMHhDMCwgMHg5MCwgMHgxMCwgMHgyNCwgMHhB OSwgMHgxRCwgMHhCMywgMHg1OCwgMHg3QSwgMHg5MSwgMHgzMCwKLSsgIDB4QkUsIDB4MjIsIDB4 QzcsIDB4RDMsIDB4RUMsIDB4QzMsIDB4MDksIDB4NUQsIDB4QkYsIDB4RTIsIDB4ODAsIDB4M0Es Ci0rICAweDdDLCAweDg1LCAweEI0LCAweEJDLCAweEQxLCAweEU5LCAweEYwLCAweDVDLCAweERF LCAweDgxLCAweEE2LCAweDM4LAotKyAgMHhCOCwgMHg0MiwgMHhCQiwgMHg4NiwgMHhDNSwgMHg5 RCwgMHhDRSwgMHg3QywgMHgyQywgMHhFRSwgMHhEMSwgMHhEQSwKLSsgIDB4MjcsIDB4NDgsIDB4 MkIsIDB4RjUsIDB4QUIsIDB4QjksIDB4RjcsIDB4ODAsIDB4RDEsIDB4OTAsIDB4MjcsIDB4OTAs Ci0rICAweEJELCAweDQ0LCAweDk3LCAweDYwLCAweENELCAweDU3LCAweEMwLCAweDdBCi0rfTsK LSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTM4NFtdID0gewotKyAg MHgxRCwgMHhFMywgMHg2QSwgMHhERCwgMHgyNywgMHg0QywgMHhDMCwgMHhBNSwgMHgyNywgMHhF RiwgMHhFNiwgMHgxRiwKLSsgIDB4RDIsIDB4OTEsIDB4NjgsIDB4NTksIDB4MDQsIDB4QUUsIDB4 QkQsIDB4OTksIDB4NjMsIDB4NTYsIDB4NDcsIDB4QzcsCi0rICAweDZGLCAweDIyLCAweDE2LCAw eDQ4LCAweEQwLCAweEY5LCAweDE4LCAweEE5LCAweENBLCAweEZBLCAweDVELCAweDVDLAotKyAg MHhBNywgMHg2NSwgMHg1MiwgMHg4QSwgMHhDOCwgMHg0NCwgMHg3RSwgMHg4NiwgMHg1RCwgMHhB OSwgMHhBNiwgMHg1NSwKLSsgIDB4NjUsIDB4M0UsIDB4RDksIDB4MkQsIDB4MDIsIDB4MzgsIDB4 QTgsIDB4NzksIDB4MjgsIDB4N0YsIDB4QjYsIDB4Q0YsCi0rICAweDgyLCAweERELCAweDdFLCAw eDU1LCAweEUxLCAweEIxLCAweEJDLCAweEUyLCAweDE5LCAweDJCLCAweDMwLCAweEMyLAotKyAg MHgxQiwgMHgyQiwgMHhCMCwgMHg4MiwgMHg0NiwgMHhBQywgMHg0QiwgMHhEMSwgMHhFMiwgMHg3 RCwgMHhFQiwgMHg4QywKLSsgIDB4RkYsIDB4OTUsIDB4RTksIDB4NkEsIDB4MUMsIDB4M0QsIDB4 NEQsIDB4QkYsIDB4OEYsIDB4OEIsIDB4OUMsIDB4Q0QsCi0rICAweEVBLCAweDg1LCAweEVFLCAw eDAwLCAweERDLCAweDFDLCAweEE3LCAweEVCLCAweEQwLCAweDhGLCAweDk5LCAweEYxLAotKyAg MHgxNiwgMHgyOCwgMHgyNCwgMHg2NCwgMHgwNCwgMHgzOSwgMHgyRCwgMHg1OCwgMHgxRSwgMHgz NywgMHhEQywgMHgwNCwKLSsgIDB4QkQsIDB4MzEsIDB4QTIsIDB4MkYsIDB4QjMsIDB4MzUsIDB4 NTYsIDB4QkYKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hB NTEyW10gPSB7Ci0rICAweDY5LCAweDUyLCAweDFCLCAweDUxLCAweDVFLCAweDA2LCAweENBLCAw eDlCLCAweDE2LCAweDUxLCAweDVELCAweENGLAotKyAgMHg0OSwgMHgyNSwgMHg0QSwgMHhBMSwg MHg2QSwgMHg3NywgMHg0QywgMHgzNiwgMHg0MCwgMHhGOCwgMHhCMiwgMHg5QSwKLSsgIDB4MTUs IDB4RUEsIDB4NUMsIDB4RTUsIDB4RTYsIDB4ODIsIDB4RTAsIDB4ODYsIDB4ODIsIDB4NkIsIDB4 MzIsIDB4RjEsCi0rICAweDA0LCAweEMxLCAweDVBLCAweDFBLCAweEVELCAweDFFLCAweDlBLCAw eEI2LCAweDRDLCAweDU0LCAweDlGLCAweEQ4LAotKyAgMHg4RCwgMHhDQywgMHhBQywgMHg4QSwg MHhCQiwgMHg5QywgMHg4MiwgMHgzRiwgMHhBNiwgMHg1MywgMHg2MiwgMHhCNSwKLSsgIDB4ODAs IDB4RTIsIDB4QkMsIDB4REQsIDB4NjcsIDB4MkIsIDB4RDksIDB4M0YsIDB4RTQsIDB4NzUsIDB4 OTIsIDB4NkIsCi0rICAweEFGLCAweDYyLCAweDdDLCAweDUyLCAweEYwLCAweEVFLCAweDMzLCAw eERGLCAweDFCLCAweDFELCAweDQ3LCAweEU2LAotKyAgMHg1OSwgMHg1NiwgMHhBNSwgMHhCOSwg MHg1QywgMHhFNiwgMHg3NywgMHg3OCwgMHgxNiwgMHg2MywgMHg4NCwgMHgwNSwKLSsgIDB4NkYs IDB4MEUsIDB4MkIsIDB4MzEsIDB4OUQsIDB4RjcsIDB4N0YsIDB4QjIsIDB4NjQsIDB4NzEsIDB4 RTAsIDB4MkQsCi0rICAweDNFLCAweDYyLCAweENFLCAweEI1LCAweDNGLCAweDg4LCAweERGLCAw eDJELCAweEFCLCAweDk4LCAweDY1LCAweDkxLAotKyAgMHhERiwgMHg3MCwgMHgxNCwgMHhBNSwg MHgzRiwgMHgzNiwgMHhBQiwgMHg4NAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIga2F0X1JTQV9YOTMxX1NIQTFbXSA9IHsKLSsgIDB4ODYsIDB4QjQsIDB4MTgsIDB4QkEsIDB4 RDEsIDB4ODAsIDB4QjYsIDB4N0MsIDB4NDIsIDB4NDUsIDB4NEQsIDB4REYsCi0rICAweEU5LCAw eDJELCAweEUxLCAweDgzLCAweDVGLCAweEI1LCAweDJGLCAweEM5LCAweENELCAweEM0LCAweEIy LCAweDc1LAotKyAgMHg4MCwgMHhBNCwgMHhGMSwgMHg0QSwgMHhFNywgMHg4MywgMHgxMiwgMHgx RSwgMHgxRSwgMHgxNCwgMHhCOCwgMHhBQywKLSsgIDB4MzUsIDB4RTIsIDB4QUEsIDB4MEIsIDB4 NUMsIDB4RjgsIDB4MzgsIDB4NEQsIDB4MDQsIDB4RUUsIDB4QTksIDB4OTcsCi0rICAweDcwLCAw eEZCLCAweDVFLCAweEU3LCAweEI3LCAweEUzLCAweDYyLCAweDIzLCAweDRCLCAweDM4LCAweEJF LCAweEQ2LAotKyAgMHg1MywgMHgxNSwgMHhGNywgMHhERiwgMHg4NywgMHhCNCwgMHgwRSwgMHhD QywgMHhCMSwgMHgxQSwgMHgxMSwgMHgxOSwKLSsgIDB4RUUsIDB4NTEsIDB4Q0MsIDB4OTIsIDB4 REQsIDB4QkMsIDB4NjMsIDB4MjksIDB4NjMsIDB4MEMsIDB4NTksIDB4RDcsCi0rICAweDZGLCAw eDRDLCAweDNDLCAweDM3LCAweDVCLCAweDM3LCAweDAzLCAweDYxLCAweDdELCAweDI0LCAweDFD LCAweDk5LAotKyAgMHg0OCwgMHhBRiwgMHg4MiwgMHhGRSwgMHgzMiwgMHg0MSwgMHg5QiwgMHhC MiwgMHhEQiwgMHhFQSwgMHhFRCwgMHg3NiwKLSsgIDB4OEUsIDB4NkUsIDB4Q0EsIDB4N0UsIDB4 NEUsIDB4MTQsIDB4QkEsIDB4MzAsIDB4ODQsIDB4MUMsIDB4QjMsIDB4NjcsCi0rICAweEEzLCAw eDI5LCAweDgwLCAweDcwLCAweDU0LCAweDY4LCAweDdELCAweDQ5Ci0rfTsKLSsKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBMjU2W10gPSB7Ci0rICAweDdFLCAw eEEyLCAweDc3LCAweEZFLCAweEI4LCAweDU0LCAweDhBLCAweEM3LCAweDdGLCAweDY0LCAweDU0 LCAweDg5LAotKyAgMHhFNSwgMHg1MiwgMHgxNSwgMHg4RSwgMHg1MiwgMHg5NiwgMHg0RSwgMHhB NiwgMHg1OCwgMHg5MiwgMHgxQywgMHhERCwKLSsgIDB4RUEsIDB4QTIsIDB4MkQsIDB4NUMsIDB4 RDEsIDB4NjIsIDB4MDAsIDB4NDksIDB4MDUsIDB4OTUsIDB4NzMsIDB4Q0YsCi0rICAweDE2LCAw eDc2LCAweDY4LCAweEY2LCAweEM2LCAweDVFLCAweDgwLCAweEI4LCAweEI4LCAweDdCLCAweEM4 LCAweDlCLAotKyAgMHhDNiwgMHg1MywgMHg4OCwgMHgyNiwgMHgyMCwgMHg4OCwgMHg3MywgMHhC NiwgMHgxMywgMHhCOCwgMHhGMCwgMHg0QiwKLSsgIDB4MDAsIDB4ODUsIDB4RjMsIDB4REQsIDB4 MDcsIDB4NTAsIDB4RUIsIDB4MjAsIDB4QzQsIDB4MzgsIDB4MEUsIDB4OTgsCi0rICAweEFELCAw eDRFLCAweDQ5LCAweDJDLCAweEQ3LCAweDY1LCAweEE1LCAweDE5LCAweDBFLCAweDU5LCAweDAx LCAweEVDLAotKyAgMHg3RSwgMHg3NSwgMHg4OSwgMHg2OSwgMHgyRSwgMHg2MywgMHg3NiwgMHg4 NSwgMHg0NiwgMHg4RCwgMHhBMCwgMHg4QywKLSsgIDB4MzMsIDB4MUQsIDB4ODIsIDB4OEMsIDB4 MDMsIDB4RUEsIDB4NjksIDB4ODgsIDB4MzUsIDB4QTEsIDB4NDIsIDB4QkQsCi0rICAweDIxLCAw eEVELCAweDhELCAweEJDLCAweEJDLCAweERCLCAweDMwLCAweEZGLCAweDg2LCAweEYwLCAweDVC LCAweERDLAotKyAgMHhFMywgMHhFMiwgMHhFOCwgMHgwQSwgMHgwQSwgMHgyOSwgMHg5NCwgMHg4 MAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTM4 NFtdID0gewotKyAgMHg1QywgMHg3RCwgMHg5NiwgMHgzNSwgMHhFQywgMHg3RSwgMHgxMSwgMHgz OCwgMHhCQiwgMHg3QiwgMHhFQywgMHg3QiwKLSsgIDB4RjIsIDB4ODIsIDB4OEUsIDB4OTksIDB4 QkQsIDB4RUYsIDB4RDgsIDB4QUUsIDB4RDcsIDB4MzksIDB4MzcsIDB4Q0IsCi0rICAweEU2LCAw eDRGLCAweDVFLCAweDBBLCAweDEzLCAweEU0LCAweDJFLCAweDQwLCAweEI5LCAweEJFLCAweDJF LCAweEUzLAotKyAgMHhFRiwgMHg3OCwgMHg4MywgMHgxOCwgMHg0NCwgMHgzNSwgMHg5QywgMHg4 RSwgMHhENywgMHg0QSwgMHg2MywgMHhGNiwKLSsgIDB4NTcsIDB4QzIsIDB4QjAsIDB4MDgsIDB4 NTEsIDB4NzMsIDB4Q0YsIDB4Q0EsIDB4OTksIDB4NjYsIDB4RUUsIDB4MzEsCi0rICAweEQ4LCAw eDY5LCAweEU5LCAweEFCLCAweDEzLCAweDI3LCAweDdCLCAweDQxLCAweDFFLCAweDZELCAweDhE LCAweEYxLAotKyAgMHgzRSwgMHg5QywgMHgzNSwgMHg5NSwgMHg1OCwgMHhERCwgMHgyQiwgMHhE NSwgMHhBMCwgMHg2MCwgMHg0MSwgMHg3OSwKLSsgIDB4MjQsIDB4MjIsIDB4RTQsIDB4QjcsIDB4 QkYsIDB4NDcsIDB4NTMsIDB4RjYsIDB4MzQsIDB4RDUsIDB4N0MsIDB4RkYsCi0rICAweDBFLCAw eDA5LCAweEVFLCAweDJFLCAweEUyLCAweDM3LCAweEI5LCAweERFLCAweEM1LCAweDEyLCAweDQ0 LCAweDM1LAotKyAgMHhFRiwgMHgwMSwgMHhFNiwgMHg1RSwgMHgzOSwgMHgzMSwgMHgyRCwgMHg3 MSwgMHhBNSwgMHhEQywgMHhDNiwgMHg2RCwKLSsgIDB4RTIsIDB4Q0QsIDB4ODUsIDB4REIsIDB4 NzMsIDB4ODIsIDB4NjUsIDB4MjgKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGthdF9SU0FfWDkzMV9TSEE1MTJbXSA9IHsKLSsgIDB4QTYsIDB4NjUsIDB4QTIsIDB4NzcsIDB4 NEYsIDB4QjMsIDB4ODYsIDB4Q0IsIDB4NjQsIDB4M0EsIDB4QzEsIDB4NjMsCi0rICAweEZDLCAw eEExLCAweEFBLCAweENCLCAweDlCLCAweDc5LCAweERELCAweDRCLCAweEUxLCAweEQ5LCAweERB LCAweEFDLAotKyAgMHhFNywgMHg0NywgMHgwOSwgMHhCMiwgMHgxMSwgMHg0QiwgMHg4QSwgMHhB QSwgMHgwNSwgMHg5RSwgMHg3NywgMHhENywKLSsgIDB4M0EsIDB4QkQsIDB4NUUsIDB4NTMsIDB4 MDksIDB4NEEsIDB4RTYsIDB4MEYsIDB4NUUsIDB4RjksIDB4MTQsIDB4MjgsCi0rICAweEEwLCAw eDk5LCAweDc0LCAweDY0LCAweDcwLCAweDRFLCAweEYyLCAweEUzLCAweEZBLCAweEM3LCAweEY4 LCAweEM1LAotKyAgMHg2RSwgMHgyQiwgMHg3OSwgMHg5NiwgMHgwRCwgMHgwQywgMHhDOCwgMHgx MCwgMHgzNCwgMHg1MywgMHhEMiwgMHhBRiwKLSsgIDB4MTcsIDB4MEUsIDB4RTAsIDB4QkYsIDB4 NzksIDB4RjYsIDB4MDQsIDB4NzIsIDB4MTAsIDB4RTAsIDB4RjYsIDB4RDAsCi0rICAweENFLCAw eDhBLCAweDZGLCAweEExLCAweDk1LCAweDg5LCAweEJGLCAweDU4LCAweDhGLCAweDQ2LCAweDVG LCAweDA5LAotKyAgMHg5RiwgMHgwOSwgMHhDQSwgMHg4NCwgMHgxNSwgMHg4NSwgMHhFMCwgMHhF RCwgMHgwNCwgMHgyRCwgMHhGQiwgMHg3QywKLSsgIDB4MzYsIDB4MzUsIDB4MjEsIDB4MzEsIDB4 QzMsIDB4RkQsIDB4OTIsIDB4NDIsIDB4MTEsIDB4MzAsIDB4NzEsIDB4MUIsCi0rICAweDYwLCAw eDgzLCAweDE4LCAweDg4LCAweEEzLCAweEY1LCAweDU5LCAweEMzCi0rfTsKLSsKLSsKLStpbnQg RklQU19zZWxmdGVzdF9yc2EoKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwlSU0EgKmtleTsKLSsJ RVZQX1BLRVkgKnBrID0gTlVMTDsKLSsKLSsJaWYgKChrZXk9UlNBX25ldygpKSA9PSBOVUxMKQot KwkJZ290byBlcnI7Ci0rCXNldHJzYWtleShrZXkpOwotKwlpZiAoKHBrPUVWUF9QS0VZX25ldygp KSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCi0rCUVWUF9QS0VZX2Fzc2lnbl9SU0EocGssIGtl eSk7Ci0rCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXpl b2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1NIQTEsIHNpemVvZihrYXRfUlNBX1NIQTEp LAotKwkJCQlFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAotKwkJCQkiUlNB IFNIQTEgUEtDUyMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJl X3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfU0hB MjI0LCBzaXplb2Yoa2F0X1JTQV9TSEEyMjQpLAotKwkJCQlFVlBfc2hhMjI0KCksIEVWUF9NRF9D VFhfRkxBR19QQURfUEtDUzEsCi0rCQkJCSJSU0EgU0hBMjI0IFBLQ1MjMSIpKQotKwkJZ290byBl cnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yo a2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1NIQTI1Niwgc2l6ZW9mKGthdF9SU0FfU0hBMjU2 KSwKLSsJCQkJRVZQX3NoYTI1NigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAotKwkJCQki UlNBIFNIQTI1NiBQS0NTIzEiKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0X1JT QV9TSEEzODQsIHNpemVvZihrYXRfUlNBX1NIQTM4NCksCi0rCQkJCUVWUF9zaGEzODQoKSwgRVZQ X01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsJCQkJIlJTQSBTSEEzODQgUEtDUyMxIikpCi0rCQln b3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNp emVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfU0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9T SEE1MTIpLAotKwkJCQlFVlBfc2hhNTEyKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCi0r CQkJCSJSU0EgU0hBNTEyIFBLQ1MjMSIpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICghZmlwc19w a2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJ CQlrYXRfUlNBX1BTU19TSEExLCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMSksCi0rCQkJCUVWUF9z aGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAotKwkJCQkiUlNBIFNIQTEgUFNTIikpCi0r CQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMs IHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfUFNTX1NIQTIyNCwgc2l6ZW9mKGth dF9SU0FfUFNTX1NIQTIyNCksCi0rCQkJCUVWUF9zaGEyMjQoKSwgRVZQX01EX0NUWF9GTEFHX1BB RF9QU1MsCi0rCQkJCSJSU0EgU0hBMjI0IFBTUyIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlw c19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAot KwkJCQlrYXRfUlNBX1BTU19TSEEyNTYsIHNpemVvZihrYXRfUlNBX1BTU19TSEEyNTYpLAotKwkJ CQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAotKwkJCQkiUlNBIFNIQTI1 NiBQU1MiKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChw aywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9QU1NfU0hBMzg0 LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMzg0KSwKLSsJCQkJRVZQX3NoYTM4NCgpLCBFVlBfTURf Q1RYX0ZMQUdfUEFEX1BTUywKLSsJCQkJIlJTQSBTSEEzODQgUFNTIikpCi0rCQlnb3RvIGVycjsK LSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRf dGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfUFNTX1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfUFNTX1NI QTUxMiksCi0rCQkJCUVWUF9zaGE1MTIoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCi0rCQkJ CSJSU0EgU0hBNTEyIFBTUyIpKQotKwkJZ290byBlcnI7Ci0rCi0rCi0rCWlmICghZmlwc19wa2V5 X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCWth dF9SU0FfWDkzMV9TSEExLCBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTEpLAotKwkJCUVWUF9zaGEx KCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKLSsJCQkiUlNBIFNIQTEgWDkzMSIpKQotKwkJ Z290byBlcnI7Ci0rCS8qIE5COiBTSEEyMjQgbm90IHN1cHBvcnRlZCBpbiBYOS4zMSAqLwotKwlp ZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMp IC0gMSwKLSsJCQlrYXRfUlNBX1g5MzFfU0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTI1 NiksCi0rCQkJRVZQX3NoYTI1NigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsCi0rCQkJIlJT QSBTSEEyNTYgWDkzMSIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVy ZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCWthdF9SU0FfWDkz MV9TSEEzODQsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBMzg0KSwKLSsJCQlFVlBfc2hhMzg0KCks IEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKLSsJCQkiUlNBIFNIQTM4NCBYOTMxIikpCi0rCQln b3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNp emVvZihrYXRfdGJzKSAtIDEsCi0rCQkJa2F0X1JTQV9YOTMxX1NIQTUxMiwgc2l6ZW9mKGthdF9S U0FfWDkzMV9TSEE1MTIpLAotKwkJCUVWUF9zaGE1MTIoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9Y OTMxLAotKwkJCSJSU0EgU0hBNTEyIFg5MzEiKSkKLSsJCWdvdG8gZXJyOwotKwotKwotKwlyZXQg PSAxOwotKwotKwllcnI6Ci0rCWlmIChwaykKLSsJCUVWUF9QS0VZX2ZyZWUocGspOwotKwllbHNl IGlmIChrZXkpCi0rCQlSU0FfZnJlZShrZXkpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rI2Vu ZGlmIC8qIGRlZiBPUEVOU1NMX0ZJUFMgKi8KLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEu MC4wLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMKLS0tLSAvZGV2L251bGwJMjAw OS0wOS0yMyAxMDo1NjowMi4xNDgwMDE3NTIgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEz L2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAw MDAgKzAyMDAKLUBAIC0wLDAgKzEsMjgxIEBACi0rLyogY3J5cHRvL3JzYS9yc2FfZ2VuLmMgKi8K LSsvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNv bSkKLSsgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogVGhpcyBwYWNrYWdlIGlzIGFu IFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCi0rICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0 c29mdC5jb20pLgotKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBj b25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KLSsgKiAKLSsgKiBUaGlzIGxpYnJhcnkgaXMgZnJl ZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSsgKiB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKLSsgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlv biwgYmUgaXQgdGhlIFJDNCwgUlNBLAotKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBq dXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgotKyAqIGluY2x1ZGVkIHdp dGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVy bXMKLSsgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNv ZnQuY29tKS4KLSsgKiAKLSsgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBh cyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgotKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8g YmUgcmVtb3ZlZC4KLSsgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVy aWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCi0rICogYXMgdGhlIGF1dGhvciBv ZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KLSsgKiBUaGlzIGNhbiBiZSBpbiB0aGUg Zm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKLSsgKiBpbiBk b2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2Fn ZS4KLSsgKiAKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJp Z2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKyAq ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZSBkaXN0cmlidXRpb24uCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0rICogICAgbXVzdCBkaXNwbGF5 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5Ci0rICogICAgIEVyaWMgWW91 bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKLSsgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycg Y2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKLSsgKiAgICBi ZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KLSsgKiA0LiBJZiB5 b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhl cmVvZikgZnJvbSAKLSsgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUp IHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0 LmNvbSkiCi0rICogCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5H IGBgQVMgSVMnJyBBTkQKLSsgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQot KyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05U UklCVVRPUlMgQkUgTElBQkxFCi0rICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSsgKiBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUwotKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0rICogTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg SU4gQU5ZIFdBWQotKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSsgKiBTVUNIIERBTUFHRS4KLSsgKiAKLSsg KiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBh dmFpbGFibGUgdmVyc2lvbiBvcgotKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBi ZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQotKyAqIGNvcGllZCBh bmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKLSsgKiBbaW5jbHVkaW5n IHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgot KyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8dGltZS5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv cnNhLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K LSsKLStleHRlcm4gaW50IGZpcHNfY2hlY2tfcnNhKFJTQSAqcnNhKTsKLSsjZW5kaWYKLSsKLSsv KiBYOS4zMSBSU0Ega2V5IGRlcml2YXRpb24gYW5kIGdlbmVyYXRpb24gKi8KLSsKLStpbnQgUlNB X1g5MzFfZGVyaXZlX2V4KFJTQSAqcnNhLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLCBCSUdOVU0g KnExLCBCSUdOVU0gKnEyLAotKwkJCWNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhw MiwgY29uc3QgQklHTlVNICpYcCwKLSsJCQljb25zdCBCSUdOVU0gKlhxMSwgY29uc3QgQklHTlVN ICpYcTIsIGNvbnN0IEJJR05VTSAqWHEsCi0rCQkJY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAq Y2IpCi0rCXsKLSsJQklHTlVNICpyMD1OVUxMLCpyMT1OVUxMLCpyMj1OVUxMLCpyMz1OVUxMOwot KwlCTl9DVFggKmN0eD1OVUxMLCpjdHgyPU5VTEw7Ci0rCi0rCWlmICghcnNhKSAKLSsJCWdvdG8g ZXJyOwotKwotKwljdHggPSBCTl9DVFhfbmV3KCk7Ci0rCWlmICghY3R4KSAKLSsJCWdvdG8gZXJy OwotKwlCTl9DVFhfc3RhcnQoY3R4KTsKLSsKLSsJcjAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCXIx ID0gQk5fQ1RYX2dldChjdHgpOwotKwlyMiA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJcjMgPSBCTl9D VFhfZ2V0KGN0eCk7Ci0rCi0rCWlmIChyMyA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCWlmICgh cnNhLT5lKQotKwkJewotKwkJcnNhLT5lID0gQk5fZHVwKGUpOwotKwkJaWYgKCFyc2EtPmUpCi0r CQkJZ290byBlcnI7Ci0rCQl9Ci0rCWVsc2UKLSsJCWUgPSByc2EtPmU7Ci0rCi0rCS8qIElmIG5v dCBhbGwgcGFyYW1ldGVycyBwcmVzZW50IG9ubHkgY2FsY3VsYXRlIHdoYXQgd2UgY2FuLgotKwkg KiBUaGlzIGFsbG93cyB0ZXN0IHByb2dyYW1zIHRvIG91dHB1dCBzZWxlY3RpdmUgcGFyYW1ldGVy cy4KLSsJICovCi0rCi0rCWlmIChYcCAmJiAhcnNhLT5wKQotKwkJewotKwkJcnNhLT5wID0gQk5f bmV3KCk7Ci0rCQlpZiAoIXJzYS0+cCkKLSsJCQlnb3RvIGVycjsKLSsKLSsJCWlmICghQk5fWDkz MV9kZXJpdmVfcHJpbWVfZXgocnNhLT5wLCBwMSwgcDIsCi0rCQkJCQlYcCwgWHAxLCBYcDIsIGUs IGN0eCwgY2IpKQotKwkJCWdvdG8gZXJyOwotKwkJfQotKwotKwlpZiAoWHEgJiYgIXJzYS0+cSkK LSsJCXsKLSsJCXJzYS0+cSA9IEJOX25ldygpOwotKwkJaWYgKCFyc2EtPnEpCi0rCQkJZ290byBl cnI7Ci0rCQlpZiAoIUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KHJzYS0+cSwgcTEsIHEyLAotKwkJ CQkJWHEsIFhxMSwgWHEyLCBlLCBjdHgsIGNiKSkKLSsJCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJ aWYgKCFyc2EtPnAgfHwgIXJzYS0+cSkKLSsJCXsKLSsJCUJOX0NUWF9lbmQoY3R4KTsKLSsJCUJO X0NUWF9mcmVlKGN0eCk7Ci0rCQlyZXR1cm4gMjsKLSsJCX0KLSsKLSsJLyogU2luY2UgYm90aCBw cmltZXMgYXJlIHNldCB3ZSBjYW4gbm93IGNhbGN1bGF0ZSBhbGwgcmVtYWluaW5nIAotKwkgKiBj b21wb25lbnRzLgotKwkgKi8KLSsKLSsJLyogY2FsY3VsYXRlIG4gKi8KLSsJcnNhLT5uPUJOX25l dygpOwotKwlpZiAocnNhLT5uID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFCTl9tdWwo cnNhLT5uLHJzYS0+cCxyc2EtPnEsY3R4KSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBjYWxjdWxh dGUgZCAqLwotKwlpZiAoIUJOX3N1YihyMSxyc2EtPnAsQk5fdmFsdWVfb25lKCkpKQotKwkJZ290 byBlcnI7CS8qIHAtMSAqLwotKwlpZiAoIUJOX3N1YihyMixyc2EtPnEsQk5fdmFsdWVfb25lKCkp KQotKwkJZ290byBlcnI7CS8qIHEtMSAqLwotKwlpZiAoIUJOX211bChyMCxyMSxyMixjdHgpKQot KwkJZ290byBlcnI7CS8qIChwLTEpKHEtMSkgKi8KLSsKLSsJaWYgKCFCTl9nY2QocjMsIHIxLCBy MiwgY3R4KSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAoIUJOX2RpdihyMCwgTlVMTCwgcjAsIHIz LCBjdHgpKQotKwkJZ290byBlcnI7CS8qIExDTSgocC0xKShxLTEpKSAqLwotKwotKwljdHgyID0g Qk5fQ1RYX25ldygpOwotKwlpZiAoIWN0eDIpCi0rCQlnb3RvIGVycjsKLSsKLSsJcnNhLT5kPUJO X21vZF9pbnZlcnNlKE5VTEwscnNhLT5lLHIwLGN0eDIpOwkvKiBkICovCi0rCWlmIChyc2EtPmQg PT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBjYWxjdWxhdGUgZCBtb2QgKHAtMSkgKi8K LSsJcnNhLT5kbXAxPUJOX25ldygpOwotKwlpZiAocnNhLT5kbXAxID09IE5VTEwpCi0rCQlnb3Rv IGVycjsKLSsJaWYgKCFCTl9tb2QocnNhLT5kbXAxLHJzYS0+ZCxyMSxjdHgpKQotKwkJZ290byBl cnI7Ci0rCi0rCS8qIGNhbGN1bGF0ZSBkIG1vZCAocS0xKSAqLwotKwlyc2EtPmRtcTE9Qk5fbmV3 KCk7Ci0rCWlmIChyc2EtPmRtcTEgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUJOX21v ZChyc2EtPmRtcTEscnNhLT5kLHIyLGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyogY2FsY3Vs YXRlIGludmVyc2Ugb2YgcSBtb2QgcCAqLwotKwlyc2EtPmlxbXA9Qk5fbW9kX2ludmVyc2UoTlVM TCxyc2EtPnEscnNhLT5wLGN0eDIpOwotKwotKwllcnI6Ci0rCWlmIChjdHgpCi0rCQl7Ci0rCQlC Tl9DVFhfZW5kKGN0eCk7Ci0rCQlCTl9DVFhfZnJlZShjdHgpOwotKwkJfQotKwlpZiAoY3R4MikK LSsJCUJOX0NUWF9mcmVlKGN0eDIpOwotKwkvKiBJZiB0aGlzIGlzIHNldCBhbGwgY2FsbHMgc3Vj Y2Vzc2Z1bCAqLwotKwlpZiAocnNhICYmIHJzYS0+aXFtcCAhPSBOVUxMKQotKwkJcmV0dXJuIDE7 Ci0rCi0rCXJldHVybiAwOwotKwotKwl9Ci0rCi0raW50IFJTQV9YOTMxX2dlbmVyYXRlX2tleV9l eChSU0EgKnJzYSwgaW50IGJpdHMsIGNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKQotKwl7 Ci0rCWludCBvayA9IDA7Ci0rCUJJR05VTSAqWHAgPSBOVUxMLCAqWHEgPSBOVUxMOwotKwlCTl9D VFggKmN0eCA9IE5VTEw7Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoYml0cyA8IE9Q RU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIo RklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBTX1JfS0VZX1RPT19TSE9SVCk7Ci0r CSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsKLSsJaWYgKGJpdHMgJiAweGZmKQotKwkgICAgewot KwkgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYLEZJUFNfUl9JTlZB TElEX0tFWV9MRU5HVEgpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCi0rCWlmKEZJUFNf c2VsZnRlc3RfZmFpbGVkKCkpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkz MV9HRU5FUkFURV9LRVlfRVgsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJICAgIHJl dHVybiAwOwotKwkgICAgfQotKyNlbmRpZgotKwotKwljdHggPSBCTl9DVFhfbmV3KCk7Ci0rCWlm ICghY3R4KQotKwkJZ290byBlcnJvcjsKLSsKLSsJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0rCVhwID0g Qk5fQ1RYX2dldChjdHgpOwotKwlYcSA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJaWYgKCFCTl9YOTMx X2dlbmVyYXRlX1hwcShYcCwgWHEsIGJpdHMsIGN0eCkpCi0rCQlnb3RvIGVycm9yOwotKwotKwly c2EtPnAgPSBCTl9uZXcoKTsKLSsJcnNhLT5xID0gQk5fbmV3KCk7Ci0rCWlmICghcnNhLT5wIHx8 ICFyc2EtPnEpCi0rCQlnb3RvIGVycm9yOwotKwotKwkvKiBHZW5lcmF0ZSB0d28gcHJpbWVzIGZy b20gWHAsIFhxICovCi0rCi0rCWlmICghQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChyc2EtPnAs IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIFhwLAotKwkJCQkJZSwgY3R4LCBjYikpCi0rCQlnb3Rv IGVycm9yOwotKwotKwlpZiAoIUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgocnNhLT5xLCBOVUxM LCBOVUxMLCBOVUxMLCBOVUxMLCBYcSwKLSsJCQkJCWUsIGN0eCwgY2IpKQotKwkJZ290byBlcnJv cjsKLSsKLSsJLyogU2luY2UgcnNhLT5wIGFuZCByc2EtPnEgYXJlIHZhbGlkIHRoaXMgY2FsbCB3 aWxsIGp1c3QgZGVyaXZlCi0rCSAqIHJlbWFpbmluZyBSU0EgY29tcG9uZW50cy4KLSsJICovCi0r Ci0rCWlmICghUlNBX1g5MzFfZGVyaXZlX2V4KHJzYSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwK LSsJCQkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgZSwgY2IpKQotKwkJZ290 byBlcnJvcjsKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKCFmaXBzX2NoZWNrX3JzYShy c2EpKQotKwkgICAgZ290byBlcnJvcjsKLSsjZW5kaWYKLSsKLSsJb2sgPSAxOwotKwotKwllcnJv cjoKLSsJaWYgKGN0eCkKLSsJCXsKLSsJCUJOX0NUWF9lbmQoY3R4KTsKLSsJCUJOX0NUWF9mcmVl KGN0eCk7Ci0rCQl9Ci0rCi0rCWlmIChvaykKLSsJCXJldHVybiAxOwotKwotKwlyZXR1cm4gMDsK LSsKLSsJfQotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2Zp cHMvZmlwc19zaGExX3NlbGZ0ZXN0LmMKLS0tLSAvZGV2L251bGwJMjAwOS0wOS0yMyAxMDo1Njow Mi4xNDgwMDE3NTIgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzL2Zp cHNfc2hhMV9zZWxmdGVzdC5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1A QCAtMCwwICsxLDk3IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl Ci0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQg Ik9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICog ICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVh c2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUg PHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9z aGEuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rc3RhdGljIGNoYXIgdGVzdFtdWzYwXT0K LSsgICAgewotKyAgICAiIiwKLSsgICAgImFiYyIsCi0rICAgICJhYmNkYmNkZWNkZWZkZWZnZWZn aGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIKLSsgICAgfTsKLSsKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciByZXRbXVtTSEFfRElHRVNUX0xFTkdUSF09Ci0rICAgIHsK LSsgICAgeyAweGRhLDB4MzksMHhhMywweGVlLDB4NWUsMHg2YiwweDRiLDB4MGQsMHgzMiwweDU1 LAotKyAgICAgIDB4YmYsMHhlZiwweDk1LDB4NjAsMHgxOCwweDkwLDB4YWYsMHhkOCwweDA3LDB4 MDkgfSwKLSsgICAgeyAweGE5LDB4OTksMHgzZSwweDM2LDB4NDcsMHgwNiwweDgxLDB4NmEsMHhi YSwweDNlLAotKyAgICAgIDB4MjUsMHg3MSwweDc4LDB4NTAsMHhjMiwweDZjLDB4OWMsMHhkMCww eGQ4LDB4OWQgfSwKLSsgICAgeyAweDg0LDB4OTgsMHgzZSwweDQ0LDB4MWMsMHgzYiwweGQyLDB4 NmUsMHhiYSwweGFlLAotKyAgICAgIDB4NGEsMHhhMSwweGY5LDB4NTEsMHgyOSwweGU1LDB4ZTUs MHg0NiwweDcwLDB4ZjEgfSwKLSsgICAgfTsKLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9zaGExKCkK LSsgICAgewotKyAgICB0ZXN0WzJdWzBdKys7Ci0rICAgIH0KLSsKLStpbnQgRklQU19zZWxmdGVz dF9zaGExKCkKLSsgICAgewotKyAgICBpbnQgbjsKLSsKLSsgICAgZm9yKG49MCA7IG48c2l6ZW9m KHRlc3QpL3NpemVvZih0ZXN0WzBdKSA7ICsrbikKLSsJewotKwl1bnNpZ25lZCBjaGFyIG1kW1NI QV9ESUdFU1RfTEVOR1RIXTsKLSsKLSsJRVZQX0RpZ2VzdCh0ZXN0W25dLHN0cmxlbih0ZXN0W25d KSxtZCwgTlVMTCwgRVZQX3NoYTEoKSwgTlVMTCk7Ci0rCWlmKG1lbWNtcChtZCxyZXRbbl0sc2l6 ZW9mIG1kKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hB MSxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwl9 Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCAvZGV2L251bGwg b3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfc2hhMS5jCi0t LS0gL2Rldi9udWxsCTIwMDktMDktMjMgMTA6NTY6MDIuMTQ4MDAxNzUyICswMjAwCi0rKysgb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfc2hhMS5jCTIwMDkt MDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDE3MyBAQAotKy8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBB bGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0r ICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4K LSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0 LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qg bm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVu c3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5 ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0r ICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVk aXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxv d2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsg KgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBg YEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVD VCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK LSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxz dGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNz bGNvbmYuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9o bWFjLmg+Ci0rCi0rI2lmbmRlZiBGSVBTQ0FOSVNURVJfTwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Zh aWxlZCgpIHsgcmV0dXJuIDA7IH0KLSt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2soKSB7fQotK3Zv aWQgT1BFTlNTTF9jbGVhbnNlKHZvaWQgKnAsc2l6ZV90IGxlbikge30KLSsjZW5kaWYKLSsKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rc3RhdGljIHZvaWQgaG1hY19pbml0KFNIQV9DVFggKm1k X2N0eCxTSEFfQ1RYICpvX2N0eCwKLSsJCSAgICAgIGNvbnN0IGNoYXIgKmtleSkKLSsgICAgewot KyAgICBzaXplX3QgbGVuPXN0cmxlbihrZXkpOwotKyAgICBpbnQgaTsKLSsgICAgdW5zaWduZWQg Y2hhciBrZXltZFtITUFDX01BWF9NRF9DQkxPQ0tdOwotKyAgICB1bnNpZ25lZCBjaGFyIHBhZFtI TUFDX01BWF9NRF9DQkxPQ0tdOwotKwotKyAgICBpZiAobGVuID4gU0hBX0NCTE9DSykKLSsJewot KwlTSEExX0luaXQobWRfY3R4KTsKLSsJU0hBMV9VcGRhdGUobWRfY3R4LGtleSxsZW4pOwotKwlT SEExX0ZpbmFsKGtleW1kLG1kX2N0eCk7Ci0rCWxlbj0yMDsKLSsJfQotKyAgICBlbHNlCi0rCW1l bWNweShrZXltZCxrZXksbGVuKTsKLSsgICAgbWVtc2V0KCZrZXltZFtsZW5dLCdcMCcsSE1BQ19N QVhfTURfQ0JMT0NLLWxlbik7Ci0rCi0rICAgIGZvcihpPTAgOyBpIDwgSE1BQ19NQVhfTURfQ0JM T0NLIDsgaSsrKQotKwlwYWRbaV09MHgzNl5rZXltZFtpXTsKLSsgICAgU0hBMV9Jbml0KG1kX2N0 eCk7Ci0rICAgIFNIQTFfVXBkYXRlKG1kX2N0eCxwYWQsU0hBX0NCTE9DSyk7Ci0rCi0rICAgIGZv cihpPTAgOyBpIDwgSE1BQ19NQVhfTURfQ0JMT0NLIDsgaSsrKQotKwlwYWRbaV09MHg1Y15rZXlt ZFtpXTsKLSsgICAgU0hBMV9Jbml0KG9fY3R4KTsKLSsgICAgU0hBMV9VcGRhdGUob19jdHgscGFk LFNIQV9DQkxPQ0spOwotKyAgICB9Ci0rCi0rc3RhdGljIHZvaWQgaG1hY19maW5hbCh1bnNpZ25l ZCBjaGFyICptZCxTSEFfQ1RYICptZF9jdHgsU0hBX0NUWCAqb19jdHgpCi0rICAgIHsKLSsgICAg dW5zaWduZWQgY2hhciBidWZbMjBdOwotKwotKyAgICBTSEExX0ZpbmFsKGJ1ZixtZF9jdHgpOwot KyAgICBTSEExX1VwZGF0ZShvX2N0eCxidWYsc2l6ZW9mIGJ1Zik7Ci0rICAgIFNIQTFfRmluYWwo bWQsb19jdHgpOwotKyAgICB9Ci0rCi0rI2VuZGlmCi0rCi0raW50IG1haW4oaW50IGFyZ2MsY2hh ciAqKmFyZ3YpCi0rICAgIHsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIHN0YXRpYyBjaGFy IGtleVtdPSJldGFvbnJpc2hkbGN1cGZtIjsKLSsgICAgaW50IG4sYmluYXJ5PTA7Ci0rCi0rICAg IGlmKGFyZ2MgPCAyKQotKwl7Ci0rCWZwcmludGYoc3RkZXJyLCIlcyBbPGZpbGU+XStcbiIsYXJn dlswXSk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsKLSsgICAgbj0xOwotKyAgICBpZiAoIXN0cmNtcChh cmd2W25dLCItYmluYXJ5IikpCi0rCXsKLSsJbisrOwotKwliaW5hcnk9MTsJLyogZW1pdCBiaW5h cnkgZmluZ2VycHJpbnQuLi4gKi8KLSsJfQotKwotKyAgICBmb3IoOyBuIDwgYXJnYyA7ICsrbikK LSsJewotKwlGSUxFICpmPWZvcGVuKGFyZ3Zbbl0sInJiIik7Ci0rCVNIQV9DVFggbWRfY3R4LG9f Y3R4OwotKwl1bnNpZ25lZCBjaGFyIG1kWzIwXTsKLSsJaW50IGk7Ci0rCi0rCWlmKCFmKQotKwkg ICAgewotKwkgICAgcGVycm9yKGFyZ3Zbbl0pOwotKwkgICAgZXhpdCgyKTsKLSsJICAgIH0KLSsK LSsJaG1hY19pbml0KCZtZF9jdHgsJm9fY3R4LGtleSk7Ci0rCWZvciggOyA7ICkKLSsJICAgIHsK LSsJICAgIGNoYXIgYnVmWzEwMjRdOwotKwkgICAgc2l6ZV90IGw9ZnJlYWQoYnVmLDEsc2l6ZW9m IGJ1ZixmKTsKLSsKLSsJICAgIGlmKGwgPT0gMCkKLSsJCXsKLSsJCWlmKGZlcnJvcihmKSkKLSsJ CSAgICB7Ci0rCQkgICAgcGVycm9yKGFyZ3Zbbl0pOwotKwkJICAgIGV4aXQoMyk7Ci0rCQkgICAg fQotKwkJZWxzZQotKwkJICAgIGJyZWFrOwotKwkJfQotKwkgICAgU0hBMV9VcGRhdGUoJm1kX2N0 eCxidWYsbCk7Ci0rCSAgICB9Ci0rCWhtYWNfZmluYWwobWQsJm1kX2N0eCwmb19jdHgpOwotKwot KwlpZiAoYmluYXJ5KQotKwkgICAgewotKwkgICAgZndyaXRlKG1kLDIwLDEsc3Rkb3V0KTsKLSsJ ICAgIGJyZWFrOwkvKiAuLi4gZm9yIHNpbmdsZSghKSBmaWxlICovCi0rCSAgICB9Ci0rCi0rCXBy aW50ZigiSE1BQy1TSEExKCVzKT0gIixhcmd2W25dKTsKLSsJZm9yKGk9MCA7IGkgPCAyMCA7ICsr aSkKLSsJICAgIHByaW50ZigiJTAyeCIsbWRbaV0pOwotKwlwcmludGYoIlxuIik7Ci0rCX0KLSsj ZW5kaWYKLSsgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsKLWRpZmYgLXVwIC9kZXYvbnVsbCBv cGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jCi0tLS0gL2Rl di9udWxsCTIwMDktMDktMjMgMTA6NTY6MDIuMTQ4MDAxNzUyICswMjAwCi0rKysgb3BlbnNzbC0x LjAuMC1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYwkyMDA5LTA5LTMwIDEzOjI1 OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSw1ODggQEAKLSsvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot KyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KLSsgKgotKyAqCi0rICogVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGFzIGEgdGVz dCBkcml2ZXIgZm9yIHRoZSBGSVBTLTE0MCB0ZXN0aW5nCi0rICogbGFiIHBlcmZvcm1pbmcgRklQ Uy0xNDAgdmFsaWRhdGlvbi4gIEl0IGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIHRoZQotKyAqIE9w ZW5TU0wgbGlicmFyeSBpdG8gcGVyZm9ybSBhIHZhcmlldHkgb2YgY29tbW9uIGNyeXB0b2dyYXBo aWMKLSsgKiBmdW5jdGlvbnMuICBBIHBvd2VyLXVwIHNlbGYgdGVzdCBpcyBkZW1vbnN0cmF0ZWQg YnkgZGVsaWJlcmF0ZWx5Ci0rICogcG9pbnRpbmcgdG8gYW4gaW52YWxpZCBleGVjdXRhYmxlIGhh c2gKLSsgKgotKyAqIENvbnRyaWJ1dGVkIGJ5IFN0ZXZlIE1hcnF1ZXNzLgotKyAqCi0rICovCi0r I2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPGFzc2VydC5oPgotKyNpbmNsdWRlIDxjdHlw ZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvYWVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZGguaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZXJyLmg+Ci0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Ci0rCi0rCi0rI2lmbmRlZiBPUEVO U1NMX0ZJUFMKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotKyAgICB7Ci0rICAg IHByaW50ZigiTm8gRklQUyBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotKyAgICB9Ci0r I2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNfdXRs LmgiCi0rCi0rLyogQUVTOiBlbmNyeXB0IGFuZCBkZWNyeXB0IGtub3duIHBsYWludGV4dCwgdmVy aWZ5IHJlc3VsdCBtYXRjaGVzIG9yaWdpbmFsIHBsYWludGV4dAotKyovCi0rc3RhdGljIGludCBG SVBTX2Flc190ZXN0KHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIg cGx0bXBbMTZdOwotKwl1bnNpZ25lZCBjaGFyIGNpdG1wWzE2XTsKLSsJdW5zaWduZWQgY2hhciBr ZXlbMTZdID0geyAxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNn07Ci0rCXVu c2lnbmVkIGNoYXIgcGxhaW50ZXh0WzE2XSA9ICJldGFvbnJpc2hkbGN1IjsKLSsJRVZQX0NJUEhF Ul9DVFggY3R4OwotKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwlpZiAoRVZQX0NpcGhl ckluaXRfZXgoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAxKSA8PSAw KQotKwkJZ290byBlcnI7Ci0rCUVWUF9DaXBoZXIoJmN0eCwgY2l0bXAsIHBsYWludGV4dCwgMTYp OwotKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksTlVMTCwg a2V5LCBOVUxMLCAwKSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCUVWUF9DaXBoZXIoJmN0eCwgcGx0 bXAsIGNpdG1wLCAxNik7Ci0rCWlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4dCwgMTYpKQotKwkJ Z290byBlcnI7Ci0rCXJldCA9IDE7Ci0rCWVycjoKLSsJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgm Y3R4KTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK3N0YXRpYyBpbnQgRklQU19kZXMzX3Rlc3Qo dm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsJdW5zaWduZWQgY2hhciBwbHRtcFs4XTsKLSsJ dW5zaWduZWQgY2hhciBjaXRtcFs4XTsKLSsgICAgCXVuc2lnbmVkIGNoYXIga2V5W10gPSB7IDEs MiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LAotKwkJICAgICAgICAg ICAgICAxOSwyMCwyMSwyMiwyMywyNH07Ci0rICAgIAl1bnNpZ25lZCBjaGFyIHBsYWludGV4dFtd ID0geyAnZScsICd0JywgJ2EnLCAnbycsICduJywgJ3InLCAnaScsICdzJyB9OwotKwlFVlBfQ0lQ SEVSX0NUWCBjdHg7Ci0rCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCWlmIChFVlBfQ2lw aGVySW5pdF9leCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAxKSA8 PSAwKQotKwkJZ290byBlcnI7Ci0rCUVWUF9DaXBoZXIoJmN0eCwgY2l0bXAsIHBsYWludGV4dCwg OCk7Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksTlVM TCwga2V5LCBOVUxMLCAwKSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCUVWUF9DaXBoZXIoJmN0eCwg cGx0bXAsIGNpdG1wLCA4KTsKLSsJaWYgKG1lbWNtcChwbHRtcCwgcGxhaW50ZXh0LCA4KSkKLSsJ CWdvdG8gZXJyOwotKwlyZXQgPSAxOwotKwllcnI6Ci0rCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAo JmN0eCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLSsvKgotKyAqIERTQTogZ2VuZXJhdGUga2V5 cyBhbmQgc2lnbiwgdmVyaWZ5IGlucHV0IHBsYWludGV4dC4KLSsgKi8KLStzdGF0aWMgaW50IEZJ UFNfZHNhX3Rlc3QoaW50IGJhZCkKLSsgICAgewotKyAgICBEU0EgKmRzYSA9IE5VTEw7Ci0rICAg IEVWUF9QS0VZIHBrOwotKyAgICB1bnNpZ25lZCBjaGFyIGRnc3RbXSA9ICJldGFvbnJpc2hkbGMi OwotKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls2MF07Ci0rICAgIHVuc2lnbmVkIGludCBzbGVuOwot KyAgICBpbnQgciA9IDA7Ci0rICAgIEVWUF9NRF9DVFggbWN0eDsKLSsKLSsgICAgRVJSX2NsZWFy X2Vycm9yKCk7Ci0rICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rICAgIGRzYSA9IERTQV9u ZXcoKTsKLSsgICAgaWYgKCFkc2EpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIURTQV9nZW5lcmF0 ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgMTAyNCxOVUxMLDAsTlVMTCxOVUxMLE5VTEwpKQotKwlnb3Rv IGVuZDsKLSsgICAgaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCi0rCWdvdG8gZW5kOwotKyAg ICBpZiAoYmFkKQotKwkgICAgQk5fYWRkX3dvcmQoZHNhLT5wdWJfa2V5LCAxKTsKLSsKLSsgICAg cGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKLSsgICAgcGsucGtleS5kc2EgPSBkc2E7Ci0rCi0rICAg IGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKSkKLSsJZ290byBl bmQ7Ci0rICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIGRnc3QsIHNpemVvZihkZ3N0KSAt IDEpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBidWYsICZz bGVuLCAmcGspKQotKwlnb3RvIGVuZDsKLSsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgm bWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9WZXJp ZnlVcGRhdGUoJm1jdHgsIGRnc3QsIHNpemVvZihkZ3N0KSAtIDEpKQotKwlnb3RvIGVuZDsKLSsg ICAgciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgYnVmLCBzbGVuLCAmcGspOwotKyAgICBlbmQ6 Ci0rICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0rICAgIGlmIChkc2EpCi0rICAJICBE U0FfZnJlZShkc2EpOwotKyAgICBpZiAociAhPSAxKQotKwlyZXR1cm4gMDsKLSsgICAgcmV0dXJu IDE7Ci0rICAgIH0KLSsKLSsvKgotKyAqIFJTQTogZ2VuZXJhdGUga2V5cyBhbmQgc2lnbiwgdmVy aWZ5IGlucHV0IHBsYWludGV4dC4KLSsgKi8KLStzdGF0aWMgaW50IEZJUFNfcnNhX3Rlc3QoaW50 IGJhZCkKLSsgICAgewotKyAgICBSU0EgKmtleTsKLSsgICAgdW5zaWduZWQgY2hhciBpbnB1dF9w dGV4dFtdID0gImV0YW9ucmlzaGRsYyI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgYnVmWzI1Nl07Ci0r ICAgIHVuc2lnbmVkIGludCBzbGVuOwotKyAgICBCSUdOVU0gKmJuOwotKyAgICBFVlBfTURfQ1RY IG1jdHg7Ci0rICAgIEVWUF9QS0VZIHBrOwotKyAgICBpbnQgciA9IDA7Ci0rCi0rICAgIEVSUl9j bGVhcl9lcnJvcigpOwotKyAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOwotKyAgICBrZXkgPSBS U0FfbmV3KCk7Ci0rICAgIGJuID0gQk5fbmV3KCk7Ci0rICAgIGlmICgha2V5IHx8ICFibikKLSsJ cmV0dXJuIDA7Ci0rICAgIEJOX3NldF93b3JkKGJuLCA2NTUzNyk7Ci0rICAgIGlmICghUlNBX2dl bmVyYXRlX2tleV9leChrZXksIDEwMjQsYm4sTlVMTCkpCi0rCXJldHVybiAwOwotKyAgICBCTl9m cmVlKGJuKTsKLSsgICAgaWYgKGJhZCkKLSsJICAgIEJOX2FkZF93b3JkKGtleS0+biwgMSk7Ci0r Ci0rICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7Ci0rICAgIHBrLnBrZXkucnNhID0ga2V5Owot KwotKyAgICBpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX3NoYTEoKSwgTlVMTCkpCi0r CWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBpbnB1dF9wdGV4dCwg c2l6ZW9mKGlucHV0X3B0ZXh0KSAtIDEpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFFVlBfU2ln bkZpbmFsKCZtY3R4LCBidWYsICZzbGVuLCAmcGspKQotKwlnb3RvIGVuZDsKLSsKLSsgICAgaWYg KCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX3NoYTEoKSwgTlVMTCkpCi0rCWdvdG8gZW5k OwotKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIGlucHV0X3B0ZXh0LCBzaXplb2Yo aW5wdXRfcHRleHQpIC0gMSkpCi0rCWdvdG8gZW5kOwotKyAgICByID0gRVZQX1ZlcmlmeUZpbmFs KCZtY3R4LCBidWYsIHNsZW4sICZwayk7Ci0rICAgIGVuZDoKLSsgICAgRVZQX01EX0NUWF9jbGVh bnVwKCZtY3R4KTsKLSsgICAgaWYgKGtleSkKLSsgIAkgICAgUlNBX2ZyZWUoa2V5KTsKLSsgICAg aWYgKHIgIT0gMSkKLSsJcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyog U0hBMTogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8g a25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQ U19zaGExX3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQV9ESUdF U1RfTEVOR1RIXSA9Ci0rICAgICAgICB7IDB4MTEsIDB4ZjEsIDB4OWEsIDB4M2EsIDB4ZWMsIDB4 MWEsIDB4MWUsIDB4OGUsIDB4NjUsIDB4ZDQsIDB4OWEsIDB4MzgsIDB4MGMsIDB4OGIsIDB4MWUs IDB4MmMsIDB4ZTgsIDB4YjMsIDB4YzUsIDB4MTggfTsKLSsgICAgdW5zaWduZWQgY2hhciBzdHJb XSA9ICJldGFvbnJpc2hkIjsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xF TkdUSF07Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUVWUF9EaWdlc3Qo c3RyLHNpemVvZihzdHIpIC0gMSxtZCwgTlVMTCwgRVZQX3NoYTEoKSwgTlVMTCkpIHJldHVybiAw OwotKyAgICBpZiAobWVtY21wKG1kLGRpZ2VzdCxzaXplb2YobWQpKSkKLSsgICAgICAgIHJldHVy biAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIFNIQTI1NjogZ2VuZXJhdGUgaGFz aCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21w dXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19zaGEyNTZfdGVzdCgpCi0r ICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBMjU2X0RJR0VTVF9MRU5HVEhdID0K LSsJezB4ZjUsIDB4NTMsIDB4Y2QsIDB4YjgsIDB4Y2YsIDB4MSwgMHhlZSwgMHgxNywgMHg5Yiwg MHg5MywgMHhjOSwgMHg2OCwgMHhjMCwgMHhlYSwgMHg0MCwgMHg5MSwKLSsJIDB4NiwgMHhlYywg MHg4ZSwgMHgxMSwgMHg5NiwgMHhjOCwgMHg1ZCwgMHgxYywgMHhhZiwgMHg2NCwgMHgyMiwgMHhl NiwgMHg1MCwgMHg0ZiwgMHg0NywgMHg1N307Ci0rICAgIHVuc2lnbmVkIGNoYXIgc3RyW10gPSAi ZXRhb25yaXNoZCI7Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hBMjU2X0RJR0VTVF9MRU5H VEhdOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgaWYgKCFFVlBfRGlnZXN0KHN0 cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5VTEwsIEVWUF9zaGEyNTYoKSwgTlVMTCkpIHJldHVybiAw OwotKyAgICBpZiAobWVtY21wKG1kLGRpZ2VzdCxzaXplb2YobWQpKSkKLSsgICAgICAgIHJldHVy biAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIFNIQTUxMjogZ2VuZXJhdGUgaGFz aCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21w dXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19zaGE1MTJfdGVzdCgpCi0r ICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBNTEyX0RJR0VTVF9MRU5HVEhdID0K LSsJezB4OTksIDB4YzksIDB4ZTksIDB4NWIsIDB4ODgsIDB4ZDQsIDB4NzgsIDB4ODgsIDB4ZGYs IDB4ODgsIDB4NWYsIDB4OTQsIDB4NzEsIDB4NjQsIDB4MjgsIDB4Y2EsCi0rCSAweDE2LCAweDFm LCAweDNkLCAweGY0LCAweDFmLCAweGYzLCAweDBmLCAweGM1LCAweDAzLCAweDk5LCAweGIyLCAw eGQwLCAweGU3LCAweDBiLCAweDk0LCAweDRhLAotKwkgMHg0NSwgMHhkMiwgMHg2YywgMHg0Ziwg MHgyMCwgMHgwNiwgMHhlZiwgMHg3MSwgMHhhOSwgMHgyNSwgMHg3ZiwgMHgyNCwgMHhiMSwgMHhk OSwgMHg0MCwgMHgyMiwKLSsJIDB4NDksIDB4NTQsIDB4MTAsIDB4YzIsIDB4MjIsIDB4OWQsIDB4 MjcsIDB4ZmUsIDB4YmQsIDB4ZDYsIDB4ZDYsIDB4ZWIsIDB4MmQsIDB4NDIsIDB4MWQsIDB4YTN9 OwotKyAgICB1bnNpZ25lZCBjaGFyIHN0cltdID0gImV0YW9ucmlzaGQiOwotKwotKyAgICB1bnNp Z25lZCBjaGFyIG1kW1NIQTUxMl9ESUdFU1RfTEVOR1RIXTsKLSsKLSsgICAgRVJSX2NsZWFyX2Vy cm9yKCk7Ci0rICAgIGlmICghRVZQX0RpZ2VzdChzdHIsc2l6ZW9mKHN0cikgLSAxLG1kLCBOVUxM LCBFVlBfc2hhNTEyKCksIE5VTEwpKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChtZCxkaWdl c3Qsc2l6ZW9mKG1kKSkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAg IH0KLSsKLSsvKiBITUFDLVNIQTE6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVl IGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8K LStzdGF0aWMgaW50IEZJUFNfaG1hY19zaGExX3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVk IGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJT YW1wbGUgdGV4dCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9 Ci0rCXsweDczLCAweGY3LCAweGEwLCAweDQ4LCAweGY4LCAweDk0LCAweGVkLCAweGRkLCAweDBh LCAweGVhLCAweGVhLCAweDU2LCAweDFiLCAweDYxLCAweDJlLCAweDcwLAotKwkgMHhiMiwgMHhm YiwgMHhlYywgMHhjNn07Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0la RV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigp OwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTEoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2Yo aXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChvdXQsa2F2YWws b3V0bGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwot Ky8qIEhNQUMtU0hBMjI0OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQg Y29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3Rh dGljIGludCBGSVBTX2htYWNfc2hhMjI0X3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNo YXIga2V5W10gPSAiZXRhb25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1w bGUgdGV4dCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9Ci0r CXsweDc1LCAweDU4LCAweGQ1LCAweGJkLCAweDU1LCAweDZkLCAweDg3LCAweDBmLCAweDc1LCAw eGZmLCAweGJlLCAweDFjLCAweGIyLCAweGYwLCAweDIwLCAweDM1LAotKwkgMHhlNSwgMHg2Miwg MHg0OSwgMHhiNiwgMHg5NCwgMHhiOSwgMHhmYywgMHg2NSwgMHgzNCwgMHgzMywgMHgzYSwgMHgx OX07Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIHVu c2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAo IUhNQUMoRVZQX3NoYTIyNCgpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQs Jm91dGxlbikpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQot KyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogSE1BQy1T SEEyNTY6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRv IGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJ UFNfaG1hY19zaGEyNTZfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9 ICJldGFvbnJpc2hkIjsKLSsgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsK LSsgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KLSsJezB4ZTksIDB4 MTcsIDB4YzEsIDB4N2IsIDB4NGMsIDB4NmIsIDB4NzcsIDB4ZGEsIDB4ZDIsIDB4MzAsIDB4MzYs IDB4MDIsIDB4ZjUsIDB4NzIsIDB4MzMsIDB4ODcsCi0rCSAweDlmLCAweGM2LCAweDZlLCAweDdi LCAweDdlLCAweGE4LCAweGVhLCAweGFhLCAweDlmLCAweGJhLCAweGVlLCAweDUxLCAweGZmLCAw eGRhLCAweDI0LCAweGY0fTsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9T SVpFXTsKLSsgICAgdW5zaWduZWQgaW50IG91dGxlbjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9y KCk7Ci0rICAgIGlmICghSE1BQyhFVlBfc2hhMjU2KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6 ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LGth dmFsLG91dGxlbikpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0K LSsKLSsvKiBITUFDLVNIQTM4NDogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUg YW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwot K3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTM4NF90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25l ZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAi U2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0g PQotKwl7MHhiMiwgMHg5ZCwgMHg0MCwgMHg1OCwgMHgzMiwgMHhjNCwgMHhlMywgMHgzMSwgMHhi NiwgMHg2MywgMHgwOCwgMHgyNiwgMHg5OSwgMHhlZiwgMHgzYiwgMHgxMCwKLSsJIDB4ZTIsIDB4 ZGYsIDB4ZjgsIDB4ZmYsIDB4YzYsIDB4ZTEsIDB4MDMsIDB4MjksIDB4ODEsIDB4MmEsIDB4MWIs IDB4YWMsIDB4YjAsIDB4MDcsIDB4MzksIDB4MDgsCi0rCSAweGYzLCAweDkxLCAweDM1LCAweDEx LCAweDc2LCAweGQ2LCAweDRjLCAweDIwLCAweGZiLCAweDRkLCAweGMzLCAweGYzLCAweGI4LCAw eDliLCAweDg4LCAweDFjfTsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9T SVpFXTsKLSsgICAgdW5zaWduZWQgaW50IG91dGxlbjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9y KCk7Ci0rICAgIGlmICghSE1BQyhFVlBfc2hhMzg0KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6 ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LGth dmFsLG91dGxlbikpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0K LSsKLSsvKiBITUFDLVNIQTUxMjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUg YW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwot K3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTUxMl90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25l ZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAi U2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0g PQotKwl7MHhjZCwgMHgzZSwgMHhiOSwgMHg1MSwgMHhiOCwgMHhiYywgMHg3ZiwgMHg5YSwgMHgy MywgMHhhZiwgMHhmMywgMHg3NywgMHg1OSwgMHg4NSwgMHhhOSwgMHhlNiwKLSsJIDB4ZjcsIDB4 ZDEsIDB4NTEsIDB4OTYsIDB4MTcsIDB4ZTAsIDB4OTIsIDB4ZDgsIDB4YTYsIDB4M2IsIDB4YzEs IDB4YWQsIDB4N2UsIDB4MjQsIDB4Y2EsIDB4YjEsCi0rCSAweGQ3LCAweDc5LCAweDBhLCAweGE1 LCAweGVhLCAweDJjLCAweDAyLCAweDU4LCAweDBiLCAweGE2LCAweDUyLCAweDZiLCAweDYxLCAw eDdmLCAweGViLCAweDljLAotKwkgMHg0NywgMHg4NiwgMHg1ZCwgMHg3NCwgMHgyYiwgMHg4OCwg MHhkZiwgMHhlZSwgMHg0NiwgMHg2OSwgMHg5NiwgMHgzZCwgMHhhNiwgMHhkOSwgMHgyYSwgMHg1 M307Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIHVu c2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAo IUhNQUMoRVZQX3NoYTUxMigpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQs Jm91dGxlbikpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQot KyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rCi0rLyogREg6 IGdlbmVyYXRlIHNoYXJlZCBwYXJhbWV0ZXJzCi0rKi8KLStzdGF0aWMgaW50IGRoX3Rlc3QoKQot KyAgICB7Ci0rICAgIERIICpkaDsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGRoID0g RklQU19kaF9uZXcoKTsKLSsgICAgaWYgKCFkaCkKLSsJcmV0dXJuIDA7Ci0rICAgIGlmICghREhf Z2VuZXJhdGVfcGFyYW1ldGVyc19leChkaCwgMTAyNCwgMiwgTlVMTCkpCi0rCXJldHVybiAwOwot KyAgICBGSVBTX2RoX2ZyZWUoZGgpOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIFpl cm9pemUKLSsqLwotK3N0YXRpYyBpbnQgWmVyb2l6ZSgpCi0rICAgIHsKLSsgICAgUlNBICprZXk7 Ci0rICAgIEJJR05VTSAqYm47Ci0rICAgIHVuc2lnbmVkIGNoYXIgdXNlcmtleVsxNl0gPSAKLSsJ eyAweDQ4LCAweDUwLCAweGYwLCAweGEzLCAweDNhLCAweGVkLCAweGQzLCAweGFmLCAweDZlLCAw eDQ3LCAweDdmLCAweDgzLCAweDAyLCAweGIxLCAweDA5LCAweDY4IH07Ci0rICAgIGludCBpLCBu OwotKwotKyAgICBrZXkgPSBGSVBTX3JzYV9uZXcoKTsKLSsgICAgYm4gPSBCTl9uZXcoKTsKLSsg ICAgaWYgKCFrZXkgfHwgIWJuKQotKwlyZXR1cm4gMDsKLSsgICAgQk5fc2V0X3dvcmQoYm4sIDY1 NTM3KTsKLSsgICAgaWYgKCFSU0FfZ2VuZXJhdGVfa2V5X2V4KGtleSwgMTAyNCxibixOVUxMKSkK LSsJcmV0dXJuIDA7Ci0rICAgIEJOX2ZyZWUoYm4pOwotKyAgICAKLSsgICAgbiA9IEJOX251bV9i eXRlcyhrZXktPmQpOwotKyAgICBwcmludGYoIiBHZW5lcmF0ZWQgJWQgYnl0ZSBSU0EgcHJpdmF0 ZSBrZXlcbiIsIG4pOwotKyAgICBwcmludGYoIlx0Qk4ga2V5IGJlZm9yZSBvdmVyd3JpdGluZzpc biIpOwotKyAgICBkb19ibl9wcmludChzdGRvdXQsIGtleS0+ZCk7Ci0rICAgIEJOX3JhbmQoa2V5 LT5kLG4qOCwtMSwwKTsKLSsgICAgcHJpbnRmKCJcdEJOIGtleSBhZnRlciBvdmVyd3JpdGluZzpc biIpOwotKyAgICBkb19ibl9wcmludChzdGRvdXQsIGtleS0+ZCk7Ci0rCi0rICAgIHByaW50Zigi XHRjaGFyIGJ1ZmZlciBrZXkgYmVmb3JlIG92ZXJ3cml0aW5nOiBcblx0XHQiKTsKLSsgICAgZm9y KGkgPSAwOyBpIDwgc2l6ZW9mKHVzZXJrZXkpOyBpKyspIHByaW50ZigiJTAyeCIsIHVzZXJrZXlb aV0pOwotKyAgICAgICAgcHJpbnRmKCJcbiIpOwotKyAgICBSQU5EX2J5dGVzKHVzZXJrZXksIHNp emVvZiB1c2Vya2V5KTsKLSsgICAgcHJpbnRmKCJcdGNoYXIgYnVmZmVyIGtleSBhZnRlciBvdmVy d3JpdGluZzogXG5cdFx0Iik7Ci0rICAgIGZvcihpID0gMDsgaSA8IHNpemVvZih1c2Vya2V5KTsg aSsrKSBwcmludGYoIiUwMngiLCB1c2Vya2V5W2ldKTsKLSsgICAgICAgIHByaW50ZigiXG4iKTsK LSsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLStzdGF0aWMgaW50IEVycm9yOwotK2NvbnN0 IGNoYXIgKiBGYWlsKGNvbnN0IGNoYXIgKm1zZykKLSsgICAgewotKyAgICBkb19wcmludF9lcnJv cnMoKTsKLSsgICAgRXJyb3IrKzsKLSsgICAgcmV0dXJuIG1zZzsgCi0rICAgIH0KLSsKLStpbnQg bWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKLSsgICAgewotKwotKyAgICBpbnQgZG9fY29ycnVw dF9yc2Ffa2V5Z2VuID0gMCwgZG9fY29ycnVwdF9kc2Ffa2V5Z2VuID0gMDsKLSsgICAgaW50IGJh ZF9yc2EgPSAwLCBiYWRfZHNhID0gMDsKLSsgICAgaW50IGRvX3JuZ19zdGljayA9IDA7Ci0rICAg IGludCBub19leGl0ID0gMDsKLSsKLSsgICAgcHJpbnRmKCJcdEZJUFMtbW9kZSB0ZXN0IGFwcGxp Y2F0aW9uXG5cbiIpOwotKwotKyAgICAvKiBMb2FkIGVudHJvcHkgZnJvbSBleHRlcm5hbCBmaWxl LCBpZiBhbnkgKi8KLSsgICAgUkFORF9sb2FkX2ZpbGUoIi5ybmQiLCAxMDI0KTsKLSsKLSsgICAg aWYgKGFyZ3ZbMV0pIHsKLSsgICAgICAgIC8qIENvcnJ1cHRlZCBLQVQgdGVzdHMgKi8KLSsgICAg ICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJhZXMiKSkgewotKyAgICAgICAgICAgIEZJUFNfY29y cnVwdF9hZXMoKTsKLSsgICAgICAgICAgICBwcmludGYoIkFFUyBlbmNyeXB0aW9uL2RlY3J5cHRp b24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNt cChhcmd2WzFdLCAiZGVzIikpIHsKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZGVzKCk7Ci0r ICAgICAgICAgICAgcHJpbnRmKCJERVMzLUVDQiBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0aCBj b3JydXB0ZWQgS0FULi4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFd LCAiZHNhIikpIHsKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZHNhKCk7Ci0rICAgICAgICAg ICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdp dGggY29ycnVwdGVkIEtBVC4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJn dlsxXSwgInJzYSIpKSB7Ci0rICAgICAgICAgICAgRklQU19jb3JydXB0X3JzYSgpOwotKyAgICAg ICAgICAgIHByaW50ZigiUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlv biB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21w KGFyZ3ZbMV0sICJyc2FrZXkiKSkgewotKyAgICAgICAgICAgIHByaW50ZigiUlNBIGtleSBnZW5l cmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXkuLi5cbiIp OwotKwkgICAgYmFkX3JzYSA9IDE7Ci0rCSAgICBub19leGl0ID0gMTsKLSsgICAgICAgIH0gZWxz ZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicnNha2V5Z2VuIikpIHsKLSsJICAgIGRvX2NvcnJ1cHRf cnNhX2tleWdlbiA9IDE7Ci0rCSAgICBub19leGl0ID0gMTsKLSsgICAgICAgICAgICBwcmludGYo IlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0 ZWQga2V5Z2VuLi4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAi ZHNha2V5IikpIHsKLSsgICAgICAgICAgICBwcmludGYoIkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQg c2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Li4uXG4iKTsKLSsJICAgIGJh ZF9kc2EgPSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJj bXAoYXJndlsxXSwgImRzYWtleWdlbiIpKSB7Ci0rCSAgICBkb19jb3JydXB0X2RzYV9rZXlnZW4g PSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0rICAgICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdl bmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleWdlbi4u LlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInNoYTEiKSkgewot KyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9zaGExKCk7Ci0rICAgICAgICAgICAgcHJpbnRmKCJT SEEtMSBoYXNoIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7Ci0rCX0gZWxzZSBpZiAoIXN0cmNt cChhcmd2WzFdLCAicm5nIikpIHsKLSsJICAgIEZJUFNfY29ycnVwdF9ybmcoKTsKLSsJfSBlbHNl IGlmICghc3RyY21wKGFyZ3ZbMV0sICJybmdzdGljayIpKSB7Ci0rCSAgICBkb19ybmdfc3RpY2sg PSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0rCSAgICBwcmludGYoIlJORyB0ZXN0IHdpdGggc3R1 Y2sgY29udGludW91cyB0ZXN0Li4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAg ICAgcHJpbnRmKCJCYWQgYXJndW1lbnQgXCIlc1wiXG4iLCBhcmd2WzFdKTsKLSsgICAgICAgICAg ICBleGl0KDEpOwotKyAgICAgICAgfQotKwlpZiAoIW5vX2V4aXQpIHsKLSsgICAgICAgIAlpZiAo IUZJUFNfbW9kZV9zZXQoMSkpIHsKLSsgCQkgICAgZG9fcHJpbnRfZXJyb3JzKCk7Ci0rICAgICAg ICAJICAgIHByaW50ZigiUG93ZXItdXAgc2VsZiB0ZXN0IGZhaWxlZFxuIik7Ci0rCQkgICAgZXhp dCgxKTsKLSsJCX0KLSsgICAgICAgIAlwcmludGYoIlBvd2VyLXVwIHNlbGYgdGVzdCBzdWNjZXNz ZnVsXG4iKTsKLSsgICAgICAgIAlleGl0KDApOwotKwl9Ci0rICAgIH0KLSsKLSsgICAgLyogTm9u LUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uCi0rICAgICovCi0rICAgIHByaW50Zigi MS4gTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uIHRlc3QuLi5cbiIpOwotKyAg ICBwcmludGYoIlx0YS4gSW5jbHVkZWQgYWxnb3JpdGhtIChELUgpLi4uIik7Ci0rICAgIHByaW50 ZiggZGhfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsK LSsgICAgLyogUG93ZXItdXAgc2VsZiB0ZXN0Ci0rICAgICovCi0rICAgIEVSUl9jbGVhcl9lcnJv cigpOwotKyAgICBwcmludGYoIjIuIEF1dG9tYXRpYyBwb3dlci11cCBzZWxmIHRlc3QuLi4iKTsK LSsgICAgaWYgKCFGSVBTX21vZGVfc2V0KDEpKQotKwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwot KyAgICAgICAgcHJpbnRmKEZhaWwoIkZBSUxFRCFcbiIpKTsKLSsJZXhpdCgxKTsKLSsJfQotKyAg ICBwcmludGYoInN1Y2Nlc3NmdWxcbiIpOwotKyAgICBpZiAoZG9fY29ycnVwdF9kc2Ffa2V5Z2Vu KQotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kc2Ffa2V5Z2VuKCk7Ci0rICAgIGlmIChkb19j b3JydXB0X3JzYV9rZXlnZW4pCi0rICAgICAgICAgICAgRklQU19jb3JydXB0X3JzYV9rZXlnZW4o KTsKLSsgICAgaWYgKGRvX3JuZ19zdGljaykKLSsgICAgICAgICAgICBGSVBTX3JuZ19zdGljaygp OwotKwotKyAgICAvKiBBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCi0rICAgICovCi0rICAgIHBy aW50ZigiMy4gQUVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4uLiIpOwotKyAgICBwcmludGYoIEZJ UFNfYWVzX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0r Ci0rICAgIC8qIFJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCi0r ICAgICovCi0rICAgIHByaW50ZigiNC4gUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBlbmNyeXB0aW9u L2RlY3J5cHRpb24uLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX3JzYV90ZXN0KGJhZF9yc2EpID8g InN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogREVTLUNC QyBlbmNyeXB0aW9uL2RlY3J5cHRpb24KLSsgICAgKi8KLSsgICAgcHJpbnRmKCI1LiBERVMtRUNC IGVuY3J5cHRpb24vZGVjcnlwdGlvbi4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfZGVzM190ZXN0 KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBE U0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uCi0rICAgICovCi0rICAg IHByaW50ZigiNi4gRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbi4u LiIpOwotKyAgICBwcmludGYoIEZJUFNfZHNhX3Rlc3QoYmFkX2RzYSkgPyAic3VjY2Vzc2Z1bFxu IiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBTSEEtMSBoYXNoCi0rICAgICov Ci0rICAgIHByaW50ZigiN2EuIFNIQS0xIGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX3No YTFfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsg ICAgLyogU0hBLTI1NiBoYXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2IuIFNIQS0yNTYgaGFz aC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfc2hhMjU2X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4i IDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIFNIQS01MTIgaGFzaAotKyAgICAq LwotKyAgICBwcmludGYoIjdjLiBTSEEtNTEyIGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBT X3NoYTUxMl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwot KwotKyAgICAvKiBITUFDLVNIQS0xIGhhc2gKLSsgICAgKi8KLSsgICAgcHJpbnRmKCI3ZC4gSE1B Qy1TSEEtMSBoYXNoLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19obWFjX3NoYTFfdGVzdCgpID8g InN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogSE1BQy1T SEEtMjI0IGhhc2gKLSsgICAgKi8KLSsgICAgcHJpbnRmKCI3ZS4gSE1BQy1TSEEtMjI0IGhhc2gu Li4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMjI0X3Rlc3QoKSA/ICJzdWNjZXNzZnVs XG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIEhNQUMtU0hBLTI1NiBoYXNo Ci0rICAgICovCi0rICAgIHByaW50ZigiN2YuIEhNQUMtU0hBLTI1NiBoYXNoLi4uIik7Ci0rICAg IHByaW50ZiggRklQU19obWFjX3NoYTI1Nl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWls KCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBITUFDLVNIQS0zODQgaGFzaAotKyAgICAqLwot KyAgICBwcmludGYoIjdnLiBITUFDLVNIQS0zODQgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJ UFNfaG1hY19zaGEzODRfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxu IikgKTsKLSsKLSsgICAgLyogSE1BQy1TSEEtNTEyIGhhc2gKLSsgICAgKi8KLSsgICAgcHJpbnRm KCI3aC4gSE1BQy1TSEEtNTEyIGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hh NTEyX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0r ICAgIC8qIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbgotKyAgICAqLwotKyAg ICBwcmludGYoIjguIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbiB0ZXN0Li4u XG4iKTsKLSsgICAgcHJpbnRmKCJcdGEuIEluY2x1ZGVkIGFsZ29yaXRobSAoRC1IKS4uLiIpOwot KyAgICBwcmludGYoIGRoX3Rlc3QoKSA/ICJzdWNjZXNzZnVsIGFzIGV4cGVjdGVkXG4iCi0rCSAg ICA6IEZhaWwoImZhaWxlZCBJTkNPUlJFQ1RMWSFcbiIpICk7Ci0rCi0rICAgIC8qIFplcm9pemF0 aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiOS4gWmVyby1pemF0aW9uLi4uXG4iKTsKLSsgICAg cHJpbnRmKCBaZXJvaXplKCkgPyAiXHRzdWNjZXNzZnVsIGFzIGV4cGVjdGVkXG4iCi0rCSAgICA6 IEZhaWwoIlx0ZmFpbGVkIElOQ09SUkVDVExZIVxuIikgKTsKLSsKLSsgICAgcHJpbnRmKCJcbkFs bCB0ZXN0cyBjb21wbGV0ZWQgd2l0aCAlZCBlcnJvcnNcbiIsIEVycm9yKTsKLSsgICAgcmV0dXJu IEVycm9yID8gMSA6IDA7Ci0rICAgIH0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBv cGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9maXBzX2xvY2wuaAotLS0tIC9kZXYvbnVsbAkyMDA5 LTA5LTIzIDEwOjU2OjAyLjE0ODAwMTc1MiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL2ZpcHNfbG9jbC5oCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1A QCAtMCwwICsxLDcyIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl Ci0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQg Ik9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICog ICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVh c2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKwotKyNpZmRlZiAgX19jcGx1c3BsdXMKLStleHRlcm4gIkMiIHsKLSsjZW5k aWYKLSsKLSt2b2lkIGZpcHNfd19sb2NrKHZvaWQpOwotK3ZvaWQgZmlwc193X3VubG9jayh2b2lk KTsKLSt2b2lkIGZpcHNfcl9sb2NrKHZvaWQpOwotK3ZvaWQgZmlwc19yX3VubG9jayh2b2lkKTsK LStpbnQgZmlwc19pc19zdGFydGVkKHZvaWQpOwotK3ZvaWQgZmlwc19zZXRfc3RhcnRlZCh2b2lk KTsKLStpbnQgZmlwc19pc19vd25pbmdfdGhyZWFkKHZvaWQpOwotK2ludCBmaXBzX3NldF9vd25p bmdfdGhyZWFkKHZvaWQpOwotK3ZvaWQgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCh2b2lkKTsKLStp bnQgZmlwc19jbGVhcl9vd25pbmdfdGhyZWFkKHZvaWQpOwotKwotKyNkZWZpbmUgRklQU19NQVhf Q0lQSEVSX1RFU1RfU0laRQkxNgotKwotKyNpZmRlZiAgX19jcGx1c3BsdXMKLSt9Ci0rI2VuZGlm Ci0rI2VuZGlmCi1kaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8v Zmlwcy9NYWtlZmlsZQotLS0tIC9kZXYvbnVsbAkyMDA5LTA5LTIzIDEwOjU2OjAyLjE0ODAwMTc1 MiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2ZpcHMvTWFrZWZpbGUJMjAw OS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsODEgQEAKLSsjCi0r IyBPcGVuU1NML2NyeXB0by9maXBzL01ha2VmaWxlCi0rIwotKwotK0RJUj0JZmlwcwotK1RPUD0J Li4vLi4KLStDQz0JY2MKLStJTkNMVURFUz0KLStDRkxBRz0tZwotK01BS0VGSUxFPQlNYWtlZmls ZQotK0FSPQkJYXIgcgotKwotK0NGTEFHUz0gJChJTkNMVURFUykgJChDRkxBRykKLSsKLStHRU5F UkFMPU1ha2VmaWxlCi0rVEVTVD1maXBzX3Rlc3Rfc3VpdGUuYyBmaXBzX3JhbmR0ZXN0LmMKLStB UFBTPQotKwotK0xJQj0kKFRPUCkvbGliY3J5cHRvLmEKLStMSUJTUkM9Zmlwc19hZXNfc2VsZnRl c3QuYyBmaXBzX2Rlc19zZWxmdGVzdC5jIGZpcHNfaG1hY19zZWxmdGVzdC5jIGZpcHNfcmFuZF9z ZWxmdGVzdC5jIFwKLSsgICAgZmlwc19yc2Ffc2VsZnRlc3QuYyBmaXBzX3NoYTFfc2VsZnRlc3Qu YyBmaXBzLmMgZmlwc19kc2Ffc2VsZnRlc3QuYyAgZmlwc19yYW5kLmMgXAotKyAgICBmaXBzX3Jz YV94OTMxZy5jCi0rCi0rTElCT0JKPWZpcHNfYWVzX3NlbGZ0ZXN0Lm8gZmlwc19kZXNfc2VsZnRl c3QubyBmaXBzX2htYWNfc2VsZnRlc3QubyBmaXBzX3JhbmRfc2VsZnRlc3QubyBcCi0rICAgIGZp cHNfcnNhX3NlbGZ0ZXN0Lm8gZmlwc19zaGExX3NlbGZ0ZXN0Lm8gZmlwcy5vIGZpcHNfZHNhX3Nl bGZ0ZXN0Lm8gIGZpcHNfcmFuZC5vIFwKLSsgICAgZmlwc19yc2FfeDkzMWcubwotKwotK1NSQz0g JChMSUJTUkMpIGZpcHNfc3RhbmRhbG9uZV9zaGExLmMKLSsKLStFWEhFQURFUj0gZmlwcy5oIGZp cHNfcmFuZC5oCi0rSEVBREVSPQkkKEVYSEVBREVSKQotKwotK0FMTD0gICAgJChHRU5FUkFMKSAk KFNSQykgJChIRUFERVIpCi0rCi0rdG9wOgotKwkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlw dG8gU0RJUlM9JChESVIpIHN1Yl9hbGwpCi0rCi0rYWxsOglsaWIKLSsKLStsaWI6CSQoTElCT0JK KQotKwkkKEFSKSAkKExJQikgJChMSUJPQkopCi0rCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBO ZXZlciBtaW5kLgotKwlAdG91Y2ggbGliCi0rCi0rZmlsZXM6Ci0rCSQoUEVSTCkgJChUT1ApL3V0 aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCi0rCi0rbGlua3M6Ci0rCUAkKFBF UkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURF UikKLSsJQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL3Rlc3QgJChURVNUKQot KwlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCi0rCi0r aW5zdGFsbDoKLSsJQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRv cCBNYWtlZmlsZS4uLgotKwlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhl YWRlcmxpc3QgOyBcCi0rCWRvICBcCi0rCShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RB TExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7IFwKLSsJY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVG SVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKLSsJZG9uZTsKLSsKLSt0 YWdzOgotKwljdGFncyAkKFNSQykKLSsKLSt0ZXN0czoKLSsKLStsaW50OgotKwlsaW50IC1ETElO VCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKLSsKLStkZXBlbmQ6Ci0rCUBbIC1uICIkKE1BS0VE RVBFTkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmlsZS4uLgotKwkkKE1BS0VE RVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChM SUJTUkMpCi0rCi0rZGNsZWFuOgotKwkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRF IFRISVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3 Ci0rCW12IC1mIE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxFKQotKwotK2NsZWFuOgotKwlybSAtZiAq Lm8gKi5vYmogbGliIHRhZ3MgY29yZSAucHVyZSAubmZzKiAqLm9sZCAqLmJhayBmbHVmZgotKwot KyMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4K LSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2htYWMvaG1hYy5jLmZpcHMg b3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vaG1hYy9obWFjLmMKLS0tLSBvcGVuc3NsLTEuMC4w LWJldGEzL2NyeXB0by9obWFjL2htYWMuYy5maXBzCTIwMDgtMTEtMTIgMDQ6NTg6MDIuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vaG1hYy9obWFjLmMJMjAw OS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC03Nyw2ICs3NywxMyBAQCBpbnQg SE1BQ19Jbml0X2V4KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHZvCi0gCi0gCWlmIChrZXkgIT0gTlVM TCkKLSAJCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQlpZiAoRklQU19tb2RlKCkgJiYgISht ZC0+ZmxhZ3MgJiBFVlBfTURfRkxBR19GSVBTKQotKwkJJiYgKCEoY3R4LT5tZF9jdHguZmxhZ3Mg JiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0rCQkgfHwgIShjdHgtPmlfY3R4LmZs YWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKQotKwkJIHx8ICEoY3R4LT5vX2N0 eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykpKQotKwkJCWdvdG8gZXJy OwotKyNlbmRpZgotIAkJcmVzZXQ9MTsKLSAJCWo9RVZQX01EX2Jsb2NrX3NpemUobWQpOwotIAkJ T1BFTlNTTF9hc3NlcnQoaiA8PSAoaW50KXNpemVvZihjdHgtPmtleSkpOwotQEAgLTIwOSwzICsy MTYsMTAgQEAgdW5zaWduZWQgY2hhciAqSE1BQyhjb25zdCBFVlBfTUQgKmV2cF9tZAotIAlyZXR1 cm4gTlVMTDsKLSAJfQotIAotK3ZvaWQgSE1BQ19DVFhfc2V0X2ZsYWdzKEhNQUNfQ1RYICpjdHgs IHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi0rCXsKLSsJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eC0+ aV9jdHgsIGZsYWdzKTsKLSsJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eC0+b19jdHgsIGZsYWdz KTsKLSsJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eC0+bWRfY3R4LCBmbGFncyk7Ci0rCX0KLSsK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL2htYWMvaG1hYy5oLmZpcHMgb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vaG1hYy9obWFjLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJl dGEzL2NyeXB0by9obWFjL2htYWMuaC5maXBzCTIwMDktMDktMzAgMTM6MjU6NTcuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vaG1hYy9obWFjLmgJMjAwOS0w OS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xMDEsNiArMTAxLDcgQEAgdW5zaWdu ZWQgY2hhciAqSE1BQyhjb25zdCBFVlBfTUQgKmV2cF9tZAotIAkJICAgIHVuc2lnbmVkIGludCAq bWRfbGVuKTsKLSBpbnQgSE1BQ19DVFhfY29weShITUFDX0NUWCAqZGN0eCwgSE1BQ19DVFggKnNj dHgpOwotIAotK3ZvaWQgSE1BQ19DVFhfc2V0X2ZsYWdzKEhNQUNfQ1RYICpjdHgsIHVuc2lnbmVk IGxvbmcgZmxhZ3MpOwotIAotICNpZmRlZiAgX19jcGx1c3BsdXMKLSB9Ci1kaWZmIC11cCBvcGVu c3NsLTEuMC4wLWJldGEzL2NyeXB0by9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL01ha2VmaWxlCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vTWFrZWZpbGUu ZmlwcwkyMDA5LTA0LTA2IDE2OjMxOjM1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4w LjAtYmV0YTMvY3J5cHRvL01ha2VmaWxlCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICsw MjAwCi1AQCAtMzQsMTQgKzM0LDE0IEBAIEdFTkVSQUw9TWFrZWZpbGUgUkVBRE1FIGNyeXB0by1s aWIuY29tIGkKLSAKLSBMSUI9ICQoVE9QKS9saWJjcnlwdG8uYQotIFNIQVJFRF9MSUI9IGxpYmNy eXB0byQoU0hMSUJfRVhUKQotLUxJQlNSQz0JY3J5cHRsaWIuYyBtZW0uYyBtZW1fY2xyLmMgbWVt X2RiZy5jIGN2ZXJzaW9uLmMgZXhfZGF0YS5jIGNwdF9lcnIuYyBlYmNkaWMuYyB1aWQuYyBvX3Rp bWUuYyBvX3N0ci5jIG9fZGlyLmMKLS1MSUJPQko9IGNyeXB0bGliLm8gbWVtLm8gbWVtX2RiZy5v IGN2ZXJzaW9uLm8gZXhfZGF0YS5vIGNwdF9lcnIubyBlYmNkaWMubyB1aWQubyBvX3RpbWUubyBv X3N0ci5vIG9fZGlyLm8gJChDUFVJRF9PQkopCi0rTElCU1JDPQljcnlwdGxpYi5jIG1lbS5jIG1l bV9jbHIuYyBtZW1fZGJnLmMgY3ZlcnNpb24uYyBleF9kYXRhLmMgY3B0X2Vyci5jIGViY2RpYy5j IHVpZC5jIG9fdGltZS5jIG9fc3RyLmMgb19kaXIuYyBvX2luaXQuYyBmaXBzX2Vyci5jCi0rTElC T0JKPSBjcnlwdGxpYi5vIG1lbS5vIG1lbV9kYmcubyBjdmVyc2lvbi5vIGV4X2RhdGEubyBjcHRf ZXJyLm8gZWJjZGljLm8gdWlkLm8gb190aW1lLm8gb19zdHIubyBvX2Rpci5vIG9faW5pdC5vIGZp cHNfZXJyLm8gJChDUFVJRF9PQkopCi0gCi0gU1JDPSAkKExJQlNSQykKLSAKLSBFWEhFQURFUj0g Y3J5cHRvLmggb3BlbnNzbHYuaCBvcGVuc3NsY29uZi5oIGViY2RpYy5oIHN5bWhhY2tzLmggXAot IAlvc3NsX3R5cC5oCi0tSEVBREVSPQljcnlwdGxpYi5oIGJ1aWxkaW5mLmggbWQzMl9jb21tb24u aCBvX3RpbWUuaCBvX3N0ci5oIG9fZGlyLmggJChFWEhFQURFUikKLStIRUFERVI9CWNyeXB0bGli LmggYnVpbGRpbmYuaCBmaXBzX2xvY2wuaCBtZDMyX2NvbW1vbi5oIG9fdGltZS5oIG9fc3RyLmgg b19kaXIuaCAkKEVYSEVBREVSKQotIAotIEFMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChIRUFE RVIpCi0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9tZGMyL21kYzJkZ3N0 LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMKLS0tLSBv cGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMuZmlwcwkyMDA0LTA3LTI1 IDIxOjEwOjQxLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRv L21kYzIvbWRjMmRnc3QuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAg LTYxLDYgKzYxLDExIEBACi0gI2luY2x1ZGUgPHN0cmluZy5oPgotICNpbmNsdWRlIDxvcGVuc3Ns L2Rlcy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL21kYzIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgot KyNlbmRpZgotKwotIAotICN1bmRlZiBjMmwKLSAjZGVmaW5lIGMybChjLGwpCShsID0oKERFU19M T05HKSgqKChjKSsrKSkpICAgICwgXAotQEAgLTc1LDcgKzgwLDcgQEAKLSAJCQkqKChjKSsrKT0o dW5zaWduZWQgY2hhcikoKChsKT4+MjRMKSYweGZmKSkKLSAKLSBzdGF0aWMgdm9pZCBtZGMyX2Jv ZHkoTURDMl9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgbGVuKTsKLS1p bnQgTURDMl9Jbml0KE1EQzJfQ1RYICpjKQotK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChNREMyKQot IAl7Ci0gCWMtPm51bT0wOwotIAljLT5wYWRfdHlwZT0xOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC1iZXRhMy9jcnlwdG8vbWRjMi9tZGMyLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0 by9tZGMyL21kYzIuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL21kYzIvbWRjMi5o LmZpcHMJMjAwOS0wOS0zMCAxMzoyNTo1Ny4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEu MC4wLWJldGEzL2NyeXB0by9tZGMyL21kYzIuaAkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAw MCArMDIwMAotQEAgLTgwLDcgKzgwLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgbWRjMl9jdHhfc3QKLSAJ aW50IHBhZF90eXBlOyAvKiBlaXRoZXIgMSBvciAyLCBkZWZhdWx0IDEgKi8KLSAJfSBNREMyX0NU WDsKLSAKLS0KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IHByaXZhdGVfTURDMl9Jbml0KE1E QzJfQ1RYICpjKTsKLSsjZW5kaWYKLSBpbnQgTURDMl9Jbml0KE1EQzJfQ1RYICpjKTsKLSBpbnQg TURDMl9VcGRhdGUoTURDMl9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVf dCBsZW4pOwotIGludCBNREMyX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBNREMyX0NUWCAqYyk7 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9tZDIvbWQyX2Rnc3QuYy5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL21kMi9tZDJfZGdzdC5jCi0tLS0gb3BlbnNzbC0x LjAuMC1iZXRhMy9jcnlwdG8vbWQyL21kMl9kZ3N0LmMuZmlwcwkyMDA3LTA4LTMxIDEyOjEyOjM1 LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL21kMi9tZDJf ZGdzdC5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtNjIsNiArNjIs MTEgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9tZDIuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9vcGVu c3Nsdi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0rI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+Ci0gCi0gY29uc3QgY2hhciBNRDJfdmVyc2lvbltdPSJNRDIiIE9QRU5TU0xf VkVSU0lPTl9QVEVYVDsKLSAKLUBAIC0xMTYsNyArMTIxLDcgQEAgY29uc3QgY2hhciAqTUQyX29w dGlvbnModm9pZCkKLSAJCXJldHVybigibWQyKGludCkiKTsKLSAJfQotIAotLWludCBNRDJfSW5p dChNRDJfQ1RYICpjKQotK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChNRDIpCi0gCXsKLSAJYy0+bnVt PTA7Ci0gCW1lbXNldChjLT5zdGF0ZSwwLHNpemVvZiBjLT5zdGF0ZSk7Ci1kaWZmIC11cCBvcGVu c3NsLTEuMC4wLWJldGEzL2NyeXB0by9tZDIvbWQyLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEz L2NyeXB0by9tZDIvbWQyLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9tZDIvbWQy LmguZmlwcwkyMDA5LTA5LTMwIDEzOjI1OjU3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wt MS4wLjAtYmV0YTMvY3J5cHRvL21kMi9tZDIuaAkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAw MCArMDIwMAotQEAgLTgxLDYgKzgxLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgTUQyc3RhdGVfc3QKLSAJ fSBNRDJfQ1RYOwotIAotIGNvbnN0IGNoYXIgKk1EMl9vcHRpb25zKHZvaWQpOwotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLStpbnQgcHJpdmF0ZV9NRDJfSW5pdChNRDJfQ1RYICpjKTsKLSsjZW5kaWYK LSBpbnQgTUQyX0luaXQoTUQyX0NUWCAqYyk7Ci0gaW50IE1EMl9VcGRhdGUoTUQyX0NUWCAqYywg Y29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGxlbik7Ci0gaW50IE1EMl9GaW5hbCh1 bnNpZ25lZCBjaGFyICptZCwgTUQyX0NUWCAqYyk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGEzL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRv L21kNC9tZDRfZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vbWQ0L21kNF9k Z3N0LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjExLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5z c2wtMS4wLjAtYmV0YTMvY3J5cHRvL21kNC9tZDRfZGdzdC5jCTIwMDktMDktMzAgMTM6MjU6NTgu MDAwMDAwMDAwICswMjAwCi1AQCAtNTksNiArNTksMTEgQEAKLSAjaW5jbHVkZSA8c3RkaW8uaD4K LSAjaW5jbHVkZSAibWQ0X2xvY2wuaCIKLSAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVk ZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gCi0gY29uc3QgY2hhciBNRDRfdmVyc2lv bltdPSJNRDQiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLUBAIC03MCw3ICs3NSw3IEBAIGNv bnN0IGNoYXIgTUQ0X3ZlcnNpb25bXT0iTUQ0IiBPUEVOU1NMX1YKLSAjZGVmaW5lIElOSVRfREFU QV9DICh1bnNpZ25lZCBsb25nKTB4OThiYWRjZmVMCi0gI2RlZmluZSBJTklUX0RBVEFfRCAodW5z aWduZWQgbG9uZykweDEwMzI1NDc2TAotIAotLWludCBNRDRfSW5pdChNRDRfQ1RYICpjKQotK0ZJ UFNfTk9OX0ZJUFNfTURfSW5pdChNRDQpCi0gCXsKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7 Ci0gCWMtPkE9SU5JVF9EQVRBX0E7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0 by9tZDQvbWQ0LmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9tZDQvbWQ0LmgKLS0t LSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9tZDQvbWQ0LmguZmlwcwkyMDA5LTA5LTMwIDEz OjI1OjU3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL21k NC9tZDQuaAkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTEwNSw2ICsx MDUsOSBAQCB0eXBlZGVmIHN0cnVjdCBNRDRzdGF0ZV9zdAotIAl1bnNpZ25lZCBpbnQgbnVtOwot IAl9IE1ENF9DVFg7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK2ludCBwcml2YXRlX01ENF9J bml0KE1ENF9DVFggKmMpOwotKyNlbmRpZgotIGludCBNRDRfSW5pdChNRDRfQ1RYICpjKTsKLSBp bnQgTUQ0X1VwZGF0ZShNRDRfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsK LSBpbnQgTUQ0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBNRDRfQ1RYICpjKTsKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL21kNS9tZDVfZGdzdC5jLmZpcHMgb3BlbnNzbC0x LjAuMC1iZXRhMy9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEz L2NyeXB0by9tZDUvbWQ1X2Rnc3QuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6MTEuMDAwMDAwMDAw ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMJMjAw OS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC01OSw2ICs1OSwxMSBAQAotICNp bmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlICJtZDVfbG9jbC5oIgotICNpbmNsdWRlIDxvcGVu c3NsL29wZW5zc2x2Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5T U0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAKLSBjb25z dCBjaGFyIE1ENV92ZXJzaW9uW109Ik1ENSIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotQEAg LTcwLDcgKzc1LDcgQEAgY29uc3QgY2hhciBNRDVfdmVyc2lvbltdPSJNRDUiIE9QRU5TU0xfVgot ICNkZWZpbmUgSU5JVF9EQVRBX0MgKHVuc2lnbmVkIGxvbmcpMHg5OGJhZGNmZUwKLSAjZGVmaW5l IElOSVRfREFUQV9EICh1bnNpZ25lZCBsb25nKTB4MTAzMjU0NzZMCi0gCi0taW50IE1ENV9Jbml0 KE1ENV9DVFggKmMpCi0rRklQU19OT05fRklQU19NRF9Jbml0KE1ENSkKLSAJewotIAltZW1zZXQg KGMsMCxzaXplb2YoKmMpKTsKLSAJYy0+QT1JTklUX0RBVEFfQTsKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjAtYmV0YTMvY3J5cHRvL21kNS9tZDUuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5 cHRvL21kNS9tZDUuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL21kNS9tZDUuaC5m aXBzCTIwMDktMDktMzAgMTM6MjU6NTcuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhMy9jcnlwdG8vbWQ1L21kNS5oCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICsw MjAwCi1AQCAtMTA1LDYgKzEwNSw5IEBAIHR5cGVkZWYgc3RydWN0IE1ENXN0YXRlX3N0Ci0gCXVu c2lnbmVkIGludCBudW07Ci0gCX0gTUQ1X0NUWDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r aW50IHByaXZhdGVfTUQ1X0luaXQoTUQ1X0NUWCAqYyk7Ci0rI2VuZGlmCi0gaW50IE1ENV9Jbml0 KE1ENV9DVFggKmMpOwotIGludCBNRDVfVXBkYXRlKE1ENV9DVFggKmMsIGNvbnN0IHZvaWQgKmRh dGEsIHNpemVfdCBsZW4pOwotIGludCBNRDVfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIE1ENV9D VFggKmMpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vbWVtLmMuZmlwcyBv cGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9tZW0uYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL21lbS5jLmZpcHMJMjAwOC0xMS0xMiAwNDo1Nzo0Ny4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9tZW0uYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAw MDAwMDAwMCArMDIwMAotQEAgLTEwMSw3ICsxMDEsNyBAQCBzdGF0aWMgdm9pZCAoKmZyZWVfbG9j a2VkX2Z1bmMpKHZvaWQgKikgCi0gCi0gLyogbWF5IGJlIGNoYW5nZWQgYXMgbG9uZyBhcyAnYWxs b3dfY3VzdG9taXplX2RlYnVnJyBpcyBzZXQgKi8KLSAvKiBYWFggdXNlIGNvcnJlY3QgZnVuY3Rp b24gcG9pbnRlciB0eXBlcyAqLwotLSNpZmRlZiBDUllQVE9fTURFQlVHCi0rI2lmIGRlZmluZWQo Q1JZUFRPX01ERUJVRykgJiYgIWRlZmluZWQoT1BFTlNTTF9GSVBTKQotIC8qIHVzZSBkZWZhdWx0 IGZ1bmN0aW9ucyBmcm9tIG1lbV9kYmcuYyAqLwotIHN0YXRpYyB2b2lkICgqbWFsbG9jX2RlYnVn X2Z1bmMpKHZvaWQgKixpbnQsY29uc3QgY2hhciAqLGludCxpbnQpCi0gCT0gQ1JZUFRPX2RiZ19t YWxsb2M7Ci1kaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vb19p bml0LmMKLS0tLSAvZGV2L251bGwJMjAwOS0wOS0yMyAxMDo1NjowMi4xNDgwMDE3NTIgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9vX2luaXQuYwkyMDA5LTA5LTMwIDEzOjI1 OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSw4MCBAQAotKy8qIG9faW5pdC5jICovCi0r LyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9y IHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENv cHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoK LSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMK LSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVu U1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0r ICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVu IHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wu b3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK LSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws Ci0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNv ZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24g KHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxlX29zLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rCi0rLyogUGVyZm9ybSBhbnkgZXNzZW50aWFsIE9w ZW5TU0wgaW5pdGlhbGl6YXRpb24gb3BlcmF0aW9ucy4KLSsgKiBDdXJyZW50bHkgb25seSBzZXRz IEZJUFMgY2FsbGJhY2tzCi0rICovCi0rCi0rdm9pZCBPUEVOU1NMX2luaXRfbGlicmFyeSh2b2lk KQotKwl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlzdGF0aWMgaW50IGRvbmUgPSAwOwotKwlp ZiAoIWRvbmUpCi0rCQl7Ci0rI2lmZGVmIENSWVBUT19NREVCVUcKLSsJCUNSWVBUT19tYWxsb2Nf ZGVidWdfaW5pdCgpOwotKyNlbmRpZgotKwkJZG9uZSA9IDE7Ci0rCQl9Ci0rI2VuZGlmCi0rCX0K LSsJCQotKwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vb3BlbnNzbGNvbmYu aC5pbi5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL29wZW5zc2xjb25mLmguaW4KLS0t LSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9vcGVuc3NsY29uZi5oLmluLmZpcHMJMjAwNS0x Mi0xNiAxMTozNzoyMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2Ny eXB0by9vcGVuc3NsY29uZi5oLmluCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAw Ci1AQCAtMSw1ICsxLDIwIEBACi0gLyogY3J5cHRvL29wZW5zc2xjb25mLmguaW4gKi8KLSAKLSsj aWZkZWYgT1BFTlNTTF9ET0lOR19NQUtFREVQRU5ECi0rCi0rLyogSW5jbHVkZSBhbnkgc3ltYm9s cyBoZXJlIHRoYXQgaGF2ZSB0byBiZSBleHBsaWNpdGx5IHNldCB0byBlbmFibGUgYSBmZWF0dXJl Ci0rICogdGhhdCBzaG91bGQgYmUgdmlzaWJsZSB0byBtYWtlZGVwZW5kLgotKyAqCi0rICogW091 ciAibWFrZSBkZXBlbmQiIGRvZXNuJ3QgYWN0dWFsbHkgbG9vayBhdCB0aGlzLCB3ZSB1c2UgYWN0 dWFsIGJ1aWxkIHNldHRpbmdzCi0rICogaW5zdGVhZDsgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kg dG8gcmVtb3ZlIHN1YmRpcmVjdG9yaWVzIHdpdGggZGlzYWJsZWQgYWxnb3JpdGhtcy5dCi0rICov Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjZGVmaW5lIE9QRU5TU0xfRklQUwotKyNlbmRp ZgotKwotKyNlbmRpZgotKwotIC8qIEdlbmVyYXRlIDgwMzg2IGNvZGU/ICovCi0gI3VuZGVmIEkz ODZfT05MWQotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcGtjczEyL3Ax Ml9jcnQuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3BrY3MxMi9wMTJfY3J0LmMK LS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9wa2NzMTIvcDEyX2NydC5jLmZpcHMJMjAw OS0wMy0wOSAxNDowODowNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEz L2NyeXB0by9wa2NzMTIvcDEyX2NydC5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICsw MjAwCi1AQCAtNTksNiArNTksMTAgQEAKLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVkZSAi Y3J5cHRsaWIuaCIKLSAjaW5jbHVkZSA8b3BlbnNzbC9wa2NzMTIuaD4KLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotIAotIAotIHN0 YXRpYyBpbnQgcGtjczEyX2FkZF9iYWcoU1RBQ0tfT0YoUEtDUzEyX1NBRkVCQUcpICoqcGJhZ3Ms IFBLQ1MxMl9TQUZFQkFHICpiYWcpOwotQEAgLTkwLDcgKzk0LDE0IEBAIFBLQ1MxMiAqUEtDUzEy X2NyZWF0ZShjaGFyICpwYXNzLCBjaGFyICoKLSAKLSAJLyogU2V0IGRlZmF1bHRzICovCi0gCWlm ICghbmlkX2NlcnQpCi0rCQl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJaWYgKEZJUFNfbW9k ZSgpKQotKwkJCW5pZF9jZXJ0ID0gTklEX3BiZV9XaXRoU0hBMUFuZDNfS2V5X1RyaXBsZURFU19D QkM7Ci0rCQllbHNlCi0rI2VuZGlmCi0gCQluaWRfY2VydCA9IE5JRF9wYmVfV2l0aFNIQTFBbmQ0 MEJpdFJDMl9DQkM7Ci0rCQl9Ci0gCWlmICghbmlkX2tleSkKLSAJCW5pZF9rZXkgPSBOSURfcGJl X1dpdGhTSEExQW5kM19LZXlfVHJpcGxlREVTX0NCQzsKLSAJaWYgKCFpdGVyKQotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmFuZC9tZF9yYW5kLmMuZmlwcyBvcGVuc3NsLTEu MC4wLWJldGEzL2NyeXB0by9yYW5kL21kX3JhbmQuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL3JhbmQvbWRfcmFuZC5jLmZpcHMJMjAwOS0wMS0wMyAxMDoyNTozMi4wMDAwMDAwMDAg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYW5kL21kX3JhbmQuYwkyMDA5 LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTEyNiw2ICsxMjYsMTAgQEAKLSAK LSAjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRp ZgotKwotIAotICNpZmRlZiBCTl9ERUJVRwotICMgZGVmaW5lIFBSRURJQ1QKLUBAIC0zNDIsNiAr MzQ2LDE0IEBAIHN0YXRpYyBpbnQgc3NsZWF5X3JhbmRfYnl0ZXModW5zaWduZWQgY2gKLSAjZW5k aWYKLSAJaW50IGRvX3N0aXJfcG9vbCA9IDA7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlp ZihGSVBTX21vZGUoKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX1NTTEVBWV9SQU5E X0JZVEVTLEZJUFNfUl9OT05fRklQU19NRVRIT0QpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9 Ci0rI2VuZGlmCi0rCi0gI2lmZGVmIFBSRURJQ1QKLSAJaWYgKHJhbmRfcHJlZGljdGFibGUpCi0g CQl7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYW5kL3JhbmRfZXJyLmMu ZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYW5kL3JhbmRfZXJyLmMKLS0tLSBvcGVu c3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYW5kL3JhbmRfZXJyLmMuZmlwcwkyMDA2LTExLTIxIDIy OjI5OjQxLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3Jh bmQvcmFuZF9lcnIuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTcw LDYgKzcwLDEzIEBACi0gCi0gc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSQU5EX3N0cl9mdW5jdHNb XT0KLSAJewotK3tFUlJfRlVOQyhSQU5EX0ZfRU5HX1JBTkRfR0VUX1JBTkRfTUVUSE9EKSwJIkVO R19SQU5EX0dFVF9SQU5EX01FVEhPRCJ9LAotK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19SQU5EKSwJ IkZJUFNfUkFORCJ9LAotK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19SQU5EX0JZVEVTKSwJIkZJUFNf UkFORF9CWVRFUyJ9LAotK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19SQU5EX1NFVF9EVCksCSJGSVBT X1JBTkRfU0VUX0RUIn0sCi0re0VSUl9GVU5DKFJBTkRfRl9GSVBTX1NFVF9EVCksCSJGSVBTX1NF VF9EVCJ9LAotK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVEKSwJIkZJUFNfU0VU X1BSTkdfU0VFRCJ9LAotK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19TRVRfVEVTVF9NT0RFKSwJIkZJ UFNfU0VUX1RFU1RfTU9ERSJ9LAotIHtFUlJfRlVOQyhSQU5EX0ZfUkFORF9HRVRfUkFORF9NRVRI T0QpLAkiUkFORF9nZXRfcmFuZF9tZXRob2QifSwKLSB7RVJSX0ZVTkMoUkFORF9GX1NTTEVBWV9S QU5EX0JZVEVTKSwJIlNTTEVBWV9SQU5EX0JZVEVTIn0sCi0gezAsTlVMTH0KLUBAIC03Nyw3ICs4 NCwxNyBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFJBTkRfc3RyX2Z1bmN0c1tdCi0gCi0gc3Rh dGljIEVSUl9TVFJJTkdfREFUQSBSQU5EX3N0cl9yZWFzb25zW109Ci0gCXsKLSt7RVJSX1JFQVNP TihSQU5EX1JfTk9OX0ZJUFNfTUVUSE9EKSAgICAgICwibm9uIGZpcHMgbWV0aG9kIn0sCi0re0VS Ul9SRUFTT04oUkFORF9SX05PVF9JTl9URVNUX01PREUpICAgICAsIm5vdCBpbiB0ZXN0IG1vZGUi fSwKLSt7RVJSX1JFQVNPTihSQU5EX1JfTk9fS0VZX1NFVCkgICAgICAgICAgICwibm8ga2V5IHNl dCJ9LAotK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX0FTS0lOR19GT1JfVE9PX01VQ0gpLCJwcm5n IGFza2luZyBmb3IgdG9vIG11Y2gifSwKLSt7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19FUlJPUikg ICAgICAgICAgICwicHJuZyBlcnJvciJ9LAotK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX0tFWUVE KSAgICAgICAgICAgLCJwcm5nIGtleWVkIn0sCi0re0VSUl9SRUFTT04oUkFORF9SX1BSTkdfTk9U X1JFS0VZRUQpICAgICAsInBybmcgbm90IHJla2V5ZWQifSwKLSt7RVJSX1JFQVNPTihSQU5EX1Jf UFJOR19OT1RfUkVTRUVERUQpICAgICwicHJuZyBub3QgcmVzZWVkZWQifSwKLSB7RVJSX1JFQVNP TihSQU5EX1JfUFJOR19OT1RfU0VFREVEKSAgICAgICwiUFJORyBub3Qgc2VlZGVkIn0sCi0re0VS Ul9SRUFTT04oUkFORF9SX1BSTkdfU0VFRF9NVVNUX05PVF9NQVRDSF9LRVkpLCJwcm5nIHNlZWQg bXVzdCBub3QgbWF0Y2gga2V5In0sCi0re0VSUl9SRUFTT04oUkFORF9SX1BSTkdfU1RVQ0spICAg ICAgICAgICAsInBybmcgc3R1Y2sifSwKLSB7MCxOVUxMfQotIAl9OwotIAotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmFuZC9yYW5kLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJl dGEzL2NyeXB0by9yYW5kL3JhbmQuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3Jh bmQvcmFuZC5oLmZpcHMJMjAwOS0wOS0zMCAxMzoyNTo1Ny4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYW5kL3JhbmQuaAkyMDA5LTA5LTMwIDEzOjI1OjU4 LjAwMDAwMDAwMCArMDIwMAotQEAgLTEyOCwxMSArMTI4LDI4IEBAIHZvaWQgRVJSX2xvYWRfUkFO RF9zdHJpbmdzKHZvaWQpOwotIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgUkFORCBmdW5jdGlvbnMu ICovCi0gCi0gLyogRnVuY3Rpb24gY29kZXMuICovCi0rI2RlZmluZSBSQU5EX0ZfRU5HX1JBTkRf R0VUX1JBTkRfTUVUSE9ECQkJIDEwOAotKyNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORAkJCQkgMTAz Ci0rI2RlZmluZSBSQU5EX0ZfRklQU19SQU5EX0JZVEVTCQkJCSAxMDIKLSsjZGVmaW5lIFJBTkRf Rl9GSVBTX1JBTkRfU0VUX0RUCQkJCSAxMDYKLSsjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9EVAkJ CQkgMTA0Ci0rI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVECQkJIDEwNwotKyNkZWZp bmUgUkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9ERQkJCSAxMDUKLSAjZGVmaW5lIFJBTkRfRl9SQU5E X0dFVF9SQU5EX01FVEhPRAkJCSAxMDEKLSAjZGVmaW5lIFJBTkRfRl9TU0xFQVlfUkFORF9CWVRF UwkJCSAxMDAKLSAKLSAvKiBSZWFzb24gY29kZXMuICovCi0rI2RlZmluZSBSQU5EX1JfTk9OX0ZJ UFNfTUVUSE9ECQkJCSAxMDUKLSsjZGVmaW5lIFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFCQkJCSAx MDYKLSsjZGVmaW5lIFJBTkRfUl9OT19LRVlfU0VUCQkJCSAxMDcKLSsjZGVmaW5lIFJBTkRfUl9Q Uk5HX0FTS0lOR19GT1JfVE9PX01VQ0gJCQkgMTAxCi0rI2RlZmluZSBSQU5EX1JfUFJOR19FUlJP UgkJCQkgMTA4Ci0rI2RlZmluZSBSQU5EX1JfUFJOR19LRVlFRAkJCQkgMTA5Ci0rI2RlZmluZSBS QU5EX1JfUFJOR19OT1RfUkVLRVlFRAkJCQkgMTAyCi0rI2RlZmluZSBSQU5EX1JfUFJOR19OT1Rf UkVTRUVERUQJCQkgMTAzCi0gI2RlZmluZSBSQU5EX1JfUFJOR19OT1RfU0VFREVECQkJCSAxMDAK LSsjZGVmaW5lIFJBTkRfUl9QUk5HX1NFRURfTVVTVF9OT1RfTUFUQ0hfS0VZCQkgMTEwCi0rI2Rl ZmluZSBSQU5EX1JfUFJOR19TVFVDSwkJCQkgMTA0Ci0gCi0gI2lmZGVmICBfX2NwbHVzcGx1cwot IH0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JhbmQvcmFuZF9saWIuYy5m aXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JhbmQvcmFuZF9saWIuYwotLS0tIG9wZW5z c2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JhbmQvcmFuZF9saWIuYy5maXBzCTIwMDgtMTEtMTIgMDQ6 NTg6MDQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmFu ZC9yYW5kX2xpYi5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtNjAs NiArNjAsMTIgQEAKLSAjaW5jbHVkZSA8dGltZS5oPgotICNpbmNsdWRlICJjcnlwdGxpYi5oIgot ICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSAicmFuZF9sY2wuaCIKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNlbmRpZgotKwotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJ TkUKLSAjaW5jbHVkZSA8b3BlbnNzbC9lbmdpbmUuaD4KLSAjZW5kaWYKLUBAIC0xMDIsOCArMTA4 LDE5IEBAIGNvbnN0IFJBTkRfTUVUSE9EICpSQU5EX2dldF9yYW5kX21ldGhvZCgKLSAJCQlmdW5j dF9yZWYgPSBlOwotIAkJZWxzZQotICNlbmRpZgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCQlk ZWZhdWx0X1JBTkRfbWV0aCA9IEZJUFNfbW9kZSgpID8gRklQU19yYW5kX21ldGhvZCgpIDogUkFO RF9TU0xlYXkoKTsKLSsJCX0KLSsJaWYgKEZJUFNfbW9kZSgpCi0rCQkmJiBkZWZhdWx0X1JBTkRf bWV0aCAhPSBGSVBTX3JhbmRfY2hlY2soKSkKLSsJICAgIHsKLSsJICAgIFJBTkRlcnIoUkFORF9G X1JBTkRfR0VUX1JBTkRfTUVUSE9ELFJBTkRfUl9OT05fRklQU19NRVRIT0QpOwotKwkgICAgcmV0 dXJuIDA7Ci0rCSAgICB9Ci0rI2Vsc2UKLSAJCQlkZWZhdWx0X1JBTkRfbWV0aCA9IFJBTkRfU1NM ZWF5KCk7Ci0gCQl9Ci0rI2VuZGlmCi0gCXJldHVybiBkZWZhdWx0X1JBTkRfbWV0aDsKLSAJfQot IAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmMyL3JjMi5oLmZpcHMgb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmMyL3JjMi5oCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRh My9jcnlwdG8vcmMyL3JjMi5oLmZpcHMJMjAwOS0wOS0zMCAxMzoyNTo1Ny4wMDAwMDAwMDAgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYzIvcmMyLmgJMjAwOS0wOS0zMCAx MzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC03OSw3ICs3OSw5IEBAIHR5cGVkZWYgc3RydWN0 IHJjMl9rZXlfc3QKLSAJUkMyX0lOVCBkYXRhWzY0XTsKLSAJfSBSQzJfS0VZOwotIAotLSAKLSsj aWZkZWYgT1BFTlNTTF9GSVBTIAotK3ZvaWQgcHJpdmF0ZV9SQzJfc2V0X2tleShSQzJfS0VZICpr ZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsaW50IGJpdHMpOwotKyNlbmRp ZgotIHZvaWQgUkMyX3NldF9rZXkoUkMyX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25l ZCBjaGFyICpkYXRhLGludCBiaXRzKTsKLSB2b2lkIFJDMl9lY2JfZW5jcnlwdChjb25zdCB1bnNp Z25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsUkMyX0tFWSAqa2V5LAotIAkJICAgICBp bnQgZW5jKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JjMi9yYzJfc2tl eS5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmMyL3JjMl9za2V5LmMKLS0tLSBv cGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYzIvcmMyX3NrZXkuYy5maXBzCTIwMDctMDktMTgg MjM6MTA6MzIuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8v cmMyL3JjMl9za2V5LmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC01 Nyw2ICs1NywxMSBAQAotICAqLwotIAotICNpbmNsdWRlIDxvcGVuc3NsL3JjMi5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gI2luY2x1ZGUgInJjMl9sb2NsLmgiCi0gCi0g c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5X3RhYmxlWzI1Nl09ewotQEAgLTk0LDggKzk5 LDIwIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtleV90YWJsZVsyNTYKLSAgKiBCU0FG RSB1c2VzIHRoZSAncmV0YXJkZWQnIHZlcnNpb24uICBXaGF0IEkgcHJldmlvdXNseSBzaGlwcGVk IGlzCi0gICogdGhlIHNhbWUgYXMgc3BlY2lmeWluZyAxMDI0IGZvciB0aGUgJ2JpdHMnIHBhcmFt ZXRlci4gIEJzYWZlIHVzZXMKLSAgKiBhIHZlcnNpb24gd2hlcmUgdGhlIGJpdHMgcGFyYW1ldGVy IGlzIHRoZSBzYW1lIGFzIGxlbio4ICovCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotIHZvaWQg UkMyX3NldF9rZXkoUkMyX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpk YXRhLCBpbnQgYml0cykKLSAJewotKwlpZiAoRklQU19tb2RlKCkpCi0rCQlGSVBTX0JBRF9BQk9S VChSQzIpCi0rCXByaXZhdGVfUkMyX3NldF9rZXkoa2V5LCBsZW4sIGRhdGEsIGJpdHMpOwotKwl9 Ci0rdm9pZCBwcml2YXRlX1JDMl9zZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3Qg dW5zaWduZWQgY2hhciAqZGF0YSwKLSsJCQkJCQkJCWludCBiaXRzKQotKyNlbHNlCi0rdm9pZCBS QzJfc2V0X2tleShSQzJfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRh dGEsIGludCBiaXRzKQotKyNlbmRpZgotKwl7Ci0gCWludCBpLGo7Ci0gCXVuc2lnbmVkIGNoYXIg Kms7Ci0gCVJDMl9JTlQgKmtpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8v cmM0L2FzbS9yYzQtczM5MHgucGwuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYzQv YXNtL3JjNC1zMzkweC5wbAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JjNC9hc20v cmM0LXMzOTB4LnBsLmZpcHMJMjAwOS0wMi0xMiAxNTo0ODo0OS4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYzQvYXNtL3JjNC1zMzkweC5wbAkyMDA5LTA5 LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTIwMiw0ICsyMDIsNiBAQCBSQzRfb3B0 aW9uczoKLSAuc3RyaW5nCSJyYzQoOHgsY2hhcikiCi0gX19fCi0gCi0rJGNvZGUgPX4gcy9SQzRf c2V0X2tleS9wcml2YXRlX1JDNF9zZXRfa2V5L2cgaWYgKCRFTlZ7RklQU30gbmUgIiIpOwotKwot IHByaW50ICRjb2RlOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmM0L2Fz bS9yYzQteDg2XzY0LnBsLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmM0L2FzbS9y YzQteDg2XzY0LnBsCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmM0L2FzbS9yYzQt eDg2XzY0LnBsLmZpcHMJMjAwOS0wNC0yNyAyMTozMTowNC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYzQvYXNtL3JjNC14ODZfNjQucGwJMjAwOS0wOS0z MCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC00OTksNiArNDk5LDggQEAgX19fCi0gCi0g JGNvZGUgPX4gcy8jKFtid2RdKS8kMS9nbTsKLSAKLSskY29kZSA9fiBzL1JDNF9zZXRfa2V5L3By aXZhdGVfUkM0X3NldF9rZXkvZyBpZiAoJEVOVntGSVBTfSBuZSAiIik7Ci0rCi0gcHJpbnQgJGNv ZGU7Ci0gCi0gY2xvc2UgU1RET1VUOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlw dG8vcmM0L2FzbS9yYzQtNTg2LnBsLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmM0 L2FzbS9yYzQtNTg2LnBsCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmM0L2FzbS9y YzQtNTg2LnBsLmZpcHMJMjAwNy0xMi0wMiAyMjozMjowMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBv cGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYzQvYXNtL3JjNC01ODYucGwJMjAwOS0wOS0zMCAx MzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xNjYsOCArMTY2LDEyIEBAICRpZHg9ImVkeCI7 Ci0gCi0gJmV4dGVybmFsX2xhYmVsKCJPUEVOU1NMX2lhMzJjYXBfUCIpOwotIAotKyRzZXRrZXlm dW5jID0gIlJDNF9zZXRfa2V5IjsKLSskc2V0a2V5ZnVuYyA9ICJwcml2YXRlX1JDNF9zZXRfa2V5 IiBpZiAoJEVOVntGSVBTfSBuZSAiIik7Ci0rCi0rCi0gIyB2b2lkIFJDNF9zZXRfa2V5KFJDNF9L RVkgKmtleSxpbnQgbGVuLGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwotLSZmdW5jdGlvbl9i ZWdpbigiUkM0X3NldF9rZXkiKTsKLSsmZnVuY3Rpb25fYmVnaW4oJHNldGtleWZ1bmMpOwotIAkm bW92CSgkb3V0LCZ3cGFyYW0oMCkpOwkJIyBsb2FkIGtleQotIAkmbW92CSgkaWRpLCZ3cGFyYW0o MSkpOwkJIyBsb2FkIGxlbgotIAkmbW92CSgkaW5wLCZ3cGFyYW0oMikpOwkJIyBsb2FkIGRhdGEK LUBAIC0yNDUsNyArMjQ5LDcgQEAgJGlkeD0iZWR4IjsKLSAJJnhvcgkoImVheCIsImVheCIpOwot IAkmbW92CSgmRFdQKC04LCRvdXQpLCJlYXgiKTsJCSMga2V5LT54PTA7Ci0gCSZtb3YJKCZEV1Ao LTQsJG91dCksImVheCIpOwkJIyBrZXktPnk9MDsKLS0mZnVuY3Rpb25fZW5kKCJSQzRfc2V0X2tl eSIpOwotKyZmdW5jdGlvbl9lbmQoJHNldGtleWZ1bmMpOwotIAotICMgY29uc3QgY2hhciAqUkM0 X29wdGlvbnModm9pZCk7Ci0gJmZ1bmN0aW9uX2JlZ2luX0IoIlJDNF9vcHRpb25zIik7Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYzQvTWFrZWZpbGUuZmlwcyBvcGVuc3Ns LTEuMC4wLWJldGEzL2NyeXB0by9yYzQvTWFrZWZpbGUKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEz L2NyeXB0by9yYzQvTWFrZWZpbGUuZmlwcwkyMDA5LTAyLTExIDExOjAxOjM2LjAwMDAwMDAwMCAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JjNC9NYWtlZmlsZQkyMDA5LTA5 LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTIxLDggKzIxLDggQEAgVEVTVD1yYzR0 ZXN0LmMKLSBBUFBTPQotIAotIExJQj0kKFRPUCkvbGliY3J5cHRvLmEKLS1MSUJTUkM9cmM0X3Nr ZXkuYyByYzRfZW5jLmMKLS1MSUJPQko9JChSQzRfRU5DKQotK0xJQlNSQz1yYzRfc2tleS5jIHJj NF9lbmMuYyByYzRfZmJsay5jCi0rTElCT0JKPSQoUkM0X0VOQykgcmM0X2ZibGsubwotIAotIFNS Qz0gJChMSUJTUkMpCi0gCi1kaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhMy9j cnlwdG8vcmM0L3JjNF9mYmxrLmMKLS0tLSAvZGV2L251bGwJMjAwOS0wOS0yMyAxMDo1NjowMi4x NDgwMDE3NTIgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYzQvcmM0X2Zi bGsuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSw3NSBA QAotKy8qIGNyeXB0by9yYzQvcmM0X2ZibGsuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhl biBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2pl Y3QuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIE9w ZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK LSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICog ICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBk aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5v cmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5T U0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29u dGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgot KyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHBy aW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0r ICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJl dGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVu U1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3Bl blNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg T3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0r ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJ QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvcmM0Lmg+Ci0rI2luY2x1ZGUgInJjNF9sb2NsLmgiCi0rI2luY2x1ZGUg PG9wZW5zc2wvb3BlbnNzbHYuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwot Ky8qIEZJUFMgbW9kZSBibG9ja2luZyBmb3IgUkM0IGhhcyB0byBiZSBkb25lIHNlcGFyYXRlbHkg c2luY2UgUkM0X3NldF9rZXkKLSsgKiBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW4gYXNzZW1ibHkg bGFuZ3VhZ2UgZmlsZS4KLSsgKi8KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rdm9pZCBSQzRf c2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEp Ci0rCXsKLSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJRklQU19CQURfQUJPUlQoUkM0KQotKwlwcml2 YXRlX1JDNF9zZXRfa2V5KGtleSwgbGVuLCBkYXRhKTsKLSsJfQotKyNlbmRpZgotKwotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmM0L3JjNC5oLmZpcHMgb3BlbnNzbC0xLjAu MC1iZXRhMy9jcnlwdG8vcmM0L3JjNC5oCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8v cmM0L3JjNC5oLmZpcHMJMjAwOS0wOS0zMCAxMzoyNTo1Ny4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYzQvcmM0LmgJMjAwOS0wOS0zMCAxMzoyNTo1OC4w MDAwMDAwMDAgKzAyMDAKLUBAIC03OCw2ICs3OCw5IEBAIHR5cGVkZWYgc3RydWN0IHJjNF9rZXlf c3QKLSAKLSAgCi0gY29uc3QgY2hhciAqUkM0X29wdGlvbnModm9pZCk7Ci0rI2lmZGVmIE9QRU5T U0xfRklQUwotK3ZvaWQgcHJpdmF0ZV9SQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4s IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwotKyNlbmRpZgotIHZvaWQgUkM0X3NldF9rZXko UkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKLSB2b2lk IFJDNChSQzRfS0VZICprZXksIHNpemVfdCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluZGF0 YSwKLSAJCXVuc2lnbmVkIGNoYXIgKm91dGRhdGEpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1i ZXRhMy9jcnlwdG8vcmM0L3JjNF9za2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0 by9yYzQvcmM0X3NrZXkuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JjNC9yYzRf c2tleS5jLmZpcHMJMjAwNy0wMS0yMSAxNDowNzoxMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4wLWJldGEzL2NyeXB0by9yYzQvcmM0X3NrZXkuYwkyMDA5LTA5LTMwIDEzOjI1OjU4 LjAwMDAwMDAwMCArMDIwMAotQEAgLTU5LDYgKzU5LDExIEBACi0gI2luY2x1ZGUgPG9wZW5zc2wv cmM0Lmg+Ci0gI2luY2x1ZGUgInJjNF9sb2NsLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNz bHYuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotIAotIGNvbnN0IGNoYXIg UkM0X3ZlcnNpb25bXT0iUkM0IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7Ci0gCi1AQCAtODUsNyAr OTAsMTEgQEAgY29uc3QgY2hhciAqUkM0X29wdGlvbnModm9pZCkKLSAgKiBEYXRlOiBXZWQsIDE0 IFNlcCAxOTk0IDA2OjM1OjMxIEdNVAotICAqLwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSt2 b2lkIHByaXZhdGVfUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNp Z25lZCBjaGFyICpkYXRhKQotKyNlbHNlCi0gdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXks IGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCi0rI2VuZGlmCi0gCXsKLSAgICAg ICAgIHJlZ2lzdGVyIFJDNF9JTlQgdG1wOwotICAgICAgICAgcmVnaXN0ZXIgaW50IGlkMSxpZDI7 Ci1AQCAtMTI2LDcgKzEzNSwxMiBAQCB2b2lkIFJDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSwgaW50 IGxlbiwgCi0gCQkgKiBtb2R1bGUuLi4KLSAJCSAqCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4K LSAJCSAqLwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCXVuc2lnbmVkIGxvbmcgKmlhMzJjYXBf cHRyID0gT1BFTlNTTF9pYTMyY2FwX2xvYygpOwotKwkJaWYgKGlhMzJjYXBfcHRyICYmICgqaWEz MmNhcF9wdHIgJiAoMTw8MjgpKSkgewotKyNlbHNlCi0gCQlpZiAoT1BFTlNTTF9pYTMyY2FwX1Ag JiAoMTw8MjgpKSB7Ci0rI2VuZGlmCi0gCQkJdW5zaWduZWQgY2hhciAqY3A9KHVuc2lnbmVkIGNo YXIgKilkOwotIAotIAkJCWZvciAoaT0wO2k8MjU2O2krKykgY3BbaV09aTsKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JpcGVtZC9yaXBlbWQuaC5maXBzIG9wZW5zc2wtMS4w LjAtYmV0YTMvY3J5cHRvL3JpcGVtZC9yaXBlbWQuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL3JpcGVtZC9yaXBlbWQuaC5maXBzCTIwMDktMDktMzAgMTM6MjU6NTcuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcmlwZW1kL3JpcGVtZC5oCTIw MDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtOTEsNiArOTEsOSBAQCB0eXBl ZGVmIHN0cnVjdCBSSVBFTUQxNjBzdGF0ZV9zdAotIAl1bnNpZ25lZCBpbnQgICBudW07Ci0gCX0g UklQRU1EMTYwX0NUWDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IHByaXZhdGVfUklQ RU1EMTYwX0luaXQoUklQRU1EMTYwX0NUWCAqYyk7Ci0rI2VuZGlmCi0gaW50IFJJUEVNRDE2MF9J bml0KFJJUEVNRDE2MF9DVFggKmMpOwotIGludCBSSVBFTUQxNjBfVXBkYXRlKFJJUEVNRDE2MF9D VFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwotIGludCBSSVBFTUQxNjBfRmlu YWwodW5zaWduZWQgY2hhciAqbWQsIFJJUEVNRDE2MF9DVFggKmMpOwotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMC1iZXRhMy9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4w LWJldGEzL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMv Y3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jLmZpcHMJMjAwNy0wMS0yMSAxNDowNzoxMy4wMDAwMDAw MDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3Qu YwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTU5LDYgKzU5LDExIEBA Ci0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgInJtZF9sb2NsLmgiCi0gI2luY2x1ZGUg PG9wZW5zc2wvb3BlbnNzbHYuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotIAot IGNvbnN0IGNoYXIgUk1EMTYwX3ZlcnNpb25bXT0iUklQRS1NRDE2MCIgT1BFTlNTTF9WRVJTSU9O X1BURVhUOwotIAotQEAgLTY5LDcgKzc0LDcgQEAgY29uc3QgY2hhciBSTUQxNjBfdmVyc2lvbltd PSJSSVBFLU1EMTYwIgotICAgICAgdm9pZCByaXBlbWQxNjBfYmxvY2soUklQRU1EMTYwX0NUWCAq YywgdW5zaWduZWQgbG9uZyAqcCxzaXplX3QgbnVtKTsKLSAjICBlbmRpZgotIAotLWludCBSSVBF TUQxNjBfSW5pdChSSVBFTUQxNjBfQ1RYICpjKQotK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChSSVBF TUQxNjApCi0gCXsKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCWMtPkE9UklQRU1EMTYw X0E7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yc2EvcnNhX2VheS5jLmZp cHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcnNhL3JzYV9lYXkuYwotLS0tIG9wZW5zc2wt MS4wLjAtYmV0YTMvY3J5cHRvL3JzYS9yc2FfZWF5LmMuZmlwcwkyMDA4LTA5LTE0IDE1OjUxOjQ0 LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JzYS9yc2Ff ZWF5LmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xMTQsNiArMTE0 LDggQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5o PgotICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0gCi0gI2lmbmRlZiBSU0FfTlVMTAotIAotQEAg LTEzOCw3ICsxNDAsNyBAQCBzdGF0aWMgUlNBX01FVEhPRCByc2FfcGtjczFfZWF5X21ldGg9ewot IAlCTl9tb2RfZXhwX21vbnQsIC8qIFhYWCBwcm9iYWJseSB3ZSBzaG91bGQgbm90IHVzZSBNb250 Z29tZXJ5IGlmICBlID09IDMgKi8KLSAJUlNBX2VheV9pbml0LAotIAlSU0FfZWF5X2ZpbmlzaCwK LS0JMCwgLyogZmxhZ3MgKi8KLSsJUlNBX0ZMQUdfRklQU19NRVRIT0QsIC8qIGZsYWdzICovCi0g CU5VTEwsCi0gCTAsIC8qIHJzYV9zaWduICovCi0gCTAsIC8qIHJzYV92ZXJpZnkgKi8KLUBAIC0x NTAsNiArMTUyLDE2IEBAIGNvbnN0IFJTQV9NRVRIT0QgKlJTQV9QS0NTMV9TU0xlYXkodm9pZCkK LSAJcmV0dXJuKCZyc2FfcGtjczFfZWF5X21ldGgpOwotIAl9Ci0gCi0rLyogVXNhZ2UgZXhhbXBs ZTsKLSsgKiAgICBNT05UX0hFTFBFUihyc2EsIGJuX2N0eCwgcCwgcnNhLT5mbGFncyAmIFJTQV9G TEFHX0NBQ0hFX1BSSVZBVEUsIGdvdG8gZXJyKTsKLSsgKi8KLSsjZGVmaW5lIE1PTlRfSEVMUEVS KHJzYSwgY3R4LCBtLCBwcmVfY29uZCwgZXJyX2luc3RyKSBcCi0rCWlmKChwcmVfY29uZCkgJiYg KChyc2EpLT5fbWV0aG9kX21vZF8jI20gPT0gTlVMTCkgJiYgXAotKwkJCSFCTl9NT05UX0NUWF9z ZXRfbG9ja2VkKCYoKHJzYSktPl9tZXRob2RfbW9kXyMjbSksIFwKLSsJCQkJQ1JZUFRPX0xPQ0tf UlNBLCBcCi0rCQkJCShyc2EpLT5tLCAoY3R4KSkpIFwKLSsJCWVycl9pbnN0cgotKwotIHN0YXRp YyBpbnQgUlNBX2VheV9wdWJsaWNfZW5jcnlwdChpbnQgZmxlbiwgY29uc3QgdW5zaWduZWQgY2hh ciAqZnJvbSwKLSAJICAgICB1bnNpZ25lZCBjaGFyICp0bywgUlNBICpyc2EsIGludCBwYWRkaW5n KQotIAl7Ci1AQCAtMTU4LDYgKzE3MCwyMyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2Vu Y3J5cHQoaW50IGZsCi0gCXVuc2lnbmVkIGNoYXIgKmJ1Zj1OVUxMOwotIAlCTl9DVFggKmN0eD1O VUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19tb2RlKCkpCi0rCQl7Ci0r CQlpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0Zf UlNBX0VBWV9QVUJMSUNfRU5DUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJ CWdvdG8gZXJyOwotKwkJCX0KLSsKLSsJCWlmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNT TF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQotKwkJCXsKLSsJCQlSU0FlcnIoUlNBX0ZfUlNB X0VBWV9QVUJMSUNfRU5DUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCQlyZXR1 cm4gLTE7Ci0rCQkJfQotKwkJfQotKyNlbmRpZgotKwotIAlpZiAoQk5fbnVtX2JpdHMocnNhLT5u KSA+IE9QRU5TU0xfUlNBX01BWF9NT0RVTFVTX0JJVFMpCi0gCQl7Ci0gCQlSU0FlcnIoUlNBX0Zf UlNBX0VBWV9QVUJMSUNfRU5DUllQVCwgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UpOwotQEAgLTIy Myw5ICsyNTIsNyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2VuY3J5cHQoaW50IGZsCi0g CQlnb3RvIGVycjsKLSAJCX0KLSAKLS0JaWYgKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9Q VUJMSUMpCi0tCQlpZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2Rf biwgQ1JZUFRPX0xPQ0tfUlNBLCByc2EtPm4sIGN0eCkpCi0tCQkJZ290byBlcnI7Ci0rCU1PTlRf SEVMUEVSKHJzYSwgY3R4LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDLCBn b3RvIGVycik7Ci0gCi0gCWlmICghcnNhLT5tZXRoLT5ibl9tb2RfZXhwKHJldCxmLHJzYS0+ZSxy c2EtPm4sY3R4LAotIAkJcnNhLT5fbWV0aG9kX21vZF9uKSkgZ290byBlcnI7Ci1AQCAtMzU1LDYg KzM4MiwyMyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9lbmNyeXB0KGludCBmCi0gCWlu dCBsb2NhbF9ibGluZGluZyA9IDA7Ci0gCUJOX0JMSU5ESU5HICpibGluZGluZyA9IE5VTEw7Ci0g Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZihG SVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZ X1BSSVZBVEVfRU5DUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJCWdvdG8g ZXJyOwotKwkJCX0KLSsKLSsJCWlmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0Ff RklQU19NSU5fTU9EVUxVU19CSVRTKQotKwkJCXsKLSsJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9Q UklWQVRFX0VOQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQkJcmV0dXJuIC0x OwotKwkJCX0KLSsJCX0KLSsjZW5kaWYKLSsKLSAJaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBO VUxMKSBnb3RvIGVycjsKLSAJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0gCWYgICA9IEJOX0NUWF9nZXQo Y3R4KTsKLUBAIC00MzIsOSArNDc2LDcgQEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZW5j cnlwdChpbnQgZgotIAkJZWxzZQotIAkJCWQ9IHJzYS0+ZDsKLSAKLS0JCWlmIChyc2EtPmZsYWdz ICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDKQotLQkJCWlmKCFCTl9NT05UX0NUWF9zZXRfbG9ja2Vk KCZyc2EtPl9tZXRob2RfbW9kX24sIENSWVBUT19MT0NLX1JTQSwgcnNhLT5uLCBjdHgpKQotLQkJ CQlnb3RvIGVycjsKLSsJCU1PTlRfSEVMUEVSKHJzYSwgY3R4LCBuLCByc2EtPmZsYWdzICYgUlNB X0ZMQUdfQ0FDSEVfUFVCTElDLCBnb3RvIGVycik7Ci0gCi0gCQlpZiAoIXJzYS0+bWV0aC0+Ym5f bW9kX2V4cChyZXQsZixkLHJzYS0+bixjdHgsCi0gCQkJCXJzYS0+X21ldGhvZF9tb2RfbikpIGdv dG8gZXJyOwotQEAgLTQ4OCw2ICs1MzAsMjMgQEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVf ZGVjcnlwdChpbnQgZgotIAlpbnQgbG9jYWxfYmxpbmRpbmcgPSAwOwotIAlCTl9CTElORElORyAq YmxpbmRpbmcgPSBOVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9k ZSgpKQotKwkJewotKwkJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCQl7Ci0rCQkJRklQ U2VycihGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1Rf RkFJTEVEKTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0rCi0rCQlpZiAoQk5fbnVtX2JpdHMocnNh LT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykKLSsJCQl7Ci0rCQkJUlNB ZXJyKFJTQV9GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01B TEwpOwotKwkJCXJldHVybiAtMTsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmKChjdHgg PSBCTl9DVFhfbmV3KCkpID09IE5VTEwpIGdvdG8gZXJyOwotIAlCTl9DVFhfc3RhcnQoY3R4KTsK LSAJZiAgID0gQk5fQ1RYX2dldChjdHgpOwotQEAgLTU1NSw5ICs2MTQsNyBAQCBzdGF0aWMgaW50 IFJTQV9lYXlfcHJpdmF0ZV9kZWNyeXB0KGludCBmCi0gCQllbHNlCi0gCQkJZCA9IHJzYS0+ZDsK LSAKLS0JCWlmIChyc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDKQotLQkJCWlmICgh Qk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9uLCBDUllQVE9fTE9DS19S U0EsIHJzYS0+biwgY3R4KSkKLS0JCQkJZ290byBlcnI7Ci0rCQlNT05UX0hFTFBFUihyc2EsIGN0 eCwgbiwgcnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQywgZ290byBlcnIpOwotIAkJ aWYgKCFyc2EtPm1ldGgtPmJuX21vZF9leHAocmV0LGYsZCxyc2EtPm4sY3R4LAotIAkJCQlyc2Et Pl9tZXRob2RfbW9kX24pKQotIAkJICBnb3RvIGVycjsKLUBAIC02MTcsNiArNjc0LDIzIEBAIHN0 YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZGVjcnlwdChpbnQgZmwKLSAJdW5zaWduZWQgY2hhciAq YnVmPU5VTEw7Ci0gCUJOX0NUWCAqY3R4PU5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwot KwlpZiAoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQot KwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULEZJUFNfUl9G SVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwotKwkJaWYgKEJO X251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpCi0r CQkJewotKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9LRVlf U0laRV9UT09fU01BTEwpOwotKwkJCXJldHVybiAtMTsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlmCi0r Ci0gCWlmIChCTl9udW1fYml0cyhyc2EtPm4pID4gT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklU UykKLSAJCXsKLSAJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9N T0RVTFVTX1RPT19MQVJHRSk7Ci1AQCAtNjY3LDkgKzc0MSw3IEBAIHN0YXRpYyBpbnQgUlNBX2Vh eV9wdWJsaWNfZGVjcnlwdChpbnQgZmwKLSAJCWdvdG8gZXJyOwotIAkJfQotIAotLQlpZiAocnNh LT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQykKLS0JCWlmICghQk5fTU9OVF9DVFhfc2V0 X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9uLCBDUllQVE9fTE9DS19SU0EsIHJzYS0+biwgY3R4 KSkKLS0JCQlnb3RvIGVycjsKLSsJTU9OVF9IRUxQRVIocnNhLCBjdHgsIG4sIHJzYS0+ZmxhZ3Mg JiBSU0FfRkxBR19DQUNIRV9QVUJMSUMsIGdvdG8gZXJyKTsKLSAKLSAJaWYgKCFyc2EtPm1ldGgt PmJuX21vZF9leHAocmV0LGYscnNhLT5lLHJzYS0+bixjdHgsCi0gCQlyc2EtPl9tZXRob2RfbW9k X24pKSBnb3RvIGVycjsKLUBAIC03MTcsNiArNzg5LDcgQEAgc3RhdGljIGludCBSU0FfZWF5X21v ZF9leHAoQklHTlVNICpyMCwgYwotIAlCSUdOVU0gKnIxLCptMSwqdnJmeTsKLSAJQklHTlVNIGxv Y2FsX2RtcDEsbG9jYWxfZG1xMSxsb2NhbF9jLGxvY2FsX3IxOwotIAlCSUdOVU0gKmRtcDEsKmRt cTEsKmMsKnByMTsKLSsJaW50IGJuX2ZsYWdzOwotIAlpbnQgcmV0PTA7Ci0gCi0gCUJOX0NUWF9z dGFydChjdHgpOwotQEAgLTcyNCw0MSArNzk3LDMxIEBAIHN0YXRpYyBpbnQgUlNBX2VheV9tb2Rf ZXhwKEJJR05VTSAqcjAsIGMKLSAJbTEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0gCXZyZnkgPSBCTl9D VFhfZ2V0KGN0eCk7Ci0gCi0tCXsKLS0JCUJJR05VTSBsb2NhbF9wLCBsb2NhbF9xOwotLQkJQklH TlVNICpwID0gTlVMTCwgKnEgPSBOVUxMOwotLQotLQkJLyogTWFrZSBzdXJlIEJOX21vZF9pbnZl cnNlIGluIE1vbnRnb21lcnkgaW50aWFsaXphdGlvbiB1c2VzIHRoZQotLQkJICogQk5fRkxHX0NP TlNUVElNRSBmbGFnICh1bmxlc3MgUlNBX0ZMQUdfTk9fQ09OU1RUSU1FIGlzIHNldCkKLS0JCSAq LwotLQkJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PX0NPTlNUVElNRSkpCi0tCQkJewot LQkJCUJOX2luaXQoJmxvY2FsX3ApOwotLQkJCXAgPSAmbG9jYWxfcDsKLS0JCQlCTl93aXRoX2Zs YWdzKHAsIHJzYS0+cCwgQk5fRkxHX0NPTlNUVElNRSk7Ci0tCi0tCQkJQk5faW5pdCgmbG9jYWxf cSk7Ci0tCQkJcSA9ICZsb2NhbF9xOwotLQkJCUJOX3dpdGhfZmxhZ3MocSwgcnNhLT5xLCBCTl9G TEdfQ09OU1RUSU1FKTsKLS0JCQl9Ci0tCQllbHNlCi0tCQkJewotLQkJCXAgPSByc2EtPnA7Ci0t CQkJcSA9IHJzYS0+cTsKLS0JCQl9Ci0rCS8qIE1ha2Ugc3VyZSBtb2RfaW52ZXJzZSBpbiBtb250 Z29tZXJleSBpbnRpYWxpemF0aW9uIHVzZSBjb3JyZWN0IAotKwkgKiBCTl9GTEdfQ09OU1RUSU1F IGZsYWcuCi0rCSAqLwotKwlibl9mbGFncyA9IHJzYS0+cC0+ZmxhZ3M7Ci0rCWlmICghKHJzYS0+ ZmxhZ3MgJiBSU0FfRkxBR19OT19DT05TVFRJTUUpKQotKwkJewotKwkJcnNhLT5wLT5mbGFncyB8 PSBCTl9GTEdfQ09OU1RUSU1FOwotKwkJfQotKwlNT05UX0hFTFBFUihyc2EsIGN0eCwgcCwgcnNh LT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BSSVZBVEUsIGdvdG8gZXJyKTsKLSsJLyogV2UgcmVz dG9yZSBibl9mbGFncyBiYWNrICovCi0rCXJzYS0+cC0+ZmxhZ3MgPSBibl9mbGFnczsKLSAKLS0J CWlmIChyc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFJJVkFURSkKLS0JCQl7Ci0tCQkJaWYg KCFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCZyc2EtPl9tZXRob2RfbW9kX3AsIENSWVBUT19MT0NL X1JTQSwgcCwgY3R4KSkKLS0JCQkJZ290byBlcnI7Ci0tCQkJaWYgKCFCTl9NT05UX0NUWF9zZXRf bG9ja2VkKCZyc2EtPl9tZXRob2RfbW9kX3EsIENSWVBUT19MT0NLX1JTQSwgcSwgY3R4KSkKLS0J CQkJZ290byBlcnI7Ci0tCQkJfQotLQl9Ci0rICAgICAgICAvKiBNYWtlIHN1cmUgbW9kX2ludmVy c2UgaW4gbW9udGdvbWVyZXkgaW50aWFsaXphdGlvbiB1c2UgY29ycmVjdAotKyAgICAgICAgICog Qk5fRkxHX0NPTlNUVElNRSBmbGFnLgotKyAgICAgICAgICovCi0rCWJuX2ZsYWdzID0gcnNhLT5x LT5mbGFnczsKLSsJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PX0NPTlNUVElNRSkpCi0r CQl7Ci0rCQlyc2EtPnEtPmZsYWdzIHw9IEJOX0ZMR19DT05TVFRJTUU7Ci0rCQl9Ci0rCU1PTlRf SEVMUEVSKHJzYSwgY3R4LCBxLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFJJVkFURSwg Z290byBlcnIpOwotKwkvKiBXZSByZXN0b3JlIGJuX2ZsYWdzIGJhY2sgKi8KLSsJcnNhLT5xLT5m bGFncyA9IGJuX2ZsYWdzOwkKLSAKLS0JaWYgKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9Q VUJMSUMpCi0tCQlpZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2Rf biwgQ1JZUFRPX0xPQ0tfUlNBLCByc2EtPm4sIGN0eCkpCi0tCQkJZ290byBlcnI7Ci0rCU1PTlRf SEVMUEVSKHJzYSwgY3R4LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDLCBn b3RvIGVycik7Ci0gCi0gCS8qIGNvbXB1dGUgSSBtb2QgcSAqLwotIAlpZiAoIShyc2EtPmZsYWdz ICYgUlNBX0ZMQUdfTk9fQ09OU1RUSU1FKSkKLUBAIC04NzUsNiArOTM4LDkgQEAgZXJyOgotIAot IHN0YXRpYyBpbnQgUlNBX2VheV9pbml0KFJTQSAqcnNhKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xf RklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCXJzYS0+ZmxhZ3N8PVJT QV9GTEFHX0NBQ0hFX1BVQkxJQ3xSU0FfRkxBR19DQUNIRV9QUklWQVRFOwotIAlyZXR1cm4oMSk7 Ci0gCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JzYS9yc2FfZXJyLmMu ZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yc2EvcnNhX2Vyci5jCi0tLS0gb3BlbnNz bC0xLjAuMC1iZXRhMy9jcnlwdG8vcnNhL3JzYV9lcnIuYy5maXBzCTIwMDgtMTItMjkgMTc6MTE6 NTYuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcnNhL3Jz YV9lcnIuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTExMSw4ICsx MTEsMTIgQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSU0Ffc3RyX2Z1bmN0c1tdPQotIHtFUlJf RlVOQyhSU0FfRl9SU0FfUFJJTlRfRlApLAkiUlNBX3ByaW50X2ZwIn0sCi0ge0VSUl9GVU5DKFJT QV9GX1JTQV9QUklWX0RFQ09ERSksCSJSU0FfUFJJVl9ERUNPREUifSwKLSB7RVJSX0ZVTkMoUlNB X0ZfUlNBX1BSSVZfRU5DT0RFKSwJIlJTQV9QUklWX0VOQ09ERSJ9LAotK3tFUlJfRlVOQyhSU0Ff Rl9SU0FfUFJJVkFURV9FTkNSWVBUKSwJIlJTQV9wcml2YXRlX2VuY3J5cHQifSwKLSB7RVJSX0ZV TkMoUlNBX0ZfUlNBX1BVQl9ERUNPREUpLAkiUlNBX1BVQl9ERUNPREUifSwKLSt7RVJSX0ZVTkMo UlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUKSwJIlJTQV9wdWJsaWNfZGVjcnlwdCJ9LAotIHtFUlJf RlVOQyhSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcpLAkiUlNBX3NldHVwX2JsaW5kaW5nIn0sCi0r e0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QpLAkiUlNBX3NldF9kZWZhdWx0 X21ldGhvZCJ9LAotK3tFUlJfRlVOQyhSU0FfRl9SU0FfU0VUX01FVEhPRCksCSJSU0Ffc2V0X21l dGhvZCJ9LAotIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0lHTiksCSJSU0Ffc2lnbiJ9LAotIHtFUlJf RlVOQyhSU0FfRl9SU0FfU0lHTl9BU04xX09DVEVUX1NUUklORyksCSJSU0Ffc2lnbl9BU04xX09D VEVUX1NUUklORyJ9LAotIHtFUlJfRlVOQyhSU0FfRl9SU0FfVkVSSUZZKSwJIlJTQV92ZXJpZnki fSwKLUBAIC0xNTUsMTAgKzE1OSwxMiBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFJTQV9zdHJf cmVhc29uc1tdCi0ge0VSUl9SRUFTT04oUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKSAgICAsImtl eSBzaXplIHRvbyBzbWFsbCJ9LAotIHtFUlJfUkVBU09OKFJTQV9SX0xBU1RfT0NURVRfSU5WQUxJ RCkgICAgLCJsYXN0IG9jdGV0IGludmFsaWQifSwKLSB7RVJSX1JFQVNPTihSU0FfUl9NT0RVTFVT X1RPT19MQVJHRSkgICAgICwibW9kdWx1cyB0b28gbGFyZ2UifSwKLSt7RVJSX1JFQVNPTihSU0Ff Ul9OT05fRklQU19NRVRIT0QpICAgICAgICwibm9uIGZpcHMgbWV0aG9kIn0sCi0ge0VSUl9SRUFT T04oUlNBX1JfTk9fUFVCTElDX0VYUE9ORU5UKSAgICAsIm5vIHB1YmxpYyBleHBvbmVudCJ9LAot IHtFUlJfUkVBU09OKFJTQV9SX05VTExfQkVGT1JFX0JMT0NLX01JU1NJTkcpLCJudWxsIGJlZm9y ZSBibG9jayBtaXNzaW5nIn0sCi0ge0VSUl9SRUFTT04oUlNBX1JfTl9ET0VTX05PVF9FUVVBTF9Q X1EpICAsIm4gZG9lcyBub3QgZXF1YWwgcCBxIn0sCi0ge0VSUl9SRUFTT04oUlNBX1JfT0FFUF9E RUNPRElOR19FUlJPUikgICAsIm9hZXAgZGVjb2RpbmcgZXJyb3IifSwKLSt7RVJSX1JFQVNPTihS U0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFKSwib3BlcmF0aW9uIG5vdCBh bGxvd2VkIGluIGZpcHMgbW9kZSJ9LAotIHtFUlJfUkVBU09OKFJTQV9SX09QRVJBVElPTl9OT1Rf U1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUpLCJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBmb3Ig dGhpcyBrZXl0eXBlIn0sCi0ge0VSUl9SRUFTT04oUlNBX1JfUEFERElOR19DSEVDS19GQUlMRUQp ICAsInBhZGRpbmcgY2hlY2sgZmFpbGVkIn0sCi0ge0VSUl9SRUFTT04oUlNBX1JfUF9OT1RfUFJJ TUUpICAgICAgICAgICAsInAgbm90IHByaW1lIn0sCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGEzL2NyeXB0by9yc2EvcnNhX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8v cnNhL3JzYV9nZW4uYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JzYS9yc2FfZ2Vu LmMuZmlwcwkyMDA3LTAzLTI4IDAyOjE1OjI3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wt MS4wLjAtYmV0YTMvY3J5cHRvL3JzYS9yc2FfZ2VuLmMJMjAwOS0wOS0zMCAxNjo1NToyNi4wMDAw MDAwMDAgKzAyMDAKLUBAIC02Nyw2ICs2Nyw4MiBAQAotICNpbmNsdWRlICJjcnlwdGxpYi5oIgot ICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSAiZmlw c19sb2NsLmgiCi0rCi0rc3RhdGljIGludCBmaXBzX3JzYV9wYWlyd2lzZV9mYWlsID0gMDsKLSsK LSt2b2lkIEZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuKHZvaWQpCi0rCXsKLSsJZmlwc19yc2FfcGFp cndpc2VfZmFpbCA9IDE7Ci0rCX0KLSsKLStpbnQgZmlwc19jaGVja19yc2EoUlNBICpyc2EpCi0r CXsKLSsJY29uc3QgdW5zaWduZWQgY2hhciB0YnNbXSA9ICJSU0EgUGFpcndpc2UgQ2hlY2sgRGF0 YSI7Ci0rCXVuc2lnbmVkIGNoYXIgKmN0YnVmID0gTlVMTCwgKnB0YnVmID0gTlVMTDsKLSsJaW50 IGxlbiwgcmV0ID0gMDsKLSsJRVZQX1BLRVkgKnBrOwotKwotKwlpZiAoKHBrPUVWUF9QS0VZX25l dygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCi0rCUVWUF9QS0VZX3NldDFfUlNBKHBrLCBy c2EpOwotKwotKwkvKiBQZXJmb3JtIHBhaXJ3aXNlIGNvbnNpc3RlbmN5IHNpZ25hdHVyZSB0ZXN0 ICovCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAotKwkJCU5V TEwsIDAsIEVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsIE5VTEwpCi0rCQl8 fCAhZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAotKwkJCU5VTEwsIDAsIEVW UF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwgTlVMTCkKLSsJCXx8ICFmaXBzX3Br ZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsCi0rCQkJTlVMTCwgMCwgRVZQX3NoYTEoKSwg RVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsIE5VTEwpKQotKwkJZ290byBlcnI7Ci0rCS8qIE5vdyBw ZXJmb3JtIHBhaXJ3aXNlIGNvbnNpc3RlbmN5IGVuY3J5cHQvZGVjcnlwdCB0ZXN0ICovCi0rCWN0 YnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX3NpemUocnNhKSk7Ci0rCWlmICghY3RidWYpCi0rCQln b3RvIGVycjsKLSsKLSsJbGVuID0gUlNBX3B1YmxpY19lbmNyeXB0KHNpemVvZih0YnMpIC0gMSwg dGJzLCBjdGJ1ZiwgcnNhLCBSU0FfUEtDUzFfUEFERElORyk7Ci0rCWlmIChsZW4gPD0gMCkKLSsJ CWdvdG8gZXJyOwotKwkvKiBDaGVjayBjaXBoZXJ0ZXh0IGRvZXNuJ3QgbWF0Y2ggcGxhaW50ZXh0 ICovCi0rCWlmICgobGVuID09IChzaXplb2YodGJzKSAtIDEpKSAmJiAhbWVtY21wKHRicywgY3Ri dWYsIGxlbikpCi0rCQlnb3RvIGVycjsKLSsJcHRidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6 ZShyc2EpKTsKLSsKLSsJaWYgKCFwdGJ1ZikKLSsJCWdvdG8gZXJyOwotKwlsZW4gPSBSU0FfcHJp dmF0ZV9kZWNyeXB0KGxlbiwgY3RidWYsIHB0YnVmLCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsK LSsJaWYgKGxlbiAhPSAoc2l6ZW9mKHRicykgLSAxKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAobWVt Y21wKHB0YnVmLCB0YnMsIGxlbikpCi0rCQlnb3RvIGVycjsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJ aWYgKCFwdGJ1ZikKLSsJCWdvdG8gZXJyOwotKwkKLSsJZXJyOgotKwlpZiAocmV0ID09IDApCi0r CQl7Ci0rCQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBT X0NIRUNLX1JTQSxGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQpOwotKwkJfQotKwotKwlpZiAo Y3RidWYpCi0rCQlPUEVOU1NMX2ZyZWUoY3RidWYpOwotKwlpZiAocHRidWYpCi0rCQlPUEVOU1NM X2ZyZWUocHRidWYpOwotKwlpZiAocGspCi0rCQlFVlBfUEtFWV9mcmVlKHBrKTsKLSsKLSsJcmV0 dXJuIHJldDsKLSsJfQotKyNlbmRpZgotIAotIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2Vu KFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVNICplX3ZhbHVlLCBCTl9HRU5DQiAqY2IpOwotIAot QEAgLTkwLDYgKzE2NiwyMyBAQCBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJz YSwgCi0gCWludCBiaXRzcCxiaXRzcSxvaz0gLTEsbj0wOwotIAlCTl9DVFggKmN0eD1OVUxMOwot IAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJewotKwkJaWYo RklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAgIAl7Ci0rCQkgICAgRklQU2VycihGSVBTX0Zf UlNBX0JVSUxUSU5fS0VZR0VOLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICAJ cmV0dXJuIDA7Ci0rCSAgICAJfQotKwotKwkJaWYgKGJpdHMgPCBPUEVOU1NMX1JTQV9GSVBTX01J Tl9NT0RVTFVTX0JJVFMpCi0rCQkgICAgewotKwkJICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlM VElOX0tFWUdFTixGSVBTX1JfS0VZX1RPT19TSE9SVCk7Ci0rCQkgICAgcmV0dXJuIDA7Ci0rCQkJ fQotKwkJfQotKyNlbmRpZgotKwotIAljdHg9Qk5fQ1RYX25ldygpOwotIAlpZiAoY3R4ID09IE5V TEwpIGdvdG8gZXJyOwotIAlCTl9DVFhfc3RhcnQoY3R4KTsKLUBAIC0yMDEsNiArMjk0LDE3IEBA IHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLCAKLSAJCXAgPSByc2EtPnA7 Ci0gCWlmICghQk5fbW9kX2ludmVyc2UocnNhLT5pcW1wLHJzYS0+cSxwLGN0eCkpIGdvdG8gZXJy OwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJewotKwkJ aWYgKGZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwpCi0rCQkJQk5fYWRkX3dvcmQocnNhLT5uLCAxKTsK LSsKLSsJCWlmKCFmaXBzX2NoZWNrX3JzYShyc2EpKQotKwkJICAgIGdvdG8gZXJyOwotKwkJfQot KyNlbmRpZgotKwotIAlvaz0xOwotIGVycjoKLSAJaWYgKG9rID09IC0xKQotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcnNhL3JzYS5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRh My9jcnlwdG8vcnNhL3JzYS5oCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcnNhL3Jz YS5oLmZpcHMJMjAwOS0wOS0zMCAxMzoyNTo1Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4wLWJldGEzL2NyeXB0by9yc2EvcnNhLmgJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAw MDAgKzAyMDAKLUBAIC03NCw2ICs3NCwyMSBAQAotICNlcnJvciBSU0EgaXMgZGlzYWJsZWQuCi0g I2VuZGlmCi0gCi0rLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgUlNBIG1ldGhvZCBpcyBGSVBT IGNvbXBsaWFudCBhbmQgY2FuIGJlIHVzZWQKLSsgKiBpbiBGSVBTIG1vZGUuIFRoaXMgaXMgc2V0 IGluIHRoZSB2YWxpZGF0ZWQgbW9kdWxlIG1ldGhvZC4gSWYgYW4KLSsgKiBhcHBsaWNhdGlvbiBz ZXRzIHRoaXMgZmxhZyBpbiBpdHMgb3duIG1ldGhvZHMgaXQgaXMgaXRzIHJlcG9zaWJpbGl0eQot KyAqIHRvIGVuc3VyZSB0aGUgcmVzdWx0IGlzIGNvbXBsaWFudC4KLSsgKi8KLSsKLSsjZGVmaW5l IFJTQV9GTEFHX0ZJUFNfTUVUSE9ECQkJMHgwNDAwCi0rCi0rLyogSWYgdGhpcyBmbGFnIGlzIHNl dCB0aGUgb3BlcmF0aW9ucyBub3JtYWxseSBkaXNhYmxlZCBpbiBGSVBTIG1vZGUgYXJlCi0rICog cGVybWl0dGVkIGl0IGlzIHRoZW4gdGhlIGFwcGxpY2F0aW9ucyByZXNwb25zaWJpbGl0eSB0byBl bnN1cmUgdGhhdCB0aGUKLSsgKiB1c2FnZSBpcyBjb21wbGlhbnQuCi0rICovCi0rCi0rI2RlZmlu ZSBSU0FfRkxBR19OT05fRklQU19BTExPVwkJCTB4MDQwMAotKwotICNpZmRlZiAgX19jcGx1c3Bs dXMKLSBleHRlcm4gIkMiIHsKLSAjZW5kaWYKLUBAIC0xNjQsNiArMTc5LDggQEAgc3RydWN0IHJz YV9zdAotICMgZGVmaW5lIE9QRU5TU0xfUlNBX01BWF9NT0RVTFVTX0JJVFMJMTYzODQKLSAjZW5k aWYKLSAKLSsjZGVmaW5lIE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0Ci0r Ci0gI2lmbmRlZiBPUEVOU1NMX1JTQV9TTUFMTF9NT0RVTFVTX0JJVFMKLSAjIGRlZmluZSBPUEVO U1NMX1JTQV9TTUFMTF9NT0RVTFVTX0JJVFMJMzA3MgotICNlbmRpZgotQEAgLTI2Nyw2ICsyODQs MTEgQEAgUlNBICoJUlNBX2dlbmVyYXRlX2tleShpbnQgYml0cywgdW5zaWduZQotIAotIC8qIE5l dyB2ZXJzaW9uICovCi0gaW50CVJTQV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRz LCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7Ci0raW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0Eg KnJzYSwgQklHTlVNICpwMSwgQklHTlVNICpwMiwgQklHTlVNICpxMSwgQklHTlVNICpxMiwKLSsJ CQljb25zdCBCSUdOVU0gKlhwMSwgY29uc3QgQklHTlVNICpYcDIsIGNvbnN0IEJJR05VTSAqWHAs Ci0rCQkJY29uc3QgQklHTlVNICpYcTEsIGNvbnN0IEJJR05VTSAqWHEyLCBjb25zdCBCSUdOVU0g KlhxLAotKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsKLStpbnQgUlNBX1g5MzFf Z2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgY29uc3QgQklHTlVNICplLCBCTl9H RU5DQiAqY2IpOwotIAotIGludAlSU0FfY2hlY2tfa2V5KGNvbnN0IFJTQSAqKTsKLSAJLyogbmV4 dCA0IHJldHVybiAtMSBvbiBlcnJvciAqLwotQEAgLTQzOCw4ICs0NjAsMTIgQEAgdm9pZCBFUlJf bG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5lIFJTQV9GX1JTQV9QUklOVF9GUAkJCQkg MTE2Ci0gI2RlZmluZSBSU0FfRl9SU0FfUFJJVl9ERUNPREUJCQkJIDEzNwotICNkZWZpbmUgUlNB X0ZfUlNBX1BSSVZfRU5DT0RFCQkJCSAxMzgKLSsjZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRFX0VO Q1JZUFQJCQkgMTQ4Ci0gI2RlZmluZSBSU0FfRl9SU0FfUFVCX0RFQ09ERQkJCQkgMTM5Ci0rI2Rl ZmluZSBSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQJCQkgMTQ5Ci0gI2RlZmluZSBSU0FfRl9SU0Ff U0VUVVBfQkxJTkRJTkcJCQkgMTM2Ci0rI2RlZmluZSBSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVU SE9ECQkJIDE1MAotKyNkZWZpbmUgUlNBX0ZfUlNBX1NFVF9NRVRIT0QJCQkJIDE1MQotICNkZWZp bmUgUlNBX0ZfUlNBX1NJR04JCQkJCSAxMTcKLSAjZGVmaW5lIFJTQV9GX1JTQV9TSUdOX0FTTjFf T0NURVRfU1RSSU5HCQkgMTE4Ci0gI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZCQkJCSAxMTkKLUBA IC00NzksMTAgKzUwNSwxMiBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOwotICNk ZWZpbmUgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMCQkJIDEyMAotICNkZWZpbmUgUlNBX1JfTEFT VF9PQ1RFVF9JTlZBTElECQkJIDEzNAotICNkZWZpbmUgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UJ CQkJIDEwNQotKyNkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxNDkKLSAjZGVmaW5l IFJTQV9SX05PX1BVQkxJQ19FWFBPTkVOVAkJCSAxNDAKLSAjZGVmaW5lIFJTQV9SX05VTExfQkVG T1JFX0JMT0NLX01JU1NJTkcJCQkgMTEzCi0gI2RlZmluZSBSU0FfUl9OX0RPRVNfTk9UX0VRVUFM X1BfUQkJCSAxMjcKLSAjZGVmaW5lIFJTQV9SX09BRVBfREVDT0RJTkdfRVJST1IJCQkgMTIxCi0r I2RlZmluZSBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFCSAxNTAKLSAj ZGVmaW5lIFJTQV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUJIDE0 OAotICNkZWZpbmUgUlNBX1JfUEFERElOR19DSEVDS19GQUlMRUQJCQkgMTE0Ci0gI2RlZmluZSBS U0FfUl9QX05PVF9QUklNRQkJCQkgMTI4Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2Ny eXB0by9yc2EvcnNhX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcnNhL3Jz YV9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JzYS9yc2FfbGliLmMuZmlw cwkyMDA4LTA4LTA2IDE3OjU0OjE0LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAt YmV0YTMvY3J5cHRvL3JzYS9yc2FfbGliLmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAg KzAyMDAKLUBAIC04MCw2ICs4MCwxMyBAQCBSU0EgKlJTQV9uZXcodm9pZCkKLSAKLSB2b2lkIFJT QV9zZXRfZGVmYXVsdF9tZXRob2QoY29uc3QgUlNBX01FVEhPRCAqbWV0aCkKLSAJewotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBSU0Ff RkxBR19GSVBTX01FVEhPRCkpCi0rCQl7Ci0rCQlSU0FlcnIoUlNBX0ZfUlNBX1NFVF9ERUZBVUxU X01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJCXJldHVybjsKLSsJCX0KLSsjZW5k aWYKLSAJZGVmYXVsdF9SU0FfbWV0aCA9IG1ldGg7Ci0gCX0KLSAKLUBAIC0xMTEsNiArMTE4LDEz IEBAIGludCBSU0Ffc2V0X21ldGhvZChSU0EgKnJzYSwgY29uc3QgUlNBX00KLSAJLyogTkI6IFRo ZSBjYWxsZXIgaXMgc3BlY2lmaWNhbGx5IHNldHRpbmcgYSBtZXRob2QsIHNvIGl0J3Mgbm90IHVw IHRvIHVzCi0gCSAqIHRvIGRlYWwgd2l0aCB3aGljaCBFTkdJTkUgaXQgY29tZXMgZnJvbS4gKi8K LSAJY29uc3QgUlNBX01FVEhPRCAqbXRtcDsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChG SVBTX21vZGUoKSAmJiAhKG1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQotKwkJ ewotKwkJUlNBZXJyKFJTQV9GX1JTQV9TRVRfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0Qp OwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rI2VuZGlmCi0gCW10bXAgPSByc2EtPm1ldGg7Ci0gCWlm IChtdG1wLT5maW5pc2gpIG10bXAtPmZpbmlzaChyc2EpOwotICNpZm5kZWYgT1BFTlNTTF9OT19F TkdJTkUKLUBAIC0xNjMsNiArMTc3LDE4IEBAIFJTQSAqUlNBX25ld19tZXRob2QoRU5HSU5FICpl bmdpbmUpCi0gCQkJfQotIAkJfQotICNlbmRpZgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYg KEZJUFNfbW9kZSgpICYmICEocmV0LT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9E KSkKLSsJCXsKLSsJCVJTQWVycihSU0FfRl9SU0FfTkVXX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNf TUVUSE9EKTsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0rCQlpZiAocmV0LT5lbmdpbmUp Ci0rCQkJRU5HSU5FX2ZpbmlzaChyZXQtPmVuZ2luZSk7Ci0rI2VuZGlmCi0rCQlPUEVOU1NMX2Zy ZWUocmV0KTsKLSsJCXJldHVybiBOVUxMOwotKwkJfQotKyNlbmRpZgotIAotIAlyZXQtPnBhZD0w OwotIAlyZXQtPnZlcnNpb249MDsKLUBAIC0yODUsNiArMzExLDEzIEBAIGludCBSU0FfcHVibGlj X2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0IHUKLSBpbnQgUlNBX3ByaXZhdGVfZW5jcnlwdChpbnQg ZmxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwgdW5zaWduZWQgY2hhciAqdG8sCi0gCSAg ICAgUlNBICpyc2EsIGludCBwYWRkaW5nKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlp ZihGSVBTX21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykp Ci0rCQl7Ci0rCQlSU0FlcnIoUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCwgUlNBX1JfT1BFUkFU SU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5k aWYKLSAJcmV0dXJuKHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jKGZsZW4sIGZyb20sIHRvLCByc2Es IHBhZGRpbmcpKTsKLSAJfQotIAotQEAgLTI5Nyw2ICszMzAsMTMgQEAgaW50IFJTQV9wcml2YXRl X2RlY3J5cHQoaW50IGZsZW4sIGNvbnN0IAotIGludCBSU0FfcHVibGljX2RlY3J5cHQoaW50IGZs ZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb20sIHVuc2lnbmVkIGNoYXIgKnRvLAotIAkgICAg IFJTQSAqcnNhLCBpbnQgcGFkZGluZykKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYo RklQU19tb2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQot KwkJewotKwkJUlNBZXJyKFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCwgUlNBX1JfT1BFUkFUSU9O X05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5kaWYK LSAJcmV0dXJuKHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMoZmxlbiwgZnJvbSwgdG8sIHJzYSwgcGFk ZGluZykpOwotIAl9Ci0gCi1AQCAtNDIyLDUxICs0NjIsOCBAQCBlcnI6Ci0gCUJOX0NUWF9lbmQo Y3R4KTsKLSAJaWYgKGluX2N0eCA9PSBOVUxMKQotIAkJQk5fQ1RYX2ZyZWUoY3R4KTsKLSsJaWYo cnNhLT5lID09IE5VTEwpCi0rCQlCTl9mcmVlKGUpOwotIAotIAlyZXR1cm4gcmV0OwotIH0KLS0K LS1pbnQgUlNBX21lbW9yeV9sb2NrKFJTQSAqcikKLS0JewotLQlpbnQgaSxqLGssb2ZmOwotLQlj aGFyICpwOwotLQlCSUdOVU0gKmJuLCoqdFs2XSwqYjsKLS0JQk5fVUxPTkcgKnVsOwotLQotLQlp ZiAoci0+ZCA9PSBOVUxMKSByZXR1cm4oMSk7Ci0tCXRbMF09ICZyLT5kOwotLQl0WzFdPSAmci0+ cDsKLS0JdFsyXT0gJnItPnE7Ci0tCXRbM109ICZyLT5kbXAxOwotLQl0WzRdPSAmci0+ZG1xMTsK LS0JdFs1XT0gJnItPmlxbXA7Ci0tCWs9c2l6ZW9mKEJJR05VTSkqNjsKLS0Jb2ZmPWsvc2l6ZW9m KEJOX1VMT05HKSsxOwotLQlqPTE7Ci0tCWZvciAoaT0wOyBpPDY7IGkrKykKLS0JCWorPSAoKnRb aV0pLT50b3A7Ci0tCWlmICgocD1PUEVOU1NMX21hbGxvY19sb2NrZWQoKG9mZitqKSpzaXplb2Yo Qk5fVUxPTkcpKSkgPT0gTlVMTCkKLS0JCXsKLS0JCVJTQWVycihSU0FfRl9SU0FfTUVNT1JZX0xP Q0ssRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotLQkJcmV0dXJuKDApOwotLQkJfQotLQlibj0oQklH TlVNICopcDsKLS0JdWw9KEJOX1VMT05HICopJihwW29mZl0pOwotLQlmb3IgKGk9MDsgaTw2OyBp KyspCi0tCQl7Ci0tCQliPSAqKHRbaV0pOwotLQkJKih0W2ldKT0gJihibltpXSk7Ci0tCQltZW1j cHkoKGNoYXIgKikmKGJuW2ldKSwoY2hhciAqKWIsc2l6ZW9mKEJJR05VTSkpOwotLQkJYm5baV0u ZmxhZ3M9Qk5fRkxHX1NUQVRJQ19EQVRBOwotLQkJYm5baV0uZD11bDsKLS0JCW1lbWNweSgoY2hh ciAqKXVsLGItPmQsc2l6ZW9mKEJOX1VMT05HKSpiLT50b3ApOwotLQkJdWwrPWItPnRvcDsKLS0J CUJOX2NsZWFyX2ZyZWUoYik7Ci0tCQl9Ci0tCQotLQkvKiBJIHNob3VsZCBmaXggdGhpcyBzbyBp dCBjYW4gc3RpbGwgYmUgZG9uZSAqLwotLQlyLT5mbGFncyY9IH4oUlNBX0ZMQUdfQ0FDSEVfUFJJ VkFURXxSU0FfRkxBR19DQUNIRV9QVUJMSUMpOwotLQotLQlyLT5iaWdudW1fZGF0YT1wOwotLQly ZXR1cm4oMSk7Ci0tCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3JzYS9y c2Ffc2lnbi5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vcnNhL3JzYV9zaWduLmMK LS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9yc2EvcnNhX3NpZ24uYy5maXBzCTIwMDct MDQtMjQgMDM6MDU6NDIuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9j cnlwdG8vcnNhL3JzYV9zaWduLmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAK LUBAIC0xMzAsNyArMTMwLDggQEAgaW50IFJTQV9zaWduKGludCB0eXBlLCBjb25zdCB1bnNpZ25l ZCBjaAotIAkJaTJkX1g1MDlfU0lHKCZzaWcsJnApOwotIAkJcz10bXBzOwotIAl9Ci0tCWk9UlNB X3ByaXZhdGVfZW5jcnlwdChpLHMsc2lncmV0LHJzYSxSU0FfUEtDUzFfUEFERElORyk7Ci0rCS8q IE5COiBjYWxsIHVuZGVybHlpbmcgbWV0aG9kIGRpcmVjdGx5IHRvIGF2b2lkIEZJUFMgYmxvY2tp bmcgKi8KLSsJaSA9IHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jID8gcnNhLT5tZXRoLT5yc2FfcHJp dl9lbmMoaSxzLHNpZ3JldCxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpIDogMDsKLSAJaWYgKGkgPD0g MCkKLSAJCXJldD0wOwotIAllbHNlCi1AQCAtMTYxLDggKzE2Miw4IEBAIGludCBpbnRfcnNhX3Zl cmlmeShpbnQgZHR5cGUsIGNvbnN0IHVuc2kKLSAKLSAJaWYoKGR0eXBlID09IE5JRF9tZDVfc2hh MSkgJiYgcm0pCi0gCQl7Ci0tCQlpID0gUlNBX3B1YmxpY19kZWNyeXB0KChpbnQpc2lnbGVuLAot LQkJCQkJc2lnYnVmLHJtLHJzYSxSU0FfUEtDUzFfUEFERElORyk7Ci0rCQlpID0gcnNhLT5tZXRo LT5yc2FfcHViX2RlYyA/IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMoKGludClzaWdsZW4sCi0rCQkJ CQlzaWdidWYscm0scnNhLFJTQV9QS0NTMV9QQURESU5HKSA6IDA7Ci0gCQlpZiAoaSA8PSAwKQot IAkJCXJldHVybiAwOwotIAkJKnBybV9sZW4gPSBpOwotQEAgLTE3OSw3ICsxODAsOCBAQCBpbnQg aW50X3JzYV92ZXJpZnkoaW50IGR0eXBlLCBjb25zdCB1bnNpCi0gCQkJUlNBZXJyKFJTQV9GX0lO VF9SU0FfVkVSSUZZLFJTQV9SX0lOVkFMSURfTUVTU0FHRV9MRU5HVEgpOwotIAkJCWdvdG8gZXJy OwotIAl9Ci0tCWk9UlNBX3B1YmxpY19kZWNyeXB0KChpbnQpc2lnbGVuLHNpZ2J1ZixzLHJzYSxS U0FfUEtDUzFfUEFERElORyk7Ci0rCS8qIE5COiBjYWxsIHVuZGVybHlpbmcgbWV0aG9kIGRpcmVj dGx5IHRvIGF2b2lkIEZJUFMgYmxvY2tpbmcgKi8KLSsJaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9k ZWMgPyByc2EtPm1ldGgtPnJzYV9wdWJfZGVjKChpbnQpc2lnbGVuLHNpZ2J1ZixzLHJzYSxSU0Ff UEtDUzFfUEFERElORykgOiAwOwotIAotIAlpZiAoaSA8PSAwKSBnb3RvIGVycjsKLSAKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3NoYS9zaGFfZGdzdC5jLmZpcHMgb3BlbnNz bC0xLjAuMC1iZXRhMy9jcnlwdG8vc2hhL3NoYV9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJl dGEzL2NyeXB0by9zaGEvc2hhX2Rnc3QuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6MTQuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vc2hhL3NoYV9kZ3N0LmMJ MjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC01Nyw2ICs1NywxMiBAQAot ICAqLwotIAotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvY3J5cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSAjaWYgIWRl ZmluZWQoT1BFTlNTTF9OT19TSEEwKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkKLSAKLSAj dW5kZWYgIFNIQV8xCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9zaGEvc2hh LmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9zaGEvc2hhLmgKLS0tLSBvcGVuc3Ns LTEuMC4wLWJldGEzL2NyeXB0by9zaGEvc2hhLmguZmlwcwkyMDA5LTA5LTMwIDEzOjI1OjU3LjAw MDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3NoYS9zaGEuaAky MDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTEwNiw2ICsxMDYsOSBAQCB0 eXBlZGVmIHN0cnVjdCBTSEFzdGF0ZV9zdAotIAl9IFNIQV9DVFg7Ci0gCi0gI2lmbmRlZiBPUEVO U1NMX05PX1NIQTAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IHByaXZhdGVfU0hBX0luaXQo U0hBX0NUWCAqYyk7Ci0rI2VuZGlmCi0gaW50IFNIQV9Jbml0KFNIQV9DVFggKmMpOwotIGludCBT SEFfVXBkYXRlKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwotIGlu dCBTSEFfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQV9DVFggKmMpOwotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vc2hhL3NoYV9sb2NsLmguZmlwcyBvcGVuc3NsLTEuMC4w LWJldGEzL2NyeXB0by9zaGEvc2hhX2xvY2wuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5 cHRvL3NoYS9zaGFfbG9jbC5oLmZpcHMJMjAwOS0wOS0zMCAxMzoyNTo1Ny4wMDAwMDAwMDAgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9zaGEvc2hhX2xvY2wuaAkyMDA5LTA5 LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTEyMiw4ICsxMjIsMTUgQEAgdm9pZCBz aGExX2Jsb2NrX2RhdGFfb3JkZXIgKFNIQV9DVFggKmMsIAotICNkZWZpbmUgSU5JVF9EQVRBX2gz IDB4MTAzMjU0NzZVTAotICNkZWZpbmUgSU5JVF9EQVRBX2g0IDB4YzNkMmUxZjBVTAotIAotKyNp ZiBkZWZpbmVkKFNIQV8wKSAmJiBkZWZpbmVkKE9QRU5TU0xfRklQUykKLStGSVBTX05PTl9GSVBT X01EX0luaXQoU0hBKQotKyNlbHNlCi0gaW50IEhBU0hfSU5JVCAoU0hBX0NUWCAqYykKLSsjZW5k aWYKLSAJewotKyNpZiBkZWZpbmVkKFNIQV8xKSAmJiBkZWZpbmVkKE9QRU5TU0xfRklQUykKLSsJ RklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMp KTsKLSAJYy0+aDA9SU5JVF9EQVRBX2gwOwotIAljLT5oMT1JTklUX0RBVEFfaDE7Ci1kaWZmIC11 cCBvcGVuc3NsLTEuMC4wLWJldGEzL2NyeXB0by9zaGEvc2hhMWRnc3QuYy5maXBzIG9wZW5zc2wt MS4wLjAtYmV0YTMvY3J5cHRvL3NoYS9zaGExZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRh My9jcnlwdG8vc2hhL3NoYTFkZ3N0LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjE0LjAwMDAwMDAw MCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3NoYS9zaGExZGdzdC5jCTIw MDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtNjMsNiArNjMsMTAgQEAKLSAj ZGVmaW5lIFNIQV8xCi0gCi0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotIAot IGNvbnN0IGNoYXIgU0hBMV92ZXJzaW9uW109IlNIQTEiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsK LSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3NoYS9zaGEyNTYuYy5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3NoYS9zaGEyNTYuYwotLS0tIG9wZW5zc2wtMS4w LjAtYmV0YTMvY3J5cHRvL3NoYS9zaGEyNTYuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6MTQuMDAw MDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9jcnlwdG8vc2hhL3NoYTI1Ni5j CTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtMTIsMTIgKzEyLDE5IEBA Ci0gCi0gI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvc2hh Lmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsj ZW5kaWYKLSsKLSAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotIAotIGNvbnN0IGNoYXIg U0hBMjU2X3ZlcnNpb25bXT0iU0hBLTI1NiIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotIGlu dCBTSEEyMjRfSW5pdCAoU0hBMjU2X0NUWCAqYykKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAltZW1zZXQgKGMsMCxzaXplb2Yo KmMpKTsKLSAJYy0+aFswXT0weGMxMDU5ZWQ4VUw7CWMtPmhbMV09MHgzNjdjZDUwN1VMOwotIAlj LT5oWzJdPTB4MzA3MGRkMTdVTDsJYy0+aFszXT0weGY3MGU1OTM5VUw7Ci1AQCAtMjksNiArMzYs OSBAQCBpbnQgU0hBMjI0X0luaXQgKFNIQTI1Nl9DVFggKmMpCi0gCi0gaW50IFNIQTI1Nl9Jbml0 IChTSEEyNTZfQ1RYICpjKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0 ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCW1lbXNldCAoYywwLHNpemVvZigqYykpOwotIAljLT5o WzBdPTB4NmEwOWU2NjdVTDsJYy0+aFsxXT0weGJiNjdhZTg1VUw7Ci0gCWMtPmhbMl09MHgzYzZl ZjM3MlVMOwljLT5oWzNdPTB4YTU0ZmY1M2FVTDsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0 YTMvY3J5cHRvL3NoYS9zaGE1MTIuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3No YS9zaGE1MTIuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvY3J5cHRvL3NoYS9zaGE1MTIuYy5m aXBzCTIwMDgtMTItMjkgMTM6MzU6NDguMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhMy9jcnlwdG8vc2hhL3NoYTUxMi5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAw ICswMjAwCi1AQCAtNSw2ICs1LDEwIEBACi0gICogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgKi8KLSAjaW5jbHVk ZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVk ZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9f U0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTUxMikKLSAvKgotICAqIElNUExFTUVOVEFU SU9OIE5PVEVTLgotQEAgLTYxLDYgKzY1LDkgQEAgY29uc3QgY2hhciBTSEE1MTJfdmVyc2lvbltd PSJTSEEtNTEyIiBPUAotIAotIGludCBTSEEzODRfSW5pdCAoU0hBNTEyX0NUWCAqYykKLSAJewot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgot ICNpZiBkZWZpbmVkKFNIQTUxMl9BU00pICYmIChkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQo X19hcm0pKQotIAkvKiBtYWludGFpbiBkd29yZCBvcmRlciByZXF1aXJlZCBieSBhc3NlbWJsZXIg bW9kdWxlICovCi0gCXVuc2lnbmVkIGludCAqaCA9ICh1bnNpZ25lZCBpbnQgKiljLT5oOwotQEAg LTkwLDYgKzk3LDkgQEAgaW50IFNIQTM4NF9Jbml0IChTSEE1MTJfQ1RYICpjKQotIAotIGludCBT SEE1MTJfSW5pdCAoU0hBNTEyX0NUWCAqYykKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJ RklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotICNpZiBkZWZpbmVkKFNIQTUxMl9BU00p ICYmIChkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19hcm0pKQotIAkvKiBtYWludGFpbiBk d29yZCBvcmRlciByZXF1aXJlZCBieSBhc3NlbWJsZXIgbW9kdWxlICovCi0gCXVuc2lnbmVkIGlu dCAqaCA9ICh1bnNpZ25lZCBpbnQgKiljLT5oOwotQEAgLTM4MCw3ICszOTAsNyBAQCBzdGF0aWMg Y29uc3QgU0hBX0xPTkc2NCBLNTEyWzgwXSA9IHsKLSAJCQkJKChTSEFfTE9ORzY0KWhpKTw8MzJ8 bG87CX0pCi0gIyAgIGVuZGlmCi0gIyAgZWxpZiAoZGVmaW5lZChfQVJDSF9QUEMpICYmIGRlZmlu ZWQoX182NEJJVF9fKSkgfHwgZGVmaW5lZChfQVJDSF9QUEM2NCkKLS0jICAgZGVmaW5lIFJPVFIo YSxuKQkoeyB1bnNpZ25lZCBsb25nIHJldDsJCVwKLSsjICAgZGVmaW5lIFJPVFIoYSxuKQkoeyBT SEFfTE9ORzY0IHJldDsJCVwKLSAJCQkJYXNtICgicm90cmRpICUwLCUxLCUyIglcCi0gCQkJCTog Ij1yIihyZXQpCQlcCi0gCQkJCTogInIiKGEpLCJLIihuKSk7IHJldDsJfSkKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjAtYmV0YTMvTWFrZWZpbGUub3JnLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9N YWtlZmlsZS5vcmcKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL01ha2VmaWxlLm9yZy5maXBzCTIw MDktMDktMzAgMTM6MjU6NTcuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRh My9NYWtlZmlsZS5vcmcJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0x MDksNiArMTA5LDkgQEAgTElCS1JCNT0KLSBaTElCX0lOQ0xVREU9Ci0gTElCWkxJQj0KLSAKLSsj IE5vbi1lbXB0eSBpZiBGSVBTIGVuYWJsZWQKLStGSVBTPQotKwotIERJUlM9ICAgY3J5cHRvIHNz bCBlbmdpbmVzIGFwcHMgdGVzdCB0b29scwotIEVOR0RJUlM9IGNjZ29zdAotIFNITElCRElSUz0g Y3J5cHRvIHNzbAotQEAgLTEyMSw3ICsxMjQsNyBAQCBTRElSUz0gIFwKLSAJYm4gZWMgcnNhIGRz YSBlY2RzYSBkaCBlY2RoIGRzbyBlbmdpbmUgXAotIAlidWZmZXIgYmlvIHN0YWNrIGxoYXNoIHJh bmQgZXJyIFwKLSAJZXZwIGFzbjEgcGVtIHg1MDkgeDUwOXYzIGNvbmYgdHh0X2RiIHBrY3M3IHBr Y3MxMiBjb21wIG9jc3AgdWkga3JiNSBcCi0tCWNtcyBwcXVldWUgdHMganBha2Ugc3RvcmUKLSsJ Y21zIHBxdWV1ZSB0cyBqcGFrZSBzdG9yZSBmaXBzCi0gIyBrZWVwIGluIG1pbmQgdGhhdCB0aGUg YWJvdmUgbGlzdCBpcyBhZGp1c3RlZCBieSAuL0NvbmZpZ3VyZQotICMgYWNjb3JkaW5nIHRvIG5v LXh4eCBhcmd1bWVudHMuLi4KLSAKLUBAIC0yMDQsNiArMjA3LDcgQEAgQlVJTERFTlY9CVBMQVRG T1JNPSckKFBMQVRGT1JNKScgUFJPQ0VTUwotIAkJUk1EMTYwX0FTTV9PQko9JyQoUk1EMTYwX0FT TV9PQkopJwkJXAotIAkJV1BfQVNNX09CSj0nJChXUF9BU01fT0JKKScJCQlcCi0gCQlQRVJMQVNN X1NDSEVNRT0nJChQRVJMQVNNX1NDSEVNRSknCQlcCi0rCQlGSVBTPSIkJHtGSVBTOi0kKEZJUFMp fSIJXAotIAkJVEhJUz0kJHtUSElTOi0kQH0gTUFLRUZJTEU9TWFrZWZpbGUgTUFLRU9WRVJSSURF Uz0KLSAjIE1BS0VPVkVSUklERVM9IGVmZmVjdGl2ZWx5ICJlcXVhbGl6ZXMiIEdOVS1pc2ggYW5k IFN5c1YtaXNoIG1ha2UgZmxhdm9ycywKLSAjIHdoaWNoIGluIHR1cm4gZWxpbWluYXRlcyBhbWJp Z3VpdGllcyBpbiB2YXJpYWJsZSB0cmVhdG1lbnQgd2l0aCAtZS4KLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjAtYmV0YTMvc3NsL3NzbF9jaXBoLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9z c2xfY2lwaC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvc3NsX2NpcGguYy5maXBzCTIw MDktMDQtMDcgMTQ6MTA6NTkuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRh My9zc2wvc3NsX2NpcGguYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAg LTcyNyw2ICs3MjcsOSBAQCBzdGF0aWMgdm9pZCBzc2xfY2lwaGVyX2NvbGxlY3RfY2lwaGVycyhj Ci0gCQkgICAgIShjLT5hbGdvcml0aG1fYXV0aCAmIGRpc2FibGVkX2F1dGgpICYmCi0gCQkgICAg IShjLT5hbGdvcml0aG1fZW5jICYgZGlzYWJsZWRfZW5jKSAmJgotIAkJICAgICEoYy0+YWxnb3Jp dGhtX21hYyAmIGRpc2FibGVkX21hYykgJiYKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQkJKCFG SVBTX21vZGUoKSB8fCAoYy0+YWxnb19zdHJlbmd0aCAmIFNTTF9GSVBTKSkgJiYKLSsjZW5kaWYK LSAJCSAgICAhKGMtPmFsZ29yaXRobV9zc2wgJiBkaXNhYmxlZF9zc2wpKQotIAkJCXsKLSAJCQlj b19saXN0W2NvX2xpc3RfbnVtXS5jaXBoZXIgPSBjOwotQEAgLTE0MjMsNyArMTQyNiwxMSBAQCBT VEFDS19PRihTU0xfQ0lQSEVSKSAqc3NsX2NyZWF0ZV9jaXBoZXJfCi0gCSAqLwotIAlmb3IgKGN1 cnIgPSBoZWFkOyBjdXJyICE9IE5VTEw7IGN1cnIgPSBjdXJyLT5uZXh0KQotIAkJewotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsJCWlmIChjdXJyLT5hY3RpdmUgJiYgKCFGSVBTX21vZGUoKSB8fCBj dXJyLT5jaXBoZXItPmFsZ29fc3RyZW5ndGggJiBTU0xfRklQUykpCi0rI2Vsc2UKLSAJCWlmIChj dXJyLT5hY3RpdmUpCi0rI2VuZGlmCi0gCQkJewotIAkJCXNrX1NTTF9DSVBIRVJfcHVzaChjaXBo ZXJzdGFjaywgY3Vyci0+Y2lwaGVyKTsKLSAjaWZkZWYgQ0lQSEVSX0RFQlVHCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4wLWJldGEzL3NzbC9zc2xfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEz L3NzbC9zc2xfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9zc2xfbGliLmMuZmlw cwkyMDA5LTA2LTMwIDEzOjU3OjI0LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAt YmV0YTMvc3NsL3NzbF9saWIuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAot QEAgLTE0NzAsNiArMTQ3MCwxNCBAQCBTU0xfQ1RYICpTU0xfQ1RYX25ldyhjb25zdCBTU0xfTUVU SE9EICptCi0gCQlyZXR1cm4oTlVMTCk7Ci0gCQl9Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwot KwlpZiAoRklQU19tb2RlKCkgJiYgKG1ldGgtPnZlcnNpb24gPCBUTFMxX1ZFUlNJT04pKQkKLSsJ CXsKLSsJCVNTTGVycihTU0xfRl9TU0xfQ1RYX05FVywgU1NMX1JfT05MWV9UTFNfQUxMT1dFRF9J Tl9GSVBTX01PREUpOwotKwkJcmV0dXJuIE5VTEw7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmIChT U0xfZ2V0X2V4X2RhdGFfWDUwOV9TVE9SRV9DVFhfaWR4KCkgPCAwKQotIAkJewotIAkJU1NMZXJy KFNTTF9GX1NTTF9DVFhfTkVXLFNTTF9SX1g1MDlfVkVSSUZJQ0FUSU9OX1NFVFVQX1BST0JMRU1T KTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvc3NsL3NzbHRlc3QuYy5maXBzIG9wZW5z c2wtMS4wLjAtYmV0YTMvc3NsL3NzbHRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvc3Ns L3NzbHRlc3QuYy5maXBzCTIwMDktMDktMzAgMTM6MjU6NTcuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvc3NsdGVzdC5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAw MDAwMDAwICswMjAwCi1AQCAtMjY1LDYgKzI2NSw5IEBAIHN0YXRpYyB2b2lkIHN2X3VzYWdlKHZv aWQpCi0gCXsKLSAJZnByaW50ZihzdGRlcnIsInVzYWdlOiBzc2x0ZXN0IFthcmdzIC4uLl1cbiIp OwotIAlmcHJpbnRmKHN0ZGVyciwiXG4iKTsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWZwcmlu dGYoc3RkZXJyLCItRiAgICAgICAgICAgICAtIHJ1biB0ZXN0IGluIEZJUFMgbW9kZVxuIik7Ci0r I2VuZGlmCi0gCWZwcmludGYoc3RkZXJyLCIgLXNlcnZlcl9hdXRoICAtIGNoZWNrIHNlcnZlciBj ZXJ0aWZpY2F0ZVxuIik7Ci0gCWZwcmludGYoc3RkZXJyLCIgLWNsaWVudF9hdXRoICAtIGRvIGNs aWVudCBhdXRoZW50aWNhdGlvblxuIik7Ci0gCWZwcmludGYoc3RkZXJyLCIgLXByb3h5ICAgICAg ICAtIGFsbG93IHByb3h5IGNlcnRpZmljYXRlc1xuIik7Ci1AQCAtNDg0LDYgKzQ4Nyw5IEBAIGlu dCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gI2VuZGlmCi0gCVNUQUNLX09GKFNTTF9D T01QKSAqc3NsX2NvbXBfbWV0aG9kcyA9IE5VTEw7Ci0gCWludCB0ZXN0X2NpcGhlcmxpc3QgPSAw OwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaW50IGZpcHNfbW9kZT0wOwotKyNlbmRpZgotIAot IAl2ZXJib3NlID0gMDsKLSAJZGVidWcgPSAwOwotQEAgLTUxNSw3ICs1MjEsMTYgQEAgaW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSAKLSAJd2hpbGUgKGFyZ2MgPj0gMSkKLSAJCXsK LS0JCWlmCShzdHJjbXAoKmFyZ3YsIi1zZXJ2ZXJfYXV0aCIpID09IDApCi0rCQlpZighc3RyY21w KCphcmd2LCItRiIpKQotKwkJCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQkJZmlwc19tb2Rl PTE7Ci0rI2Vsc2UKLSsJCQlmcHJpbnRmKHN0ZGVyciwibm90IGNvbXBpbGVkIHdpdGggRklQUyBz dXBwb3J0LCBzbyBleGl0dGluZyB3aXRob3V0IHJ1bm5pbmcuXG4iKTsKLSsJCQlFWElUKDApOwot KyNlbmRpZgotKwkJCX0KLSsJCWVsc2UgaWYJKHN0cmNtcCgqYXJndiwiLXNlcnZlcl9hdXRoIikg PT0gMCkKLSAJCQlzZXJ2ZXJfYXV0aD0xOwotIAkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItY2xp ZW50X2F1dGgiKSA9PSAwKQotIAkJCWNsaWVudF9hdXRoPTE7Ci1AQCAtNzExLDYgKzcyNiwyMCBA QCBiYWQ6Ci0gCQlFWElUKDEpOwotIAkJfQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYo Zmlwc19tb2RlKQotKwkJewotKwkJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCQkJewotKwkJCUVS Ul9sb2FkX2NyeXB0b19zdHJpbmdzKCk7Ci0rCQkJRVJSX3ByaW50X2Vycm9ycyhCSU9fbmV3X2Zw KHN0ZGVycixCSU9fTk9DTE9TRSkpOwotKwkJCUVYSVQoMSk7Ci0rCQkJfQotKwkJZWxzZQotKwkJ CWZwcmludGYoc3RkZXJyLCIqKiogSU4gRklQUyBNT0RFICoqKlxuIik7Ci0rCQl9Ci0rI2VuZGlm Ci0rCi0gCWlmIChwcmludF90aW1lKQotIAkJewotIAkJaWYgKCFiaW9fcGFpcikKLUBAIC0yMTUz LDEyICsyMTgyLDEyIEBAIHN0YXRpYyBpbnQgTVNfQ0FMTEJBQ0sgYXBwX3ZlcmlmeV9jYWxsYmEK LSAJCX0KLSAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fWDUwOV9WRVJJRlkKLS0jIGlmZGVmIE9QRU5T U0xfRklQUwotKyMgaWYgMAotIAlpZihzLT52ZXJzaW9uID09IFRMUzFfVkVSU0lPTikKLSAJCUZJ UFNfYWxsb3dfbWQ1KDEpOwotICMgZW5kaWYKLSAJb2sgPSBYNTA5X3ZlcmlmeV9jZXJ0KGN0eCk7 Ci0tIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjIGlmIDAKLSAJaWYocy0+dmVyc2lvbiA9PSBUTFMx X1ZFUlNJT04pCi0gCQlGSVBTX2FsbG93X21kNSgwKTsKLSAjIGVuZGlmCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4wLWJldGEzL3NzbC9zMjNfY2xudC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9z c2wvczIzX2NsbnQuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvc3NsL3MyM19jbG50LmMuZmlw cwkyMDA5LTA0LTA3IDE5OjAxOjA3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAt YmV0YTMvc3NsL3MyM19jbG50LmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAK LUBAIC0zMzIsNiArMzMyLDE0IEBAIHN0YXRpYyBpbnQgc3NsMjNfY2xpZW50X2hlbGxvKFNTTCAq cykKLSAJCQl2ZXJzaW9uX21ham9yID0gVExTMV9WRVJTSU9OX01BSk9SOwotIAkJCXZlcnNpb25f bWlub3IgPSBUTFMxX1ZFUlNJT05fTUlOT1I7Ci0gCQkJfQotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJCWVsc2UgaWYoRklQU19tb2RlKCkpCi0rCQkJewotKwkJCVNTTGVycihTU0xfRl9TU0wyM19D TElFTlRfSEVMTE8sCi0rCQkJCQlTU0xfUl9PTkxZX1RMU19BTExPV0VEX0lOX0ZJUFNfTU9ERSk7 Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0KLSsjZW5kaWYKLSAJCWVsc2UgaWYgKHZlcnNpb24gPT0g U1NMM19WRVJTSU9OKQotIAkJCXsKLSAJCQl2ZXJzaW9uX21ham9yID0gU1NMM19WRVJTSU9OX01B Sk9SOwotQEAgLTYxNSw2ICs2MjMsMTQgQEAgc3RhdGljIGludCBzc2wyM19nZXRfc2VydmVyX2hl bGxvKFNTTCAqcwotIAkJaWYgKChwWzJdID09IFNTTDNfVkVSU0lPTl9NSU5PUikgJiYKLSAJCQkh KHMtPm9wdGlvbnMgJiBTU0xfT1BfTk9fU1NMdjMpKQotIAkJCXsKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCQkJaWYoRklQU19tb2RlKCkpCi0rCQkJCXsKLSsJCQkJU1NMZXJyKFNTTF9GX1NTTDIz X0dFVF9TRVJWRVJfSEVMTE8sCi0rCQkJCQlTU0xfUl9PTkxZX1RMU19BTExPV0VEX0lOX0ZJUFNf TU9ERSk7Ci0rCQkJCWdvdG8gZXJyOwotKwkJCQl9Ci0rI2VuZGlmCi0gCQkJcy0+dmVyc2lvbj1T U0wzX1ZFUlNJT047Ci0gCQkJcy0+bWV0aG9kPVNTTHYzX2NsaWVudF9tZXRob2QoKTsKLSAJCQl9 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9zMjNfc3J2ci5jLmZpcHMgb3BlbnNz bC0xLjAuMC1iZXRhMy9zc2wvczIzX3NydnIuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvc3Ns L3MyM19zcnZyLmMuZmlwcwkyMDA4LTA2LTAzIDA0OjQ4OjM0LjAwMDAwMDAwMCArMDIwMAotKysr IG9wZW5zc2wtMS4wLjAtYmV0YTMvc3NsL3MyM19zcnZyLmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4w MDAwMDAwMDAgKzAyMDAKLUBAIC0zODYsNiArMzg2LDE1IEBAIGludCBzc2wyM19nZXRfY2xpZW50 X2hlbGxvKFNTTCAqcykKLSAJCQl9Ci0gCQl9Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlp ZiAoRklQU19tb2RlKCkgJiYgKHMtPnZlcnNpb24gPCBUTFMxX1ZFUlNJT04pKQotKwkJewotKwkJ U1NMZXJyKFNTTF9GX1NTTDIzX0dFVF9DTElFTlRfSEVMTE8sCi0rCQkJCQlTU0xfUl9PTkxZX1RM U19BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsjZW5kaWYKLSsK LSAJaWYgKHMtPnN0YXRlID09IFNTTDIzX1NUX1NSX0NMTlRfSEVMTE9fQikKLSAJCXsKLSAJCS8q IHdlIGhhdmUgU1NMdjMvVExTdjEgaW4gYW4gU1NMdjIgaGVhZGVyCi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGEzL3NzbC9zM19jbG50LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9z M19jbG50LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9zM19jbG50LmMuZmlwcwkyMDA5 LTA2LTE2IDE4OjM5OjIwLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTMv c3NsL3MzX2NsbnQuYwkyMDA5LTA5LTMwIDEzOjI1OjU4LjAwMDAwMDAwMCArMDIwMAotQEAgLTE1 Niw2ICsxNTYsMTAgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0gI2luY2x1ZGUg PG9wZW5zc2wvZXZwLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvbWQ1Lmg+Ci0rI2lmZGVmIE9QRU5T U0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAjaWZuZGVm IE9QRU5TU0xfTk9fREgKLSAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgotICNlbmRpZgotQEAgLTE1 MjQsNiArMTUyOCw4IEBAIGludCBzc2wzX2dldF9rZXlfZXhjaGFuZ2UoU1NMICpzKQotIAkJCXE9 bWRfYnVmOwotIAkJCWZvciAobnVtPTI7IG51bSA+IDA7IG51bS0tKQotIAkJCQl7Ci0rCQkJCUVW UF9NRF9DVFhfc2V0X2ZsYWdzKCZtZF9jdHgsCi0rCQkJCQlFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJ UFNfQUxMT1cpOwotIAkJCQlFVlBfRGlnZXN0SW5pdF9leCgmbWRfY3R4LChudW0gPT0gMikKLSAJ CQkJCT9zLT5jdHgtPm1kNTpzLT5jdHgtPnNoYTEsIE5VTEwpOwotIAkJCQlFVlBfRGlnZXN0VXBk YXRlKCZtZF9jdHgsJihzLT5zMy0+Y2xpZW50X3JhbmRvbVswXSksU1NMM19SQU5ET01fU0laRSk7 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9zM19lbmMuYy5maXBzIG9wZW5zc2wt MS4wLjAtYmV0YTMvc3NsL3MzX2VuYy5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvczNf ZW5jLmMuZmlwcwkyMDA5LTA0LTE2IDE5OjIyOjUwLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5z c2wtMS4wLjAtYmV0YTMvc3NsL3MzX2VuYy5jCTIwMDktMDktMzAgMTM6MjU6NTguMDAwMDAwMDAw ICswMjAwCi1AQCAtMTcwLDYgKzE3MCw3IEBAIHN0YXRpYyBpbnQgc3NsM19nZW5lcmF0ZV9rZXlf YmxvY2soU1NMICoKLSAjZW5kaWYKLSAJaz0wOwotIAlFVlBfTURfQ1RYX2luaXQoJm01KTsKLSsJ RVZQX01EX0NUWF9zZXRfZmxhZ3MoJm01LCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cp OwotIAlFVlBfTURfQ1RYX2luaXQoJnMxKTsKLSAJZm9yIChpPTA7IChpbnQpaTxudW07IGkrPU1E NV9ESUdFU1RfTEVOR1RIKQotIAkJewotQEAgLTYxNCw2ICs2MTUsOCBAQCBpbnQgc3NsM19kaWdl c3RfY2FjaGVkX3JlY29yZHMoU1NMICpzKQotIAkJaWYgKChtYXNrICYgcy0+czMtPnRtcC5uZXdf Y2lwaGVyLT5hbGdvcml0aG0yKSAmJiBtZCkgCi0gCQkJewotIAkJCXMtPnMzLT5oYW5kc2hha2Vf ZGdzdFtpXT1FVlBfTURfQ1RYX2NyZWF0ZSgpOwotKwkJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKHMt PnMzLT5oYW5kc2hha2VfZGdzdFtpXSwKLSsJCQkJRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FM TE9XKTsKLSAJCQlFVlBfRGlnZXN0SW5pdF9leChzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV0sbWQs TlVMTCk7Ci0gCQkJRVZQX0RpZ2VzdFVwZGF0ZShzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV0saGRh dGEsaGRhdGFsZW4pOwotIAkJCX0gCi1AQCAtNjcwLDYgKzY3Myw3IEBAIHN0YXRpYyBpbnQgc3Ns M19oYW5kc2hha2VfbWFjKFNTTCAqcywgaW4KLSAJCXJldHVybiAwOwotIAl9CQotIAlFVlBfTURf Q1RYX2luaXQoJmN0eCk7Ci0rCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhf RkxBR19OT05fRklQU19BTExPVyk7Ci0gCUVWUF9NRF9DVFhfY29weV9leCgmY3R4LGQpOwotIAlu PUVWUF9NRF9DVFhfc2l6ZSgmY3R4KTsKLSAJaWYgKG4gPCAwKQotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMC1iZXRhMy9zc2wvczNfc3J2ci5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvczNf c3J2ci5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvczNfc3J2ci5jLmZpcHMJMjAwOS0w Ni0yNiAxNzowNDoyMi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL3Nz bC9zM19zcnZyLmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xNjc0 LDYgKzE2NzQsOCBAQCBpbnQgc3NsM19zZW5kX3NlcnZlcl9rZXlfZXhjaGFuZ2UoU1NMICpzCi0g CQkJCWo9MDsKLSAJCQkJZm9yIChudW09MjsgbnVtID4gMDsgbnVtLS0pCi0gCQkJCQl7Ci0rCQkJ CQlFVlBfTURfQ1RYX3NldF9mbGFncygmbWRfY3R4LAotKwkJCQkJCUVWUF9NRF9DVFhfRkxBR19O T05fRklQU19BTExPVyk7Ci0gCQkJCQlFVlBfRGlnZXN0SW5pdF9leCgmbWRfY3R4LChudW0gPT0g MikKLSAJCQkJCQk/cy0+Y3R4LT5tZDU6cy0+Y3R4LT5zaGExLCBOVUxMKTsKLSAJCQkJCUVWUF9E aWdlc3RVcGRhdGUoJm1kX2N0eCwmKHMtPnMzLT5jbGllbnRfcmFuZG9tWzBdKSxTU0wzX1JBTkRP TV9TSVpFKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvc3NsL3QxX2VuYy5jLmZpcHMg b3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvdDFfZW5jLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEz L3NzbC90MV9lbmMuYy5maXBzCTIwMDktMDQtMTkgMjA6MDM6MTMuMDAwMDAwMDAwICswMjAwCi0r Kysgb3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvdDFfZW5jLmMJMjAwOS0wOS0zMCAxMzoyNTo1OC4w MDAwMDAwMDAgKzAyMDAKLUBAIC0xNjksNiArMTY5LDggQEAgc3RhdGljIHZvaWQgdGxzMV9QX2hh c2goY29uc3QgRVZQX01EICptZAotIAotIAlITUFDX0NUWF9pbml0KCZjdHgpOwotIAlITUFDX0NU WF9pbml0KCZjdHhfdG1wKTsKLSsJSE1BQ19DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhf RkxBR19OT05fRklQU19BTExPVyk7Ci0rCUhNQUNfQ1RYX3NldF9mbGFncygmY3R4X3RtcCwgRVZQ X01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKLSAJSE1BQ19Jbml0X2V4KCZjdHgsc2VjLHNl Y19sZW4sbWQsIE5VTEwpOwotIAlITUFDX0luaXRfZXgoJmN0eF90bXAsc2VjLHNlY19sZW4sbWQs IE5VTEwpOwotIAlpZiAoc2VlZDEgIT0gTlVMTCkgSE1BQ19VcGRhdGUoJmN0eCxzZWVkMSxzZWVk MV9sZW4pOwoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0YTMtZmlwc21vZGUucGF0Y2gg Yi9vcGVuc3NsLTEuMC4wLWJldGEzLWZpcHNtb2RlLnBhdGNoCmluZGV4IDY0MzY1NGUuLjJmYmYw YTYgMTAwNjQ0Ci0tLSBhL29wZW5zc2wtMS4wLjAtYmV0YTMtZmlwc21vZGUucGF0Y2gKKysrIGIv b3BlbnNzbC0xLjAuMC1iZXRhMy1maXBzbW9kZS5wYXRjaApAQCAtMjIyLDcgKzIyMiw3IEBAIGRp ZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvc3NsL3NzbF9hbGdzLmMuZmlwc21vZGUgb3BlbnNz bC0xLjAuMC1iZXRhMy9zc2wvc3NsCiAgI2lmbmRlZiBPUEVOU1NMX05PX0RFUwogIAlFVlBfYWRk X2NpcGhlcihFVlBfZGVzX2NiYygpKTsKICAJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2Ni YygpKTsKLUBAIC0xMTUsNiArMTIxLDM4IEBAIGludCBTU0xfbGlicmFyeV9pbml0KHZvaWQpCitA QCAtMTE1LDYgKzEyMSw0MCBAQCBpbnQgU1NMX2xpYnJhcnlfaW5pdCh2b2lkKQogIAlFVlBfYWRk X2RpZ2VzdChFVlBfc2hhKCkpOwogIAlFVlBfYWRkX2RpZ2VzdChFVlBfZHNzKCkpOwogICNlbmRp ZgpAQCAtMjQxLDYgKzI0MSw4IEBAIGRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMvc3NsL3Nz bF9hbGdzLmMuZmlwc21vZGUgb3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvc3NsCiArI2lmbmRlZiBP UEVOU1NMX05PX01ENQogKwkvKiBuZWVkZWQgZXZlbiBpbiB0aGUgRklQUyBtb2RlIGZvciBUTFMg TUFDICovCiArCUVWUF9hZGRfZGlnZXN0KEVWUF9tZDUoKSk7CisrCUVWUF9hZGRfZGlnZXN0X2Fs aWFzKFNOX21kNSwic3NsMi1tZDUiKTsKKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCJz c2wzLW1kNSIpOwogKyNlbmRpZgogKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEKICsJRVZQX2FkZF9k aWdlc3QoRVZQX3NoYTEoKSk7IC8qIFJTQSB3aXRoIHNoYTEgKi8KCmRpZmYgLS1naXQgYS9vcGVu c3NsLTEuMC4wLWJldGEzLWtyYjUucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJldGEzLWtyYjUucGF0 Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmN2NjZGUuLjAwMDAwMDAKLS0tIGEv b3BlbnNzbC0xLjAuMC1iZXRhMy1rcmI1LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAs MCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9NYWtlZmlsZS5vcmcua3JiNSBvcGVu c3NsLTEuMC4wLWJldGEzL01ha2VmaWxlLm9yZwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvTWFr ZWZpbGUub3JnLmtyYjUJMjAwOS0wNC0yMyAxODoxMjowOS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4wLWJldGEzL01ha2VmaWxlLm9yZwkyMDA5LTA4LTA0IDIzOjAxOjE2LjAwMDAw MDAwMCArMDIwMAotQEAgLTI5OSw3ICsyOTksNyBAQCBidWlsZC1zaGFyZWQ6IGRvXyQoU0hMSUJf VEFSR0VUKSBsaW5rLXNoCi0gCi0gZG9fJChTSExJQl9UQVJHRVQpOgotIAlAIHNldCAtZTsgbGli cz0nLUwuICQoU0hMSUJERVBTKSc7IGZvciBpIGluICQoU0hMSUJESVJTKTsgZG8gXAotLQkJaWYg WyAiJChTSExJQkRJUlMpIiA9ICJzc2wiIC1hIC1uICIkKExJQktSQjUpIiBdOyB0aGVuIFwKLSsJ CWlmIFsgIiQkaSIgPSAic3NsIiAtYSAtbiAiJChMSUJLUkI1KSIgXTsgdGhlbiBcCi0gCQkJbGli cz0iJChMSUJLUkI1KSAkJGxpYnMiOyBcCi0gCQlmaTsgXAotIAkJJChDTEVBUkVOVikgJiYgJChN QUtFKSAtZiBNYWtlZmlsZS5zaGFyZWQgLWUgJChCVUlMREVOVikgXAoKZGlmZiAtLWdpdCBhL29w ZW5zc2wtMS4wLjAtYmV0YTMtbmFtaW5nYmxrLnBhdGNoIGIvb3BlbnNzbC0xLjAuMC1iZXRhMy1u YW1pbmdibGsucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0M2U1NmMuLjAw MDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMC1iZXRhMy1uYW1pbmdibGsucGF0Y2gKKysrIC9kZXYv bnVsbApAQCAtMSwyNTMgKzAsMCBAQAotSW5kZXg6IG9wZW5zc2wvY3J5cHRvL2FzbjEvYV9zZXQu YwotUkNTIEZpbGU6IC92L29wZW5zc2wvY3ZzL29wZW5zc2wvY3J5cHRvL2FzbjEvYV9zZXQuYyx2 Ci1yY3NkaWZmIC1xIC1rayAnLXIxLjIwJyAnLXIxLjIwLjIuMScgLXUgJy92L29wZW5zc2wvY3Zz L29wZW5zc2wvY3J5cHRvL2FzbjEvYV9zZXQuYyx2JyAyPi9kZXYvbnVsbAotLS0tIG9wZW5zc2wv Y3J5cHRvL2FzbjEvYV9zZXQuYyAyMDA5LzAxLzAxIDE4OjMwOjUwIDEuMjAKLSsrKyBvcGVuc3Ns L2NyeXB0by9hc24xL2Ffc2V0LmMgMjAwOS8wNy8yNyAyMToyMToyNSAxLjIwLjIuMQotQEAgLTg1 LDcgKzg1LDcgQEAKLSAgICAgfQotIAotIC8qIGludCBpc19zZXQ6ICBpZiBUUlVFLCB0aGVuIHNv cnQgdGhlIGNvbnRlbnRzIChpLmUuIGl0IGlzbid0IGEgU0VRVUVOQ0UpICAgICovCi0taW50IGky ZF9BU04xX1NFVChTVEFDS19PRihCTE9DSykgKmEsIHVuc2lnbmVkIGNoYXIgKipwcCwKLStpbnQg aTJkX0FTTjFfU0VUKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spICphLCB1bnNpZ25lZCBjaGFyICoq cHAsCi0gCQkgaTJkX29mX3ZvaWQgKmkyZCwgaW50IGV4X3RhZywgaW50IGV4X2NsYXNzLAotIAkJ IGludCBpc19zZXQpCi0gCXsKLUBAIC05Nyw4ICs5Nyw4IEBACi0gICAgICAgICBpbnQgdG90U2l6 ZTsKLSAKLSAJaWYgKGEgPT0gTlVMTCkgcmV0dXJuKDApOwotLQlmb3IgKGk9c2tfQkxPQ0tfbnVt KGEpLTE7IGk+PTA7IGktLSkKLS0JCXJldCs9aTJkKHNrX0JMT0NLX3ZhbHVlKGEsaSksTlVMTCk7 Ci0rCWZvciAoaT1za19PUEVOU1NMX0JMT0NLX251bShhKS0xOyBpPj0wOyBpLS0pCi0rCQlyZXQr PWkyZChza19PUEVOU1NMX0JMT0NLX3ZhbHVlKGEsaSksTlVMTCk7Ci0gCXI9QVNOMV9vYmplY3Rf c2l6ZSgxLHJldCxleF90YWcpOwotIAlpZiAocHAgPT0gTlVMTCkgcmV0dXJuKHIpOwotIAotQEAg LTEwOSwxMCArMTA5LDEwIEBACi0gCS8qIEFuZCB0aGVuIGFnYWluIGJ5IEJlbiAqLwotIAkvKiBB bmQgYWdhaW4gYnkgU3RldmUgKi8KLSAKLS0JaWYoIWlzX3NldCB8fCAoc2tfQkxPQ0tfbnVtKGEp IDwgMikpCi0rCWlmKCFpc19zZXQgfHwgKHNrX09QRU5TU0xfQkxPQ0tfbnVtKGEpIDwgMikpCi0g CQl7Ci0tCQlmb3IgKGk9MDsgaTxza19CTE9DS19udW0oYSk7IGkrKykKLS0gICAgICAgICAgICAg ICAgCWkyZChza19CTE9DS192YWx1ZShhLGkpLCZwKTsKLSsJCWZvciAoaT0wOyBpPHNrX09QRU5T U0xfQkxPQ0tfbnVtKGEpOyBpKyspCi0rICAgICAgICAgICAgICAgIAlpMmQoc2tfT1BFTlNTTF9C TE9DS192YWx1ZShhLGkpLCZwKTsKLSAKLSAJCSpwcD1wOwotIAkJcmV0dXJuKHIpOwotQEAgLTEy MCwxNyArMTIwLDE3IEBACi0gCi0gICAgICAgICBwU3RhcnQgID0gcDsgLyogQ2F0Y2ggdGhlIGJl ZyBvZiBTZXRibG9icyovCi0gCQkvKiBJbiB0aGlzIGFycmF5IHdlIHdpbGwgc3RvcmUgdGhlIFNF VCBibG9icyAqLwotLQkJcmdTZXRCbG9iID0gT1BFTlNTTF9tYWxsb2Moc2tfQkxPQ0tfbnVtKGEp ICogc2l6ZW9mKE1ZQkxPQikpOwotKwkJcmdTZXRCbG9iID0gT1BFTlNTTF9tYWxsb2Moc2tfT1BF TlNTTF9CTE9DS19udW0oYSkgKiBzaXplb2YoTVlCTE9CKSk7Ci0gCQlpZiAocmdTZXRCbG9iID09 IE5VTEwpCi0gCQkJewotIAkJCUFTTjFlcnIoQVNOMV9GX0kyRF9BU04xX1NFVCxFUlJfUl9NQUxM T0NfRkFJTFVSRSk7Ci0gCQkJcmV0dXJuKDApOwotIAkJCX0KLSAKLS0gICAgICAgIGZvciAoaT0w OyBpPHNrX0JMT0NLX251bShhKTsgaSsrKQotKyAgICAgICAgZm9yIChpPTA7IGk8c2tfT1BFTlNT TF9CTE9DS19udW0oYSk7IGkrKykKLSAJICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIHJnU2V0 QmxvYltpXS5wYkRhdGEgPSBwOyAgLyogY2F0Y2ggZWFjaCBzZXQgZW5jb2RlIGJsb2IgKi8KLS0g ICAgICAgICAgICAgICAgaTJkKHNrX0JMT0NLX3ZhbHVlKGEsaSksJnApOwotKyAgICAgICAgICAg ICAgICBpMmQoc2tfT1BFTlNTTF9CTE9DS192YWx1ZShhLGkpLCZwKTsKLSAgICAgICAgICAgICAg ICAgcmdTZXRCbG9iW2ldLmNiRGF0YSA9IHAgLSByZ1NldEJsb2JbaV0ucGJEYXRhOyAvKiBMZW5n dGggb2YgdGhpcwotIFNldEJsb2IKLSAqLwotQEAgLTE0MCw3ICsxNDAsNyBAQAotIAotICAvKiBO b3cgd2UgaGF2ZSB0byBzb3J0IHRoZSBibG9icy4gSSBhbSB1c2luZyBhIHNpbXBsZSBhbGdvLgot ICAgICAqU29ydCBwdHJzICpDb3B5IHRvIHRlbXAtbWVtICpDb3B5IGZyb20gdGVtcC1tZW0gdG8g dXNlci1tZW0qLwotLSAgICAgICAgcXNvcnQoIHJnU2V0QmxvYiwgc2tfQkxPQ0tfbnVtKGEpLCBz aXplb2YoTVlCTE9CKSwgU2V0QmxvYkNtcCk7Ci0rICAgICAgICBxc29ydCggcmdTZXRCbG9iLCBz a19PUEVOU1NMX0JMT0NLX251bShhKSwgc2l6ZW9mKE1ZQkxPQiksIFNldEJsb2JDbXApOwotIAkJ aWYgKCEocFRlbXBNZW0gPSBPUEVOU1NMX21hbGxvYyh0b3RTaXplKSkpCi0gCQkJewotIAkJCUFT TjFlcnIoQVNOMV9GX0kyRF9BU04xX1NFVCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci1AQCAtMTQ5 LDcgKzE0OSw3IEBACi0gCi0gLyogQ29weSB0byB0ZW1wIG1lbSAqLwotICAgICAgICAgcCA9IHBU ZW1wTWVtOwotLSAgICAgICAgZm9yKGk9MDsgaTxza19CTE9DS19udW0oYSk7ICsraSkKLSsgICAg ICAgIGZvcihpPTA7IGk8c2tfT1BFTlNTTF9CTE9DS19udW0oYSk7ICsraSkKLSAJCXsKLSAgICAg ICAgICAgICAgICAgbWVtY3B5KHAsIHJnU2V0QmxvYltpXS5wYkRhdGEsIHJnU2V0QmxvYltpXS5j YkRhdGEpOwotICAgICAgICAgICAgICAgICBwICs9IHJnU2V0QmxvYltpXS5jYkRhdGE7Ci1AQCAt MTYzLDE3ICsxNjMsMTggQEAKLSAgICAgICAgIHJldHVybihyKTsKLSAgICAgICAgIH0KLSAKLS1T VEFDS19PRihCTE9DSykgKmQyaV9BU04xX1NFVChTVEFDS19PRihCTE9DSykgKiphLCBjb25zdCB1 bnNpZ25lZCBjaGFyICoqcHAsCi0rU1RBQ0tfT0YoT1BFTlNTTF9CTE9DSykgKmQyaV9BU04xX1NF VChTVEFDS19PRihPUEVOU1NMX0JMT0NLKSAqKmEsCi0rCQkJICAgICAgY29uc3QgdW5zaWduZWQg Y2hhciAqKnBwLAotIAkJCSAgICAgIGxvbmcgbGVuZ3RoLCBkMmlfb2Zfdm9pZCAqZDJpLAotLQkJ CSAgICAgIHZvaWQgKCpmcmVlX2Z1bmMpKEJMT0NLKSwgaW50IGV4X3RhZywKLSsJCQkgICAgICB2 b2lkICgqZnJlZV9mdW5jKShPUEVOU1NMX0JMT0NLKSwgaW50IGV4X3RhZywKLSAJCQkgICAgICBp bnQgZXhfY2xhc3MpCi0gCXsKLSAJQVNOMV9jb25zdF9DVFggYzsKLS0JU1RBQ0tfT0YoQkxPQ0sp ICpyZXQ9TlVMTDsKLSsJU1RBQ0tfT0YoT1BFTlNTTF9CTE9DSykgKnJldD1OVUxMOwotIAotIAlp ZiAoKGEgPT0gTlVMTCkgfHwgKCgqYSkgPT0gTlVMTCkpCi0gCQl7Ci0tCQlpZiAoKHJldD1za19C TE9DS19uZXdfbnVsbCgpKSA9PSBOVUxMKQotKwkJaWYgKChyZXQ9c2tfT1BFTlNTTF9CTE9DS19u ZXdfbnVsbCgpKSA9PSBOVUxMKQotIAkJCXsKLSAJCQlBU04xZXJyKEFTTjFfRl9EMklfQVNOMV9T RVQsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotIAkJCWdvdG8gZXJyOwotQEAgLTIyMSw3ICsyMjIs NyBAQAotIAkJCWFzbjFfYWRkX2Vycm9yKCpwcCwoaW50KShjLnAtICpwcCkpOwotIAkJCWdvdG8g ZXJyOwotIAkJCX0KLS0JCWlmICghc2tfQkxPQ0tfcHVzaChyZXQscykpIGdvdG8gZXJyOwotKwkJ aWYgKCFza19PUEVOU1NMX0JMT0NLX3B1c2gocmV0LHMpKSBnb3RvIGVycjsKLSAJCX0KLSAJaWYg KGEgIT0gTlVMTCkgKCphKT1yZXQ7Ci0gCSpwcD1jLnA7Ci1AQCAtMjMwLDkgKzIzMSw5IEBACi0g CWlmICgocmV0ICE9IE5VTEwpICYmICgoYSA9PSBOVUxMKSB8fCAoKmEgIT0gcmV0KSkpCi0gCQl7 Ci0gCQlpZiAoZnJlZV9mdW5jICE9IE5VTEwpCi0tCQkJc2tfQkxPQ0tfcG9wX2ZyZWUocmV0LGZy ZWVfZnVuYyk7Ci0rCQkJc2tfT1BFTlNTTF9CTE9DS19wb3BfZnJlZShyZXQsZnJlZV9mdW5jKTsK LSAJCWVsc2UKLS0JCQlza19CTE9DS19mcmVlKHJldCk7Ci0rCQkJc2tfT1BFTlNTTF9CTE9DS19m cmVlKHJldCk7Ci0gCQl9Ci0gCXJldHVybihOVUxMKTsKLSAJfQotSW5kZXg6IG9wZW5zc2wvY3J5 cHRvL2FzbjEvYXNuMS5oCi1SQ1MgRmlsZTogL3Yvb3BlbnNzbC9jdnMvb3BlbnNzbC9jcnlwdG8v YXNuMS9hc24xLmgsdgotcmNzZGlmZiAtcSAta2sgJy1yMS4xNjYuMi4zJyAnLXIxLjE2Ni4yLjQn IC11ICcvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL2NyeXB0by9hc24xL2FzbjEuaCx2JyAyPi9kZXYv bnVsbAotLS0tIG9wZW5zc2wvY3J5cHRvL2FzbjEvYXNuMS5oIDIwMDkvMDcvMjQgMTE6MTU6NTUg MS4xNjYuMi4zCi0rKysgb3BlbnNzbC9jcnlwdG8vYXNuMS9hc24xLmggMjAwOS8wNy8yNyAyMToy MToyNSAxLjE2Ni4yLjQKLUBAIC04ODcsMTIgKzg4NywxMyBAQAotIEFTTjFfR0VORVJBTElaRURU SU1FICpBU04xX1RJTUVfdG9fZ2VuZXJhbGl6ZWR0aW1lKEFTTjFfVElNRSAqdCwgQVNOMV9HRU5F UkFMSVpFRFRJTUUgKipvdXQpOwotIGludCBBU04xX1RJTUVfc2V0X3N0cmluZyhBU04xX1RJTUUg KnMsIGNvbnN0IGNoYXIgKnN0cik7Ci0gCi0taW50IGkyZF9BU04xX1NFVChTVEFDS19PRihCTE9D SykgKmEsIHVuc2lnbmVkIGNoYXIgKipwcCwKLStpbnQgaTJkX0FTTjFfU0VUKFNUQUNLX09GKE9Q RU5TU0xfQkxPQ0spICphLCB1bnNpZ25lZCBjaGFyICoqcHAsCi0gCQkgaTJkX29mX3ZvaWQgKmky ZCwgaW50IGV4X3RhZywgaW50IGV4X2NsYXNzLAotIAkJIGludCBpc19zZXQpOwotLVNUQUNLX09G KEJMT0NLKSAqZDJpX0FTTjFfU0VUKFNUQUNLX09GKEJMT0NLKSAqKmEsIGNvbnN0IHVuc2lnbmVk IGNoYXIgKipwcCwKLStTVEFDS19PRihPUEVOU1NMX0JMT0NLKSAqZDJpX0FTTjFfU0VUKFNUQUNL X09GKE9QRU5TU0xfQkxPQ0spICoqYSwKLSsJCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoq cHAsCi0gCQkJICAgICAgbG9uZyBsZW5ndGgsIGQyaV9vZl92b2lkICpkMmksCi0tCQkJICAgICAg dm9pZCAoKmZyZWVfZnVuYykoQkxPQ0spLCBpbnQgZXhfdGFnLAotKwkJCSAgICAgIHZvaWQgKCpm cmVlX2Z1bmMpKE9QRU5TU0xfQkxPQ0spLCBpbnQgZXhfdGFnLAotIAkJCSAgICAgIGludCBleF9j bGFzcyk7Ci0gCi0gI2lmbmRlZiBPUEVOU1NMX05PX0JJTwotQEAgLTEwNDUsOSArMTA0Niw5IEBA Ci0gaW50IEFTTjFfVFlQRV9nZXRfaW50X29jdGV0c3RyaW5nKEFTTjFfVFlQRSAqYSxsb25nICpu dW0sCi0gCXVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBtYXhfbGVuKTsKLSAKLS1TVEFDS19PRihC TE9DSykgKkFTTjFfc2VxX3VucGFjayhjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4s Ci0tCQkJCSBkMmlfb2Zfdm9pZCAqZDJpLCB2b2lkICgqZnJlZV9mdW5jKShCTE9DSykpOwotLXVu c2lnbmVkIGNoYXIgKkFTTjFfc2VxX3BhY2soU1RBQ0tfT0YoQkxPQ0spICpzYWZlcywgaTJkX29m X3ZvaWQgKmkyZCwKLStTVEFDS19PRihPUEVOU1NMX0JMT0NLKSAqQVNOMV9zZXFfdW5wYWNrKGNv bnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbiwKLSsJCQkJIGQyaV9vZl92b2lkICpkMmks IHZvaWQgKCpmcmVlX2Z1bmMpKE9QRU5TU0xfQkxPQ0spKTsKLSt1bnNpZ25lZCBjaGFyICpBU04x X3NlcV9wYWNrKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spICpzYWZlcywgaTJkX29mX3ZvaWQgKmky ZCwKLSAJCQkgICAgIHVuc2lnbmVkIGNoYXIgKipidWYsIGludCAqbGVuICk7Ci0gdm9pZCAqQVNO MV91bnBhY2tfc3RyaW5nKEFTTjFfU1RSSU5HICpvY3QsIGQyaV9vZl92b2lkICpkMmkpOwotIHZv aWQgKkFTTjFfaXRlbV91bnBhY2soQVNOMV9TVFJJTkcgKm9jdCwgY29uc3QgQVNOMV9JVEVNICpp dCk7Ci1JbmRleDogb3BlbnNzbC9jcnlwdG8vYXNuMS9hc25fcGFjay5jCi1SQ1MgRmlsZTogL3Yv b3BlbnNzbC9jdnMvb3BlbnNzbC9jcnlwdG8vYXNuMS9hc25fcGFjay5jLHYKLXJjc2RpZmYgLXEg LWtrICctcjEuMTknICctcjEuMTkuMi4xJyAtdSAnL3Yvb3BlbnNzbC9jdnMvb3BlbnNzbC9jcnlw dG8vYXNuMS9hc25fcGFjay5jLHYnIDI+L2Rldi9udWxsCi0tLS0gb3BlbnNzbC9jcnlwdG8vYXNu MS9hc25fcGFjay5jIDIwMDgvMTEvMTIgMDM6NTc6NDkgMS4xOQotKysrIG9wZW5zc2wvY3J5cHRv L2FzbjEvYXNuX3BhY2suYyAyMDA5LzA3LzI3IDIxOjIxOjI1IDEuMTkuMi4xCi1AQCAtNjYsMTAg KzY2LDEwIEBACi0gCi0gLyogVHVybiBhbiBBU04xIGVuY29kZWQgU0VRVUVOQ0UgT0YgaW50byBh IFNUQUNLIG9mIHN0cnVjdHVyZXMgKi8KLSAKLS1TVEFDS19PRihCTE9DSykgKkFTTjFfc2VxX3Vu cGFjayhjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sCi0tCQkJCSBkMmlfb2Zfdm9p ZCAqZDJpLCB2b2lkICgqZnJlZV9mdW5jKShCTE9DSykpCi0rU1RBQ0tfT0YoT1BFTlNTTF9CTE9D SykgKkFTTjFfc2VxX3VucGFjayhjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sCi0r CQkJIGQyaV9vZl92b2lkICpkMmksIHZvaWQgKCpmcmVlX2Z1bmMpKE9QRU5TU0xfQkxPQ0spKQot IHsKLS0gICAgU1RBQ0tfT0YoQkxPQ0spICpzazsKLSsgICAgU1RBQ0tfT0YoT1BFTlNTTF9CTE9D SykgKnNrOwotICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwYnVmOwotICAgICBwYnVmID0gIGJ1 ZjsKLSAgICAgaWYgKCEoc2sgPSBkMmlfQVNOMV9TRVQoTlVMTCwgJnBidWYsIGxlbiwgZDJpLCBm cmVlX2Z1bmMsCi1AQCAtODIsNyArODIsNyBAQAotICAqIE9QRU5TU0xfbWFsbG9jJ2VkIGJ1ZmZl cgotICAqLwotIAotLXVuc2lnbmVkIGNoYXIgKkFTTjFfc2VxX3BhY2soU1RBQ0tfT0YoQkxPQ0sp ICpzYWZlcywgaTJkX29mX3ZvaWQgKmkyZCwKLSt1bnNpZ25lZCBjaGFyICpBU04xX3NlcV9wYWNr KFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spICpzYWZlcywgaTJkX29mX3ZvaWQgKmkyZCwKLSAJCQkg ICAgIHVuc2lnbmVkIGNoYXIgKipidWYsIGludCAqbGVuKQotIHsKLSAJaW50IHNhZmVsZW47Ci1J bmRleDogb3BlbnNzbC9jcnlwdG8vc3RhY2svc2FmZXN0YWNrLmgKLVJDUyBGaWxlOiAvdi9vcGVu c3NsL2N2cy9vcGVuc3NsL2NyeXB0by9zdGFjay9zYWZlc3RhY2suaCx2Ci1yY3NkaWZmIC1xIC1r ayAnLXIxLjcyLjIuNCcgJy1yMS43Mi4yLjUnIC11ICcvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL2Ny eXB0by9zdGFjay9zYWZlc3RhY2suaCx2JyAyPi9kZXYvbnVsbAotLS0tIG9wZW5zc2wvY3J5cHRv L3N0YWNrL3NhZmVzdGFjay5oIDIwMDkvMDcvMjcgMjE6MDg6NTAgMS43Mi4yLjQKLSsrKyBvcGVu c3NsL2NyeXB0by9zdGFjay9zYWZlc3RhY2suaCAyMDA5LzA3LzI3IDIxOjIxOjI1IDEuNzIuMi41 Ci1AQCAtMTI4LDggKzEyOCw4IEBACi0gICogbnVsLXRlcm1pbmF0ZWQuIFRoZXNlIHNob3VsZCBh bHNvIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSAibm9ybWFsIgotICAqIHN0YWNrcy4gKi8KLSAKLS10 eXBlZGVmIHZvaWQgKkJMT0NLOwotLURFQ0xBUkVfU1BFQ0lBTF9TVEFDS19PRihCTE9DSywgdm9p ZCkKLSt0eXBlZGVmIHZvaWQgKk9QRU5TU0xfQkxPQ0s7Ci0rREVDTEFSRV9TUEVDSUFMX1NUQUNL X09GKE9QRU5TU0xfQkxPQ0ssIHZvaWQpCi0gCi0gLyogU0tNX3NrXy4uLiBzdGFjayBtYWNyb3Mg YXJlIGludGVybmFsIHRvIHNhZmVzdGFjay5oOgotICAqIG5ldmVyIHVzZSB0aGVtIGRpcmVjdGx5 LCB1c2Ugc2tfPHR5cGU+Xy4uLiBpbnN0ZWFkICovCi1AQCAtMjA1NSwyOSArMjA1NSwyOSBAQAot ICNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVk KE9QRU5TU0xfU1RSSU5HLCAoc3QpKQotIAotIAotLSNkZWZpbmUgc2tfQkxPQ0tfbmV3KGNtcCkg KChTVEFDS19PRihCTE9DSykgKilza19uZXcoQ0hFQ0tFRF9TS19DTVBfRlVOQyh2b2lkLCBjbXAp KSkKLS0jZGVmaW5lIHNrX0JMT0NLX25ld19udWxsKCkgKChTVEFDS19PRihCTE9DSykgKilza19u ZXdfbnVsbCgpKQotLSNkZWZpbmUgc2tfQkxPQ0tfcHVzaChzdCwgdmFsKSBza19wdXNoKENIRUNL RURfUFRSX09GKFNUQUNLX09GKEJMT0NLKSwgc3QpLCBDSEVDS0VEX1BUUl9PRih2b2lkLCB2YWwp KQotLSNkZWZpbmUgc2tfQkxPQ0tfZmluZChzdCwgdmFsKSBza19maW5kKENIRUNLRURfUFRSX09G KFNUQUNLX09GKEJMT0NLKSwgc3QpLCBDSEVDS0VEX1BUUl9PRih2b2lkLCB2YWwpKQotLSNkZWZp bmUgc2tfQkxPQ0tfdmFsdWUoc3QsIGkpICgoQkxPQ0spc2tfdmFsdWUoQ0hFQ0tFRF9QVFJfT0Yo U1RBQ0tfT0YoQkxPQ0spLCBzdCksIGkpKQotLSNkZWZpbmUgc2tfQkxPQ0tfbnVtKHN0KSBTS01f c2tfbnVtKEJMT0NLLCBzdCkKLS0jZGVmaW5lIHNrX0JMT0NLX3BvcF9mcmVlKHN0LCBmcmVlX2Z1 bmMpIHNrX3BvcF9mcmVlKENIRUNLRURfUFRSX09GKFNUQUNLX09GKEJMT0NLKSwgc3QpLCBDSEVD S0VEX1NLX0ZSRUVfRlVOQzIoQkxPQ0ssIGZyZWVfZnVuYykpCi0tI2RlZmluZSBza19CTE9DS19p bnNlcnQoc3QsIHZhbCwgaSkgc2tfaW5zZXJ0KENIRUNLRURfUFRSX09GKFNUQUNLX09GKEJMT0NL KSwgc3QpLCBDSEVDS0VEX1BUUl9PRih2b2lkLCB2YWwpLCBpKQotLSNkZWZpbmUgc2tfQkxPQ0tf ZnJlZShzdCkgU0tNX3NrX2ZyZWUoQkxPQ0ssIHN0KQotLSNkZWZpbmUgc2tfQkxPQ0tfc2V0KHN0 LCBpLCB2YWwpIHNrX3NldCgoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoQkxPQ0sp LCBzdCksIGksIENIRUNLRURfUFRSX09GKHZvaWQsIHZhbCkpCi0tI2RlZmluZSBza19CTE9DS196 ZXJvKHN0KSBTS01fc2tfemVybyhCTE9DSywgKHN0KSkKLS0jZGVmaW5lIHNrX0JMT0NLX3Vuc2hp ZnQoc3QsIHZhbCkgc2tfdW5zaGlmdCgoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0Yo QkxPQ0spLCBzdCksIENIRUNLRURfUFRSX09GKHZvaWQsIHZhbCkpCi0tI2RlZmluZSBza19CTE9D S19maW5kX2V4KHN0LCB2YWwpIHNrX2ZpbmRfZXgoKF9TVEFDSyAqKUNIRUNLRURfQ09OU1RfUFRS X09GKFNUQUNLX09GKEJMT0NLKSwgc3QpLCBDSEVDS0VEX0NPTlNUX1BUUl9PRih2b2lkLCB2YWwp KQotLSNkZWZpbmUgc2tfQkxPQ0tfZGVsZXRlKHN0LCBpKSBTS01fc2tfZGVsZXRlKEJMT0NLLCAo c3QpLCAoaSkpCi0tI2RlZmluZSBza19CTE9DS19kZWxldGVfcHRyKHN0LCBwdHIpIChCTE9DSyAq KXNrX2RlbGV0ZV9wdHIoKF9TVEFDSyAqKUNIRUNLRURfUFRSX09GKFNUQUNLX09GKEJMT0NLKSwg c3QpLCBDSEVDS0VEX1BUUl9PRih2b2lkLCBwdHIpKQotLSNkZWZpbmUgc2tfQkxPQ0tfc2V0X2Nt cF9mdW5jKHN0LCBjbXApICBcCi0rI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX25ldyhjbXApICgo U1RBQ0tfT0YoT1BFTlNTTF9CTE9DSykgKilza19uZXcoQ0hFQ0tFRF9TS19DTVBfRlVOQyh2b2lk LCBjbXApKSkKLSsjZGVmaW5lIHNrX09QRU5TU0xfQkxPQ0tfbmV3X251bGwoKSAoKFNUQUNLX09G KE9QRU5TU0xfQkxPQ0spICopc2tfbmV3X251bGwoKSkKLSsjZGVmaW5lIHNrX09QRU5TU0xfQkxP Q0tfcHVzaChzdCwgdmFsKSBza19wdXNoKENIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xf QkxPQ0spLCBzdCksIENIRUNLRURfUFRSX09GKHZvaWQsIHZhbCkpCi0rI2RlZmluZSBza19PUEVO U1NMX0JMT0NLX2ZpbmQoc3QsIHZhbCkgc2tfZmluZChDSEVDS0VEX1BUUl9PRihTVEFDS19PRihP UEVOU1NMX0JMT0NLKSwgc3QpLCBDSEVDS0VEX1BUUl9PRih2b2lkLCB2YWwpKQotKyNkZWZpbmUg c2tfT1BFTlNTTF9CTE9DS192YWx1ZShzdCwgaSkgKChPUEVOU1NMX0JMT0NLKXNrX3ZhbHVlKENI RUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spLCBzdCksIGkpKQotKyNkZWZpbmUg c2tfT1BFTlNTTF9CTE9DS19udW0oc3QpIFNLTV9za19udW0oT1BFTlNTTF9CTE9DSywgc3QpCi0r I2RlZmluZSBza19PUEVOU1NMX0JMT0NLX3BvcF9mcmVlKHN0LCBmcmVlX2Z1bmMpIHNrX3BvcF9m cmVlKENIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spLCBzdCksIENIRUNLRURf U0tfRlJFRV9GVU5DMihPUEVOU1NMX0JMT0NLLCBmcmVlX2Z1bmMpKQotKyNkZWZpbmUgc2tfT1BF TlNTTF9CTE9DS19pbnNlcnQoc3QsIHZhbCwgaSkgc2tfaW5zZXJ0KENIRUNLRURfUFRSX09GKFNU QUNLX09GKE9QRU5TU0xfQkxPQ0spLCBzdCksIENIRUNLRURfUFRSX09GKHZvaWQsIHZhbCksIGkp Ci0rI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX2ZyZWUoc3QpIFNLTV9za19mcmVlKE9QRU5TU0xf QkxPQ0ssIHN0KQotKyNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS19zZXQoc3QsIGksIHZhbCkgc2tf c2V0KChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX0JMT0NLKSwgc3Qp LCBpLCBDSEVDS0VEX1BUUl9PRih2b2lkLCB2YWwpKQotKyNkZWZpbmUgc2tfT1BFTlNTTF9CTE9D S196ZXJvKHN0KSBTS01fc2tfemVybyhPUEVOU1NMX0JMT0NLLCAoc3QpKQotKyNkZWZpbmUgc2tf T1BFTlNTTF9CTE9DS191bnNoaWZ0KHN0LCB2YWwpIHNrX3Vuc2hpZnQoKF9TVEFDSyAqKUNIRUNL RURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spLCBzdCksIENIRUNLRURfUFRSX09GKHZv aWQsIHZhbCkpCi0rI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX2ZpbmRfZXgoc3QsIHZhbCkgc2tf ZmluZF9leCgoX1NUQUNLICopQ0hFQ0tFRF9DT05TVF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9C TE9DSyksIHN0KSwgQ0hFQ0tFRF9DT05TVF9QVFJfT0Yodm9pZCwgdmFsKSkKLSsjZGVmaW5lIHNr X09QRU5TU0xfQkxPQ0tfZGVsZXRlKHN0LCBpKSBTS01fc2tfZGVsZXRlKE9QRU5TU0xfQkxPQ0ss IChzdCksIChpKSkKLSsjZGVmaW5lIHNrX09QRU5TU0xfQkxPQ0tfZGVsZXRlX3B0cihzdCwgcHRy KSAoT1BFTlNTTF9CTE9DSyAqKXNrX2RlbGV0ZV9wdHIoKF9TVEFDSyAqKUNIRUNLRURfUFRSX09G KFNUQUNLX09GKE9QRU5TU0xfQkxPQ0spLCBzdCksIENIRUNLRURfUFRSX09GKHZvaWQsIHB0cikp Ci0rI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX3NldF9jbXBfZnVuYyhzdCwgY21wKSAgXAotIAko KGludCAoKikoY29uc3Qgdm9pZCAqIGNvbnN0ICosY29uc3Qgdm9pZCAqIGNvbnN0ICopKSBcCi0t CXNrX3NldF9jbXBfZnVuYygoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoQkxPQ0sp LCBzdCksIENIRUNLRURfU0tfQ01QX0ZVTkModm9pZCwgY21wKSkpCi0tI2RlZmluZSBza19CTE9D S19kdXAoc3QpIFNLTV9za19kdXAoQkxPQ0ssIHN0KQotLSNkZWZpbmUgc2tfQkxPQ0tfc2hpZnQo c3QpIFNLTV9za19zaGlmdChCTE9DSywgKHN0KSkKLS0jZGVmaW5lIHNrX0JMT0NLX3BvcChzdCkg KHZvaWQgKilza19wb3AoKF9TVEFDSyAqKUNIRUNLRURfUFRSX09GKFNUQUNLX09GKEJMT0NLKSwg c3QpKQotLSNkZWZpbmUgc2tfQkxPQ0tfc29ydChzdCkgU0tNX3NrX3NvcnQoQkxPQ0ssIChzdCkp Ci0tI2RlZmluZSBza19CTE9DS19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoQkxPQ0ss IChzdCkpCi0rCXNrX3NldF9jbXBfZnVuYygoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tf T0YoT1BFTlNTTF9CTE9DSyksIHN0KSwgQ0hFQ0tFRF9TS19DTVBfRlVOQyh2b2lkLCBjbXApKSkK LSsjZGVmaW5lIHNrX09QRU5TU0xfQkxPQ0tfZHVwKHN0KSBTS01fc2tfZHVwKE9QRU5TU0xfQkxP Q0ssIHN0KQotKyNkZWZpbmUgc2tfT1BFTlNTTF9CTE9DS19zaGlmdChzdCkgU0tNX3NrX3NoaWZ0 KE9QRU5TU0xfQkxPQ0ssIChzdCkpCi0rI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX3BvcChzdCkg KHZvaWQgKilza19wb3AoKF9TVEFDSyAqKUNIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xf QkxPQ0spLCBzdCkpCi0rI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX3NvcnQoc3QpIFNLTV9za19z b3J0KE9QRU5TU0xfQkxPQ0ssIChzdCkpCi0rI2RlZmluZSBza19PUEVOU1NMX0JMT0NLX2lzX3Nv cnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChPUEVOU1NMX0JMT0NLLCAoc3QpKQotIAotIAotICNk ZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX25ldyhjbXApICgoU1RBQ0tfT0YoT1BFTlNTTF9QU1RS SU5HKSAqKXNrX25ldyhDSEVDS0VEX1NLX0NNUF9GVU5DKE9QRU5TU0xfU1RSSU5HLCBjbXApKSkK CmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWJldGEzLW5hbWluZ3N0ci5wYXRjaCBiL29wZW5z c2wtMS4wLjAtYmV0YTMtbmFtaW5nc3RyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCA0NGRlZTk1Li4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtYmV0YTMtbmFtaW5nc3Ry LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTY2MyArMCwwIEBACi1JbmRleDogb3BlbnNzbC9h cHBzL2FwcHMuYwotUkNTIEZpbGU6IC92L29wZW5zc2wvY3ZzL29wZW5zc2wvYXBwcy9hcHBzLmMs dgotcmNzZGlmZiAtcSAta2sgJy1yMS4xMzMuMi42JyAnLXIxLjEzMy4yLjcnIC11ICcvdi9vcGVu c3NsL2N2cy9vcGVuc3NsL2FwcHMvYXBwcy5jLHYnIDI+L2Rldi9udWxsCi0tLS0gb3BlbnNzbC9h cHBzL2FwcHMuYyAyMDA5LzA2LzI5IDE2OjA5OjU4IDEuMTMzLjIuNgotKysrIG9wZW5zc2wvYXBw cy9hcHBzLmMgMjAwOS8wNy8yNyAyMTowODo0MyAxLjEzMy4yLjcKLUBAIC0xNDg4LDcgKzE0ODgs NyBAQAotIAlyZXR1cm4gcDsKLSAJfQotIAotLXN0YXRpYyB1bnNpZ25lZCBsb25nIGluZGV4X3Nl cmlhbF9oYXNoKGNvbnN0IENTVFJJTkcgKmEpCi0rc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5kZXhf c2VyaWFsX2hhc2goY29uc3QgT1BFTlNTTF9DU1RSSU5HICphKQotIAl7Ci0gCWNvbnN0IGNoYXIg Km47Ci0gCi1AQCAtMTQ5Nyw3ICsxNDk3LDcgQEAKLSAJcmV0dXJuKGxoX3N0cmhhc2gobikpOwot IAl9Ci0gCi0tc3RhdGljIGludCBpbmRleF9zZXJpYWxfY21wKGNvbnN0IENTVFJJTkcgKmEsIGNv bnN0IENTVFJJTkcgKmIpCi0rc3RhdGljIGludCBpbmRleF9zZXJpYWxfY21wKGNvbnN0IE9QRU5T U0xfQ1NUUklORyAqYSwgY29uc3QgT1BFTlNTTF9DU1RSSU5HICpiKQotIAl7Ci0gCWNvbnN0IGNo YXIgKmFhLCpiYjsKLSAKLUBAIC0xNTA5LDE2ICsxNTA5LDE2IEBACi0gc3RhdGljIGludCBpbmRl eF9uYW1lX3F1YWwoY2hhciAqKmEpCi0gCXsgcmV0dXJuKGFbMF1bMF0gPT0gJ1YnKTsgfQotIAot LXN0YXRpYyB1bnNpZ25lZCBsb25nIGluZGV4X25hbWVfaGFzaChjb25zdCBDU1RSSU5HICphKQot K3N0YXRpYyB1bnNpZ25lZCBsb25nIGluZGV4X25hbWVfaGFzaChjb25zdCBPUEVOU1NMX0NTVFJJ TkcgKmEpCi0gCXsgcmV0dXJuKGxoX3N0cmhhc2goYVtEQl9uYW1lXSkpOyB9Ci0gCi0taW50IGlu ZGV4X25hbWVfY21wKGNvbnN0IENTVFJJTkcgKmEsIGNvbnN0IENTVFJJTkcgKmIpCi0raW50IGlu ZGV4X25hbWVfY21wKGNvbnN0IE9QRU5TU0xfQ1NUUklORyAqYSwgY29uc3QgT1BFTlNTTF9DU1RS SU5HICpiKQotIAl7IHJldHVybihzdHJjbXAoYVtEQl9uYW1lXSwgYltEQl9uYW1lXSkpOyB9Ci0g Ci0tc3RhdGljIElNUExFTUVOVF9MSEFTSF9IQVNIX0ZOKGluZGV4X3NlcmlhbCwgQ1NUUklORykK LS1zdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0NPTVBfRk4oaW5kZXhfc2VyaWFsLCBDU1RSSU5HKQot LXN0YXRpYyBJTVBMRU1FTlRfTEhBU0hfSEFTSF9GTihpbmRleF9uYW1lLCBDU1RSSU5HKQotLXN0 YXRpYyBJTVBMRU1FTlRfTEhBU0hfQ09NUF9GTihpbmRleF9uYW1lLCBDU1RSSU5HKQotK3N0YXRp YyBJTVBMRU1FTlRfTEhBU0hfSEFTSF9GTihpbmRleF9zZXJpYWwsIE9QRU5TU0xfQ1NUUklORykK LStzdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0NPTVBfRk4oaW5kZXhfc2VyaWFsLCBPUEVOU1NMX0NT VFJJTkcpCi0rc3RhdGljIElNUExFTUVOVF9MSEFTSF9IQVNIX0ZOKGluZGV4X25hbWUsIE9QRU5T U0xfQ1NUUklORykKLStzdGF0aWMgSU1QTEVNRU5UX0xIQVNIX0NPTVBfRk4oaW5kZXhfbmFtZSwg T1BFTlNTTF9DU1RSSU5HKQotIAotICN1bmRlZiBCU0laRQotICNkZWZpbmUgQlNJWkUgMjU2Ci1J bmRleDogb3BlbnNzbC9hcHBzL2FwcHMuaAotUkNTIEZpbGU6IC92L29wZW5zc2wvY3ZzL29wZW5z c2wvYXBwcy9hcHBzLmgsdgotcmNzZGlmZiAtcSAta2sgJy1yMS45MScgJy1yMS45MS4yLjEnIC11 ICcvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL2FwcHMvYXBwcy5oLHYnIDI+L2Rldi9udWxsCi0tLS0g b3BlbnNzbC9hcHBzL2FwcHMuaCAyMDA4LzExLzI0IDE3OjI3OjA1IDEuOTEKLSsrKyBvcGVuc3Ns L2FwcHMvYXBwcy5oIDIwMDkvMDcvMjcgMjE6MDg6NDQgMS45MS4yLjEKLUBAIC0yOTUsOSArMjk1 LDkgQEAKLSBpbnQgcm90YXRlX2luZGV4KGNvbnN0IGNoYXIgKmRiZmlsZSwgY29uc3QgY2hhciAq bmV3X3N1ZmZpeCwgY29uc3QgY2hhciAqb2xkX3N1ZmZpeCk7Ci0gdm9pZCBmcmVlX2luZGV4KENB X0RCICpkYik7Ci0gI2RlZmluZSBpbmRleF9uYW1lX2NtcF9ub2NvbnN0KGEsIGIpIFwKLS0JaW5k ZXhfbmFtZV9jbXAoKGNvbnN0IENTVFJJTkcgKilDSEVDS0VEX1BUUl9PRihTVFJJTkcsIGEpLCBc Ci0tCShjb25zdCBDU1RSSU5HICopQ0hFQ0tFRF9QVFJfT0YoU1RSSU5HLCBiKSkKLS1pbnQgaW5k ZXhfbmFtZV9jbXAoY29uc3QgQ1NUUklORyAqYSwgY29uc3QgQ1NUUklORyAqYik7Ci0rCWluZGV4 X25hbWVfY21wKChjb25zdCBPUEVOU1NMX0NTVFJJTkcgKilDSEVDS0VEX1BUUl9PRihPUEVOU1NM X1NUUklORywgYSksIFwKLSsJKGNvbnN0IE9QRU5TU0xfQ1NUUklORyAqKUNIRUNLRURfUFRSX09G KE9QRU5TU0xfU1RSSU5HLCBiKSkKLStpbnQgaW5kZXhfbmFtZV9jbXAoY29uc3QgT1BFTlNTTF9D U1RSSU5HICphLCBjb25zdCBPUEVOU1NMX0NTVFJJTkcgKmIpOwotIGludCBwYXJzZV95ZXNubyhj b25zdCBjaGFyICpzdHIsIGludCBkZWYpOwotIAotIFg1MDlfTkFNRSAqcGFyc2VfbmFtZShjaGFy ICpzdHIsIGxvbmcgY2h0eXBlLCBpbnQgbXVsdGlyZG4pOwotSW5kZXg6IG9wZW5zc2wvYXBwcy9h c24xcGFycy5jCi1SQ1MgRmlsZTogL3Yvb3BlbnNzbC9jdnMvb3BlbnNzbC9hcHBzL2FzbjFwYXJz LmMsdgotcmNzZGlmZiAtcSAta2sgJy1yMS4yNicgJy1yMS4yNi4yLjEnIC11ICcvdi9vcGVuc3Ns L2N2cy9vcGVuc3NsL2FwcHMvYXNuMXBhcnMuYyx2JyAyPi9kZXYvbnVsbAotLS0tIG9wZW5zc2wv YXBwcy9hc24xcGFycy5jIDIwMDgvMTEvMDUgMTg6Mzg6NTEgMS4yNgotKysrIG9wZW5zc2wvYXBw cy9hc24xcGFycy5jIDIwMDkvMDcvMjcgMjE6MDg6NDQgMS4yNi4yLjEKLUBAIC05Niw3ICs5Niw3 IEBACi0gCXVuc2lnbmVkIGNoYXIgKnRtcGJ1ZjsKLSAJY29uc3QgdW5zaWduZWQgY2hhciAqY3Rt cGJ1ZjsKLSAJQlVGX01FTSAqYnVmPU5VTEw7Ci0tCVNUQUNLX09GKFNUUklORykgKm9zaz1OVUxM OwotKwlTVEFDS19PRihPUEVOU1NMX1NUUklORykgKm9zaz1OVUxMOwotIAlBU04xX1RZUEUgKmF0 PU5VTEw7Ci0gCi0gCWluZm9ybWF0PUZPUk1BVF9QRU07Ci1AQCAtMTEzLDcgKzExMyw3IEBACi0g CXByb2c9YXJndlswXTsKLSAJYXJnYy0tOwotIAlhcmd2Kys7Ci0tCWlmICgob3NrPXNrX1NUUklO R19uZXdfbnVsbCgpKSA9PSBOVUxMKQotKwlpZiAoKG9zaz1za19PUEVOU1NMX1NUUklOR19uZXdf bnVsbCgpKSA9PSBOVUxMKQotIAkJewotIAkJQklPX3ByaW50ZihiaW9fZXJyLCJNZW1vcnkgYWxs b2NhdGlvbiBmYWlsdXJlXG4iKTsKLSAJCWdvdG8gZW5kOwotQEAgLTE2OSw3ICsxNjksNyBAQAot IAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItc3RycGFyc2UiKSA9PSAwKQotIAkJCXsKLSAJCQlp ZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7Ci0tCQkJc2tfU1RSSU5HX3B1c2gob3NrLCooKythcmd2 KSk7Ci0rCQkJc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChvc2ssKigrK2FyZ3YpKTsKLSAJCQl9Ci0g CQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1nZW5zdHIiKSA9PSAwKQotIAkJCXsKLUBAIC0zMDIs MTggKzMwMiwxOCBAQAotIAotIAkvKiBJZiBhbnkgc3RydWN0cyB0byBwYXJzZSBnbyB0aHJvdWdo IGluIHNlcXVlbmNlICovCi0gCi0tCWlmIChza19TVFJJTkdfbnVtKG9zaykpCi0rCWlmIChza19P UEVOU1NMX1NUUklOR19udW0ob3NrKSkKLSAJCXsKLSAJCXRtcGJ1Zj0odW5zaWduZWQgY2hhciAq KXN0cjsKLSAJCXRtcGxlbj1udW07Ci0tCQlmb3IgKGk9MDsgaTxza19TVFJJTkdfbnVtKG9zayk7 IGkrKykKLSsJCWZvciAoaT0wOyBpPHNrX09QRU5TU0xfU1RSSU5HX251bShvc2spOyBpKyspCi0g CQkJewotIAkJCUFTTjFfVFlQRSAqYXRtcDsKLSAJCQlpbnQgdHlwOwotLQkJCWo9YXRvaShza19T VFJJTkdfdmFsdWUob3NrLGkpKTsKLSsJCQlqPWF0b2koc2tfT1BFTlNTTF9TVFJJTkdfdmFsdWUo b3NrLGkpKTsKLSAJCQlpZiAoaiA9PSAwKQotIAkJCQl7Ci0tCQkJCUJJT19wcmludGYoYmlvX2Vy ciwiJyVzJyBpcyBhbiBpbnZhbGlkIG51bWJlclxuIixza19TVFJJTkdfdmFsdWUob3NrLGkpKTsK LSsJCQkJQklPX3ByaW50ZihiaW9fZXJyLCInJXMnIGlzIGFuIGludmFsaWQgbnVtYmVyXG4iLHNr X09QRU5TU0xfU1RSSU5HX3ZhbHVlKG9zayxpKSk7Ci0gCQkJCWNvbnRpbnVlOwotIAkJCQl9Ci0g CQkJdG1wYnVmKz1qOwotQEAgLTM3OCw3ICszNzgsNyBAQAotIAkJRVJSX3ByaW50X2Vycm9ycyhi aW9fZXJyKTsKLSAJaWYgKGJ1ZiAhPSBOVUxMKSBCVUZfTUVNX2ZyZWUoYnVmKTsKLSAJaWYgKGF0 ICE9IE5VTEwpIEFTTjFfVFlQRV9mcmVlKGF0KTsKLS0JaWYgKG9zayAhPSBOVUxMKSBza19TVFJJ TkdfZnJlZShvc2spOwotKwlpZiAob3NrICE9IE5VTEwpIHNrX09QRU5TU0xfU1RSSU5HX2ZyZWUo b3NrKTsKLSAJT0JKX2NsZWFudXAoKTsKLSAJYXBwc19zaHV0ZG93bigpOwotIAlPUEVOU1NMX0VY SVQocmV0KTsKLUluZGV4OiBvcGVuc3NsL2FwcHMvY2EuYwotUkNTIEZpbGU6IC92L29wZW5zc2wv Y3ZzL29wZW5zc2wvYXBwcy9jYS5jLHYKLXJjc2RpZmYgLXEgLWtrICctcjEuMTY3JyAnLXIxLjE2 Ny4yLjEnIC11ICcvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL2FwcHMvY2EuYyx2JyAyPi9kZXYvbnVs bAotLS0tIG9wZW5zc2wvYXBwcy9jYS5jIDIwMDkvMDMvMDkgMTM6NTk6MDcgMS4xNjcKLSsrKyBv cGVuc3NsL2FwcHMvY2EuYyAyMDA5LzA3LzI3IDIxOjA4OjQ0IDEuMTY3LjIuMQotQEAgLTg4Myw5 ICs4ODMsOSBAQAotIAlpZiAoZGIgPT0gTlVMTCkgZ290byBlcnI7Ci0gCi0gCS8qIExldHMgY2hl Y2sgc29tZSBmaWVsZHMgKi8KLS0JZm9yIChpPTA7IGk8c2tfUFNUUklOR19udW0oZGItPmRiLT5k YXRhKTsgaSsrKQotKwlmb3IgKGk9MDsgaTxza19PUEVOU1NMX1BTVFJJTkdfbnVtKGRiLT5kYi0+ ZGF0YSk7IGkrKykKLSAJCXsKLS0JCXBwPXNrX1BTVFJJTkdfdmFsdWUoZGItPmRiLT5kYXRhLGkp OwotKwkJcHA9c2tfT1BFTlNTTF9QU1RSSU5HX3ZhbHVlKGRiLT5kYi0+ZGF0YSxpKTsKLSAJCWlm ICgocHBbREJfdHlwZV1bMF0gIT0gREJfVFlQRV9SRVYpICYmCi0gCQkJKHBwW0RCX3Jldl9kYXRl XVswXSAhPSAnXDAnKSkKLSAJCQl7Ci1AQCAtOTM4LDcgKzkzOCw3IEBACi0gI2VuZGlmCi0gCQlU WFRfREJfd3JpdGUob3V0LGRiLT5kYik7Ci0gCQlCSU9fcHJpbnRmKGJpb19lcnIsIiVkIGVudHJp ZXMgbG9hZGVkIGZyb20gdGhlIGRhdGFiYXNlXG4iLAotLQkJCSAgIHNrX1BTVFJJTkdfbnVtKGRi LT5kYi0+ZGF0YSkpOwotKwkJCSAgIHNrX09QRU5TU0xfUFNUUklOR19udW0oZGItPmRiLT5kYXRh KSk7Ci0gCQlCSU9fcHJpbnRmKGJpb19lcnIsImdlbmVyYXRpbmcgaW5kZXhcbiIpOwotIAkJfQot IAkKLUBAIC0xNDA4LDkgKzE0MDgsOSBAQAotIAotIAkJQVNOMV9USU1FX2ZyZWUodG1wdG0pOwot IAotLQkJZm9yIChpPTA7IGk8c2tfUFNUUklOR19udW0oZGItPmRiLT5kYXRhKTsgaSsrKQotKwkJ Zm9yIChpPTA7IGk8c2tfT1BFTlNTTF9QU1RSSU5HX251bShkYi0+ZGItPmRhdGEpOyBpKyspCi0g CQkJewotLQkJCXBwPXNrX1BTVFJJTkdfdmFsdWUoZGItPmRiLT5kYXRhLGkpOwotKwkJCXBwPXNr X09QRU5TU0xfUFNUUklOR192YWx1ZShkYi0+ZGItPmRhdGEsaSk7Ci0gCQkJaWYgKHBwW0RCX3R5 cGVdWzBdID09IERCX1RZUEVfUkVWKQotIAkJCQl7Ci0gCQkJCWlmICgocj1YNTA5X1JFVk9LRURf bmV3KCkpID09IE5VTEwpIGdvdG8gZXJyOwotQEAgLTE2ODUsOSArMTY4NSw5IEBACi0gCWludCBv az0gLTEsaSxqLGxhc3QsbmlkOwotIAljb25zdCBjaGFyICpwOwotIAlDT05GX1ZBTFVFICpjdjsK LS0JU1RSSU5HIHJvd1tEQl9OVU1CRVJdOwotLQlTVFJJTkcgKmlyb3c9TlVMTDsKLS0JU1RSSU5H ICpycm93PU5VTEw7Ci0rCU9QRU5TU0xfU1RSSU5HIHJvd1tEQl9OVU1CRVJdOwotKwlPUEVOU1NM X1NUUklORyAqaXJvdz1OVUxMOwotKwlPUEVOU1NMX1NUUklORyAqcnJvdz1OVUxMOwotIAljaGFy IGJ1ZlsyNV07Ci0gCi0gCXRtcHRtPUFTTjFfVVRDVElNRV9uZXcoKTsKLUBAIC0xOTI5LDcgKzE5 MjksNyBAQAotIAotIAlpZiAoZGItPmF0dHJpYnV0ZXMudW5pcXVlX3N1YmplY3QpCi0gCQl7Ci0t CQlTVFJJTkcgKmNyb3c9cm93OwotKwkJT1BFTlNTTF9TVFJJTkcgKmNyb3c9cm93OwotIAotIAkJ cnJvdz1UWFRfREJfZ2V0X2J5X2luZGV4KGRiLT5kYixEQl9uYW1lLGNyb3cpOwotIAkJaWYgKHJy b3cgIT0gTlVMTCkKLUBAIC0yNjMyLDkgKzI2MzIsOSBAQAotIAllbHNlCi0gCQlhX3kyayA9IDA7 Ci0gCi0tCWZvciAoaSA9IDA7IGkgPCBza19QU1RSSU5HX251bShkYi0+ZGItPmRhdGEpOyBpKysp Ci0rCWZvciAoaSA9IDA7IGkgPCBza19PUEVOU1NMX1BTVFJJTkdfbnVtKGRiLT5kYi0+ZGF0YSk7 IGkrKykKLSAJCXsKLS0JCXJyb3cgPSBza19QU1RSSU5HX3ZhbHVlKGRiLT5kYi0+ZGF0YSwgaSk7 Ci0rCQlycm93ID0gc2tfT1BFTlNTTF9QU1RSSU5HX3ZhbHVlKGRiLT5kYi0+ZGF0YSwgaSk7Ci0g Ci0gCQlpZiAocnJvd1tEQl90eXBlXVswXSA9PSAnVicpCi0gCQkgCXsKLUluZGV4OiBvcGVuc3Ns L2FwcHMvY21zLmMKLVJDUyBGaWxlOiAvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL2FwcHMvY21zLmMs dgotcmNzZGlmZiAtcSAta2sgJy1yMS4yMy4yLjEnICctcjEuMjMuMi4yJyAtdSAnL3Yvb3BlbnNz bC9jdnMvb3BlbnNzbC9hcHBzL2Ntcy5jLHYnIDI+L2Rldi9udWxsCi0tLS0gb3BlbnNzbC9hcHBz L2Ntcy5jIDIwMDkvMDQvMTYgMTc6MjI6NDcgMS4yMy4yLjEKLSsrKyBvcGVuc3NsL2FwcHMvY21z LmMgMjAwOS8wNy8yNyAyMTowODo0NCAxLjIzLjIuMgotQEAgLTcxLDkgKzcxLDkgQEAKLSBzdGF0 aWMgaW50IHNhdmVfY2VydHMoY2hhciAqc2lnbmVyZmlsZSwgU1RBQ0tfT0YoWDUwOSkgKnNpZ25l cnMpOwotIHN0YXRpYyBpbnQgY21zX2NiKGludCBvaywgWDUwOV9TVE9SRV9DVFggKmN0eCk7Ci0g c3RhdGljIHZvaWQgcmVjZWlwdF9yZXF1ZXN0X3ByaW50KEJJTyAqb3V0LCBDTVNfQ29udGVudElu Zm8gKmNtcyk7Ci0tc3RhdGljIENNU19SZWNlaXB0UmVxdWVzdCAqbWFrZV9yZWNlaXB0X3JlcXVl c3QoU1RBQ0tfT0YoU1RSSU5HKSAqcnJfdG8sCi0rc3RhdGljIENNU19SZWNlaXB0UmVxdWVzdCAq bWFrZV9yZWNlaXB0X3JlcXVlc3QoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpycl90bywKLSAJ CQkJCQlpbnQgcnJfYWxsb3JmaXJzdCwKLS0JCQkJCQlTVEFDS19PRihTVFJJTkcpICpycl9mcm9t KTsKLSsJCQkJCVNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqcnJfZnJvbSk7Ci0gCi0gI2RlZmlu ZSBTTUlNRV9PUAkweDEwCi0gI2RlZmluZSBTTUlNRV9JUAkweDIwCi1AQCAtMTA4LDcgKzEwOCw3 IEBACi0gCWNvbnN0IGNoYXIgKmlubW9kZSA9ICJyIiwgKm91dG1vZGUgPSAidyI7Ci0gCWNoYXIg KmluZmlsZSA9IE5VTEwsICpvdXRmaWxlID0gTlVMTCwgKnJjdGZpbGUgPSBOVUxMOwotIAljaGFy ICpzaWduZXJmaWxlID0gTlVMTCwgKnJlY2lwZmlsZSA9IE5VTEw7Ci0tCVNUQUNLX09GKFNUUklO RykgKnNrc2lnbmVycyA9IE5VTEwsICpza2tleXMgPSBOVUxMOwotKwlTVEFDS19PRihPUEVOU1NM X1NUUklORykgKnNrc2lnbmVycyA9IE5VTEwsICpza2tleXMgPSBOVUxMOwotIAljaGFyICpjZXJ0 ZmlsZSA9IE5VTEwsICprZXlmaWxlID0gTlVMTCwgKmNvbnRmaWxlPU5VTEw7Ci0gCWNoYXIgKmNl cnRzb3V0ZmlsZSA9IE5VTEw7Ci0gCWNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciA9IE5VTEw7Ci1A QCAtMTIyLDcgKzEyMiw3IEBACi0gCWludCBmbGFncyA9IENNU19ERVRBQ0hFRCwgbm9vdXQgPSAw LCBwcmludCA9IDA7Ci0gCWludCB2ZXJpZnlfcmV0Y29kZSA9IDA7Ci0gCWludCBycl9wcmludCA9 IDAsIHJyX2FsbG9yZmlyc3QgPSAtMTsKLS0JU1RBQ0tfT0YoU1RSSU5HKSAqcnJfdG8gPSBOVUxM LCAqcnJfZnJvbSA9IE5VTEw7Ci0rCVNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqcnJfdG8gPSBO VUxMLCAqcnJfZnJvbSA9IE5VTEw7Ci0gCUNNU19SZWNlaXB0UmVxdWVzdCAqcnIgPSBOVUxMOwot IAljaGFyICp0byA9IE5VTEwsICpmcm9tID0gTlVMTCwgKnN1YmplY3QgPSBOVUxMOwotIAljaGFy ICpDQWZpbGUgPSBOVUxMLCAqQ0FwYXRoID0gTlVMTDsKLUBAIC0yODEsOCArMjgxLDggQEAKLSAJ CQkJZ290byBhcmdlcnI7Ci0gCQkJYXJncysrOwotIAkJCWlmICghcnJfZnJvbSkKLS0JCQkJcnJf ZnJvbSA9IHNrX1NUUklOR19uZXdfbnVsbCgpOwotLQkJCXNrX1NUUklOR19wdXNoKHJyX2Zyb20s ICphcmdzKTsKLSsJCQkJcnJfZnJvbSA9IHNrX09QRU5TU0xfU1RSSU5HX25ld19udWxsKCk7Ci0r CQkJc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChycl9mcm9tLCAqYXJncyk7Ci0gCQkJfQotIAkJZWxz ZSBpZiAoIXN0cmNtcCgqYXJncywiLXJlY2VpcHRfcmVxdWVzdF90byIpKQotIAkJCXsKLUBAIC0y OTAsOCArMjkwLDggQEAKLSAJCQkJZ290byBhcmdlcnI7Ci0gCQkJYXJncysrOwotIAkJCWlmICgh cnJfdG8pCi0tCQkJCXJyX3RvID0gc2tfU1RSSU5HX25ld19udWxsKCk7Ci0tCQkJc2tfU1RSSU5H X3B1c2gocnJfdG8sICphcmdzKTsKLSsJCQkJcnJfdG8gPSBza19PUEVOU1NMX1NUUklOR19uZXdf bnVsbCgpOwotKwkJCXNrX09QRU5TU0xfU1RSSU5HX3B1c2gocnJfdG8sICphcmdzKTsKLSAJCQl9 Ci0gCQllbHNlIGlmICghc3RyY21wICgqYXJncywgIi1wcmludCIpKQotIAkJCQl7Ci1AQCAtMzg3 LDEzICszODcsMTMgQEAKLSAJCQlpZiAoc2lnbmVyZmlsZSkKLSAJCQkJewotIAkJCQlpZiAoIXNr c2lnbmVycykKLS0JCQkJCXNrc2lnbmVycyA9IHNrX1NUUklOR19uZXdfbnVsbCgpOwotLQkJCQlz a19TVFJJTkdfcHVzaChza3NpZ25lcnMsIHNpZ25lcmZpbGUpOwotKwkJCQkJc2tzaWduZXJzID0g c2tfT1BFTlNTTF9TVFJJTkdfbmV3X251bGwoKTsKLSsJCQkJc2tfT1BFTlNTTF9TVFJJTkdfcHVz aChza3NpZ25lcnMsIHNpZ25lcmZpbGUpOwotIAkJCQlpZiAoIWtleWZpbGUpCi0gCQkJCQlrZXlm aWxlID0gc2lnbmVyZmlsZTsKLSAJCQkJaWYgKCFza2tleXMpCi0tCQkJCQlza2tleXMgPSBza19T VFJJTkdfbmV3X251bGwoKTsKLS0JCQkJc2tfU1RSSU5HX3B1c2goc2trZXlzLCBrZXlmaWxlKTsK LSsJCQkJCXNra2V5cyA9IHNrX09QRU5TU0xfU1RSSU5HX25ld19udWxsKCk7Ci0rCQkJCXNrX09Q RU5TU0xfU1RSSU5HX3B1c2goc2trZXlzLCBrZXlmaWxlKTsKLSAJCQkJa2V5ZmlsZSA9IE5VTEw7 Ci0gCQkJCX0KLSAJCQlzaWduZXJmaWxlID0gKisrYXJnczsKLUBAIC00MzUsMTIgKzQzNSwxMiBA QAotIAkJCQkJZ290byBhcmdlcnI7Ci0gCQkJCQl9Ci0gCQkJCWlmICghc2tzaWduZXJzKQotLQkJ CQkJc2tzaWduZXJzID0gc2tfU1RSSU5HX25ld19udWxsKCk7Ci0tCQkJCXNrX1NUUklOR19wdXNo KHNrc2lnbmVycywgc2lnbmVyZmlsZSk7Ci0rCQkJCQlza3NpZ25lcnMgPSBza19PUEVOU1NMX1NU UklOR19uZXdfbnVsbCgpOwotKwkJCQlza19PUEVOU1NMX1NUUklOR19wdXNoKHNrc2lnbmVycywg c2lnbmVyZmlsZSk7Ci0gCQkJCXNpZ25lcmZpbGUgPSBOVUxMOwotIAkJCQlpZiAoIXNra2V5cykK LS0JCQkJCXNra2V5cyA9IHNrX1NUUklOR19uZXdfbnVsbCgpOwotLQkJCQlza19TVFJJTkdfcHVz aChza2tleXMsIGtleWZpbGUpOwotKwkJCQkJc2trZXlzID0gc2tfT1BFTlNTTF9TVFJJTkdfbmV3 X251bGwoKTsKLSsJCQkJc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChza2tleXMsIGtleWZpbGUpOwot IAkJCQl9Ci0gCQkJa2V5ZmlsZSA9ICorK2FyZ3M7Ci0gCQkJfQotQEAgLTUzOSwxMyArNTM5LDEz IEBACi0gCQlpZiAoc2lnbmVyZmlsZSkKLSAJCQl7Ci0gCQkJaWYgKCFza3NpZ25lcnMpCi0tCQkJ CXNrc2lnbmVycyA9IHNrX1NUUklOR19uZXdfbnVsbCgpOwotLQkJCXNrX1NUUklOR19wdXNoKHNr c2lnbmVycywgc2lnbmVyZmlsZSk7Ci0rCQkJCXNrc2lnbmVycyA9IHNrX09QRU5TU0xfU1RSSU5H X25ld19udWxsKCk7Ci0rCQkJc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChza3NpZ25lcnMsIHNpZ25l cmZpbGUpOwotIAkJCWlmICghc2trZXlzKQotLQkJCQlza2tleXMgPSBza19TVFJJTkdfbmV3X251 bGwoKTsKLSsJCQkJc2trZXlzID0gc2tfT1BFTlNTTF9TVFJJTkdfbmV3X251bGwoKTsKLSAJCQlp ZiAoIWtleWZpbGUpCi0gCQkJCWtleWZpbGUgPSBzaWduZXJmaWxlOwotLQkJCXNrX1NUUklOR19w dXNoKHNra2V5cywga2V5ZmlsZSk7Ci0rCQkJc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChza2tleXMs IGtleWZpbGUpOwotIAkJCX0KLSAJCWlmICghc2tzaWduZXJzKQotIAkJCXsKLUBAIC05ODAsMTEg Kzk4MCwxMSBAQAotIAkJCX0KLSAJCWVsc2UKLSAJCQlmbGFncyB8PSBDTVNfUkVVU0VfRElHRVNU OwotLQkJZm9yIChpID0gMDsgaSA8IHNrX1NUUklOR19udW0oc2tzaWduZXJzKTsgaSsrKQotKwkJ Zm9yIChpID0gMDsgaSA8IHNrX09QRU5TU0xfU1RSSU5HX251bShza3NpZ25lcnMpOyBpKyspCi0g CQkJewotIAkJCUNNU19TaWduZXJJbmZvICpzaTsKLS0JCQlzaWduZXJmaWxlID0gc2tfU1RSSU5H X3ZhbHVlKHNrc2lnbmVycywgaSk7Ci0tCQkJa2V5ZmlsZSA9IHNrX1NUUklOR192YWx1ZShza2tl eXMsIGkpOwotKwkJCXNpZ25lcmZpbGUgPSBza19PUEVOU1NMX1NUUklOR192YWx1ZShza3NpZ25l cnMsIGkpOwotKwkJCWtleWZpbGUgPSBza19PUEVOU1NMX1NUUklOR192YWx1ZShza2tleXMsIGkp OwotIAkJCXNpZ25lciA9IGxvYWRfY2VydChiaW9fZXJyLCBzaWduZXJmaWxlLEZPUk1BVF9QRU0s IE5VTEwsCi0gCQkJCQllLCAic2lnbmVyIGNlcnRpZmljYXRlIik7Ci0gCQkJaWYgKCFzaWduZXIp Ci1AQCAtMTE2MCw5ICsxMTYwLDkgQEAKLSAJaWYgKHZwbSkKLSAJCVg1MDlfVkVSSUZZX1BBUkFN X2ZyZWUodnBtKTsKLSAJaWYgKHNrc2lnbmVycykKLS0JCXNrX1NUUklOR19mcmVlKHNrc2lnbmVy cyk7Ci0rCQlza19PUEVOU1NMX1NUUklOR19mcmVlKHNrc2lnbmVycyk7Ci0gCWlmIChza2tleXMp Ci0tCQlza19TVFJJTkdfZnJlZShza2tleXMpOwotKwkJc2tfT1BFTlNTTF9TVFJJTkdfZnJlZShz a2tleXMpOwotIAlpZiAoc2VjcmV0X2tleSkKLSAJCU9QRU5TU0xfZnJlZShzZWNyZXRfa2V5KTsK LSAJaWYgKHNlY3JldF9rZXlpZCkKLUBAIC0xMTcyLDkgKzExNzIsOSBAQAotIAlpZiAocnIpCi0g CQlDTVNfUmVjZWlwdFJlcXVlc3RfZnJlZShycik7Ci0gCWlmIChycl90bykKLS0JCXNrX1NUUklO R19mcmVlKHJyX3RvKTsKLSsJCXNrX09QRU5TU0xfU1RSSU5HX2ZyZWUocnJfdG8pOwotIAlpZiAo cnJfZnJvbSkKLS0JCXNrX1NUUklOR19mcmVlKHJyX2Zyb20pOwotKwkJc2tfT1BFTlNTTF9TVFJJ TkdfZnJlZShycl9mcm9tKTsKLSAJWDUwOV9TVE9SRV9mcmVlKHN0b3JlKTsKLSAJWDUwOV9mcmVl KGNlcnQpOwotIAlYNTA5X2ZyZWUocmVjaXApOwotQEAgLTEyOTYsNyArMTI5Niw3IEBACi0gCQl9 Ci0gCX0KLSAKLS1zdGF0aWMgU1RBQ0tfT0YoR0VORVJBTF9OQU1FUykgKm1ha2VfbmFtZXNfc3Rh Y2soU1RBQ0tfT0YoU1RSSU5HKSAqbnMpCi0rc3RhdGljIFNUQUNLX09GKEdFTkVSQUxfTkFNRVMp ICptYWtlX25hbWVzX3N0YWNrKFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqbnMpCi0gCXsKLSAJ aW50IGk7Ci0gCVNUQUNLX09GKEdFTkVSQUxfTkFNRVMpICpyZXQ7Ci1AQCAtMTMwNSw5ICsxMzA1 LDkgQEAKLSAJcmV0ID0gc2tfR0VORVJBTF9OQU1FU19uZXdfbnVsbCgpOwotIAlpZiAoIXJldCkK LSAJCWdvdG8gZXJyOwotLQlmb3IgKGkgPSAwOyBpIDwgc2tfU1RSSU5HX251bShucyk7IGkrKykK LSsJZm9yIChpID0gMDsgaSA8IHNrX09QRU5TU0xfU1RSSU5HX251bShucyk7IGkrKykKLSAJCXsK LS0JCWNoYXIgKnN0ciA9IHNrX1NUUklOR192YWx1ZShucywgaSk7Ci0rCQljaGFyICpzdHIgPSBz a19PUEVOU1NMX1NUUklOR192YWx1ZShucywgaSk7Ci0gCQlnZW4gPSBhMmlfR0VORVJBTF9OQU1F KE5VTEwsIE5VTEwsIE5VTEwsIEdFTl9FTUFJTCwgc3RyLCAwKTsKLSAJCWlmICghZ2VuKQotIAkJ CWdvdG8gZXJyOwotQEAgLTEzMzUsOSArMTMzNSw5IEBACi0gCX0KLSAKLSAKLS1zdGF0aWMgQ01T X1JlY2VpcHRSZXF1ZXN0ICptYWtlX3JlY2VpcHRfcmVxdWVzdChTVEFDS19PRihTVFJJTkcpICpy cl90bywKLStzdGF0aWMgQ01TX1JlY2VpcHRSZXF1ZXN0ICptYWtlX3JlY2VpcHRfcmVxdWVzdChT VEFDS19PRihPUEVOU1NMX1NUUklORykgKnJyX3RvLAotIAkJCQkJCWludCBycl9hbGxvcmZpcnN0 LAotLQkJCQkJCVNUQUNLX09GKFNUUklORykgKnJyX2Zyb20pCi0rCQkJCQkJU1RBQ0tfT0YoT1BF TlNTTF9TVFJJTkcpICpycl9mcm9tKQotIAl7Ci0gCVNUQUNLX09GKEdFTkVSQUxfTkFNRVMpICpy Y3RfdG8sICpyY3RfZnJvbTsKLSAJQ01TX1JlY2VpcHRSZXF1ZXN0ICpycjsKLUluZGV4OiBvcGVu c3NsL2FwcHMvY3JsMnA3LmMKLVJDUyBGaWxlOiAvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL2FwcHMv Y3JsMnA3LmMsdgotcmNzZGlmZiAtcSAta2sgJy1yMS4xOScgJy1yMS4xOS4yLjEnIC11ICcvdi9v cGVuc3NsL2N2cy9vcGVuc3NsL2FwcHMvY3JsMnA3LmMsdicgMj4vZGV2L251bGwKLS0tLSBvcGVu c3NsL2FwcHMvY3JsMnA3LmMgMjAwOC8wNi8wNCAxMTowMDo0NSAxLjE5Ci0rKysgb3BlbnNzbC9h cHBzL2NybDJwNy5jIDIwMDkvMDcvMjcgMjE6MDg6NDUgMS4xOS4yLjEKLUBAIC05Miw3ICs5Miw3 IEBACi0gCVBLQ1M3ICpwNyA9IE5VTEw7Ci0gCVBLQ1M3X1NJR05FRCAqcDdzID0gTlVMTDsKLSAJ WDUwOV9DUkwgKmNybD1OVUxMOwotLQlTVEFDS19PRihTVFJJTkcpICpjZXJ0ZmxzdD1OVUxMOwot KwlTVEFDS19PRihPUEVOU1NMX1NUUklORykgKmNlcnRmbHN0PU5VTEw7Ci0gCVNUQUNLX09GKFg1 MDlfQ1JMKSAqY3JsX3N0YWNrPU5VTEw7Ci0gCVNUQUNLX09GKFg1MDkpICpjZXJ0X3N0YWNrPU5V TEw7Ci0gCWludCByZXQ9MSxub2NybD0wOwotQEAgLTE0MCw4ICsxNDAsOCBAQAotIAkJZWxzZSBp ZiAoc3RyY21wKCphcmd2LCItY2VydGZpbGUiKSA9PSAwKQotIAkJCXsKLSAJCQlpZiAoLS1hcmdj IDwgMSkgZ290byBiYWQ7Ci0tCQkJaWYoIWNlcnRmbHN0KSBjZXJ0ZmxzdCA9IHNrX1NUUklOR19u ZXdfbnVsbCgpOwotLQkJCXNrX1NUUklOR19wdXNoKGNlcnRmbHN0LCooKythcmd2KSk7Ci0rCQkJ aWYoIWNlcnRmbHN0KSBjZXJ0ZmxzdCA9IHNrX09QRU5TU0xfU1RSSU5HX25ld19udWxsKCk7Ci0r CQkJc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChjZXJ0ZmxzdCwqKCsrYXJndikpOwotIAkJCX0KLSAJ CWVsc2UKLSAJCQl7Ci1AQCAtMjI2LDggKzIyNiw4IEBACi0gCWlmICgoY2VydF9zdGFjaz1za19Y NTA5X25ld19udWxsKCkpID09IE5VTEwpIGdvdG8gZW5kOwotIAlwN3MtPmNlcnQ9Y2VydF9zdGFj azsKLSAKLS0JaWYoY2VydGZsc3QpIGZvcihpID0gMDsgaSA8IHNrX1NUUklOR19udW0oY2VydGZs c3QpOyBpKyspIHsKLS0JCWNlcnRmaWxlID0gc2tfU1RSSU5HX3ZhbHVlKGNlcnRmbHN0LCBpKTsK LSsJaWYoY2VydGZsc3QpIGZvcihpID0gMDsgaSA8IHNrX09QRU5TU0xfU1RSSU5HX251bShjZXJ0 ZmxzdCk7IGkrKykgewotKwkJY2VydGZpbGUgPSBza19PUEVOU1NMX1NUUklOR192YWx1ZShjZXJ0 ZmxzdCwgaSk7Ci0gCQlpZiAoYWRkX2NlcnRzX2Zyb21fZmlsZShjZXJ0X3N0YWNrLGNlcnRmaWxl KSA8IDApCi0gCQkJewotIAkJCUJJT19wcmludGYoYmlvX2VyciwgImVycm9yIGxvYWRpbmcgY2Vy dGlmaWNhdGVzXG4iKTsKLUBAIC0yMzYsNyArMjM2LDcgQEAKLSAJCQl9Ci0gCX0KLSAKLS0Jc2tf U1RSSU5HX2ZyZWUoY2VydGZsc3QpOwotKwlza19PUEVOU1NMX1NUUklOR19mcmVlKGNlcnRmbHN0 KTsKLSAKLSAJaWYgKG91dGZpbGUgPT0gTlVMTCkKLSAJCXsKLUluZGV4OiBvcGVuc3NsL2FwcHMv ZGdzdC5jCi1SQ1MgRmlsZTogL3Yvb3BlbnNzbC9jdnMvb3BlbnNzbC9hcHBzL2Rnc3QuYyx2Ci1y Y3NkaWZmIC1xIC1rayAnLXIxLjU0LjIuMycgJy1yMS41NC4yLjQnIC11ICcvdi9vcGVuc3NsL2N2 cy9vcGVuc3NsL2FwcHMvZGdzdC5jLHYnIDI+L2Rldi9udWxsCi0tLS0gb3BlbnNzbC9hcHBzL2Rn c3QuYyAyMDA5LzA0LzI2IDEyOjE2OjEyIDEuNTQuMi4zCi0rKysgb3BlbnNzbC9hcHBzL2Rnc3Qu YyAyMDA5LzA3LzI3IDIxOjA4OjQ1IDEuNTQuMi40Ci1AQCAtMTI3LDcgKzEyNyw3IEBACi0gI2Vu ZGlmCi0gCWNoYXIgKmhtYWNfa2V5PU5VTEw7Ci0gCWNoYXIgKm1hY19uYW1lPU5VTEw7Ci0tCVNU QUNLX09GKFNUUklORykgKnNpZ29wdHMgPSBOVUxMLCAqbWFjb3B0cyA9IE5VTEw7Ci0rCVNUQUNL X09GKE9QRU5TU0xfU1RSSU5HKSAqc2lnb3B0cyA9IE5VTEwsICptYWNvcHRzID0gTlVMTDsKLSAK LSAJYXBwc19zdGFydHVwKCk7Ci0gCi1AQCAtMjMwLDggKzIzMCw4IEBACi0gCQkJaWYgKC0tYXJn YyA8IDEpCi0gCQkJCWJyZWFrOwotIAkJCWlmICghc2lnb3B0cykKLS0JCQkJc2lnb3B0cyA9IHNr X1NUUklOR19uZXdfbnVsbCgpOwotLQkJCWlmICghc2lnb3B0cyB8fCAhc2tfU1RSSU5HX3B1c2go c2lnb3B0cywgKigrK2FyZ3YpKSkKLSsJCQkJc2lnb3B0cyA9IHNrX09QRU5TU0xfU1RSSU5HX25l d19udWxsKCk7Ci0rCQkJaWYgKCFzaWdvcHRzIHx8ICFza19PUEVOU1NMX1NUUklOR19wdXNoKHNp Z29wdHMsICooKythcmd2KSkpCi0gCQkJCWJyZWFrOwotIAkJCX0KLSAJCWVsc2UgaWYgKHN0cmNt cCgqYXJndiwiLW1hY29wdCIpID09IDApCi1AQCAtMjM5LDggKzIzOSw4IEBACi0gCQkJaWYgKC0t YXJnYyA8IDEpCi0gCQkJCWJyZWFrOwotIAkJCWlmICghbWFjb3B0cykKLS0JCQkJbWFjb3B0cyA9 IHNrX1NUUklOR19uZXdfbnVsbCgpOwotLQkJCWlmICghbWFjb3B0cyB8fCAhc2tfU1RSSU5HX3B1 c2gobWFjb3B0cywgKigrK2FyZ3YpKSkKLSsJCQkJbWFjb3B0cyA9IHNrX09QRU5TU0xfU1RSSU5H X25ld19udWxsKCk7Ci0rCQkJaWYgKCFtYWNvcHRzIHx8ICFza19PUEVOU1NMX1NUUklOR19wdXNo KG1hY29wdHMsICooKythcmd2KSkpCi0gCQkJCWJyZWFrOwotIAkJCX0KLSAJCWVsc2UgaWYgKCht PUVWUF9nZXRfZGlnZXN0YnluYW1lKCYoKCphcmd2KVsxXSkpKSAhPSBOVUxMKQotQEAgLTM2NSw5 ICszNjUsOSBAQAotIAkJaWYgKG1hY29wdHMpCi0gCQkJewotIAkJCWNoYXIgKm1hY29wdDsKLS0J CQlmb3IgKGkgPSAwOyBpIDwgc2tfU1RSSU5HX251bShtYWNvcHRzKTsgaSsrKQotKwkJCWZvciAo aSA9IDA7IGkgPCBza19PUEVOU1NMX1NUUklOR19udW0obWFjb3B0cyk7IGkrKykKLSAJCQkJewot LQkJCQltYWNvcHQgPSBza19TVFJJTkdfdmFsdWUobWFjb3B0cywgaSk7Ci0rCQkJCW1hY29wdCA9 IHNrX09QRU5TU0xfU1RSSU5HX3ZhbHVlKG1hY29wdHMsIGkpOwotIAkJCQlpZiAocGtleV9jdHJs X3N0cmluZyhtYWNfY3R4LCBtYWNvcHQpIDw9IDApCi0gCQkJCQl7Ci0gCQkJCQlCSU9fcHJpbnRm KGJpb19lcnIsCi1AQCAtNDI0LDkgKzQyNCw5IEBACi0gCQlpZiAoc2lnb3B0cykKLSAJCQl7Ci0g CQkJY2hhciAqc2lnb3B0OwotLQkJCWZvciAoaSA9IDA7IGkgPCBza19TVFJJTkdfbnVtKHNpZ29w dHMpOyBpKyspCi0rCQkJZm9yIChpID0gMDsgaSA8IHNrX09QRU5TU0xfU1RSSU5HX251bShzaWdv cHRzKTsgaSsrKQotIAkJCQl7Ci0tCQkJCXNpZ29wdCA9IHNrX1NUUklOR192YWx1ZShzaWdvcHRz LCBpKTsKLSsJCQkJc2lnb3B0ID0gc2tfT1BFTlNTTF9TVFJJTkdfdmFsdWUoc2lnb3B0cywgaSk7 Ci0gCQkJCWlmIChwa2V5X2N0cmxfc3RyaW5nKHBjdHgsIHNpZ29wdCkgPD0gMCkKLSAJCQkJCXsK LSAJCQkJCUJJT19wcmludGYoYmlvX2VyciwKLUBAIC01MzEsOSArNTMxLDkgQEAKLSAJQklPX2Zy ZWVfYWxsKG91dCk7Ci0gCUVWUF9QS0VZX2ZyZWUoc2lna2V5KTsKLSAJaWYgKHNpZ29wdHMpCi0t CQlza19TVFJJTkdfZnJlZShzaWdvcHRzKTsKLSsJCXNrX09QRU5TU0xfU1RSSU5HX2ZyZWUoc2ln b3B0cyk7Ci0gCWlmIChtYWNvcHRzKQotLQkJc2tfU1RSSU5HX2ZyZWUobWFjb3B0cyk7Ci0rCQlz a19PUEVOU1NMX1NUUklOR19mcmVlKG1hY29wdHMpOwotIAlpZihzaWdidWYpIE9QRU5TU0xfZnJl ZShzaWdidWYpOwotIAlpZiAoYm1kICE9IE5VTEwpIEJJT19mcmVlKGJtZCk7Ci0gCWFwcHNfc2h1 dGRvd24oKTsKLUluZGV4OiBvcGVuc3NsL2FwcHMvZW5naW5lLmMKLVJDUyBGaWxlOiAvdi9vcGVu c3NsL2N2cy9vcGVuc3NsL2FwcHMvZW5naW5lLmMsdgotcmNzZGlmZiAtcSAta2sgJy1yMS4zNCcg Jy1yMS4zNC4yLjEnIC11ICcvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL2FwcHMvZW5naW5lLmMsdicg Mj4vZGV2L251bGwKLS0tLSBvcGVuc3NsL2FwcHMvZW5naW5lLmMgMjAwOS8wMi8xNSAxNToyOTo1 OSAxLjM0Ci0rKysgb3BlbnNzbC9hcHBzL2VuZ2luZS5jIDIwMDkvMDcvMjcgMjE6MDg6NDUgMS4z NC4yLjEKLUBAIC0yMDAsNyArMjAwLDcgQEAKLSAJY2hhciAqZGVzYyA9IE5VTEw7Ci0gCWludCBm bGFnczsKLSAJaW50IHhwb3MgPSAwOwotLQlTVEFDS19PRihTVFJJTkcpICpjbWRzID0gTlVMTDsK LSsJU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpjbWRzID0gTlVMTDsKLSAJaWYoIUVOR0lORV9j dHJsKGUsIEVOR0lORV9DVFJMX0hBU19DVFJMX0ZVTkNUSU9OLCAwLCBOVUxMLCBOVUxMKSB8fAot IAkJCSgobnVtID0gRU5HSU5FX2N0cmwoZSwgRU5HSU5FX0NUUkxfR0VUX0ZJUlNUX0NNRF9UWVBF LAotIAkJCQkJMCwgTlVMTCwgTlVMTCkpIDw9IDApKQotQEAgLTIxMSw3ICsyMTEsNyBAQAotIAkJ cmV0dXJuIDE7Ci0gCQl9Ci0gCi0tCWNtZHMgPSBza19TVFJJTkdfbmV3X251bGwoKTsKLSsJY21k cyA9IHNrX09QRU5TU0xfU1RSSU5HX25ld19udWxsKCk7Ci0gCi0gCWlmKCFjbWRzKQotIAkJZ290 byBlcnI7Ci1AQCAtMjg0LDE2ICsyODQsMTYgQEAKLSAJCUJJT19wcmludGYoYmlvX291dCwgIlxu Iik7Ci0gCXJldCA9IDE7Ci0gZXJyOgotLQlpZihjbWRzKSBza19TVFJJTkdfcG9wX2ZyZWUoY21k cywgaWRlbnRpdHkpOwotKwlpZihjbWRzKSBza19PUEVOU1NMX1NUUklOR19wb3BfZnJlZShjbWRz LCBpZGVudGl0eSk7Ci0gCWlmKG5hbWUpIE9QRU5TU0xfZnJlZShuYW1lKTsKLSAJaWYoZGVzYykg T1BFTlNTTF9mcmVlKGRlc2MpOwotIAlyZXR1cm4gcmV0OwotIAl9Ci0gCi0tc3RhdGljIHZvaWQg dXRpbF9kb19jbWRzKEVOR0lORSAqZSwgU1RBQ0tfT0YoU1RSSU5HKSAqY21kcywgQklPICpiaW9f b3V0LAotLQkJCSBjb25zdCBjaGFyICppbmRlbnQpCi0rc3RhdGljIHZvaWQgdXRpbF9kb19jbWRz KEVOR0lORSAqZSwgU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpjbWRzLAotKwkJCUJJTyAqYmlv X291dCwgY29uc3QgY2hhciAqaW5kZW50KQotIAl7Ci0tCWludCBsb29wLCByZXMsIG51bSA9IHNr X1NUUklOR19udW0oY21kcyk7Ci0rCWludCBsb29wLCByZXMsIG51bSA9IHNrX09QRU5TU0xfU1RS SU5HX251bShjbWRzKTsKLSAKLSAJaWYobnVtIDwgMCkKLSAJCXsKLUBAIC0zMDQsNyArMzA0LDcg QEAKLSAJCXsKLSAJCWNoYXIgYnVmWzI1Nl07Ci0gCQljb25zdCBjaGFyICpjbWQsICphcmc7Ci0t CQljbWQgPSBza19TVFJJTkdfdmFsdWUoY21kcywgbG9vcCk7Ci0rCQljbWQgPSBza19PUEVOU1NM X1NUUklOR192YWx1ZShjbWRzLCBsb29wKTsKLSAJCXJlcyA9IDE7IC8qIGFzc3VtZSBzdWNjZXNz ICovCi0gCQkvKiBDaGVjayBpZiB0aGlzIGNvbW1hbmQgaGFzIG5vICI6YXJnIiAqLwotIAkJaWYo KGFyZyA9IHN0cnN0cihjbWQsICI6IikpID09IE5VTEwpCi1AQCAtMzQ0LDkgKzM0NCw5IEBACi0g CWNvbnN0IGNoYXIgKipwcDsKLSAJaW50IHZlcmJvc2U9MCwgbGlzdF9jYXA9MCwgdGVzdF9hdmFp bD0wLCB0ZXN0X2F2YWlsX25vaXNlID0gMDsKLSAJRU5HSU5FICplOwotLQlTVEFDS19PRihTVFJJ TkcpICplbmdpbmVzID0gc2tfU1RSSU5HX25ld19udWxsKCk7Ci0tCVNUQUNLX09GKFNUUklORykg KnByZV9jbWRzID0gc2tfU1RSSU5HX25ld19udWxsKCk7Ci0tCVNUQUNLX09GKFNUUklORykgKnBv c3RfY21kcyA9IHNrX1NUUklOR19uZXdfbnVsbCgpOwotKwlTVEFDS19PRihPUEVOU1NMX1NUUklO RykgKmVuZ2luZXMgPSBza19PUEVOU1NMX1NUUklOR19uZXdfbnVsbCgpOwotKwlTVEFDS19PRihP UEVOU1NMX1NUUklORykgKnByZV9jbWRzID0gc2tfT1BFTlNTTF9TVFJJTkdfbmV3X251bGwoKTsK LSsJU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpwb3N0X2NtZHMgPSBza19PUEVOU1NMX1NUUklO R19uZXdfbnVsbCgpOwotIAlpbnQgYmFkb3BzPTE7Ci0gCUJJTyAqYmlvX291dD1OVUxMOwotIAlj b25zdCBjaGFyICppbmRlbnQgPSAiICAgICAiOwotQEAgLTM5MywyMCArMzkzLDIwIEBACi0gCQkJ YXJnYy0tOyBhcmd2Kys7Ci0gCQkJaWYgKGFyZ2MgPT0gMCkKLSAJCQkJZ290byBza2lwX2FyZ19s b29wOwotLQkJCXNrX1NUUklOR19wdXNoKHByZV9jbWRzLCphcmd2KTsKLSsJCQlza19PUEVOU1NM X1NUUklOR19wdXNoKHByZV9jbWRzLCphcmd2KTsKLSAJCQl9Ci0gCQllbHNlIGlmIChzdHJjbXAo KmFyZ3YsIi1wb3N0IikgPT0gMCkKLSAJCQl7Ci0gCQkJYXJnYy0tOyBhcmd2Kys7Ci0gCQkJaWYg KGFyZ2MgPT0gMCkKLSAJCQkJZ290byBza2lwX2FyZ19sb29wOwotLQkJCXNrX1NUUklOR19wdXNo KHBvc3RfY21kcywqYXJndik7Ci0rCQkJc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChwb3N0X2NtZHMs KmFyZ3YpOwotIAkJCX0KLSAJCWVsc2UgaWYgKChzdHJuY21wKCphcmd2LCItaCIsMikgPT0gMCkg fHwKLSAJCQkJKHN0cmNtcCgqYXJndiwiLT8iKSA9PSAwKSkKLSAJCQlnb3RvIHNraXBfYXJnX2xv b3A7Ci0gCQllbHNlCi0tCQkJc2tfU1RSSU5HX3B1c2goZW5naW5lcywqYXJndik7Ci0rCQkJc2tf T1BFTlNTTF9TVFJJTkdfcHVzaChlbmdpbmVzLCphcmd2KTsKLSAJCWFyZ2MtLTsKLSAJCWFyZ3Yr KzsKLSAJCX0KLUBAIC00MjEsMTcgKzQyMSwxNyBAQAotIAkJZ290byBlbmQ7Ci0gCQl9Ci0gCi0t CWlmIChza19TVFJJTkdfbnVtKGVuZ2luZXMpID09IDApCi0rCWlmIChza19PUEVOU1NMX1NUUklO R19udW0oZW5naW5lcykgPT0gMCkKLSAJCXsKLSAJCWZvcihlID0gRU5HSU5FX2dldF9maXJzdCgp OyBlICE9IE5VTEw7IGUgPSBFTkdJTkVfZ2V0X25leHQoZSkpCi0gCQkJewotLQkJCXNrX1NUUklO R19wdXNoKGVuZ2luZXMsKGNoYXIgKilFTkdJTkVfZ2V0X2lkKGUpKTsKLSsJCQlza19PUEVOU1NM X1NUUklOR19wdXNoKGVuZ2luZXMsKGNoYXIgKilFTkdJTkVfZ2V0X2lkKGUpKTsKLSAJCQl9Ci0g CQl9Ci0gCi0tCWZvciAoaT0wOyBpPHNrX1NUUklOR19udW0oZW5naW5lcyk7IGkrKykKLSsJZm9y IChpPTA7IGk8c2tfT1BFTlNTTF9TVFJJTkdfbnVtKGVuZ2luZXMpOyBpKyspCi0gCQl7Ci0tCQlj b25zdCBjaGFyICppZCA9IHNrX1NUUklOR192YWx1ZShlbmdpbmVzLGkpOwotKwkJY29uc3QgY2hh ciAqaWQgPSBza19PUEVOU1NMX1NUUklOR192YWx1ZShlbmdpbmVzLGkpOwotIAkJaWYgKChlID0g RU5HSU5FX2J5X2lkKGlkKSkgIT0gTlVMTCkKLSAJCQl7Ci0gCQkJY29uc3QgY2hhciAqbmFtZSA9 IEVOR0lORV9nZXRfbmFtZShlKTsKLUBAIC01MzMsOSArNTMzLDkgQEAKLSBlbmQ6Ci0gCi0gCUVS Ul9wcmludF9lcnJvcnMoYmlvX2Vycik7Ci0tCXNrX1NUUklOR19wb3BfZnJlZShlbmdpbmVzLCBp ZGVudGl0eSk7Ci0tCXNrX1NUUklOR19wb3BfZnJlZShwcmVfY21kcywgaWRlbnRpdHkpOwotLQlz a19TVFJJTkdfcG9wX2ZyZWUocG9zdF9jbWRzLCBpZGVudGl0eSk7Ci0rCXNrX09QRU5TU0xfU1RS SU5HX3BvcF9mcmVlKGVuZ2luZXMsIGlkZW50aXR5KTsKLSsJc2tfT1BFTlNTTF9TVFJJTkdfcG9w X2ZyZWUocHJlX2NtZHMsIGlkZW50aXR5KTsKLSsJc2tfT1BFTlNTTF9TVFJJTkdfcG9wX2ZyZWUo cG9zdF9jbWRzLCBpZGVudGl0eSk7Ci0gCWlmIChiaW9fb3V0ICE9IE5VTEwpIEJJT19mcmVlX2Fs bChiaW9fb3V0KTsKLSAJYXBwc19zaHV0ZG93bigpOwotIAlPUEVOU1NMX0VYSVQocmV0KTsKLUlu ZGV4OiBvcGVuc3NsL2FwcHMvb2NzcC5jCi1SQ1MgRmlsZTogL3Yvb3BlbnNzbC9jdnMvb3BlbnNz bC9hcHBzL29jc3AuYyx2Ci1yY3NkaWZmIC1xIC1rayAnLXIxLjU0LjIuMScgJy1yMS41NC4yLjIn IC11ICcvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL2FwcHMvb2NzcC5jLHYnIDI+L2Rldi9udWxsCi0t LS0gb3BlbnNzbC9hcHBzL29jc3AuYyAyMDA5LzA0LzAyIDE1OjE5OjAzIDEuNTQuMi4xCi0rKysg b3BlbnNzbC9hcHBzL29jc3AuYyAyMDA5LzA3LzI3IDIxOjA4OjQ1IDEuNTQuMi4yCi1AQCAtOTks NyArOTksNyBAQAotIHN0YXRpYyBpbnQgYWRkX29jc3Bfc2VyaWFsKE9DU1BfUkVRVUVTVCAqKnJl cSwgY2hhciAqc2VyaWFsLCBjb25zdCBFVlBfTUQgKiBjZXJ0X2lkX21kLCBYNTA5ICppc3N1ZXIs Ci0gCQkJCVNUQUNLX09GKE9DU1BfQ0VSVElEKSAqaWRzKTsKLSBzdGF0aWMgaW50IHByaW50X29j c3Bfc3VtbWFyeShCSU8gKm91dCwgT0NTUF9CQVNJQ1JFU1AgKmJzLCBPQ1NQX1JFUVVFU1QgKnJl cSwKLS0JCQkgICAgICBTVEFDS19PRihTVFJJTkcpICpuYW1lcywKLSsJCQkgICAgICBTVEFDS19P RihPUEVOU1NMX1NUUklORykgKm5hbWVzLAotIAkJCSAgICAgIFNUQUNLX09GKE9DU1BfQ0VSVElE KSAqaWRzLCBsb25nIG5zZWMsCi0gCQkJICAgICAgbG9uZyBtYXhhZ2UpOwotIAotQEAgLTE1Myw3 ICsxNTMsNyBAQAotIAlpbnQgYmFkYXJnID0gMDsKLSAJaW50IGk7Ci0gCWludCBpZ25vcmVfZXJy ID0gMDsKLS0JU1RBQ0tfT0YoU1RSSU5HKSAqcmVxbmFtZXMgPSBOVUxMOwotKwlTVEFDS19PRihP UEVOU1NMX1NUUklORykgKnJlcW5hbWVzID0gTlVMTDsKLSAJU1RBQ0tfT0YoT0NTUF9DRVJUSUQp ICppZHMgPSBOVUxMOwotIAotIAlYNTA5ICpyY2FfY2VydCA9IE5VTEw7Ci1AQCAtMTcwLDcgKzE3 MCw3IEBACi0gCVNTTF9sb2FkX2Vycm9yX3N0cmluZ3MoKTsKLSAJT3BlblNTTF9hZGRfc3NsX2Fs Z29yaXRobXMoKTsKLSAJYXJncyA9IGFyZ3YgKyAxOwotLQlyZXFuYW1lcyA9IHNrX1NUUklOR19u ZXdfbnVsbCgpOwotKwlyZXFuYW1lcyA9IHNrX09QRU5TU0xfU1RSSU5HX25ld19udWxsKCk7Ci0g CWlkcyA9IHNrX09DU1BfQ0VSVElEX25ld19udWxsKCk7Ci0gCXdoaWxlICghYmFkYXJnICYmICph cmdzICYmICphcmdzWzBdID09ICctJykKLSAJCXsKLUBAIC00MzIsNyArNDMyLDcgQEAKLSAJCQkJ aWYgKCFjZXJ0X2lkX21kKSBjZXJ0X2lkX21kID0gRVZQX3NoYTEoKTsKLSAJCQkJaWYoIWFkZF9v Y3NwX2NlcnQoJnJlcSwgY2VydCwgY2VydF9pZF9tZCwgaXNzdWVyLCBpZHMpKQotIAkJCQkJZ290 byBlbmQ7Ci0tCQkJCWlmKCFza19TVFJJTkdfcHVzaChyZXFuYW1lcywgKmFyZ3MpKQotKwkJCQlp Zighc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChyZXFuYW1lcywgKmFyZ3MpKQotIAkJCQkJZ290byBl bmQ7Ci0gCQkJCX0KLSAJCQllbHNlIGJhZGFyZyA9IDE7Ci1AQCAtNDQ1LDcgKzQ0NSw3IEBACi0g CQkJCWlmICghY2VydF9pZF9tZCkgY2VydF9pZF9tZCA9IEVWUF9zaGExKCk7Ci0gCQkJCWlmKCFh ZGRfb2NzcF9zZXJpYWwoJnJlcSwgKmFyZ3MsIGNlcnRfaWRfbWQsIGlzc3VlciwgaWRzKSkKLSAJ CQkJCWdvdG8gZW5kOwotLQkJCQlpZighc2tfU1RSSU5HX3B1c2gocmVxbmFtZXMsICphcmdzKSkK LSsJCQkJaWYoIXNrX09QRU5TU0xfU1RSSU5HX3B1c2gocmVxbmFtZXMsICphcmdzKSkKLSAJCQkJ CWdvdG8gZW5kOwotIAkJCQl9Ci0gCQkJZWxzZSBiYWRhcmcgPSAxOwotQEAgLTkwMSw3ICs5MDEs NyBAQAotIAlPQ1NQX1JFUVVFU1RfZnJlZShyZXEpOwotIAlPQ1NQX1JFU1BPTlNFX2ZyZWUocmVz cCk7Ci0gCU9DU1BfQkFTSUNSRVNQX2ZyZWUoYnMpOwotLQlza19TVFJJTkdfZnJlZShyZXFuYW1l cyk7Ci0rCXNrX09QRU5TU0xfU1RSSU5HX2ZyZWUocmVxbmFtZXMpOwotIAlza19PQ1NQX0NFUlRJ RF9mcmVlKGlkcyk7Ci0gCXNrX1g1MDlfcG9wX2ZyZWUoc2lnbl9vdGhlciwgWDUwOV9mcmVlKTsK LSAJc2tfWDUwOV9wb3BfZnJlZSh2ZXJpZnlfb3RoZXIsIFg1MDlfZnJlZSk7Ci1AQCAtOTcxLDcg Kzk3MSw3IEBACi0gCX0KLSAKLSBzdGF0aWMgaW50IHByaW50X29jc3Bfc3VtbWFyeShCSU8gKm91 dCwgT0NTUF9CQVNJQ1JFU1AgKmJzLCBPQ1NQX1JFUVVFU1QgKnJlcSwKLS0JCQkgICAgICBTVEFD S19PRihTVFJJTkcpICpuYW1lcywKLSsJCQkgICAgICBTVEFDS19PRihPUEVOU1NMX1NUUklORykg Km5hbWVzLAotIAkJCSAgICAgIFNUQUNLX09GKE9DU1BfQ0VSVElEKSAqaWRzLCBsb25nIG5zZWMs Ci0gCQkJICAgICAgbG9uZyBtYXhhZ2UpCi0gCXsKLUBAIC05ODMsMTMgKzk4MywxMyBAQAotIAot IAlBU04xX0dFTkVSQUxJWkVEVElNRSAqcmV2LCAqdGhpc3VwZCwgKm5leHR1cGQ7Ci0gCi0tCWlm ICghYnMgfHwgIXJlcSB8fCAhc2tfU1RSSU5HX251bShuYW1lcykgfHwgIXNrX09DU1BfQ0VSVElE X251bShpZHMpKQotKwlpZiAoIWJzIHx8ICFyZXEgfHwgIXNrX09QRU5TU0xfU1RSSU5HX251bShu YW1lcykgfHwgIXNrX09DU1BfQ0VSVElEX251bShpZHMpKQotIAkJcmV0dXJuIDE7Ci0gCi0gCWZv ciAoaSA9IDA7IGkgPCBza19PQ1NQX0NFUlRJRF9udW0oaWRzKTsgaSsrKQotIAkJewotIAkJaWQg PSBza19PQ1NQX0NFUlRJRF92YWx1ZShpZHMsIGkpOwotLQkJbmFtZSA9IHNrX1NUUklOR192YWx1 ZShuYW1lcywgaSk7Ci0rCQluYW1lID0gc2tfT1BFTlNTTF9TVFJJTkdfdmFsdWUobmFtZXMsIGkp OwotIAkJQklPX3ByaW50ZihvdXQsICIlczogIiwgbmFtZSk7Ci0gCi0gCQlpZighT0NTUF9yZXNw X2ZpbmRfc3RhdHVzKGJzLCBpZCwgJnN0YXR1cywgJnJlYXNvbiwKLUluZGV4OiBvcGVuc3NsL2Fw cHMvcGtjczEyLmMKLVJDUyBGaWxlOiAvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL2FwcHMvcGtjczEy LmMsdgotcmNzZGlmZiAtcSAta2sgJy1yMS45Mi4yLjEnICctcjEuOTIuMi4yJyAtdSAnL3Yvb3Bl bnNzbC9jdnMvb3BlbnNzbC9hcHBzL3BrY3MxMi5jLHYnIDI+L2Rldi9udWxsCi0tLS0gb3BlbnNz bC9hcHBzL3BrY3MxMi5jIDIwMDkvMDYvMTcgMTI6MDU6NDkgMS45Mi4yLjEKLSsrKyBvcGVuc3Ns L2FwcHMvcGtjczEyLmMgMjAwOS8wNy8yNyAyMTowODo0NSAxLjkyLjIuMgotQEAgLTExNyw3ICsx MTcsNyBAQAotICAgICBpbnQgcmV0ID0gMTsKLSAgICAgaW50IG1hY3ZlciA9IDE7Ci0gICAgIGlu dCBub3Byb21wdCA9IDA7Ci0tICAgIFNUQUNLX09GKFNUUklORykgKmNhbmFtZXMgPSBOVUxMOwot KyAgICBTVEFDS19PRihPUEVOU1NMX1NUUklORykgKmNhbmFtZXMgPSBOVUxMOwotICAgICBjaGFy ICpjcGFzcyA9IE5VTEwsICptcGFzcyA9IE5VTEw7Ci0gICAgIGNoYXIgKnBhc3NhcmdpbiA9IE5V TEwsICpwYXNzYXJnb3V0ID0gTlVMTCwgKnBhc3NhcmcgPSBOVUxMOwotICAgICBjaGFyICpwYXNz aW4gPSBOVUxMLCAqcGFzc291dCA9IE5VTEw7Ci1AQCAtMjIyLDggKzIyMiw4IEBACi0gCQl9IGVs c2UgaWYgKCFzdHJjbXAgKCphcmdzLCAiLWNhbmFtZSIpKSB7Ci0gCQkgICAgaWYgKGFyZ3NbMV0p IHsKLSAJCQlhcmdzKys7CQotLQkJCWlmICghY2FuYW1lcykgY2FuYW1lcyA9IHNrX1NUUklOR19u ZXdfbnVsbCgpOwotLQkJCXNrX1NUUklOR19wdXNoKGNhbmFtZXMsICphcmdzKTsKLSsJCQlpZiAo IWNhbmFtZXMpIGNhbmFtZXMgPSBza19PUEVOU1NMX1NUUklOR19uZXdfbnVsbCgpOwotKwkJCXNr X09QRU5TU0xfU1RSSU5HX3B1c2goY2FuYW1lcywgKmFyZ3MpOwotIAkJICAgIH0gZWxzZSBiYWRh cmcgPSAxOwotIAkJfSBlbHNlIGlmICghc3RyY21wICgqYXJncywgIi1pbiIpKSB7Ci0gCQkgICAg aWYgKGFyZ3NbMV0pIHsKLUBAIC01NDksOSArNTQ5LDkgQEAKLSAKLSAJLyogQWRkIGFueSBDQSBu YW1lcyAqLwotIAotLQlmb3IgKGkgPSAwOyBpIDwgc2tfU1RSSU5HX251bShjYW5hbWVzKTsgaSsr KQotKwlmb3IgKGkgPSAwOyBpIDwgc2tfT1BFTlNTTF9TVFJJTkdfbnVtKGNhbmFtZXMpOyBpKysp Ci0gCQl7Ci0tCQljYXRtcCA9ICh1bnNpZ25lZCBjaGFyICopc2tfU1RSSU5HX3ZhbHVlKGNhbmFt ZXMsIGkpOwotKwkJY2F0bXAgPSAodW5zaWduZWQgY2hhciAqKXNrX09QRU5TU0xfU1RSSU5HX3Zh bHVlKGNhbmFtZXMsIGkpOwotIAkJWDUwOV9hbGlhc19zZXQxKHNrX1g1MDlfdmFsdWUoY2VydHMs IGkpLCBjYXRtcCwgLTEpOwotIAkJfQotIAotQEAgLTY4Nyw3ICs2ODcsNyBAQAotICNlbmRpZgot ICAgICBCSU9fZnJlZShpbik7Ci0gICAgIEJJT19mcmVlX2FsbChvdXQpOwotLSAgICBpZiAoY2Fu YW1lcykgc2tfU1RSSU5HX2ZyZWUoY2FuYW1lcyk7Ci0rICAgIGlmIChjYW5hbWVzKSBza19PUEVO U1NMX1NUUklOR19mcmVlKGNhbmFtZXMpOwotICAgICBpZihwYXNzaW4pIE9QRU5TU0xfZnJlZShw YXNzaW4pOwotICAgICBpZihwYXNzb3V0KSBPUEVOU1NMX2ZyZWUocGFzc291dCk7Ci0gICAgIGFw cHNfc2h1dGRvd24oKTsKLUluZGV4OiBvcGVuc3NsL2FwcHMvcmVxLmMKLVJDUyBGaWxlOiAvdi9v cGVuc3NsL2N2cy9vcGVuc3NsL2FwcHMvcmVxLmMsdgotcmNzZGlmZiAtcSAta2sgJy1yMS4xMzku Mi4yJyAnLXIxLjEzOS4yLjMnIC11ICcvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL2FwcHMvcmVxLmMs dicgMj4vZGV2L251bGwKLS0tLSBvcGVuc3NsL2FwcHMvcmVxLmMgMjAwOS8wNC8yMyAxNzoxNjoz OCAxLjEzOS4yLjIKLSsrKyBvcGVuc3NsL2FwcHMvcmVxLmMgMjAwOS8wNy8yNyAyMTowODo0NSAx LjEzOS4yLjMKLUBAIC0xNjUsNyArMTY1LDcgQEAKLSAJRVZQX1BLRVlfQ1RYICpnZW5jdHggPSBO VUxMOwotIAljb25zdCBjaGFyICprZXlhbGcgPSBOVUxMOwotIAljaGFyICprZXlhbGdzdHIgPSBO VUxMOwotLQlTVEFDS19PRihTVFJJTkcpICpwa2V5b3B0cyA9IE5VTEw7Ci0rCVNUQUNLX09GKE9Q RU5TU0xfU1RSSU5HKSAqcGtleW9wdHMgPSBOVUxMOwotIAlFVlBfUEtFWSAqcGtleT1OVUxMOwot IAlpbnQgaT0wLGJhZG9wcz0wLG5ld3JlcT0wLHZlcmJvc2U9MCxwa2V5X3R5cGU9LTE7Ci0gCWxv bmcgbmV3a2V5ID0gLTE7Ci1AQCAtMzA2LDggKzMwNiw4IEBACi0gCQkJaWYgKC0tYXJnYyA8IDEp Ci0gCQkJCWdvdG8gYmFkOwotIAkJCWlmICghcGtleW9wdHMpCi0tCQkJCXBrZXlvcHRzID0gc2tf U1RSSU5HX25ld19udWxsKCk7Ci0tCQkJaWYgKCFwa2V5b3B0cyB8fCAhc2tfU1RSSU5HX3B1c2go cGtleW9wdHMsICooKythcmd2KSkpCi0rCQkJCXBrZXlvcHRzID0gc2tfT1BFTlNTTF9TVFJJTkdf bmV3X251bGwoKTsKLSsJCQlpZiAoIXBrZXlvcHRzIHx8ICFza19PUEVOU1NMX1NUUklOR19wdXNo KHBrZXlvcHRzLCAqKCsrYXJndikpKQotIAkJCQlnb3RvIGJhZDsKLSAJCQl9Ci0gCQllbHNlIGlm IChzdHJjbXAoKmFyZ3YsIi1iYXRjaCIpID09IDApCi1AQCAtNjY3LDkgKzY2Nyw5IEBACi0gCQlp ZiAocGtleW9wdHMpCi0gCQkJewotIAkJCWNoYXIgKmdlbm9wdDsKLS0JCQlmb3IgKGkgPSAwOyBp IDwgc2tfU1RSSU5HX251bShwa2V5b3B0cyk7IGkrKykKLSsJCQlmb3IgKGkgPSAwOyBpIDwgc2tf T1BFTlNTTF9TVFJJTkdfbnVtKHBrZXlvcHRzKTsgaSsrKQotIAkJCQl7Ci0tCQkJCWdlbm9wdCA9 IHNrX1NUUklOR192YWx1ZShwa2V5b3B0cywgaSk7Ci0rCQkJCWdlbm9wdCA9IHNrX09QRU5TU0xf U1RSSU5HX3ZhbHVlKHBrZXlvcHRzLCBpKTsKLSAJCQkJaWYgKHBrZXlfY3RybF9zdHJpbmcoZ2Vu Y3R4LCBnZW5vcHQpIDw9IDApCi0gCQkJCQl7Ci0gCQkJCQlCSU9fcHJpbnRmKGJpb19lcnIsCi1A QCAtMTA4Myw3ICsxMDgzLDcgQEAKLSAJaWYgKGdlbmN0eCkKLSAJCUVWUF9QS0VZX0NUWF9mcmVl KGdlbmN0eCk7Ci0gCWlmIChwa2V5b3B0cykKLS0JCXNrX1NUUklOR19mcmVlKHBrZXlvcHRzKTsK LSsJCXNrX09QRU5TU0xfU1RSSU5HX2ZyZWUocGtleW9wdHMpOwotICNpZm5kZWYgT1BFTlNTTF9O T19FTkdJTkUKLSAJaWYgKGdlbl9lbmcpCi0gCQlFTkdJTkVfZnJlZShnZW5fZW5nKTsKLUluZGV4 OiBvcGVuc3NsL2FwcHMvc19zZXJ2ZXIuYwotUkNTIEZpbGU6IC92L29wZW5zc2wvY3ZzL29wZW5z c2wvYXBwcy9zX3NlcnZlci5jLHYKLXJjc2RpZmYgLXEgLWtrICctcjEuMTM2LjIuNCcgJy1yMS4x MzYuMi41JyAtdSAnL3Yvb3BlbnNzbC9jdnMvb3BlbnNzbC9hcHBzL3Nfc2VydmVyLmMsdicgMj4v ZGV2L251bGwKLS0tLSBvcGVuc3NsL2FwcHMvc19zZXJ2ZXIuYyAyMDA5LzA2LzMwIDE2OjEwOjI0 IDEuMTM2LjIuNAotKysrIG9wZW5zc2wvYXBwcy9zX3NlcnZlci5jIDIwMDkvMDcvMjcgMjE6MDg6 NDYgMS4xMzYuMi41Ci1AQCAtNzEyLDcgKzcxMiw3IEBACi0gCWludCB1c2Vfc3NsOwotIAl1bnNp Z25lZCBjaGFyICpyc3BkZXIgPSBOVUxMOwotIAlpbnQgcnNwZGVybGVuOwotLQlTVEFDS19PRihT VFJJTkcpICphaWEgPSBOVUxMOwotKwlTVEFDS19PRihPUEVOU1NMX1NUUklORykgKmFpYSA9IE5V TEw7Ci0gCVg1MDkgKnggPSBOVUxMOwotIAlYNTA5X1NUT1JFX0NUWCBpbmN0eDsKLSAJWDUwOV9P QkpFQ1Qgb2JqOwotQEAgLTczNCw3ICs3MzQsNyBAQAotIAlhaWEgPSBYNTA5X2dldDFfb2NzcCh4 KTsKLSAJaWYgKGFpYSkKLSAJCXsKLS0JCWlmICghT0NTUF9wYXJzZV91cmwoc2tfU1RSSU5HX3Zh bHVlKGFpYSwgMCksCi0rCQlpZiAoIU9DU1BfcGFyc2VfdXJsKHNrX09QRU5TU0xfU1RSSU5HX3Zh bHVlKGFpYSwgMCksCi0gCQkJJmhvc3QsICZwb3J0LCAmcGF0aCwgJnVzZV9zc2wpKQotIAkJCXsK LSAJCQlCSU9fcHV0cyhlcnIsICJjZXJ0X3N0YXR1czogY2FuJ3QgcGFyc2UgQUlBIFVSTFxuIik7 Ci1AQCAtNzQyLDcgKzc0Miw3IEBACi0gCQkJfQotIAkJaWYgKHNyY3R4LT52ZXJib3NlKQotIAkJ CUJJT19wcmludGYoZXJyLCAiY2VydF9zdGF0dXM6IEFJQSBVUkw6ICVzXG4iLAotLQkJCQkJc2tf U1RSSU5HX3ZhbHVlKGFpYSwgMCkpOwotKwkJCQkJc2tfT1BFTlNTTF9TVFJJTkdfdmFsdWUoYWlh LCAwKSk7Ci0gCQl9Ci0gCWVsc2UKLSAJCXsKLUluZGV4OiBvcGVuc3NsL2FwcHMvc21pbWUuYwot UkNTIEZpbGU6IC92L29wZW5zc2wvY3ZzL29wZW5zc2wvYXBwcy9zbWltZS5jLHYKLXJjc2RpZmYg LXEgLWtrICctcjEuNjknICctcjEuNjkuMi4xJyAtdSAnL3Yvb3BlbnNzbC9jdnMvb3BlbnNzbC9h cHBzL3NtaW1lLmMsdicgMj4vZGV2L251bGwKLS0tLSBvcGVuc3NsL2FwcHMvc21pbWUuYyAyMDA4 LzExLzA1IDE4OjM4OjUxIDEuNjkKLSsrKyBvcGVuc3NsL2FwcHMvc21pbWUuYyAyMDA5LzA3LzI3 IDIxOjA4OjQ2IDEuNjkuMi4xCi1AQCAtOTMsNyArOTMsNyBAQAotIAljb25zdCBjaGFyICppbm1v ZGUgPSAiciIsICpvdXRtb2RlID0gInciOwotIAljaGFyICppbmZpbGUgPSBOVUxMLCAqb3V0Zmls ZSA9IE5VTEw7Ci0gCWNoYXIgKnNpZ25lcmZpbGUgPSBOVUxMLCAqcmVjaXBmaWxlID0gTlVMTDsK LS0JU1RBQ0tfT0YoU1RSSU5HKSAqc2tzaWduZXJzID0gTlVMTCwgKnNra2V5cyA9IE5VTEw7Ci0r CVNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqc2tzaWduZXJzID0gTlVMTCwgKnNra2V5cyA9IE5V TEw7Ci0gCWNoYXIgKmNlcnRmaWxlID0gTlVMTCwgKmtleWZpbGUgPSBOVUxMLCAqY29udGZpbGU9 TlVMTDsKLSAJY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyID0gTlVMTDsKLSAJUEtDUzcgKnA3ID0g TlVMTDsKLUBAIC0yNjAsMTMgKzI2MCwxMyBAQAotIAkJCWlmIChzaWduZXJmaWxlKQotIAkJCQl7 Ci0gCQkJCWlmICghc2tzaWduZXJzKQotLQkJCQkJc2tzaWduZXJzID0gc2tfU1RSSU5HX25ld19u dWxsKCk7Ci0tCQkJCXNrX1NUUklOR19wdXNoKHNrc2lnbmVycywgc2lnbmVyZmlsZSk7Ci0rCQkJ CQlza3NpZ25lcnMgPSBza19PUEVOU1NMX1NUUklOR19uZXdfbnVsbCgpOwotKwkJCQlza19PUEVO U1NMX1NUUklOR19wdXNoKHNrc2lnbmVycywgc2lnbmVyZmlsZSk7Ci0gCQkJCWlmICgha2V5Zmls ZSkKLSAJCQkJCWtleWZpbGUgPSBzaWduZXJmaWxlOwotIAkJCQlpZiAoIXNra2V5cykKLS0JCQkJ CXNra2V5cyA9IHNrX1NUUklOR19uZXdfbnVsbCgpOwotLQkJCQlza19TVFJJTkdfcHVzaChza2tl eXMsIGtleWZpbGUpOwotKwkJCQkJc2trZXlzID0gc2tfT1BFTlNTTF9TVFJJTkdfbmV3X251bGwo KTsKLSsJCQkJc2tfT1BFTlNTTF9TVFJJTkdfcHVzaChza2tleXMsIGtleWZpbGUpOwotIAkJCQlr ZXlmaWxlID0gTlVMTDsKLSAJCQkJfQotIAkJCXNpZ25lcmZpbGUgPSAqKythcmdzOwotQEAgLTMw MiwxMiArMzAyLDEyIEBACi0gCQkJCQlnb3RvIGFyZ2VycjsKLSAJCQkJCX0KLSAJCQkJaWYgKCFz a3NpZ25lcnMpCi0tCQkJCQlza3NpZ25lcnMgPSBza19TVFJJTkdfbmV3X251bGwoKTsKLS0JCQkJ c2tfU1RSSU5HX3B1c2goc2tzaWduZXJzLCBzaWduZXJmaWxlKTsKLSsJCQkJCXNrc2lnbmVycyA9 IHNrX09QRU5TU0xfU1RSSU5HX25ld19udWxsKCk7Ci0rCQkJCXNrX09QRU5TU0xfU1RSSU5HX3B1 c2goc2tzaWduZXJzLCBzaWduZXJmaWxlKTsKLSAJCQkJc2lnbmVyZmlsZSA9IE5VTEw7Ci0gCQkJ CWlmICghc2trZXlzKQotLQkJCQkJc2trZXlzID0gc2tfU1RSSU5HX25ld19udWxsKCk7Ci0tCQkJ CXNrX1NUUklOR19wdXNoKHNra2V5cywga2V5ZmlsZSk7Ci0rCQkJCQlza2tleXMgPSBza19PUEVO U1NMX1NUUklOR19uZXdfbnVsbCgpOwotKwkJCQlza19PUEVOU1NMX1NUUklOR19wdXNoKHNra2V5 cywga2V5ZmlsZSk7Ci0gCQkJCX0KLSAJCQlrZXlmaWxlID0gKisrYXJnczsKLSAJCQl9Ci1AQCAt Mzg5LDEzICszODksMTMgQEAKLSAJCWlmIChzaWduZXJmaWxlKQotIAkJCXsKLSAJCQlpZiAoIXNr c2lnbmVycykKLS0JCQkJc2tzaWduZXJzID0gc2tfU1RSSU5HX25ld19udWxsKCk7Ci0tCQkJc2tf U1RSSU5HX3B1c2goc2tzaWduZXJzLCBzaWduZXJmaWxlKTsKLSsJCQkJc2tzaWduZXJzID0gc2tf T1BFTlNTTF9TVFJJTkdfbmV3X251bGwoKTsKLSsJCQlza19PUEVOU1NMX1NUUklOR19wdXNoKHNr c2lnbmVycywgc2lnbmVyZmlsZSk7Ci0gCQkJaWYgKCFza2tleXMpCi0tCQkJCXNra2V5cyA9IHNr X1NUUklOR19uZXdfbnVsbCgpOwotKwkJCQlza2tleXMgPSBza19PUEVOU1NMX1NUUklOR19uZXdf bnVsbCgpOwotIAkJCWlmICgha2V5ZmlsZSkKLSAJCQkJa2V5ZmlsZSA9IHNpZ25lcmZpbGU7Ci0t CQkJc2tfU1RSSU5HX3B1c2goc2trZXlzLCBrZXlmaWxlKTsKLSsJCQlza19PUEVOU1NMX1NUUklO R19wdXNoKHNra2V5cywga2V5ZmlsZSk7Ci0gCQkJfQotIAkJaWYgKCFza3NpZ25lcnMpCi0gCQkJ ewotQEAgLTcwNywxMCArNzA3LDEwIEBACi0gCQkJfQotIAkJZWxzZQotIAkJCWZsYWdzIHw9IFBL Q1M3X1JFVVNFX0RJR0VTVDsKLS0JCWZvciAoaSA9IDA7IGkgPCBza19TVFJJTkdfbnVtKHNrc2ln bmVycyk7IGkrKykKLSsJCWZvciAoaSA9IDA7IGkgPCBza19PUEVOU1NMX1NUUklOR19udW0oc2tz aWduZXJzKTsgaSsrKQotIAkJCXsKLS0JCQlzaWduZXJmaWxlID0gc2tfU1RSSU5HX3ZhbHVlKHNr c2lnbmVycywgaSk7Ci0tCQkJa2V5ZmlsZSA9IHNrX1NUUklOR192YWx1ZShza2tleXMsIGkpOwot KwkJCXNpZ25lcmZpbGUgPSBza19PUEVOU1NMX1NUUklOR192YWx1ZShza3NpZ25lcnMsIGkpOwot KwkJCWtleWZpbGUgPSBza19PUEVOU1NMX1NUUklOR192YWx1ZShza2tleXMsIGkpOwotIAkJCXNp Z25lciA9IGxvYWRfY2VydChiaW9fZXJyLCBzaWduZXJmaWxlLEZPUk1BVF9QRU0sIE5VTEwsCi0g CQkJCQllLCAic2lnbmVyIGNlcnRpZmljYXRlIik7Ci0gCQkJaWYgKCFzaWduZXIpCi1AQCAtODA3 LDkgKzgwNyw5IEBACi0gCWlmICh2cG0pCi0gCQlYNTA5X1ZFUklGWV9QQVJBTV9mcmVlKHZwbSk7 Ci0gCWlmIChza3NpZ25lcnMpCi0tCQlza19TVFJJTkdfZnJlZShza3NpZ25lcnMpOwotKwkJc2tf T1BFTlNTTF9TVFJJTkdfZnJlZShza3NpZ25lcnMpOwotIAlpZiAoc2trZXlzKQotLQkJc2tfU1RS SU5HX2ZyZWUoc2trZXlzKTsKLSsJCXNrX09QRU5TU0xfU1RSSU5HX2ZyZWUoc2trZXlzKTsKLSAJ WDUwOV9TVE9SRV9mcmVlKHN0b3JlKTsKLSAJWDUwOV9mcmVlKGNlcnQpOwotIAlYNTA5X2ZyZWUo cmVjaXApOwotSW5kZXg6IG9wZW5zc2wvYXBwcy94NTA5LmMKLVJDUyBGaWxlOiAvdi9vcGVuc3Ns L2N2cy9vcGVuc3NsL2FwcHMveDUwOS5jLHYKLXJjc2RpZmYgLXEgLWtrICctcjEuMTAyLjIuMycg Jy1yMS4xMDIuMi40JyAtdSAnL3Yvb3BlbnNzbC9jdnMvb3BlbnNzbC9hcHBzL3g1MDkuYyx2JyAy Pi9kZXYvbnVsbAotLS0tIG9wZW5zc2wvYXBwcy94NTA5LmMgMjAwOS8wNy8xNCAxNToxNDozOSAx LjEwMi4yLjMKLSsrKyBvcGVuc3NsL2FwcHMveDUwOS5jIDIwMDkvMDcvMjcgMjE6MDg6NDYgMS4x MDIuMi40Ci1AQCAtNzM4LDE0ICs3MzgsMTQgQEAKLSAJCQllbHNlIGlmICgoZW1haWwgPT0gaSkg fHwgKG9jc3BfdXJpID09IGkpKQotIAkJCQl7Ci0gCQkJCWludCBqOwotLQkJCQlTVEFDS19PRihT VFJJTkcpICplbWxzdDsKLSsJCQkJU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICplbWxzdDsKLSAJ CQkJaWYgKGVtYWlsID09IGkpCi0gCQkJCQllbWxzdCA9IFg1MDlfZ2V0MV9lbWFpbCh4KTsKLSAJ CQkJZWxzZQotIAkJCQkJZW1sc3QgPSBYNTA5X2dldDFfb2NzcCh4KTsKLS0JCQkJZm9yIChqID0g MDsgaiA8IHNrX1NUUklOR19udW0oZW1sc3QpOyBqKyspCi0rCQkJCWZvciAoaiA9IDA7IGogPCBz a19PUEVOU1NMX1NUUklOR19udW0oZW1sc3QpOyBqKyspCi0gCQkJCQlCSU9fcHJpbnRmKFNURG91 dCwgIiVzXG4iLAotLQkJCQkJCSAgIHNrX1NUUklOR192YWx1ZShlbWxzdCwgaikpOwotKwkJCQkJ CSAgIHNrX09QRU5TU0xfU1RSSU5HX3ZhbHVlKGVtbHN0LCBqKSk7Ci0gCQkJCVg1MDlfZW1haWxf ZnJlZShlbWxzdCk7Ci0gCQkJCX0KLSAJCQllbHNlIGlmIChhbGlhc291dCA9PSBpKQotSW5kZXg6 IG9wZW5zc2wvY3J5cHRvL2NyeXB0bGliLmMKLVJDUyBGaWxlOiAvdi9vcGVuc3NsL2N2cy9vcGVu c3NsL2NyeXB0by9jcnlwdGxpYi5jLHYKLXJjc2RpZmYgLXEgLWtrICctcjEuNzUuMi4yJyAnLXIx Ljc1LjIuMycgLXUgJy92L29wZW5zc2wvY3ZzL29wZW5zc2wvY3J5cHRvL2NyeXB0bGliLmMsdicg Mj4vZGV2L251bGwKLS0tLSBvcGVuc3NsL2NyeXB0by9jcnlwdGxpYi5jIDIwMDkvMDUvMDUgMTk6 MjM6MTQgMS43NS4yLjIKLSsrKyBvcGVuc3NsL2NyeXB0by9jcnlwdGxpYi5jIDIwMDkvMDcvMjcg MjE6MDg6NDggMS43NS4yLjMKLUBAIC0xNzQsNyArMTc0LDcgQEAKLSAKLSAvKiBUaGlzIGlzIGZv ciBhcHBsaWNhdGlvbnMgdG8gYWxsb2NhdGUgbmV3IHR5cGUgbmFtZXMgaW4gdGhlIG5vbi1keW5h bWljCi0gICAgYXJyYXkgb2YgbG9jayBuYW1lcy4gIFRoZXNlIGFyZSBudW1iZXJlZCB3aXRoIHBv c2l0aXZlIG51bWJlcnMuICAqLwotLXN0YXRpYyBTVEFDS19PRihTVFJJTkcpICphcHBfbG9ja3M9 TlVMTDsKLStzdGF0aWMgU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICphcHBfbG9ja3M9TlVMTDsK LSAKLSAvKiBGb3IgYXBwbGljYXRpb25zIHRoYXQgd2FudCBhIG1vcmUgZHluYW1pYyB3YXkgb2Yg aGFuZGxpbmcgdGhyZWFkcywgdGhlCi0gICAgZm9sbG93aW5nIHN0YWNrIGlzIHVzZWQuICBUaGVz ZSBhcmUgZXh0ZXJuYWxseSBudW1iZXJlZCB3aXRoIG5lZ2F0aXZlCi1AQCAtMjEwLDcgKzIxMCw3 IEBACi0gCVNTTGVheV9NU1ZDNV9oYWNrPShkb3VibGUpbmFtZVswXSooZG91YmxlKW5hbWVbMV07 Ci0gI2VuZGlmCi0gCi0tCWlmICgoYXBwX2xvY2tzID09IE5VTEwpICYmICgoYXBwX2xvY2tzPXNr X1NUUklOR19uZXdfbnVsbCgpKSA9PSBOVUxMKSkKLSsJaWYgKChhcHBfbG9ja3MgPT0gTlVMTCkg JiYgKChhcHBfbG9ja3M9c2tfT1BFTlNTTF9TVFJJTkdfbmV3X251bGwoKSkgPT0gTlVMTCkpCi0g CQl7Ci0gCQlDUllQVE9lcnIoQ1JZUFRPX0ZfQ1JZUFRPX0dFVF9ORVdfTE9DS0lELEVSUl9SX01B TExPQ19GQUlMVVJFKTsKLSAJCXJldHVybigwKTsKLUBAIC0yMjAsNyArMjIwLDcgQEAKLSAJCUNS WVBUT2VycihDUllQVE9fRl9DUllQVE9fR0VUX05FV19MT0NLSUQsRVJSX1JfTUFMTE9DX0ZBSUxV UkUpOwotIAkJcmV0dXJuKDApOwotIAkJfQotLQlpPXNrX1NUUklOR19wdXNoKGFwcF9sb2Nrcyxz dHIpOwotKwlpPXNrX09QRU5TU0xfU1RSSU5HX3B1c2goYXBwX2xvY2tzLHN0cik7Ci0gCWlmICgh aSkKLSAJCU9QRU5TU0xfZnJlZShzdHIpOwotIAllbHNlCi1AQCAtNjUxLDEwICs2NTEsMTAgQEAK LSAJCXJldHVybigiZHluYW1pYyIpOwotIAllbHNlIGlmICh0eXBlIDwgQ1JZUFRPX05VTV9MT0NL UykKLSAJCXJldHVybihsb2NrX25hbWVzW3R5cGVdKTsKLS0JZWxzZSBpZiAodHlwZS1DUllQVE9f TlVNX0xPQ0tTID4gc2tfU1RSSU5HX251bShhcHBfbG9ja3MpKQotKwllbHNlIGlmICh0eXBlLUNS WVBUT19OVU1fTE9DS1MgPiBza19PUEVOU1NMX1NUUklOR19udW0oYXBwX2xvY2tzKSkKLSAJCXJl dHVybigiRVJST1IiKTsKLSAJZWxzZQotLQkJcmV0dXJuKHNrX1NUUklOR192YWx1ZShhcHBfbG9j a3MsdHlwZS1DUllQVE9fTlVNX0xPQ0tTKSk7Ci0rCQlyZXR1cm4oc2tfT1BFTlNTTF9TVFJJTkdf dmFsdWUoYXBwX2xvY2tzLHR5cGUtQ1JZUFRPX05VTV9MT0NLUykpOwotIAl9Ci0gCi0gI2lmCWRl ZmluZWQoX19pMzg2KSAgIHx8IGRlZmluZWQoX19pMzg2X18pICAgfHwgZGVmaW5lZChfTV9JWDg2 KSB8fCBcCi1JbmRleDogb3BlbnNzbC9jcnlwdG8vZW5naW5lL2VuZ19keW4uYwotUkNTIEZpbGU6 IC92L29wZW5zc2wvY3ZzL29wZW5zc2wvY3J5cHRvL2VuZ2luZS9lbmdfZHluLmMsdgotcmNzZGlm ZiAtcSAta2sgJy1yMS4xNCcgJy1yMS4xNC4yLjEnIC11ICcvdi9vcGVuc3NsL2N2cy9vcGVuc3Ns L2NyeXB0by9lbmdpbmUvZW5nX2R5bi5jLHYnIDI+L2Rldi9udWxsCi0tLS0gb3BlbnNzbC9jcnlw dG8vZW5naW5lL2VuZ19keW4uYyAyMDA4LzA2LzA0IDExOjAxOjI5IDEuMTQKLSsrKyBvcGVuc3Ns L2NyeXB0by9lbmdpbmUvZW5nX2R5bi5jIDIwMDkvMDcvMjcgMjE6MDg6NDkgMS4xNC4yLjEKLUBA IC0xNDYsNyArMTQ2LDcgQEAKLSAJICogJ2RpcnMnIGZvciBsb2FkaW5nLiBEZWZhdWx0IGlzIHRv IHVzZSAnZGlycycgYXMgYSBmYWxsYmFjay4gKi8KLSAJaW50IGRpcl9sb2FkOwotIAkvKiBBIHN0 YWNrIG9mIGRpcmVjdG9yaWVzIGZyb20gd2hpY2ggRU5HSU5FcyBjb3VsZCBiZSBsb2FkZWQgKi8K LS0JU1RBQ0tfT0YoU1RSSU5HKSAqZGlyczsKLSsJU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpk aXJzOwotIAl9OwotIAotIC8qIFRoaXMgaXMgdGhlICJleF9kYXRhIiBpbmRleCB3ZSBvYnRhaW4g YW5kIHJlc2VydmUgZm9yIHVzZSB3aXRoIG91ciBjb250ZXh0Ci1AQCAtMTc0LDcgKzE3NCw3IEBA Ci0gCQlpZihjdHgtPmVuZ2luZV9pZCkKLSAJCQlPUEVOU1NMX2ZyZWUoKHZvaWQqKWN0eC0+ZW5n aW5lX2lkKTsKLSAJCWlmKGN0eC0+ZGlycykKLS0JCQlza19TVFJJTkdfcG9wX2ZyZWUoY3R4LT5k aXJzLCBpbnRfZnJlZV9zdHIpOwotKwkJCXNrX09QRU5TU0xfU1RSSU5HX3BvcF9mcmVlKGN0eC0+ ZGlycywgaW50X2ZyZWVfc3RyKTsKLSAJCU9QRU5TU0xfZnJlZShjdHgpOwotIAkJfQotIAl9Ci1A QCAtMjAzLDcgKzIwMyw3IEBACi0gCWMtPkRZTkFNSUNfRjEgPSAidl9jaGVjayI7Ci0gCWMtPkRZ TkFNSUNfRjIgPSAiYmluZF9lbmdpbmUiOwotIAljLT5kaXJfbG9hZCA9IDE7Ci0tCWMtPmRpcnMg PSBza19TVFJJTkdfbmV3X251bGwoKTsKLSsJYy0+ZGlycyA9IHNrX09QRU5TU0xfU1RSSU5HX25l d19udWxsKCk7Ci0gCWlmKCFjLT5kaXJzKQotIAkJewotIAkJRU5HSU5FZXJyKEVOR0lORV9GX0RZ TkFNSUNfU0VUX0RBVEFfQ1RYLEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLUBAIC0zOTMsNyArMzkz LDcgQEAKLSAJCQkJRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotIAkJCXJldHVybiAwOwotIAkJCX0K LS0JCXNrX1NUUklOR19pbnNlcnQoY3R4LT5kaXJzLCB0bXBfc3RyLCAtMSk7Ci0rCQlza19PUEVO U1NMX1NUUklOR19pbnNlcnQoY3R4LT5kaXJzLCB0bXBfc3RyLCAtMSk7Ci0gCQl9Ci0gCQlyZXR1 cm4gMTsKLSAJZGVmYXVsdDoKLUBAIC00MTEsMTEgKzQxMSwxMSBAQAotIAkJCQljdHgtPkRZTkFN SUNfTElCTkFNRSwgTlVMTCwgMCkpICE9IE5VTEwpCi0gCQlyZXR1cm4gMTsKLSAJLyogSWYgd2Un cmUgbm90IGFsbG93ZWQgdG8gdXNlICdkaXJzJyBvciB3ZSBoYXZlIG5vbmUsIGZhaWwgKi8KLS0J aWYoIWN0eC0+ZGlyX2xvYWQgfHwgKG51bSA9IHNrX1NUUklOR19udW0oY3R4LT5kaXJzKSkgPCAx KQotKwlpZighY3R4LT5kaXJfbG9hZCB8fCAobnVtID0gc2tfT1BFTlNTTF9TVFJJTkdfbnVtKGN0 eC0+ZGlycykpIDwgMSkKLSAJCXJldHVybiAwOwotIAlmb3IobG9vcCA9IDA7IGxvb3AgPCBudW07 IGxvb3ArKykKLSAJCXsKLS0JCWNvbnN0IGNoYXIgKnMgPSBza19TVFJJTkdfdmFsdWUoY3R4LT5k aXJzLCBsb29wKTsKLSsJCWNvbnN0IGNoYXIgKnMgPSBza19PUEVOU1NMX1NUUklOR192YWx1ZShj dHgtPmRpcnMsIGxvb3ApOwotIAkJY2hhciAqbWVyZ2UgPSBEU09fbWVyZ2UoY3R4LT5keW5hbWlj X2RzbywgY3R4LT5EWU5BTUlDX0xJQk5BTUUsIHMpOwotIAkJaWYoIW1lcmdlKQotIAkJCXJldHVy biAwOwotSW5kZXg6IG9wZW5zc2wvY3J5cHRvL2xoYXNoL2xoYXNoLmgKLVJDUyBGaWxlOiAvdi9v cGVuc3NsL2N2cy9vcGVuc3NsL2NyeXB0by9saGFzaC9saGFzaC5oLHYKLXJjc2RpZmYgLXEgLWtr ICctcjEuMjMnICctcjEuMjMuMi4xJyAtdSAnL3Yvb3BlbnNzbC9jdnMvb3BlbnNzbC9jcnlwdG8v bGhhc2gvbGhhc2guaCx2JyAyPi9kZXYvbnVsbAotLS0tIG9wZW5zc2wvY3J5cHRvL2xoYXNoL2xo YXNoLmggMjAwOC8wNi8wNCAxMTowMTozMSAxLjIzCi0rKysgb3BlbnNzbC9jcnlwdG8vbGhhc2gv bGhhc2guaCAyMDA5LzA3LzI3IDIxOjA4OjUwIDEuMjMuMi4xCi1AQCAtMjMwLDggKzIzMCw4IEBA Ci0gICBsaF9zdGF0c19iaW8oQ0hFQ0tFRF9MSEFTSF9PRih0eXBlLCBsaCksIG91dCkKLSAjZGVm aW5lIExITV9saF9mcmVlKHR5cGUsIGxoKSBsaF9mcmVlKENIRUNLRURfTEhBU0hfT0YodHlwZSwg bGgpKQotIAotLURFQ0xBUkVfTEhBU0hfT0YoU1RSSU5HKTsKLS1ERUNMQVJFX0xIQVNIX09GKENT VFJJTkcpOwotK0RFQ0xBUkVfTEhBU0hfT0YoT1BFTlNTTF9TVFJJTkcpOwotK0RFQ0xBUkVfTEhB U0hfT0YoT1BFTlNTTF9DU1RSSU5HKTsKLSAKLSAjaWZkZWYgIF9fY3BsdXNwbHVzCi0gfQotSW5k ZXg6IG9wZW5zc2wvY3J5cHRvL3N0YWNrL3NhZmVzdGFjay5oCi1SQ1MgRmlsZTogL3Yvb3BlbnNz bC9jdnMvb3BlbnNzbC9jcnlwdG8vc3RhY2svc2FmZXN0YWNrLmgsdgotcmNzZGlmZiAtcSAta2sg Jy1yMS43Mi4yLjMnICctcjEuNzIuMi40JyAtdSAnL3Yvb3BlbnNzbC9jdnMvb3BlbnNzbC9jcnlw dG8vc3RhY2svc2FmZXN0YWNrLmgsdicgMj4vZGV2L251bGwKLS0tLSBvcGVuc3NsL2NyeXB0by9z dGFjay9zYWZlc3RhY2suaCAyMDA5LzA0LzI4IDIxOjU2OjA0IDEuNzIuMi4zCi0rKysgb3BlbnNz bC9jcnlwdG8vc3RhY2svc2FmZXN0YWNrLmggMjAwOS8wNy8yNyAyMTowODo1MCAxLjcyLjIuNAot QEAgLTExMCw5ICsxMTAsOSBAQAotICAqIHN0cmluZy4gRm9yIG5vdywgSSdtIHNldHRsaW5nIGZv ciBkZWFsaW5nIHdpdGggdGhlIGZhY3QgaXQgaXMgYQotICAqIHN0cmluZyBhdCBhbGwuCi0gICov Ci0tdHlwZWRlZiBjaGFyICpTVFJJTkc7Ci0rdHlwZWRlZiBjaGFyICpPUEVOU1NMX1NUUklORzsK LSAKLS10eXBlZGVmIGNvbnN0IGNoYXIgKkNTVFJJTkc7Ci0rdHlwZWRlZiBjb25zdCBjaGFyICpP UEVOU1NMX0NTVFJJTkc7Ci0gCi0gLyogQ29uZnVzaW5nbHksIExIQVNIX09GKFNUUklORykgZGVh bHMgd2l0aCBjaGFyICoqIHRocm91Z2hvdXQsIGJ1dAotICAqIFNUQUNLX09GKFNUUklORykgaXMg cmVhbGx5IG1vcmUgbGlrZSBTVEFDS19PRihjaGFyKSwgb25seSwgYXMKLUBAIC0xMjIsNyArMTIy LDcgQEAKLSAgKiBtYWNyb3MgYmVsb3cuCi0gICovCi0gCi0tREVDTEFSRV9TUEVDSUFMX1NUQUNL X09GKFNUUklORywgY2hhcikKLStERUNMQVJFX1NQRUNJQUxfU1RBQ0tfT0YoT1BFTlNTTF9TVFJJ TkcsIGNoYXIpCi0gCi0gLyogU2ltaWxhcmx5LCB3ZSBzb21ldGltZXMgdXNlIGEgYmxvY2sgb2Yg Y2hhcmFjdGVycywgTk9UCi0gICogbnVsLXRlcm1pbmF0ZWQuIFRoZXNlIHNob3VsZCBhbHNvIGJl IGRpc3Rpbmd1aXNoZWQgZnJvbSAibm9ybWFsIgotQEAgLTIwMzAsMjkgKzIwMzAsMjkgQEAKLSAj ZGVmaW5lIHNrX3ZvaWRfc29ydChzdCkgU0tNX3NrX3NvcnQodm9pZCwgKHN0KSkKLSAjZGVmaW5l IHNrX3ZvaWRfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKHZvaWQsIChzdCkpCi0gCi0t I2RlZmluZSBza19TVFJJTkdfbmV3KGNtcCkgKChTVEFDS19PRihTVFJJTkcpICopc2tfbmV3KENI RUNLRURfU0tfQ01QX0ZVTkMoY2hhciwgY21wKSkpCi0tI2RlZmluZSBza19TVFJJTkdfbmV3X251 bGwoKSAoKFNUQUNLX09GKFNUUklORykgKilza19uZXdfbnVsbCgpKQotLSNkZWZpbmUgc2tfU1RS SU5HX3B1c2goc3QsIHZhbCkgc2tfcHVzaChDSEVDS0VEX1BUUl9PRihTVEFDS19PRihTVFJJTkcp LCBzdCksIENIRUNLRURfUFRSX09GKGNoYXIsIHZhbCkpCi0tI2RlZmluZSBza19TVFJJTkdfZmlu ZChzdCwgdmFsKSBza19maW5kKENIRUNLRURfUFRSX09GKFNUQUNLX09GKFNUUklORyksIHN0KSwg Q0hFQ0tFRF9QVFJfT0YoY2hhciwgdmFsKSkKLS0jZGVmaW5lIHNrX1NUUklOR192YWx1ZShzdCwg aSkgKChTVFJJTkcpc2tfdmFsdWUoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoU1RSSU5HKSwgc3Qp LCBpKSkKLS0jZGVmaW5lIHNrX1NUUklOR19udW0oc3QpIFNLTV9za19udW0oU1RSSU5HLCBzdCkK LS0jZGVmaW5lIHNrX1NUUklOR19wb3BfZnJlZShzdCwgZnJlZV9mdW5jKSBza19wb3BfZnJlZShD SEVDS0VEX1BUUl9PRihTVEFDS19PRihTVFJJTkcpLCBzdCksIENIRUNLRURfU0tfRlJFRV9GVU5D MihTVFJJTkcsIGZyZWVfZnVuYykpCi0tI2RlZmluZSBza19TVFJJTkdfaW5zZXJ0KHN0LCB2YWws IGkpIHNrX2luc2VydChDSEVDS0VEX1BUUl9PRihTVEFDS19PRihTVFJJTkcpLCBzdCksIENIRUNL RURfUFRSX09GKGNoYXIsIHZhbCksIGkpCi0tI2RlZmluZSBza19TVFJJTkdfZnJlZShzdCkgU0tN X3NrX2ZyZWUoU1RSSU5HLCBzdCkKLS0jZGVmaW5lIHNrX1NUUklOR19zZXQoc3QsIGksIHZhbCkg c2tfc2V0KChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihTVFJJTkcpLCBzdCksIGks IENIRUNLRURfUFRSX09GKGNoYXIsIHZhbCkpCi0tI2RlZmluZSBza19TVFJJTkdfemVybyhzdCkg U0tNX3NrX3plcm8oU1RSSU5HLCAoc3QpKQotLSNkZWZpbmUgc2tfU1RSSU5HX3Vuc2hpZnQoc3Qs IHZhbCkgc2tfdW5zaGlmdCgoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoU1RSSU5H KSwgc3QpLCBDSEVDS0VEX1BUUl9PRihjaGFyLCB2YWwpKQotLSNkZWZpbmUgc2tfU1RSSU5HX2Zp bmRfZXgoc3QsIHZhbCkgc2tfZmluZF9leCgoX1NUQUNLICopQ0hFQ0tFRF9DT05TVF9QVFJfT0Yo U1RBQ0tfT0YoU1RSSU5HKSwgc3QpLCBDSEVDS0VEX0NPTlNUX1BUUl9PRihjaGFyLCB2YWwpKQot LSNkZWZpbmUgc2tfU1RSSU5HX2RlbGV0ZShzdCwgaSkgU0tNX3NrX2RlbGV0ZShTVFJJTkcsIChz dCksIChpKSkKLS0jZGVmaW5lIHNrX1NUUklOR19kZWxldGVfcHRyKHN0LCBwdHIpIChTVFJJTkcg Kilza19kZWxldGVfcHRyKChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihTVFJJTkcp LCBzdCksIENIRUNLRURfUFRSX09GKGNoYXIsIHB0cikpCi0tI2RlZmluZSBza19TVFJJTkdfc2V0 X2NtcF9mdW5jKHN0LCBjbXApICBcCi0rI2RlZmluZSBza19PUEVOU1NMX1NUUklOR19uZXcoY21w KSAoKFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqKXNrX25ldyhDSEVDS0VEX1NLX0NNUF9GVU5D KGNoYXIsIGNtcCkpKQotKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfbmV3X251bGwoKSAoKFNU QUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqKXNrX25ld19udWxsKCkpCi0rI2RlZmluZSBza19PUEVO U1NMX1NUUklOR19wdXNoKHN0LCB2YWwpIHNrX3B1c2goQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0Yo T1BFTlNTTF9TVFJJTkcpLCBzdCksIENIRUNLRURfUFRSX09GKGNoYXIsIHZhbCkpCi0rI2RlZmlu ZSBza19PUEVOU1NMX1NUUklOR19maW5kKHN0LCB2YWwpIHNrX2ZpbmQoQ0hFQ0tFRF9QVFJfT0Yo U1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpLCBzdCksIENIRUNLRURfUFRSX09GKGNoYXIsIHZhbCkp Ci0rI2RlZmluZSBza19PUEVOU1NMX1NUUklOR192YWx1ZShzdCwgaSkgKChPUEVOU1NMX1NUUklO Rylza192YWx1ZShDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX1NUUklORyksIHN0KSwg aSkpCi0rI2RlZmluZSBza19PUEVOU1NMX1NUUklOR19udW0oc3QpIFNLTV9za19udW0oT1BFTlNT TF9TVFJJTkcsIHN0KQotKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfcG9wX2ZyZWUoc3QsIGZy ZWVfZnVuYykgc2tfcG9wX2ZyZWUoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJ TkcpLCBzdCksIENIRUNLRURfU0tfRlJFRV9GVU5DMihPUEVOU1NMX1NUUklORywgZnJlZV9mdW5j KSkKLSsjZGVmaW5lIHNrX09QRU5TU0xfU1RSSU5HX2luc2VydChzdCwgdmFsLCBpKSBza19pbnNl cnQoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpLCBzdCksIENIRUNLRURf UFRSX09GKGNoYXIsIHZhbCksIGkpCi0rI2RlZmluZSBza19PUEVOU1NMX1NUUklOR19mcmVlKHN0 KSBTS01fc2tfZnJlZShPUEVOU1NMX1NUUklORywgc3QpCi0rI2RlZmluZSBza19PUEVOU1NMX1NU UklOR19zZXQoc3QsIGksIHZhbCkgc2tfc2V0KChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFD S19PRihPUEVOU1NMX1NUUklORyksIHN0KSwgaSwgQ0hFQ0tFRF9QVFJfT0YoY2hhciwgdmFsKSkK LSsjZGVmaW5lIHNrX09QRU5TU0xfU1RSSU5HX3plcm8oc3QpIFNLTV9za196ZXJvKE9QRU5TU0xf U1RSSU5HLCAoc3QpKQotKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfdW5zaGlmdChzdCwgdmFs KSBza191bnNoaWZ0KChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX1NU UklORyksIHN0KSwgQ0hFQ0tFRF9QVFJfT0YoY2hhciwgdmFsKSkKLSsjZGVmaW5lIHNrX09QRU5T U0xfU1RSSU5HX2ZpbmRfZXgoc3QsIHZhbCkgc2tfZmluZF9leCgoX1NUQUNLICopQ0hFQ0tFRF9D T05TVF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpLCBzdCksIENIRUNLRURfQ09OU1Rf UFRSX09GKGNoYXIsIHZhbCkpCi0rI2RlZmluZSBza19PUEVOU1NMX1NUUklOR19kZWxldGUoc3Qs IGkpIFNLTV9za19kZWxldGUoT1BFTlNTTF9TVFJJTkcsIChzdCksIChpKSkKLSsjZGVmaW5lIHNr X09QRU5TU0xfU1RSSU5HX2RlbGV0ZV9wdHIoc3QsIHB0cikgKE9QRU5TU0xfU1RSSU5HICopc2tf ZGVsZXRlX3B0cigoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJ TkcpLCBzdCksIENIRUNLRURfUFRSX09GKGNoYXIsIHB0cikpCi0rI2RlZmluZSBza19PUEVOU1NM X1NUUklOR19zZXRfY21wX2Z1bmMoc3QsIGNtcCkgIFwKLSAJKChpbnQgKCopKGNvbnN0IGNoYXIg KiBjb25zdCAqLGNvbnN0IGNoYXIgKiBjb25zdCAqKSkgXAotLQlza19zZXRfY21wX2Z1bmMoKF9T VEFDSyAqKUNIRUNLRURfUFRSX09GKFNUQUNLX09GKFNUUklORyksIHN0KSwgQ0hFQ0tFRF9TS19D TVBfRlVOQyhjaGFyLCBjbXApKSkKLS0jZGVmaW5lIHNrX1NUUklOR19kdXAoc3QpIFNLTV9za19k dXAoU1RSSU5HLCBzdCkKLS0jZGVmaW5lIHNrX1NUUklOR19zaGlmdChzdCkgU0tNX3NrX3NoaWZ0 KFNUUklORywgKHN0KSkKLS0jZGVmaW5lIHNrX1NUUklOR19wb3Aoc3QpIChjaGFyICopc2tfcG9w KChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihTVFJJTkcpLCBzdCkpCi0tI2RlZmlu ZSBza19TVFJJTkdfc29ydChzdCkgU0tNX3NrX3NvcnQoU1RSSU5HLCAoc3QpKQotLSNkZWZpbmUg c2tfU1RSSU5HX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChTVFJJTkcsIChzdCkpCi0r CXNrX3NldF9jbXBfZnVuYygoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNT TF9TVFJJTkcpLCBzdCksIENIRUNLRURfU0tfQ01QX0ZVTkMoY2hhciwgY21wKSkpCi0rI2RlZmlu ZSBza19PUEVOU1NMX1NUUklOR19kdXAoc3QpIFNLTV9za19kdXAoT1BFTlNTTF9TVFJJTkcsIHN0 KQotKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfc2hpZnQoc3QpIFNLTV9za19zaGlmdChPUEVO U1NMX1NUUklORywgKHN0KSkKLSsjZGVmaW5lIHNrX09QRU5TU0xfU1RSSU5HX3BvcChzdCkgKGNo YXIgKilza19wb3AoKF9TVEFDSyAqKUNIRUNLRURfUFRSX09GKFNUQUNLX09GKE9QRU5TU0xfU1RS SU5HKSwgc3QpKQotKyNkZWZpbmUgc2tfT1BFTlNTTF9TVFJJTkdfc29ydChzdCkgU0tNX3NrX3Nv cnQoT1BFTlNTTF9TVFJJTkcsIChzdCkpCi0rI2RlZmluZSBza19PUEVOU1NMX1NUUklOR19pc19z b3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoT1BFTlNTTF9TVFJJTkcsIChzdCkpCi0gCi0gCi0g I2RlZmluZSBza19CTE9DS19uZXcoY21wKSAoKFNUQUNLX09GKEJMT0NLKSAqKXNrX25ldyhDSEVD S0VEX1NLX0NNUF9GVU5DKHZvaWQsIGNtcCkpKQotQEAgLTIwODAsMjkgKzIwODAsMjkgQEAKLSAj ZGVmaW5lIHNrX0JMT0NLX2lzX3NvcnRlZChzdCkgU0tNX3NrX2lzX3NvcnRlZChCTE9DSywgKHN0 KSkKLSAKLSAKLS0jZGVmaW5lIHNrX1BTVFJJTkdfbmV3KGNtcCkgKChTVEFDS19PRihQU1RSSU5H KSAqKXNrX25ldyhDSEVDS0VEX1NLX0NNUF9GVU5DKFNUUklORywgY21wKSkpCi0tI2RlZmluZSBz a19QU1RSSU5HX25ld19udWxsKCkgKChTVEFDS19PRihQU1RSSU5HKSAqKXNrX25ld19udWxsKCkp Ci0tI2RlZmluZSBza19QU1RSSU5HX3B1c2goc3QsIHZhbCkgc2tfcHVzaChDSEVDS0VEX1BUUl9P RihTVEFDS19PRihQU1RSSU5HKSwgc3QpLCBDSEVDS0VEX1BUUl9PRihTVFJJTkcsIHZhbCkpCi0t I2RlZmluZSBza19QU1RSSU5HX2ZpbmQoc3QsIHZhbCkgc2tfZmluZChDSEVDS0VEX1BUUl9PRihT VEFDS19PRihQU1RSSU5HKSwgc3QpLCBDSEVDS0VEX1BUUl9PRihTVFJJTkcsIHZhbCkpCi0tI2Rl ZmluZSBza19QU1RSSU5HX3ZhbHVlKHN0LCBpKSAoKFBTVFJJTkcpc2tfdmFsdWUoQ0hFQ0tFRF9Q VFJfT0YoU1RBQ0tfT0YoUFNUUklORyksIHN0KSwgaSkpCi0tI2RlZmluZSBza19QU1RSSU5HX251 bShzdCkgU0tNX3NrX251bShQU1RSSU5HLCBzdCkKLS0jZGVmaW5lIHNrX1BTVFJJTkdfcG9wX2Zy ZWUoc3QsIGZyZWVfZnVuYykgc2tfcG9wX2ZyZWUoQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoUFNU UklORyksIHN0KSwgQ0hFQ0tFRF9TS19GUkVFX0ZVTkMyKFBTVFJJTkcsIGZyZWVfZnVuYykpCi0t I2RlZmluZSBza19QU1RSSU5HX2luc2VydChzdCwgdmFsLCBpKSBza19pbnNlcnQoQ0hFQ0tFRF9Q VFJfT0YoU1RBQ0tfT0YoUFNUUklORyksIHN0KSwgQ0hFQ0tFRF9QVFJfT0YoU1RSSU5HLCB2YWwp LCBpKQotLSNkZWZpbmUgc2tfUFNUUklOR19mcmVlKHN0KSBTS01fc2tfZnJlZShQU1RSSU5HLCBz dCkKLS0jZGVmaW5lIHNrX1BTVFJJTkdfc2V0KHN0LCBpLCB2YWwpIHNrX3NldCgoX1NUQUNLICop Q0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoUFNUUklORyksIHN0KSwgaSwgQ0hFQ0tFRF9QVFJfT0Yo U1RSSU5HLCB2YWwpKQotLSNkZWZpbmUgc2tfUFNUUklOR196ZXJvKHN0KSBTS01fc2tfemVybyhQ U1RSSU5HLCAoc3QpKQotLSNkZWZpbmUgc2tfUFNUUklOR191bnNoaWZ0KHN0LCB2YWwpIHNrX3Vu c2hpZnQoKF9TVEFDSyAqKUNIRUNLRURfUFRSX09GKFNUQUNLX09GKFBTVFJJTkcpLCBzdCksIENI RUNLRURfUFRSX09GKFNUUklORywgdmFsKSkKLS0jZGVmaW5lIHNrX1BTVFJJTkdfZmluZF9leChz dCwgdmFsKSBza19maW5kX2V4KChfU1RBQ0sgKilDSEVDS0VEX0NPTlNUX1BUUl9PRihTVEFDS19P RihQU1RSSU5HKSwgc3QpLCBDSEVDS0VEX0NPTlNUX1BUUl9PRihTVFJJTkcsIHZhbCkpCi0tI2Rl ZmluZSBza19QU1RSSU5HX2RlbGV0ZShzdCwgaSkgU0tNX3NrX2RlbGV0ZShQU1RSSU5HLCAoc3Qp LCAoaSkpCi0tI2RlZmluZSBza19QU1RSSU5HX2RlbGV0ZV9wdHIoc3QsIHB0cikgKFBTVFJJTkcg Kilza19kZWxldGVfcHRyKChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihQU1RSSU5H KSwgc3QpLCBDSEVDS0VEX1BUUl9PRihTVFJJTkcsIHB0cikpCi0tI2RlZmluZSBza19QU1RSSU5H X3NldF9jbXBfZnVuYyhzdCwgY21wKSAgXAotLQkoKGludCAoKikoY29uc3QgU1RSSU5HICogY29u c3QgKixjb25zdCBTVFJJTkcgKiBjb25zdCAqKSkgXAotLQlza19zZXRfY21wX2Z1bmMoKF9TVEFD SyAqKUNIRUNLRURfUFRSX09GKFNUQUNLX09GKFBTVFJJTkcpLCBzdCksIENIRUNLRURfU0tfQ01Q X0ZVTkMoU1RSSU5HLCBjbXApKSkKLS0jZGVmaW5lIHNrX1BTVFJJTkdfZHVwKHN0KSBTS01fc2tf ZHVwKFBTVFJJTkcsIHN0KQotLSNkZWZpbmUgc2tfUFNUUklOR19zaGlmdChzdCkgU0tNX3NrX3No aWZ0KFBTVFJJTkcsIChzdCkpCi0tI2RlZmluZSBza19QU1RSSU5HX3BvcChzdCkgKFNUUklORyAq KXNrX3BvcCgoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoUFNUUklORyksIHN0KSkK LS0jZGVmaW5lIHNrX1BTVFJJTkdfc29ydChzdCkgU0tNX3NrX3NvcnQoUFNUUklORywgKHN0KSkK LS0jZGVmaW5lIHNrX1BTVFJJTkdfaXNfc29ydGVkKHN0KSBTS01fc2tfaXNfc29ydGVkKFBTVFJJ TkcsIChzdCkpCi0rI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfbmV3KGNtcCkgKChTVEFDS19P RihPUEVOU1NMX1BTVFJJTkcpICopc2tfbmV3KENIRUNLRURfU0tfQ01QX0ZVTkMoT1BFTlNTTF9T VFJJTkcsIGNtcCkpKQotKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX25ld19udWxsKCkgKChT VEFDS19PRihPUEVOU1NMX1BTVFJJTkcpICopc2tfbmV3X251bGwoKSkKLSsjZGVmaW5lIHNrX09Q RU5TU0xfUFNUUklOR19wdXNoKHN0LCB2YWwpIHNrX3B1c2goQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tf T0YoT1BFTlNTTF9QU1RSSU5HKSwgc3QpLCBDSEVDS0VEX1BUUl9PRihPUEVOU1NMX1NUUklORywg dmFsKSkKLSsjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19maW5kKHN0LCB2YWwpIHNrX2ZpbmQo Q0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HKSwgc3QpLCBDSEVDS0VEX1BU Ul9PRihPUEVOU1NMX1NUUklORywgdmFsKSkKLSsjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR192 YWx1ZShzdCwgaSkgKChPUEVOU1NMX1BTVFJJTkcpc2tfdmFsdWUoQ0hFQ0tFRF9QVFJfT0YoU1RB Q0tfT0YoT1BFTlNTTF9QU1RSSU5HKSwgc3QpLCBpKSkKLSsjZGVmaW5lIHNrX09QRU5TU0xfUFNU UklOR19udW0oc3QpIFNLTV9za19udW0oT1BFTlNTTF9QU1RSSU5HLCBzdCkKLSsjZGVmaW5lIHNr X09QRU5TU0xfUFNUUklOR19wb3BfZnJlZShzdCwgZnJlZV9mdW5jKSBza19wb3BfZnJlZShDSEVD S0VEX1BUUl9PRihTVEFDS19PRihPUEVOU1NMX1BTVFJJTkcpLCBzdCksIENIRUNLRURfU0tfRlJF RV9GVU5DMihPUEVOU1NMX1BTVFJJTkcsIGZyZWVfZnVuYykpCi0rI2RlZmluZSBza19PUEVOU1NM X1BTVFJJTkdfaW5zZXJ0KHN0LCB2YWwsIGkpIHNrX2luc2VydChDSEVDS0VEX1BUUl9PRihTVEFD S19PRihPUEVOU1NMX1BTVFJJTkcpLCBzdCksIENIRUNLRURfUFRSX09GKE9QRU5TU0xfU1RSSU5H LCB2YWwpLCBpKQotKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX2ZyZWUoc3QpIFNLTV9za19m cmVlKE9QRU5TU0xfUFNUUklORywgc3QpCi0rI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfc2V0 KHN0LCBpLCB2YWwpIHNrX3NldCgoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BF TlNTTF9QU1RSSU5HKSwgc3QpLCBpLCBDSEVDS0VEX1BUUl9PRihPUEVOU1NMX1NUUklORywgdmFs KSkKLSsjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR196ZXJvKHN0KSBTS01fc2tfemVybyhPUEVO U1NMX1BTVFJJTkcsIChzdCkpCi0rI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfdW5zaGlmdChz dCwgdmFsKSBza191bnNoaWZ0KChfU1RBQ0sgKilDSEVDS0VEX1BUUl9PRihTVEFDS19PRihPUEVO U1NMX1BTVFJJTkcpLCBzdCksIENIRUNLRURfUFRSX09GKE9QRU5TU0xfU1RSSU5HLCB2YWwpKQot KyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX2ZpbmRfZXgoc3QsIHZhbCkgc2tfZmluZF9leCgo X1NUQUNLICopQ0hFQ0tFRF9DT05TVF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HKSwg c3QpLCBDSEVDS0VEX0NPTlNUX1BUUl9PRihPUEVOU1NMX1NUUklORywgdmFsKSkKLSsjZGVmaW5l IHNrX09QRU5TU0xfUFNUUklOR19kZWxldGUoc3QsIGkpIFNLTV9za19kZWxldGUoT1BFTlNTTF9Q U1RSSU5HLCAoc3QpLCAoaSkpCi0rI2RlZmluZSBza19PUEVOU1NMX1BTVFJJTkdfZGVsZXRlX3B0 cihzdCwgcHRyKSAoT1BFTlNTTF9QU1RSSU5HICopc2tfZGVsZXRlX3B0cigoX1NUQUNLICopQ0hF Q0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HKSwgc3QpLCBDSEVDS0VEX1BUUl9P RihPUEVOU1NMX1NUUklORywgcHRyKSkKLSsjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19zZXRf Y21wX2Z1bmMoc3QsIGNtcCkgIFwKLSsJKChpbnQgKCopKGNvbnN0IE9QRU5TU0xfU1RSSU5HICog Y29uc3QgKixjb25zdCBPUEVOU1NMX1NUUklORyAqIGNvbnN0ICopKSBcCi0rCXNrX3NldF9jbXBf ZnVuYygoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tfT0YoT1BFTlNTTF9QU1RSSU5HKSwg c3QpLCBDSEVDS0VEX1NLX0NNUF9GVU5DKE9QRU5TU0xfU1RSSU5HLCBjbXApKSkKLSsjZGVmaW5l IHNrX09QRU5TU0xfUFNUUklOR19kdXAoc3QpIFNLTV9za19kdXAoT1BFTlNTTF9QU1RSSU5HLCBz dCkKLSsjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19zaGlmdChzdCkgU0tNX3NrX3NoaWZ0KE9Q RU5TU0xfUFNUUklORywgKHN0KSkKLSsjZGVmaW5lIHNrX09QRU5TU0xfUFNUUklOR19wb3Aoc3Qp IChPUEVOU1NMX1NUUklORyAqKXNrX3BvcCgoX1NUQUNLICopQ0hFQ0tFRF9QVFJfT0YoU1RBQ0tf T0YoT1BFTlNTTF9QU1RSSU5HKSwgc3QpKQotKyNkZWZpbmUgc2tfT1BFTlNTTF9QU1RSSU5HX3Nv cnQoc3QpIFNLTV9za19zb3J0KE9QRU5TU0xfUFNUUklORywgKHN0KSkKLSsjZGVmaW5lIHNrX09Q RU5TU0xfUFNUUklOR19pc19zb3J0ZWQoc3QpIFNLTV9za19pc19zb3J0ZWQoT1BFTlNTTF9QU1RS SU5HLCAoc3QpKQotIAotIAotICNkZWZpbmUgZDJpX0FTTjFfU0VUX09GX0FDQ0VTU19ERVNDUklQ VElPTihzdCwgcHAsIGxlbmd0aCwgZDJpX2Z1bmMsIGZyZWVfZnVuYywgZXhfdGFnLCBleF9jbGFz cykgXAotQEAgLTIzOTAsMjQgKzIzOTAsNiBAQAotICAgTEhNX2xoX3N0YXRzX2JpbyhDT05GX1ZB TFVFLGxoLG91dCkKLSAjZGVmaW5lIGxoX0NPTkZfVkFMVUVfZnJlZShsaCkgTEhNX2xoX2ZyZWUo Q09ORl9WQUxVRSxsaCkKLSAKLS0jZGVmaW5lIGxoX0NTVFJJTkdfbmV3KCkgTEhNX2xoX25ldyhD U1RSSU5HLGNzdHJpbmcpCi0tI2RlZmluZSBsaF9DU1RSSU5HX2luc2VydChsaCxpbnN0KSBMSE1f bGhfaW5zZXJ0KENTVFJJTkcsbGgsaW5zdCkKLS0jZGVmaW5lIGxoX0NTVFJJTkdfcmV0cmlldmUo bGgsaW5zdCkgTEhNX2xoX3JldHJpZXZlKENTVFJJTkcsbGgsaW5zdCkKLS0jZGVmaW5lIGxoX0NT VFJJTkdfZGVsZXRlKGxoLGluc3QpIExITV9saF9kZWxldGUoQ1NUUklORyxsaCxpbnN0KQotLSNk ZWZpbmUgbGhfQ1NUUklOR19kb2FsbChsaCxmbikgTEhNX2xoX2RvYWxsKENTVFJJTkcsbGgsZm4p Ci0tI2RlZmluZSBsaF9DU1RSSU5HX2RvYWxsX2FyZyhsaCxmbixhcmdfdHlwZSxhcmcpIFwKLS0g IExITV9saF9kb2FsbF9hcmcoQ1NUUklORyxsaCxmbixhcmdfdHlwZSxhcmcpCi0tI2RlZmluZSBs aF9DU1RSSU5HX2Vycm9yKGxoKSBMSE1fbGhfZXJyb3IoQ1NUUklORyxsaCkKLS0jZGVmaW5lIGxo X0NTVFJJTkdfbnVtX2l0ZW1zKGxoKSBMSE1fbGhfbnVtX2l0ZW1zKENTVFJJTkcsbGgpCi0tI2Rl ZmluZSBsaF9DU1RSSU5HX2Rvd25fbG9hZChsaCkgTEhNX2xoX2Rvd25fbG9hZChDU1RSSU5HLGxo KQotLSNkZWZpbmUgbGhfQ1NUUklOR19ub2RlX3N0YXRzX2JpbyhsaCxvdXQpIFwKLS0gIExITV9s aF9ub2RlX3N0YXRzX2JpbyhDU1RSSU5HLGxoLG91dCkKLS0jZGVmaW5lIGxoX0NTVFJJTkdfbm9k ZV91c2FnZV9zdGF0c19iaW8obGgsb3V0KSBcCi0tICBMSE1fbGhfbm9kZV91c2FnZV9zdGF0c19i aW8oQ1NUUklORyxsaCxvdXQpCi0tI2RlZmluZSBsaF9DU1RSSU5HX3N0YXRzX2JpbyhsaCxvdXQp IFwKLS0gIExITV9saF9zdGF0c19iaW8oQ1NUUklORyxsaCxvdXQpCi0tI2RlZmluZSBsaF9DU1RS SU5HX2ZyZWUobGgpIExITV9saF9mcmVlKENTVFJJTkcsbGgpCi0tCi0gI2RlZmluZSBsaF9FTkdJ TkVfUElMRV9uZXcoKSBMSE1fbGhfbmV3KEVOR0lORV9QSUxFLGVuZ2luZV9waWxlKQotICNkZWZp bmUgbGhfRU5HSU5FX1BJTEVfaW5zZXJ0KGxoLGluc3QpIExITV9saF9pbnNlcnQoRU5HSU5FX1BJ TEUsbGgsaW5zdCkKLSAjZGVmaW5lIGxoX0VOR0lORV9QSUxFX3JldHJpZXZlKGxoLGluc3QpIExI TV9saF9yZXRyaWV2ZShFTkdJTkVfUElMRSxsaCxpbnN0KQotQEAgLTI1MzQsNiArMjUxNiw0MiBA QAotICAgTEhNX2xoX3N0YXRzX2JpbyhPQkpfTkFNRSxsaCxvdXQpCi0gI2RlZmluZSBsaF9PQkpf TkFNRV9mcmVlKGxoKSBMSE1fbGhfZnJlZShPQkpfTkFNRSxsaCkKLSAKLSsjZGVmaW5lIGxoX09Q RU5TU0xfQ1NUUklOR19uZXcoKSBMSE1fbGhfbmV3KE9QRU5TU0xfQ1NUUklORyxvcGVuc3NsX2Nz dHJpbmcpCi0rI2RlZmluZSBsaF9PUEVOU1NMX0NTVFJJTkdfaW5zZXJ0KGxoLGluc3QpIExITV9s aF9pbnNlcnQoT1BFTlNTTF9DU1RSSU5HLGxoLGluc3QpCi0rI2RlZmluZSBsaF9PUEVOU1NMX0NT VFJJTkdfcmV0cmlldmUobGgsaW5zdCkgTEhNX2xoX3JldHJpZXZlKE9QRU5TU0xfQ1NUUklORyxs aCxpbnN0KQotKyNkZWZpbmUgbGhfT1BFTlNTTF9DU1RSSU5HX2RlbGV0ZShsaCxpbnN0KSBMSE1f bGhfZGVsZXRlKE9QRU5TU0xfQ1NUUklORyxsaCxpbnN0KQotKyNkZWZpbmUgbGhfT1BFTlNTTF9D U1RSSU5HX2RvYWxsKGxoLGZuKSBMSE1fbGhfZG9hbGwoT1BFTlNTTF9DU1RSSU5HLGxoLGZuKQot KyNkZWZpbmUgbGhfT1BFTlNTTF9DU1RSSU5HX2RvYWxsX2FyZyhsaCxmbixhcmdfdHlwZSxhcmcp IFwKLSsgIExITV9saF9kb2FsbF9hcmcoT1BFTlNTTF9DU1RSSU5HLGxoLGZuLGFyZ190eXBlLGFy ZykKLSsjZGVmaW5lIGxoX09QRU5TU0xfQ1NUUklOR19lcnJvcihsaCkgTEhNX2xoX2Vycm9yKE9Q RU5TU0xfQ1NUUklORyxsaCkKLSsjZGVmaW5lIGxoX09QRU5TU0xfQ1NUUklOR19udW1faXRlbXMo bGgpIExITV9saF9udW1faXRlbXMoT1BFTlNTTF9DU1RSSU5HLGxoKQotKyNkZWZpbmUgbGhfT1BF TlNTTF9DU1RSSU5HX2Rvd25fbG9hZChsaCkgTEhNX2xoX2Rvd25fbG9hZChPUEVOU1NMX0NTVFJJ TkcsbGgpCi0rI2RlZmluZSBsaF9PUEVOU1NMX0NTVFJJTkdfbm9kZV9zdGF0c19iaW8obGgsb3V0 KSBcCi0rICBMSE1fbGhfbm9kZV9zdGF0c19iaW8oT1BFTlNTTF9DU1RSSU5HLGxoLG91dCkKLSsj ZGVmaW5lIGxoX09QRU5TU0xfQ1NUUklOR19ub2RlX3VzYWdlX3N0YXRzX2JpbyhsaCxvdXQpIFwK LSsgIExITV9saF9ub2RlX3VzYWdlX3N0YXRzX2JpbyhPUEVOU1NMX0NTVFJJTkcsbGgsb3V0KQot KyNkZWZpbmUgbGhfT1BFTlNTTF9DU1RSSU5HX3N0YXRzX2JpbyhsaCxvdXQpIFwKLSsgIExITV9s aF9zdGF0c19iaW8oT1BFTlNTTF9DU1RSSU5HLGxoLG91dCkKLSsjZGVmaW5lIGxoX09QRU5TU0xf Q1NUUklOR19mcmVlKGxoKSBMSE1fbGhfZnJlZShPUEVOU1NMX0NTVFJJTkcsbGgpCi0rCi0rI2Rl ZmluZSBsaF9PUEVOU1NMX1NUUklOR19uZXcoKSBMSE1fbGhfbmV3KE9QRU5TU0xfU1RSSU5HLG9w ZW5zc2xfc3RyaW5nKQotKyNkZWZpbmUgbGhfT1BFTlNTTF9TVFJJTkdfaW5zZXJ0KGxoLGluc3Qp IExITV9saF9pbnNlcnQoT1BFTlNTTF9TVFJJTkcsbGgsaW5zdCkKLSsjZGVmaW5lIGxoX09QRU5T U0xfU1RSSU5HX3JldHJpZXZlKGxoLGluc3QpIExITV9saF9yZXRyaWV2ZShPUEVOU1NMX1NUUklO RyxsaCxpbnN0KQotKyNkZWZpbmUgbGhfT1BFTlNTTF9TVFJJTkdfZGVsZXRlKGxoLGluc3QpIExI TV9saF9kZWxldGUoT1BFTlNTTF9TVFJJTkcsbGgsaW5zdCkKLSsjZGVmaW5lIGxoX09QRU5TU0xf U1RSSU5HX2RvYWxsKGxoLGZuKSBMSE1fbGhfZG9hbGwoT1BFTlNTTF9TVFJJTkcsbGgsZm4pCi0r I2RlZmluZSBsaF9PUEVOU1NMX1NUUklOR19kb2FsbF9hcmcobGgsZm4sYXJnX3R5cGUsYXJnKSBc Ci0rICBMSE1fbGhfZG9hbGxfYXJnKE9QRU5TU0xfU1RSSU5HLGxoLGZuLGFyZ190eXBlLGFyZykK LSsjZGVmaW5lIGxoX09QRU5TU0xfU1RSSU5HX2Vycm9yKGxoKSBMSE1fbGhfZXJyb3IoT1BFTlNT TF9TVFJJTkcsbGgpCi0rI2RlZmluZSBsaF9PUEVOU1NMX1NUUklOR19udW1faXRlbXMobGgpIExI TV9saF9udW1faXRlbXMoT1BFTlNTTF9TVFJJTkcsbGgpCi0rI2RlZmluZSBsaF9PUEVOU1NMX1NU UklOR19kb3duX2xvYWQobGgpIExITV9saF9kb3duX2xvYWQoT1BFTlNTTF9TVFJJTkcsbGgpCi0r I2RlZmluZSBsaF9PUEVOU1NMX1NUUklOR19ub2RlX3N0YXRzX2JpbyhsaCxvdXQpIFwKLSsgIExI TV9saF9ub2RlX3N0YXRzX2JpbyhPUEVOU1NMX1NUUklORyxsaCxvdXQpCi0rI2RlZmluZSBsaF9P UEVOU1NMX1NUUklOR19ub2RlX3VzYWdlX3N0YXRzX2JpbyhsaCxvdXQpIFwKLSsgIExITV9saF9u b2RlX3VzYWdlX3N0YXRzX2JpbyhPUEVOU1NMX1NUUklORyxsaCxvdXQpCi0rI2RlZmluZSBsaF9P UEVOU1NMX1NUUklOR19zdGF0c19iaW8obGgsb3V0KSBcCi0rICBMSE1fbGhfc3RhdHNfYmlvKE9Q RU5TU0xfU1RSSU5HLGxoLG91dCkKLSsjZGVmaW5lIGxoX09QRU5TU0xfU1RSSU5HX2ZyZWUobGgp IExITV9saF9mcmVlKE9QRU5TU0xfU1RSSU5HLGxoKQotKwotICNkZWZpbmUgbGhfU1NMX1NFU1NJ T05fbmV3KCkgTEhNX2xoX25ldyhTU0xfU0VTU0lPTixzc2xfc2Vzc2lvbikKLSAjZGVmaW5lIGxo X1NTTF9TRVNTSU9OX2luc2VydChsaCxpbnN0KSBMSE1fbGhfaW5zZXJ0KFNTTF9TRVNTSU9OLGxo LGluc3QpCi0gI2RlZmluZSBsaF9TU0xfU0VTU0lPTl9yZXRyaWV2ZShsaCxpbnN0KSBMSE1fbGhf cmV0cmlldmUoU1NMX1NFU1NJT04sbGgsaW5zdCkKLUBAIC0yNTUxLDI0ICsyNTY5LDYgQEAKLSAj ZGVmaW5lIGxoX1NTTF9TRVNTSU9OX3N0YXRzX2JpbyhsaCxvdXQpIFwKLSAgIExITV9saF9zdGF0 c19iaW8oU1NMX1NFU1NJT04sbGgsb3V0KQotICNkZWZpbmUgbGhfU1NMX1NFU1NJT05fZnJlZShs aCkgTEhNX2xoX2ZyZWUoU1NMX1NFU1NJT04sbGgpCi0tCi0tI2RlZmluZSBsaF9TVFJJTkdfbmV3 KCkgTEhNX2xoX25ldyhTVFJJTkcsc3RyaW5nKQotLSNkZWZpbmUgbGhfU1RSSU5HX2luc2VydChs aCxpbnN0KSBMSE1fbGhfaW5zZXJ0KFNUUklORyxsaCxpbnN0KQotLSNkZWZpbmUgbGhfU1RSSU5H X3JldHJpZXZlKGxoLGluc3QpIExITV9saF9yZXRyaWV2ZShTVFJJTkcsbGgsaW5zdCkKLS0jZGVm aW5lIGxoX1NUUklOR19kZWxldGUobGgsaW5zdCkgTEhNX2xoX2RlbGV0ZShTVFJJTkcsbGgsaW5z dCkKLS0jZGVmaW5lIGxoX1NUUklOR19kb2FsbChsaCxmbikgTEhNX2xoX2RvYWxsKFNUUklORyxs aCxmbikKLS0jZGVmaW5lIGxoX1NUUklOR19kb2FsbF9hcmcobGgsZm4sYXJnX3R5cGUsYXJnKSBc Ci0tICBMSE1fbGhfZG9hbGxfYXJnKFNUUklORyxsaCxmbixhcmdfdHlwZSxhcmcpCi0tI2RlZmlu ZSBsaF9TVFJJTkdfZXJyb3IobGgpIExITV9saF9lcnJvcihTVFJJTkcsbGgpCi0tI2RlZmluZSBs aF9TVFJJTkdfbnVtX2l0ZW1zKGxoKSBMSE1fbGhfbnVtX2l0ZW1zKFNUUklORyxsaCkKLS0jZGVm aW5lIGxoX1NUUklOR19kb3duX2xvYWQobGgpIExITV9saF9kb3duX2xvYWQoU1RSSU5HLGxoKQot LSNkZWZpbmUgbGhfU1RSSU5HX25vZGVfc3RhdHNfYmlvKGxoLG91dCkgXAotLSAgTEhNX2xoX25v ZGVfc3RhdHNfYmlvKFNUUklORyxsaCxvdXQpCi0tI2RlZmluZSBsaF9TVFJJTkdfbm9kZV91c2Fn ZV9zdGF0c19iaW8obGgsb3V0KSBcCi0tICBMSE1fbGhfbm9kZV91c2FnZV9zdGF0c19iaW8oU1RS SU5HLGxoLG91dCkKLS0jZGVmaW5lIGxoX1NUUklOR19zdGF0c19iaW8obGgsb3V0KSBcCi0tICBM SE1fbGhfc3RhdHNfYmlvKFNUUklORyxsaCxvdXQpCi0tI2RlZmluZSBsaF9TVFJJTkdfZnJlZShs aCkgTEhNX2xoX2ZyZWUoU1RSSU5HLGxoKQotIC8qIEVuZCBvZiB1dGlsL21rc3RhY2sucGwgYmxv Y2ssIHlvdSBtYXkgbm93IGVkaXQgOi0pICovCi0gCi0gI2VuZGlmIC8qICFkZWZpbmVkIEhFQURF Ul9TQUZFU1RBQ0tfSCAqLwotSW5kZXg6IG9wZW5zc2wvY3J5cHRvL3R4dF9kYi90eHRfZGIuYwot UkNTIEZpbGU6IC92L29wZW5zc2wvY3ZzL29wZW5zc2wvY3J5cHRvL3R4dF9kYi90eHRfZGIuYyx2 Ci1yY3NkaWZmIC1xIC1rayAnLXIxLjI1JyAnLXIxLjI1LjIuMScgLXUgJy92L29wZW5zc2wvY3Zz L29wZW5zc2wvY3J5cHRvL3R4dF9kYi90eHRfZGIuYyx2JyAyPi9kZXYvbnVsbAotLS0tIG9wZW5z c2wvY3J5cHRvL3R4dF9kYi90eHRfZGIuYyAyMDA4LzA3LzA0IDIzOjEyOjUxIDEuMjUKLSsrKyBv cGVuc3NsL2NyeXB0by90eHRfZGIvdHh0X2RiLmMgMjAwOS8wNy8yNyAyMTowODo1MSAxLjI1LjIu MQotQEAgLTc4LDcgKzc4LDcgQEAKLSAJaW50IHNpemU9QlVGU0laRTsKLSAJaW50IG9mZnNldD0w OwotIAljaGFyICpwLCpmOwotLQlTVFJJTkcgKnBwOwotKwlPUEVOU1NMX1NUUklORyAqcHA7Ci0g CUJVRl9NRU0gKmJ1Zj1OVUxMOwotIAotIAlpZiAoKGJ1Zj1CVUZfTUVNX25ldygpKSA9PSBOVUxM KSBnb3RvIGVycjsKLUBAIC04OSw3ICs4OSw3IEBACi0gCXJldC0+bnVtX2ZpZWxkcz1udW07Ci0g CXJldC0+aW5kZXg9TlVMTDsKLSAJcmV0LT5xdWFsPU5VTEw7Ci0tCWlmICgocmV0LT5kYXRhPXNr X1BTVFJJTkdfbmV3X251bGwoKSkgPT0gTlVMTCkKLSsJaWYgKChyZXQtPmRhdGE9c2tfT1BFTlNT TF9QU1RSSU5HX25ld19udWxsKCkpID09IE5VTEwpCi0gCQlnb3RvIGVycjsKLSAJaWYgKChyZXQt PmluZGV4PU9QRU5TU0xfbWFsbG9jKHNpemVvZigqcmV0LT5pbmRleCkqbnVtKSkgPT0gTlVMTCkK LSAJCWdvdG8gZXJyOwotQEAgLTE2Myw3ICsxNjMsNyBAQAotIAkJCWdvdG8gZXJyOwotIAkJCX0K LSAJCXBwW25dPXA7Ci0tCQlpZiAoIXNrX1BTVFJJTkdfcHVzaChyZXQtPmRhdGEscHApKQotKwkJ aWYgKCFza19PUEVOU1NMX1BTVFJJTkdfcHVzaChyZXQtPmRhdGEscHApKQotIAkJCXsKLSAjaWYg IWRlZmluZWQoT1BFTlNTTF9OT19TVERJTykgJiYgIWRlZmluZWQoT1BFTlNTTF9TWVNfV0lOMTYp CS8qIHRlbXBvcmFyeSBmaXggOi0oICovCi0gCQkJZnByaW50ZihzdGRlcnIsImZhaWx1cmUgaW4g c2tfcHVzaFxuIik7Ci1AQCAtMTgyLDcgKzE4Miw3IEBACi0gI2VuZGlmCi0gCQlpZiAocmV0ICE9 IE5VTEwpCi0gCQkJewotLQkJCWlmIChyZXQtPmRhdGEgIT0gTlVMTCkgc2tfUFNUUklOR19mcmVl KHJldC0+ZGF0YSk7Ci0rCQkJaWYgKHJldC0+ZGF0YSAhPSBOVUxMKSBza19PUEVOU1NMX1BTVFJJ TkdfZnJlZShyZXQtPmRhdGEpOwotIAkJCWlmIChyZXQtPmluZGV4ICE9IE5VTEwpIE9QRU5TU0xf ZnJlZShyZXQtPmluZGV4KTsKLSAJCQlpZiAocmV0LT5xdWFsICE9IE5VTEwpIE9QRU5TU0xfZnJl ZShyZXQtPnF1YWwpOwotIAkJCWlmIChyZXQgIT0gTlVMTCkgT1BFTlNTTF9mcmVlKHJldCk7Ci1A QCAtMTkzLDEwICsxOTMsMTAgQEAKLSAJCXJldHVybihyZXQpOwotIAl9Ci0gCi0tU1RSSU5HICpU WFRfREJfZ2V0X2J5X2luZGV4KFRYVF9EQiAqZGIsIGludCBpZHgsIFNUUklORyAqdmFsdWUpCi0r T1BFTlNTTF9TVFJJTkcgKlRYVF9EQl9nZXRfYnlfaW5kZXgoVFhUX0RCICpkYiwgaW50IGlkeCwg T1BFTlNTTF9TVFJJTkcgKnZhbHVlKQotIAl7Ci0tCVNUUklORyAqcmV0OwotLQlMSEFTSF9PRihT VFJJTkcpICpsaDsKLSsJT1BFTlNTTF9TVFJJTkcgKnJldDsKLSsJTEhBU0hfT0YoT1BFTlNTTF9T VFJJTkcpICpsaDsKLSAKLSAJaWYgKGlkeCA+PSBkYi0+bnVtX2ZpZWxkcykKLSAJCXsKLUBAIC0y MDksMTYgKzIwOSwxNiBAQAotIAkJZGItPmVycm9yPURCX0VSUk9SX05PX0lOREVYOwotIAkJcmV0 dXJuKE5VTEwpOwotIAkJfQotLQlyZXQ9bGhfU1RSSU5HX3JldHJpZXZlKGxoLHZhbHVlKTsKLSsJ cmV0PWxoX09QRU5TU0xfU1RSSU5HX3JldHJpZXZlKGxoLHZhbHVlKTsKLSAJZGItPmVycm9yPURC X0VSUk9SX09LOwotIAlyZXR1cm4ocmV0KTsKLSAJfQotIAotLWludCBUWFRfREJfY3JlYXRlX2lu ZGV4KFRYVF9EQiAqZGIsIGludCBmaWVsZCwgaW50ICgqcXVhbCkoU1RSSU5HICopLAotK2ludCBU WFRfREJfY3JlYXRlX2luZGV4KFRYVF9EQiAqZGIsIGludCBmaWVsZCwgaW50ICgqcXVhbCkoT1BF TlNTTF9TVFJJTkcgKiksCi0gCQkJTEhBU0hfSEFTSF9GTl9UWVBFIGhhc2gsIExIQVNIX0NPTVBf Rk5fVFlQRSBjbXApCi0gCXsKLS0JTEhBU0hfT0YoU1RSSU5HKSAqaWR4OwotLQlTVFJJTkcgKnI7 Ci0rCUxIQVNIX09GKE9QRU5TU0xfU1RSSU5HKSAqaWR4OwotKwlPUEVOU1NMX1NUUklORyAqcjsK LSAJaW50IGksbjsKLSAKLSAJaWYgKGZpZWxkID49IGRiLT5udW1fZmllbGRzKQotQEAgLTIyNywy NiArMjI3LDI2IEBACi0gCQlyZXR1cm4oMCk7Ci0gCQl9Ci0gCS8qIEZJWE1FOiB3ZSBsb3NlIHR5 cGUgY2hlY2tpbmcgYXQgdGhpcyBwb2ludCAqLwotLQlpZiAoKGlkeD0oTEhBU0hfT0YoU1RSSU5H KSAqKWxoX25ldyhoYXNoLGNtcCkpID09IE5VTEwpCi0rCWlmICgoaWR4PShMSEFTSF9PRihPUEVO U1NMX1NUUklORykgKilsaF9uZXcoaGFzaCxjbXApKSA9PSBOVUxMKQotIAkJewotIAkJZGItPmVy cm9yPURCX0VSUk9SX01BTExPQzsKLSAJCXJldHVybigwKTsKLSAJCX0KLS0Jbj1za19QU1RSSU5H X251bShkYi0+ZGF0YSk7Ci0rCW49c2tfT1BFTlNTTF9QU1RSSU5HX251bShkYi0+ZGF0YSk7Ci0g CWZvciAoaT0wOyBpPG47IGkrKykKLSAJCXsKLS0JCXI9c2tfUFNUUklOR192YWx1ZShkYi0+ZGF0 YSxpKTsKLSsJCXI9c2tfT1BFTlNTTF9QU1RSSU5HX3ZhbHVlKGRiLT5kYXRhLGkpOwotIAkJaWYg KChxdWFsICE9IE5VTEwpICYmIChxdWFsKHIpID09IDApKSBjb250aW51ZTsKLS0JCWlmICgocj1s aF9TVFJJTkdfaW5zZXJ0KGlkeCxyKSkgIT0gTlVMTCkKLSsJCWlmICgocj1saF9PUEVOU1NMX1NU UklOR19pbnNlcnQoaWR4LHIpKSAhPSBOVUxMKQotIAkJCXsKLSAJCQlkYi0+ZXJyb3I9REJfRVJS T1JfSU5ERVhfQ0xBU0g7Ci0tCQkJZGItPmFyZzE9c2tfUFNUUklOR19maW5kKGRiLT5kYXRhLHIp OwotKwkJCWRiLT5hcmcxPXNrX09QRU5TU0xfUFNUUklOR19maW5kKGRiLT5kYXRhLHIpOwotIAkJ CWRiLT5hcmcyPWk7Ci0tCQkJbGhfU1RSSU5HX2ZyZWUoaWR4KTsKLSsJCQlsaF9PUEVOU1NMX1NU UklOR19mcmVlKGlkeCk7Ci0gCQkJcmV0dXJuKDApOwotIAkJCX0KLSAJCX0KLS0JaWYgKGRiLT5p bmRleFtmaWVsZF0gIT0gTlVMTCkgbGhfU1RSSU5HX2ZyZWUoZGItPmluZGV4W2ZpZWxkXSk7Ci0r CWlmIChkYi0+aW5kZXhbZmllbGRdICE9IE5VTEwpIGxoX09QRU5TU0xfU1RSSU5HX2ZyZWUoZGIt PmluZGV4W2ZpZWxkXSk7Ci0gCWRiLT5pbmRleFtmaWVsZF09aWR4OwotIAlkYi0+cXVhbFtmaWVs ZF09cXVhbDsKLSAJcmV0dXJuKDEpOwotQEAgLTI2MSwxMSArMjYxLDExIEBACi0gCi0gCWlmICgo YnVmPUJVRl9NRU1fbmV3KCkpID09IE5VTEwpCi0gCQlnb3RvIGVycjsKLS0Jbj1za19QU1RSSU5H X251bShkYi0+ZGF0YSk7Ci0rCW49c2tfT1BFTlNTTF9QU1RSSU5HX251bShkYi0+ZGF0YSk7Ci0g CW5uPWRiLT5udW1fZmllbGRzOwotIAlmb3IgKGk9MDsgaTxuOyBpKyspCi0gCQl7Ci0tCQlwcD1z a19QU1RSSU5HX3ZhbHVlKGRiLT5kYXRhLGkpOwotKwkJcHA9c2tfT1BFTlNTTF9QU1RSSU5HX3Zh bHVlKGRiLT5kYXRhLGkpOwotIAotIAkJbD0wOwotIAkJZm9yIChqPTA7IGo8bm47IGorKykKLUBA IC0zMDAsMTAgKzMwMCwxMCBAQAotIAlyZXR1cm4ocmV0KTsKLSAJfQotIAotLWludCBUWFRfREJf aW5zZXJ0KFRYVF9EQiAqZGIsIFNUUklORyAqcm93KQotK2ludCBUWFRfREJfaW5zZXJ0KFRYVF9E QiAqZGIsIE9QRU5TU0xfU1RSSU5HICpyb3cpCi0gCXsKLSAJaW50IGk7Ci0tCVNUUklORyAqcjsK LSsJT1BFTlNTTF9TVFJJTkcgKnI7Ci0gCi0gCWZvciAoaT0wOyBpPGRiLT5udW1fZmllbGRzOyBp KyspCi0gCQl7Ci1AQCAtMzExLDcgKzMxMSw3IEBACi0gCQkJewotIAkJCWlmICgoZGItPnF1YWxb aV0gIT0gTlVMTCkgJiYKLSAJCQkJKGRiLT5xdWFsW2ldKHJvdykgPT0gMCkpIGNvbnRpbnVlOwot LQkJCXI9bGhfU1RSSU5HX3JldHJpZXZlKGRiLT5pbmRleFtpXSxyb3cpOwotKwkJCXI9bGhfT1BF TlNTTF9TVFJJTkdfcmV0cmlldmUoZGItPmluZGV4W2ldLHJvdyk7Ci0gCQkJaWYgKHIgIT0gTlVM TCkKLSAJCQkJewotIAkJCQlkYi0+ZXJyb3I9REJfRVJST1JfSU5ERVhfQ0xBU0g7Ci1AQCAtMzIy LDcgKzMyMiw3IEBACi0gCQkJfQotIAkJfQotIAkvKiBXZSBoYXZlIHBhc3NlZCB0aGUgaW5kZXgg Y2hlY2tzLCBub3cganVzdCBhcHBlbmQgYW5kIGluc2VydCAqLwotLQlpZiAoIXNrX1BTVFJJTkdf cHVzaChkYi0+ZGF0YSxyb3cpKQotKwlpZiAoIXNrX09QRU5TU0xfUFNUUklOR19wdXNoKGRiLT5k YXRhLHJvdykpCi0gCQl7Ci0gCQlkYi0+ZXJyb3I9REJfRVJST1JfTUFMTE9DOwotIAkJZ290byBl cnI7Ci1AQCAtMzM0LDcgKzMzNCw3IEBACi0gCQkJewotIAkJCWlmICgoZGItPnF1YWxbaV0gIT0g TlVMTCkgJiYKLSAJCQkJKGRiLT5xdWFsW2ldKHJvdykgPT0gMCkpIGNvbnRpbnVlOwotLQkJCSh2 b2lkKWxoX1NUUklOR19pbnNlcnQoZGItPmluZGV4W2ldLHJvdyk7Ci0rCQkJKHZvaWQpbGhfT1BF TlNTTF9TVFJJTkdfaW5zZXJ0KGRiLT5pbmRleFtpXSxyb3cpOwotIAkJCX0KLSAJCX0KLSAJcmV0 dXJuKDEpOwotQEAgLTM1MywxOCArMzUzLDE4IEBACi0gCWlmIChkYi0+aW5kZXggIT0gTlVMTCkK LSAJCXsKLSAJCWZvciAoaT1kYi0+bnVtX2ZpZWxkcy0xOyBpPj0wOyBpLS0pCi0tCQkJaWYgKGRi LT5pbmRleFtpXSAhPSBOVUxMKSBsaF9TVFJJTkdfZnJlZShkYi0+aW5kZXhbaV0pOwotKwkJCWlm IChkYi0+aW5kZXhbaV0gIT0gTlVMTCkgbGhfT1BFTlNTTF9TVFJJTkdfZnJlZShkYi0+aW5kZXhb aV0pOwotIAkJT1BFTlNTTF9mcmVlKGRiLT5pbmRleCk7Ci0gCQl9Ci0gCWlmIChkYi0+cXVhbCAh PSBOVUxMKQotIAkJT1BFTlNTTF9mcmVlKGRiLT5xdWFsKTsKLSAJaWYgKGRiLT5kYXRhICE9IE5V TEwpCi0gCQl7Ci0tCQlmb3IgKGk9c2tfUFNUUklOR19udW0oZGItPmRhdGEpLTE7IGk+PTA7IGkt LSkKLSsJCWZvciAoaT1za19PUEVOU1NMX1BTVFJJTkdfbnVtKGRiLT5kYXRhKS0xOyBpPj0wOyBp LS0pCi0gCQkJewotIAkJCS8qIGNoZWNrIGlmIGFueSAnZmllbGRzJyBoYXZlIGJlZW4gYWxsb2Nh dGVkCi0gCQkJICogZnJvbSBvdXRzaWRlIG9mIHRoZSBpbml0aWFsIGJsb2NrICovCi0tCQkJcD1z a19QU1RSSU5HX3ZhbHVlKGRiLT5kYXRhLGkpOwotKwkJCXA9c2tfT1BFTlNTTF9QU1RSSU5HX3Zh bHVlKGRiLT5kYXRhLGkpOwotIAkJCW1heD1wW2RiLT5udW1fZmllbGRzXTsgLyogbGFzdCBhZGRy ZXNzICovCi0gCQkJaWYgKG1heCA9PSBOVUxMKSAvKiBuZXcgcm93ICovCi0gCQkJCXsKLUBAIC0z ODAsOSArMzgwLDkgQEAKLSAJCQkJCQlPUEVOU1NMX2ZyZWUocFtuXSk7Ci0gCQkJCQl9Ci0gCQkJ CX0KLS0JCQlPUEVOU1NMX2ZyZWUoc2tfUFNUUklOR192YWx1ZShkYi0+ZGF0YSxpKSk7Ci0rCQkJ T1BFTlNTTF9mcmVlKHNrX09QRU5TU0xfUFNUUklOR192YWx1ZShkYi0+ZGF0YSxpKSk7Ci0gCQkJ fQotLQkJc2tfUFNUUklOR19mcmVlKGRiLT5kYXRhKTsKLSsJCXNrX09QRU5TU0xfUFNUUklOR19m cmVlKGRiLT5kYXRhKTsKLSAJCX0KLSAJT1BFTlNTTF9mcmVlKGRiKTsKLSAJfQotSW5kZXg6IG9w ZW5zc2wvY3J5cHRvL3R4dF9kYi90eHRfZGIuaAotUkNTIEZpbGU6IC92L29wZW5zc2wvY3ZzL29w ZW5zc2wvY3J5cHRvL3R4dF9kYi90eHRfZGIuaCx2Ci1yY3NkaWZmIC1xIC1rayAnLXIxLjExJyAn LXIxLjExLjIuMScgLXUgJy92L29wZW5zc2wvY3ZzL29wZW5zc2wvY3J5cHRvL3R4dF9kYi90eHRf ZGIuaCx2JyAyPi9kZXYvbnVsbAotLS0tIG9wZW5zc2wvY3J5cHRvL3R4dF9kYi90eHRfZGIuaCAy MDA4LzA2LzA0IDExOjAxOjM4IDEuMTEKLSsrKyBvcGVuc3NsL2NyeXB0by90eHRfZGIvdHh0X2Ri LmggMjAwOS8wNy8yNyAyMTowODo1MSAxLjExLjIuMQotQEAgLTc3LDE5ICs3NywxOSBAQAotIGV4 dGVybiAiQyIgewotICNlbmRpZgotIAotLXR5cGVkZWYgU1RSSU5HICpQU1RSSU5HOwotLURFQ0xB UkVfU1BFQ0lBTF9TVEFDS19PRihQU1RSSU5HLCBTVFJJTkcpCi0rdHlwZWRlZiBPUEVOU1NMX1NU UklORyAqT1BFTlNTTF9QU1RSSU5HOwotK0RFQ0xBUkVfU1BFQ0lBTF9TVEFDS19PRihPUEVOU1NM X1BTVFJJTkcsIE9QRU5TU0xfU1RSSU5HKQotIAotIHR5cGVkZWYgc3RydWN0IHR4dF9kYl9zdAot IAl7Ci0gCWludCBudW1fZmllbGRzOwotLQlTVEFDS19PRihQU1RSSU5HKSAqZGF0YTsKLS0JTEhB U0hfT0YoU1RSSU5HKSAqKmluZGV4OwotLQlpbnQgKCoqcXVhbCkoU1RSSU5HICopOwotKwlTVEFD S19PRihPUEVOU1NMX1BTVFJJTkcpICpkYXRhOwotKwlMSEFTSF9PRihPUEVOU1NMX1NUUklORykg KippbmRleDsKLSsJaW50ICgqKnF1YWwpKE9QRU5TU0xfU1RSSU5HICopOwotIAlsb25nIGVycm9y OwotIAlsb25nIGFyZzE7Ci0gCWxvbmcgYXJnMjsKLS0JU1RSSU5HICphcmdfcm93OwotKwlPUEVO U1NMX1NUUklORyAqYXJnX3JvdzsKLSAJfSBUWFRfREI7Ci0gCi0gI2lmbmRlZiBPUEVOU1NMX05P X0JJTwotQEAgLTk5LDExICs5OSwxMSBAQAotIFRYVF9EQiAqVFhUX0RCX3JlYWQoY2hhciAqaW4s IGludCBudW0pOwotIGxvbmcgVFhUX0RCX3dyaXRlKGNoYXIgKm91dCwgVFhUX0RCICpkYik7Ci0g I2VuZGlmCi0taW50IFRYVF9EQl9jcmVhdGVfaW5kZXgoVFhUX0RCICpkYixpbnQgZmllbGQsaW50 ICgqcXVhbCkoU1RSSU5HICopLAotK2ludCBUWFRfREJfY3JlYXRlX2luZGV4KFRYVF9EQiAqZGIs aW50IGZpZWxkLGludCAoKnF1YWwpKE9QRU5TU0xfU1RSSU5HICopLAotIAkJCUxIQVNIX0hBU0hf Rk5fVFlQRSBoYXNoLCBMSEFTSF9DT01QX0ZOX1RZUEUgY21wKTsKLSB2b2lkIFRYVF9EQl9mcmVl KFRYVF9EQiAqZGIpOwotLVNUUklORyAqVFhUX0RCX2dldF9ieV9pbmRleChUWFRfREIgKmRiLCBp bnQgaWR4LCBTVFJJTkcgKnZhbHVlKTsKLS1pbnQgVFhUX0RCX2luc2VydChUWFRfREIgKmRiLCBT VFJJTkcgKnZhbHVlKTsKLStPUEVOU1NMX1NUUklORyAqVFhUX0RCX2dldF9ieV9pbmRleChUWFRf REIgKmRiLCBpbnQgaWR4LCBPUEVOU1NMX1NUUklORyAqdmFsdWUpOwotK2ludCBUWFRfREJfaW5z ZXJ0KFRYVF9EQiAqZGIsIE9QRU5TU0xfU1RSSU5HICp2YWx1ZSk7Ci0gCi0gI2lmZGVmICBfX2Nw bHVzcGx1cwotIH0KLUluZGV4OiBvcGVuc3NsL2NyeXB0by94NTA5djMvdjNfdXRsLmMKLVJDUyBG aWxlOiAvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL2NyeXB0by94NTA5djMvdjNfdXRsLmMsdgotcmNz ZGlmZiAtcSAta2sgJy1yMS40NCcgJy1yMS40NC4yLjEnIC11ICcvdi9vcGVuc3NsL2N2cy9vcGVu c3NsL2NyeXB0by94NTA5djMvdjNfdXRsLmMsdicgMj4vZGV2L251bGwKLS0tLSBvcGVuc3NsL2Ny eXB0by94NTA5djMvdjNfdXRsLmMgMjAwOS8wMi8xNCAyMTo0OTozNiAxLjQ0Ci0rKysgb3BlbnNz bC9jcnlwdG8veDUwOXYzL3YzX3V0bC5jIDIwMDkvMDcvMjcgMjE6MDg6NTMgMS40NC4yLjEKLUBA IC02Nyw5ICs2Nyw5IEBACi0gCi0gc3RhdGljIGNoYXIgKnN0cmlwX3NwYWNlcyhjaGFyICpuYW1l KTsKLSBzdGF0aWMgaW50IHNrX3N0cmNtcChjb25zdCBjaGFyICogY29uc3QgKmEsIGNvbnN0IGNo YXIgKiBjb25zdCAqYik7Ci0tc3RhdGljIFNUQUNLX09GKFNUUklORykgKmdldF9lbWFpbChYNTA5 X05BTUUgKm5hbWUsIEdFTkVSQUxfTkFNRVMgKmdlbnMpOwotLXN0YXRpYyB2b2lkIHN0cl9mcmVl KFNUUklORyBzdHIpOwotLXN0YXRpYyBpbnQgYXBwZW5kX2lhNShTVEFDS19PRihTVFJJTkcpICoq c2ssIEFTTjFfSUE1U1RSSU5HICplbWFpbCk7Ci0rc3RhdGljIFNUQUNLX09GKE9QRU5TU0xfU1RS SU5HKSAqZ2V0X2VtYWlsKFg1MDlfTkFNRSAqbmFtZSwgR0VORVJBTF9OQU1FUyAqZ2Vucyk7Ci0r c3RhdGljIHZvaWQgc3RyX2ZyZWUoT1BFTlNTTF9TVFJJTkcgc3RyKTsKLStzdGF0aWMgaW50IGFw cGVuZF9pYTUoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICoqc2ssIEFTTjFfSUE1U1RSSU5HICpl bWFpbCk7Ci0gCi0gc3RhdGljIGludCBpcHY0X2Zyb21fYXNjKHVuc2lnbmVkIGNoYXIgKnY0LCBj b25zdCBjaGFyICppbik7Ci0gc3RhdGljIGludCBpcHY2X2Zyb21fYXNjKHVuc2lnbmVkIGNoYXIg KnY2LCBjb25zdCBjaGFyICppbik7Ci1AQCAtNDYzLDEwICs0NjMsMTAgQEAKLSAJcmV0dXJuIHN0 cmNtcCgqYSwgKmIpOwotIH0KLSAKLS1TVEFDS19PRihTVFJJTkcpICpYNTA5X2dldDFfZW1haWwo WDUwOSAqeCkKLStTVEFDS19PRihPUEVOU1NMX1NUUklORykgKlg1MDlfZ2V0MV9lbWFpbChYNTA5 ICp4KQotIHsKLSAJR0VORVJBTF9OQU1FUyAqZ2VuczsKLS0JU1RBQ0tfT0YoU1RSSU5HKSAqcmV0 OwotKwlTVEFDS19PRihPUEVOU1NMX1NUUklORykgKnJldDsKLSAKLSAJZ2VucyA9IFg1MDlfZ2V0 X2V4dF9kMmkoeCwgTklEX3N1YmplY3RfYWx0X25hbWUsIE5VTEwsIE5VTEwpOwotIAlyZXQgPSBn ZXRfZW1haWwoWDUwOV9nZXRfc3ViamVjdF9uYW1lKHgpLCBnZW5zKTsKLUBAIC00NzQsMTAgKzQ3 NCwxMCBAQAotIAlyZXR1cm4gcmV0OwotIH0KLSAKLS1TVEFDS19PRihTVFJJTkcpICpYNTA5X2dl dDFfb2NzcChYNTA5ICp4KQotK1NUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqWDUwOV9nZXQxX29j c3AoWDUwOSAqeCkKLSB7Ci0gCUFVVEhPUklUWV9JTkZPX0FDQ0VTUyAqaW5mbzsKLS0JU1RBQ0tf T0YoU1RSSU5HKSAqcmV0ID0gTlVMTDsKLSsJU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpyZXQg PSBOVUxMOwotIAlpbnQgaTsKLSAKLSAJaW5mbyA9IFg1MDlfZ2V0X2V4dF9kMmkoeCwgTklEX2lu Zm9fYWNjZXNzLCBOVUxMLCBOVUxMKTsKLUBAIC00OTksMTEgKzQ5OSwxMSBAQAotIAlyZXR1cm4g cmV0OwotIH0KLSAKLS1TVEFDS19PRihTVFJJTkcpICpYNTA5X1JFUV9nZXQxX2VtYWlsKFg1MDlf UkVRICp4KQotK1NUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqWDUwOV9SRVFfZ2V0MV9lbWFpbChY NTA5X1JFUSAqeCkKLSB7Ci0gCUdFTkVSQUxfTkFNRVMgKmdlbnM7Ci0gCVNUQUNLX09GKFg1MDlf RVhURU5TSU9OKSAqZXh0czsKLS0JU1RBQ0tfT0YoU1RSSU5HKSAqcmV0OwotKwlTVEFDS19PRihP UEVOU1NMX1NUUklORykgKnJldDsKLSAKLSAJZXh0cyA9IFg1MDlfUkVRX2dldF9leHRlbnNpb25z KHgpOwotIAlnZW5zID0gWDUwOVYzX2dldF9kMmkoZXh0cywgTklEX3N1YmplY3RfYWx0X25hbWUs IE5VTEwsIE5VTEwpOwotQEAgLTUxNCw5ICs1MTQsOSBAQAotIH0KLSAKLSAKLS1zdGF0aWMgU1RB Q0tfT0YoU1RSSU5HKSAqZ2V0X2VtYWlsKFg1MDlfTkFNRSAqbmFtZSwgR0VORVJBTF9OQU1FUyAq Z2VucykKLStzdGF0aWMgU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpnZXRfZW1haWwoWDUwOV9O QU1FICpuYW1lLCBHRU5FUkFMX05BTUVTICpnZW5zKQotIHsKLS0JU1RBQ0tfT0YoU1RSSU5HKSAq cmV0ID0gTlVMTDsKLSsJU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcpICpyZXQgPSBOVUxMOwotIAlY NTA5X05BTUVfRU5UUlkgKm5lOwotIAlBU04xX0lBNVNUUklORyAqZW1haWw7Ci0gCUdFTkVSQUxf TkFNRSAqZ2VuOwotQEAgLTUzOSwyMyArNTM5LDIzIEBACi0gCXJldHVybiByZXQ7Ci0gfQotIAot LXN0YXRpYyB2b2lkIHN0cl9mcmVlKFNUUklORyBzdHIpCi0rc3RhdGljIHZvaWQgc3RyX2ZyZWUo T1BFTlNTTF9TVFJJTkcgc3RyKQotIHsKLSAJT1BFTlNTTF9mcmVlKHN0cik7Ci0gfQotIAotLXN0 YXRpYyBpbnQgYXBwZW5kX2lhNShTVEFDS19PRihTVFJJTkcpICoqc2ssIEFTTjFfSUE1U1RSSU5H ICplbWFpbCkKLStzdGF0aWMgaW50IGFwcGVuZF9pYTUoU1RBQ0tfT0YoT1BFTlNTTF9TVFJJTkcp ICoqc2ssIEFTTjFfSUE1U1RSSU5HICplbWFpbCkKLSB7Ci0gCWNoYXIgKmVtdG1wOwotIAkvKiBG aXJzdCBzb21lIHNhbml0eSBjaGVja3MgKi8KLSAJaWYoZW1haWwtPnR5cGUgIT0gVl9BU04xX0lB NVNUUklORykgcmV0dXJuIDE7Ci0gCWlmKCFlbWFpbC0+ZGF0YSB8fCAhZW1haWwtPmxlbmd0aCkg cmV0dXJuIDE7Ci0tCWlmKCEqc2spICpzayA9IHNrX1NUUklOR19uZXcoc2tfc3RyY21wKTsKLSsJ aWYoISpzaykgKnNrID0gc2tfT1BFTlNTTF9TVFJJTkdfbmV3KHNrX3N0cmNtcCk7Ci0gCWlmKCEq c2spIHJldHVybiAwOwotIAkvKiBEb24ndCBhZGQgZHVwbGljYXRlcyAqLwotLQlpZihza19TVFJJ TkdfZmluZCgqc2ssIChjaGFyICopZW1haWwtPmRhdGEpICE9IC0xKSByZXR1cm4gMTsKLSsJaWYo c2tfT1BFTlNTTF9TVFJJTkdfZmluZCgqc2ssIChjaGFyICopZW1haWwtPmRhdGEpICE9IC0xKSBy ZXR1cm4gMTsKLSAJZW10bXAgPSBCVUZfc3RyZHVwKChjaGFyICopZW1haWwtPmRhdGEpOwotLQlp ZighZW10bXAgfHwgIXNrX1NUUklOR19wdXNoKCpzaywgZW10bXApKSB7Ci0rCWlmKCFlbXRtcCB8 fCAhc2tfT1BFTlNTTF9TVFJJTkdfcHVzaCgqc2ssIGVtdG1wKSkgewotIAkJWDUwOV9lbWFpbF9m cmVlKCpzayk7Ci0gCQkqc2sgPSBOVUxMOwotIAkJcmV0dXJuIDA7Ci1AQCAtNTYzLDkgKzU2Myw5 IEBACi0gCXJldHVybiAxOwotIH0KLSAKLS12b2lkIFg1MDlfZW1haWxfZnJlZShTVEFDS19PRihT VFJJTkcpICpzaykKLSt2b2lkIFg1MDlfZW1haWxfZnJlZShTVEFDS19PRihPUEVOU1NMX1NUUklO RykgKnNrKQotIHsKLS0Jc2tfU1RSSU5HX3BvcF9mcmVlKHNrLCBzdHJfZnJlZSk7Ci0rCXNrX09Q RU5TU0xfU1RSSU5HX3BvcF9mcmVlKHNrLCBzdHJfZnJlZSk7Ci0gfQotIAotIC8qIENvbnZlcnQg SVAgYWRkcmVzc2VzIGJvdGggSVB2NCBhbmQgSVB2NiBpbnRvIGFuIAotSW5kZXg6IG9wZW5zc2wv Y3J5cHRvL3g1MDl2My94NTA5djMuaAotUkNTIEZpbGU6IC92L29wZW5zc2wvY3ZzL29wZW5zc2wv Y3J5cHRvL3g1MDl2My94NTA5djMuaCx2Ci1yY3NkaWZmIC1xIC1rayAnLXIxLjEyNi4yLjEnICct cjEuMTI2LjIuMicgLXUgJy92L29wZW5zc2wvY3ZzL29wZW5zc2wvY3J5cHRvL3g1MDl2My94NTA5 djMuaCx2JyAyPi9kZXYvbnVsbAotLS0tIG9wZW5zc2wvY3J5cHRvL3g1MDl2My94NTA5djMuaCAy MDA5LzA0LzE5IDE3OjU4OjAxIDEuMTI2LjIuMQotKysrIG9wZW5zc2wvY3J5cHRvL3g1MDl2My94 NTA5djMuaCAyMDA5LzA3LzI3IDIxOjA4OjUzIDEuMTI2LjIuMgotQEAgLTY5MywxMCArNjkzLDEw IEBACi0gdm9pZCBYNTA5X1BVUlBPU0VfY2xlYW51cCh2b2lkKTsKLSBpbnQgWDUwOV9QVVJQT1NF X2dldF9pZChYNTA5X1BVUlBPU0UgKik7Ci0gCi0tU1RBQ0tfT0YoU1RSSU5HKSAqWDUwOV9nZXQx X2VtYWlsKFg1MDkgKngpOwotLVNUQUNLX09GKFNUUklORykgKlg1MDlfUkVRX2dldDFfZW1haWwo WDUwOV9SRVEgKngpOwotLXZvaWQgWDUwOV9lbWFpbF9mcmVlKFNUQUNLX09GKFNUUklORykgKnNr KTsKLS1TVEFDS19PRihTVFJJTkcpICpYNTA5X2dldDFfb2NzcChYNTA5ICp4KTsKLStTVEFDS19P RihPUEVOU1NMX1NUUklORykgKlg1MDlfZ2V0MV9lbWFpbChYNTA5ICp4KTsKLStTVEFDS19PRihP UEVOU1NMX1NUUklORykgKlg1MDlfUkVRX2dldDFfZW1haWwoWDUwOV9SRVEgKngpOwotK3ZvaWQg WDUwOV9lbWFpbF9mcmVlKFNUQUNLX09GKE9QRU5TU0xfU1RSSU5HKSAqc2spOwotK1NUQUNLX09G KE9QRU5TU0xfU1RSSU5HKSAqWDUwOV9nZXQxX29jc3AoWDUwOSAqeCk7Ci0gCi0gQVNOMV9PQ1RF VF9TVFJJTkcgKmEyaV9JUEFERFJFU1MoY29uc3QgY2hhciAqaXBhc2MpOwotIEFTTjFfT0NURVRf U1RSSU5HICphMmlfSVBBRERSRVNTX05DKGNvbnN0IGNoYXIgKmlwYXNjKTsKCmRpZmYgLS1naXQg YS9vcGVuc3NsLTEuMC4wLWJldGEzLXJlZGhhdC5wYXRjaCBiL29wZW5zc2wtMS4wLjAtYmV0YTMt cmVkaGF0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDZiOWFmLi4wMDAw MDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtYmV0YTMtcmVkaGF0LnBhdGNoCisrKyAvZGV2L251bGwK QEAgLTEsNTkgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9Db25maWd1cmUu cmVkaGF0IG9wZW5zc2wtMS4wLjAtYmV0YTMvQ29uZmlndXJlCi0tLS0gb3BlbnNzbC0xLjAuMC1i ZXRhMy9Db25maWd1cmUucmVkaGF0CTIwMDktMDctMDggMTA6NTA6NTIuMDAwMDAwMDAwICswMjAw Ci0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9Db25maWd1cmUJMjAwOS0wOC0wNCAyMjo0Njo1OS4w MDAwMDAwMDAgKzAyMDAKLUBAIC0zMzEsMzIgKzMzMSwzMiBAQCBteSAldGFibGU9KAotICMjIyMK LSAjICotZ2VuZXJpYyogaXMgZW5kaWFuLW5ldXRyYWwgdGFyZ2V0LCBidXQgLi9jb25maWcgaXMg ZnJlZSB0bwotICMgdGhyb3cgaW4gLURbQkxdX0VORElBTiwgd2hpY2hldmVyIGFwcHJvcHJpYXRl Li4uCi0tImxpbnV4LWdlbmVyaWMzMiIsImdjYzotRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBv aW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hV TksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVk Oi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCi0tImxpbnV4LXBw YyIsCSJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxk bDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtwcGMz Ml9hc219OmxpbnV4MzI6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFK T1IpLlwkKFNITElCX01JTk9SKSIsCi0rImxpbnV4LWdlbmVyaWMzMiIsImdjYzotRFRFUk1JTyAt V2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9D SEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjps aW51eC1zaGFyZWQ6LWZQSUM6XCQoUlBNX09QVF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFNRVZF UikiLAotKyJsaW51eC1wcGMiLAkiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gLVdhbGwgXCQoUlBN X09QVF9GTEFHUyk6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hV TksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtwcGMzMl9hc219OmxpbnV4MzI6ZGxmY246bGludXgt c2hhcmVkOi1mUElDOlwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpIiwK LSAjIEl0J3MgYmVsaWV2ZWQgdGhhdCBtYWpvcml0eSBvZiBBUk0gdG9vbGNoYWlucyBwcmVkZWZp bmUgYXBwcm9wcmlhdGUgLW1hcmNoLgotICMgSWYgeW91IGNvbXBpbGVyIGRvZXMgbm90LCBkbyBj b21wbGVtZW50IGNvbmZpZyBjb21tYW5kIGxpbmUgd2l0aCBvbmUhCi0tImxpbnV4LWFybXY0IiwJ ImdjYzotRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRf Q0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke2FybXY0X2FzbX06ZGxm Y246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9S KSIsCi0rImxpbnV4LWFybXY0IiwJImdjYzotRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdT KTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5U IERFU19VTlJPTEwgQkZfUFRSOiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6 XCQoUlBNX09QVF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFNRVZFUikiLAotICMjIyMgSUEtMzIg dGFyZ2V0cy4uLgotICJsaW51eC1pYTMyLWljYyIsCSJpY2M6LURMX0VORElBTiAtRFRFUk1JTyAt TzIgLW5vX2NwcHJ0OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30g JHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotS1BJQzo6 LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAotLSJsaW51eC1lbGYiLAkiZ2Nj Oi1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9S RUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7 eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9S KS5cJChTSExJQl9NSU5PUikiLAotKyJsaW51eC1lbGYiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJN SU8gLVdhbGwgXCQoUlBNX09QVF9GTEFHUyk6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAk e3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgt c2hhcmVkOi1mUElDOlwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpIiwK LSAibGludXgtYW91dCIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1l LXBvaW50ZXIgLW1hcmNoPWk0ODYgLVdhbGw6Oih1bmtub3duKTo6OkJOX0xMT05HICR7eDg2X2dj Y19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9hc219OmEub3V0IiwKLSAjIyMjCi0tImxpbnV4 LWdlbmVyaWM2NCIsImdjYzotRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpT SVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwg QkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9N QUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKLS0ibGludXgtcHBjNjQiLAkiZ2NjOi1tNjQgLURCX0VO RElBTiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJ VF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke3BwYzY0X2Fz bX06bGludXg2NDpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFK T1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKLS0ibGludXgtaWE2NCIsCSJnY2M6LURMX0VORElB TiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9M T05HIFJDNF9DSFVOSyBERVNfVU5ST0xMIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246bGludXgt c2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCi0rImxp bnV4LWdlbmVyaWM2NCIsImdjYzotRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6LURf UkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERF U19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJ QzpcJChSUE1fT1BUX0ZMQUdTKTpcJChTSExJQl9TT05BTUVWRVIpIiwKLSsibGludXgtcHBjNjQi LAkiZ2NjOi1tNjQgLURCX0VORElBTiAtRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6 LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5L IERFU19SSVNDMSBERVNfVU5ST0xMOiR7cHBjNjRfYXNtfTpsaW51eDY0OmRsZmNuOmxpbnV4LXNo YXJlZDotZlBJQzotbTY0IFwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIp Ojo6NjQiLAotKyJsaW51eC1pYTY0IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1XYWxsIFwk KFJQTV9PUFRfRkxBR1MpOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBS QzRfQ0hVTksgREVTX1VOUk9MTCBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmxpbnV4LXNoYXJl ZDotZlBJQzpcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKSIsCi0gImxp bnV4LWlhNjQtZWNjIiwiZWNjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8yIC1XYWxsIC1ub19jcHBy dDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19J TlQ6JHtpYTY0X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFK T1IpLlwkKFNITElCX01JTk9SKSIsCi0gImxpbnV4LWlhNjQtaWNjIiwiaWNjOi1ETF9FTkRJQU4g LURURVJNSU8gLU8yIC1XYWxsIC1ub19jcHBydDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZP VVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNu OmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUiki LAotLSJsaW51eC14ODZfNjQiLAkiZ2NjOi1tNjQgLURMX0VORElBTiAtRFRFUk1JTyAtTzMgLVdh bGwgLURNRDMyX1JFR19UPWludDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xP TkcgUkM0X0NIVU5LIEJGX1BUUjIgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxm OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hM SUJfTUlOT1IpOjo6NjQiLAotLSJsaW51eC1zMzkweCIsCSJnY2M6LW02NCAtREJfRU5ESUFOIC1E VEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcg UkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3MzOTB4X2FzbX06ZGxmY246 bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5P Uik6Ojo2NCIsCi0rImxpbnV4LXg4Nl82NCIsCSJnY2M6LW02NCAtRExfRU5ESUFOIC1EVEVSTUlP IC1XYWxsIFwkKFJQTV9PUFRfRkxBR1MpIC1ETUQzMl9SRUdfVD1pbnQ6Oi1EX1JFRU5UUkFOVDo6 LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBCRl9QVFIyIERFU19JTlQgREVTX1VO Uk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NCBcJChS UE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKTo6OjY0IiwKLSsibGludXgtczM5 MHgiLAkiZ2NjOi1tNjQgLURCX0VORElBTiAtRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdT KTo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NI VU5LIERFU19JTlQgREVTX1VOUk9MTDoke3MzOTB4X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1m UElDOi1tNjQgXCQoUlBNX09QVF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFNRVZFUik6Ojo2NCIs Ci0gIyMjIyBTUEFSQyBMaW51eCBzZXR1cHMKLSAjIFJheSBNaWxsZXIgPHJheS5taWxsZXJAY29t cHV0aW5nLXNlcnZpY2VzLm94Zm9yZC5hYy51az4gaGFzIHBhdGllbnRseQotICMgYXNzaXN0ZWQg d2l0aCBkZWJ1Z2dpbmcgb2YgZm9sbG93aW5nIHR3byBjb25maWdzLgotLSJsaW51eC1zcGFyY3Y4 IiwiZ2NjOi1tdjggLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIg LVdhbGwgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJD NF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjhfYXNtfTpkbGZjbjpsaW51eC1zaGFy ZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKLSsibGludXgt c3BhcmN2OCIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPIC1XYWxsIFwkKFJQTV9PUFRfRkxBR1Mp IC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hV TksgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y4X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1m UElDOlwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpIiwKLSAjIGl0J3Mg YSByZWFsIG1lc3Mgd2l0aCAtbWNwdT11bHRyYXNwYXJjIG9wdGlvbiB1bmRlciBMaW51eCwgYnV0 Ci0gIyAtV2EsLUF2OHBsdXMgc2hvdWxkIGRvIHRoZSB0cmljayBubyBtYXR0ZXIgd2hhdC4KLS0i bGludXgtc3BhcmN2OSIsImdjYzotbTMyIC1tY3B1PXVsdHJhc3BhcmMgLURCX0VORElBTiAtRFRF Uk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLVdhLC1BdjhwbHVzIC1EQk5fRElW Mlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NI VU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDot ZlBJQzotbTMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKLSsibGludXgt c3BhcmN2OSIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPIC1XYWxsIFwkKFJQTV9PUFRfRkxBR1Mp IC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sZGw6Qk5fTExPTkcgUkM0X0NI QVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOmxpbnV4 LXNoYXJlZDotZlBJQzpcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKSIs Ci0gIyBHQ0MgMy4xIGlzIGEgcmVxdWlyZW1lbnQKLS0ibGludXg2NC1zcGFyY3Y5IiwiZ2NjOi1t NjQgLW1jcHU9dWx0cmFzcGFyYyAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUt cG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxkbDpCTl9MTE9ORyBSQzRf Q0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BU Ujoke3NwYXJjdjlfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hM SUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKLSsibGludXg2NC1zcGFyY3Y5IiwiZ2Nj Oi1EQl9FTkRJQU4gLURURVJNSU8gLVdhbGwgXCQoUlBNX09QVF9GTEFHUyk6Oi1EX1JFRU5UUkFO VDpVTFRSQVNQQVJDOi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVT X1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246bGlu dXgtc2hhcmVkOi1mUElDOlwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIp Ojo6NjQiLAotICMjIyMgQWxwaGEgTGludXggd2l0aCBHTlUgQyBhbmQgQ29tcGFxIEMgc2V0dXBz Ci0gIyBTcGVjaWFsIG5vdGVzOgotICMgLSBsaW51eC1hbHBoYStid3gtZ2NjIGlzIG1lbnQgdG8g YmUgdXNlZCBmcm9tIC4vY29uZmlnIG9ubHkuIElmIHlvdQotQEAgLTM3MCw4ICszNzAsOCBAQCBt eSAldGFibGU9KAotICMKLSAjCQkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+Ci0gIwotLSJsaW51 eC1hbHBoYS1nY2MiLCJnY2M6LU8zIC1ETF9FTkRJQU4gLURURVJNSU86Oi1EX1JFRU5UUkFOVDo6 LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDok e2FscGhhX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1Ip LlwkKFNITElCX01JTk9SKSIsCi0tImxpbnV4LWFscGhhK2J3eC1nY2MiLCJnY2M6LU8zIC1ETF9F TkRJQU4gLURURVJNSU86Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJD NF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX06ZGxmY246 bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIs Ci0rImxpbnV4LWFscGhhLWdjYyIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1XYWxsIFwkKFJQ TV9PUFRfRkxBR1MpOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRf Q0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219OmRsZmNuOmxpbnV4LXNoYXJl ZDotZlBJQzpcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKSIsCi0rImxp bnV4LWFscGhhK2J3eC1nY2MiLCJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAtV2FsbCBcJChSUE1f T1BUX0ZMQUdTKTo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NI QVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfTpkbGZjbjpsaW51 eC1zaGFyZWQ6LWZQSUM6XCQoUlBNX09QVF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFNRVZFUiki LAotICJsaW51eC1hbHBoYS1jY2MiLCJjY2M6LWZhc3QgLXJlYWRvbmx5X3N0cmluZ3MgLURMX0VO RElBTiAtRFRFUk1JTzo6LURfUkVFTlRSQU5UOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hV TksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfSIsCi0g ImxpbnV4LWFscGhhK2J3eC1jY2MiLCJjY2M6LWZhc3QgLXJlYWRvbmx5X3N0cmluZ3MgLURMX0VO RElBTiAtRFRFUk1JTzo6LURfUkVFTlRSQU5UOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hB UiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFf YXNtfSIsCi0gCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMC1iZXRhMy1zc2wtZnJlZS5wYXRj aCBiL29wZW5zc2wtMS4wLjAtYmV0YTMtc3NsLWZyZWUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDYxZjU2ZWEuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMC1iZXRhMy1z c2wtZnJlZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjAtYmV0YTMvc3NsL3NzbF9saWIuYy5jdHgtZnJlZSBvcGVuc3NsLTEuMC4wLWJl dGEzL3NzbC9zc2xfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9zc2xfbGliLmMu Y3R4LWZyZWUJMjAwOS0xMC0wOCAyMDo0NDoyNi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4wLWJldGEzL3NzbC9zc2xfbGliLmMJMjAwOS0xMC0xNiAxMTo1Njo1My4wMDAwMDAwMDAg KzAyMDAKLUBAIC01NTYsNyArNTU2LDYgQEAgdm9pZCBTU0xfZnJlZShTU0wgKnMpCi0gCWlmIChz LT5jZXJ0ICE9IE5VTEwpIHNzbF9jZXJ0X2ZyZWUocy0+Y2VydCk7Ci0gCS8qIEZyZWUgdXAgaWYg YWxsb2NhdGVkICovCi0gCi0tCWlmIChzLT5jdHgpIFNTTF9DVFhfZnJlZShzLT5jdHgpOwotICNp Zm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKLSAJaWYgKHMtPnRsc2V4dF9ob3N0bmFtZSkKLSAJCU9Q RU5TU0xfZnJlZShzLT50bHNleHRfaG9zdG5hbWUpOwotQEAgLTU4MCw2ICs1NzksOCBAQCB2b2lk IFNTTF9mcmVlKFNTTCAqcykKLSAKLSAJaWYgKHMtPm1ldGhvZCAhPSBOVUxMKSBzLT5tZXRob2Qt PnNzbF9mcmVlKHMpOwotIAotKwlpZiAocy0+Y3R4KSBTU0xfQ1RYX2ZyZWUocy0+Y3R4KTsKLSsK LSAjaWZuZGVmCU9QRU5TU0xfTk9fS1JCNQotIAlpZiAocy0+a3NzbF9jdHggIT0gTlVMTCkKLSAJ CWtzc2xfY3R4X2ZyZWUocy0+a3NzbF9jdHgpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRh My9zc2wvczNfbGliLmMuaGJ1Zi1jbGVhciBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9zM19saWIu YwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTMvc3NsL3MzX2xpYi5jLmhidWYtY2xlYXIJMjAwOS0w NS0yOCAyMDoxMDo0Ny4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGEzL3Nz bC9zM19saWIuYwkyMDA5LTEwLTE2IDA5OjUwOjI0LjAwMDAwMDAwMCArMDIwMAotQEAgLTIyMTEs NiArMjIxMSw3IEBAIHZvaWQgc3NsM19jbGVhcihTU0wgKnMpCi0gIAl3bGVuID0gcy0+czMtPndi dWYubGVuOwotIAlpZiAocy0+czMtPmhhbmRzaGFrZV9idWZmZXIpIHsKLSAJCUJJT19mcmVlKHMt PnMzLT5oYW5kc2hha2VfYnVmZmVyKTsKLSsJCXMtPnMzLT5oYW5kc2hha2VfYnVmZmVyID0gTlVM TDsKLSAJfQotIAlpZiAocy0+czMtPmhhbmRzaGFrZV9kZ3N0KSB7Ci0gCQlzc2wzX2ZyZWVfZGln ZXN0X2xpc3Qocyk7CgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMC1iZXRhMy1zc2wtc2Vzc2lv bi5wYXRjaCBiL29wZW5zc2wtMS4wLjAtYmV0YTMtc3NsLXNlc3Npb24ucGF0Y2gKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyM2I4NzEuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAu MC1iZXRhMy1zc2wtc2Vzc2lvbi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAK LUluZGV4OiBvcGVuc3NsL3NzbC9zc2xfYXNuMS5jCi1SQ1MgRmlsZTogL3Yvb3BlbnNzbC9jdnMv b3BlbnNzbC9zc2wvc3NsX2FzbjEuYyx2Ci1yY3NkaWZmIC1xIC1rayAnLXIxLjM2LjIuMicgJy1y MS4zNi4yLjMnIC11ICcvdi9vcGVuc3NsL2N2cy9vcGVuc3NsL3NzbC9zc2xfYXNuMS5jLHYnIDI+ L2Rldi9udWxsCi0tLS0gb3BlbnNzbC9zc2wvc3NsX2FzbjEuYyAyMDA5LzA4LzA1IDE1OjI5OjE0 IDEuMzYuMi4yCi0rKysgb3BlbnNzbC9zc2wvc3NsX2FzbjEuYyAyMDA5LzA5LzAyIDEzOjIwOjIy IDEuMzYuMi4zCi1AQCAtNDEzLDggKzQxMyw4IEBACi0gCQl9Ci0gCWVsc2UKLSAJCXsKLS0JCVNT TGVycihTU0xfRl9EMklfU1NMX1NFU1NJT04sU1NMX1JfVU5LTk9XTl9TU0xfVkVSU0lPTik7Ci0t CQlyZXR1cm4oTlVMTCk7Ci0rCQljLmVycm9yPVNTTF9SX1VOS05PV05fU1NMX1ZFUlNJT047Ci0r CQlnb3RvIGVycjsKLSAJCX0KLSAJCi0gCXJldC0+Y2lwaGVyPU5VTEw7Ci1AQCAtNTA1LDggKzUw NSw4IEBACi0gCSAgICB7Ci0gCSAgICBpZiAob3MubGVuZ3RoID4gU1NMX01BWF9TSURfQ1RYX0xF TkdUSCkKLSAJCXsKLS0JCXJldC0+c2lkX2N0eF9sZW5ndGg9b3MubGVuZ3RoOwotLQkJU1NMZXJy KFNTTF9GX0QySV9TU0xfU0VTU0lPTixTU0xfUl9CQURfTEVOR1RIKTsKLSsJCWMuZXJyb3I9U1NM X1JfQkFEX0xFTkdUSDsKLSsJCWdvdG8gZXJyOwotIAkJfQotIAkgICAgZWxzZQotIAkJewoKZGlm ZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0YTQtYWxnby1kb2MucGF0Y2ggYi9vcGVuc3NsLTEu MC4wLWJldGE0LWFsZ28tZG9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjJmMThmM2YKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuc3NsLTEuMC4wLWJldGE0LWFsZ28t ZG9jLnBhdGNoCkBAIC0wLDAgKzEsMTEzIEBACitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0 L2RvYy9jcnlwdG8vRVZQX0RpZ2VzdEluaXQucG9kLmFsZ28tZG9jIG9wZW5zc2wtMS4wLjAtYmV0 YTQvZG9jL2NyeXB0by9FVlBfRGlnZXN0SW5pdC5wb2QKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0 L2RvYy9jcnlwdG8vRVZQX0RpZ2VzdEluaXQucG9kLmFsZ28tZG9jCTIwMDktMTAtMTYgMTc6Mjk6 MzQuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9kb2MvY3J5cHRvL0VW UF9EaWdlc3RJbml0LnBvZAkyMDA5LTExLTEyIDE0OjEzOjIxLjAwMDAwMDAwMCArMDEwMAorQEAg LTYsNyArNiw4IEBAIEVWUF9NRF9DVFhfaW5pdCwgRVZQX01EX0NUWF9jcmVhdGUsIEVWUF8KKyBF VlBfRGlnZXN0RmluYWxfZXgsIEVWUF9NRF9DVFhfY2xlYW51cCwgRVZQX01EX0NUWF9kZXN0cm95 LCBFVlBfTUFYX01EX1NJWkUsCisgRVZQX01EX0NUWF9jb3B5X2V4LCBFVlBfTURfQ1RYX2NvcHks IEVWUF9NRF90eXBlLCBFVlBfTURfcGtleV90eXBlLCBFVlBfTURfc2l6ZSwKKyBFVlBfTURfYmxv Y2tfc2l6ZSwgRVZQX01EX0NUWF9tZCwgRVZQX01EX0NUWF9zaXplLCBFVlBfTURfQ1RYX2Jsb2Nr X3NpemUsIEVWUF9NRF9DVFhfdHlwZSwKKy1FVlBfbWRfbnVsbCwgRVZQX21kMiwgRVZQX21kNSwg RVZQX3NoYSwgRVZQX3NoYTEsIEVWUF9kc3MsIEVWUF9kc3MxLCBFVlBfbWRjMiwKKytFVlBfbWRf bnVsbCwgRVZQX21kMiwgRVZQX21kNSwgRVZQX3NoYSwgRVZQX3NoYTEsIEVWUF9zaGEyMjQsCisr RVZQX3NoYTI1NiwgRVZQX3NoYTM4NCwgRVZQX3NoYTUxMiwgRVZQX2RzcywgRVZQX2RzczEsIEVW UF9tZGMyLAorIEVWUF9yaXBlbWQxNjAsIEVWUF9nZXRfZGlnZXN0YnluYW1lLCBFVlBfZ2V0X2Rp Z2VzdGJ5bmlkLCBFVlBfZ2V0X2RpZ2VzdGJ5b2JqIC0KKyBFVlAgZGlnZXN0IHJvdXRpbmVzCisg CitAQCAtNTEsNiArNTIsMTAgQEAgRVZQIGRpZ2VzdCByb3V0aW5lcworICBjb25zdCBFVlBfTUQg KkVWUF9tZDUodm9pZCk7CisgIGNvbnN0IEVWUF9NRCAqRVZQX3NoYSh2b2lkKTsKKyAgY29uc3Qg RVZQX01EICpFVlBfc2hhMSh2b2lkKTsKKysgY29uc3QgRVZQX01EICpFVlBfc2hhMjI0KHZvaWQp OworKyBjb25zdCBFVlBfTUQgKkVWUF9zaGEyNTYodm9pZCk7CisrIGNvbnN0IEVWUF9NRCAqRVZQ X3NoYTM4NCh2b2lkKTsKKysgY29uc3QgRVZQX01EICpFVlBfc2hhNTEyKHZvaWQpOworICBjb25z dCBFVlBfTUQgKkVWUF9kc3Modm9pZCk7CisgIGNvbnN0IEVWUF9NRCAqRVZQX2RzczEodm9pZCk7 CisgIGNvbnN0IEVWUF9NRCAqRVZQX21kYzIodm9pZCk7CitAQCAtNzAsNyArNzUsNyBAQCBFVlBf TURfQ1RYX2NyZWF0ZSgpIGFsbG9jYXRlcywgaW5pdGlhbGl6CisgCisgRVZQX0RpZ2VzdEluaXRf ZXgoKSBzZXRzIHVwIGRpZ2VzdCBjb250ZXh0IEI8Y3R4PiB0byB1c2UgYSBkaWdlc3QKKyBCPHR5 cGU+IGZyb20gRU5HSU5FIEI8aW1wbD4uIEI8Y3R4PiBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9y ZSBjYWxsaW5nIHRoaXMKKy1mdW5jdGlvbi4gQjx0eXBlPiB3aWxsIHR5cGljYWxseSBiZSBzdXBw bGllZCBieSBhIGZ1bmN0aW9uc3VjaCBhcyBFVlBfc2hhMSgpLgorK2Z1bmN0aW9uLiBCPHR5cGU+ IHdpbGwgdHlwaWNhbGx5IGJlIHN1cHBsaWVkIGJ5IGEgZnVuY3Rpb24gc3VjaCBhcyBFVlBfc2hh MSgpLgorIElmIEI8aW1wbD4gaXMgTlVMTCB0aGVuIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9u IG9mIGRpZ2VzdCBCPHR5cGU+IGlzIHVzZWQuCisgCisgRVZQX0RpZ2VzdFVwZGF0ZSgpIGhhc2hl cyBCPGNudD4gYnl0ZXMgb2YgZGF0YSBhdCBCPGQ+IGludG8gdGhlCitAQCAtMTI3LDkgKzEzMiwx MSBAQCB3aXRoIHRoaXMgZGlnZXN0LiBGb3IgZXhhbXBsZSBFVlBfc2hhMSgpCisgcmV0dXJuIEI8 TklEX3NoYTFXaXRoUlNBRW5jcnlwdGlvbj4uIFRoaXMgImxpbmsiIGJldHdlZW4gZGlnZXN0cyBh bmQgc2lnbmF0dXJlCisgYWxnb3JpdGhtcyBtYXkgbm90IGJlIHJldGFpbmVkIGluIGZ1dHVyZSB2 ZXJzaW9ucyBvZiBPcGVuU1NMLgorIAorLUVWUF9tZDIoKSwgRVZQX21kNSgpLCBFVlBfc2hhKCks IEVWUF9zaGExKCksIEVWUF9tZGMyKCkgYW5kIEVWUF9yaXBlbWQxNjAoKQorLXJldHVybiBCPEVW UF9NRD4gc3RydWN0dXJlcyBmb3IgdGhlIE1EMiwgTUQ1LCBTSEEsIFNIQTEsIE1EQzIgYW5kIFJJ UEVNRDE2MCBkaWdlc3QKKy1hbGdvcml0aG1zIHJlc3BlY3RpdmVseS4gVGhlIGFzc29jaWF0ZWQg c2lnbmF0dXJlIGFsZ29yaXRobSBpcyBSU0EgaW4gZWFjaCBjYXNlLgorK0VWUF9tZDIoKSwgRVZQ X21kNSgpLCBFVlBfc2hhKCksIEVWUF9zaGExKCksIEVWUF9zaGEyMjQoKSwgRVZQX3NoYTI1Nigp LAorK0VWUF9zaGEzODQoKSwgRVZQX3NoYTUxMigpLCBFVlBfbWRjMigpIGFuZCBFVlBfcmlwZW1k MTYwKCkKKytyZXR1cm4gQjxFVlBfTUQ+IHN0cnVjdHVyZXMgZm9yIHRoZSBNRDIsIE1ENSwgU0hB LCBTSEExLCBTSEEyMjQsIFNIQTI1NiwgU0hBMzg0LAorK1NIQTUxMiwgTURDMiBhbmQgUklQRU1E MTYwIGRpZ2VzdCBhbGdvcml0aG1zIHJlc3BlY3RpdmVseS4gVGhlIGFzc29jaWF0ZWQKKytzaWdu YXR1cmUgYWxnb3JpdGhtIGlzIFJTQSBpbiBlYWNoIGNhc2UuCisgCisgRVZQX2RzcygpIGFuZCBF VlBfZHNzMSgpIHJldHVybiBCPEVWUF9NRD4gc3RydWN0dXJlcyBmb3IgU0hBIGFuZCBTSEExIGRp Z2VzdAorIGFsZ29yaXRobXMgYnV0IHVzaW5nIERTUyAoRFNBKSBmb3IgdGhlIHNpZ25hdHVyZSBh bGdvcml0aG0uIE5vdGU6IHRoZXJlIGlzIAorQEAgLTE1OCw3ICsxNjUsOCBAQCBFVlBfTURfc2l6 ZSgpLCBFVlBfTURfYmxvY2tfc2l6ZSgpLCBFVlBfCisgRVZQX01EX0NUWF9ibG9ja19zaXplKCkJ YW5kIEVWUF9NRF9ibG9ja19zaXplKCkgcmV0dXJuIHRoZSBkaWdlc3Qgb3IgYmxvY2sKKyBzaXpl IGluIGJ5dGVzLgorIAorLUVWUF9tZF9udWxsKCksIEVWUF9tZDIoKSwgRVZQX21kNSgpLCBFVlBf c2hhKCksIEVWUF9zaGExKCksIEVWUF9kc3MoKSwKKytFVlBfbWRfbnVsbCgpLCBFVlBfbWQyKCks IEVWUF9tZDUoKSwgRVZQX3NoYSgpLCBFVlBfc2hhMSgpLAorK0VWUF9zaGEyMjQoKSwgRVZQX3No YTI1NigpLCBFVlBfc2hhMzg0KCksIEVWUF9zaGE1MTIoKSwgRVZQX2RzcygpLAorIEVWUF9kc3Mx KCksIEVWUF9tZGMyKCkgYW5kIEVWUF9yaXBlbWQxNjAoKSByZXR1cm4gcG9pbnRlcnMgdG8gdGhl CisgY29ycmVzcG9uZGluZyBFVlBfTUQgc3RydWN0dXJlcy4KKyAKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjAtYmV0YTQvZG9jL2NyeXB0by9FVlBfRW5jcnlwdEluaXQucG9kLmFsZ28tZG9jIG9wZW5z c2wtMS4wLjAtYmV0YTQvZG9jL2NyeXB0by9FVlBfRW5jcnlwdEluaXQucG9kCistLS0gb3BlbnNz bC0xLjAuMC1iZXRhNC9kb2MvY3J5cHRvL0VWUF9FbmNyeXB0SW5pdC5wb2QuYWxnby1kb2MJMjAw NS0wNC0xNSAxODowMTozNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0 L2RvYy9jcnlwdG8vRVZQX0VuY3J5cHRJbml0LnBvZAkyMDA5LTExLTEyIDE0OjExOjAzLjAwMDAw MDAwMCArMDEwMAorQEAgLTkxLDYgKzkxLDMyIEBAIEVWUF9DSVBIRVJfQ1RYX3NldF9wYWRkaW5n IC0gRVZQIGNpcGhlciAKKyAgaW50IEVWUF9DSVBIRVJfcGFyYW1fdG9fYXNuMShFVlBfQ0lQSEVS X0NUWCAqYywgQVNOMV9UWVBFICp0eXBlKTsKKyAgaW50IEVWUF9DSVBIRVJfYXNuMV90b19wYXJh bShFVlBfQ0lQSEVSX0NUWCAqYywgQVNOMV9UWVBFICp0eXBlKTsKKyAKKysgY29uc3QgRVZQX0NJ UEhFUiAqRVZQX2Rlc19lZGUzKHZvaWQpOworKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfZGVzX2Vk ZTNfZWNiKHZvaWQpOworKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfZGVzX2VkZTNfY2ZiNjQodm9p ZCk7CisrIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9kZXNfZWRlM19jZmIxKHZvaWQpOworKyBjb25z dCBFVlBfQ0lQSEVSICpFVlBfZGVzX2VkZTNfY2ZiOCh2b2lkKTsKKysgY29uc3QgRVZQX0NJUEhF UiAqRVZQX2Rlc19lZGUzX29mYih2b2lkKTsKKysgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Rlc19l ZGUzX2NiYyh2b2lkKTsKKysgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xMjhfZWNiKHZvaWQp OworKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzEyOF9jYmModm9pZCk7CisrIGNvbnN0IEVW UF9DSVBIRVIgKkVWUF9hZXNfMTI4X2NmYjEodm9pZCk7CisrIGNvbnN0IEVWUF9DSVBIRVIgKkVW UF9hZXNfMTI4X2NmYjgodm9pZCk7CisrIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTI4X2Nm YjEyOCh2b2lkKTsKKysgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xMjhfb2ZiKHZvaWQpOwor KyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml9lY2Iodm9pZCk7CisrIGNvbnN0IEVWUF9D SVBIRVIgKkVWUF9hZXNfMTkyX2NiYyh2b2lkKTsKKysgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Fl c18xOTJfY2ZiMSh2b2lkKTsKKysgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xOTJfY2ZiOCh2 b2lkKTsKKysgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xOTJfY2ZiMTI4KHZvaWQpOworKyBj b25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml9vZmIodm9pZCk7CisrIGNvbnN0IEVWUF9DSVBI RVIgKkVWUF9hZXNfMjU2X2VjYih2b2lkKTsKKysgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18y NTZfY2JjKHZvaWQpOworKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9jZmIxKHZvaWQp OworKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9jZmI4KHZvaWQpOworKyBjb25zdCBF VlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9jZmIxMjgodm9pZCk7CisrIGNvbnN0IEVWUF9DSVBIRVIg KkVWUF9hZXNfMjU2X29mYih2b2lkKTsKKysKKyA9aGVhZDEgREVTQ1JJUFRJT04KKyAKKyBUaGUg RVZQIGNpcGhlciByb3V0aW5lcyBhcmUgYSBoaWdoIGxldmVsIGludGVyZmFjZSB0byBjZXJ0YWlu CitAQCAtMjk3LDYgKzMyMywxOCBAQCBUaHJlZSBrZXkgdHJpcGxlIERFUyBpbiBDQkMsIEVDQiwg Q0ZCIGFuCisgCisgREVTWCBhbGdvcml0aG0gaW4gQ0JDIG1vZGUuCisgCisrPWl0ZW0gRVZQX2Fl c18xMjhfY2JjKHZvaWQpLCBFVlBfYWVzXzEyOF9lY2IoKSwgRVZQX2Flc18xMjhfb2ZiKHZvaWQp LCBFVlBfYWVzXzEyOF9jZmIxKHZvaWQpLCBFVlBfYWVzXzEyOF9jZmI4KHZvaWQpLCBFVlBfYWVz XzEyOF9jZmIxMjgodm9pZCkKKysKKytBRVMgd2l0aCAxMjggYml0IGtleSBsZW5ndGggaW4gQ0JD LCBFQ0IsIE9GQiBhbmQgQ0ZCIG1vZGVzIHJlc3BlY3RpdmVseS4KKysKKys9aXRlbSBFVlBfYWVz XzE5Ml9jYmModm9pZCksIEVWUF9hZXNfMTkyX2VjYigpLCBFVlBfYWVzXzE5Ml9vZmIodm9pZCks IEVWUF9hZXNfMTkyX2NmYjEodm9pZCksIEVWUF9hZXNfMTkyX2NmYjgodm9pZCksIEVWUF9hZXNf MTkyX2NmYjEyOCh2b2lkKQorKworK0FFUyB3aXRoIDE5MiBiaXQga2V5IGxlbmd0aCBpbiBDQkMs IEVDQiwgT0ZCIGFuZCBDRkIgbW9kZXMgcmVzcGVjdGl2ZWx5LgorKworKz1pdGVtIEVWUF9hZXNf MjU2X2NiYyh2b2lkKSwgRVZQX2Flc18yNTZfZWNiKCksIEVWUF9hZXNfMjU2X29mYih2b2lkKSwg RVZQX2Flc18yNTZfY2ZiMSh2b2lkKSwgRVZQX2Flc18yNTZfY2ZiOCh2b2lkKSwgRVZQX2Flc18y NTZfY2ZiMTI4KHZvaWQpCisrCisrQUVTIHdpdGggMjU2IGJpdCBrZXkgbGVuZ3RoIGluIENCQywg RUNCLCBPRkIgYW5kIENGQiBtb2RlcyByZXNwZWN0aXZlbHkuCisrCisgPWl0ZW0gRVZQX3JjNCh2 b2lkKQorIAorIFJDNCBzdHJlYW0gY2lwaGVyLiBUaGlzIGlzIGEgdmFyaWFibGUga2V5IGxlbmd0 aCBjaXBoZXIgd2l0aCBkZWZhdWx0IGtleSBsZW5ndGggMTI4IGJpdHMuCgpkaWZmIC0tZ2l0IGEv b3BlbnNzbC0xLjAuMC1iZXRhNC1iaW51dGlscy5wYXRjaCBiL29wZW5zc2wtMS4wLjAtYmV0YTQt YmludXRpbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM5YjJl NgotLS0gL2Rldi9udWxsCisrKyBiL29wZW5zc2wtMS4wLjAtYmV0YTQtYmludXRpbHMucGF0Y2gK QEAgLTAsMCArMSw1NiBAQAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWQ1 L2FzbS9tZDUteDg2XzY0LnBsLmJpbnV0aWxzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21k NS9hc20vbWQ1LXg4Nl82NC5wbAorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kNS9h c20vbWQ1LXg4Nl82NC5wbC5iaW51dGlscwkyMDA5LTExLTEyIDE1OjE3OjI5LjAwMDAwMDAwMCAr MDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kNS9hc20vbWQ1LXg4Nl82NC5w bAkyMDA5LTExLTEyIDE3OjI2OjA4LjAwMDAwMDAwMCArMDEwMAorQEAgLTE5LDYgKzE5LDcgQEAg bXkgJGNvZGU7Cisgc3ViIHJvdW5kMV9zdGVwCisgeworICAgICBteSAoJHBvcywgJGRzdCwgJHgs ICR5LCAkeiwgJGtfbmV4dCwgJFRfaSwgJHMpID0gQF87CisrICAgICRUX2kgPSB1bnBhY2soImwi LHBhY2soImwiLCBoZXgoJFRfaSkpKTsgIyBjb252ZXJ0IHRvIDMyLWJpdCBzaWduZWQgZGVjaW1h bAorICAgICAkY29kZSAuPSAiIG1vdgkwKjQoJXJzaSksCSVyMTBkCQkvKiAoTkVYVCBTVEVQKSBY WzBdICovXG4iIGlmICgkcG9zID09IC0xKTsKKyAgICAgJGNvZGUgLj0gIiBtb3YJJWVkeCwJCSVy MTFkCQkvKiAoTkVYVCBTVEVQKSB6JyA9ICVlZHggKi9cbiIgaWYgKCRwb3MgPT0gLTEpOworICAg ICAkY29kZSAuPSA8PEVPRjsKK0BAIC00Myw2ICs0NCw3IEBAIEVPRgorIHN1YiByb3VuZDJfc3Rl cAorIHsKKyAgICAgbXkgKCRwb3MsICRkc3QsICR4LCAkeSwgJHosICRrX25leHQsICRUX2ksICRz KSA9IEBfOworKyAgICAkVF9pID0gdW5wYWNrKCJsIixwYWNrKCJsIiwgaGV4KCRUX2kpKSk7ICMg Y29udmVydCB0byAzMi1iaXQgc2lnbmVkIGRlY2ltYWwKKyAgICAgJGNvZGUgLj0gIiBtb3YJMSo0 KCVyc2kpLAklcjEwZAkJLyogKE5FWFQgU1RFUCkgWFsxXSAqL1xuIiBpZiAoJHBvcyA9PSAtMSk7 CisgICAgICRjb2RlIC49ICIgbW92CSVlZHgsCQklcjExZAkJLyogKE5FWFQgU1RFUCkgeicgPSAl ZWR4ICovXG4iIGlmICgkcG9zID09IC0xKTsKKyAgICAgJGNvZGUgLj0gIiBtb3YJJWVkeCwJCSVy MTJkCQkvKiAoTkVYVCBTVEVQKSB6JyA9ICVlZHggKi9cbiIgaWYgKCRwb3MgPT0gLTEpOworQEAg LTY5LDYgKzcxLDcgQEAgRU9GCisgc3ViIHJvdW5kM19zdGVwCisgeworICAgICBteSAoJHBvcywg JGRzdCwgJHgsICR5LCAkeiwgJGtfbmV4dCwgJFRfaSwgJHMpID0gQF87CisrICAgICRUX2kgPSB1 bnBhY2soImwiLHBhY2soImwiLCBoZXgoJFRfaSkpKTsgIyBjb252ZXJ0IHRvIDMyLWJpdCBzaWdu ZWQgZGVjaW1hbAorICAgICAkY29kZSAuPSAiIG1vdgk1KjQoJXJzaSksCSVyMTBkCQkvKiAoTkVY VCBTVEVQKSBYWzVdICovXG4iIGlmICgkcG9zID09IC0xKTsKKyAgICAgJGNvZGUgLj0gIiBtb3YJ JWVjeCwJCSVyMTFkCQkvKiAoTkVYVCBTVEVQKSB5JyA9ICVlY3ggKi9cbiIgaWYgKCRwb3MgPT0g LTEpOworICAgICAkY29kZSAuPSA8PEVPRjsKK0BAIC05MSw2ICs5NCw3IEBAIEVPRgorIHN1YiBy b3VuZDRfc3RlcAorIHsKKyAgICAgbXkgKCRwb3MsICRkc3QsICR4LCAkeSwgJHosICRrX25leHQs ICRUX2ksICRzKSA9IEBfOworKyAgICAkVF9pID0gdW5wYWNrKCJsIixwYWNrKCJsIiwgaGV4KCRU X2kpKSk7ICMgY29udmVydCB0byAzMi1iaXQgc2lnbmVkIGRlY2ltYWwKKyAgICAgJGNvZGUgLj0g IiBtb3YJMCo0KCVyc2kpLAklcjEwZAkJLyogKE5FWFQgU1RFUCkgWFswXSAqL1xuIiBpZiAoJHBv cyA9PSAtMSk7CisgICAgICRjb2RlIC49ICIgbW92CVwkMHhmZmZmZmZmZiwJJXIxMWRcbiIgaWYg KCRwb3MgPT0gLTEpOworICAgICAkY29kZSAuPSAiIHhvcgklZWR4LAkJJXIxMWQJCS8qIChORVhU IFNURVApIG5vdCB6JyA9IG5vdCAlZWR4Ki9cbiIKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL3NoYS9hc20vc2hhMS14ODZfNjQucGwuYmludXRpbHMgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vc2hhL2FzbS9zaGExLXg4Nl82NC5wbAorLS0tIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL3NoYS9hc20vc2hhMS14ODZfNjQucGwuYmludXRpbHMJMjAwOS0xMS0xMiAxNTox NzoyOS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9zaGEv YXNtL3NoYTEteDg2XzY0LnBsCTIwMDktMTEtMTIgMTc6MjQ6MTguMDAwMDAwMDAwICswMTAwCitA QCAtMTUwLDcgKzE1MCw3IEBAIF9fXworIHN1YiBCT0RZXzIwXzM5IHsKKyBteSAoJGksJGEsJGIs JGMsJGQsJGUsJGYpPUBfOworIG15ICRqPSRpKzE7CistbXkgJEs9KCRpPDQwKT8weDZlZDllYmEx OjB4Y2E2MmMxZDY7CisrbXkgJEs9KCRpPDQwKT8weDZlZDllYmExOi0weDM1OWQzZTJhOworICRj b2RlLj08PF9fXyBpZiAoJGk8NzkpOworIAlsZWEJJEsoJHhpLCRlKSwkZgorIAltb3YJYDQqKCRq JTE2KWAoJXJzcCksJHhpCitAQCAtMTg3LDcgKzE4Nyw3IEBAIHN1YiBCT0RZXzQwXzU5IHsKKyBt eSAoJGksJGEsJGIsJGMsJGQsJGUsJGYpPUBfOworIG15ICRqPSRpKzE7CisgJGNvZGUuPTw8X19f OworLQlsZWEJMHg4ZjFiYmNkYygkeGksJGUpLCRmCisrCWxlYQktMHg3MGU0NDMyNCgkeGksJGUp LCRmCisgCW1vdglgNCooJGolMTYpYCglcnNwKSwkeGkKKyAJbW92CSRiLCR0MAorIAltb3YJJGIs JHQxCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMC1iZXRhNC1jYS1kaXIucGF0Y2ggYi9vcGVu c3NsLTEuMC4wLWJldGE0LWNhLWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi43NTFjYWJkCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMC1iZXRhNC1j YS1kaXIucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRh NC9hcHBzL0NBLnBsLmluLmNhLWRpciBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvQ0EucGwuaW4K Ky0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvQ0EucGwuaW4uY2EtZGlyCTIwMDYtMDQtMjgg MDI6MzA6NDkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9hcHBzL0NB LnBsLmluCTIwMDktMTEtMTIgMTI6MzM6MTMuMDAwMDAwMDAwICswMTAwCitAQCAtNTMsNyArNTMs NyBAQCAkVkVSSUZZPSIkb3BlbnNzbCB2ZXJpZnkiOworICRYNTA5PSIkb3BlbnNzbCB4NTA5IjsK KyAkUEtDUzEyPSIkb3BlbnNzbCBwa2NzMTIiOworIAorLSRDQVRPUD0iLi9kZW1vQ0EiOworKyRD QVRPUD0iL2V0Yy9wa2kvQ0EiOworICRDQUtFWT0iY2FrZXkucGVtIjsKKyAkQ0FSRVE9ImNhcmVx LnBlbSI7CisgJENBQ0VSVD0iY2FjZXJ0LnBlbSI7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGE0L2FwcHMvQ0Euc2guY2EtZGlyIG9wZW5zc2wtMS4wLjAtYmV0YTQvYXBwcy9DQS5zaAorLS0t IG9wZW5zc2wtMS4wLjAtYmV0YTQvYXBwcy9DQS5zaC5jYS1kaXIJMjAwOS0xMC0xNSAxOToyNzo0 Ny4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvQ0Euc2gJMjAw OS0xMS0xMiAxMjozNToxNC4wMDAwMDAwMDAgKzAxMDAKK0BAIC02OCw3ICs2OCw3IEBAIFZFUklG WT0iJE9QRU5TU0wgdmVyaWZ5IgorIFg1MDk9IiRPUEVOU1NMIHg1MDkiCisgUEtDUzEyPSJvcGVu c3NsIHBrY3MxMiIKKyAKKy1pZiBbIC16ICIkQ0FUT1AiIF0gOyB0aGVuIENBVE9QPS4vZGVtb0NB IDsgZmkKKytpZiBbIC16ICIkQ0FUT1AiIF0gOyB0aGVuIENBVE9QPS9ldGMvcGtpL0NBIDsgZmkK KyBDQUtFWT0uL2Nha2V5LnBlbQorIENBUkVRPS4vY2FyZXEucGVtCisgQ0FDRVJUPS4vY2FjZXJ0 LnBlbQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9hcHBzL29wZW5zc2wuY25mLmNhLWRp ciBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvb3BlbnNzbC5jbmYKKy0tLSBvcGVuc3NsLTEuMC4w LWJldGE0L2FwcHMvb3BlbnNzbC5jbmYuY2EtZGlyCTIwMDktMTEtMTIgMTI6MzM6MTMuMDAwMDAw MDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9hcHBzL29wZW5zc2wuY25mCTIwMDkt MTEtMTIgMTI6MzM6MTMuMDAwMDAwMDAwICswMTAwCitAQCAtMzksNyArMzksNyBAQCBkZWZhdWx0 X2NhCT0gQ0FfZGVmYXVsdAkJIyBUaGUgZGVmYXVsdCBjCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyBbIENBX2Rl ZmF1bHQgXQorIAorLWRpcgkJPSAuL2RlbW9DQQkJIyBXaGVyZSBldmVyeXRoaW5nIGlzIGtlcHQK KytkaXIJCT0gL2V0Yy9wa2kvQ0EJCSMgV2hlcmUgZXZlcnl0aGluZyBpcyBrZXB0CisgY2VydHMJ CT0gJGRpci9jZXJ0cwkJIyBXaGVyZSB0aGUgaXNzdWVkIGNlcnRzIGFyZSBrZXB0CisgY3JsX2Rp cgkJPSAkZGlyL2NybAkJIyBXaGVyZSB0aGUgaXNzdWVkIGNybCBhcmUga2VwdAorIGRhdGFiYXNl CT0gJGRpci9pbmRleC50eHQJIyBkYXRhYmFzZSBpbmRleCBmaWxlLgoKZGlmZiAtLWdpdCBhL29w ZW5zc2wtMS4wLjAtYmV0YTQtZGVmYXVsdC1wYXRocy5wYXRjaCBiL29wZW5zc2wtMS4wLjAtYmV0 YTQtZGVmYXVsdC1wYXRocy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li4wYjQ4YTI3Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMC1iZXRhNC1kZWZhdWx0 LXBhdGhzLnBhdGNoCkBAIC0wLDAgKzEsNzcgQEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0 YTQvYXBwcy9zX2NsaWVudC5jLmRlZmF1bHQtcGF0aHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9hcHBz L3NfY2xpZW50LmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvc19jbGllbnQuYy5kZWZh dWx0LXBhdGhzCTIwMDktMDgtMTIgMTU6MjE6MjYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNz bC0xLjAuMC1iZXRhNC9hcHBzL3NfY2xpZW50LmMJMjAwOS0xMS0xMiAxMjoyNjozMi4wMDAwMDAw MDAgKzAxMDAKK0BAIC04ODksMTIgKzg4OSwxMyBAQCBiYWQ6CisgCWlmICghc2V0X2NlcnRfa2V5 X3N0dWZmKGN0eCxjZXJ0LGtleSkpCisgCQlnb3RvIGVuZDsKKyAKKy0JaWYgKCghU1NMX0NUWF9s b2FkX3ZlcmlmeV9sb2NhdGlvbnMoY3R4LENBZmlsZSxDQXBhdGgpKSB8fAorLQkJKCFTU0xfQ1RY X3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyhjdHgpKSkKKysJaWYgKCFTU0xfQ1RYX2xvYWRfdmVy aWZ5X2xvY2F0aW9ucyhjdHgsQ0FmaWxlLENBcGF0aCkpCisrCQl7CisrCQlFUlJfcHJpbnRfZXJy b3JzKGJpb19lcnIpOworKwkJfQorKwlpZiAoIVNTTF9DVFhfc2V0X2RlZmF1bHRfdmVyaWZ5X3Bh dGhzKGN0eCkpCisgCQl7CistCQkvKiBCSU9fcHJpbnRmKGJpb19lcnIsImVycm9yIHNldHRpbmcg ZGVmYXVsdCB2ZXJpZnkgbG9jYXRpb25zXG4iKTsgKi8KKyAJCUVSUl9wcmludF9lcnJvcnMoYmlv X2Vycik7CistCQkvKiBnb3RvIGVuZDsgKi8KKyAJCX0KKyAKKyAjaWZuZGVmIE9QRU5TU0xfTk9f VExTRVhUCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvc19zZXJ2ZXIuYy5kZWZh dWx0LXBhdGhzIG9wZW5zc2wtMS4wLjAtYmV0YTQvYXBwcy9zX3NlcnZlci5jCistLS0gb3BlbnNz bC0xLjAuMC1iZXRhNC9hcHBzL3Nfc2VydmVyLmMuZGVmYXVsdC1wYXRocwkyMDA5LTEwLTI4IDE4 OjQ5OjM3LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvYXBwcy9zX3Nl cnZlci5jCTIwMDktMTEtMTIgMTI6MzE6MjMuMDAwMDAwMDAwICswMTAwCitAQCAtMTQwOCwxMiAr MTQwOCwxMyBAQCBiYWQ6CisgCQl9CisgI2VuZGlmCisgCistCWlmICgoIVNTTF9DVFhfbG9hZF92 ZXJpZnlfbG9jYXRpb25zKGN0eCxDQWZpbGUsQ0FwYXRoKSkgfHwKKy0JCSghU1NMX0NUWF9zZXRf ZGVmYXVsdF92ZXJpZnlfcGF0aHMoY3R4KSkpCisrCWlmICghU1NMX0NUWF9sb2FkX3ZlcmlmeV9s b2NhdGlvbnMoY3R4LENBZmlsZSxDQXBhdGgpKQorKwkJeworKwkJRVJSX3ByaW50X2Vycm9ycyhi aW9fZXJyKTsKKysJCX0KKysJaWYgKCFTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyhj dHgpKQorIAkJeworLQkJLyogQklPX3ByaW50ZihiaW9fZXJyLCJYNTA5X2xvYWRfdmVyaWZ5X2xv Y2F0aW9uc1xuIik7ICovCisgCQlFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOworLQkJLyogZ290 byBlbmQ7ICovCisgCQl9CisgCWlmICh2cG0pCisgCQlTU0xfQ1RYX3NldDFfcGFyYW0oY3R4LCB2 cG0pOworQEAgLTE0NjUsOCArMTQ2NiwxMSBAQCBiYWQ6CisgCQllbHNlCisgCQkJU1NMX0NUWF9z ZXNzX3NldF9jYWNoZV9zaXplKGN0eDIsMTI4KTsKKyAKKy0JCWlmICgoIVNTTF9DVFhfbG9hZF92 ZXJpZnlfbG9jYXRpb25zKGN0eDIsQ0FmaWxlLENBcGF0aCkpIHx8CistCQkJKCFTU0xfQ1RYX3Nl dF9kZWZhdWx0X3ZlcmlmeV9wYXRocyhjdHgyKSkpCisrCQlpZiAoIVNTTF9DVFhfbG9hZF92ZXJp ZnlfbG9jYXRpb25zKGN0eDIsQ0FmaWxlLENBcGF0aCkpCisrCQkJeworKwkJCUVSUl9wcmludF9l cnJvcnMoYmlvX2Vycik7CisrCQkJfQorKwkJaWYgKCFTU0xfQ1RYX3NldF9kZWZhdWx0X3Zlcmlm eV9wYXRocyhjdHgyKSkKKyAJCQl7CisgCQkJRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKKyAJ CQl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvc190aW1lLmMuZGVmYXVsdC1w YXRocyBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvc190aW1lLmMKKy0tLSBvcGVuc3NsLTEuMC4w LWJldGE0L2FwcHMvc190aW1lLmMuZGVmYXVsdC1wYXRocwkyMDA2LTA0LTE3IDE0OjIyOjEzLjAw MDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvYXBwcy9zX3RpbWUuYwkyMDA5 LTExLTEyIDEyOjI2OjMyLjAwMDAwMDAwMCArMDEwMAorQEAgLTM3MywxMiArMzczLDEzIEBAIGlu dCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAKKyAJU1NMX2xvYWRfZXJyb3Jfc3RyaW5n cygpOworIAorLQlpZiAoKCFTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyh0bV9jdHgsQ0Fm aWxlLENBcGF0aCkpIHx8CistCQkoIVNTTF9DVFhfc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKHRt X2N0eCkpKQorKwlpZiAoIVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRtX2N0eCxDQWZp bGUsQ0FwYXRoKSkKKysJCXsKKysJCUVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7CisrCQl9Cisr CWlmICghU1NMX0NUWF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHModG1fY3R4KSkKKyAJCXsKKy0J CS8qIEJJT19wcmludGYoYmlvX2VyciwiZXJyb3Igc2V0dGluZyBkZWZhdWx0IHZlcmlmeSBsb2Nh dGlvbnNcbiIpOyAqLworIAkJRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKKy0JCS8qIGdvdG8g ZW5kOyAqLworIAkJfQorIAorIAlpZiAodG1fY2lwaGVyID09IE5VTEwpCgpkaWZmIC0tZ2l0IGEv b3BlbnNzbC0xLjAuMC1iZXRhNC1kdGxzMS1hYmkucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJldGE0 LWR0bHMxLWFiaS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTBm NTVkCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMC1iZXRhNC1kdGxzMS1hYmkucGF0 Y2gKQEAgLTAsMCArMSwyNSBAQAorQWRkaW5nIHN0cnVjdCBtZW1iZXIgaXMgQUJJIGJyZWFrZXIg aG93ZXZlciBhcyB0aGUgc3RydWN0dXJlIGlzIGFsd2F5cyBhbGxvY2F0ZWQgYnkKK3RoZSBsaWJy YXJ5IGNhbGxzIHdlIGp1c3QgbW92ZSBpdCB0byB0aGUgZW5kIGFuZCBpdCBzaG91bGQgYmUgcmVh c29uYWJseSBzYWZlLgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvZHRsczEuaC5k dGxzMS1hYmkgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvZHRsczEuaAorLS0tIG9wZW5zc2wtMS4w LjAtYmV0YTQvc3NsL2R0bHMxLmguZHRsczEtYWJpCTIwMDktMTEtMTIgMTQ6MzQ6MzcuMDAwMDAw MDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvZHRsczEuaAkyMDA5LTExLTEy IDE0OjQ3OjU3LjAwMDAwMDAwMCArMDEwMAorQEAgLTIxNiw5ICsyMTYsNiBAQCB0eXBlZGVmIHN0 cnVjdCBkdGxzMV9zdGF0ZV9zdAorIAkgKi8KKyAJcmVjb3JkX3BxdWV1ZSBidWZmZXJlZF9hcHBf ZGF0YTsKKyAKKy0JLyogSXMgc2V0IHdoZW4gbGlzdGVuaW5nIGZvciBuZXcgY29ubmVjdGlvbnMg d2l0aCBkdGxzMV9saXN0ZW4oKSAqLworLQl1bnNpZ25lZCBpbnQgbGlzdGVuOworLQorIAl1bnNp Z25lZCBpbnQgbXR1OyAvKiBtYXggRFRMUyBwYWNrZXQgc2l6ZSAqLworIAorIAlzdHJ1Y3QgaG1f aGVhZGVyX3N0IHdfbXNnX2hkcjsKK0BAIC0yNDIsNiArMjM5LDkgQEAgdHlwZWRlZiBzdHJ1Y3Qg ZHRsczFfc3RhdGVfc3QKKyAJdW5zaWduZWQgaW50IHJldHJhbnNtaXR0aW5nOworIAl1bnNpZ25l ZCBpbnQgY2hhbmdlX2NpcGhlcl9zcGVjX29rOworIAorKwkvKiBJcyBzZXQgd2hlbiBsaXN0ZW5p bmcgZm9yIG5ldyBjb25uZWN0aW9ucyB3aXRoIGR0bHMxX2xpc3RlbigpICovCisrCXVuc2lnbmVk IGludCBsaXN0ZW47CisrCisgCX0gRFRMUzFfU1RBVEU7CisgCisgdHlwZWRlZiBzdHJ1Y3QgZHRs czFfcmVjb3JkX2RhdGFfc3QKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWJldGE0LWVuZ2lu ZXNkaXIucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJldGE0LWVuZ2luZXNkaXIucGF0Y2gKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEzMDRjZQotLS0gL2Rldi9udWxsCisrKyBi L29wZW5zc2wtMS4wLjAtYmV0YTQtZW5naW5lc2Rpci5wYXRjaApAQCAtMCwwICsxLDUyIEBACitk aWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L0NvbmZpZ3VyZS5lbmdpbmVzZGlyIG9wZW5zc2wt MS4wLjAtYmV0YTQvQ29uZmlndXJlCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9Db25maWd1cmUu ZW5naW5lc2RpcgkyMDA5LTExLTEyIDEyOjE3OjU5LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2wtMS4wLjAtYmV0YTQvQ29uZmlndXJlCTIwMDktMTEtMTIgMTI6MTk6NDUuMDAwMDAwMDAwICsw MTAwCitAQCAtNjIyLDYgKzYyMiw3IEBAIG15ICRpZHhfbXVsdGlsaWIgPSAkaWR4Kys7CisgbXkg JHByZWZpeD0iIjsKKyBteSAkbGliZGlyPSIiOworIG15ICRvcGVuc3NsZGlyPSIiOworK215ICRl bmdpbmVzZGlyPSIiOworIG15ICRleGVfZXh0PSIiOworIG15ICRpbnN0YWxsX3ByZWZpeD0gIiRF TlZ7J0lOU1RBTExfUFJFRklYJ30iOworIG15ICRjcm9zc19jb21waWxlX3ByZWZpeD0iIjsKK0BA IC04MzMsNiArODM0LDEwIEBAIFBST0NFU1NfQVJHUzoKKyAJCQkJeworIAkJCQkkb3BlbnNzbGRp cj0kMTsKKyAJCQkJfQorKwkJCWVsc2lmICgvXi0tZW5naW5lc2Rpcj0oLiopJC8pCisrCQkJCXsK KysJCQkJJGVuZ2luZXNkaXI9JDE7CisrCQkJCX0KKyAJCQllbHNpZiAoL14tLWluc3RhbGwucHJl Zml4PSguKikkLykKKyAJCQkJeworIAkJCQkkaW5zdGFsbF9wcmVmaXg9JDE7CitAQCAtMTA1NSw3 ICsxMDYwLDcgQEAgY2hvcCAkcHJlZml4IGlmICRwcmVmaXggPX4gLy5cLyQvOworIAorICRvcGVu c3NsZGlyPSRwcmVmaXggLiAiL3NzbCIgaWYgJG9wZW5zc2xkaXIgZXEgIiI7CisgJG9wZW5zc2xk aXI9JHByZWZpeCAuICIvIiAuICRvcGVuc3NsZGlyIGlmICRvcGVuc3NsZGlyICF+IC8oXlwvfF5b YS16QS1aXTpbXFxcL10pLzsKKy0KKyskZW5naW5lc2Rpcj0iJHByZWZpeC9saWIvZW5naW5lcyIg aWYgJGVuZ2luZXNkaXIgZXEgIiI7CisgCisgcHJpbnQgIklzTUsxTUY9JElzTUsxTUZcbiI7Cisg CitAQCAtMTY3Niw3ICsxNjgxLDcgQEAgd2hpbGUgKDxJTj4pCisgCQkjICRmb28gaXMgdG8gYmVj b21lICIkcHJlZml4L2xpYiRtdWx0aWxpYi9lbmdpbmVzIjsKKyAJCSMgYXMgTWFrZWZpbGUub3Jn IGFuZCBlbmdpbmVzL01ha2VmaWxlIGFyZSBhZGFwdGVkIGZvcgorIAkJIyAkbXVsdGlsaWIgc3Vm Zml4LgorLQkJbXkgJGZvbyA9ICIkcHJlZml4L2xpYi9lbmdpbmVzIjsKKysJCW15ICRmb28gPSAi JGVuZ2luZXNkaXIiOworIAkJJGZvbyA9fiBzL1xcL1xcXFwvZzsKKyAJCXByaW50IE9VVCAiI2Rl ZmluZSBFTkdJTkVTRElSIFwiJGZvb1wiXG4iOworIAkJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC1iZXRhNC9lbmdpbmVzL01ha2VmaWxlLmVuZ2luZXNkaXIgb3BlbnNzbC0xLjAuMC1iZXRhNC9l bmdpbmVzL01ha2VmaWxlCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9lbmdpbmVzL01ha2VmaWxl LmVuZ2luZXNkaXIJMjAwOS0xMS0xMCAwMjo1Mjo1Mi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4wLWJldGE0L2VuZ2luZXMvTWFrZWZpbGUJMjAwOS0xMS0xMiAxMjoyMzowNi4wMDAw MDAwMDAgKzAxMDAKK0BAIC0xMjQsNyArMTI0LDcgQEAgaW5zdGFsbDoKKyAJCQkJc2Z4PSIuc28i OyBcCisgCQkJCWNwIGN5ZyQkbC5kbGwgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQo TElCRElSKS9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3OyBcCisgCQkJICBmaTsgXAorLQkJCSAg Y2htb2QgNTU1ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5l cy8kJHBmeCQkbCQkc2Z4Lm5ldzsgXAorKwkJCSAgY2htb2QgNzU1ICQoSU5TVEFMTF9QUkVGSVgp JChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHBmeCQkbCQkc2Z4Lm5ldzsgXAorIAkJ CSAgbXYgLWYgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVz LyQkcGZ4JCRsJCRzZngubmV3ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJ UikvZW5naW5lcy8kJHBmeCQkbCQkc2Z4ICk7IFwKKyAJCWRvbmU7IFwKKyAJZmkKCmRpZmYgLS1n aXQgYS9vcGVuc3NsLTEuMC4wLWJldGE0LWZpcHMucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJldGE0 LWZpcHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM4MWQ3MQot LS0gL2Rldi9udWxsCisrKyBiL29wZW5zc2wtMS4wLjAtYmV0YTQtZmlwcy5wYXRjaApAQCAtMCww ICsxLDEyMDU5IEBACitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L0NvbmZpZ3VyZS5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTQvQ29uZmlndXJlCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9D b25maWd1cmUuZmlwcwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjAtYmV0YTQvQ29uZmlndXJlCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAw ICswMTAwCitAQCAtNjYwLDYgKzY2MCw3IEBAIG15ICRjbWxsX2VuYz0iY2FtZWxsaWEubyBjbWxs X21pc2MubyBjbWwKKyBteSAkcHJvY2Vzc29yPSIiOworIG15ICRkZWZhdWx0X3JhbmxpYjsKKyBt eSAkcGVybDsKKytteSAkZmlwcz0wOworIAorIAorICMgQWxsIG9mIHRoZSBmb2xsb3dpbmcgaXMg ZGlzYWJsZWQgYnkgZGVmYXVsdCAoUkM1IHdhcyBlbmFibGVkIGJlZm9yZSAwLjkuOCk6CitAQCAt ODA2LDYgKzgwNywxMCBAQCBQUk9DRVNTX0FSR1M6CisgCQkJfQorIAkJZWxzaWYgKC9eMzg2JC8p CisgCQkJeyAkcHJvY2Vzc29yPTM4NjsgfQorKwkJZWxzaWYgKC9eZmlwcyQvKQorKwkJCXsKKysJ CQkkZmlwcz0xOworKwkJICAgICAgICB9CisgCQllbHNpZiAoL15yc2FyZWYkLykKKyAJCQl7Cisg CQkJIyBObyBSU0FyZWYgc3VwcG9ydCBhbnkgbW9yZSBzaW5jZSBpdCdzIG5vdCBuZWVkZWQuCitA QCAtMTM2OCw2ICsxMzczLDExIEBAICRjZmxhZ3MuPSIgLURPUEVOU1NMX0lBMzJfU1NFMiIgaWYg KCEkbm8KKyAKKyAkY2ZsYWdzLj0iIC1ET1BFTlNTTF9CTl9BU01fTU9OVCIgaWYgKCRibl9vYmog PX4gLy1tb250Lyk7CisgCisraWYgKCRmaXBzKQorKwl7CisrCSRvcGVuc3NsX290aGVyX2RlZmlu ZXMuPSIjZGVmaW5lIE9QRU5TU0xfRklQU1xuIjsKKysJfQorKworICRjcHVpZF9vYmo9Im1lbV9j bHIubyIJdW5sZXNzICgkY3B1aWRfb2JqID1+IC9cLm8kLyk7CisgJGRlc19vYmo9JGRlc19lbmMJ dW5sZXNzICgkZGVzX29iaiA9fiAvXC5vJC8pOworICRiZl9vYmo9JGJmX2VuYwkJdW5sZXNzICgk YmZfb2JqID1+IC9cLm8kLyk7CitAQCAtMTUzNSw2ICsxNTQ1LDEwIEBAIHdoaWxlICg8SU4+KQor IAlzL15MSUJLUkI1PS4qL0xJQktSQjU9JHdpdGhhcmdzeyJrcmI1LWxpYiJ9LzsKKyAJcy9eTElC WkxJQj0uKi9MSUJaTElCPSR3aXRoYXJnc3siemxpYi1saWIifS87CisgCXMvXlpMSUJfSU5DTFVE RT0uKi9aTElCX0lOQ0xVREU9JHdpdGhhcmdzeyJ6bGliLWluY2x1ZGUifS87CisrCWlmICgkZmlw cykKKysJCXsKKysJCXMvXkZJUFM9LiovRklQUz15ZXMvOworKwkJfQorIAlzL15TSExJQl9UQVJH RVQ9LiovU0hMSUJfVEFSR0VUPSRzaGFyZWRfdGFyZ2V0LzsKKyAJcy9eU0hMSUJfTUFSSz0uKi9T SExJQl9NQVJLPSRzaGFyZWRfbWFyay87CisgCXMvXlNIQVJFRF9MSUJTPS4qL1NIQVJFRF9MSUJT PVwkKFNIQVJFRF9DUllQVE8pIFwkKFNIQVJFRF9TU0wpLyBpZiAoISRub19zaGFyZWQpOworZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYmYvYmZfc2tleS5jLmZpcHMgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vYmYvYmZfc2tleS5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vYmYvYmZfc2tleS5jLmZpcHMJMjAwOC0xMS0xMiAwNDo1Nzo1Mi4wMDAwMDAwMDAg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9iZi9iZl9za2V5LmMJMjAwOS0x MS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC01OSwxMCArNTksMTUgQEAKKyAjaW5j bHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wv Ymxvd2Zpc2guaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworICNpbmNsdWRl ICJiZl9sb2NsLmgiCisgI2luY2x1ZGUgImJmX3BpLmgiCisgCistdm9pZCBCRl9zZXRfa2V5KEJG X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQorK0ZJUFNfTk9O X0ZJUFNfVkNJUEhFUl9Jbml0KEJGKQorIAl7CisgCWludCBpOworIAlCRl9MT05HICpwLHJpLGlu WzJdOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYmYvYmxvd2Zpc2guaC5m aXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2JmL2Jsb3dmaXNoLmgKKy0tLSBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9iZi9ibG93ZmlzaC5oLmZpcHMJMjAwOS0xMS0xMiAxMjozNjo0 OS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9iZi9ibG93 ZmlzaC5oCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMTA0LDcgKzEw NCw5IEBAIHR5cGVkZWYgc3RydWN0IGJmX2tleV9zdAorIAlCRl9MT05HIFNbNCoyNTZdOworIAl9 IEJGX0tFWTsKKyAKKy0gCisrI2lmZGVmIE9QRU5TU0xfRklQUyAKKyt2b2lkIHByaXZhdGVfQkZf c2V0X2tleShCRl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7 CisrI2VuZGlmCisgdm9pZCBCRl9zZXRfa2V5KEJGX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1 bnNpZ25lZCBjaGFyICpkYXRhKTsKKyAKKyB2b2lkIEJGX2VuY3J5cHQoQkZfTE9ORyAqZGF0YSxj b25zdCBCRl9LRVkgKmtleSk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9i bi9ibi5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYm4vYm4uaAorLS0tIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL2JuL2JuLmguZmlwcwkyMDA5LTExLTEyIDEyOjM2OjUwLjAw MDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2JuL2JuLmgJMjAw OS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC01NDAsNiArNTQwLDE3IEBAIGlu dAlCTl9pc19wcmltZV9leChjb25zdCBCSUdOVU0gKnAsaW50IG4KKyBpbnQJQk5faXNfcHJpbWVf ZmFzdHRlc3RfZXgoY29uc3QgQklHTlVNICpwLGludCBuY2hlY2tzLCBCTl9DVFggKmN0eCwKKyAJ CWludCBkb190cmlhbF9kaXZpc2lvbiwgQk5fR0VOQ0IgKmNiKTsKKyAKKytpbnQgQk5fWDkzMV9n ZW5lcmF0ZV9YcHEoQklHTlVNICpYcCwgQklHTlVNICpYcSwgaW50IG5iaXRzLCBCTl9DVFggKmN0 eCk7CisrCisraW50IEJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KEJJR05VTSAqcCwgQklHTlVNICpw MSwgQklHTlVNICpwMiwKKysJCQljb25zdCBCSUdOVU0gKlhwLCBjb25zdCBCSUdOVU0gKlhwMSwg Y29uc3QgQklHTlVNICpYcDIsCisrCQkJY29uc3QgQklHTlVNICplLCBCTl9DVFggKmN0eCwgQk5f R0VOQ0IgKmNiKTsKKytpbnQgQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChCSUdOVU0gKnAsIEJJ R05VTSAqcDEsIEJJR05VTSAqcDIsCisrCQkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLAorKwkJ CWNvbnN0IEJJR05VTSAqWHAsCisrCQkJY29uc3QgQklHTlVNICplLCBCTl9DVFggKmN0eCwKKysJ CQlCTl9HRU5DQiAqY2IpOworKworIEJOX01PTlRfQ1RYICpCTl9NT05UX0NUWF9uZXcodm9pZCAp OworIHZvaWQgQk5fTU9OVF9DVFhfaW5pdChCTl9NT05UX0NUWCAqY3R4KTsKKyBpbnQgQk5fbW9k X211bF9tb250Z29tZXJ5KEJJR05VTSAqcixjb25zdCBCSUdOVU0gKmEsY29uc3QgQklHTlVNICpi LAorZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2JuL2JuX3g5 MzFwLmMKKy0tLSAvZGV2L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYgKzAxMDAK KysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ibi9ibl94OTMxcC5jCTIwMDktMTEtMTIg MTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDI3MiBAQAorKy8qIGJuX3g5MzFw LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wu b3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0IDIwMDUuCisrICovCisrLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBh cmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAq CisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9y IHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg YWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRo ZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3Qg YmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2lu Z0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5T U0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBw ZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1 dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisr ICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMn JyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisr ICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRv Z3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5QGNyeXB0c29m dC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisr ICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8 c3RkaW8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKworKy8qIFg5LjMxIHJvdXRpbmVz IGZvciBwcmltZSBkZXJpdmF0aW9uICovCisrCisrLyogWDkuMzEgcHJpbWUgZGVyaXZhdGlvbi4g VGhpcyBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBwcmltZXMgcGkKKysgKiAocDEsIHAyLCBxMSwg cTIpIGZyb20gYSBwYXJhbWV0ZXIgWHBpIGJ5IGNoZWNraW5nIHN1Y2Nlc3NpdmUgb2RkCisrICog aW50ZWdlcnMuCisrICovCisrCisrc3RhdGljIGludCBibl94OTMxX2Rlcml2ZV9waShCSUdOVU0g KnBpLCBjb25zdCBCSUdOVU0gKlhwaSwgQk5fQ1RYICpjdHgsCisrCQkJQk5fR0VOQ0IgKmNiKQor Kwl7CisrCWludCBpID0gMDsKKysJaWYgKCFCTl9jb3B5KHBpLCBYcGkpKQorKwkJcmV0dXJuIDA7 CisrCWlmICghQk5faXNfb2RkKHBpKSAmJiAhQk5fYWRkX3dvcmQocGksIDEpKQorKwkJcmV0dXJu IDA7CisrCWZvcig7OykKKysJCXsKKysJCWkrKzsKKysJCUJOX0dFTkNCX2NhbGwoY2IsIDAsIGkp OworKwkJLyogTkIgMjcgTVIgaXMgc3BlY2lmaWNlZCBpbiBYOS4zMSAqLworKwkJaWYgKEJOX2lz X3ByaW1lX2Zhc3R0ZXN0X2V4KHBpLCAyNywgY3R4LCAxLCBjYikpCisrCQkJYnJlYWs7CisrCQlp ZiAoIUJOX2FkZF93b3JkKHBpLCAyKSkKKysJCQlyZXR1cm4gMDsKKysJCX0KKysJQk5fR0VOQ0Jf Y2FsbChjYiwgMiwgaSk7CisrCXJldHVybiAxOworKwl9CisrCisrLyogVGhpcyBpcyB0aGUgbWFp biBYOS4zMSBwcmltZSBkZXJpdmF0aW9uIGZ1bmN0aW9uLiBGcm9tIHBhcmFtZXRlcnMKKysgKiBY cDEsIFhwMiBhbmQgWHAgZGVyaXZlIHRoZSBwcmltZSBwLiBJZiB0aGUgcGFyYW1ldGVycyBwMSBv ciBwMiBhcmUKKysgKiBub3QgTlVMTCB0aGV5IHdpbGwgYmUgcmV0dXJuZWQgdG9vOiB0aGlzIGlz IG5lZWRlZCBmb3IgdGVzdGluZy4KKysgKi8KKysKKytpbnQgQk5fWDkzMV9kZXJpdmVfcHJpbWVf ZXgoQklHTlVNICpwLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLAorKwkJCWNvbnN0IEJJR05VTSAq WHAsIGNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwKKysJCQljb25zdCBCSUdO VU0gKmUsIEJOX0NUWCAqY3R4LCBCTl9HRU5DQiAqY2IpCisrCXsKKysJaW50IHJldCA9IDA7Cisr CisrCUJJR05VTSAqdCwgKnAxcDIsICpwbTE7CisrCisrCS8qIE9ubHkgZXZlbiBlIHN1cHBvcnRl ZCAqLworKwlpZiAoIUJOX2lzX29kZChlKSkKKysJCXJldHVybiAwOworKworKwlCTl9DVFhfc3Rh cnQoY3R4KTsKKysJaWYgKCFwMSkKKysJCXAxID0gQk5fQ1RYX2dldChjdHgpOworKworKwlpZiAo IXAyKQorKwkJcDIgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCisrCXQgPSBCTl9DVFhfZ2V0KGN0eCk7 CisrCisrCXAxcDIgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCisrCXBtMSA9IEJOX0NUWF9nZXQoY3R4 KTsKKysKKysJaWYgKCFibl94OTMxX2Rlcml2ZV9waShwMSwgWHAxLCBjdHgsIGNiKSkKKysJCWdv dG8gZXJyOworKworKwlpZiAoIWJuX3g5MzFfZGVyaXZlX3BpKHAyLCBYcDIsIGN0eCwgY2IpKQor KwkJZ290byBlcnI7CisrCisrCWlmICghQk5fbXVsKHAxcDIsIHAxLCBwMiwgY3R4KSkKKysJCWdv dG8gZXJyOworKworKwkvKiBGaXJzdCBzZXQgcCB0byB2YWx1ZSBvZiBScCAqLworKworKwlpZiAo IUJOX21vZF9pbnZlcnNlKHAsIHAyLCBwMSwgY3R4KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAo IUJOX211bChwLCBwLCBwMiwgY3R4KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIUJOX21vZF9p bnZlcnNlKHQsIHAxLCBwMiwgY3R4KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIUJOX211bCh0 LCB0LCBwMSwgY3R4KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIUJOX3N1YihwLCBwLCB0KSkK KysJCWdvdG8gZXJyOworKworKwlpZiAocC0+bmVnICYmICFCTl9hZGQocCwgcCwgcDFwMikpCisr CQlnb3RvIGVycjsKKysKKysJLyogcCBub3cgZXF1YWxzIFJwICovCisrCisrCWlmICghQk5fbW9k X3N1YihwLCBwLCBYcCwgcDFwMiwgY3R4KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIUJOX2Fk ZChwLCBwLCBYcCkpCisrCQlnb3RvIGVycjsKKysKKysJLyogcCBub3cgZXF1YWxzIFlwMCAqLwor KworKwlmb3IgKDs7KQorKwkJeworKwkJaW50IGkgPSAxOworKwkJQk5fR0VOQ0JfY2FsbChjYiwg MCwgaSsrKTsKKysJCWlmICghQk5fY29weShwbTEsIHApKQorKwkJCWdvdG8gZXJyOworKwkJaWYg KCFCTl9zdWJfd29yZChwbTEsIDEpKQorKwkJCWdvdG8gZXJyOworKwkJaWYgKCFCTl9nY2QodCwg cG0xLCBlLCBjdHgpKQorKwkJCWdvdG8gZXJyOworKwkJaWYgKEJOX2lzX29uZSh0KQorKwkJLyog WDkuMzEgc3BlY2lmaWVzIDggTVIgYW5kIDEgTHVjYXMgdGVzdCBvciBhbnkgcHJpbWUgdGVzdAor KwkJICogb2ZmZXJpbmcgc2ltaWxhciBvciBiZXR0ZXIgZ3VhcmFudGVlcyA1MCBNUiBpcyBjb25z aWRlcmFibHkgCisrCQkgKiBiZXR0ZXIuCisrCQkgKi8KKysJCQkmJiBCTl9pc19wcmltZV9mYXN0 dGVzdF9leChwLCA1MCwgY3R4LCAxLCBjYikpCisrCQkJYnJlYWs7CisrCQlpZiAoIUJOX2FkZChw LCBwLCBwMXAyKSkKKysJCQlnb3RvIGVycjsKKysJCX0KKysKKysJQk5fR0VOQ0JfY2FsbChjYiwg MywgMCk7CisrCisrCXJldCA9IDE7CisrCisrCWVycjoKKysKKysJQk5fQ1RYX2VuZChjdHgpOwor KworKwlyZXR1cm4gcmV0OworKwl9CisrCisrLyogR2VuZXJhdGUgcGFpciBvZiBwYXJhbXRlcnMg WHAsIFhxIGZvciBYOS4zMSBwcmltZSBnZW5lcmF0aW9uLgorKyAqIE5vdGU6IG5iaXRzIHBhcmFt dGVyIGlzIHN1bSBvZiBudW1iZXIgb2YgYml0cyBpbiBib3RoLgorKyAqLworKworK2ludCBCTl9Y OTMxX2dlbmVyYXRlX1hwcShCSUdOVU0gKlhwLCBCSUdOVU0gKlhxLCBpbnQgbmJpdHMsIEJOX0NU WCAqY3R4KQorKwl7CisrCUJJR05VTSAqdDsKKysJaW50IGk7CisrCS8qIE51bWJlciBvZiBiaXRz IGZvciBlYWNoIHByaW1lIGlzIG9mIHRoZSBmb3JtCisrCSAqIDUxMisxMjhzIGZvciBzID0gMCwg MSwgLi4uCisrCSAqLworKwlpZiAoKG5iaXRzIDwgMTAyNCkgfHwgKG5iaXRzICYgMHhmZikpCisr CQlyZXR1cm4gMDsKKysJbmJpdHMgPj49IDE7CisrCS8qIFRoZSByYW5kb20gdmFsdWUgWHAgbXVz dCBiZSBiZXR3ZWVuIHNxcnQoMikgKiAyXihuYml0cy0xKSBhbmQKKysJICogMl5uYml0cyAtIDEu IEJ5IHNldHRpbmcgdGhlIHRvcCB0d28gYml0cyB3ZSBlbnN1cmUgdGhhdCB0aGUgbG93ZXIKKysJ ICogYm91bmQgaXMgZXhjZWVkZWQuCisrCSAqLworKwlpZiAoIUJOX3JhbmQoWHAsIG5iaXRzLCAx LCAwKSkKKysJCXJldHVybiAwOworKworKwlCTl9DVFhfc3RhcnQoY3R4KTsKKysJdCA9IEJOX0NU WF9nZXQoY3R4KTsKKysKKysJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykKKysJCXsKKysJCWlm ICghQk5fcmFuZChYcSwgbmJpdHMsIDEsIDApKQorKwkJCXJldHVybiAwOworKwkJLyogQ2hlY2sg dGhhdCB8WHAgLSBYcXwgPiAyXihuYml0cyAtIDEwMCkgKi8KKysJCUJOX3N1Yih0LCBYcCwgWHEp OworKwkJaWYgKEJOX251bV9iaXRzKHQpID4gKG5iaXRzIC0gMTAwKSkKKysJCQlicmVhazsKKysJ CX0KKysKKysJQk5fQ1RYX2VuZChjdHgpOworKworKwlpZiAoaSA8IDEwMDApCisrCQlyZXR1cm4g MTsKKysKKysJcmV0dXJuIDA7CisrCisrCX0KKysKKysvKiBHZW5lcmF0ZSBwcmltZXMgdXNpbmcg WDkuMzEgYWxnb3JpdGhtLiBPZiB0aGUgdmFsdWVzIHAsIHAxLCBwMiwgWHAxCisrICogYW5kIFhw MiBvbmx5ICdwJyBuZWVkcyB0byBiZSBub24tTlVMTC4gSWYgYW55IG9mIHRoZSBvdGhlcnMgYXJl IG5vdCBOVUxMCisrICogdGhlIHJlbGV2YW50IHBhcmFtZXRlciB3aWxsIGJlIHN0b3JlZCBpbiBp dC4KKysgKgorKyAqIER1ZSB0byB0aGUgZmFjdCB0aGF0IHxYcCAtIFhxfCA+IDJeKG5iaXRzIC0g MTAwKSBtdXN0IGJlIHNhdGlzZmllZCBYcCBhbmQgWHEKKysgKiBhcmUgZ2VuZXJhdGVkIHVzaW5n IHRoZSBwcmV2aW91cyBmdW5jdGlvbiBhbmQgc3VwcGxpZWQgYXMgaW5wdXQuCisrICovCisrCisr aW50IEJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgoQklHTlVNICpwLCBCSUdOVU0gKnAxLCBCSUdO VU0gKnAyLAorKwkJCUJJR05VTSAqWHAxLCBCSUdOVU0gKlhwMiwKKysJCQljb25zdCBCSUdOVU0g KlhwLAorKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fQ1RYICpjdHgsCisrCQkJQk5fR0VOQ0IgKmNi KQorKwl7CisrCWludCByZXQgPSAwOworKworKwlCTl9DVFhfc3RhcnQoY3R4KTsKKysJaWYgKCFY cDEpCisrCQlYcDEgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCWlmICghWHAyKQorKwkJWHAyID0gQk5f Q1RYX2dldChjdHgpOworKworKwlpZiAoIUJOX3JhbmQoWHAxLCAxMDEsIDAsIDApKQorKwkJZ290 byBlcnJvcjsKKysJaWYgKCFCTl9yYW5kKFhwMiwgMTAxLCAwLCAwKSkKKysJCWdvdG8gZXJyb3I7 CisrCWlmICghQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgocCwgcDEsIHAyLCBYcCwgWHAxLCBYcDIs IGUsIGN0eCwgY2IpKQorKwkJZ290byBlcnJvcjsKKysKKysJcmV0ID0gMTsKKysKKysJZXJyb3I6 CisrCUJOX0NUWF9lbmQoY3R4KTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJfQorKworZGlmZiAt dXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYm4vTWFrZWZpbGUuZmlwcyBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9ibi9NYWtlZmlsZQorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL2JuL01ha2VmaWxlLmZpcHMJMjAwOC0xMS0xMiAwOToxOTowMi4wMDAwMDAwMDAgKzAxMDAK KysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ibi9NYWtlZmlsZQkyMDA5LTExLTEyIDEy OjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTI2LDEzICsyNiwxMyBAQCBMSUJTUkM9CWJuX2Fk ZC5jIGJuX2Rpdi5jIGJuX2V4cC5jIGJuX2xpCisgCWJuX3ByaW50LmMgYm5fcmFuZC5jIGJuX3No aWZ0LmMgYm5fd29yZC5jIGJuX2JsaW5kLmMgXAorIAlibl9rcm9uLmMgYm5fc3FydC5jIGJuX2dj ZC5jIGJuX3ByaW1lLmMgYm5fZXJyLmMgYm5fc3FyLmMgYm5fYXNtLmMgXAorIAlibl9yZWNwLmMg Ym5fbW9udC5jIGJuX21waS5jIGJuX2V4cDIuYyBibl9nZjJtLmMgYm5fbmlzdC5jIFwKKy0JYm5f ZGVwci5jIGJuX2NvbnN0LmMKKysJYm5fZGVwci5jIGJuX2NvbnN0LmMgYm5feDkzMXAuYworIAor IExJQk9CSj0JYm5fYWRkLm8gYm5fZGl2Lm8gYm5fZXhwLm8gYm5fbGliLm8gYm5fY3R4Lm8gYm5f bXVsLm8gYm5fbW9kLm8gXAorIAlibl9wcmludC5vIGJuX3JhbmQubyBibl9zaGlmdC5vIGJuX3dv cmQubyBibl9ibGluZC5vIFwKKyAJYm5fa3Jvbi5vIGJuX3NxcnQubyBibl9nY2QubyBibl9wcmlt ZS5vIGJuX2Vyci5vIGJuX3Nxci5vICQoQk5fQVNNKSBcCisgCWJuX3JlY3AubyBibl9tb250Lm8g Ym5fbXBpLm8gYm5fZXhwMi5vIGJuX2dmMm0ubyBibl9uaXN0Lm8gXAorLQlibl9kZXByLm8gYm5f Y29uc3QubworKwlibl9kZXByLm8gYm5fY29uc3QubyBibl94OTMxcC5vCisgCisgU1JDPSAkKExJ QlNSQykKKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2NhbWVsbGlhL2Fz bS9jbWxsLXg4Ni5wbC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2NhbWVsbGlhL2Fz bS9jbWxsLXg4Ni5wbAorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2NhbWVsbGlhL2Fz bS9jbWxsLXg4Ni5wbC5maXBzCTIwMDktMDQtMDYgMTY6MjU6MDIuMDAwMDAwMDAwICswMjAwCisr Kysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FtZWxsaWEvYXNtL2NtbGwteDg2LnBsCTIw MDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtNzIyLDEyICs3MjIsMTUgQEAg bXkgJGJpYXM9aW50KEBUWzBdKT9zaGlmdChAVCk6MDsKKyB9CisgJmZ1bmN0aW9uX2VuZCgiQ2Ft ZWxsaWFfRWtleWdlbiIpOworIAorKyRzZXRrZXlmdW5jID0gIkNhbWVsbGlhX3NldF9rZXkiOwor KyRzZXRrZXlmdW5jID0gInByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleSIgaWYgKCRFTlZ7RklQU30g bmUgIiIpOworKworIGlmICgkT1BFTlNTTCkgeworICMgaW50IENhbWVsbGlhX3NldF9rZXkgKAor ICMJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksCisgIwkJaW50IGJpdHMsCisgIwkJQ0FN RUxMSUFfS0VZICprZXkpCistJmZ1bmN0aW9uX2JlZ2luX0IoIkNhbWVsbGlhX3NldF9rZXkiKTsK KysmZnVuY3Rpb25fYmVnaW5fQigkc2V0a2V5ZnVuYyk7CisgCSZwdXNoCSgiZWJ4Iik7CisgCSZt b3YJKCJlY3giLCZ3cGFyYW0oMCkpOwkjIHB1bGwgYXJndW1lbnRzCisgCSZtb3YJKCJlYngiLCZ3 cGFyYW0oMSkpOworQEAgLTc2MCw3ICs3NjMsNyBAQCBpZiAoJE9QRU5TU0wpIHsKKyAmc2V0X2xh YmVsKCJkb25lIiw0KTsKKyAJJnBvcAkoImVieCIpOworIAkmcmV0CSgpOworLSZmdW5jdGlvbl9l bmRfQigiQ2FtZWxsaWFfc2V0X2tleSIpOworKyZmdW5jdGlvbl9lbmRfQigkc2V0a2V5ZnVuYyk7 CisgfQorIAorIEBTQk9YPSgKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Nh bWVsbGlhL2NhbWVsbGlhLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jYW1lbGxp YS9jYW1lbGxpYS5oCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FtZWxsaWEvY2Ft ZWxsaWEuaC5maXBzCTIwMDktMTEtMTIgMTI6MzY6NDkuMDAwMDAwMDAwICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FtZWxsaWEvY2FtZWxsaWEuaAkyMDA5LTExLTEyIDEy OjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTg4LDYgKzg4LDExIEBAIHN0cnVjdCBjYW1lbGxp YV9rZXlfc3QgCisgCX07CisgdHlwZWRlZiBzdHJ1Y3QgY2FtZWxsaWFfa2V5X3N0IENBTUVMTElB X0tFWTsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IHByaXZhdGVfQ2FtZWxsaWFfc2V0 X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKKysJQ0FN RUxMSUFfS0VZICprZXkpOworKyNlbmRpZgorKworIGludCBDYW1lbGxpYV9zZXRfa2V5KGNvbnN0 IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorIAlDQU1FTExJQV9LRVkg KmtleSk7CisgCitkaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v Y2FtZWxsaWEvY21sbF9mYmxrLmMKKy0tLSAvZGV2L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44 MDEwMDIyNzYgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jYW1lbGxpYS9j bWxsX2ZibGsuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCAr MSw2OCBAQAorKy8qIGNyeXB0by9jYW1lbGxpYS9jYW1lbGxpYV9taXNjLmMgLSotIG1vZGU6Qzsg Yy1maWxlLXN0eWxlOiAiZWF5IiAtKi0gKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdo dCAoYykgMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysg KgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp bgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0 aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAg ICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0 cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRv b2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAg ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdp dGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1p c3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgor KyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBi ZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRo ZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhl IE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9y bSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRn bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBF WFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVU T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICog U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg QlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg T1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcg SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKysgKgorKyAqLworKyAKKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2NhbWVsbGlhLmg+CisrI2luY2x1ZGUgImNtbGxfbG9jbC5oIgorKyNpbmNs dWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworK2ludCBD YW1lbGxpYV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBi aXRzLAorKwlDQU1FTExJQV9LRVkgKmtleSkKKysJeworKwlpZiAoRklQU19tb2RlKCkpCisrCQlG SVBTX0JBRF9BQk9SVChDQU1FTExJQSkKKysJcmV0dXJuIHByaXZhdGVfQ2FtZWxsaWFfc2V0X2tl eSh1c2VyS2V5LCBiaXRzLCBrZXkpOworKwl9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9jYW1lbGxpYS9jbWxsX21pc2MuYy5maXBzIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL2NhbWVsbGlhL2NtbGxfbWlzYy5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vY2FtZWxsaWEvY21sbF9taXNjLmMuZmlwcwkyMDA4LTEwLTI4IDEzOjEzOjUyLjAw MDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2NhbWVsbGlhL2Nt bGxfbWlzYy5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtNTIsMTEg KzUyLDIwIEBACisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKyAjaW5jbHVkZSA8b3Bl bnNzbC9jYW1lbGxpYS5oPgorICNpbmNsdWRlICJjbWxsX2xvY2wuaCIKKysjaW5jbHVkZSA8b3Bl bnNzbC9jcnlwdG8uaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgorKyNlbmRpZgorIAorIGNvbnN0IGNoYXIgQ0FNRUxMSUFfdmVyc2lvbltdPSJDQU1F TExJQSIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytp bnQgcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXks IGNvbnN0IGludCBiaXRzLAorKwlDQU1FTExJQV9LRVkgKmtleSkKKysjZWxzZQorIGludCBDYW1l bGxpYV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRz LAorIAlDQU1FTExJQV9LRVkgKmtleSkKKysjZW5kaWYKKyAJeworIAlpZighdXNlcktleSB8fCAh a2V5KQorIAkJcmV0dXJuIC0xOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v Y2FtZWxsaWEvTWFrZWZpbGUuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jYW1lbGxp YS9NYWtlZmlsZQorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2NhbWVsbGlhL01ha2Vm aWxlLmZpcHMJMjAwOC0xMi0yMyAxMjozMzowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9jYW1lbGxpYS9NYWtlZmlsZQkyMDA5LTExLTEyIDEyOjM2OjUw LjAwMDAwMDAwMCArMDEwMAorQEAgLTIzLDkgKzIzLDkgQEAgQVBQUz0KKyAKKyBMSUI9JChUT1Ap L2xpYmNyeXB0by5hCisgTElCU1JDPWNhbWVsbGlhLmMgY21sbF9taXNjLmMgY21sbF9lY2IuYyBj bWxsX2NiYy5jIGNtbGxfb2ZiLmMgXAorLQkgICBjbWxsX2NmYi5jIGNtbGxfY3RyLmMgCisrCSAg IGNtbGxfY2ZiLmMgY21sbF9jdHIuYyBjbWxsX2ZibGsuYworIAorLUxJQk9CSj0gY21sbF9lY2Iu byBjbWxsX29mYi5vIGNtbGxfY2ZiLm8gY21sbF9jdHIubyAkKENNTExfRU5DKQorK0xJQk9CSj0g Y21sbF9lY2IubyBjbWxsX29mYi5vIGNtbGxfY2ZiLm8gY21sbF9jdHIubyAkKENNTExfRU5DKSBj bWxsX2ZibGsubworIAorIFNSQz0gJChMSUJTUkMpCisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9jYXN0L2Nhc3QuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRv L2Nhc3QvY2FzdC5oCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FzdC9jYXN0Lmgu ZmlwcwkyMDA5LTExLTEyIDEyOjM2OjQ5LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL2Nhc3QvY2FzdC5oCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAw ICswMTAwCitAQCAtODMsNyArODMsOSBAQCB0eXBlZGVmIHN0cnVjdCBjYXN0X2tleV9zdAorIAlp bnQgc2hvcnRfa2V5OwkvKiBVc2UgcmVkdWNlZCByb3VuZHMgZm9yIHNob3J0IGtleSAqLworIAl9 IENBU1RfS0VZOworIAorLSAKKysjaWZkZWYgT1BFTlNTTF9GSVBTIAorK3ZvaWQgcHJpdmF0ZV9D QVNUX3NldF9rZXkoQ0FTVF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAq ZGF0YSk7CisrI2VuZGlmCisgdm9pZCBDQVNUX3NldF9rZXkoQ0FTVF9LRVkgKmtleSwgaW50IGxl biwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Cisgdm9pZCBDQVNUX2VjYl9lbmNyeXB0KGNv bnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVkIGNoYXIgKm91dCxDQVNUX0tFWSAqa2V5LAor IAkJICAgICAgaW50IGVuYyk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9j YXN0L2Nfc2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FzdC9jX3NrZXku YworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Nhc3QvY19za2V5LmMuZmlwcwkyMDAw LTA2LTAzIDE2OjEzOjM1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL2Nhc3QvY19za2V5LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAK K0BAIC01Nyw2ICs1NywxMSBAQAorICAqLworIAorICNpbmNsdWRlIDxvcGVuc3NsL2Nhc3QuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworICNpbmNsdWRlICJjYXN0X2xjbC5o IgorICNpbmNsdWRlICJjYXN0X3MuaCIKKyAKK0BAIC03Miw3ICs3Nyw3IEBACisgI2RlZmluZSBT NiBDQVNUX1NfdGFibGU2CisgI2RlZmluZSBTNyBDQVNUX1NfdGFibGU3CisgCistdm9pZCBDQVNU X3NldF9rZXkoQ0FTVF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0 YSkKKytGSVBTX05PTl9GSVBTX1ZDSVBIRVJfSW5pdChDQVNUKQorIAl7CisgCUNBU1RfTE9ORyB4 WzE2XTsKKyAJQ0FTVF9MT05HIHpbMTZdOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vY3J5cHRvLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jcnlwdG8uaAor LS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2NyeXB0by5oLmZpcHMJMjAwOS0xMS0xMiAx MjozNjo0OS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9j cnlwdG8uaAkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTU0NiwxMiAr NTQ2LDY5IEBAIHZvaWQgT3BlblNTTERpZShjb25zdCBjaGFyICpmaWxlLGludCBsaW4KKyB1bnNp Z25lZCBsb25nICpPUEVOU1NMX2lhMzJjYXBfbG9jKHZvaWQpOworICNkZWZpbmUgT1BFTlNTTF9p YTMyY2FwICgqKE9QRU5TU0xfaWEzMmNhcF9sb2MoKSkpCisgCisrI2lmZGVmIE9QRU5TU0xfRklQ UworKyNkZWZpbmUgRklQU19FUlJPUl9JR05PUkVEKGFsZykgT3BlblNTTERpZShfX0ZJTEVfXywg X19MSU5FX18sIFwKKysJCWFsZyAiIHByZXZpb3VzIEZJUFMgZm9yYmlkZGVuIGFsZ29yaXRobSBl cnJvciBpZ25vcmVkIik7CisrCisrI2RlZmluZSBGSVBTX0JBRF9BQk9SVChhbGcpIE9wZW5TU0xE aWUoX19GSUxFX18sIF9fTElORV9fLCBcCisrCQkjYWxnICIgQWxnb3JpdGhtIGZvcmJpZGRlbiBp biBGSVBTIG1vZGUiKTsKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTX1NUUklDVAorKyNkZWZpbmUg RklQU19CQURfQUxHT1JJVEhNKGFsZykgRklQU19CQURfQUJPUlQoYWxnKQorKyNlbHNlCisrI2Rl ZmluZSBGSVBTX0JBRF9BTEdPUklUSE0oYWxnKSBcCisrCXsgXAorKwlGSVBTZXJyKEZJUFNfRl9I QVNIX0ZJTkFMLEZJUFNfUl9OT05fRklQU19NRVRIT0QpOyBcCisrCUVSUl9hZGRfZXJyb3JfZGF0 YSgyLCAiQWxnb3JpdGhtPSIsICNhbGcpOyBcCisrCXJldHVybiAwOyBcCisrCX0KKysjZW5kaWYK KysKKysvKiBMb3cgbGV2ZWwgZGlnZXN0IEFQSSBibG9ja2luZyBtYWNybyAqLworKworKyNkZWZp bmUgRklQU19OT05fRklQU19NRF9Jbml0KGFsZykgXAorKwlpbnQgYWxnIyNfSW5pdChhbGcjI19D VFggKmMpIFwKKysJCXsgXAorKwkJaWYgKEZJUFNfbW9kZSgpKSBcCisrCQkJRklQU19CQURfQUxH T1JJVEhNKGFsZykgXAorKwkJcmV0dXJuIHByaXZhdGVfIyNhbGcjI19Jbml0KGMpOyBcCisrCQl9 IFwKKysJaW50IHByaXZhdGVfIyNhbGcjI19Jbml0KGFsZyMjX0NUWCAqYykKKysKKysvKiBGb3Ig Y2lwaGVycyB0aGUgQVBJIG9mdGVuIHZhcmllcyBmcm9tIGNpcGhlciB0byBjaXBoZXIgYW5kIGVh Y2ggbmVlZHMgdG8KKysgKiBiZSB0cmVhdGVkIGFzIGEgc3BlY2lhbCBjYXNlLiBWYXJpYWJsZSBr ZXkgbGVuZ3RoIGNpcGhlcnMgKEJsb3dmaXNoLCBSQzQsCisrICogQ0FTVCkgaG93ZXZlciBhcmUg dmVyeSBzaW1pbGFyIGFuZCBjYW4gdXNlIGEgYmxvY2tpbmcgbWFjcm8uCisrICovCisrCisrI2Rl ZmluZSBGSVBTX05PTl9GSVBTX1ZDSVBIRVJfSW5pdChhbGcpIFwKKysJdm9pZCBhbGcjI19zZXRf a2V5KGFsZyMjX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKSBc CisrCQl7IFwKKysJCWlmIChGSVBTX21vZGUoKSkgXAorKwkJCUZJUFNfQkFEX0FCT1JUKGFsZykg XAorKwkJcHJpdmF0ZV8jI2FsZyMjX3NldF9rZXkoa2V5LCBsZW4sIGRhdGEpOyBcCisrCQl9IFwK KysJdm9pZCBwcml2YXRlXyMjYWxnIyNfc2V0X2tleShhbGcjI19LRVkgKmtleSwgaW50IGxlbiwg XAorKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKKysKKysjZWxzZQorKworKyNkZWZp bmUgRklQU19OT05fRklQU19WQ0lQSEVSX0luaXQoYWxnKSBcCisrCXZvaWQgYWxnIyNfc2V0X2tl eShhbGcjI19LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKKysK KysjZGVmaW5lIEZJUFNfTk9OX0ZJUFNfTURfSW5pdChhbGcpIFwKKysJaW50IGFsZyMjX0luaXQo YWxnIyNfQ1RYICpjKSAKKysKKysjZW5kaWYgLyogZGVmIE9QRU5TU0xfRklQUyAqLworKworIC8q IEJFR0lOIEVSUk9SIENPREVTICovCisgLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBn ZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKKyAgKiBtYWRlIGFm dGVyIHRoaXMgcG9pbnQgbWF5IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0 IHJ1bi4KKyAgKi8KKyB2b2lkIEVSUl9sb2FkX0NSWVBUT19zdHJpbmdzKHZvaWQpOworIAorKyNk ZWZpbmUgT1BFTlNTTF9IQVZFX0lOSVQJMQorK3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9p ZCk7CisrCisgLyogRXJyb3IgY29kZXMgZm9yIHRoZSBDUllQVE8gZnVuY3Rpb25zLiAqLworIAor IC8qIEZ1bmN0aW9uIGNvZGVzLiAqLworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vZGgvZGhfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kaC9kaF9lcnIu YworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2RoL2RoX2Vyci5jLmZpcHMJMjAwNi0x MS0yMSAyMjoyOTozNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9kaC9kaF9lcnIuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAg LTczLDYgKzczLDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBESF9zdHJfZnVuY3RzW109Cisg e0VSUl9GVU5DKERIX0ZfQ09NUFVURV9LRVkpLAkiQ09NUFVURV9LRVkifSwKKyB7RVJSX0ZVTkMo REhfRl9ESFBBUkFNU19QUklOVF9GUCksCSJESHBhcmFtc19wcmludF9mcCJ9LAorIHtFUlJfRlVO QyhESF9GX0RIX0JVSUxUSU5fR0VOUEFSQU1TKSwJIkRIX0JVSUxUSU5fR0VOUEFSQU1TIn0sCisr e0VSUl9GVU5DKERIX0ZfREhfQ09NUFVURV9LRVkpLAkiREhfY29tcHV0ZV9rZXkifSwKKyt7RVJS X0ZVTkMoREhfRl9ESF9HRU5FUkFURV9LRVkpLAkiREhfZ2VuZXJhdGVfa2V5In0sCisge0VSUl9G VU5DKERIX0ZfREhfTkVXX01FVEhPRCksCSJESF9uZXdfbWV0aG9kIn0sCisge0VSUl9GVU5DKERI X0ZfREhfUEFSQU1fREVDT0RFKSwJIkRIX1BBUkFNX0RFQ09ERSJ9LAorIHtFUlJfRlVOQyhESF9G X0RIX1BSSVZfREVDT0RFKSwJIkRIX1BSSVZfREVDT0RFIn0sCitAQCAtOTQsNiArOTYsNyBAQCBz dGF0aWMgRVJSX1NUUklOR19EQVRBIERIX3N0cl9yZWFzb25zW109Cisge0VSUl9SRUFTT04oREhf Ul9CTl9FUlJPUikgICAgICAgICAgICAgICAsImJuIGVycm9yIn0sCisge0VSUl9SRUFTT04oREhf Ul9ERUNPREVfRVJST1IpICAgICAgICAgICAsImRlY29kZSBlcnJvciJ9LAorIHtFUlJfUkVBU09O KERIX1JfSU5WQUxJRF9QVUJLRVkpICAgICAgICAgLCJpbnZhbGlkIHB1YmxpYyBrZXkifSwKKyt7 RVJSX1JFQVNPTihESF9SX0tFWV9TSVpFX1RPT19TTUFMTCkgICAgICwia2V5IHNpemUgdG9vIHNt YWxsIn0sCisge0VSUl9SRUFTT04oREhfUl9LRVlTX05PVF9TRVQpICAgICAgICAgICAsImtleXMg bm90IHNldCJ9LAorIHtFUlJfUkVBU09OKERIX1JfTU9EVUxVU19UT09fTEFSR0UpICAgICAgLCJt b2R1bHVzIHRvbyBsYXJnZSJ9LAorIHtFUlJfUkVBU09OKERIX1JfTk9fUEFSQU1FVEVSU19TRVQp ICAgICAgLCJubyBwYXJhbWV0ZXJzIHNldCJ9LAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vZGgvZGhfZ2VuLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kaC9k aF9nZW4uYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMJ MjAwNS0wNC0yNiAyMDo1MzoxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by9kaC9kaF9nZW4uYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEw MAorQEAgLTY1LDYgKzY1LDEwIEBACisgI2luY2x1ZGUgImNyeXB0bGliLmgiCisgI2luY2x1ZGUg PG9wZW5zc2wvYm4uaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+CisrI2VuZGlmCisgCisgc3RhdGljIGludCBkaF9idWlsdGluX2dlbnBhcmFtcyhESCAqcmV0 LCBpbnQgcHJpbWVfbGVuLCBpbnQgZ2VuZXJhdG9yLCBCTl9HRU5DQiAqY2IpOworIAorQEAgLTEw Niw2ICsxMTAsMjAgQEAgc3RhdGljIGludCBkaF9idWlsdGluX2dlbnBhcmFtcyhESCAqcmV0LAor IAlpbnQgZyxvaz0gLTE7CisgCUJOX0NUWCAqY3R4PU5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xf RklQUworKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJeworKwkJRklQU2VycihGSVBT X0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJ CXJldHVybiAwOworKwkJfQorKworKwlpZiAoRklQU19tb2RlKCkgJiYgKHByaW1lX2xlbiA8IE9Q RU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCXsKKysJCURIZXJyKERIX0ZfREhf QlVJTFRJTl9HRU5QQVJBTVMsIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCWdvdG8gZXJy OworKwkJfQorKyNlbmRpZgorKworIAljdHg9Qk5fQ1RYX25ldygpOworIAlpZiAoY3R4ID09IE5V TEwpIGdvdG8gZXJyOworIAlCTl9DVFhfc3RhcnQoY3R4KTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL2RoL2RoLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9k aC9kaC5oCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZGgvZGguaC5maXBzCTIwMDkt MTEtMTIgMTI6MzY6NDkuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vZGgvZGguaAkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTc3 LDYgKzc3LDggQEAKKyAjIGRlZmluZSBPUEVOU1NMX0RIX01BWF9NT0RVTFVTX0JJVFMJMTAwMDAK KyAjZW5kaWYKKyAKKysjZGVmaW5lIE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTIDEw MjQKKysKKyAjZGVmaW5lIERIX0ZMQUdfQ0FDSEVfTU9OVF9QICAgICAweDAxCisgI2RlZmluZSBE SF9GTEFHX05PX0VYUF9DT05TVFRJTUUgMHgwMiAvKiBuZXcgd2l0aCAwLjkuN2g7IHRoZSBidWls dC1pbiBESAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW1wbGVt ZW50YXRpb24gbm93IHVzZXMgY29uc3RhbnQgdGltZQorQEAgLTI0MSw2ICsyNDMsOCBAQCB2b2lk IEVSUl9sb2FkX0RIX3N0cmluZ3Modm9pZCk7CisgI2RlZmluZSBESF9GX0dFTkVSQVRFX1BBUkFN RVRFUlMJCQkgMTA0CisgI2RlZmluZSBESF9GX1BLRVlfREhfREVSSVZFCQkJCSAxMTIKKyAjZGVm aW5lIERIX0ZfUEtFWV9ESF9LRVlHRU4JCQkJIDExMworKyNkZWZpbmUgREhfRl9ESF9DT01QVVRF X0tFWQkJCQkgMTE0CisrI2RlZmluZSBESF9GX0RIX0dFTkVSQVRFX0tFWQkJCSAxMTUKKyAKKyAv KiBSZWFzb24gY29kZXMuICovCisgI2RlZmluZSBESF9SX0JBRF9HRU5FUkFUT1IJCQkJIDEwMQor QEAgLTI1Myw2ICsyNTcsNyBAQCB2b2lkIEVSUl9sb2FkX0RIX3N0cmluZ3Modm9pZCk7CisgI2Rl ZmluZSBESF9SX05PX1BBUkFNRVRFUlNfU0VUCQkJCSAxMDcKKyAjZGVmaW5lIERIX1JfTk9fUFJJ VkFURV9WQUxVRQkJCQkgMTAwCisgI2RlZmluZSBESF9SX1BBUkFNRVRFUl9FTkNPRElOR19FUlJP UgkJCSAxMDUKKysjZGVmaW5lIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMCQkJCSAxMTAKKyAKKyAj aWZkZWYgIF9fY3BsdXNwbHVzCisgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vZGgvZGhfa2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kaC9kaF9rZXku YworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2RoL2RoX2tleS5jLmZpcHMJMjAwNy0w My0yOCAwMjoxNToyMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9kaC9kaF9rZXkuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAg LTYxLDYgKzYxLDkgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorICNpbmNsdWRlIDxvcGVu c3NsL3JhbmQuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisgc3RhdGljIGludCBn ZW5lcmF0ZV9rZXkoREggKmRoKTsKKyBzdGF0aWMgaW50IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNo YXIgKmtleSwgY29uc3QgQklHTlVNICpwdWJfa2V5LCBESCAqZGgpOworQEAgLTEwNyw2ICsxMTAs MTQgQEAgc3RhdGljIGludCBnZW5lcmF0ZV9rZXkoREggKmRoKQorIAlCTl9NT05UX0NUWCAqbW9u dD1OVUxMOworIAlCSUdOVU0gKnB1Yl9rZXk9TlVMTCwqcHJpdl9rZXk9TlVMTDsKKyAKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZGgtPnAp IDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJREhlcnIoREhf Rl9HRU5FUkFURV9LRVksIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCXJldHVybiAwOwor KwkJfQorKyNlbmRpZgorKworIAljdHggPSBCTl9DVFhfbmV3KCk7CisgCWlmIChjdHggPT0gTlVM TCkgZ290byBlcnI7CisgCitAQCAtMTg0LDYgKzE5NSwxMyBAQCBzdGF0aWMgaW50IGNvbXB1dGVf a2V5KHVuc2lnbmVkIGNoYXIgKmtlCisgCQlESGVycihESF9GX0NPTVBVVEVfS0VZLERIX1JfTU9E VUxVU19UT09fTEFSR0UpOworIAkJZ290byBlcnI7CisgCQl9CisrI2lmZGVmIE9QRU5TU0xfRklQ UworKwlpZiAoRklQU19tb2RlKCkgJiYgKEJOX251bV9iaXRzKGRoLT5wKSA8IE9QRU5TU0xfREhf RklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCXsKKysJCURIZXJyKERIX0ZfQ09NUFVURV9LRVks IERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCWdvdG8gZXJyOworKwkJfQorKyNlbmRpZgor IAorIAljdHggPSBCTl9DVFhfbmV3KCk7CisgCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7CitA QCAtMjUxLDYgKzI2OSw5IEBAIHN0YXRpYyBpbnQgZGhfYm5fbW9kX2V4cChjb25zdCBESCAqZGgs IEIKKyAKKyBzdGF0aWMgaW50IGRoX2luaXQoREggKmRoKQorIAl7CisrI2lmZGVmIE9QRU5TU0xf RklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCWRoLT5mbGFncyB8PSBE SF9GTEFHX0NBQ0hFX01PTlRfUDsKKyAJcmV0dXJuKDEpOworIAl9CitkaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9kc2EvZHNhX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vZHNhL2RzYV9nZW4uYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Rz YS9kc2FfZ2VuLmMuZmlwcwkyMDA4LTEyLTI2IDE4OjE3OjIxLjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2RzYS9kc2FfZ2VuLmMJMjAwOS0xMS0xMiAxMjoz Njo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC03Nyw4ICs3NywxMiBAQAorICNpbmNsdWRlICJjcnlw dGxpYi5oIgorICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2Ju Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5o PgorICNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgI2luY2x1ZGUgImRzYV9sb2NsLmgiCisg CisgaW50IERTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KERTQSAqcmV0LCBpbnQgYml0cywKK0BA IC0xMjYsNiArMTMwLDIxIEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6 ZV8KKyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAJdW5zaWduZWQgaW50IGg9MjsKKyAKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCSAgICB7CisrCSAg ICBGSVBTZXJyKEZJUFNfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTiwKKysJCSAgICBGSVBTX1JfRklQ U19TRUxGVEVTVF9GQUlMRUQpOworKwkgICAgZ290byBlcnI7CisrCSAgICB9CisrCisrCWlmIChG SVBTX21vZGUoKSAmJiAoYml0cyA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykp CisrCQl7CisrCQlEU0FlcnIoRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4sIERTQV9SX0tFWV9T SVpFX1RPT19TTUFMTCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKHFz aXplICE9IFNIQV9ESUdFU1RfTEVOR1RIICYmIHFzaXplICE9IFNIQTIyNF9ESUdFU1RfTEVOR1RI ICYmCisgCSAgICBxc2l6ZSAhPSBTSEEyNTZfRElHRVNUX0xFTkdUSCkKKyAJCS8qIGludmFsaWQg cSBzaXplICovCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kc2EvZHNhLmgu ZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kc2EvZHNhLmgKKy0tLSBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9kc2EvZHNhLmguZmlwcwkyMDA5LTExLTEyIDEyOjM2OjQ5LjAwMDAw MDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2RzYS9kc2EuaAkyMDA5 LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTg4LDYgKzg4LDggQEAKKyAjIGRl ZmluZSBPUEVOU1NMX0RTQV9NQVhfTU9EVUxVU19CSVRTCTEwMDAwCisgI2VuZGlmCisgCisrI2Rl ZmluZSBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAorKworICNkZWZpbmUg RFNBX0ZMQUdfQ0FDSEVfTU9OVF9QCTB4MDEKKyAjZGVmaW5lIERTQV9GTEFHX05PX0VYUF9DT05T VFRJTUUgICAgICAgMHgwMiAvKiBuZXcgd2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBEU0EKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbXBsZW1lbnRh dGlvbiBub3cgdXNlcyBjb25zdGFudCB0aW1lCitAQCAtOTcsNiArOTksMjEgQEAKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBiZSB1c2VkIGZvciBhbGwg ZXhwb25lbnRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqLworIAorKy8qIElmIHRoaXMgZmxhZyBpcyBzZXQgdGhlIERTQSBtZXRob2QgaXMgRklQUyBj b21wbGlhbnQgYW5kIGNhbiBiZSB1c2VkCisrICogaW4gRklQUyBtb2RlLiBUaGlzIGlzIHNldCBp biB0aGUgdmFsaWRhdGVkIG1vZHVsZSBtZXRob2QuIElmIGFuCisrICogYXBwbGljYXRpb24gc2V0 cyB0aGlzIGZsYWcgaW4gaXRzIG93biBtZXRob2RzIGl0IGlzIGl0cyByZXBvc2liaWxpdHkKKysg KiB0byBlbnN1cmUgdGhlIHJlc3VsdCBpcyBjb21wbGlhbnQuCisrICovCisrCisrI2RlZmluZSBE U0FfRkxBR19GSVBTX01FVEhPRAkJCTB4MDQwMAorKworKy8qIElmIHRoaXMgZmxhZyBpcyBzZXQg dGhlIG9wZXJhdGlvbnMgbm9ybWFsbHkgZGlzYWJsZWQgaW4gRklQUyBtb2RlIGFyZQorKyAqIHBl cm1pdHRlZCBpdCBpcyB0aGVuIHRoZSBhcHBsaWNhdGlvbnMgcmVzcG9uc2liaWxpdHkgdG8gZW5z dXJlIHRoYXQgdGhlCisrICogdXNhZ2UgaXMgY29tcGxpYW50LgorKyAqLworKworKyNkZWZpbmUg RFNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJCQkweDA0MDAKKysKKyAjaWZkZWYgIF9fY3BsdXNwbHVz CisgZXh0ZXJuICJDIiB7CisgI2VuZGlmCitAQCAtMjcwLDggKzI4NywxMSBAQCB2b2lkIEVSUl9s b2FkX0RTQV9zdHJpbmdzKHZvaWQpOworICNkZWZpbmUgRFNBX0ZfRE9fRFNBX1BSSU5UCQkJCSAx MDQKKyAjZGVmaW5lIERTQV9GX0RTQVBBUkFNU19QUklOVAkJCQkgMTAwCisgI2RlZmluZSBEU0Ff Rl9EU0FQQVJBTVNfUFJJTlRfRlAJCQkgMTAxCisrI2RlZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9L RVlHRU4JCQkgMTI0CisrI2RlZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTgkJCSAxMjMK KyAjZGVmaW5lIERTQV9GX0RTQV9ET19TSUdOCQkJCSAxMTIKKyAjZGVmaW5lIERTQV9GX0RTQV9E T19WRVJJRlkJCQkJIDExMworKyNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRFUlMJ CQkgMTI1CisgI2RlZmluZSBEU0FfRl9EU0FfTkVXX01FVEhPRAkJCQkgMTAzCisgI2RlZmluZSBE U0FfRl9EU0FfUEFSQU1fREVDT0RFCQkJCSAxMTkKKyAjZGVmaW5lIERTQV9GX0RTQV9QUklOVF9G UAkJCQkgMTA1CitAQCAtMjk2LDkgKzMxNiwxMiBAQCB2b2lkIEVSUl9sb2FkX0RTQV9zdHJpbmdz KHZvaWQpOworICNkZWZpbmUgRFNBX1JfREFUQV9UT09fTEFSR0VfRk9SX0tFWV9TSVpFCQkgMTAw CisgI2RlZmluZSBEU0FfUl9ERUNPREVfRVJST1IJCQkJIDEwNAorICNkZWZpbmUgRFNBX1JfSU5W QUxJRF9ESUdFU1RfVFlQRQkJCSAxMDYKKysjZGVmaW5lIERTQV9SX0tFWV9TSVpFX1RPT19TTUFM TAkJCSAxMTAKKyAjZGVmaW5lIERTQV9SX01JU1NJTkdfUEFSQU1FVEVSUwkJCSAxMDEKKyAjZGVm aW5lIERTQV9SX01PRFVMVVNfVE9PX0xBUkdFCQkJCSAxMDMKKysjZGVmaW5lIERTQV9SX05PTl9G SVBTX01FVEhPRAkJCQkgMTExCisgI2RlZmluZSBEU0FfUl9OT19QQVJBTUVURVJTX1NFVAkJCQkg MTA3CisrI2RlZmluZSBEU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFCSAx MTIKKyAjZGVmaW5lIERTQV9SX1BBUkFNRVRFUl9FTkNPRElOR19FUlJPUgkJCSAxMDUKKyAKKyAj aWZkZWYgIF9fY3BsdXNwbHVzCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9k c2EvZHNhX2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZHNhL2RzYV9rZXku YworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcwkyMDA3 LTAzLTI4IDAyOjE1OjI1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL2RzYS9kc2Ffa2V5LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAK K0BAIC02Myw5ICs2Myw1MyBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisgI2luY2x1ZGUg PG9wZW5zc2wvZHNhLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisgCisgc3RhdGljIGludCBkc2Ff YnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKytz dGF0aWMgaW50IGZpcHNfZHNhX3BhaXJ3aXNlX2ZhaWwgPSAwOworKworK3ZvaWQgRklQU19jb3Jy dXB0X2RzYV9rZXlnZW4odm9pZCkKKysJeworKwlmaXBzX2RzYV9wYWlyd2lzZV9mYWlsID0gMTsK KysJfQorKworK2ludCBmaXBzX2NoZWNrX2RzYShEU0EgKmRzYSkKKysJeworKwlFVlBfUEtFWSAq cGs7CisrCXVuc2lnbmVkIGNoYXIgdGJzW10gPSAiRFNBIFBhaXJ3aXNlIENoZWNrIERhdGEiOwor KwlpbnQgcmV0ID0gMDsKKysKKysgICAgCWlmICgocGs9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwp CisrCQlnb3RvIGVycjsKKysKKysJRVZQX1BLRVlfc2V0MV9EU0EocGssIGRzYSk7CisrCisrCWlm ICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAorKwkJCQkJTlVMTCwgMCwg RVZQX3NoYTEoKSwgMCwgTlVMTCkpCisrCQlnb3RvIGVycjsKKysKKysJcmV0ID0gMTsKKysKKytl cnI6CisrCWlmIChyZXQgPT0gMCkKKysJCXsKKysJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsK KysJCUZJUFNlcnIoRklQU19GX0ZJUFNfQ0hFQ0tfRFNBLEZJUFNfUl9QQUlSV0lTRV9URVNUX0ZB SUxFRCk7CisrCQl9CisrCisrCWlmIChwaykKKysJCUVWUF9QS0VZX2ZyZWUocGspOworKworKwly ZXR1cm4gcmV0OworKwl9CisrI2VuZGlmCisrCisgaW50IERTQV9nZW5lcmF0ZV9rZXkoRFNBICpk c2EpCisgCXsKKyAJaWYoZHNhLT5tZXRoLT5kc2Ffa2V5Z2VuKQorQEAgLTc5LDYgKzEyMywxNCBA QCBzdGF0aWMgaW50IGRzYV9idWlsdGluX2tleWdlbihEU0EgKmRzYSkKKyAJQk5fQ1RYICpjdHg9 TlVMTDsKKyAJQklHTlVNICpwdWJfa2V5PU5VTEwsKnByaXZfa2V5PU5VTEw7CisgCisrI2lmZGVm IE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgKEJOX251bV9iaXRzKGRzYS0+cCkg PCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJRFNBZXJyKERT QV9GX0RTQV9CVUlMVElOX0tFWUdFTiwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCWdv dG8gZXJyOworKwkJfQorKyNlbmRpZgorKworIAlpZiAoKGN0eD1CTl9DVFhfbmV3KCkpID09IE5V TEwpIGdvdG8gZXJyOworIAorIAlpZiAoZHNhLT5wcml2X2tleSA9PSBOVUxMKQorQEAgLTExNyw2 ICsxNjksMTUgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpCisgCisg CWRzYS0+cHJpdl9rZXk9cHJpdl9rZXk7CisgCWRzYS0+cHViX2tleT1wdWJfa2V5OworKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJeworKwkJaWYgKGZpcHNfZHNh X3BhaXJ3aXNlX2ZhaWwpCisrCQkJQk5fYWRkX3dvcmQoZHNhLT5wdWJfa2V5LCAxKTsKKysJCWlm KCFmaXBzX2NoZWNrX2RzYShkc2EpKQorKwkJICAgIGdvdG8gZXJyOworKwkJfQorKyNlbmRpZgor IAlvaz0xOworIAorIGVycjoKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Rz YS9kc2Ffb3NzbC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZHNhL2RzYV9vc3Ns LmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kc2EvZHNhX29zc2wuYy5maXBzCTIw MDctMDMtMjggMDI6MTU6MjYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vZHNhL2RzYV9vc3NsLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAx MDAKK0BAIC02NSw2ICs2NSw5IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisgI2luY2x1 ZGUgPG9wZW5zc2wvcmFuZC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2FzbjEuaD4KKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorIHN0 YXRpYyBEU0FfU0lHICpkc2FfZG9fc2lnbihjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBpbnQg ZGxlbiwgRFNBICpkc2EpOworIHN0YXRpYyBpbnQgZHNhX3NpZ25fc2V0dXAoRFNBICpkc2EsIEJO X0NUWCAqY3R4X2luLCBCSUdOVU0gKipraW52cCwgQklHTlVNICoqcnApOworQEAgLTgyLDcgKzg1 LDcgQEAgTlVMTCwgLyogZHNhX21vZF9leHAsICovCisgTlVMTCwgLyogZHNhX2JuX21vZF9leHAs ICovCisgZHNhX2luaXQsCisgZHNhX2ZpbmlzaCwKKy0wLAorK0RTQV9GTEFHX0ZJUFNfTUVUSE9E LAorIE5VTEwsCisgTlVMTCwKKyBOVUxMCitAQCAtMTM3LDYgKzE0MCwyMCBAQCBzdGF0aWMgRFNB X1NJRyAqZHNhX2RvX3NpZ24oY29uc3QgdW5zaWduCisgCWludCByZWFzb249RVJSX1JfQk5fTElC OworIAlEU0FfU0lHICpyZXQ9TlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJ UFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9EU0Ff RE9fU0lHTixGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkgICAgcmV0dXJuIE5VTEw7 CisrCSAgICB9CisrCisrCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8 IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQl7CisrCQlEU0FlcnIoRFNB X0ZfRFNBX0RPX1NJR04sIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQlyZXR1cm4gTlVM TDsKKysJCX0KKysjZW5kaWYKKysKKyAJQk5faW5pdCgmbSk7CisgCUJOX2luaXQoJnhyKTsKKyAK K0BAIC0zMTIsNiArMzI5LDIwIEBAIHN0YXRpYyBpbnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNp Z25lZCAKKyAJCXJldHVybiAtMTsKKyAJCX0KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlm KEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9E U0FfRE9fVkVSSUZZLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICByZXR1cm4g LTE7CisrCSAgICB9CisrCisrCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZHNhLT5w KSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQl7CisrCQlEU0FlcnIo RFNBX0ZfRFNBX0RPX1ZFUklGWSwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCXJldHVy biAtMTsKKysJCX0KKysjZW5kaWYKKysKKyAJaSA9IEJOX251bV9iaXRzKGRzYS0+cSk7CisgCS8q IGZpcHMgMTg2LTMgYWxsb3dzIG9ubHkgZGlmZmVyZW50IHNpemVzIGZvciBxICovCisgCWlmIChp ICE9IDE2MCAmJiBpICE9IDIyNCAmJiBpICE9IDI1NikKK0BAIC00MDMsNiArNDM0LDkgQEAgc3Rh dGljIGludCBkc2FfZG9fdmVyaWZ5KGNvbnN0IHVuc2lnbmVkIAorIAorIHN0YXRpYyBpbnQgZHNh X2luaXQoRFNBICpkc2EpCisgeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVz dF9jaGVjaygpOworKyNlbmRpZgorIAlkc2EtPmZsYWdzfD1EU0FfRkxBR19DQUNIRV9NT05UX1A7 CisgCXJldHVybigxKTsKKyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9l cnIvZXJyX2FsbC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXJyL2Vycl9hbGwu YworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Vyci9lcnJfYWxsLmMuZmlwcwkyMDA5 LTA4LTA5IDE2OjU4OjA1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL2Vyci9lcnJfYWxsLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAK K0BAIC05Niw2ICs5Niw5IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvb2NzcC5oPgorICNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3RzLmg+CisrI2lmZGVmIE9QRU5T U0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKyAjaWZuZGVmIE9Q RU5TU0xfTk9fQ01TCisgI2luY2x1ZGUgPG9wZW5zc2wvY21zLmg+CisgI2VuZGlmCitAQCAtMTQ5 LDYgKzE1Miw5IEBAIHZvaWQgRVJSX2xvYWRfY3J5cHRvX3N0cmluZ3Modm9pZCkKKyAjZW5kaWYK KyAJRVJSX2xvYWRfT0NTUF9zdHJpbmdzKCk7CisgCUVSUl9sb2FkX1VJX3N0cmluZ3MoKTsKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrCUVSUl9sb2FkX0ZJUFNfc3RyaW5ncygpOworKyNlbmRpZgor ICNpZm5kZWYgT1BFTlNTTF9OT19DTVMKKyAJRVJSX2xvYWRfQ01TX3N0cmluZ3MoKTsKKyAjZW5k aWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9kaWdlc3QuYy5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9kaWdlc3QuYworLS0tIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL2V2cC9kaWdlc3QuYy5maXBzCTIwMDgtMTEtMDQgMTM6MDY6MDkuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2RpZ2VzdC5j CTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMTE2LDYgKzExNiw3IEBA CisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorICNpbmNsdWRlIDxvcGVuc3NsL2VuZ2luZS5o PgorICNlbmRpZgorKyNpbmNsdWRlICJldnBfbG9jbC5oIgorIAorIHZvaWQgRVZQX01EX0NUWF9p bml0KEVWUF9NRF9DVFggKmN0eCkKKyAJeworQEAgLTEzNyw5ICsxMzgsNTAgQEAgaW50IEVWUF9E aWdlc3RJbml0KEVWUF9NRF9DVFggKmN0eCwgY29ucworIAlyZXR1cm4gRVZQX0RpZ2VzdEluaXRf ZXgoY3R4LCB0eXBlLCBOVUxMKTsKKyAJfQorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysv KiBUaGUgcHVycG9zZSBvZiB0aGVzZSBpcyB0byB0cmFwIHByb2dyYW1zIHRoYXQgYXR0ZW1wdCB0 byB1c2Ugbm9uIEZJUFMKKysgKiBhbGdvcml0aG1zIGluIEZJUFMgbW9kZSBhbmQgaWdub3JlIHRo ZSBlcnJvcnMuCisrICovCisrCisrc3RhdGljIGludCBiYWRfaW5pdChFVlBfTURfQ1RYICpjdHgp CisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgaW5pdCIpOyByZXR1cm4gMDt9CisrCisr c3RhdGljIGludCBiYWRfdXBkYXRlKEVWUF9NRF9DVFggKmN0eCxjb25zdCB2b2lkICpkYXRhLHNp emVfdCBjb3VudCkKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCB1cGRhdGUiKTsgcmV0 dXJuIDA7fQorKworK3N0YXRpYyBpbnQgYmFkX2ZpbmFsKEVWUF9NRF9DVFggKmN0eCx1bnNpZ25l ZCBjaGFyICptZCkKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCBGaW5hbCIpOyByZXR1 cm4gMDt9CisrCisrc3RhdGljIGNvbnN0IEVWUF9NRCBiYWRfbWQgPQorKwl7CisrCTAsCisrCTAs CisrCTAsCisrCTAsCisrCWJhZF9pbml0LAorKwliYWRfdXBkYXRlLAorKwliYWRfZmluYWwsCisr CU5VTEwsCisrCU5VTEwsCisrCU5VTEwsCisrCTAsCisrCXswLDAsMCwwfSwKKysJfTsKKysKKysj ZW5kaWYKKysKKyBpbnQgRVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjb25zdCBF VlBfTUQgKnR5cGUsIEVOR0lORSAqaW1wbCkKKyAJeworIAlFVlBfTURfQ1RYX2NsZWFyX2ZsYWdz KGN0eCxFVlBfTURfQ1RYX0ZMQUdfQ0xFQU5FRCk7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlp ZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRVZQX0RJ R0VTVElOSVRfRVgsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCWN0eC0+ZGlnZXN0 ID0gJmJhZF9tZDsKKysJCXJldHVybiAwOworKwkJfQorKyNlbmRpZgorICNpZm5kZWYgT1BFTlNT TF9OT19FTkdJTkUKKyAJLyogV2hldGhlciBpdCdzIG5pY2Ugb3Igbm90LCAiSW5pdHMiIGNhbiBi ZSB1c2VkIG9uICJGaW5hbCInZCBjb250ZXh0cworIAkgKiBzbyB0aGlzIGNvbnRleHQgbWF5IGFs cmVhZHkgaGF2ZSBhbiBFTkdJTkUhIFRyeSB0byBhdm9pZCByZWxlYXNpbmcKK0BAIC0xOTUsNiAr MjM3LDE4IEBAIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgsIGMKKyAjZW5k aWYKKyAJaWYgKGN0eC0+ZGlnZXN0ICE9IHR5cGUpCisgCQl7CisrI2lmZGVmIE9QRU5TU0xfRklQ UworKwkJaWYgKEZJUFNfbW9kZSgpKQorKwkJCXsKKysJCQlpZiAoISh0eXBlLT5mbGFncyAmIEVW UF9NRF9GTEFHX0ZJUFMpIAorKwkJCSAmJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdf Tk9OX0ZJUFNfQUxMT1cpKQorKwkJCQl7CisrCQkJCUVWUGVycihFVlBfRl9FVlBfRElHRVNUSU5J VF9FWCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpOworKwkJCQljdHgtPmRpZ2VzdCA9ICZiYWRf bWQ7CisrCQkJCXJldHVybiAwOworKwkJCQl9CisrCQkJfQorKyNlbmRpZgorIAkJaWYgKGN0eC0+ ZGlnZXN0ICYmIGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSkKKyAJCQlPUEVOU1NMX2ZyZWUoY3R4LT5t ZF9kYXRhKTsKKyAJCWN0eC0+ZGlnZXN0PXR5cGU7CitAQCAtMjIyLDYgKzI3Niw5IEBAIHNraXBf dG9faW5pdDoKKyAKKyBpbnQgRVZQX0RpZ2VzdFVwZGF0ZShFVlBfTURfQ1RYICpjdHgsIGNvbnN0 IHZvaWQgKmRhdGEsIHNpemVfdCBjb3VudCkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJ RklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAlyZXR1cm4gY3R4LT51cGRhdGUoY3R4 LGRhdGEsY291bnQpOworIAl9CisgCitAQCAtMjM4LDYgKzI5NSw5IEBAIGludCBFVlBfRGlnZXN0 RmluYWwoRVZQX01EX0NUWCAqY3R4LCB1bnMKKyBpbnQgRVZQX0RpZ2VzdEZpbmFsX2V4KEVWUF9N RF9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqbWQsIHVuc2lnbmVkIGludCAqc2l6ZSkKKyAJewor IAlpbnQgcmV0OworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygp OworKyNlbmRpZgorIAorIAlPUEVOU1NMX2Fzc2VydChjdHgtPmRpZ2VzdC0+bWRfc2l6ZSA8PSBF VlBfTUFYX01EX1NJWkUpOworIAlyZXQ9Y3R4LT5kaWdlc3QtPmZpbmFsKGN0eCxtZCk7CitkaWZm IC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZV9hZXMuYy5maXBzIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9lX2Flcy5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vZXZwL2VfYWVzLmMuZmlwcwkyMDA0LTAxLTI4IDIwOjA1OjMzLjAwMDAwMDAwMCArMDEw MAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9lX2Flcy5jCTIwMDktMTEtMTIg MTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtNjksMzIgKzY5LDI5IEBAIHR5cGVkZWYgc3Ry dWN0CisgCisgSU1QTEVNRU5UX0JMT0NLX0NJUEhFUihhZXNfMTI4LCBrcywgQUVTLCBFVlBfQUVT X0tFWSwKKyAJCSAgICAgICBOSURfYWVzXzEyOCwgMTYsIDE2LCAxNiwgMTI4LAorLQkJICAgICAg IDAsIGFlc19pbml0X2tleSwgTlVMTCwgCistCQkgICAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9p diwKKy0JCSAgICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAorLQkJICAgICAgIE5VTEwpCisr CQkgICAgICAgRVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAor KwkJICAgICAgIGFlc19pbml0X2tleSwKKysJCSAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM KQorIElNUExFTUVOVF9CTE9DS19DSVBIRVIoYWVzXzE5Miwga3MsIEFFUywgRVZQX0FFU19LRVks CisgCQkgICAgICAgTklEX2Flc18xOTIsIDE2LCAyNCwgMTYsIDEyOCwKKy0JCSAgICAgICAwLCBh ZXNfaW5pdF9rZXksIE5VTEwsIAorLQkJICAgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCist CQkgICAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKKy0JCSAgICAgICBOVUxMKQorKwkJICAg ICAgIEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKKysJCSAg ICAgICBhZXNfaW5pdF9rZXksCisrCQkgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKKyBJ TVBMRU1FTlRfQkxPQ0tfQ0lQSEVSKGFlc18yNTYsIGtzLCBBRVMsIEVWUF9BRVNfS0VZLAorIAkJ ICAgICAgIE5JRF9hZXNfMjU2LCAxNiwgMzIsIDE2LCAxMjgsCistCQkgICAgICAgMCwgYWVzX2lu aXRfa2V5LCBOVUxMLCAKKy0JCSAgICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAorLQkJICAg ICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCistCQkgICAgICAgTlVMTCkKKy0KKy0jZGVmaW5l IElNUExFTUVOVF9BRVNfQ0ZCUihrc2l6ZSxjYml0cykJSU1QTEVNRU5UX0NGQlIoYWVzLEFFUyxF VlBfQUVTX0tFWSxrcyxrc2l6ZSxjYml0cywxNikKKy0KKy1JTVBMRU1FTlRfQUVTX0NGQlIoMTI4 LDEpCistSU1QTEVNRU5UX0FFU19DRkJSKDE5MiwxKQorLUlNUExFTUVOVF9BRVNfQ0ZCUigyNTYs MSkKKy0KKy1JTVBMRU1FTlRfQUVTX0NGQlIoMTI4LDgpCistSU1QTEVNRU5UX0FFU19DRkJSKDE5 Miw4KQorLUlNUExFTUVOVF9BRVNfQ0ZCUigyNTYsOCkKKysJCSAgICAgICBFVlBfQ0lQSF9GTEFH X0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkgICAgICAgYWVzX2luaXRfa2V5 LAorKwkJICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCisrCisrI2RlZmluZSBJTVBMRU1F TlRfQUVTX0NGQlIoa3NpemUsY2JpdHMsZmxhZ3MpCUlNUExFTUVOVF9DRkJSKGFlcyxBRVMsRVZQ X0FFU19LRVksa3Msa3NpemUsY2JpdHMsMTYsZmxhZ3MpCisrCisrSU1QTEVNRU5UX0FFU19DRkJS KDEyOCwxLEVWUF9DSVBIX0ZMQUdfRklQUykKKytJTVBMRU1FTlRfQUVTX0NGQlIoMTkyLDEsRVZQ X0NJUEhfRkxBR19GSVBTKQorK0lNUExFTUVOVF9BRVNfQ0ZCUigyNTYsMSxFVlBfQ0lQSF9GTEFH X0ZJUFMpCisrCisrSU1QTEVNRU5UX0FFU19DRkJSKDEyOCw4LEVWUF9DSVBIX0ZMQUdfRklQUykK KytJTVBMRU1FTlRfQUVTX0NGQlIoMTkyLDgsRVZQX0NJUEhfRkxBR19GSVBTKQorK0lNUExFTUVO VF9BRVNfQ0ZCUigyNTYsOCxFVlBfQ0lQSF9GTEFHX0ZJUFMpCisgCisgc3RhdGljIGludCBhZXNf aW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAor IAkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIGludCBlbmMpCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZV9jYW1lbGxpYS5jLmZpcHMgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vZXZwL2VfY2FtZWxsaWEuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL2V2cC9lX2NhbWVsbGlhLmMuZmlwcwkyMDA2LTA4LTMxIDIyOjU2OjIwLjAwMDAwMDAwMCAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9lX2NhbWVsbGlhLmMJMjAw OS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC05Myw3ICs5Myw3IEBAIElNUExF TUVOVF9CTE9DS19DSVBIRVIoY2FtZWxsaWFfMjU2LCBrcywKKyAJRVZQX0NJUEhFUl9nZXRfYXNu MV9pdiwKKyAJTlVMTCkKKyAKKy0jZGVmaW5lIElNUExFTUVOVF9DQU1FTExJQV9DRkJSKGtzaXpl LGNiaXRzKQlJTVBMRU1FTlRfQ0ZCUihjYW1lbGxpYSxDYW1lbGxpYSxFVlBfQ0FNRUxMSUFfS0VZ LGtzLGtzaXplLGNiaXRzLDE2KQorKyNkZWZpbmUgSU1QTEVNRU5UX0NBTUVMTElBX0NGQlIoa3Np emUsY2JpdHMpCUlNUExFTUVOVF9DRkJSKGNhbWVsbGlhLENhbWVsbGlhLEVWUF9DQU1FTExJQV9L RVksa3Msa3NpemUsY2JpdHMsMTYsMCkKKyAKKyBJTVBMRU1FTlRfQ0FNRUxMSUFfQ0ZCUigxMjgs MSkKKyBJTVBMRU1FTlRfQ0FNRUxMSUFfQ0ZCUigxOTIsMSkKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL2V2cC9lX2RlczMuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL2V2cC9lX2RlczMuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9lX2Rl czMuYy5maXBzCTIwMDgtMTItMjkgMTM6MzU6NDcuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2VfZGVzMy5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAw MDAwMDAwICswMTAwCitAQCAtMjA2LDkgKzIwNiw5IEBAIHN0YXRpYyBpbnQgZGVzX2VkZTNfY2Zi OF9jaXBoZXIoRVZQX0NJUEgKKyAgICAgfQorIAorIEJMT0NLX0NJUEhFUl9kZWZzKGRlc19lZGUs IERFU19FREVfS0VZLCBOSURfZGVzX2VkZSwgOCwgMTYsIDgsIDY0LAorLQkJCUVWUF9DSVBIX1JB TkRfS0VZLCBkZXNfZWRlX2luaXRfa2V5LCBOVUxMLCAKKy0JCQlFVlBfQ0lQSEVSX3NldF9hc24x X2l2LAorLQkJCUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisrCQlFVlBfQ0lQSF9SQU5EX0tFWXxF VlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkJZGVzX2Vk ZV9pbml0X2tleSwKKysJCQlOVUxMLCBOVUxMLCBOVUxMLAorIAkJCWRlczNfY3RybCkKKyAKKyAj ZGVmaW5lIGRlc19lZGUzX2NmYjY0X2NpcGhlciBkZXNfZWRlX2NmYjY0X2NpcGhlcgorQEAgLTIx NywyMSArMjE3LDIxIEBAIEJMT0NLX0NJUEhFUl9kZWZzKGRlc19lZGUsIERFU19FREVfS0VZLCAK KyAjZGVmaW5lIGRlc19lZGUzX2VjYl9jaXBoZXIgZGVzX2VkZV9lY2JfY2lwaGVyCisgCisgQkxP Q0tfQ0lQSEVSX2RlZnMoZGVzX2VkZTMsIERFU19FREVfS0VZLCBOSURfZGVzX2VkZTMsIDgsIDI0 LCA4LCA2NCwKKy0JCQlFVlBfQ0lQSF9SQU5EX0tFWSwgZGVzX2VkZTNfaW5pdF9rZXksIE5VTEws IAorLQkJCUVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCistCQkJRVZQX0NJUEhFUl9nZXRfYXNuMV9p diwKKysJCUVWUF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFH X0RFRkFVTFRfQVNOMSwKKysJCQlkZXNfZWRlM19pbml0X2tleSwKKysJCQlOVUxMLCBOVUxMLCBO VUxMLAorIAkJCWRlczNfY3RybCkKKyAKKyBCTE9DS19DSVBIRVJfZGVmX2NmYihkZXNfZWRlMyxE RVNfRURFX0tFWSxOSURfZGVzX2VkZTMsMjQsOCwxLAorLQkJICAgICBFVlBfQ0lQSF9SQU5EX0tF WSwgZGVzX2VkZTNfaW5pdF9rZXksTlVMTCwKKy0JCSAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9p diwKKy0JCSAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKKysJCUVWUF9DSVBIX1JBTkRfS0VZ fEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKKysJCSAgICAg ZGVzX2VkZTNfaW5pdF9rZXksCisrCQkgICAgIE5VTEwsIE5VTEwsIE5VTEwsCisgCQkgICAgIGRl czNfY3RybCkKKyAKKyBCTE9DS19DSVBIRVJfZGVmX2NmYihkZXNfZWRlMyxERVNfRURFX0tFWSxO SURfZGVzX2VkZTMsMjQsOCw4LAorLQkJICAgICBFVlBfQ0lQSF9SQU5EX0tFWSwgZGVzX2VkZTNf aW5pdF9rZXksTlVMTCwKKy0JCSAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKy0JCSAgICAg RVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKKysJCUVWUF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZM QUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKKysJCSAgICAgZGVzX2VkZTNfaW5p dF9rZXksCisrCQkgICAgIE5VTEwsIE5VTEwsIE5VTEwsCisgCQkgICAgIGRlczNfY3RybCkKKyAK KyBzdGF0aWMgaW50IGRlc19lZGVfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3Qg dW5zaWduZWQgY2hhciAqa2V5LAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v ZXZwL2VfbnVsbC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2VfbnVsbC5j CistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2VfbnVsbC5jLmZpcHMJMjAwOC0x MC0zMSAyMDo0ODoyNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9ldnAvZV9udWxsLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BA IC02OSw3ICs2OSw3IEBAIHN0YXRpYyBjb25zdCBFVlBfQ0lQSEVSIG5fY2lwaGVyPQorIAl7Cisg CU5JRF91bmRlZiwKKyAJMSwwLDAsCistCTAsCisrCUVWUF9DSVBIX0ZMQUdfRklQUywKKyAJbnVs bF9pbml0X2tleSwKKyAJbnVsbF9jaXBoZXIsCisgCU5VTEwsCitkaWZmIC11cCBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9ldnAvZXZwX2VuYy5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vZXZwL2V2cF9lbmMuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9l dnBfZW5jLmMuZmlwcwkyMDA4LTExLTEyIDA0OjU4OjAwLjAwMDAwMDAwMCArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9ldnBfZW5jLmMJMjAwOS0xMS0xMiAxMjozNjo1 MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC02OCw4ICs2OCw1MyBAQAorIAorIGNvbnN0IGNoYXIgRVZQ X3ZlcnNpb25bXT0iRVZQIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCisrI2lmZGVmIE9QRU5T U0xfRklQUworKworKy8qIFRoZSBwdXJwb3NlIG9mIHRoZXNlIGlzIHRvIHRyYXAgcHJvZ3JhbXMg dGhhdCBhdHRlbXB0IHRvIHVzZSBub24gRklQUworKyAqIGFsZ29yaXRobXMgaW4gRklQUyBtb2Rl IGFuZCBpZ25vcmUgdGhlIGVycm9ycy4KKysgKi8KKysKKytzdGF0aWMgaW50IGJhZF9pbml0KEVW UF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKysJCSAgICBjb25z dCB1bnNpZ25lZCBjaGFyICppdiwgaW50IGVuYykKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNp cGhlciBpbml0Iik7IHJldHVybiAwO30KKysKKytzdGF0aWMgaW50IGJhZF9kb19jaXBoZXIoRVZQ X0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAorKwkJCSBjb25zdCB1bnNpZ25l ZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCkKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNp cGhlciB1cGRhdGUiKTsgcmV0dXJuIDA7fQorKworKy8qIE5COiBubyBjbGVhbnVwIGJlY2F1c2Ug aXQgaXMgYWxsb3dlZCBhZnRlciBmYWlsZWQgaW5pdCAqLworKworK3N0YXRpYyBpbnQgYmFkX3Nl dF9hc24xKEVWUF9DSVBIRVJfQ1RYICpjdHgsIEFTTjFfVFlQRSAqdHlwKQorKwl7IEZJUFNfRVJS T1JfSUdOT1JFRCgiQ2lwaGVyIHNldF9hc24xIik7IHJldHVybiAwO30KKytzdGF0aWMgaW50IGJh ZF9nZXRfYXNuMShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBBU04xX1RZUEUgKnR5cCkKKysJeyBGSVBT X0VSUk9SX0lHTk9SRUQoIkNpcGhlciBnZXRfYXNuMSIpOyByZXR1cm4gMDt9Cisrc3RhdGljIGlu dCBiYWRfY3RybChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBpbnQgdHlwZSwgaW50IGFyZywgdm9pZCAq cHRyKQorKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIGN0cmwiKTsgcmV0dXJuIDA7fQor KworK3N0YXRpYyBjb25zdCBFVlBfQ0lQSEVSIGJhZF9jaXBoZXIgPQorKwl7CisrCTAsCisrCTAs CisrCTAsCisrCTAsCisrCTAsCisrCWJhZF9pbml0LAorKwliYWRfZG9fY2lwaGVyLAorKwlOVUxM LAorKwkwLAorKwliYWRfc2V0X2FzbjEsCisrCWJhZF9nZXRfYXNuMSwKKysJYmFkX2N0cmwsCisr CU5VTEwKKysJfTsKKysKKysjZW5kaWYKKysKKyB2b2lkIEVWUF9DSVBIRVJfQ1RYX2luaXQoRVZQ X0NJUEhFUl9DVFggKmN0eCkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxm dGVzdF9jaGVjaygpOworKyNlbmRpZgorIAltZW1zZXQoY3R4LDAsc2l6ZW9mKEVWUF9DSVBIRVJf Q1RYKSk7CisgCS8qIGN0eC0+Y2lwaGVyPU5VTEw7ICovCisgCX0KK0BAIC0xMDEsNiArMTQ2LDE0 IEBAIGludCBFVlBfQ2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKKyAJCQllbmMgPSAx OworIAkJY3R4LT5lbmNyeXB0ID0gZW5jOworIAkJfQorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJ aWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0VWUF9D SVBIRVJJTklUX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQljdHgtPmNpcGhl ciA9ICZiYWRfY2lwaGVyOworKwkJcmV0dXJuIDA7CisrCQl9CisrI2VuZGlmCisgI2lmbmRlZiBP UEVOU1NMX05PX0VOR0lORQorIAkvKiBXaGV0aGVyIGl0J3MgbmljZSBvciBub3QsICJJbml0cyIg Y2FuIGJlIHVzZWQgb24gIkZpbmFsIidkIGNvbnRleHRzCisgCSAqIHNvIHRoaXMgY29udGV4dCBt YXkgYWxyZWFkeSBoYXZlIGFuIEVOR0lORSEgVHJ5IHRvIGF2b2lkIHJlbGVhc2luZworQEAgLTIx OSw2ICsyNzIsMjIgQEAgc2tpcF90b19pbml0OgorIAkJfQorIAl9CisgCisrI2lmZGVmIE9QRU5T U0xfRklQUworKwkvKiBBZnRlciAna2V5JyBpcyBzZXQgbm8gZnVydGhlciBwYXJhbWV0ZXJzIGNo YW5nZXMgYXJlIHBlcm1pc3NpYmxlLgorKwkgKiBTbyBvbmx5IGNoZWNrIGZvciBub24gRklQUyBl bmFibGluZyBhdCB0aGlzIHBvaW50LgorKwkgKi8KKysJaWYgKGtleSAmJiBGSVBTX21vZGUoKSkK KysJCXsKKysJCWlmICghKGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfRklQUykK KysJCQkmICEoY3R4LT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorKwkJ CXsKKysJCQlFVlBlcnIoRVZQX0ZfRVZQX0NJUEhFUklOSVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZP Ul9GSVBTKTsKKysJCQljdHgtPmNpcGhlciA9ICZiYWRfY2lwaGVyOworKwkJCXJldHVybiAwOwor KwkJCX0KKysJCX0KKysjZW5kaWYKKysKKyAJaWYoa2V5IHx8IChjdHgtPmNpcGhlci0+ZmxhZ3Mg JiBFVlBfQ0lQSF9BTFdBWVNfQ0FMTF9JTklUKSkgeworIAkJaWYoIWN0eC0+Y2lwaGVyLT5pbml0 KGN0eCxrZXksaXYsZW5jKSkgcmV0dXJuIDA7CisgCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL2V2cC9ldnBfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9ldnAvZXZwX2Vyci5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2V2cF9l cnIuYy5maXBzCTIwMDgtMTItMjkgMTc6MTE6NTQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2V2cF9lcnIuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAw MDAwMDAwMCArMDEwMAorQEAgLTE1NCw2ICsxNTQsNyBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRB IEVWUF9zdHJfcmVhc29uc1tdCisge0VSUl9SRUFTT04oRVZQX1JfREVDT0RFX0VSUk9SKSAgICAg ICAgICAsImRlY29kZSBlcnJvciJ9LAorIHtFUlJfUkVBU09OKEVWUF9SX0RJRkZFUkVOVF9LRVlf VFlQRVMpICAgLCJkaWZmZXJlbnQga2V5IHR5cGVzIn0sCisge0VSUl9SRUFTT04oRVZQX1JfRElG RkVSRU5UX1BBUkFNRVRFUlMpICAsImRpZmZlcmVudCBwYXJhbWV0ZXJzIn0sCisre0VSUl9SRUFT T04oRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpICAgICAsImRpc2FibGVkIGZvciBmaXBzIn0sCisg e0VSUl9SRUFTT04oRVZQX1JfRU5DT0RFX0VSUk9SKSAgICAgICAgICAsImVuY29kZSBlcnJvciJ9 LAorIHtFUlJfUkVBU09OKEVWUF9SX0VWUF9QQkVfQ0lQSEVSSU5JVF9FUlJPUiksImV2cCBwYmUg Y2lwaGVyaW5pdCBlcnJvciJ9LAorIHtFUlJfUkVBU09OKEVWUF9SX0VYUEVDVElOR19BTl9SU0Ff S0VZKSAgLCJleHBlY3RpbmcgYW4gcnNhIGtleSJ9LAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vZXZwL2V2cC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZw L2V2cC5oCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2V2cC5oLmZpcHMJMjAw OS0xMS0xMiAxMjozNjo0OS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0 L2NyeXB0by9ldnAvZXZwLmgJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BA IC03NSw2ICs3NSwxMCBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorICNlbmRpZgorIAor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlm CisrCisgLyoKKyAjZGVmaW5lIEVWUF9SQzJfS0VZX1NJWkUJCTE2CisgI2RlZmluZSBFVlBfUkM0 X0tFWV9TSVpFCQkxNgorQEAgLTE5Nyw2ICsyMDEsOCBAQCB0eXBlZGVmIGludCBldnBfdmVyaWZ5 X21ldGhvZChpbnQgdHlwZSxjCisgCisgI2RlZmluZSBFVlBfTURfRkxBR19QS0VZX01FVEhPRF9T SUdOQVRVUkUJMHgwMDA0CisgCisrI2RlZmluZSBFVlBfTURfRkxBR19GSVBTCTB4MDQwMCAvKiBO b3RlIGlmIHN1aXRhYmxlIGZvciB1c2UgaW4gRklQUyBtb2RlICovCisrCisgLyogRGlnZXN0QWxn b3JpdGhtSWRlbnRpZmllciBmbGFncy4uLiAqLworIAorICNkZWZpbmUgRVZQX01EX0ZMQUdfRElH QUxHSURfTUFTSwkJMHgwMDE4CitAQCAtMjY5LDEwICsyNzUsNiBAQCBzdHJ1Y3QgZW52X21kX2N0 eF9zdAorIAkJCQkJCSogY2xlYW5lZCAqLworICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1JFVVNF CQkweDAwMDQgLyogRG9uJ3QgZnJlZSB1cCBjdHgtPm1kX2RhdGEKKyAJCQkJCQkqIGluIEVWUF9N RF9DVFhfY2xlYW51cCAqLworLS8qIEZJUFMgYW5kIHBhZCBvcHRpb25zIGFyZSBpZ25vcmVkIGlu IDEuMC4wLCBkZWZpbml0aW9ucyBhcmUgaGVyZQorLSAqIHNvIHdlIGRvbid0IGFjY2lkZW50YWxs eSByZXVzZSB0aGUgdmFsdWVzIGZvciBvdGhlciBwdXJwb3Nlcy4KKy0gKi8KKy0KKyAjZGVmaW5l IEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVwkweDAwMDgJLyogQWxsb3cgdXNlIG9mIG5v biBGSVBTIGRpZ2VzdAorIAkJCQkJCSAqIGluIEZJUFMgbW9kZSAqLworIAorQEAgLTI4NCw2ICsy ODYsMTAgQEAgc3RydWN0IGVudl9tZF9jdHhfc3QKKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19Q QURfUEtDUzEJMHgwMAkvKiBQS0NTIzEgdjEuNSBtb2RlICovCisgI2RlZmluZSBFVlBfTURfQ1RY X0ZMQUdfUEFEX1g5MzEJMHgxMAkvKiBYOS4zMSBtb2RlICovCisgI2RlZmluZSBFVlBfTURfQ1RY X0ZMQUdfUEFEX1BTUwkJMHgyMAkvKiBQU1MgbW9kZSAqLworKyNkZWZpbmUgTV9FVlBfTURfQ1RY X0ZMQUdfUFNTX1NBTFQoY3R4KSBcCisrCQkoKGN0eC0+ZmxhZ3M+PjE2KSAmMHhGRkZGKSAvKiBz ZWVkIGxlbmd0aCAqLworKyNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTgkweEZGRkYJ Lyogc2FsdCBsZW4gc2FtZSBhcyBkaWdlc3QgKi8KKysjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19Q U1NfTVJFQwkweEZGRkUJLyogc2FsdCBtYXggb3IgYXV0byByZWNvdmVyZWQgKi8KKyAKKyAjZGVm aW5lIEVWUF9NRF9DVFhfRkxBR19OT19JTklUCQkweDAxMDAgLyogRG9uJ3QgaW5pdGlhbGl6ZSBt ZF9kYXRhICovCisgCitAQCAtMzMwLDYgKzMzNiwxNCBAQCBzdHJ1Y3QgZXZwX2NpcGhlcl9zdAor ICNkZWZpbmUgCUVWUF9DSVBIX05PX1BBRERJTkcJCTB4MTAwCisgLyogY2lwaGVyIGhhbmRsZXMg cmFuZG9tIGtleSBnZW5lcmF0aW9uICovCisgI2RlZmluZSAJRVZQX0NJUEhfUkFORF9LRVkJCTB4 MjAwCisrLyogTm90ZSBpZiBzdWl0YWJsZSBmb3IgdXNlIGluIEZJUFMgbW9kZSAqLworKyNkZWZp bmUJCUVWUF9DSVBIX0ZMQUdfRklQUwkJMHg0MDAKKysvKiBBbGxvdyBub24gRklQUyBjaXBoZXIg aW4gRklQUyBtb2RlICovCisrI2RlZmluZQkJRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVwkw eDgwMAorKy8qIEFsbG93IHVzZSBkZWZhdWx0IEFTTjEgZ2V0L3NldCBpdiAqLworKyNkZWZpbmUJ CUVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xCTB4MTAwMAorKy8qIEJ1ZmZlciBsZW5ndGggaW4g Yml0cyBub3QgYnl0ZXM6IENGQjEgbW9kZSBvbmx5ICovCisrI2RlZmluZQkJRVZQX0NJUEhfRkxB R19MRU5HVEhfQklUUwkweDIwMDAKKyAKKyAvKiBjdHJsKCkgdmFsdWVzICovCisgCitAQCAtNTA3 LDYgKzUyMSwxMCBAQCBpbnQJRVZQX0J5dGVzVG9LZXkoY29uc3QgRVZQX0NJUEhFUiAqdHlwCisg CQljb25zdCB1bnNpZ25lZCBjaGFyICpzYWx0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAor IAkJaW50IGRhdGFsLCBpbnQgY291bnQsIHVuc2lnbmVkIGNoYXIgKmtleSx1bnNpZ25lZCBjaGFy ICppdik7CisgCisrdm9pZAlFVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoRVZQX0NJUEhFUl9DVFgg KmN0eCwgaW50IGZsYWdzKTsKKyt2b2lkCUVWUF9DSVBIRVJfQ1RYX2NsZWFyX2ZsYWdzKEVWUF9D SVBIRVJfQ1RYICpjdHgsIGludCBmbGFncyk7CisraW50IAlFVlBfQ0lQSEVSX0NUWF90ZXN0X2Zs YWdzKGNvbnN0IEVWUF9DSVBIRVJfQ1RYICpjdHgsaW50IGZsYWdzKTsKKysKKyBpbnQJRVZQX0Vu Y3J5cHRJbml0KEVWUF9DSVBIRVJfQ1RYICpjdHgsY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLAor IAkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBjb25zdCB1bnNpZ25lZCBjaGFyICppdik7Cisg aW50CUVWUF9FbmNyeXB0SW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3R4LGNvbnN0IEVWUF9DSVBI RVIgKmNpcGhlciwgRU5HSU5FICppbXBsLAorQEAgLTEyMjUsNiArMTI0Myw3IEBAIHZvaWQgRVJS X2xvYWRfRVZQX3N0cmluZ3Modm9pZCk7CisgI2RlZmluZSBFVlBfUl9ERUNPREVfRVJST1IJCQkJ IDExNAorICNkZWZpbmUgRVZQX1JfRElGRkVSRU5UX0tFWV9UWVBFUwkJCSAxMDEKKyAjZGVmaW5l IEVWUF9SX0RJRkZFUkVOVF9QQVJBTUVURVJTCQkJIDE1MworKyNkZWZpbmUgRVZQX1JfRElTQUJM RURfRk9SX0ZJUFMJCQkJIDE2MAorICNkZWZpbmUgRVZQX1JfRU5DT0RFX0VSUk9SCQkJCSAxMTUK KyAjZGVmaW5lIEVWUF9SX0VWUF9QQkVfQ0lQSEVSSU5JVF9FUlJPUgkJCSAxMTkKKyAjZGVmaW5l IEVWUF9SX0VYUEVDVElOR19BTl9SU0FfS0VZCQkJIDEyNworZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vZXZwL2V2cF9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL2V2cC9ldnBfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZXZw X2xpYi5jLmZpcHMJMjAwOS0wNC0xMCAxMjozMDoyNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZXZwX2xpYi5jCTIwMDktMTEtMTIgMTI6MzY6NTAu MDAwMDAwMDAwICswMTAwCitAQCAtNjcsNiArNjcsOCBAQCBpbnQgRVZQX0NJUEhFUl9wYXJhbV90 b19hc24xKEVWUF9DSVBIRVJfCisgCisgCWlmIChjLT5jaXBoZXItPnNldF9hc24xX3BhcmFtZXRl cnMgIT0gTlVMTCkKKyAJCXJldD1jLT5jaXBoZXItPnNldF9hc24xX3BhcmFtZXRlcnMoYyx0eXBl KTsKKysJZWxzZSBpZiAoYy0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9B U04xKQorKwkJcmV0PUVWUF9DSVBIRVJfc2V0X2FzbjFfaXYoYywgdHlwZSk7CisgCWVsc2UKKyAJ CXJldD0tMTsKKyAJcmV0dXJuKHJldCk7CitAQCAtNzgsNiArODAsOCBAQCBpbnQgRVZQX0NJUEhF Ul9hc24xX3RvX3BhcmFtKEVWUF9DSVBIRVJfCisgCisgCWlmIChjLT5jaXBoZXItPmdldF9hc24x X3BhcmFtZXRlcnMgIT0gTlVMTCkKKyAJCXJldD1jLT5jaXBoZXItPmdldF9hc24xX3BhcmFtZXRl cnMoYyx0eXBlKTsKKysJZWxzZSBpZiAoYy0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdf REVGQVVMVF9BU04xKQorKwkJcmV0PUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYoYywgdHlwZSk7Cisg CWVsc2UKKyAJCXJldD0tMTsKKyAJcmV0dXJuKHJldCk7CitAQCAtMTgwLDYgKzE4NCw5IEBAIGlu dCBFVlBfQ0lQSEVSX0NUWF9ibG9ja19zaXplKGNvbnN0IEVWUF8KKyAKKyBpbnQgRVZQX0NpcGhl cihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUwor KwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCXJldHVybiBjdHgtPmNpcGhlci0+ ZG9fY2lwaGVyKGN0eCxvdXQsaW4saW5sKTsKKyAJfQorIAorQEAgLTI4OSwzICsyOTYsMTggQEAg aW50IEVWUF9NRF9DVFhfdGVzdF9mbGFncyhjb25zdCBFVlBfTURfQworIAl7CisgCXJldHVybiAo Y3R4LT5mbGFncyAmIGZsYWdzKTsKKyAJfQorKworK3ZvaWQgRVZQX0NJUEhFUl9DVFhfc2V0X2Zs YWdzKEVWUF9DSVBIRVJfQ1RYICpjdHgsIGludCBmbGFncykKKysJeworKwljdHgtPmZsYWdzIHw9 IGZsYWdzOworKwl9CisrCisrdm9pZCBFVlBfQ0lQSEVSX0NUWF9jbGVhcl9mbGFncyhFVlBfQ0lQ SEVSX0NUWCAqY3R4LCBpbnQgZmxhZ3MpCisrCXsKKysJY3R4LT5mbGFncyAmPSB+ZmxhZ3M7Cisr CX0KKysKKytpbnQgRVZQX0NJUEhFUl9DVFhfdGVzdF9mbGFncyhjb25zdCBFVlBfQ0lQSEVSX0NU WCAqY3R4LCBpbnQgZmxhZ3MpCisrCXsKKysJcmV0dXJuIChjdHgtPmZsYWdzICYgZmxhZ3MpOwor Kwl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZXZwX2xvY2wuaC5m aXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9ldnBfbG9jbC5oCistLS0gb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2V2cF9sb2NsLmguZmlwcwkyMDA5LTExLTEyIDEyOjM2 OjQ5LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9l dnBfbG9jbC5oCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMTExLDEx ICsxMTEsMTEgQEAgc3RhdGljIGludCBjbmFtZSMjX2NiY19jaXBoZXIoRVZQX0NJUEhFUgorIHN0 YXRpYyBpbnQgY25hbWUjI19jZmIjI2NiaXRzIyNfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgs IHVuc2lnbmVkIGNoYXIgKm91dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmwp IFwKKyB7XAorIAlzaXplX3QgY2h1bms9RVZQX01BWENIVU5LO1wKKy0JaWYgKGNiaXRzPT0xKSAg Y2h1bms+Pj0zO1wKKysJaWYgKGNiaXRzPT0xICYmICEoY3R4LT5mbGFncyAmIEVWUF9DSVBIX0ZM QUdfTEVOR1RIX0JJVFMpKSAgY2h1bms+Pj0zO1wKKyAJaWYgKGlubDxjaHVuaykgY2h1bms9aW5s O1wKKyAJd2hpbGUoaW5sICYmIGlubD49Y2h1bmspXAorIAkgICAge1wKKy0JICAgIGNwcmVmaXgj I19jZmIjI2NiaXRzIyNfZW5jcnlwdChpbiwgb3V0LCAobG9uZykoY2JpdHM9PTE/Y2h1bmsqODpj aHVuayksICYoKGtzdHJ1Y3QgKiljdHgtPmNpcGhlcl9kYXRhKS0+a3NjaGVkLCBjdHgtPml2LCAm Y3R4LT5udW0sIGN0eC0+ZW5jcnlwdCk7XAorKwkgICAgY3ByZWZpeCMjX2NmYiMjY2JpdHMjI19l bmNyeXB0KGluLCBvdXQsIChsb25nKShjYml0cz09MSAmJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQ SF9GTEFHX0xFTkdUSF9CSVRTKT9jaHVuayo4OmNodW5rKSwgJigoa3N0cnVjdCAqKWN0eC0+Y2lw aGVyX2RhdGEpLT5rc2NoZWQsIGN0eC0+aXYsICZjdHgtPm51bSwgY3R4LT5lbmNyeXB0KTtcCisg CSAgICBpbmwtPWNodW5rO1wKKyAJICAgIGluICs9Y2h1bms7XAorIAkgICAgb3V0Kz1jaHVuaztc CitAQCAtMjU0LDE0ICsyNTQsMjkgQEAgY29uc3QgRVZQX0NJUEhFUiAqRVZQXyMjY25hbWUjI19l Y2Iodm9pZAorIAorICNkZWZpbmUgRVZQX0NfREFUQShrc3RydWN0LCBjdHgpCSgoa3N0cnVjdCAq KShjdHgpLT5jaXBoZXJfZGF0YSkKKyAKKy0jZGVmaW5lIElNUExFTUVOVF9DRkJSKGNpcGhlcixj cHJlZml4LGtzdHJ1Y3Qsa3NjaGVkLGtleXNpemUsY2JpdHMsaXZfbGVuKSBcCisrI2RlZmluZSBJ TVBMRU1FTlRfQ0ZCUihjaXBoZXIsY3ByZWZpeCxrc3RydWN0LGtzY2hlZCxrZXlzaXplLGNiaXRz LGl2X2xlbixmbCkgXAorIAlCTE9DS19DSVBIRVJfZnVuY19jZmIoY2lwaGVyIyNfIyNrZXlzaXpl LGNwcmVmaXgsY2JpdHMsa3N0cnVjdCxrc2NoZWQpIFwKKyAJQkxPQ0tfQ0lQSEVSX2RlZl9jZmIo Y2lwaGVyIyNfIyNrZXlzaXplLGtzdHJ1Y3QsIFwKKyAJCQkgICAgIE5JRF8jI2NpcGhlciMjXyMj a2V5c2l6ZSwga2V5c2l6ZS84LCBpdl9sZW4sIGNiaXRzLCBcCistCQkJICAgICAwLCBjaXBoZXIj I19pbml0X2tleSwgTlVMTCwgXAorLQkJCSAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwgXAor LQkJCSAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwgXAorLQkJCSAgICAgTlVMTCkKKysJCQkg ICAgIChmbCl8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsIFwKKysJCQkgICAgIGNpcGhlciMj X2luaXRfa2V5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQorKworKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysjZGVmaW5lIFJDMl9zZXRfa2V5CXByaXZhdGVfUkMyX3NldF9rZXkKKysjZGVmaW5lIFJD NF9zZXRfa2V5CXByaXZhdGVfUkM0X3NldF9rZXkKKysjZGVmaW5lIENBU1Rfc2V0X2tleQlwcml2 YXRlX0NBU1Rfc2V0X2tleQorKyNkZWZpbmUgUkM1XzMyX3NldF9rZXkJcHJpdmF0ZV9SQzVfMzJf c2V0X2tleQorKyNkZWZpbmUgQkZfc2V0X2tleQlwcml2YXRlX0JGX3NldF9rZXkKKysjZGVmaW5l IENhbWVsbGlhX3NldF9rZXkgcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5CisrI2RlZmluZSBpZGVh X3NldF9lbmNyeXB0X2tleSBwcml2YXRlX2lkZWFfc2V0X2VuY3J5cHRfa2V5CisrCisrI2RlZmlu ZSBNRDVfSW5pdAlwcml2YXRlX01ENV9Jbml0CisrI2RlZmluZSBNRDRfSW5pdAlwcml2YXRlX01E NF9Jbml0CisrI2RlZmluZSBNRDJfSW5pdAlwcml2YXRlX01EMl9Jbml0CisrI2RlZmluZSBNREMy X0luaXQJcHJpdmF0ZV9NREMyX0luaXQKKysjZGVmaW5lIFNIQV9Jbml0CXByaXZhdGVfU0hBX0lu aXQKKysKKysjZW5kaWYKKyAKKyBzdHJ1Y3QgZXZwX3BrZXlfY3R4X3N0CisgCXsKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMgb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vZXZwL21fZHNzLmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9ldnAvbV9kc3MuYy5maXBzCTIwMDYtMDQtMTkgMTk6MDU6NTcuMDAwMDAwMDAwICswMjAwCisr Kysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL21fZHNzLmMJMjAwOS0xMS0xMiAxMjoz Njo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC04MSw3ICs4MSw3IEBAIHN0YXRpYyBjb25zdCBFVlBf TUQgZHNhX21kPQorIAlOSURfZHNhV2l0aFNIQSwKKyAJTklEX2RzYVdpdGhTSEEsCisgCVNIQV9E SUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX0RJR0VTVCwKKysJRVZQX01EX0ZMQUdf UEtFWV9ESUdFU1R8RVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdCwKKyAJdXBkYXRlLAorIAlmaW5h bCwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9tX2RzczEuYy5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9tX2RzczEuYworLS0tIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL2V2cC9tX2RzczEuYy5maXBzCTIwMDYtMDQtMTkgMTk6MDU6NTcuMDAw MDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL21fZHNzMS5j CTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtODIsNyArODIsNyBAQCBz dGF0aWMgY29uc3QgRVZQX01EIGRzczFfbWQ9CisgCU5JRF9kc2EsCisgCU5JRF9kc2FXaXRoU0hB MSwKKyAJU0hBX0RJR0VTVF9MRU5HVEgsCistCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNULAorKwlF VlBfTURfRkxBR19QS0VZX0RJR0VTVHxFVlBfTURfRkxBR19GSVBTLAorIAlpbml0LAorIAl1cGRh dGUsCisgCWZpbmFsLAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL21f c2hhMS5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL21fc2hhMS5jCistLS0g b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMJMjAwOC0wMy0xMiAy MjoxNDoyNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9l dnAvbV9zaGExLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC04Miw3 ICs4Miw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMV9tZD0KKyAJTklEX3NoYTEsCisgCU5J RF9zaGExV2l0aFJTQUVuY3J5cHRpb24sCisgCVNIQV9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURf RkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAor KwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURf QUJTRU5UfAorKwkJRVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdCwKKyAJdXBkYXRlLAorIAlmaW5h bCwKK0BAIC0xMTksNyArMTIwLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEyMjRfbWQ9Cisg CU5JRF9zaGEyMjQsCisgCU5JRF9zaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiwKKyAJU0hBMjI0X0RJ R0VTVF9MRU5HVEgsCistCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURf RkxBR19ESUdBTEdJRF9BQlNFTlQsCisrCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVS RXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8CisrCQlFVlBfTURfRkxBR19GSVBTLAorIAlp bml0MjI0LAorIAl1cGRhdGUyNTYsCisgCWZpbmFsMjU2LAorQEAgLTEzOCw3ICsxNDAsOCBAQCBz dGF0aWMgY29uc3QgRVZQX01EIHNoYTI1Nl9tZD0KKyAJTklEX3NoYTI1NiwKKyAJTklEX3NoYTI1 NldpdGhSU0FFbmNyeXB0aW9uLAorIAlTSEEyNTZfRElHRVNUX0xFTkdUSCwKKy0JRVZQX01EX0ZM QUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKKysJ RVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FC U0VOVHwKKysJCUVWUF9NRF9GTEFHX0ZJUFMsCisgCWluaXQyNTYsCisgCXVwZGF0ZTI1NiwKKyAJ ZmluYWwyNTYsCitAQCAtMTY5LDcgKzE3Miw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMzg0 X21kPQorIAlOSURfc2hhMzg0LAorIAlOSURfc2hhMzg0V2l0aFJTQUVuY3J5cHRpb24sCisgCVNI QTM4NF9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8 RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAorKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9T SUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAorKwkJRVZQX01EX0ZMQUdfRklQ UywKKyAJaW5pdDM4NCwKKyAJdXBkYXRlNTEyLAorIAlmaW5hbDUxMiwKK0BAIC0xODgsNyArMTky LDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGE1MTJfbWQ9CisgCU5JRF9zaGE1MTIsCisgCU5J RF9zaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiwKKyAJU0hBNTEyX0RJR0VTVF9MRU5HVEgsCistCUVW UF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNF TlQsCisrCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdB TEdJRF9BQlNFTlR8CisrCQlFVlBfTURfRkxBR19GSVBTLAorIAlpbml0NTEyLAorIAl1cGRhdGU1 MTIsCisgCWZpbmFsNTEyLAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZw L25hbWVzLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvbmFtZXMuYworLS0t IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9uYW1lcy5jLmZpcHMJMjAwOS0wNC0xMCAx MjozMDoyNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9l dnAvbmFtZXMuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTY2LDYg KzY2LDEwIEBAIGludCBFVlBfYWRkX2NpcGhlcihjb25zdCBFVlBfQ0lQSEVSICpjKQorIAl7Cisg CWludCByOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJT1BFTlNTTF9pbml0X2xpYnJhcnko KTsKKysjZW5kaWYKKysKKyAJcj1PQkpfTkFNRV9hZGQoT0JKX25pZDJzbihjLT5uaWQpLE9CSl9O QU1FX1RZUEVfQ0lQSEVSX01FVEgsKGNvbnN0IGNoYXIgKiljKTsKKyAJaWYgKHIgPT0gMCkgcmV0 dXJuKDApOworIAljaGVja19kZWZlcihjLT5uaWQpOworQEAgLTc5LDYgKzgzLDEwIEBAIGludCBF VlBfYWRkX2RpZ2VzdChjb25zdCBFVlBfTUQgKm1kKQorIAlpbnQgcjsKKyAJY29uc3QgY2hhciAq bmFtZTsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCU9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7 CisrI2VuZGlmCisrCisgCW5hbWU9T0JKX25pZDJzbihtZC0+dHlwZSk7CisgCXI9T0JKX05BTUVf YWRkKG5hbWUsT0JKX05BTUVfVFlQRV9NRF9NRVRILChjb25zdCBjaGFyICopbWQpOworIAlpZiAo ciA9PSAwKSByZXR1cm4oMCk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9l dnAvcF9zaWduLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvcF9zaWduLmMK Ky0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvcF9zaWduLmMuZmlwcwkyMDA2LTA1 LTI0IDE1OjI5OjMwLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL2V2cC9wX3NpZ24uYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAg LTYxLDYgKzYxLDcgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyAjaW5jbHVkZSA8b3Bl bnNzbC9vYmplY3RzLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL3JzYS5oPgorIAorICNpZmRlZiB1bmRlZgorIHZvaWQgRVZQX1NpZ25Jbml0KEVWUF9N RF9DVFggKmN0eCwgRVZQX01EICp0eXBlKQorQEAgLTEwMSw2ICsxMDIsMjIgQEAgaW50IEVWUF9T aWduRmluYWwoRVZQX01EX0NUWCAqY3R4LCB1bnNpZworIAkJCWdvdG8gZXJyOworIAkJaWYgKEVW UF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJlX21kKHBrY3R4LCBjdHgtPmRpZ2VzdCkgPD0gMCkKKyAJ CQlnb3RvIGVycjsKKysJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMx KQorKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfWDkzMV9Q QURESU5HKSA8PSAwKQorKwkJCQlnb3RvIGVycjsKKysJCWlmIChjdHgtPmZsYWdzICYgRVZQX01E X0NUWF9GTEFHX1BBRF9QU1MpCisrCQkJeworKwkJCWludCBzYWx0bGVuOworKwkJCWlmIChFVlBf UEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfUEtDUzFfUFNTX1BBRERJTkcpIDw9 IDApCisrCQkJCWdvdG8gZXJyOworKwkJCXNhbHRsZW4gPSBNX0VWUF9NRF9DVFhfRkxBR19QU1Nf U0FMVChjdHgpOworKwkJCWlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4p CisrCQkJCXNhbHRsZW4gPSAtMTsKKysJCQllbHNlIGlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhf RkxBR19QU1NfTVJFQykKKysJCQkJc2FsdGxlbiA9IC0yOworKwkJCWlmIChFVlBfUEtFWV9DVFhf c2V0X3JzYV9wc3Nfc2FsdGxlbihwa2N0eCwgc2FsdGxlbikgPD0gMCkKKysJCQkJZ290byBlcnI7 CisrCQkJfQorIAkJaWYgKEVWUF9QS0VZX3NpZ24ocGtjdHgsIHNpZ3JldCwgJnNsdG1wLCBtLCBt X2xlbikgPD0gMCkKKyAJCQlnb3RvIGVycjsKKyAJCSpzaWdsZW4gPSBzbHRtcDsKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jLmZpcHMgb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0 L2NyeXB0by9ldnAvcF92ZXJpZnkuYy5maXBzCTIwMDgtMTEtMTIgMDQ6NTg6MDEuMDAwMDAwMDAw ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMJMjAw OS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC02MSw2ICs2MSw3IEBACisgI2lu Y2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorICNp bmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAKKyBp bnQgRVZQX1ZlcmlmeUZpbmFsKEVWUF9NRF9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAq c2lnYnVmLAorIAkgICAgIHVuc2lnbmVkIGludCBzaWdsZW4sIEVWUF9QS0VZICpwa2V5KQorQEAg LTg2LDYgKzg3LDIyIEBAIGludCBFVlBfVmVyaWZ5RmluYWwoRVZQX01EX0NUWCAqY3R4LCBjb24K KyAJCQlnb3RvIGVycjsKKyAJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3NpZ25hdHVyZV9tZChwa2N0 eCwgY3R4LT5kaWdlc3QpIDw9IDApCisgCQkJZ290byBlcnI7CisrCQlpZiAoY3R4LT5mbGFncyAm IEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSkKKysJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2Ff cGFkZGluZyhwa2N0eCwgUlNBX1g5MzFfUEFERElORykgPD0gMCkKKysJCQkJZ290byBlcnI7Cisr CQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTKQorKwkJCXsKKysJCQlp bnQgc2FsdGxlbjsKKysJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwg UlNBX1BLQ1MxX1BTU19QQURESU5HKSA8PSAwKQorKwkJCQlnb3RvIGVycjsKKysJCQlzYWx0bGVu ID0gTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NBTFQoY3R4KTsKKysJCQlpZiAoc2FsdGxlbiA9PSBF VlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVOKQorKwkJCQlzYWx0bGVuID0gLTE7CisrCQkJZWxzZSBp ZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01SRUMpCisrCQkJCXNhbHRsZW4gPSAt MjsKKysJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcHNzX3NhbHRsZW4ocGtjdHgsIHNhbHRs ZW4pIDw9IDApCisrCQkJCWdvdG8gZXJyOworKwkJCX0KKyAJCWkgPSBFVlBfUEtFWV92ZXJpZnko cGtjdHgsIHNpZ2J1Ziwgc2lnbGVuLCBtLCBtX2xlbik7CisgCQllcnI6CisgCQlFVlBfUEtFWV9D VFhfZnJlZShwa2N0eCk7CitkaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMKKy0tLSAvZGV2L251bGwJMjAwOS0xMS0wNCAx MjowMDo1OC44MDEwMDIyNzYgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9m aXBzL2NhdnMvZmlwc19hZXNhdnMuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEw MAorQEAgLTAsMCArMSw5MzkgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykg MjAwNCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAq ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0 d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQi IGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3Jz ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQK KysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24s IHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisr ICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxs ZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5h bWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5T U0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0 c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoK KysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0ICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNT RUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisr ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysg KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyAgTklTVCBBRVMgQWxn b3JpdGhtIFZhbGlkYXRpb24gU3VpdGUKKysgIFRlc3QgUHJvZ3JhbQorKworKyAgRG9uYXRlZCB0 byBPcGVuU1NMIGJ5OgorKyAgVi1PTkUgQ29ycG9yYXRpb24KKysgIDIwMjUwIENlbnR1cnkgQmx2 ZCwgU3VpdGUgMzAwCisrICBHZXJtYW50b3duLCBNRCAyMDg3NAorKyAgVS5TLkEuCisrICAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKysjaW5jbHVk ZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgor KyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8Y3R5 cGUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKworKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgorKyNpbmNsdWRlICJlX29zLmgiCisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIEFF UyBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysKKysjZWxzZQorKworKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKysjZGVmaW5l IEFFU19CTE9DS19TSVpFIDE2CisrCisrI2RlZmluZSBWRVJCT1NFIDAKKysKKysvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKytpbnQgQUVTVGVz dChFVlBfQ0lQSEVSX0NUWCAqY3R4LAorKwkgICAgY2hhciAqYW1vZGUsIGludCBha2V5c3osIHVu c2lnbmVkIGNoYXIgKmFLZXksIAorKwkgICAgdW5zaWduZWQgY2hhciAqaVZlYywgCisrCSAgICBp bnQgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCSAgICB1bnNpZ25lZCBj aGFyICpwbGFpbnRleHQsIHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsIGludCBsZW4pCisrICAg IHsKKysgICAgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyID0gTlVMTDsKKysKKysgICAgaWYgKHN0 cmNhc2VjbXAoYW1vZGUsICJDQkMiKSA9PSAwKQorKwl7CisrCXN3aXRjaCAoYWtleXN6KQorKwkJ eworKwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jYmMoKTsKKysJCWJyZWFr OworKworKwkJY2FzZSAxOTI6CisrCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jYmMoKTsKKysJCWJy ZWFrOworKworKwkJY2FzZSAyNTY6CisrCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jYmMoKTsKKysJ CWJyZWFrOworKwkJfQorKworKwl9CisrICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJF Q0IiKSA9PSAwKQorKwl7CisrCXN3aXRjaCAoYWtleXN6KQorKwkJeworKwkJY2FzZSAxMjg6Cisr CQljaXBoZXIgPSBFVlBfYWVzXzEyOF9lY2IoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAxOTI6 CisrCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9lY2IoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAy NTY6CisrCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9lY2IoKTsKKysJCWJyZWFrOworKwkJfQorKwl9 CisrICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJDRkIxMjgiKSA9PSAwKQorKwl7Cisr CXN3aXRjaCAoYWtleXN6KQorKwkJeworKwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVz XzEyOF9jZmIxMjgoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAxOTI6CisrCQljaXBoZXIgPSBF VlBfYWVzXzE5Ml9jZmIxMjgoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAyNTY6CisrCQljaXBo ZXIgPSBFVlBfYWVzXzI1Nl9jZmIxMjgoKTsKKysJCWJyZWFrOworKwkJfQorKworKwl9CisrICAg IGVsc2UgaWYgKHN0cm5jYXNlY21wKGFtb2RlLCAiT0ZCIiwgMykgPT0gMCkKKysJeworKwlzd2l0 Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhf b2ZiKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18x OTJfb2ZiKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Fl c18yNTZfb2ZiKCk7CisrCQlicmVhazsKKysJCX0KKysJfQorKyAgICBlbHNlIGlmKCFzdHJjYXNl Y21wKGFtb2RlLCJDRkIxIikpCisrCXsKKysJc3dpdGNoIChha2V5c3opCisrCQl7CisrCQljYXNl IDEyODoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NmYjEoKTsKKysJCWJyZWFrOworKworKwkJ Y2FzZSAxOTI6CisrCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jZmIxKCk7CisrCQlicmVhazsKKysK KysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2ZiMSgpOworKwkJYnJlYWs7 CisrCQl9CisrCX0KKysgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCOCIpKQorKwl7 CisrCXN3aXRjaCAoYWtleXN6KQorKwkJeworKwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBFVlBf YWVzXzEyOF9jZmI4KCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0g RVZQX2Flc18xOTJfY2ZiOCgpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDI1NjoKKysJCWNpcGhl ciA9IEVWUF9hZXNfMjU2X2NmYjgoKTsKKysJCWJyZWFrOworKwkJfQorKwl9CisrICAgIGVsc2UK KysJeworKwlwcmludGYoIlVua25vd24gbW9kZTogJXNcbiIsIGFtb2RlKTsKKysJcmV0dXJuIDA7 CisrCX0KKysgICAgaWYgKCFjaXBoZXIpCisrCXsKKysJcHJpbnRmKCJJbnZhbGlkIGtleSBzaXpl OiAlZFxuIiwgYWtleXN6KTsKKysJcmV0dXJuIDA7IAorKwl9CisrICAgIGlmIChFVlBfQ2lwaGVy SW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwgYUtleSwgaVZlYywgZGlyKSA8PSAwKQorKwlyZXR1 cm4gMDsKKysgICAgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKKysJTV9FVlBfQ0lQSEVS X0NUWF9zZXRfZmxhZ3MoY3R4LCBFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTKTsKKysgICAgaWYg KGRpcikKKysJCUVWUF9DaXBoZXIoY3R4LCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIGxlbik7Cisr CWVsc2UKKysJCUVWUF9DaXBoZXIoY3R4LCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7Cisr ICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSovCisrY2hhciAqdF90YWdbMl0gPSB7IlBMQUlOVEVYVCIsICJD SVBIRVJURVhUIn07CisrY2hhciAqdF9tb2RlWzZdID0geyJDQkMiLCJFQ0IiLCJPRkIiLCJDRkIx IiwiQ0ZCOCIsIkNGQjEyOCJ9OworK2VudW0gTW9kZSB7Q0JDLCBFQ0IsIE9GQiwgQ0ZCMSwgQ0ZC OCwgQ0ZCMTI4fTsKKytlbnVtIFhDcnlwdCB7WERFQ1JZUFQsIFhFTkNSWVBUfTsKKysKKysvKj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKysvKiAgTW9udGUgQ2FybG8gVGVzdHMgICAg ICAgICAgKi8KKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKysvKiNkZWZp bmUgZ2IoYSxiKSAoKChhKVsoYikvOF0gPj4gKChiKSU4KSkmMSkqLworKy8qI2RlZmluZSBzYihh LGIsdikgKChhKVsoYikvOF09KChhKVsoYikvOF0mfigxIDw8ICgoYiklOCkpKXwoISEodikgPDwg KChiKSU4KSkpKi8KKysKKysjZGVmaW5lIGdiKGEsYikgKCgoYSlbKGIpLzhdID4+ICg3LShiKSU4 KSkmMSkKKysjZGVmaW5lIHNiKGEsYix2KSAoKGEpWyhiKS84XT0oKGEpWyhiKS84XSZ+KDEgPDwg KDctKGIpJTgpKSl8KCEhKHYpIDw8ICg3LShiKSU4KSkpCisrCisraW50IGRvX21jdChjaGFyICph bW9kZSwgCisrCSAgIGludCBha2V5c3osIHVuc2lnbmVkIGNoYXIgKmFLZXksdW5zaWduZWQgY2hh ciAqaVZlYywKKysJICAgaW50IGRpciwgdW5zaWduZWQgY2hhciAqdGV4dCwgaW50IGxlbiwKKysJ ICAgRklMRSAqcmZwKQorKyAgICB7CisrICAgIGludCByZXQgPSAwOworKyAgICB1bnNpZ25lZCBj aGFyIGtleVsxMDFdWzMyXTsKKysgICAgdW5zaWduZWQgY2hhciBpdlsxMDFdW0FFU19CTE9DS19T SVpFXTsKKysgICAgdW5zaWduZWQgY2hhciBwdGV4dFsxMDAxXVszMl07CisrICAgIHVuc2lnbmVk IGNoYXIgY3RleHRbMTAwMV1bMzJdOworKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbNjQr NF07CisrICAgIGludCBpLCBqLCBuLCBuMSwgbjI7CisrICAgIGludCBpbW9kZSA9IDAsIG5rZXlz eiA9IGFrZXlzei84OworKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7CisrICAgIEVWUF9DSVBIRVJf Q1RYX2luaXQoJmN0eCk7CisrCisrICAgIGlmIChsZW4gPiAzMikKKysJeworKwlwcmludGYoIlxu Pj4+PiBMZW5ndGggZXhjZWVkcyAzMiBmb3IgJXMgJWQgPDw8PFxuXG4iLCAKKysJICAgICAgIGFt b2RlLCBha2V5c3opOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgZm9yIChpbW9kZSA9IDA7IGlt b2RlIDwgNjsgKytpbW9kZSkKKysJaWYgKHN0cmNtcChhbW9kZSwgdF9tb2RlW2ltb2RlXSkgPT0g MCkKKysJICAgIGJyZWFrOworKyAgICBpZiAoaW1vZGUgPT0gNikKKysJeyAKKysJcHJpbnRmKCJV bnJlY29nbml6ZWQgbW9kZTogJXNcbiIsIGFtb2RlKTsKKysJcmV0dXJuIC0xOworKwl9CisrCisr ICAgIG1lbWNweShrZXlbMF0sIGFLZXksIG5rZXlzeik7CisrICAgIGlmIChpVmVjKQorKwltZW1j cHkoaXZbMF0sIGlWZWMsIEFFU19CTE9DS19TSVpFKTsKKysgICAgaWYgKGRpciA9PSBYRU5DUllQ VCkKKysJbWVtY3B5KHB0ZXh0WzBdLCB0ZXh0LCBsZW4pOworKyAgICBlbHNlCisrCW1lbWNweShj dGV4dFswXSwgdGV4dCwgbGVuKTsKKysgICAgZm9yIChpID0gMDsgaSA8IDEwMDsgKytpKQorKwl7 CisrCS8qIHByaW50ZigiSXRlcmF0aW9uICVkXG4iLCBpKTsgKi8KKysJaWYgKGkgPiAwKQorKwkg ICAgeworKwkgICAgZnByaW50ZihyZnAsIkNPVU5UID0gJWRcbiIsaSk7CisrCSAgICBPdXRwdXRW YWx1ZSgiS0VZIixrZXlbaV0sbmtleXN6LHJmcCwwKTsKKysJICAgIGlmIChpbW9kZSAhPSBFQ0Ip ICAvKiBFQ0IgKi8KKysJCU91dHB1dFZhbHVlKCJJViIsaXZbaV0sQUVTX0JMT0NLX1NJWkUscmZw LDApOworKwkgICAgLyogT3V0cHV0IENpcGhlcnRleHQgfCBQbGFpbnRleHQgKi8KKysJICAgIE91 dHB1dFZhbHVlKHRfdGFnW2Rpcl4xXSxkaXIgPyBwdGV4dFswXSA6IGN0ZXh0WzBdLGxlbixyZnAs CisrCQkJaW1vZGUgPT0gQ0ZCMSk7CisrCSAgICB9CisrCWZvciAoaiA9IDA7IGogPCAxMDAwOyAr K2opCisrCSAgICB7CisrCSAgICBzd2l0Y2ggKGltb2RlKQorKwkJeworKwkgICAgY2FzZSBFQ0I6 CisrCQlpZiAoaiA9PSAwKQorKwkJICAgIHsgLyogc2V0IHVwIGVuY3J5cHRpb24gKi8KKysJCSAg ICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGtleVtpXSwgTlVMTCwgCisrCQkJ CSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJCSAgcHRleHRbal0s IGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJbWVtY3B5 KHB0ZXh0W2orMV0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIGVsc2UKKysJCQltZW1jcHkoY3Rl eHRbaisxXSwgcHRleHRbal0sIGxlbik7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJ CSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQorKwkJCXsKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0 ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKKysJCQltZW1jcHkocHRleHRbaisxXSwgY3RleHRbal0s IGxlbik7CisrCQkJfQorKwkJICAgIGVsc2UKKysJCQl7CisrCQkJRVZQX0NpcGhlcigmY3R4LCBw dGV4dFtqXSwgY3RleHRbal0sIGxlbik7CisrCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2pd LCBsZW4pOworKwkJCX0KKysJCSAgICB9CisrCQlicmVhazsKKysKKysJICAgIGNhc2UgQ0JDOgor KwkgICAgY2FzZSBPRkI6ICAKKysJICAgIGNhc2UgQ0ZCMTI4OgorKwkJaWYgKGogPT0gMCkKKysJ CSAgICB7CisrCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBrZXlbaV0s IGl2W2ldLCAKKysJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJ CQkJICBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7CisrCQkgICAgaWYgKGRpciA9PSBYRU5DUllQ VCkKKysJCQltZW1jcHkocHRleHRbaisxXSwgaXZbaV0sIGxlbik7CisrCQkgICAgZWxzZQorKwkJ CW1lbWNweShjdGV4dFtqKzFdLCBpdltpXSwgbGVuKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkg ICAgeworKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJeworKwkJCUVWUF9DaXBoZXIo JmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOworKwkJCW1lbWNweShwdGV4dFtqKzFdLCBj dGV4dFtqLTFdLCBsZW4pOworKwkJCX0KKysJCSAgICBlbHNlCisrCQkJeworKwkJCUVWUF9DaXBo ZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJCW1lbWNweShjdGV4dFtqKzFd LCBwdGV4dFtqLTFdLCBsZW4pOworKwkJCX0KKysJCSAgICB9CisrCQlicmVhazsKKysKKysJICAg IGNhc2UgQ0ZCODoKKysJCWlmIChqID09IDApCisrCQkgICAgeworKwkJICAgIHJldCA9IEFFU1Rl c3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwga2V5W2ldLCBpdltpXSwgCisrCQkJCSAgZGlyLCAgLyog MCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJCSAgcHRleHRbal0sIGN0ZXh0W2pdLCBs ZW4pOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgaWYgKGRpciA9PSBYRU5D UllQVCkKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKKysJ CSAgICBlbHNlCisrCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7 CisrCQkgICAgfQorKwkJaWYgKGRpciA9PSBYRU5DUllQVCkKKysJCSAgICB7CisrCQkgICAgaWYg KGogPCAxNikKKysJCQltZW1jcHkocHRleHRbaisxXSwgJml2W2ldW2pdLCBsZW4pOworKwkJICAg IGVsc2UKKysJCQltZW1jcHkocHRleHRbaisxXSwgY3RleHRbai0xNl0sIGxlbik7CisrCQkgICAg fQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBpZiAoaiA8IDE2KQorKwkJCW1lbWNweShjdGV4 dFtqKzFdLCAmaXZbaV1bal0sIGxlbik7CisrCQkgICAgZWxzZQorKwkJCW1lbWNweShjdGV4dFtq KzFdLCBwdGV4dFtqLTE2XSwgbGVuKTsKKysJCSAgICB9CisrCQlicmVhazsKKysKKysJICAgIGNh c2UgQ0ZCMToKKysJCWlmKGogPT0gMCkKKysJCSAgICB7CisrI2lmIDAKKysJCSAgICAvKiBjb21w ZW5zYXRlIGZvciB3cm9uZyBlbmRpYW5uZXNzIG9mIGlucHV0IGZpbGUgKi8KKysJCSAgICBpZihp ID09IDApCisrCQkJcHRleHRbMF1bMF08PD03OworKyNlbmRpZgorKwkJICAgIHJldCA9IEFFU1Rl c3QoJmN0eCxhbW9kZSxha2V5c3osa2V5W2ldLGl2W2ldLGRpciwKKysJCQkJcHRleHRbal0sIGN0 ZXh0W2pdLCBsZW4pOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgaWYgKGRp ciA9PSBYRU5DUllQVCkKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwg bGVuKTsKKysJCSAgICBlbHNlCisrCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRb al0sIGxlbik7CisrCisrCQkgICAgfQorKwkJaWYoZGlyID09IFhFTkNSWVBUKQorKwkJICAgIHsK KysJCSAgICBpZihqIDwgMTI4KQorKwkJCXNiKHB0ZXh0W2orMV0sMCxnYihpdltpXSxqKSk7Cisr CQkgICAgZWxzZQorKwkJCXNiKHB0ZXh0W2orMV0sMCxnYihjdGV4dFtqLTEyOF0sMCkpOworKwkJ ICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgaWYoaiA8IDEyOCkKKysJCQlzYihjdGV4 dFtqKzFdLDAsZ2IoaXZbaV0saikpOworKwkJICAgIGVsc2UKKysJCQlzYihjdGV4dFtqKzFdLDAs Z2IocHRleHRbai0xMjhdLDApKTsKKysJCSAgICB9CisrCQlicmVhazsKKysJCX0KKysJICAgIH0K KysJLS1qOyAvKiByZXNldCB0byBsYXN0IG9mIHJhbmdlICovCisrCS8qIE91dHB1dCBDaXBoZXJ0 ZXh0IHwgUGxhaW50ZXh0ICovCisrCU91dHB1dFZhbHVlKHRfdGFnW2Rpcl0sZGlyID8gY3RleHRb al0gOiBwdGV4dFtqXSxsZW4scmZwLAorKwkJICAgIGltb2RlID09IENGQjEpOworKwlmcHJpbnRm KHJmcCwgIlxuIik7ICAvKiBhZGQgc2VwYXJhdG9yICovCisrCisrCS8qIENvbXB1dGUgbmV4dCBL RVkgKi8KKysJaWYgKGRpciA9PSBYRU5DUllQVCkKKysJICAgIHsKKysJICAgIGlmIChpbW9kZSA9 PSBDRkI4KQorKwkJeyAvKiBjdCA9IENUW2otMTVdIHx8IENUW2otMTRdIHx8IC4uLiB8fCBDVFtq XSAqLworKwkJZm9yIChuMSA9IDAsIG4yID0gbmtleXN6LTE7IG4xIDwgbmtleXN6OyArK24xLCAt LW4yKQorKwkJICAgIGNpcGhlcnRleHRbbjFdID0gY3RleHRbai1uMl1bMF07CisrCQl9CisrCSAg ICBlbHNlIGlmKGltb2RlID09IENGQjEpCisrCQl7CisrCQlmb3IobjE9MCxuMj1ha2V5c3otMSA7 IG4xIDwgYWtleXN6IDsgKytuMSwtLW4yKQorKwkJICAgIHNiKGNpcGhlcnRleHQsbjEsZ2IoY3Rl eHRbai1uMl0sMCkpOworKwkJfQorKwkgICAgZWxzZQorKwkJc3dpdGNoIChha2V5c3opCisrCQkg ICAgeworKwkJY2FzZSAxMjg6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIGN0ZXh0W2pdLCAx Nik7CisrCQkgICAgYnJlYWs7CisrCQljYXNlIDE5MjoKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4 dCwgY3RleHRbai0xXSs4LCA4KTsKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCs4LCBjdGV4dFtq XSwgMTYpOworKwkJICAgIGJyZWFrOworKwkJY2FzZSAyNTY6CisrCQkgICAgbWVtY3B5KGNpcGhl cnRleHQsIGN0ZXh0W2otMV0sIDE2KTsKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCsxNiwgY3Rl eHRbal0sIDE2KTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCSAgICB9CisrCWVsc2UKKysJ ICAgIHsKKysJICAgIGlmIChpbW9kZSA9PSBDRkI4KQorKwkJeyAvKiBjdCA9IENUW2otMTVdIHx8 IENUW2otMTRdIHx8IC4uLiB8fCBDVFtqXSAqLworKwkJZm9yIChuMSA9IDAsIG4yID0gbmtleXN6 LTE7IG4xIDwgbmtleXN6OyArK24xLCAtLW4yKQorKwkJICAgIGNpcGhlcnRleHRbbjFdID0gcHRl eHRbai1uMl1bMF07CisrCQl9CisrCSAgICBlbHNlIGlmKGltb2RlID09IENGQjEpCisrCQl7Cisr CQlmb3IobjE9MCxuMj1ha2V5c3otMSA7IG4xIDwgYWtleXN6IDsgKytuMSwtLW4yKQorKwkJICAg IHNiKGNpcGhlcnRleHQsbjEsZ2IocHRleHRbai1uMl0sMCkpOworKwkJfQorKwkgICAgZWxzZQor KwkJc3dpdGNoIChha2V5c3opCisrCQkgICAgeworKwkJY2FzZSAxMjg6CisrCQkgICAgbWVtY3B5 KGNpcGhlcnRleHQsIHB0ZXh0W2pdLCAxNik7CisrCQkgICAgYnJlYWs7CisrCQljYXNlIDE5MjoK KysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgcHRleHRbai0xXSs4LCA4KTsKKysJCSAgICBtZW1j cHkoY2lwaGVydGV4dCs4LCBwdGV4dFtqXSwgMTYpOworKwkJICAgIGJyZWFrOworKwkJY2FzZSAy NTY6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIHB0ZXh0W2otMV0sIDE2KTsKKysJCSAgICBt ZW1jcHkoY2lwaGVydGV4dCsxNiwgcHRleHRbal0sIDE2KTsKKysJCSAgICBicmVhazsKKysJCSAg ICB9CisrCSAgICB9CisrCS8qIENvbXB1dGUgbmV4dCBrZXk6IEtleVtpKzFdID0gS2V5W2ldIHhv ciBjdCAqLworKwlmb3IgKG4gPSAwOyBuIDwgbmtleXN6OyArK24pCisrCSAgICBrZXlbaSsxXVtu XSA9IGtleVtpXVtuXSBeIGNpcGhlcnRleHRbbl07CisrCQorKwkvKiBDb21wdXRlIG5leHQgSVYg YW5kIHRleHQgKi8KKysJaWYgKGRpciA9PSBYRU5DUllQVCkKKysJICAgIHsKKysJICAgIHN3aXRj aCAoaW1vZGUpCisrCQl7CisrCSAgICBjYXNlIEVDQjoKKysJCW1lbWNweShwdGV4dFswXSwgY3Rl eHRbal0sIEFFU19CTE9DS19TSVpFKTsKKysJCWJyZWFrOworKwkgICAgY2FzZSBDQkM6CisrCSAg ICBjYXNlIE9GQjoKKysJICAgIGNhc2UgQ0ZCMTI4OgorKwkJbWVtY3B5KGl2W2krMV0sIGN0ZXh0 W2pdLCBBRVNfQkxPQ0tfU0laRSk7CisrCQltZW1jcHkocHRleHRbMF0sIGN0ZXh0W2otMV0sIEFF U19CTE9DS19TSVpFKTsKKysJCWJyZWFrOworKwkgICAgY2FzZSBDRkI4OgorKwkJLyogSVZbaSsx XSA9IGN0ICovCisrCQlmb3IgKG4xID0gMCwgbjIgPSAxNTsgbjEgPCAxNjsgKytuMSwgLS1uMikK KysJCSAgICBpdltpKzFdW24xXSA9IGN0ZXh0W2otbjJdWzBdOworKwkJcHRleHRbMF1bMF0gPSBj dGV4dFtqLTE2XVswXTsKKysJCWJyZWFrOworKwkgICAgY2FzZSBDRkIxOgorKwkJZm9yKG4xPTAs bjI9MTI3IDsgbjEgPCAxMjggOyArK24xLC0tbjIpCisrCQkgICAgc2IoaXZbaSsxXSxuMSxnYihj dGV4dFtqLW4yXSwwKSk7CisrCQlwdGV4dFswXVswXT1jdGV4dFtqLTEyOF1bMF0mMHg4MDsKKysJ CWJyZWFrOworKwkJfQorKwkgICAgfQorKwllbHNlCisrCSAgICB7CisrCSAgICBzd2l0Y2ggKGlt b2RlKQorKwkJeworKwkgICAgY2FzZSBFQ0I6CisrCQltZW1jcHkoY3RleHRbMF0sIHB0ZXh0W2pd LCBBRVNfQkxPQ0tfU0laRSk7CisrCQlicmVhazsKKysJICAgIGNhc2UgQ0JDOgorKwkgICAgY2Fz ZSBPRkI6CisrCSAgICBjYXNlIENGQjEyODoKKysJCW1lbWNweShpdltpKzFdLCBwdGV4dFtqXSwg QUVTX0JMT0NLX1NJWkUpOworKwkJbWVtY3B5KGN0ZXh0WzBdLCBwdGV4dFtqLTFdLCBBRVNfQkxP Q0tfU0laRSk7CisrCQlicmVhazsKKysJICAgIGNhc2UgQ0ZCODoKKysJCWZvciAobjEgPSAwLCBu MiA9IDE1OyBuMSA8IDE2OyArK24xLCAtLW4yKQorKwkJICAgIGl2W2krMV1bbjFdID0gcHRleHRb ai1uMl1bMF07CisrCQljdGV4dFswXVswXSA9IHB0ZXh0W2otMTZdWzBdOworKwkJYnJlYWs7Cisr CSAgICBjYXNlIENGQjE6CisrCQlmb3IobjE9MCxuMj0xMjcgOyBuMSA8IDEyOCA7ICsrbjEsLS1u MikKKysJCSAgICBzYihpdltpKzFdLG4xLGdiKHB0ZXh0W2otbjJdLDApKTsKKysJCWN0ZXh0WzBd WzBdPXB0ZXh0W2otMTI4XVswXSYweDgwOworKwkJYnJlYWs7CisrCQl9CisrCSAgICB9CisrCX0K KysgICAgCisrICAgIHJldHVybiByZXQ7CisrICAgIH0KKysKKysvKj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisrLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisrICAjIENvbmZpZyBpbmZvIGZvciB2LW9uZQorKyAgIyBBRVNWUyBNTVQgdGVz dCBkYXRhIGZvciBFQ0IKKysgICMgU3RhdGUgOiBFbmNyeXB0IGFuZCBEZWNyeXB0CisrICAjIEtl eSBMZW5ndGggOiAyNTYKKysgICMgRnJpIEF1ZyAzMCAwNDowNzoyMiBQTQorKyAgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisraW50IHByb2NfZmlsZShjaGFyICpycWZpbGUsIGNo YXIgKnJzcGZpbGUpCisrICAgIHsKKysgICAgY2hhciBhZm5bMjU2XSwgcmZuWzI1Nl07CisrICAg IEZJTEUgKmFmcCA9IE5VTEwsICpyZnAgPSBOVUxMOworKyAgICBjaGFyIGlidWZbMjA0OF07Cisr ICAgIGNoYXIgdGJ1ZlsyMDQ4XTsKKysgICAgaW50IGlsZW4sIGxlbiwgcmV0ID0gMDsKKysgICAg Y2hhciBhbGdvWzhdID0gIiI7CisrICAgIGNoYXIgYW1vZGVbOF0gPSAiIjsKKysgICAgY2hhciBh dGVzdFs4XSA9ICIiOworKyAgICBpbnQgYWtleXN6ID0gMDsKKysgICAgdW5zaWduZWQgY2hhciBp VmVjWzIwXSwgYUtleVs0MF07CisrICAgIGludCBkaXIgPSAtMSwgZXJyID0gMCwgc3RlcCA9IDA7 CisrICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzIwNDhdOworKyAgICB1bnNpZ25lZCBjaGFy IGNpcGhlcnRleHRbMjA0OF07CisrICAgIGNoYXIgKnJwOworKyAgICBFVlBfQ0lQSEVSX0NUWCBj dHg7CisrICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCisrICAgIGlmICghcnFmaWxl IHx8ICEoKnJxZmlsZSkpCisrCXsKKysJcHJpbnRmKCJObyByZXEgZmlsZVxuIik7CisrCXJldHVy biAtMTsKKysJfQorKyAgICBzdHJjcHkoYWZuLCBycWZpbGUpOworKworKyAgICBpZiAoKGFmcCA9 IGZvcGVuKGFmbiwgInIiKSkgPT0gTlVMTCkKKysJeworKwlwcmludGYoIkNhbm5vdCBvcGVuIGZp bGU6ICVzLCAlc1xuIiwgCisrCSAgICAgICBhZm4sIHN0cmVycm9yKGVycm5vKSk7CisrCXJldHVy biAtMTsKKysJfQorKyAgICBpZiAoIXJzcGZpbGUpCisrCXsKKysJc3RyY3B5KHJmbixhZm4pOwor KwlycD1zdHJzdHIocmZuLCJyZXEvIik7CisrI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCisrCWlm ICghcnApCisrCSAgICBycD1zdHJzdHIocmZuLCJyZXFcXCIpOworKyNlbmRpZgorKwlhc3NlcnQo cnApOworKwltZW1jcHkocnAsInJzcCIsMyk7CisrCXJwID0gc3Ryc3RyKHJmbiwgIi5yZXEiKTsK KysJbWVtY3B5KHJwLCAiLnJzcCIsIDQpOworKwlyc3BmaWxlID0gcmZuOworKwl9CisrICAgIGlm ICgocmZwID0gZm9wZW4ocnNwZmlsZSwgInciKSkgPT0gTlVMTCkKKysJeworKwlwcmludGYoIkNh bm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCisrCSAgICAgICByZm4sIHN0cmVycm9yKGVycm5v KSk7CisrCWZjbG9zZShhZnApOworKwlhZnAgPSBOVUxMOworKwlyZXR1cm4gLTE7CisrCX0KKysg ICAgd2hpbGUgKCFlcnIgJiYgKGZnZXRzKGlidWYsIHNpemVvZihpYnVmKSwgYWZwKSkgIT0gTlVM TCkKKysJeworKwl0aWR5X2xpbmUodGJ1ZiwgaWJ1Zik7CisrCWlsZW4gPSBzdHJsZW4oaWJ1Zik7 CisrCS8qICAgICAgcHJpbnRmKCJzdGVwPSVkIGlidWY9JXMiLHN0ZXAsaWJ1Zik7ICovCisrCXN3 aXRjaCAoc3RlcCkKKysJICAgIHsKKysJY2FzZSAwOiAgLyogcmVhZCBwcmVhbWJsZSAqLworKwkg ICAgaWYgKGlidWZbMF0gPT0gJ1xuJykKKysJCXsgLyogZW5kIG9mIHByZWFtYmxlICovCisrCQlp ZiAoKCphbGdvID09ICdcMCcpIHx8CisrCQkgICAgKCphbW9kZSA9PSAnXDAnKSB8fAorKwkJICAg IChha2V5c3ogPT0gMCkpCisrCQkgICAgeworKwkJICAgIHByaW50ZigiTWlzc2luZyBBbGdvcml0 aG0sIE1vZGUgb3IgS2V5U2l6ZSAoJXMvJXMvJWQpXG4iLAorKwkJCSAgIGFsZ28sYW1vZGUsYWtl eXN6KTsKKysJCSAgICBlcnIgPSAxOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkg ICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCSAgICArKyBzdGVwOworKwkJICAgIH0KKysJCX0KKysJ ICAgIGVsc2UgaWYgKGlidWZbMF0gIT0gJyMnKQorKwkJeworKwkJcHJpbnRmKCJJbnZhbGlkIHBy ZWFtYmxlIGl0ZW06ICVzXG4iLCBpYnVmKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNl CisrCQl7IC8qIHByb2Nlc3MgcHJlYW1ibGUgKi8KKysJCWNoYXIgKnhwLCAqcHAgPSBpYnVmKzI7 CisrCQlpbnQgbjsKKysJCWlmIChha2V5c3opCisrCQkgICAgeyAvKiBpbnNlcnQgY3VycmVudCB0 aW1lICYgZGF0ZSAqLworKwkJICAgIHRpbWVfdCBydGltID0gdGltZSgwKTsKKysJCSAgICBmcHJp bnRmKHJmcCwgIiMgJXMiLCBjdGltZSgmcnRpbSkpOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAg ICB7CisrCQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCSAgICBpZiAoc3RybmNtcChwcCwgIkFF U1ZTICIsIDYpID09IDApCisrCQkJeworKwkJCXN0cmNweShhbGdvLCAiQUVTIik7CisrCQkJLyog Z2V0IHRlc3QgdHlwZSAqLworKwkJCXBwICs9IDY7CisrCQkJeHAgPSBzdHJjaHIocHAsICcgJyk7 CisrCQkJbiA9IHhwLXBwOworKwkJCXN0cm5jcHkoYXRlc3QsIHBwLCBuKTsKKysJCQlhdGVzdFtu XSA9ICdcMCc7CisrCQkJLyogZ2V0IG1vZGUgKi8KKysJCQl4cCA9IHN0cnJjaHIocHAsICcgJyk7 IC8qIGdldCBtb2RlIiAqLworKwkJCW4gPSBzdHJsZW4oeHArMSktMTsKKysJCQlzdHJuY3B5KGFt b2RlLCB4cCsxLCBuKTsKKysJCQlhbW9kZVtuXSA9ICdcMCc7CisrCQkJLyogYW1vZGVbM10gPSAn XDAnOyAqLworKwkJCWlmIChWRVJCT1NFKQorKwkJCQlwcmludGYoIlRlc3QgPSAlcywgTW9kZSA9 ICVzXG4iLCBhdGVzdCwgYW1vZGUpOworKwkJCX0KKysJCSAgICBlbHNlIGlmIChzdHJuY2FzZWNt cChwcCwgIktleSBMZW5ndGggOiAiLCAxMykgPT0gMCkKKysJCQl7CisrCQkJYWtleXN6ID0gYXRv aShwcCsxMyk7CisrCQkJaWYgKFZFUkJPU0UpCisrCQkJCXByaW50ZigiS2V5IHNpemUgPSAlZFxu IiwgYWtleXN6KTsKKysJCQl9CisrCQkgICAgfQorKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNh c2UgMTogIC8qIFtFTkNSWVBUXSB8IFtERUNSWVBUXSAqLworKwkgICAgaWYgKGlidWZbMF0gPT0g J1snKQorKwkJeworKwkJZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCSsrc3RlcDsKKysJCWlmIChzdHJu Y2FzZWNtcChpYnVmLCAiW0VOQ1JZUFRdIiwgOSkgPT0gMCkKKysJCSAgICBkaXIgPSAxOworKwkJ ZWxzZSBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltERUNSWVBUXSIsIDkpID09IDApCisrCQkgICAg ZGlyID0gMDsKKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIGtleXdv cmQ6ICVzXG4iLCBpYnVmKTsKKysJCSAgICBlcnIgPSAxOworKwkJICAgIH0KKysJCWJyZWFrOwor KwkJfQorKwkgICAgZWxzZSBpZiAoZGlyID09IC0xKQorKwkJeworKwkJZXJyID0gMTsKKysJCXBy aW50ZigiTWlzc2luZyBFTkNSWVBUL0RFQ1JZUFQga2V5d29yZFxuIik7CisrCQlicmVhazsKKysJ CX0KKysJICAgIGVsc2UgCisrCQlzdGVwID0gMjsKKysKKysJY2FzZSAyOiAvKiBLRVkgPSB4eHh4 ICovCisrCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkgICAgaWYoKmlidWYgPT0gJ1xuJykKKysJ CWJyZWFrOworKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIkNPVU5UID0gIiw4KSkKKysJCWJy ZWFrOworKworKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJLRVkgPSAiLCA2KSAhPSAwKQor KwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkg ICAgZWxzZQorKwkJeworKwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis2LCBhS2V5KTsKKysJ CWlmIChsZW4gPCAwKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsK KysJCSAgICBlcnIgPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJUHJpbnRWYWx1ZSgi S0VZIiwgYUtleSwgbGVuKTsKKysJCWlmIChzdHJjbXAoYW1vZGUsICJFQ0IiKSA9PSAwKQorKwkJ ICAgIHsKKysJCSAgICBtZW1zZXQoaVZlYywgMCwgc2l6ZW9mKGlWZWMpKTsKKysJCSAgICBzdGVw ID0gKGRpcik/IDQ6IDU7ICAvKiBubyBpdmVjIGZvciBFQ0IgKi8KKysJCSAgICB9CisrCQllbHNl CisrCQkgICAgKytzdGVwOworKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgMzogLyogSVYg PSB4eHh4ICovCisrCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkgICAgaWYgKHN0cm5jYXNlY21w KGlidWYsICJJViA9ICIsIDUpICE9IDApCisrCQl7CisrCQlwcmludGYoIk1pc3NpbmcgSVZcbiIp OworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJCWxlbiA9IGhleDJiaW4o KGNoYXIqKWlidWYrNSwgaVZlYyk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAg cHJpbnRmKCJJbnZhbGlkIElWXG4iKTsKKysJCSAgICBlcnIgPTE7CisrCQkgICAgYnJlYWs7Cisr CQkgICAgfQorKwkJUHJpbnRWYWx1ZSgiSVYiLCBpVmVjLCBsZW4pOworKwkJc3RlcCA9IChkaXIp PyA0OiA1OworKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgNDogLyogUExBSU5URVhUID0g eHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmIChzdHJuY2FzZWNtcChp YnVmLCAiUExBSU5URVhUID0gIiwgMTIpICE9IDApCisrCQl7CisrCQlwcmludGYoIk1pc3Npbmcg UExBSU5URVhUXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlp bnQgbm4gPSBzdHJsZW4oaWJ1ZisxMik7CisrCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCisr CQkgICAgbGVuPWJpbnQyYmluKGlidWYrMTIsbm4tMSxwbGFpbnRleHQpOworKwkJZWxzZQorKwkJ ICAgIGxlbj1oZXgyYmluKGlidWYrMTIsIHBsYWludGV4dCk7CisrCQlpZiAobGVuIDwgMCkKKysJ CSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIFBMQUlOVEVYVDogJXMiLCBpYnVmKzEyKTsK KysJCSAgICBlcnIgPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJaWYgKGxlbiA+PSBz aXplb2YocGxhaW50ZXh0KSkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJCdWZmZXIgb3ZlcmZs b3dcbiIpOworKwkJICAgIH0KKysJCVByaW50VmFsdWUoIlBMQUlOVEVYVCIsICh1bnNpZ25lZCBj aGFyKilwbGFpbnRleHQsIGxlbik7CisrCQlpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgPT0gMCkg IC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KKysJCSAgICB7CisrCQkgICAgaWYoZG9fbWN0KGFtb2Rl LCBha2V5c3osIGFLZXksIGlWZWMsIAorKwkJCSAgICAgIGRpciwgKHVuc2lnbmVkIGNoYXIqKXBs YWludGV4dCwgbGVuLCAKKysJCQkgICAgICByZnApIDwgMCkKKysJCQlFWElUKDEpOworKwkJICAg IH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwg YWtleXN6LCBhS2V5LCBpVmVjLCAKKysJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVu Y3J5cHQgKi8KKysJCQkJICBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7CisrCQkgICAgT3V0 cHV0VmFsdWUoIkNJUEhFUlRFWFQiLGNpcGhlcnRleHQsbGVuLHJmcCwKKysJCQkJIXN0cmNtcChh bW9kZSwiQ0ZCMSIpKTsKKysJCSAgICB9CisrCQlzdGVwID0gNjsKKysJCX0KKysJICAgIGJyZWFr OworKworKwljYXNlIDU6IC8qIENJUEhFUlRFWFQgPSB4eHh4ICovCisrCSAgICBmcHV0cyhpYnVm LCByZnApOworKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJDSVBIRVJURVhUID0gIiwgMTMp ICE9IDApCisrCQl7CisrCQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsKKysJCWVyciA9IDE7Cisr CQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCisrCQkg ICAgbGVuPWJpbnQyYmluKGlidWYrMTMsc3RybGVuKGlidWYrMTMpLTEsY2lwaGVydGV4dCk7Cisr CQllbHNlCisrCQkgICAgbGVuID0gaGV4MmJpbihpYnVmKzEzLGNpcGhlcnRleHQpOworKwkJaWYg KGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBDSVBIRVJURVhUXG4i KTsKKysJCSAgICBlcnIgPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKworKwkJUHJpbnRW YWx1ZSgiQ0lQSEVSVEVYVCIsIGNpcGhlcnRleHQsIGxlbik7CisrCQlpZiAoc3RyY21wKGF0ZXN0 LCAiTUNUIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KKysJCSAgICB7CisrCQkgICAg ZG9fbWN0KGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAorKwkJCSAgIGRpciwgY2lwaGVydGV4 dCwgbGVuLCByZnApOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgcmV0ID0g QUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKKysJCQkJICBkaXIsICAv KiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJCQkJICBwbGFpbnRleHQsIGNpcGhlcnRl eHQsIGxlbik7CisrCQkgICAgT3V0cHV0VmFsdWUoIlBMQUlOVEVYVCIsKHVuc2lnbmVkIGNoYXIg KilwbGFpbnRleHQsbGVuLHJmcCwKKysJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKKysJCSAg ICB9CisrCQlzdGVwID0gNjsKKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDY6CisrCSAg ICBpZiAoaWJ1ZlswXSAhPSAnXG4nKQorKwkJeworKwkJZXJyID0gMTsKKysJCXByaW50ZigiTWlz c2luZyB0ZXJtaW5hdG9yXG4iKTsKKysJCX0KKysJICAgIGVsc2UgaWYgKHN0cmNtcChhdGVzdCwg Ik1DVCIpICE9IDApCisrCQl7IC8qIE1DVCBhbHJlYWR5IGFkZGVkIHRlcm1pbmF0aW5nIG5sICov CisrCQlmcHV0cyhpYnVmLCByZnApOworKwkJfQorKwkgICAgc3RlcCA9IDE7CisrCSAgICBicmVh azsKKysJICAgIH0KKysJfQorKyAgICBpZiAocmZwKQorKwlmY2xvc2UocmZwKTsKKysgICAgaWYg KGFmcCkKKysJZmNsb3NlKGFmcCk7CisrICAgIHJldHVybiBlcnI7CisrICAgIH0KKysKKysvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrICBQcm9j ZXNzZXMgZWl0aGVyIGEgc2luZ2xlIGZpbGUgb3IgCisrICBhIHNldCBvZiBmaWxlcyB3aG9zZSBu YW1lcyBhcmUgcGFzc2VkIGluIGEgZmlsZS4KKysgIEEgc2luZ2xlIGZpbGUgaXMgc3BlY2lmaWVk IGFzOgorKyAgICBhZXNfdGVzdCAtZiB4eHgucmVxCisrICBBIHNldCBvZiBmaWxlcyBpcyBzcGVj aWZpZWQgYXM6CisrICAgIGFlc190ZXN0IC1kIHh4eHh4Lnh4eAorKyAgVGhlIGRlZmF1bHQgaXM6 IC1kIHJlcS50eHQKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSovCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKyAgICB7CisrICAg IGNoYXIgKnJxbGlzdCA9ICJyZXEudHh0IiwgKnJzcGZpbGUgPSBOVUxMOworKyAgICBGSUxFICpm cCA9IE5VTEw7CisrICAgIGNoYXIgZm5bMjUwXSA9ICIiLCByZm5bMjU2XSA9ICIiOworKyAgICBp bnQgZl9vcHQgPSAwLCBkX29wdCA9IDE7CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBp ZighRklQU19tb2RlX3NldCgxKSkKKysJeworKwlkb19wcmludF9lcnJvcnMoKTsKKysJRVhJVCgx KTsKKysJfQorKyNlbmRpZgorKyAgICBpZiAoYXJnYyA+IDEpCisrCXsKKysJaWYgKHN0cmNhc2Vj bXAoYXJndlsxXSwgIi1kIikgPT0gMCkKKysJICAgIHsKKysJICAgIGRfb3B0ID0gMTsKKysJICAg IH0KKysJZWxzZSBpZiAoc3RyY2FzZWNtcChhcmd2WzFdLCAiLWYiKSA9PSAwKQorKwkgICAgewor KwkgICAgZl9vcHQgPSAxOworKwkgICAgZF9vcHQgPSAwOworKwkgICAgfQorKwllbHNlCisrCSAg ICB7CisrCSAgICBwcmludGYoIkludmFsaWQgcGFyYW1ldGVyOiAlc1xuIiwgYXJndlsxXSk7Cisr CSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJaWYgKGFyZ2MgPCAzKQorKwkgICAgeworKwkgICAg cHJpbnRmKCJNaXNzaW5nIHBhcmFtZXRlclxuIik7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0K KysJaWYgKGRfb3B0KQorKwkgICAgcnFsaXN0ID0gYXJndlsyXTsKKysJZWxzZQorKwkgICAgewor KwkgICAgc3RyY3B5KGZuLCBhcmd2WzJdKTsKKysJICAgIHJzcGZpbGUgPSBhcmd2WzNdOworKwkg ICAgfQorKwl9CisrICAgIGlmIChkX29wdCkKKysJeyAvKiBsaXN0IG9mIGZpbGVzIChkaXJlY3Rv cnkpICovCisrCWlmICghKGZwID0gZm9wZW4ocnFsaXN0LCAiciIpKSkKKysJICAgIHsKKysJICAg IHByaW50ZigiQ2Fubm90IG9wZW4gcmVxIGxpc3QgZmlsZVxuIik7CisrCSAgICByZXR1cm4gLTE7 CisrCSAgICB9CisrCXdoaWxlIChmZ2V0cyhmbiwgc2l6ZW9mKGZuKSwgZnApKQorKwkgICAgewor KwkgICAgc3RydG9rKGZuLCAiXHJcbiIpOworKwkgICAgc3RyY3B5KHJmbiwgZm4pOworKwkgICAg aWYgKFZFUkJPU0UpCisrCQlwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCByZm4pOworKwkgICAg aWYgKHByb2NfZmlsZShyZm4sIHJzcGZpbGUpKQorKwkJeworKwkJcHJpbnRmKCI+Pj4gUHJvY2Vz c2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIHJmbik7CisrCQlFWElUKDEpOworKwkJfQorKwkg ICAgfQorKwlmY2xvc2UoZnApOworKwl9CisrICAgIGVsc2UgLyogc2luZ2xlIGZpbGUgKi8KKysJ eworKwlpZiAoVkVSQk9TRSkKKysJICAgIHByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIGZuKTsK KysJaWYgKHByb2NfZmlsZShmbiwgcnNwZmlsZSkpCisrCSAgICB7CisrCSAgICBwcmludGYoIj4+ PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwgZm4pOworKwkgICAgfQorKwl9Cisr ICAgIEVYSVQoMCk7CisrICAgIHJldHVybiAwOworKyAgICB9CisrCisrI2VuZGlmCitkaWZmIC11 cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVz bW92cy5jCistLS0gL2Rldi9udWxsCTIwMDktMTEtMDQgMTI6MDA6NTguODAxMDAyMjc2ICswMTAw CisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5j CTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDcwMiBAQAor Ky8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA0IFRoZSBPcGVuU1NMIFByb2pl Y3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgor KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1 dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBm ZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUg Zm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoK KysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3Qi IG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4g cGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAg ICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBu b3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0 dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICog Ni4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhl IGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcv KSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJP SkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysg KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wg UFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVT RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBP RiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisrICBOSVNUIERFUyBNb2RlcyBvZiBPcGVyYXRpb24gVmFsaWRh dGlvbiBTeXN0ZW0KKysgIFRlc3QgUHJvZ3JhbQorKworKyAgQmFzZWQgb24gdGhlIEFFUyBWYWxp ZGF0aW9uIFN1aXRlLCB3aGljaCB3YXM6CisrICBEb25hdGVkIHRvIE9wZW5TU0wgYnk6CisrICBW LU9ORSBDb3Jwb3JhdGlvbgorKyAgMjAyNTAgQ2VudHVyeSBCbHZkLCBTdWl0ZSAzMDAKKysgIEdl cm1hbnRvd24sIE1EIDIwODc0CisrICBVLlMuQS4KKysgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNs dWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGVycm5vLmg+ CisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2Rlcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2JuLmg+CisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgImVfb3Mu aCIKKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCisreworKyAgICBwcmludGYoIk5vIEZJUFMgREVTIHN1cHBvcnRcbiIpOworKyAg ICByZXR1cm4oMCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgorKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworKyNkZWZpbmUgREVTX0JMT0NLX1NJWkUgOAor KworKyNkZWZpbmUgVkVSQk9TRSAwCisrCisraW50IERFU1Rlc3QoRVZQX0NJUEhFUl9DVFggKmN0 eCwKKysJICAgIGNoYXIgKmFtb2RlLCBpbnQgYWtleXN6LCB1bnNpZ25lZCBjaGFyICphS2V5LCAK KysJICAgIHVuc2lnbmVkIGNoYXIgKmlWZWMsIAorKwkgICAgaW50IGRpciwgIC8qIDAgPSBkZWNy eXB0LCAxID0gZW5jcnlwdCAqLworKwkgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBj aGFyICppbiwgaW50IGxlbikKKysgICAgeworKyAgICBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIg PSBOVUxMOworKworKyAgICBpZiAoYWtleXN6ICE9IDE5MikKKysJeworKwlwcmludGYoIkludmFs aWQga2V5IHNpemU6ICVkXG4iLCBha2V5c3opOworKwlFWElUKDEpOworKwl9CisrCisrICAgIGlm IChzdHJjYXNlY21wKGFtb2RlLCAiQ0JDIikgPT0gMCkKKysJY2lwaGVyID0gRVZQX2Rlc19lZGUz X2NiYygpOworKyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiRUNCIikgPT0gMCkKKysJ Y2lwaGVyID0gRVZQX2Rlc19lZGUzX2VjYigpOworKyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFt b2RlLCAiQ0ZCNjQiKSA9PSAwKQorKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2ZiNjQoKTsKKysg ICAgZWxzZSBpZiAoc3RybmNhc2VjbXAoYW1vZGUsICJPRkIiLCAzKSA9PSAwKQorKwljaXBoZXIg PSBFVlBfZGVzX2VkZTNfb2ZiKCk7CisrICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNG QjgiKSkKKysJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2NmYjgoKTsKKysgICAgZWxzZSBpZighc3Ry Y2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQorKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2ZiMSgpOwor KyAgICBlbHNlCisrCXsKKysJcHJpbnRmKCJVbmtub3duIG1vZGU6ICVzXG4iLCBhbW9kZSk7Cisr CUVYSVQoMSk7CisrCX0KKysKKysgICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVy LCBOVUxMLCBhS2V5LCBpVmVjLCBkaXIpIDw9IDApCisrCXJldHVybiAwOworKyAgICBpZighc3Ry Y2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQorKwlNX0VWUF9DSVBIRVJfQ1RYX3NldF9mbGFncyhjdHgs IEVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpOworKyAgICBFVlBfQ2lwaGVyKGN0eCwgb3V0LCBp biwgbGVuKTsKKysKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKyt2b2lkIERlYnVnVmFsdWUo Y2hhciAqdGFnLCB1bnNpZ25lZCBjaGFyICp2YWwsIGludCBsZW4pCisrICAgIHsKKysgICAgY2hh ciBvYnVmWzIwNDhdOworKyAgICBpbnQgb2xlbjsKKysgICAgb2xlbiA9IGJpbjJoZXgodmFsLCBs ZW4sIG9idWYpOworKyAgICBwcmludGYoIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsK KysgICAgfQorKworK3ZvaWQgc2hpZnRpbih1bnNpZ25lZCBjaGFyICpkc3QsdW5zaWduZWQgY2hh ciAqc3JjLGludCBuYml0cykKKysgICAgeworKyAgICBpbnQgbjsKKysKKysgICAgLyogbW92ZSB0 aGUgYnl0ZXMuLi4gKi8KKysgICAgbWVtbW92ZShkc3QsZHN0K25iaXRzLzgsMyo4LW5iaXRzLzgp OworKyAgICAvKiBhcHBlbmQgbmV3IGRhdGEgKi8KKysgICAgbWVtY3B5KGRzdCszKjgtbmJpdHMv OCxzcmMsKG5iaXRzKzcpLzgpOworKyAgICAvKiBsZWZ0IHNoaWZ0IHRoZSBiaXRzICovCisrICAg IGlmKG5iaXRzJTgpCisrCWZvcihuPTAgOyBuIDwgMyo4IDsgKytuKQorKwkgICAgZHN0W25dPShk c3Rbbl0gPDwgKG5iaXRzJTgpKXwoZHN0W24rMV0gPj4gKDgtbmJpdHMlOCkpOworKyAgICB9CQor KworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwor K2NoYXIgKnRfdGFnWzJdID0geyJQTEFJTlRFWFQiLCAiQ0lQSEVSVEVYVCJ9OworK2NoYXIgKnRf bW9kZVs2XSA9IHsiQ0JDIiwiRUNCIiwiT0ZCIiwiQ0ZCMSIsIkNGQjgiLCJDRkI2NCJ9OworK2Vu dW0gTW9kZSB7Q0JDLCBFQ0IsIE9GQiwgQ0ZCMSwgQ0ZCOCwgQ0ZCNjR9OworK2ludCBTaXplc1s2 XT17NjQsNjQsNjQsMSw4LDY0fTsKKysKKyt2b2lkIGRvX21jdChjaGFyICphbW9kZSwgCisrCSAg ICBpbnQgYWtleXN6LCBpbnQgbnVta2V5cywgdW5zaWduZWQgY2hhciAqYWtleSx1bnNpZ25lZCBj aGFyICppdmVjLAorKwkgICAgaW50IGRpciwgdW5zaWduZWQgY2hhciAqdGV4dCwgaW50IGxlbiwK KysJICAgIEZJTEUgKnJmcCkKKysgICAgeworKyAgICBpbnQgaSxpbW9kZTsKKysgICAgdW5zaWdu ZWQgY2hhciBua1s0KjhdOyAvKiBsb25nZXN0IGtleSs4ICovCisrICAgIHVuc2lnbmVkIGNoYXIg dGV4dDBbOF07CisrCisrICAgIGZvciAoaW1vZGU9MCA7IGltb2RlIDwgNiA7ICsraW1vZGUpCisr CWlmKCFzdHJjbXAoYW1vZGUsdF9tb2RlW2ltb2RlXSkpCisrCSAgICBicmVhazsKKysgICAgaWYg KGltb2RlID09IDYpCisrCXsgCisrCXByaW50ZigiVW5yZWNvZ25pemVkIG1vZGU6ICVzXG4iLCBh bW9kZSk7CisrCUVYSVQoMSk7CisrCX0KKysKKysgICAgZm9yKGk9MCA7IGkgPCA0MDAgOyArK2kp CisrCXsKKysJaW50IGo7CisrCWludCBuOworKwlpbnQga3A9YWtleXN6LzY0OworKwl1bnNpZ25l ZCBjaGFyIG9sZF9pdls4XTsKKysJRVZQX0NJUEhFUl9DVFggY3R4OworKwlFVlBfQ0lQSEVSX0NU WF9pbml0KCZjdHgpOworKworKwlmcHJpbnRmKHJmcCwiXG5DT1VOVCA9ICVkXG4iLGkpOworKwlp ZihrcCA9PSAxKQorKwkgICAgT3V0cHV0VmFsdWUoIktFWSIsYWtleSw4LHJmcCwwKTsKKysJZWxz ZQorKwkgICAgZm9yKG49MCA7IG4gPCBrcCA7ICsrbikKKysJCXsKKysJCWZwcmludGYocmZwLCJL RVklZCIsbisxKTsKKysJCU91dHB1dFZhbHVlKCIiLGFrZXkrbio4LDgscmZwLDApOworKwkJfQor KworKwlpZihpbW9kZSAhPSBFQ0IpCisrCSAgICBPdXRwdXRWYWx1ZSgiSVYiLGl2ZWMsOCxyZnAs MCk7CisrCU91dHB1dFZhbHVlKHRfdGFnW2Rpcl4xXSx0ZXh0LGxlbixyZnAsaW1vZGUgPT0gQ0ZC MSk7CisrI2lmIDAKKysJLyogY29tcGVuc2F0ZSBmb3IgZW5kaWFubmVzcyAqLworKwlpZihpbW9k ZSA9PSBDRkIxKQorKwkgICAgdGV4dFswXTw8PTc7CisrI2VuZGlmCisrCW1lbWNweSh0ZXh0MCx0 ZXh0LDgpOworKworKwlmb3Ioaj0wIDsgaiA8IDEwMDAwIDsgKytqKQorKwkgICAgeworKwkgICAg dW5zaWduZWQgY2hhciBvbGRfdGV4dFs4XTsKKysKKysJICAgIG1lbWNweShvbGRfdGV4dCx0ZXh0 LDgpOworKwkgICAgaWYoaiA9PSAwKQorKwkJeworKwkJbWVtY3B5KG9sZF9pdixpdmVjLDgpOwor KwkJREVTVGVzdCgmY3R4LGFtb2RlLGFrZXlzeixha2V5LGl2ZWMsZGlyLHRleHQsdGV4dCxsZW4p OworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJbWVtY3B5KG9sZF9pdixjdHguaXYsOCk7Cisr CQlFVlBfQ2lwaGVyKCZjdHgsdGV4dCx0ZXh0LGxlbik7CisrCQl9CisrCSAgICBpZihqID09IDk5 OTkpCisrCQl7CisrCQlPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJdLHRleHQsbGVuLHJmcCxpbW9kZSA9 PSBDRkIxKTsKKysJCS8qCQltZW1jcHkoaXZlYyx0ZXh0LDgpOyAqLworKwkJfQorKwkgICAgLyoJ ICAgIERlYnVnVmFsdWUoIml2IixjdHguaXYsOCk7ICovCisrCSAgICAvKiBhY2N1bXVsYXRlIG1h dGVyaWFsIGZvciB0aGUgbmV4dCBrZXkgKi8KKysJICAgIHNoaWZ0aW4obmssdGV4dCxTaXplc1tp bW9kZV0pOworKwkgICAgLyoJICAgIERlYnVnVmFsdWUoIm5rIixuaywyNCk7Ki8KKysJICAgIGlm KChkaXIgJiYgKGltb2RlID09IENGQjEgfHwgaW1vZGUgPT0gQ0ZCOCB8fCBpbW9kZSA9PSBDRkI2 NAorKwkJCXx8IGltb2RlID09IENCQykpIHx8IGltb2RlID09IE9GQikKKysJCW1lbWNweSh0ZXh0 LG9sZF9pdiw4KTsKKysKKysJICAgIGlmKCFkaXIgJiYgKGltb2RlID09IENGQjEgfHwgaW1vZGUg PT0gQ0ZCOCB8fCBpbW9kZSA9PSBDRkI2NCkpCisrCQl7CisrCQkvKiB0aGUgdGVzdCBzcGVjaWZp ZXMgdXNpbmcgdGhlIG91dHB1dCBvZiB0aGUgcmF3IERFUyBvcGVyYXRpb24KKysJCSAgIHdoaWNo IHdlIGRvbid0IGhhdmUsIHNvIHJlY29uc3RydWN0IGl0Li4uICovCisrCQlmb3Iobj0wIDsgbiA8 IDggOyArK24pCisrCQkgICAgdGV4dFtuXV49b2xkX3RleHRbbl07CisrCQl9CisrCSAgICB9Cisr CWZvcihuPTAgOyBuIDwgOCA7ICsrbikKKysJICAgIGFrZXlbbl1ePW5rWzE2K25dOworKwlmb3Io bj0wIDsgbiA8IDggOyArK24pCisrCSAgICBha2V5Wzgrbl1ePW5rWzgrbl07CisrCWZvcihuPTAg OyBuIDwgOCA7ICsrbikKKysJICAgIGFrZXlbMTYrbl1ePW5rW25dOworKwlpZihudW1rZXlzIDwg MykKKysJICAgIG1lbWNweSgmYWtleVsyKjhdLGFrZXksOCk7CisrCWlmKG51bWtleXMgPCAyKQor KwkgICAgbWVtY3B5KCZha2V5WzhdLGFrZXksOCk7CisrCURFU19zZXRfb2RkX3Bhcml0eSgoREVT X2NibG9jayAqKWFrZXkpOworKwlERVNfc2V0X29kZF9wYXJpdHkoKERFU19jYmxvY2sgKikoYWtl eSs4KSk7CisrCURFU19zZXRfb2RkX3Bhcml0eSgoREVTX2NibG9jayAqKShha2V5KzE2KSk7Cisr CW1lbWNweShpdmVjLGN0eC5pdiw4KTsKKysKKysJLyogcG9pbnRsZXNzIGV4ZXJjaXNlIC0gdGhl IGZpbmFsIHRleHQgZG9lc24ndCBkZXBlbmQgb24gdGhlCisrCSAgIGluaXRpYWwgdGV4dCBpbiBP RkIgbW9kZSwgc28gd2hvIGNhcmVzIHdoYXQgaXQgaXM/IChXaG8KKysJICAgZGVzaWduZWQgdGhl c2UgdGVzdHM/KSAqLworKwlpZihpbW9kZSA9PSBPRkIpCisrCSAgICBmb3Iobj0wIDsgbiA8IDgg OyArK24pCisrCQl0ZXh0W25dPXRleHQwW25dXm9sZF9pdltuXTsKKysJfQorKyAgICB9CisrICAg IAorK2ludCBwcm9jX2ZpbGUoY2hhciAqcnFmaWxlLCBjaGFyICpyc3BmaWxlKQorKyAgICB7Cisr ICAgIGNoYXIgYWZuWzI1Nl0sIHJmblsyNTZdOworKyAgICBGSUxFICphZnAgPSBOVUxMLCAqcmZw ID0gTlVMTDsKKysgICAgY2hhciBpYnVmWzIwNDhdLCB0YnVmWzIwNDhdOworKyAgICBpbnQgaWxl biwgbGVuLCByZXQgPSAwOworKyAgICBjaGFyIGFtb2RlWzhdID0gIiI7CisrICAgIGNoYXIgYXRl c3RbMTAwXSA9ICIiOworKyAgICBpbnQgYWtleXN6PTA7CisrICAgIHVuc2lnbmVkIGNoYXIgaVZl Y1syMF0sIGFLZXlbNDBdOworKyAgICBpbnQgZGlyID0gLTEsIGVyciA9IDAsIHN0ZXAgPSAwOwor KyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsyMDQ4XTsKKysgICAgdW5zaWduZWQgY2hhciBj aXBoZXJ0ZXh0WzIwNDhdOworKyAgICBjaGFyICpycDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4 OworKyAgICBpbnQgbnVta2V5cz0xOworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwor KworKyAgICBpZiAoIXJxZmlsZSB8fCAhKCpycWZpbGUpKQorKwl7CisrCXByaW50ZigiTm8gcmVx IGZpbGVcbiIpOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgc3RyY3B5KGFmbiwgcnFmaWxlKTsK KysKKysgICAgaWYgKChhZnAgPSBmb3BlbihhZm4sICJyIikpID09IE5VTEwpCisrCXsKKysJcHJp bnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAorKwkgICAgICAgYWZuLCBzdHJlcnJv cihlcnJubykpOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgaWYgKCFyc3BmaWxlKQorKwl7Cisr CXN0cmNweShyZm4sYWZuKTsKKysJcnA9c3Ryc3RyKHJmbiwicmVxLyIpOworKyNpZmRlZiBPUEVO U1NMX1NZU19XSU4zMgorKwlpZiAoIXJwKQorKwkgICAgcnA9c3Ryc3RyKHJmbiwicmVxXFwiKTsK KysjZW5kaWYKKysJYXNzZXJ0KHJwKTsKKysJbWVtY3B5KHJwLCJyc3AiLDMpOworKwlycCA9IHN0 cnN0cihyZm4sICIucmVxIik7CisrCW1lbWNweShycCwgIi5yc3AiLCA0KTsKKysJcnNwZmlsZSA9 IHJmbjsKKysJfQorKyAgICBpZiAoKHJmcCA9IGZvcGVuKHJzcGZpbGUsICJ3IikpID09IE5VTEwp CisrCXsKKysJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAorKwkgICAgICAg cmZuLCBzdHJlcnJvcihlcnJubykpOworKwlmY2xvc2UoYWZwKTsKKysJYWZwID0gTlVMTDsKKysJ cmV0dXJuIC0xOworKwl9CisrICAgIHdoaWxlICghZXJyICYmIChmZ2V0cyhpYnVmLCBzaXplb2Yo aWJ1ZiksIGFmcCkpICE9IE5VTEwpCisrCXsKKysJdGlkeV9saW5lKHRidWYsIGlidWYpOworKwlp bGVuID0gc3RybGVuKGlidWYpOworKwkvKglwcmludGYoInN0ZXA9JWQgaWJ1Zj0lcyIsc3RlcCxp YnVmKTsqLworKwlpZihzdGVwID09IDMgJiYgIXN0cmNtcChhbW9kZSwiRUNCIikpCisrCSAgICB7 CisrCSAgICBtZW1zZXQoaVZlYywgMCwgc2l6ZW9mKGlWZWMpKTsKKysJICAgIHN0ZXAgPSAoZGly KT8gNDogNTsgIC8qIG5vIGl2ZWMgZm9yIEVDQiAqLworKwkgICAgfQorKwlzd2l0Y2ggKHN0ZXAp CisrCSAgICB7CisrCWNhc2UgMDogIC8qIHJlYWQgcHJlYW1ibGUgKi8KKysJICAgIGlmIChpYnVm WzBdID09ICdcbicpCisrCQl7IC8qIGVuZCBvZiBwcmVhbWJsZSAqLworKwkJaWYgKCphbW9kZSA9 PSAnXDAnKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIk1pc3NpbmcgTW9kZVxuIik7CisrCQkg ICAgZXJyID0gMTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGZwdXRzKGli dWYsIHJmcCk7CisrCQkgICAgKysgc3RlcDsKKysJCSAgICB9CisrCQl9CisrCSAgICBlbHNlIGlm IChpYnVmWzBdICE9ICcjJykKKysJCXsKKysJCXByaW50ZigiSW52YWxpZCBwcmVhbWJsZSBpdGVt OiAlc1xuIiwgaWJ1Zik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeyAvKiBw cm9jZXNzIHByZWFtYmxlICovCisrCQljaGFyICp4cCwgKnBwID0gaWJ1ZisyOworKwkJaW50IG47 CisrCQlpZigqYW1vZGUpCisrCQkgICAgeyAvKiBpbnNlcnQgY3VycmVudCB0aW1lICYgZGF0ZSAq LworKwkJICAgIHRpbWVfdCBydGltID0gdGltZSgwKTsKKysJCSAgICBmcHJpbnRmKHJmcCwgIiMg JXMiLCBjdGltZSgmcnRpbSkpOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAg ZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCSAgICBpZighc3RybmNtcChwcCwiSU5WRVJTRSAiLDgpIHx8 ICFzdHJuY21wKHBwLCJERVMgIiw0KQorKwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJUREVTICIs NSkKKysJCSAgICAgICB8fCAhc3RybmNtcChwcCwiUEVSTVVUQVRJT04gIiwxMikKKysJCSAgICAg ICB8fCAhc3RybmNtcChwcCwiU1VCU1RJVFVUSU9OICIsMTMpCisrCQkgICAgICAgfHwgIXN0cm5j bXAocHAsIlZBUklBQkxFICIsOSkpCisrCQkJeworKwkJCS8qIGdldCB0ZXN0IHR5cGUgKi8KKysJ CQlpZighc3RybmNtcChwcCwiREVTICIsNCkpCisrCQkJICAgIHBwKz00OworKwkJCWVsc2UgaWYo IXN0cm5jbXAocHAsIlRERVMgIiw1KSkKKysJCQkgICAgcHArPTU7CisrCQkJeHAgPSBzdHJjaHIo cHAsICcgJyk7CisrCQkJbiA9IHhwLXBwOworKwkJCXN0cm5jcHkoYXRlc3QsIHBwLCBuKTsKKysJ CQlhdGVzdFtuXSA9ICdcMCc7CisrCQkJLyogZ2V0IG1vZGUgKi8KKysJCQl4cCA9IHN0cnJjaHIo cHAsICcgJyk7IC8qIGdldCBtb2RlIiAqLworKwkJCW4gPSBzdHJsZW4oeHArMSktMTsKKysJCQlz dHJuY3B5KGFtb2RlLCB4cCsxLCBuKTsKKysJCQlhbW9kZVtuXSA9ICdcMCc7CisrCQkJLyogYW1v ZGVbM10gPSAnXDAnOyAqLworKwkJCWlmIChWRVJCT1NFKQorKwkJCQlwcmludGYoIlRlc3Q9JXMs IE1vZGU9JXNcbiIsYXRlc3QsYW1vZGUpOworKwkJCX0KKysJCSAgICB9CisrCQl9CisrCSAgICBi cmVhazsKKysKKysJY2FzZSAxOiAgLyogW0VOQ1JZUFRdIHwgW0RFQ1JZUFRdICovCisrCSAgICBp ZihpYnVmWzBdID09ICdcbicpCisrCQlicmVhazsKKysJICAgIGlmIChpYnVmWzBdID09ICdbJykK KysJCXsKKysJCWZwdXRzKGlidWYsIHJmcCk7CisrCQkrK3N0ZXA7CisrCQlpZiAoc3RybmNhc2Vj bXAoaWJ1ZiwgIltFTkNSWVBUXSIsIDkpID09IDApCisrCQkgICAgZGlyID0gMTsKKysJCWVsc2Ug aWYgKHN0cm5jYXNlY21wKGlidWYsICJbREVDUllQVF0iLCA5KSA9PSAwKQorKwkJICAgIGRpciA9 IDA7CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBrZXl3b3JkOiAl c1xuIiwgaWJ1Zik7CisrCQkgICAgZXJyID0gMTsKKysJCSAgICB9CisrCQlicmVhazsKKysJCX0K KysJICAgIGVsc2UgaWYgKGRpciA9PSAtMSkKKysJCXsKKysJCWVyciA9IDE7CisrCQlwcmludGYo Ik1pc3NpbmcgRU5DUllQVC9ERUNSWVBUIGtleXdvcmRcbiIpOworKwkJYnJlYWs7CisrCQl9Cisr CSAgICBlbHNlIAorKwkJc3RlcCA9IDI7CisrCisrCWNhc2UgMjogLyogS0VZID0geHh4eCAqLwor KwkgICAgaWYoKmlidWYgPT0gJ1xuJykKKysJCXsKKysJICAgICAgICBmcHV0cyhpYnVmLCByZnAp OworKwkJYnJlYWs7CisrICAgICAgICAgICAgICAgIH0KKysJICAgIGlmKCFzdHJuY2FzZWNtcChp YnVmLCJDT1VOVCA9ICIsOCkpCisrCQl7CisrCSAgICAgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJ CWJyZWFrOworKyAgICAgICAgICAgICAgICB9CisrCSAgICBpZighc3RybmNhc2VjbXAoaWJ1Ziwi Q09VTlQ9Iiw2KSkKKysJCXsKKysJICAgICAgICBmcHV0cyhpYnVmLCByZnApOworKwkJYnJlYWs7 CisrICAgICAgICAgICAgICAgIH0KKysJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJOdW1LZXlz ID0gIiwxMCkpCisrCQl7CisrCQludW1rZXlzPWF0b2koaWJ1ZisxMCk7CisrCQlicmVhazsKKysJ CX0KKysJICAKKysJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCSAgICBpZighc3RybmNhc2VjbXAo aWJ1ZiwiS0VZID0gIiw2KSkKKysJCXsKKysJCWFrZXlzej02NDsKKysJCWxlbiA9IGhleDJiaW4o KGNoYXIqKWlidWYrNiwgYUtleSk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAg cHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7CisrCQkgICAgZXJyPTE7CisrCQkgICAgYnJlYWs7Cisr CQkgICAgfQorKwkJUHJpbnRWYWx1ZSgiS0VZIiwgYUtleSwgbGVuKTsKKysJCSsrc3RlcDsKKysJ CX0KKysJICAgIGVsc2UgaWYoIXN0cm5jYXNlY21wKGlidWYsIktFWXMgPSAiLDcpKQorKwkJewor KwkJYWtleXN6PTY0KjM7CisrCQlsZW49aGV4MmJpbihpYnVmKzcsYUtleSk7CisrCQlpZihsZW4g IT0gOCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7CisrCQkgICAg ZXJyPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJbWVtY3B5KGFLZXkrOCxhS2V5LDgp OworKwkJbWVtY3B5KGFLZXkrMTYsYUtleSw4KTsKKysJCWlidWZbNF09J1wwJzsKKysJCVByaW50 VmFsdWUoIktFWXMiLGFLZXksbGVuKTsKKysJCSsrc3RlcDsKKysJCX0KKysJICAgIGVsc2UgaWYo IXN0cm5jYXNlY21wKGlidWYsIktFWSIsMykpCisrCQl7CisrCQlpbnQgbj1pYnVmWzNdLScxJzsK KysKKysJCWFrZXlzej02NCozOworKwkJbGVuPWhleDJiaW4oaWJ1Zis3LGFLZXkrbio4KTsKKysJ CWlmKGxlbiAhPSA4KQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsK KysJCSAgICBlcnI9MTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCQlpYnVmWzRdPSdcMCc7 CisrCQlQcmludFZhbHVlKGlidWYsYUtleSxsZW4pOworKwkJaWYobiA9PSAyKQorKwkJICAgICsr c3RlcDsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJCXByaW50ZigiTWlzc2luZyBLRVlcbiIp OworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDM6IC8qIElWID0g eHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmIChzdHJuY2FzZWNtcChp YnVmLCAiSVYgPSAiLCA1KSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIElWXG4iKTsK KysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlsZW4gPSBoZXgyYmluKChj aGFyKilpYnVmKzUsIGlWZWMpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHBy aW50ZigiSW52YWxpZCBJVlxuIik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJ ICAgIH0KKysJCVByaW50VmFsdWUoIklWIiwgaVZlYywgbGVuKTsKKysJCXN0ZXAgPSAoZGlyKT8g NDogNTsKKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDQ6IC8qIFBMQUlOVEVYVCA9IHh4 eHggKi8KKysJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1 ZiwgIlBMQUlOVEVYVCA9ICIsIDEyKSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIFBM QUlOVEVYVFxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJaW50 IG5uID0gc3RybGVuKGlidWYrMTIpOworKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQorKwkJ ICAgIGxlbj1iaW50MmJpbihpYnVmKzEyLG5uLTEscGxhaW50ZXh0KTsKKysJCWVsc2UKKysJCSAg ICBsZW49aGV4MmJpbihpYnVmKzEyLCBwbGFpbnRleHQpOworKwkJaWYgKGxlbiA8IDApCisrCQkg ICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBQTEFJTlRFWFQ6ICVzIiwgaWJ1ZisxMik7Cisr CQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCWlmIChsZW4gPj0gc2l6 ZW9mKHBsYWludGV4dCkpCisrCQkgICAgeworKwkJICAgIHByaW50ZigiQnVmZmVyIG92ZXJmbG93 XG4iKTsKKysJCSAgICB9CisrCQlQcmludFZhbHVlKCJQTEFJTlRFWFQiLCAodW5zaWduZWQgY2hh ciopcGxhaW50ZXh0LCBsZW4pOworKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1vbnRlIikgPT0gMCkg IC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KKysJCSAgICB7CisrCQkgICAgZG9fbWN0KGFtb2RlLGFr ZXlzeixudW1rZXlzLGFLZXksaVZlYyxkaXIscGxhaW50ZXh0LGxlbixyZnApOworKwkJICAgIH0K KysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgYXNzZXJ0KGRpciA9PSAxKTsKKysJCSAgICByZXQg PSBERVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAorKwkJCQkgIGRpciwg IC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkJCQkgIGNpcGhlcnRleHQsIHBsYWlu dGV4dCwgbGVuKTsKKysJCSAgICBPdXRwdXRWYWx1ZSgiQ0lQSEVSVEVYVCIsY2lwaGVydGV4dCxs ZW4scmZwLAorKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOworKwkJICAgIH0KKysJCXN0ZXAg PSA2OworKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgNTogLyogQ0lQSEVSVEVYVCA9IHh4 eHggKi8KKysJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1 ZiwgIkNJUEhFUlRFWFQgPSAiLCAxMykgIT0gMCkKKysJCXsKKysJCXByaW50ZigiTWlzc2luZyBL RVlcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJCWlmKCFzdHJj bXAoYW1vZGUsIkNGQjEiKSkKKysJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMyxzdHJsZW4oaWJ1 ZisxMyktMSxjaXBoZXJ0ZXh0KTsKKysJCWVsc2UKKysJCSAgICBsZW4gPSBoZXgyYmluKGlidWYr MTMsY2lwaGVydGV4dCk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRm KCJJbnZhbGlkIENJUEhFUlRFWFRcbiIpOworKwkJICAgIGVyciA9MTsKKysJCSAgICBicmVhazsK KysJCSAgICB9CisrCQkKKysJCVByaW50VmFsdWUoIkNJUEhFUlRFWFQiLCBjaXBoZXJ0ZXh0LCBs ZW4pOworKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1vbnRlIikgPT0gMCkgIC8qIE1vbnRlIENhcmxv IFRlc3QgKi8KKysJCSAgICB7CisrCQkgICAgZG9fbWN0KGFtb2RlLCBha2V5c3osIG51bWtleXMs IGFLZXksIGlWZWMsIAorKwkJCSAgIGRpciwgY2lwaGVydGV4dCwgbGVuLCByZnApOworKwkJICAg IH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgYXNzZXJ0KGRpciA9PSAwKTsKKysJCSAgICBy ZXQgPSBERVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAorKwkJCQkgIGRp ciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkJCQkgIHBsYWludGV4dCwgY2lw aGVydGV4dCwgbGVuKTsKKysJCSAgICBPdXRwdXRWYWx1ZSgiUExBSU5URVhUIiwodW5zaWduZWQg Y2hhciAqKXBsYWludGV4dCxsZW4scmZwLAorKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOwor KwkJICAgIH0KKysJCXN0ZXAgPSA2OworKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgNjoK KysJICAgIGlmIChpYnVmWzBdICE9ICdcbicpCisrCQl7CisrCQllcnIgPSAxOworKwkJcHJpbnRm KCJNaXNzaW5nIHRlcm1pbmF0b3JcbiIpOworKwkJfQorKwkgICAgZWxzZSBpZiAoc3RyY21wKGF0 ZXN0LCAiTUNUIikgIT0gMCkKKysJCXsgLyogTUNUIGFscmVhZHkgYWRkZWQgdGVybWluYXRpbmcg bmwgKi8KKysJCWZwdXRzKGlidWYsIHJmcCk7CisrCQl9CisrCSAgICBzdGVwID0gMTsKKysJICAg IGJyZWFrOworKwkgICAgfQorKwl9CisrICAgIGlmIChyZnApCisrCWZjbG9zZShyZnApOworKyAg ICBpZiAoYWZwKQorKwlmY2xvc2UoYWZwKTsKKysgICAgcmV0dXJuIGVycjsKKysgICAgfQorKwor Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysg IFByb2Nlc3NlcyBlaXRoZXIgYSBzaW5nbGUgZmlsZSBvciAKKysgIGEgc2V0IG9mIGZpbGVzIHdo b3NlIG5hbWVzIGFyZSBwYXNzZWQgaW4gYSBmaWxlLgorKyAgQSBzaW5nbGUgZmlsZSBpcyBzcGVj aWZpZWQgYXM6CisrICAgIGFlc190ZXN0IC1mIHh4eC5yZXEKKysgIEEgc2V0IG9mIGZpbGVzIGlz IHNwZWNpZmllZCBhczoKKysgICAgYWVzX3Rlc3QgLWQgeHh4eHgueHh4CisrICBUaGUgZGVmYXVs dCBpczogLWQgcmVxLnR4dAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKi8KKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrICAgIHsK KysgICAgY2hhciAqcnFsaXN0ID0gInJlcS50eHQiLCAqcnNwZmlsZSA9IE5VTEw7CisrICAgIEZJ TEUgKmZwID0gTlVMTDsKKysgICAgY2hhciBmblsyNTBdID0gIiIsIHJmblsyNTZdID0gIiI7Cisr ICAgIGludCBmX29wdCA9IDAsIGRfb3B0ID0gMTsKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr ICAgIGlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwl7CisrCWRvX3ByaW50X2Vycm9ycygpOworKwlF WElUKDEpOworKwl9CisrI2VuZGlmCisrICAgIGlmIChhcmdjID4gMSkKKysJeworKwlpZiAoc3Ry Y2FzZWNtcChhcmd2WzFdLCAiLWQiKSA9PSAwKQorKwkgICAgeworKwkgICAgZF9vcHQgPSAxOwor KwkgICAgfQorKwllbHNlIGlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZiIpID09IDApCisrCSAg ICB7CisrCSAgICBmX29wdCA9IDE7CisrCSAgICBkX29wdCA9IDA7CisrCSAgICB9CisrCWVsc2UK KysJICAgIHsKKysJICAgIHByaW50ZigiSW52YWxpZCBwYXJhbWV0ZXI6ICVzXG4iLCBhcmd2WzFd KTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKwlpZiAoYXJnYyA8IDMpCisrCSAgICB7Cisr CSAgICBwcmludGYoIk1pc3NpbmcgcGFyYW1ldGVyXG4iKTsKKysJICAgIHJldHVybiAwOworKwkg ICAgfQorKwlpZiAoZF9vcHQpCisrCSAgICBycWxpc3QgPSBhcmd2WzJdOworKwllbHNlCisrCSAg ICB7CisrCSAgICBzdHJjcHkoZm4sIGFyZ3ZbMl0pOworKwkgICAgcnNwZmlsZSA9IGFyZ3ZbM107 CisrCSAgICB9CisrCX0KKysgICAgaWYgKGRfb3B0KQorKwl7IC8qIGxpc3Qgb2YgZmlsZXMgKGRp cmVjdG9yeSkgKi8KKysJaWYgKCEoZnAgPSBmb3BlbihycWxpc3QsICJyIikpKQorKwkgICAgewor KwkgICAgcHJpbnRmKCJDYW5ub3Qgb3BlbiByZXEgbGlzdCBmaWxlXG4iKTsKKysJICAgIHJldHVy biAtMTsKKysJICAgIH0KKysJd2hpbGUgKGZnZXRzKGZuLCBzaXplb2YoZm4pLCBmcCkpCisrCSAg ICB7CisrCSAgICBzdHJ0b2soZm4sICJcclxuIik7CisrCSAgICBzdHJjcHkocmZuLCBmbik7Cisr CSAgICBwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCByZm4pOworKwkgICAgaWYgKHByb2NfZmls ZShyZm4sIHJzcGZpbGUpKQorKwkJeworKwkJcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQg Zm9yOiAlcyA8PDxcbiIsIHJmbik7CisrCQlFWElUKDEpOworKwkJfQorKwkgICAgfQorKwlmY2xv c2UoZnApOworKwl9CisrICAgIGVsc2UgLyogc2luZ2xlIGZpbGUgKi8KKysJeworKwlpZiAoVkVS Qk9TRSkKKysJCXByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIGZuKTsKKysJaWYgKHByb2NfZmls ZShmbiwgcnNwZmlsZSkpCisrCSAgICB7CisrCSAgICBwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZh aWxlZCBmb3I6ICVzIDw8PFxuIiwgZm4pOworKwkgICAgfQorKwl9CisrICAgIEVYSVQoMCk7Cisr ICAgIHJldHVybiAwOworKyAgICB9CisrCisrI2VuZGlmCitkaWZmIC11cCAvZGV2L251bGwgb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMuYworLS0tIC9kZXYv bnVsbAkyMDA5LTExLTA0IDEyOjAwOjU4LjgwMTAwMjI3NiArMDEwMAorKysrIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMJMjAwOS0xMS0xMiAxMjozNjo1 MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsNTM3IEBACisrI2luY2x1ZGUgPG9wZW5zc2wv b3BlbnNzbGNvbmYuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxzdGRp by5oPgorKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICAgIHByaW50 ZigiTm8gRklQUyBEU0Egc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrI2Vsc2UK KysKKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUg PGN0eXBlLmg+CisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrc3RhdGljIHZvaWQgcGJu KGNvbnN0IGNoYXIgKm5hbWUsIEJJR05VTSAqYm4pCisrCXsKKysJaW50IGxlbiwgaTsKKysJdW5z aWduZWQgY2hhciAqdG1wOworKwlsZW4gPSBCTl9udW1fYnl0ZXMoYm4pOworKwl0bXAgPSBPUEVO U1NMX21hbGxvYyhsZW4pOworKwlpZiAoIXRtcCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAi TWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOworKwkJcmV0dXJuOworKwkJfQorKwlCTl9ibjJi aW4oYm4sIHRtcCk7CisrCXByaW50ZigiJXMgPSAiLCBuYW1lKTsKKysJZm9yIChpID0gMDsgaSA8 IGxlbjsgaSsrKQorKwkJcHJpbnRmKCIlMDJYIiwgdG1wW2ldKTsKKysJZnB1dHMoIlxuIiwgc3Rk b3V0KTsKKysJT1BFTlNTTF9mcmVlKHRtcCk7CisrCXJldHVybjsKKysJfQorKworK3ZvaWQgcHJp bWVzKCkKKysgICAgeworKyAgICBjaGFyIGJ1ZlsxMDI0MF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0 MF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysKKysgICAgd2hpbGUoZmdldHMoYnVm LHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJZnB1dHMoYnVmLHN0ZG91dCk7Cisr CWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJY29udGlu dWU7CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiUHJpbWUiKSkKKysJICAgIHsKKysJICAgIEJJR05V TSAqcHA7CisrCisrCSAgICBwcD1CTl9uZXcoKTsKKysJICAgIGRvX2hleDJibigmcHAsdmFsdWUp OworKwkgICAgcHJpbnRmKCJyZXN1bHQ9ICVjXG4iLAorKwkJICAgQk5faXNfcHJpbWVfZXgocHAs MjAsTlVMTCxOVUxMKSA/ICdQJyA6ICdGJyk7CisrCSAgICB9CSAgICAKKysJfQorKyAgICB9Cisr Cisrdm9pZCBwcWcoKQorKyAgICB7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxi dWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgaW50IG5tb2Q9MDsK KysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsK KysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7Cisr CQlmcHV0cyhidWYsc3Rkb3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlpZighc3RyY21wKGtl eXdvcmQsIlttb2QiKSkKKysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNt cChrZXl3b3JkLCJOIikpCisrCSAgICB7CisrCSAgICBpbnQgbj1hdG9pKHZhbHVlKTsKKysKKysJ ICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOworKworKwkgICAgd2hpbGUobi0tKQor KwkJeworKwkJdW5zaWduZWQgY2hhciBzZWVkWzIwXTsKKysJCURTQSAqZHNhOworKwkJaW50IGNv dW50ZXI7CisrCQl1bnNpZ25lZCBsb25nIGg7CisrCQlkc2EgPSBGSVBTX2RzYV9uZXcoKTsKKysK KysJCWlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLHNlZWQsMCwmY291 bnRlciwmaCxOVUxMKSkKKysJCQl7CisrCQkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQkJZXhpdCgx KTsKKysJCQl9CisrCQlwYm4oIlAiLGRzYS0+cCk7CisrCQlwYm4oIlEiLGRzYS0+cSk7CisrCQlw Ym4oIkciLGRzYS0+Zyk7CisrCQlwdigiU2VlZCIsc2VlZCwyMCk7CisrCQlwcmludGYoImMgPSAl ZFxuIixjb3VudGVyKTsKKysJCXByaW50ZigiSCA9ICVseFxuIixoKTsKKysJCXB1dGMoJ1xuJyxz dGRvdXQpOworKwkJfQorKwkgICAgfQorKwllbHNlCisrCSAgICBmcHV0cyhidWYsc3Rkb3V0KTsK KysJfQorKyAgICB9CisrCisrdm9pZCBwcWd2ZXIoKQorKyAgICB7CisrICAgIGNoYXIgYnVmWzEw MjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsK KysgICAgQklHTlVNICpwID0gTlVMTCwgKnEgPSBOVUxMLCAqZyA9IE5VTEw7CisrICAgIGludCBj b3VudGVyLCBjb3VudGVyMjsKKysgICAgdW5zaWduZWQgbG9uZyBoLCBoMjsKKysgICAgRFNBICpk c2E9TlVMTDsKKysgICAgaW50IG5tb2Q9MDsKKysgICAgdW5zaWduZWQgY2hhciBzZWVkWzEwMjRd OworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJ eworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsK KysJCWZwdXRzKGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9CisrCWZwdXRzKGJ1Ziwg c3Rkb3V0KTsKKysJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCisrCSAgICBubW9kPWF0b2ko dmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUCIpKQorKwkgICAgcD1oZXgyYm4o dmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIpKQorKwkgICAgcT1oZXgyYm4o dmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRyIpKQorKwkgICAgZz1oZXgyYm4o dmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiU2VlZCIpKQorKwkgICAgeworKwkg ICAgaW50IHNsZW4gPSBoZXgyYmluKHZhbHVlLCBzZWVkKTsKKysJICAgIGlmIChzbGVuICE9IDIw KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJTZWVkIHBhcnNlIGxlbmd0aCBlcnJvclxuIik7 CisrCQlleGl0ICgxKTsKKysJCX0KKysJICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQs ImMiKSkKKysJICAgIGNvdW50ZXIgPWF0b2koYnVmKzQpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiSCIpKQorKwkgICAgeworKwkgICAgaCA9IGF0b2kodmFsdWUpOworKwkgICAgaWYgKCFw IHx8ICFxIHx8ICFnKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJQYXJzZSBFcnJvclxuIik7 CisrCQlleGl0ICgxKTsKKysJCX0KKysJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOworKwkgICAg aWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2Qsc2VlZCwyMCAsJmNvdW50 ZXIyLCZoMixOVUxMKSkKKysJCQl7CisrCQkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQkJZXhpdCgx KTsKKysJCQl9CisrICAgICAgICAgICAgaWYgKEJOX2NtcChkc2EtPnAsIHApIHx8IEJOX2NtcChk c2EtPnEsIHEpIHx8IEJOX2NtcChkc2EtPmcsIGcpCisrCQl8fCAoY291bnRlciAhPSBjb3VudGVy MikgfHwgKGggIT0gaDIpKQorKwkgICAgCXByaW50ZigiUmVzdWx0ID0gRlxuIik7CisrCSAgICBl bHNlCisrCSAgICAJcHJpbnRmKCJSZXN1bHQgPSBQXG4iKTsKKysJICAgIEJOX2ZyZWUocCk7Cisr CSAgICBCTl9mcmVlKHEpOworKwkgICAgQk5fZnJlZShnKTsKKysJICAgIHAgPSBOVUxMOworKwkg ICAgcSA9IE5VTEw7CisrCSAgICBnID0gTlVMTDsKKysJICAgIEZJUFNfZHNhX2ZyZWUoZHNhKTsK KysJICAgIGRzYSA9IE5VTEw7CisrCSAgICB9CisrCX0KKysgICAgfQorKworKy8qIEtleXBhaXIg dmVyaWZpY2F0aW9uIHJvdXRpbmUuIE5COiB0aGlzIGlzbid0IHBhcnQgb2YgdGhlIHN0YW5kYXJk IEZJUFMxNDAtMgorKyAqIGFsZ29yaXRobSB0ZXN0cy4gSXQgaXMgYW4gYWRkaXRpb25hbCB0ZXN0 IHRvIHBlcmZvcm0gc2FuaXR5IGNoZWNrcyBvbiB0aGUKKysgKiBvdXRwdXQgb2YgdGhlIEtleVBh aXIgdGVzdC4KKysgKi8KKysKKytzdGF0aWMgaW50IGRzc19wYXJhbWNoZWNrKGludCBubW9kLCBC SUdOVU0gKnAsIEJJR05VTSAqcSwgQklHTlVNICpnLAorKwkJCQkJCQlCTl9DVFggKmN0eCkKKysg ICAgeworKyAgICBCSUdOVU0gKnJlbSA9IE5VTEw7CisrICAgIGlmIChCTl9udW1fYml0cyhwKSAh PSBubW9kKQorKwlyZXR1cm4gMDsKKysgICAgaWYgKEJOX251bV9iaXRzKHEpICE9IDE2MCkKKysJ cmV0dXJuIDA7CisrICAgIGlmIChCTl9pc19wcmltZV9leChwLCBCTl9wcmltZV9jaGVja3MsIGN0 eCwgTlVMTCkgIT0gMSkKKysJcmV0dXJuIDA7CisrICAgIGlmIChCTl9pc19wcmltZV9leChxLCBC Tl9wcmltZV9jaGVja3MsIGN0eCwgTlVMTCkgIT0gMSkKKysJcmV0dXJuIDA7CisrICAgIHJlbSA9 IEJOX25ldygpOworKyAgICBpZiAoIUJOX21vZChyZW0sIHAsIHEsIGN0eCkgfHwgIUJOX2lzX29u ZShyZW0pCisrICAgIAl8fCAoQk5fY21wKGcsIEJOX3ZhbHVlX29uZSgpKSA8PSAwKQorKwl8fCAh Qk5fbW9kX2V4cChyZW0sIGcsIHEsIHAsIGN0eCkgfHwgIUJOX2lzX29uZShyZW0pKQorKwl7Cisr CUJOX2ZyZWUocmVtKTsKKysJcmV0dXJuIDA7CisrCX0KKysgICAgLyogVG9kbzogY2hlY2sgZyAq LworKyAgICBCTl9mcmVlKHJlbSk7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrdm9pZCBr ZXl2ZXIoKQorKyAgICB7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAy NF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgQklHTlVNICpwID0gTlVMTCwg KnEgPSBOVUxMLCAqZyA9IE5VTEwsICpYID0gTlVMTCwgKlkgPSBOVUxMOworKyAgICBCSUdOVU0g KlkyOworKyAgICBCTl9DVFggKmN0eCA9IE5VTEw7CisrICAgIGludCBubW9kPTAsIHBhcmFtY2hl Y2sgPSAwOworKworKyAgICBjdHggPSBCTl9DVFhfbmV3KCk7CisrICAgIFkyID0gQk5fbmV3KCk7 CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7 CisrCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJewor KwkJZnB1dHMoYnVmLHN0ZG91dCk7CisrCQljb250aW51ZTsKKysJCX0KKysJaWYoIXN0cmNtcChr ZXl3b3JkLCJbbW9kIikpCisrCSAgICB7CisrCSAgICBpZiAocCkKKysJCUJOX2ZyZWUocCk7Cisr CSAgICBwID0gTlVMTDsKKysJICAgIGlmIChxKQorKwkJQk5fZnJlZShxKTsKKysJICAgIHEgPSBO VUxMOworKwkgICAgaWYgKGcpCisrCQlCTl9mcmVlKGcpOworKwkgICAgZyA9IE5VTEw7CisrCSAg ICBwYXJhbWNoZWNrID0gMDsKKysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7CisrCSAgICB9CisrCWVs c2UgaWYoIXN0cmNtcChrZXl3b3JkLCJQIikpCisrCSAgICBwPWhleDJibih2YWx1ZSk7CisrCWVs c2UgaWYoIXN0cmNtcChrZXl3b3JkLCJRIikpCisrCSAgICBxPWhleDJibih2YWx1ZSk7CisrCWVs c2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCisrCSAgICBnPWhleDJibih2YWx1ZSk7CisrCWVs c2UgaWYoIXN0cmNtcChrZXl3b3JkLCJYIikpCisrCSAgICBYPWhleDJibih2YWx1ZSk7CisrCWVs c2UgaWYoIXN0cmNtcChrZXl3b3JkLCJZIikpCisrCSAgICB7CisrCSAgICBZPWhleDJibih2YWx1 ZSk7CisrCSAgICBpZiAoIXAgfHwgIXEgfHwgIWcgfHwgIVggfHwgIVkpCisrCQl7CisrCQlmcHJp bnRmKHN0ZGVyciwgIlBhcnNlIEVycm9yXG4iKTsKKysJCWV4aXQgKDEpOworKwkJfQorKwkgICAg cGJuKCJQIixwKTsKKysJICAgIHBibigiUSIscSk7CisrCSAgICBwYm4oIkciLGcpOworKwkgICAg cGJuKCJYIixYKTsKKysJICAgIHBibigiWSIsWSk7CisrCSAgICBpZiAoIXBhcmFtY2hlY2spCisr CQl7CisrCQlpZiAoZHNzX3BhcmFtY2hlY2sobm1vZCwgcCwgcSwgZywgY3R4KSkKKysJCQlwYXJh bWNoZWNrID0gMTsKKysJCWVsc2UKKysJCQlwYXJhbWNoZWNrID0gLTE7CisrCQl9CisrCSAgICBp ZiAocGFyYW1jaGVjayAhPSAxKQorKwkgICAJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsKKysJICAg IGVsc2UKKysJCXsKKysJCWlmICghQk5fbW9kX2V4cChZMiwgZywgWCwgcCwgY3R4KSB8fCBCTl9j bXAoWTIsIFkpKQorKwkgICAgCQlwcmludGYoIlJlc3VsdCA9IEZcbiIpOworKwkgICAgICAgIGVs c2UKKysJICAgIAkJcHJpbnRmKCJSZXN1bHQgPSBQXG4iKTsKKysJCX0KKysJICAgIEJOX2ZyZWUo WCk7CisrCSAgICBCTl9mcmVlKFkpOworKwkgICAgWCA9IE5VTEw7CisrCSAgICBZID0gTlVMTDsK KysJICAgIH0KKysJfQorKwlpZiAocCkKKysJICAgIEJOX2ZyZWUocCk7CisrCWlmIChxKQorKwkg ICAgQk5fZnJlZShxKTsKKysJaWYgKGcpCisrCSAgICBCTl9mcmVlKGcpOworKwlpZiAoWTIpCisr CSAgICBCTl9mcmVlKFkyKTsKKysgICAgfQorKworK3ZvaWQga2V5cGFpcigpCisrICAgIHsKKysg ICAgY2hhciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgY2hhciAqa2V5 d29yZCwgKnZhbHVlOworKyAgICBpbnQgbm1vZD0wOworKworKyAgICB3aGlsZShmZ2V0cyhidWYs c2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdv cmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJCWZwdXRzKGJ1ZixzdGRvdXQpOworKwkJ Y29udGludWU7CisrCQl9CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQorKwkgICAgbm1v ZD1hdG9pKHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk4iKSkKKysJICAgIHsK KysJICAgIERTQSAqZHNhOworKwkgICAgaW50IG49YXRvaSh2YWx1ZSk7CisrCisrCSAgICBwcmlu dGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsKKysJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOwor KwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVMTCwwLE5V TEwsTlVMTCxOVUxMKSkKKysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZXhpdCgxKTsK KysJCX0KKysJICAgIHBibigiUCIsZHNhLT5wKTsKKysJICAgIHBibigiUSIsZHNhLT5xKTsKKysJ ICAgIHBibigiRyIsZHNhLT5nKTsKKysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKworKwkgICAg d2hpbGUobi0tKQorKwkJeworKwkJaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCisrCQkJewor KwkJCWRvX3ByaW50X2Vycm9ycygpOworKwkJCWV4aXQoMSk7CisrCQkJfQorKworKwkJcGJuKCJY Iixkc2EtPnByaXZfa2V5KTsKKysJCXBibigiWSIsZHNhLT5wdWJfa2V5KTsKKysJCXB1dGMoJ1xu JyxzdGRvdXQpOworKwkJfQorKwkgICAgfQorKwl9CisrICAgIH0KKysKKyt2b2lkIHNpZ2dlbigp CisrICAgIHsKKysgICAgY2hhciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysg ICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKyAgICBpbnQgbm1vZD0wOworKyAgICBEU0EgKmRz YT1OVUxMOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVM TCkKKysJeworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkK KysJCXsKKysJCWZwdXRzKGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9CisrCWlmKCFz dHJjbXAoa2V5d29yZCwiW21vZCIpKQorKwkgICAgeworKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsK KysJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOworKwkgICAgaWYgKGRzYSkKKysJ CUZJUFNfZHNhX2ZyZWUoZHNhKTsKKysJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOworKwkgICAg aWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVMTCwwLE5VTEwsTlVM TCxOVUxMKSkKKysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZXhpdCgxKTsKKysJCX0K KysJICAgIHBibigiUCIsZHNhLT5wKTsKKysJICAgIHBibigiUSIsZHNhLT5xKTsKKysJICAgIHBi bigiRyIsZHNhLT5nKTsKKysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKwkgICAgfQorKwllbHNl IGlmKCFzdHJjbXAoa2V5d29yZCwiTXNnIikpCisrCSAgICB7CisrCSAgICB1bnNpZ25lZCBjaGFy IG1zZ1sxMDI0XTsKKysJICAgIHVuc2lnbmVkIGNoYXIgc2J1Zls2MF07CisrCSAgICB1bnNpZ25l ZCBpbnQgc2xlbjsKKysJICAgIGludCBuOworKwkgICAgRVZQX1BLRVkgcGs7CisrCSAgICBFVlBf TURfQ1RYIG1jdHg7CisrCSAgICBEU0FfU0lHICpzaWc7CisrCSAgICBFVlBfTURfQ1RYX2luaXQo Jm1jdHgpOworKworKwkgICAgbj1oZXgyYmluKHZhbHVlLG1zZyk7CisrCSAgICBwdigiTXNnIixt c2csbik7CisrCisrCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKKysJCXsKKysJCWRv X3ByaW50X2Vycm9ycygpOworKwkJZXhpdCgxKTsKKysJCX0KKysJICAgIHBrLnR5cGUgPSBFVlBf UEtFWV9EU0E7CisrCSAgICBway5wa2V5LmRzYSA9IGRzYTsKKysJICAgIHBibigiWSIsZHNhLT5w dWJfa2V5KTsKKysKKysJICAgIEVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVM TCk7CisrCSAgICBFVlBfU2lnblVwZGF0ZSgmbWN0eCwgbXNnLCBuKTsKKysJICAgIEVWUF9TaWdu RmluYWwoJm1jdHgsIHNidWYsICZzbGVuLCAmcGspOworKworKwkgICAgc2lnID0gRFNBX1NJR19u ZXcoKTsKKysJICAgIEZJUFNfZHNhX3NpZ19kZWNvZGUoc2lnLCBzYnVmLCBzbGVuKTsKKysKKysJ ICAgIHBibigiUiIsc2lnLT5yKTsKKysJICAgIHBibigiUyIsc2lnLT5zKTsKKysJICAgIHB1dGMo J1xuJyxzdGRvdXQpOworKwkgICAgRFNBX1NJR19mcmVlKHNpZyk7CisrCSAgICBFVlBfTURfQ1RY X2NsZWFudXAoJm1jdHgpOworKwkgICAgfQorKwl9CisrCWlmIChkc2EpCisrCQlGSVBTX2RzYV9m cmVlKGRzYSk7CisrICAgIH0KKysKKyt2b2lkIHNpZ3ZlcigpCisrICAgIHsKKysgICAgRFNBICpk c2E9TlVMTDsKKysgICAgY2hhciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysg ICAgdW5zaWduZWQgY2hhciBtc2dbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsK KysgICAgaW50IG5tb2Q9MCwgbj0wOworKyAgICBEU0FfU0lHIHNnLCAqc2lnID0gJnNnOworKwor KyAgICBzaWctPnIgPSBOVUxMOworKyAgICBzaWctPnMgPSBOVUxMOworKworKyAgICB3aGlsZShm Z2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlpZiAoIXBhcnNlX2xp bmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJCWZwdXRzKGJ1ZixzdGRv dXQpOworKwkJY29udGludWU7CisrCQl9CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQor KwkgICAgeworKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKKysJICAgIGlmKGRzYSkKKysJCUZJUFNf ZHNhX2ZyZWUoZHNhKTsKKysJICAgIGRzYT1GSVBTX2RzYV9uZXcoKTsKKysJICAgIH0KKysJZWxz ZSBpZighc3RyY21wKGtleXdvcmQsIlAiKSkKKysJICAgIGRzYS0+cD1oZXgyYm4odmFsdWUpOwor KwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIpKQorKwkgICAgZHNhLT5xPWhleDJibih2YWx1 ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCisrCSAgICB7CisrCSAgICBkc2Et Pmc9aGV4MmJuKHZhbHVlKTsKKysKKysJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2Qp OworKwkgICAgcGJuKCJQIixkc2EtPnApOworKwkgICAgcGJuKCJRIixkc2EtPnEpOworKwkgICAg cGJuKCJHIixkc2EtPmcpOworKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7CisrCSAgICB9CisrCWVs c2UgaWYoIXN0cmNtcChrZXl3b3JkLCJNc2ciKSkKKysJICAgIHsKKysJICAgIG49aGV4MmJpbih2 YWx1ZSxtc2cpOworKwkgICAgcHYoIk1zZyIsbXNnLG4pOworKwkgICAgfQorKwllbHNlIGlmKCFz dHJjbXAoa2V5d29yZCwiWSIpKQorKwkgICAgZHNhLT5wdWJfa2V5PWhleDJibih2YWx1ZSk7Cisr CWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJSIikpCisrCSAgICBzaWctPnI9aGV4MmJuKHZhbHVl KTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlMiKSkKKysJICAgIHsKKysJICAgIEVWUF9N RF9DVFggbWN0eDsKKysJICAgIEVWUF9QS0VZIHBrOworKwkgICAgdW5zaWduZWQgY2hhciBzaWdi dWZbNjBdOworKwkgICAgdW5zaWduZWQgaW50IHNsZW47CisrCSAgICBpbnQgcjsKKysJICAgIEVW UF9NRF9DVFhfaW5pdCgmbWN0eCk7CisrCSAgICBway50eXBlID0gRVZQX1BLRVlfRFNBOworKwkg ICAgcGsucGtleS5kc2EgPSBkc2E7CisrCSAgICBzaWctPnM9aGV4MmJuKHZhbHVlKTsKKysJCisr CSAgICBwYm4oIlkiLGRzYS0+cHViX2tleSk7CisrCSAgICBwYm4oIlIiLHNpZy0+cik7CisrCSAg ICBwYm4oIlMiLHNpZy0+cyk7CisrCisrCSAgICBzbGVuID0gRklQU19kc2Ffc2lnX2VuY29kZShz aWdidWYsIHNpZyk7CisrCSAgICBFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwg TlVMTCk7CisrCSAgICBFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBtc2csIG4pOworKwkgICAgciA9 IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgc2lnYnVmLCBzbGVuLCAmcGspOworKwkgICAgRVZQX01E X0NUWF9jbGVhbnVwKCZtY3R4KTsKKysJCisrCSAgICBwcmludGYoIlJlc3VsdCA9ICVjXG4iLCBy ID09IDEgPyAnUCcgOiAnRicpOworKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7CisrCSAgICB9Cisr CX0KKysgICAgfQorKworK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQorKyAgICB7Cisr ICAgIGlmKGFyZ2MgIT0gMikKKysJeworKwlmcHJpbnRmKHN0ZGVyciwiJXMgW3ByaW1lfHBxZ3xw cWd2ZXJ8a2V5cGFpcnxzaWdnZW58c2lndmVyXVxuIixhcmd2WzBdKTsKKysJZXhpdCgxKTsKKysJ fQorKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKKysJeworKwlkb19wcmludF9lcnJvcnMoKTsK KysJZXhpdCgxKTsKKysJfQorKyAgICBpZighc3RyY21wKGFyZ3ZbMV0sInByaW1lIikpCisrCXBy aW1lcygpOworKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwicHFnIikpCisrCXBxZygpOwor KyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwicHFndmVyIikpCisrCXBxZ3ZlcigpOworKyAg ICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwia2V5cGFpciIpKQorKwlrZXlwYWlyKCk7CisrICAg IGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJrZXl2ZXIiKSkKKysJa2V5dmVyKCk7CisrICAgIGVs c2UgaWYoIXN0cmNtcChhcmd2WzFdLCJzaWdnZW4iKSkKKysJc2lnZ2VuKCk7CisrICAgIGVsc2Ug aWYoIXN0cmNtcChhcmd2WzFdLCJzaWd2ZXIiKSkKKysJc2lndmVyKCk7CisrICAgIGVsc2UKKysJ eworKwlmcHJpbnRmKHN0ZGVyciwiRG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3ZbMV0pOwor KwlleGl0KDEpOworKwl9CisrCisrICAgIHJldHVybiAwOworKyAgICB9CisrCisrI2VuZGlmCitk aWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfcm5ndnMuYworLS0tIC9kZXYvbnVsbAkyMDA5LTExLTA0IDEyOjAwOjU4LjgwMTAwMjI3NiAr MDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3Zz LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMjMwIEBA CisrLyoKKysgKiBDcnVkZSB0ZXN0IGRyaXZlciBmb3IgcHJvY2Vzc2luZyB0aGUgVlNUIGFuZCBN Q1QgdGVzdHZlY3RvciBmaWxlcworKyAqIGdlbmVyYXRlZCBieSB0aGUgQ01WUCBSTkdWUyBwcm9k dWN0LgorKyAqCisrICogTm90ZSB0aGUgaW5wdXQgZmlsZXMgYXJlIGFzc3VtZWQgdG8gaGF2ZSBh IF92ZXJ5XyBzcGVjaWZpYyBmb3JtYXQKKysgKiBhcyBkZXNjcmliZWQgaW4gdGhlIE5JU1QgZG9j dW1lbnQgIlRoZSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvcgorKyAqIFZhbGlkYXRpb24gU3lzdGVt IChSTkdWUykiLCBNYXkgMjUsIDIwMDQuCisrICoKKysgKi8KKysjaW5jbHVkZSA8b3BlbnNzbC9v cGVuc3NsY29uZi5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPHN0ZGlv Lmg+CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgICAgcHJpbnRm KCJObyBGSVBTIFJORyBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuIDA7CisrfQorKyNlbHNlCisr CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5j bHVkZSA8Y3R5cGUuaD4KKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKyt2b2lkIHZzdCgp CisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTDsKKysgICAgdW5zaWduZWQg Y2hhciAqdiA9IE5VTEw7CisrICAgIHVuc2lnbmVkIGNoYXIgKmR0ID0gTlVMTDsKKysgICAgdW5z aWduZWQgY2hhciByZXRbMTZdOworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVm WzEwMjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIGxvbmcgaSwga2V5bGVu OworKworKyAgICBrZXlsZW4gPSAwOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1 ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlmcHV0cyhidWYsc3Rkb3V0KTsKKysJaWYoIXN0cm5j bXAoYnVmLCJbQUVTIDEyOC1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMTY7CisrCWVsc2UgaWYo IXN0cm5jbXAoYnVmLCJbQUVTIDE5Mi1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMjQ7CisrCWVs c2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDI1Ni1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMzI7 CisrCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJY29u dGludWU7CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCisrCSAgICB7CisrCSAgICBrZXk9 aGV4MmJpbl9tKHZhbHVlLCZpKTsKKysJICAgIGlmIChpICE9IGtleWxlbikKKysJCXsKKysJCWZw cmludGYoc3RkZXJyLCAiSW52YWxpZCBrZXkgbGVuZ3RoLCBleHBlY3RpbmcgJWxkXG4iLCBrZXls ZW4pOworKwkJcmV0dXJuOworKwkJfQorKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29y ZCwiRFQiKSkKKysJICAgIHsKKysJICAgIGR0PWhleDJiaW5fbSh2YWx1ZSwmaSk7CisrCSAgICBp ZiAoaSAhPSAxNikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBEVCBsZW5ndGhc biIpOworKwkJcmV0dXJuOworKwkJfQorKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29y ZCwiViIpKQorKwkgICAgeworKwkgICAgdj1oZXgyYmluX20odmFsdWUsJmkpOworKwkgICAgaWYg KGkgIT0gMTYpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgViBsZW5ndGhcbiIp OworKwkJcmV0dXJuOworKwkJfQorKworKwkgICAgaWYgKCFrZXkgfHwgIWR0KQorKwkJeworKwkJ ZnByaW50ZihzdGRlcnIsICJNaXNzaW5nIGtleSBvciBEVFxuIik7CisrCQlyZXR1cm47CisrCQl9 CisrCisrCSAgICBGSVBTX3JhbmRfc2V0X2tleShrZXksIGtleWxlbik7CisrCSAgICBGSVBTX3Jh bmRfc2VlZCh2LDE2KTsKKysJICAgIEZJUFNfcmFuZF9zZXRfZHQoZHQpOworKwkgICAgaWYgKEZJ UFNfcmFuZF9ieXRlcyhyZXQsMTYpIDw9IDApCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkVy cm9yIGdldHRpbmcgUFJORyB2YWx1ZVxuIik7CisrCSAgICAgICAgcmV0dXJuOworKwkgICAgICAg IH0KKysKKysJICAgIHB2KCJSIixyZXQsMTYpOworKwkgICAgT1BFTlNTTF9mcmVlKGtleSk7Cisr CSAgICBrZXkgPSBOVUxMOworKwkgICAgT1BFTlNTTF9mcmVlKGR0KTsKKysJICAgIGR0ID0gTlVM TDsKKysJICAgIE9QRU5TU0xfZnJlZSh2KTsKKysJICAgIHYgPSBOVUxMOworKwkgICAgfQorKwl9 CisrICAgIH0KKysKKyt2b2lkIG1jdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciAqa2V5 ID0gTlVMTDsKKysgICAgdW5zaWduZWQgY2hhciAqdiA9IE5VTEw7CisrICAgIHVuc2lnbmVkIGNo YXIgKmR0ID0gTlVMTDsKKysgICAgdW5zaWduZWQgY2hhciByZXRbMTZdOworKyAgICBjaGFyIGJ1 ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFs dWU7CisrICAgIGxvbmcgaSwga2V5bGVuOworKyAgICBpbnQgajsKKysKKysgICAga2V5bGVuID0g MDsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisr CXsKKysJZnB1dHMoYnVmLHN0ZG91dCk7CisrCWlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxMjgtS2V5 XSIsIDEzKSkKKysJCWtleWxlbiA9IDE2OworKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAx OTItS2V5XSIsIDEzKSkKKysJCWtleWxlbiA9IDI0OworKwllbHNlIGlmKCFzdHJuY21wKGJ1Ziwi W0FFUyAyNTYtS2V5XSIsIDEzKSkKKysJCWtleWxlbiA9IDMyOworKwlpZiAoIXBhcnNlX2xpbmUo JmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCWNvbnRpbnVlOworKwlpZighc3RyY21w KGtleXdvcmQsIktleSIpKQorKwkgICAgeworKwkgICAga2V5PWhleDJiaW5fbSh2YWx1ZSwmaSk7 CisrCSAgICBpZiAoaSAhPSBrZXlsZW4pCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkludmFs aWQga2V5IGxlbmd0aCwgZXhwZWN0aW5nICVsZFxuIiwga2V5bGVuKTsKKysJCXJldHVybjsKKysJ CX0KKysJICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkRUIikpCisrCSAgICB7Cisr CSAgICBkdD1oZXgyYmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0gMTYpCisrCQl7Cisr CQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgRFQgbGVuZ3RoXG4iKTsKKysJCXJldHVybjsKKysJ CX0KKysJICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlYiKSkKKysJICAgIHsKKysJ ICAgIHY9aGV4MmJpbl9tKHZhbHVlLCZpKTsKKysJICAgIGlmIChpICE9IDE2KQorKwkJeworKwkJ ZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIFYgbGVuZ3RoXG4iKTsKKysJCXJldHVybjsKKysJCX0K KysKKysJICAgIGlmICgha2V5IHx8ICFkdCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiTWlz c2luZyBrZXkgb3IgRFRcbiIpOworKwkJcmV0dXJuOworKwkJfQorKworKwkgICAgRklQU19yYW5k X3NldF9rZXkoa2V5LCBrZXlsZW4pOworKwkgICAgRklQU19yYW5kX3NlZWQodiwxNik7CisrCSAg ICBmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykKKysJCXsKKysJCSAgICBGSVBTX3JhbmRfc2V0 X2R0KGR0KTsKKysJCSAgICBpZiAoRklQU19yYW5kX2J5dGVzKHJldCwxNikgPD0gMCkKKysJCQl7 CisrCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBnZXR0aW5nIFBSTkcgdmFsdWVcbiIpOworKwkJ ICAgICAgICByZXR1cm47CisrCQkgICAgICAgIH0KKysJCSAgICAvKiBJbmNyZW1lbnQgRFQgKi8K KysJCSAgICBmb3IgKGogPSAxNTsgaiA+PSAwOyBqLS0pCisrCQkJeworKwkJCWR0W2pdKys7Cisr CQkJaWYgKGR0W2pdKQorKwkJCQlicmVhazsKKysJCQl9CisrCQl9CisrCisrCSAgICBwdigiUiIs cmV0LDE2KTsKKysJICAgIE9QRU5TU0xfZnJlZShrZXkpOworKwkgICAga2V5ID0gTlVMTDsKKysJ ICAgIE9QRU5TU0xfZnJlZShkdCk7CisrCSAgICBkdCA9IE5VTEw7CisrCSAgICBPUEVOU1NMX2Zy ZWUodik7CisrCSAgICB2ID0gTlVMTDsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisraW50IG1h aW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCisrICAgIHsKKysgICAgaWYoYXJnYyAhPSAyKQorKwl7 CisrCWZwcmludGYoc3RkZXJyLCIlcyBbbWN0fHZzdF1cbiIsYXJndlswXSk7CisrCWV4aXQoMSk7 CisrCX0KKysgICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCXsKKysJZG9fcHJpbnRfZXJyb3Jz KCk7CisrCWV4aXQoMSk7CisrCX0KKysgICAgRklQU19yYW5kX3Jlc2V0KCk7CisrICAgIGlmICgh RklQU19yYW5kX3Rlc3RfbW9kZSgpKQorKwl7CisrCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igc2V0 dGluZyBQUk5HIHRlc3QgbW9kZVxuIik7CisrCWRvX3ByaW50X2Vycm9ycygpOworKwlleGl0KDEp OworKwl9CisrICAgIGlmKCFzdHJjbXAoYXJndlsxXSwibWN0IikpCisrCW1jdCgpOworKyAgICBl bHNlIGlmKCFzdHJjbXAoYXJndlsxXSwidnN0IikpCisrCXZzdCgpOworKyAgICBlbHNlCisrCXsK KysJZnByaW50ZihzdGRlcnIsIkRvbid0IGtub3cgaG93IHRvICVzLlxuIixhcmd2WzFdKTsKKysJ ZXhpdCgxKTsKKysJfQorKworKyAgICByZXR1cm4gMDsKKysgICAgfQorKyNlbmRpZgorZGlmZiAt dXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3Jz YWd0ZXN0LmMKKy0tLSAvZGV2L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVz dC5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDM5MCBA QAorKy8qIGZpcHNfcnNhZ3Rlc3QuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhl bnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QgMjAw NS4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNSwyMDA3IFRo ZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor KyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK KysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5T U0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJP cGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAg IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNl IGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNT TCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91 dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0 LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVz dCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cu T3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF IE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg VEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysg KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQ T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisrICogVGhp cyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmlj IFlvdW5nCisrICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgor KyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+Cisr I2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorKworKyNpZm5kZWYgT1BF TlNTTF9GSVBTCisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAg IHByaW50ZigiTm8gRklQUyBSU0Egc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9Cisr CisrI2Vsc2UKKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytpbnQgcnNhX3Rlc3QoRklM RSAqb3V0LCBGSUxFICppbik7Cisrc3RhdGljIGludCByc2FfcHJpbnRrZXkxKEZJTEUgKm91dCwg UlNBICpyc2EsCisrCQlCSUdOVU0gKlhwMSwgQklHTlVNICpYcDIsIEJJR05VTSAqWHAsCisrCQlC SUdOVU0gKmUpOworK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MihGSUxFICpvdXQsIFJTQSAqcnNh LAorKwkJQklHTlVNICpYcTEsIEJJR05VTSAqWHEyLCBCSUdOVU0gKlhxKTsKKysKKytpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrCXsKKysJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0g TlVMTDsKKysKKysJaW50IHJldCA9IDE7CisrCisrCWlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwkJ eworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKGFy Z2MgPT0gMSkKKysJCWluID0gc3RkaW47CisrCWVsc2UKKysJCWluID0gZm9wZW4oYXJndlsxXSwg InIiKTsKKysKKysJaWYgKGFyZ2MgPCAyKQorKwkJb3V0ID0gc3Rkb3V0OworKwllbHNlCisrCQlv dXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOworKworKwlpZiAoIWluKQorKwkJeworKwkJZnByaW50 ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3Rv IGVuZDsKKysJCX0KKysKKysJaWYgKCFvdXQpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZB VEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0K KysKKysJaWYgKCFyc2FfdGVzdChvdXQsIGluKSkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAi RkFUQUwgUlNBR1RFU1QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOwor KwkJfQorKwllbHNlCisrCQlyZXQgPSAwOworKworKwllbmQ6CisrCisrCWlmIChyZXQpCisrCQlk b19wcmludF9lcnJvcnMoKTsKKysKKysJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCisrCQlmY2xv c2UoaW4pOworKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKKysJCWZjbG9zZShvdXQpOwor KworKwlyZXR1cm4gcmV0OworKworKwl9CisrCisrI2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVO CTEwMjQwCisrCisraW50IHJzYV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pCisrCXsKKysJY2hh ciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsK KysJUlNBICpyc2EgPSBOVUxMOworKwlCSUdOVU0gKlhwMSA9IE5VTEwsICpYcDIgPSBOVUxMLCAq WHAgPSBOVUxMOworKwlCSUdOVU0gKlhxMSA9IE5VTEwsICpYcTIgPSBOVUxMLCAqWHEgPSBOVUxM OworKwlCSUdOVU0gKmUgPSBOVUxMOworKwlpbnQgcmV0ID0gMDsKKysJaW50IGxudW0gPSAwOwor KworKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOworKwls aW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7CisrCisrCWlmICgh bGluZWJ1ZiB8fCAhb2xpbmVidWYpCisrCQlnb3RvIGVycm9yOworKworKwl3aGlsZSAoZmdldHMo b2xpbmVidWYsIFJTQV9URVNUX01BWExJTkVMRU4sIGluKSkKKysJCXsKKysJCWxudW0rKzsKKysJ CXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7CisrCQlrZXl3b3JkID0gbGluZWJ1ZjsKKysJCS8q IFNraXAgbGVhZGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIp KmtleXdvcmQpKQorKwkJCWtleXdvcmQrKzsKKysKKysJCS8qIExvb2sgZm9yID0gc2lnbiAqLwor KwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKworKwkJLyogSWYgbm8gPSBvciBzdGFydHMg d2l0aCBbIChmb3IgW2ZvbyA9IGJhcl0gbGluZSkganVzdCBjb3B5ICovCisrCQlpZiAoIXAgfHwg KmtleXdvcmQ9PSdbJykKKysJCQl7CisrCQkJaWYgKGZwdXRzKG9saW5lYnVmLCBvdXQpIDwgMCkK KysJCQkJZ290byBlcnJvcjsKKysJCQljb250aW51ZTsKKysJCQl9CisrCisrCQlxID0gcCAtIDE7 CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1 bnNpZ25lZCBjaGFyKSpxKSkKKysJCQkqcS0tID0gMDsKKysKKysJCSpwID0gMDsKKysJCXZhbHVl ID0gcCArIDE7CisrCisrCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisr CQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQorKwkJCXZhbHVlKys7Cisr CisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJcCA9IHZhbHVl ICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisrCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNl KCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkqcC0tID0gMDsKKysKKysJCWlmICghc3RyY21wKGtl eXdvcmQsICJ4cDEiKSkKKysJCQl7CisrCQkJaWYgKFhwMSB8fCAhZG9faGV4MmJuKCZYcDEsdmFs dWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwgInhwMiIpKQorKwkJCXsKKysJCQlpZiAoWHAyIHx8ICFkb19oZXgyYm4oJlhwMix2 YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNt cChrZXl3b3JkLCAiWHAiKSkKKysJCQl7CisrCQkJaWYgKFhwIHx8ICFkb19oZXgyYm4oJlhwLHZh bHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsICJ4cTEiKSkKKysJCQl7CisrCQkJaWYgKFhxMSB8fCAhZG9faGV4MmJuKCZYcTEs dmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwgInhxMiIpKQorKwkJCXsKKysJCQlpZiAoWHEyIHx8ICFkb19oZXgyYm4oJlhx Mix2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0 cmNtcChrZXl3b3JkLCAiWHEiKSkKKysJCQl7CisrCQkJaWYgKFhxIHx8ICFkb19oZXgyYm4oJlhx LHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsICJlIikpCisrCQkJeworKwkJCWlmIChlIHx8ICFkb19oZXgyYm4oJmUsdmFs dWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwgInAxIikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsICJwMiIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAi cCIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicTEiKSkK KysJCQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInEyIikpCisrCQkJ Y29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJxIikpCisrCQkJY29udGlu dWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJuIikpCisrCQkJY29udGludWU7Cisr CQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJkIikpCisrCQkJY29udGludWU7CisrCQllbHNl CisrCQkJZ290byBwYXJzZV9lcnJvcjsKKysKKysJCWZwdXRzKG9saW5lYnVmLCBvdXQpOworKwor KwkJaWYgKGUgJiYgWHAxICYmIFhwMiAmJiBYcCkKKysJCQl7CisrCQkJcnNhID0gRklQU19yc2Ff bmV3KCk7CisrCQkJaWYgKCFyc2EpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJaWYgKCFyc2FfcHJp bnRrZXkxKG91dCwgcnNhLCBYcDEsIFhwMiwgWHAsIGUpKQorKwkJCQlnb3RvIGVycm9yOworKwkJ CUJOX2ZyZWUoWHAxKTsKKysJCQlYcDEgPSBOVUxMOworKwkJCUJOX2ZyZWUoWHAyKTsKKysJCQlY cDIgPSBOVUxMOworKwkJCUJOX2ZyZWUoWHApOworKwkJCVhwID0gTlVMTDsKKysJCQlCTl9mcmVl KGUpOworKwkJCWUgPSBOVUxMOworKwkJCX0KKysKKysJCWlmIChyc2EgJiYgWHExICYmIFhxMiAm JiBYcSkKKysJCQl7CisrCQkJaWYgKCFyc2FfcHJpbnRrZXkyKG91dCwgcnNhLCBYcTEsIFhxMiwg WHEpKQorKwkJCQlnb3RvIGVycm9yOworKwkJCUJOX2ZyZWUoWHExKTsKKysJCQlYcTEgPSBOVUxM OworKwkJCUJOX2ZyZWUoWHEyKTsKKysJCQlYcTIgPSBOVUxMOworKwkJCUJOX2ZyZWUoWHEpOwor KwkJCVhxID0gTlVMTDsKKysJCQlGSVBTX3JzYV9mcmVlKHJzYSk7CisrCQkJcnNhID0gTlVMTDsK KysJCQl9CisrCQl9CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgorKworKwlpZiAob2xpbmVi dWYpCisrCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOworKwlpZiAobGluZWJ1ZikKKysJCU9QRU5T U0xfZnJlZShsaW5lYnVmKTsKKysKKysJaWYgKFhwMSkKKysJCUJOX2ZyZWUoWHAxKTsKKysJaWYg KFhwMikKKysJCUJOX2ZyZWUoWHAyKTsKKysJaWYgKFhwKQorKwkJQk5fZnJlZShYcCk7CisrCWlm IChYcTEpCisrCQlCTl9mcmVlKFhxMSk7CisrCWlmIChYcTEpCisrCQlCTl9mcmVlKFhxMSk7Cisr CWlmIChYcTIpCisrCQlCTl9mcmVlKFhxMik7CisrCWlmIChYcSkKKysJCUJOX2ZyZWUoWHEpOwor KwlpZiAoZSkKKysJCUJOX2ZyZWUoZSk7CisrCWlmIChyc2EpCisrCQlGSVBTX3JzYV9mcmVlKHJz YSk7CisrCisrCXJldHVybiByZXQ7CisrCisrCXBhcnNlX2Vycm9yOgorKworKwlmcHJpbnRmKHN0 ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7Cisr CisrCWdvdG8gZXJyb3I7CisrCisrCX0KKysKKytzdGF0aWMgaW50IHJzYV9wcmludGtleTEoRklM RSAqb3V0LCBSU0EgKnJzYSwKKysJCUJJR05VTSAqWHAxLCBCSUdOVU0gKlhwMiwgQklHTlVNICpY cCwKKysJCUJJR05VTSAqZSkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJQklHTlVNICpwMSA9IE5V TEwsICpwMiA9IE5VTEw7CisrCXAxID0gQk5fbmV3KCk7CisrCXAyID0gQk5fbmV3KCk7CisrCWlm ICghcDEgfHwgIXAyKQorKwkJZ290byBlcnJvcjsKKysKKysJaWYgKCFSU0FfWDkzMV9kZXJpdmVf ZXgocnNhLCBwMSwgcDIsIE5VTEwsIE5VTEwsIFhwMSwgWHAyLCBYcCwKKysJCQkJCQlOVUxMLCBO VUxMLCBOVUxMLCBlLCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCisrCWRvX2JuX3ByaW50X25h bWUob3V0LCAicDEiLCBwMSk7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicDIiLCBwMik7Cisr CWRvX2JuX3ByaW50X25hbWUob3V0LCAicCIsIHJzYS0+cCk7CisrCisrCXJldCA9IDE7CisrCisr CWVycm9yOgorKwlpZiAocDEpCisrCQlCTl9mcmVlKHAxKTsKKysJaWYgKHAyKQorKwkJQk5fZnJl ZShwMik7CisrCisrCXJldHVybiByZXQ7CisrCX0KKysKKytzdGF0aWMgaW50IHJzYV9wcmludGtl eTIoRklMRSAqb3V0LCBSU0EgKnJzYSwKKysJCUJJR05VTSAqWHExLCBCSUdOVU0gKlhxMiwgQklH TlVNICpYcSkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJQklHTlVNICpxMSA9IE5VTEwsICpxMiA9 IE5VTEw7CisrCXExID0gQk5fbmV3KCk7CisrCXEyID0gQk5fbmV3KCk7CisrCWlmICghcTEgfHwg IXEyKQorKwkJZ290byBlcnJvcjsKKysKKysJaWYgKCFSU0FfWDkzMV9kZXJpdmVfZXgocnNhLCBO VUxMLCBOVUxMLCBxMSwgcTIsIE5VTEwsIE5VTEwsIE5VTEwsCisrCQkJCQkJWHExLCBYcTIsIFhx LCBOVUxMLCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCisrCWRvX2JuX3ByaW50X25hbWUob3V0 LCAicTEiLCBxMSk7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicTIiLCBxMik7CisrCWRvX2Ju X3ByaW50X25hbWUob3V0LCAicSIsIHJzYS0+cSk7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAi biIsIHJzYS0+bik7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAiZCIsIHJzYS0+ZCk7CisrCisr CXJldCA9IDE7CisrCisrCWVycm9yOgorKwlpZiAocTEpCisrCQlCTl9mcmVlKHExKTsKKysJaWYg KHEyKQorKwkJQk5fZnJlZShxMik7CisrCisrCXJldHVybiByZXQ7CisrCX0KKysKKysjZW5kaWYK K2RpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2NhdnMv Zmlwc19yc2FzdGVzdC5jCistLS0gL2Rldi9udWxsCTIwMDktMTEtMDQgMTI6MDA6NTguODAxMDAy Mjc2ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNf cnNhc3Rlc3QuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCAr MSwzNzAgQEAKKysvKiBmaXBzX3JzYXN0ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBo ZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9q ZWN0IDIwMDUuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl CisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3Bl blNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQg Ik9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICog ICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVh c2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVu U1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRo b3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2pl Y3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBt dXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3 dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhF IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBU aGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVy aWMgWW91bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSku CisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4K KysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisrCisrI2lmbmRlZiBP UEVOU1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysg ICAgcHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30K KysKKysjZWxzZQorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3N0YXRpYyBpbnQgcnNh X3N0ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBTYWx0bGVuKTsKKytzdGF0aWMgaW50IHJz YV9wcmludHNpZyhGSUxFICpvdXQsIFJTQSAqcnNhLCBjb25zdCBFVlBfTUQgKmRnc3QsCisrCQl1 bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLCBpbnQgU2FsdGxlbik7CisrCisraW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKwl7CisrCUZJTEUgKmluID0gTlVMTCwgKm91dCA9 IE5VTEw7CisrCisrCWludCByZXQgPSAxLCBTYWx0bGVuID0gLTE7CisrCisrCWlmKCFGSVBTX21v ZGVfc2V0KDEpKQorKwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQlnb3RvIGVuZDsKKysJ CX0KKysKKysJaWYgKChhcmdjID4gMikgJiYgIXN0cmNtcCgiLXNhbHRsZW4iLCBhcmd2WzFdKSkK KysJCXsKKysJCVNhbHRsZW4gPSBhdG9pKGFyZ3ZbMl0pOworKwkJaWYgKFNhbHRsZW4gPCAwKQor KwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBJbnZhbGlkIHNhbHQgbGVuZ3RoXG4i KTsKKysJCQlnb3RvIGVuZDsKKysJCQl9CisrCQlhcmdjIC09IDI7CisrCQlhcmd2ICs9IDI7Cisr CQl9CisrCWVsc2UgaWYgKChhcmdjID4gMSkgJiYgIXN0cmNtcCgiLXg5MzEiLCBhcmd2WzFdKSkK KysJCXsKKysJCVNhbHRsZW4gPSAtMjsKKysJCWFyZ2MtLTsKKysJCWFyZ3YrKzsKKysJCX0KKysK KysJaWYgKGFyZ2MgPT0gMSkKKysJCWluID0gc3RkaW47CisrCWVsc2UKKysJCWluID0gZm9wZW4o YXJndlsxXSwgInIiKTsKKysKKysJaWYgKGFyZ2MgPCAyKQorKwkJb3V0ID0gc3Rkb3V0OworKwll bHNlCisrCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOworKworKwlpZiAoIWluKQorKwkJewor KwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7 CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFvdXQpCisrCQl7CisrCQlmcHJpbnRmKHN0 ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVu ZDsKKysJCX0KKysKKysJaWYgKCFyc2Ffc3Rlc3Qob3V0LCBpbiwgU2FsdGxlbikpCisrCQl7Cisr CQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIFJTQVNURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxu Iik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysJZWxzZQorKwkJcmV0ID0gMDsKKysKKysJZW5kOgor KworKwlpZiAocmV0KQorKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCisrCWlmIChpbiAmJiAoaW4g IT0gc3RkaW4pKQorKwkJZmNsb3NlKGluKTsKKysJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkp CisrCQlmY2xvc2Uob3V0KTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJfQorKworKyNkZWZpbmUg UlNBX1RFU1RfTUFYTElORUxFTgkxMDI0MAorKworK2ludCByc2Ffc3Rlc3QoRklMRSAqb3V0LCBG SUxFICppbiwgaW50IFNhbHRsZW4pCisrCXsKKysJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAq cCwgKnE7CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysJUlNBICpyc2EgPSBOVUxMOworKwlj b25zdCBFVlBfTUQgKmRnc3QgPSBOVUxMOworKwl1bnNpZ25lZCBjaGFyICpNc2cgPSBOVUxMOwor Kwlsb25nIE1zZ2xlbiA9IC0xOworKwlpbnQga2V5bGVuID0gLTEsIGN1cnJlbnRfa2V5bGVuID0g LTE7CisrCWludCByZXQgPSAwOworKwlpbnQgbG51bSA9IDA7CisrCisrCW9saW5lYnVmID0gT1BF TlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7CisrCWxpbmVidWYgPSBPUEVOU1NMX21h bGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKKysKKysJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1 ZikKKysJCWdvdG8gZXJyb3I7CisrCisrCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1Rf TUFYTElORUxFTiwgaW4pKQorKwkJeworKwkJbG51bSsrOworKwkJc3RyY3B5KGxpbmVidWYsIG9s aW5lYnVmKTsKKysJCWtleXdvcmQgPSBsaW5lYnVmOworKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNl ICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCisrCQkJa2V5 d29yZCsrOworKworKwkJLyogTG9vayBmb3IgPSBzaWduICovCisrCQlwID0gc3RyY2hyKGxpbmVi dWYsICc9Jyk7CisrCisrCQkvKiBJZiBubyA9IGp1c3QgY29weSAqLworKwkJaWYgKCFwKQorKwkJ CXsKKysJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQorKwkJCQlnb3RvIGVycm9yOwor KwkJCWNvbnRpbnVlOworKwkJCX0KKysKKysJCXEgPSBwIC0gMTsKKysKKysJCS8qIFJlbW92ZSB0 cmFpbGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQor KwkJCSpxLS0gPSAwOworKworKwkJKnAgPSAwOworKwkJdmFsdWUgPSBwICsgMTsKKysKKysJCS8q IFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1 bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisrCQkJdmFsdWUrKzsKKysKKysJCS8qIFJlbW92ZSB0cmFp bGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0g MTsKKysKKysJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnAp KQorKwkJCSpwLS0gPSAwOworKworKwkJLyogTG9vayBmb3IgW21vZCA9IFhYWF0gZm9yIGtleSBs ZW5ndGggKi8KKysKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJbbW9kIikpCisrCQkJeworKwkJ CXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKwkJCWlmICgqcCAhPSAnXScpCisrCQkJ CWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJKnAgPSAwOworKwkJCWtleWxlbiA9IGF0b2kodmFsdWUp OworKwkJCWlmIChrZXlsZW4gPCAwKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlNIQUFsZyIpKQorKwkJCXsKKysJCQlpZiAoIXN0 cmNtcCh2YWx1ZSwgIlNIQTEiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGExKCk7CisrCQkJZWxzZSBp ZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTIyNCIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTIyNCgpOwor KwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEyNTYiKSkKKysJCQkJZGdzdCA9IEVWUF9z aGEyNTYoKTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMzg0IikpCisrCQkJCWRn c3QgPSBFVlBfc2hhMzg0KCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTUxMiIp KQorKwkJCQlkZ3N0ID0gRVZQX3NoYTUxMigpOworKwkJCWVsc2UKKysJCQkJeworKwkJCQlmcHJp bnRmKHN0ZGVyciwKKysJCQkJCSJGQVRBTDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIFwiJXNcIlxu IiwKKysJCQkJCQkJCXZhbHVlKTsKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQkJfQorKwkJ CX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQorKwkJCXsKKysJCQlpZiAo TXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkK KysJCQkJKigtLXZhbHVlKSA9ICcwJzsKKysJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZNc2ds ZW4pOworKwkJCWlmICghTXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysKKysJ CWZwdXRzKG9saW5lYnVmLCBvdXQpOworKworKwkJLyogSWYga2V5IGxlbmd0aCBoYXMgY2hhbmdl ZCwgZ2VuZXJhdGUgYW5kIG91dHB1dCBwdWJsaWMKKysJCSAqIGtleSBjb21wb25lbnRzIG9mIG5l dyBSU0EgcHJpdmF0ZSBrZXkuCisrCQkgKi8KKysKKysJCWlmIChrZXlsZW4gIT0gY3VycmVudF9r ZXlsZW4pCisrCQkJeworKwkJCUJJR05VTSAqYm5fZTsKKysJCQlpZiAocnNhKQorKwkJCQlGSVBT X3JzYV9mcmVlKHJzYSk7CisrCQkJcnNhID0gRklQU19yc2FfbmV3KCk7CisrCQkJaWYgKCFyc2Ep CisrCQkJCWdvdG8gZXJyb3I7CisrCQkJYm5fZSA9IEJOX25ldygpOworKwkJCWlmICghYm5fZSB8 fCAhQk5fc2V0X3dvcmQoYm5fZSwgMHgxMDAxKSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlpZiAo IVJTQV9YOTMxX2dlbmVyYXRlX2tleV9leChyc2EsIGtleWxlbiwgYm5fZSwgTlVMTCkpCisrCQkJ CWdvdG8gZXJyb3I7CisrCQkJQk5fZnJlZShibl9lKTsKKysJCQlmcHV0cygibiA9ICIsIG91dCk7 CisrCQkJZG9fYm5fcHJpbnQob3V0LCByc2EtPm4pOworKwkJCWZwdXRzKCJcbmUgPSAiLCBvdXQp OworKwkJCWRvX2JuX3ByaW50KG91dCwgcnNhLT5lKTsKKysJCQlmcHV0cygiXG4iLCBvdXQpOwor KwkJCWN1cnJlbnRfa2V5bGVuID0ga2V5bGVuOworKwkJCX0KKysKKysJCWlmIChNc2cgJiYgZGdz dCkKKysJCQl7CisrCQkJaWYgKCFyc2FfcHJpbnRzaWcob3V0LCByc2EsIGRnc3QsIE1zZywgTXNn bGVuLAorKwkJCQkJCQkJU2FsdGxlbikpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJT1BFTlNTTF9m cmVlKE1zZyk7CisrCQkJTXNnID0gTlVMTDsKKysJCQl9CisrCisrCQl9CisrCisrCXJldCA9IDE7 CisrCisrCWVycm9yOgorKworKwlpZiAob2xpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUob2xpbmVi dWYpOworKwlpZiAobGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKKysJaWYgKHJz YSkKKysJCUZJUFNfcnNhX2ZyZWUocnNhKTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJcGFyc2Vf ZXJyb3I6CisrCisrCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2lu ZyBsaW5lICVkXG4iLCBsbnVtKTsKKysKKysJZ290byBlcnJvcjsKKysKKysJfQorKworK3N0YXRp YyBpbnQgcnNhX3ByaW50c2lnKEZJTEUgKm91dCwgUlNBICpyc2EsIGNvbnN0IEVWUF9NRCAqZGdz dCwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sIGludCBTYWx0bGVuKQorKwl7 CisrCWludCByZXQgPSAwOworKwl1bnNpZ25lZCBjaGFyICpzaWdidWYgPSBOVUxMOworKwlpbnQg aSwgc2lnbGVuOworKwkvKiBFVlBfUEtFWSBzdHJ1Y3R1cmUgKi8KKysJRVZQX1BLRVkgcGs7Cisr CUVWUF9NRF9DVFggY3R4OworKwlway50eXBlID0gRVZQX1BLRVlfUlNBOworKwlway5wa2V5LnJz YSA9IHJzYTsKKysKKysJc2lnbGVuID0gUlNBX3NpemUocnNhKTsKKysJc2lnYnVmID0gT1BFTlNT TF9tYWxsb2Moc2lnbGVuKTsKKysJaWYgKCFzaWdidWYpCisrCQlnb3RvIGVycm9yOworKworKwlF VlBfTURfQ1RYX2luaXQoJmN0eCk7CisrCisrCWlmIChTYWx0bGVuID49IDApCisrCQl7CisrCQlN X0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsCisrCQkJRVZQX01EX0NUWF9GTEFHX1BBRF9QU1Mg fCAoU2FsdGxlbiA8PCAxNikpOworKwkJfQorKwllbHNlIGlmIChTYWx0bGVuID09IC0yKQorKwkJ TV9FVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpOwor KwlpZiAoIUVWUF9TaWduSW5pdF9leCgmY3R4LCBkZ3N0LCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7 CisrCWlmICghRVZQX1NpZ25VcGRhdGUoJmN0eCwgTXNnLCBNc2dsZW4pKQorKwkJZ290byBlcnJv cjsKKysJaWYgKCFFVlBfU2lnbkZpbmFsKCZjdHgsIHNpZ2J1ZiwgKHVuc2lnbmVkIGludCAqKSZz aWdsZW4sICZwaykpCisrCQlnb3RvIGVycm9yOworKworKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0 eCk7CisrCisrCWZwdXRzKCJTID0gIiwgb3V0KTsKKysKKysJZm9yIChpID0gMDsgaSA8IHNpZ2xl bjsgaSsrKQorKwkJZnByaW50ZihvdXQsICIlMDJYIiwgc2lnYnVmW2ldKTsKKysKKysJZnB1dHMo IlxuIiwgb3V0KTsKKysKKysJcmV0ID0gMTsKKysKKysJZXJyb3I6CisrCisrCXJldHVybiByZXQ7 CisrCX0KKysjZW5kaWYKK2RpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jCistLS0gL2Rldi9udWxsCTIwMDktMTEtMDQg MTI6MDA6NTguODAxMDAyMjc2ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfcnNhdnRlc3QuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCAr MDEwMAorQEAgLTAsMCArMSwzNzcgQEAKKysvKiBmaXBzX3JzYXZ0ZXN0LmMgKi8KKysvKiBXcml0 dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9w ZW5TU0wKKysgKiBwcm9qZWN0IDIwMDUuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5 cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu CisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisr ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisr ICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4g KGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNT TCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAq ICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4K KysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3Qg YmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0 aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRo ZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZv cm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVk Z21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICog RVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAq IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2Fy ZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhA Y3J5cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5j bHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv YmlvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1h Yy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2 My5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+ CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKKysgICAg cmV0dXJuKDApOworK30KKysKKysjZWxzZQorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKwor K2ludCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBpbnQgc2FsdGxlbik7Cisrc3RhdGlj IGludCByc2FfcHJpbnR2ZXIoRklMRSAqb3V0LAorKwkJQklHTlVNICpuLCBCSUdOVU0gKmUsCisr CQljb25zdCBFVlBfTUQgKmRnc3QsCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVu LAorKwkJdW5zaWduZWQgY2hhciAqUywgbG9uZyBTbGVuLCBpbnQgU2FsdGxlbik7CisrCisraW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKwl7CisrCUZJTEUgKmluID0gTlVMTCwgKm91 dCA9IE5VTEw7CisrCisrCWludCByZXQgPSAxOworKwlpbnQgU2FsdGxlbiA9IC0xOworKworKwlp ZighRklQU19tb2RlX3NldCgxKSkKKysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZ290 byBlbmQ7CisrCQl9CisrCisrCWlmICgoYXJnYyA+IDIpICYmICFzdHJjbXAoIi1zYWx0bGVuIiwg YXJndlsxXSkpCisrCQl7CisrCQlTYWx0bGVuID0gYXRvaShhcmd2WzJdKTsKKysJCWlmIChTYWx0 bGVuIDwgMCkKKysJCQl7CisrCQkJZnByaW50ZihzdGRlcnIsICJGQVRBTDogSW52YWxpZCBzYWx0 IGxlbmd0aFxuIik7CisrCQkJZ290byBlbmQ7CisrCQkJfQorKwkJYXJnYyAtPSAyOworKwkJYXJn diArPSAyOworKwkJfQorKwllbHNlIGlmICgoYXJnYyA+IDEpICYmICFzdHJjbXAoIi14OTMxIiwg YXJndlsxXSkpCisrCQl7CisrCQlTYWx0bGVuID0gLTI7CisrCQlhcmdjLS07CisrCQlhcmd2Kys7 CisrCQl9CisrCisrCWlmIChhcmdjID09IDEpCisrCQlpbiA9IHN0ZGluOworKwllbHNlCisrCQlp biA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7CisrCisrCWlmIChhcmdjIDwgMikKKysJCW91dCA9IHN0 ZG91dDsKKysJZWxzZQorKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKKysKKysJaWYgKCFp bikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24g ZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghb3V0KQorKwkJeworKwkJ ZnByaW50ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwor KwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghcnNhX3Rlc3Qob3V0LCBpbiwgU2FsdGxlbikp CisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIFJTQVZURVNUIGZpbGUgcHJvY2Vzc2lu ZyBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysJZWxzZQorKwkJcmV0ID0gMDsKKysK KysJZW5kOgorKworKwlpZiAocmV0KQorKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCisrCWlmIChp biAmJiAoaW4gIT0gc3RkaW4pKQorKwkJZmNsb3NlKGluKTsKKysJaWYgKG91dCAmJiAob3V0ICE9 IHN0ZG91dCkpCisrCQlmY2xvc2Uob3V0KTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJfQorKwor KyNkZWZpbmUgUlNBX1RFU1RfTUFYTElORUxFTgkxMDI0MAorKworK2ludCByc2FfdGVzdChGSUxF ICpvdXQsIEZJTEUgKmluLCBpbnQgU2FsdGxlbikKKysJeworKwljaGFyICpsaW5lYnVmLCAqb2xp bmVidWYsICpwLCAqcTsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVlOworKwljb25zdCBFVlBfTUQg KmRnc3QgPSBOVUxMOworKwlCSUdOVU0gKm4gPSBOVUxMLCAqZSA9IE5VTEw7CisrCXVuc2lnbmVk IGNoYXIgKk1zZyA9IE5VTEwsICpTID0gTlVMTDsKKysJbG9uZyBNc2dsZW4sIFNsZW47CisrCWlu dCByZXQgPSAwOworKwlpbnQgbG51bSA9IDA7CisrCisrCW9saW5lYnVmID0gT1BFTlNTTF9tYWxs b2MoUlNBX1RFU1RfTUFYTElORUxFTik7CisrCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ff VEVTVF9NQVhMSU5FTEVOKTsKKysKKysJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKKysJCWdv dG8gZXJyb3I7CisrCisrCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxF TiwgaW4pKQorKwkJeworKwkJbG51bSsrOworKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsK KysJCWtleXdvcmQgPSBsaW5lYnVmOworKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisrCQl3 aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCisrCQkJa2V5d29yZCsrOwor KworKwkJLyogTG9vayBmb3IgPSBzaWduICovCisrCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7 CisrCisrCQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbZm9vID0gYmFyXSBsaW5l KSBqdXN0IGNvcHkgKi8KKysJCWlmICghcCB8fCAqa2V5d29yZD09J1snKQorKwkJCXsKKysJCQlp ZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQorKwkJCQlnb3RvIGVycm9yOworKwkJCWNvbnRp bnVlOworKwkJCX0KKysKKysJCXEgPSBwIC0gMTsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBz cGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJCSpxLS0g PSAwOworKworKwkJKnAgPSAwOworKwkJdmFsdWUgPSBwICsgMTsKKysKKysJCS8qIFJlbW92ZSBs ZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBj aGFyKSp2YWx1ZSkpCisrCQkJdmFsdWUrKzsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFj ZSBmcm9tIHZhbHVlICovCisrCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysKKysJ CXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJCSpw LS0gPSAwOworKworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIm4iKSkKKysJCQl7CisrCQkJaWYg KCFkb19oZXgyYm4oJm4sdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgImUiKSkKKysJCQl7CisrCQkJaWYgKCFkb19oZXgy Ym4oJmUsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgIlNIQUFsZyIpKQorKwkJCXsKKysJCQlpZiAoIXN0cmNtcCh2YWx1 ZSwgIlNIQTEiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGExKCk7CisrCQkJZWxzZSBpZiAoIXN0cmNt cCh2YWx1ZSwgIlNIQTIyNCIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTIyNCgpOworKwkJCWVsc2Ug aWYgKCFzdHJjbXAodmFsdWUsICJTSEEyNTYiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGEyNTYoKTsK KysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMzg0IikpCisrCQkJCWRnc3QgPSBFVlBf c2hhMzg0KCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTUxMiIpKQorKwkJCQlk Z3N0ID0gRVZQX3NoYTUxMigpOworKwkJCWVsc2UKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVy ciwKKysJCQkJCSJGQVRBTDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIFwiJXNcIlxuIiwKKysJCQkJ CQkJCXZhbHVlKTsKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQkJfQorKwkJCX0KKysJCWVs c2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQorKwkJCXsKKysJCQlpZiAoTXNnKQorKwkJ CQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKKysJCQkJKigt LXZhbHVlKSA9ICcwJzsKKysJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZNc2dsZW4pOworKwkJ CWlmICghTXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwgIlMiKSkKKysJCQl7CisrCQkJaWYgKFMpCisrCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7CisrCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkqKC0tdmFsdWUpID0gJzAn OworKwkJCVMgPSBoZXgyYmluX20odmFsdWUsICZTbGVuKTsKKysJCQlpZiAoIVMpCisrCQkJCWdv dG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUmVz dWx0IikpCisrCQkJY29udGludWU7CisrCQllbHNlCisrCQkJZ290byBwYXJzZV9lcnJvcjsKKysK KysJCWZwdXRzKG9saW5lYnVmLCBvdXQpOworKworKwkJaWYgKG4gJiYgZSAmJiBNc2cgJiYgUyAm JiBkZ3N0KQorKwkJCXsKKysJCQlpZiAoIXJzYV9wcmludHZlcihvdXQsIG4sIGUsIGRnc3QsCisr CQkJCQlNc2csIE1zZ2xlbiwgUywgU2xlbiwgU2FsdGxlbikpCisrCQkJCWdvdG8gZXJyb3I7Cisr CQkJT1BFTlNTTF9mcmVlKE1zZyk7CisrCQkJTXNnID0gTlVMTDsKKysJCQlPUEVOU1NMX2ZyZWUo Uyk7CisrCQkJUyA9IE5VTEw7CisrCQkJfQorKworKwkJfQorKworKworKwlyZXQgPSAxOworKwor KworKwllcnJvcjoKKysKKysJaWYgKG9saW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVm KTsKKysJaWYgKGxpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7CisrCWlmIChuKQor KwkJQk5fZnJlZShuKTsKKysJaWYgKGUpCisrCQlCTl9mcmVlKGUpOworKworKwlyZXR1cm4gcmV0 OworKworKwlwYXJzZV9lcnJvcjoKKysKKysJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBl cnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOworKworKwlnb3RvIGVycm9yOworKwor Kwl9CisrCisrc3RhdGljIGludCByc2FfcHJpbnR2ZXIoRklMRSAqb3V0LAorKwkJQklHTlVNICpu LCBCSUdOVU0gKmUsCisrCQljb25zdCBFVlBfTUQgKmRnc3QsCisrCQl1bnNpZ25lZCBjaGFyICpN c2csIGxvbmcgTXNnbGVuLAorKwkJdW5zaWduZWQgY2hhciAqUywgbG9uZyBTbGVuLCBpbnQgU2Fs dGxlbikKKysJeworKwlpbnQgcmV0ID0gMCwgcjsKKysJLyogU2V0dXAgUlNBIGFuZCBFVlBfUEtF WSBzdHJ1Y3R1cmVzICovCisrCVJTQSAqcnNhX3B1YmtleSA9IE5VTEw7CisrCUVWUF9QS0VZIHBr OworKwlFVlBfTURfQ1RYIGN0eDsKKysJdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKKysJcnNh X3B1YmtleSA9IEZJUFNfcnNhX25ldygpOworKwlpZiAoIXJzYV9wdWJrZXkpCisrCQlnb3RvIGVy cm9yOworKwlyc2FfcHVia2V5LT5uID0gQk5fZHVwKG4pOworKwlyc2FfcHVia2V5LT5lID0gQk5f ZHVwKGUpOworKwlpZiAoIXJzYV9wdWJrZXktPm4gfHwgIXJzYV9wdWJrZXktPmUpCisrCQlnb3Rv IGVycm9yOworKwlway50eXBlID0gRVZQX1BLRVlfUlNBOworKwlway5wa2V5LnJzYSA9IHJzYV9w dWJrZXk7CisrCisrCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKKysKKysJaWYgKFNhbHRsZW4gPj0g MCkKKysJCXsKKysJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwKKysJCQlFVlBfTURfQ1RY X0ZMQUdfUEFEX1BTUyB8IChTYWx0bGVuIDw8IDE2KSk7CisrCQl9CisrCWVsc2UgaWYgKFNhbHRs ZW4gPT0gLTIpCisrCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhfRkxB R19QQURfWDkzMSk7CisrCWlmICghRVZQX1ZlcmlmeUluaXRfZXgoJmN0eCwgZGdzdCwgTlVMTCkp CisrCQlnb3RvIGVycm9yOworKwlpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJmN0eCwgTXNnLCBNc2ds ZW4pKQorKwkJZ290byBlcnJvcjsKKysKKysJciA9IEVWUF9WZXJpZnlGaW5hbCgmY3R4LCBTLCBT bGVuLCAmcGspOworKworKworKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7CisrCisrCWlmIChy IDwgMCkKKysJCWdvdG8gZXJyb3I7CisrCUVSUl9jbGVhcl9lcnJvcigpOworKworKwlpZiAociA9 PSAwKQorKwkJZnB1dHMoIlJlc3VsdCA9IEZcbiIsIG91dCk7CisrCWVsc2UKKysJCWZwdXRzKCJS ZXN1bHQgPSBQXG4iLCBvdXQpOworKworKwlyZXQgPSAxOworKworKwllcnJvcjoKKysJaWYgKHJz YV9wdWJrZXkpCisrCQlGSVBTX3JzYV9mcmVlKHJzYV9wdWJrZXkpOworKwlpZiAoYnVmKQorKwkJ T1BFTlNTTF9mcmVlKGJ1Zik7CisrCisrCXJldHVybiByZXQ7CisrCX0KKysjZW5kaWYKK2RpZmYg LXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2NhdnMvZmlwc19z aGF0ZXN0LmMKKy0tLSAvZGV2L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0 LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMzg4IEBA CisrLyogZmlwc19zaGF0ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5z b24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0IDIwMDUu CisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5T U0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu IAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAg ZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50 aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNw bGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcv KSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wg UHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFj dAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAq ICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9y IHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoK KysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFp biB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAor KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NM Lm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNT TCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3Bl blNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcK KysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysg Ki8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVk ZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv Ym4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xf RklQUworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAgICBwcmlu dGYoIk5vIEZJUFMgU0hBWFhYIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKwor KyNlbHNlCisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrc3RhdGljIGludCBkZ3N0X3Rl c3QoRklMRSAqb3V0LCBGSUxFICppbik7Cisrc3RhdGljIGludCBwcmludF9kZ3N0KGNvbnN0IEVW UF9NRCAqbWQsIEZJTEUgKm91dCwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1zZ2xlbik7 Cisrc3RhdGljIGludCBwcmludF9tb250ZShjb25zdCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCisr CQl1bnNpZ25lZCBjaGFyICpTZWVkLCBpbnQgU2VlZExlbik7CisrCisraW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQorKwl7CisrCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7Cisr CisrCWludCByZXQgPSAxOworKworKwlpZighRklQU19tb2RlX3NldCgxKSkKKysJCXsKKysJCWRv X3ByaW50X2Vycm9ycygpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmIChhcmdjID09IDEp CisrCQlpbiA9IHN0ZGluOworKwllbHNlCisrCQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7Cisr CisrCWlmIChhcmdjIDwgMikKKysJCW91dCA9IHN0ZG91dDsKKysJZWxzZQorKwkJb3V0ID0gZm9w ZW4oYXJndlsyXSwgInciKTsKKysKKysJaWYgKCFpbikKKysJCXsKKysJCWZwcmludGYoc3RkZXJy LCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7Cisr CQl9CisrCisrCWlmICghb3V0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBvdXRw dXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlm ICghZGdzdF90ZXN0KG91dCwgaW4pKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBk aWdlc3QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKwll bHNlCisrCQlyZXQgPSAwOworKworKwllbmQ6CisrCisrCWlmIChyZXQpCisrCQlkb19wcmludF9l cnJvcnMoKTsKKysKKysJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCisrCQlmY2xvc2UoaW4pOwor KwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKKysJCWZjbG9zZShvdXQpOworKworKwlyZXR1 cm4gcmV0OworKworKwl9CisrCisrI2RlZmluZSBTSEFfVEVTVF9NQVhfQklUUwkxMDI0MDAKKysj ZGVmaW5lIFNIQV9URVNUX01BWExJTkVMRU4JKCgoU0hBX1RFU1RfTUFYX0JJVFMgPj4gMykgKiAy KSArIDEwMCkKKysKKytpbnQgZGdzdF90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pCisrCXsKKysJ Y29uc3QgRVZQX01EICptZCA9IE5VTEw7CisrCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAs ICpxOworKwljaGFyICprZXl3b3JkLCAqdmFsdWU7CisrCXVuc2lnbmVkIGNoYXIgKk1zZyA9IE5V TEwsICpTZWVkID0gTlVMTDsKKysJbG9uZyBNc2dMZW4gPSAtMSwgTGVuID0gLTEsIFNlZWRMZW4g PSAtMTsKKysJaW50IHJldCA9IDA7CisrCWludCBsbnVtID0gMDsKKysKKysJb2xpbmVidWYgPSBP UEVOU1NMX21hbGxvYyhTSEFfVEVTVF9NQVhMSU5FTEVOKTsKKysJbGluZWJ1ZiA9IE9QRU5TU0xf bWFsbG9jKFNIQV9URVNUX01BWExJTkVMRU4pOworKworKwlpZiAoIWxpbmVidWYgfHwgIW9saW5l YnVmKQorKwkJZ290byBlcnJvcjsKKysKKysKKysJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBTSEFf VEVTVF9NQVhMSU5FTEVOLCBpbikpCisrCQl7CisrCQlsbnVtKys7CisrCQlzdHJjcHkobGluZWJ1 Ziwgb2xpbmVidWYpOworKwkJa2V5d29yZCA9IGxpbmVidWY7CisrCQkvKiBTa2lwIGxlYWRpbmcg c3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKKysJ CQlrZXl3b3JkKys7CisrCisrCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KKysJCXAgPSBzdHJjaHIo bGluZWJ1ZiwgJz0nKTsKKysKKysJCS8qIElmIG5vID0gb3Igc3RhcnRzIHdpdGggWyAoZm9yIFtM PTIwXSBsaW5lKSBqdXN0IGNvcHkgKi8KKysJCWlmICghcCkKKysJCQl7CisrCQkJZnB1dHMob2xp bmVidWYsIG91dCk7CisrCQkJY29udGludWU7CisrCQkJfQorKworKwkJcSA9IHAgLSAxOworKwor KwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWdu ZWQgY2hhcikqcSkpCisrCQkJKnEtLSA9IDA7CisrCisrCQkqcCA9IDA7CisrCQl2YWx1ZSA9IHAg KyAxOworKworKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJd2hp bGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKKysJCQl2YWx1ZSsrOworKworKwkJ LyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXAgPSB2YWx1ZSArIHN0 cmxlbih2YWx1ZSkgLSAxOworKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWdu ZWQgY2hhcikqcCkpCisrCQkJKnAtLSA9IDA7CisrCisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCJb TCIpICYmICpwPT0nXScpCisrCQkJeworKwkJCXN3aXRjaCAoYXRvaSh2YWx1ZSkpCisrCQkJCXsK KysJCQkJY2FzZSAyMDogbWQ9RVZQX3NoYTEoKTsgICBicmVhazsKKysJCQkJY2FzZSAyODogbWQ9 RVZQX3NoYTIyNCgpOyBicmVhazsKKysJCQkJY2FzZSAzMjogbWQ9RVZQX3NoYTI1NigpOyBicmVh azsKKysJCQkJY2FzZSA0ODogbWQ9RVZQX3NoYTM4NCgpOyBicmVhazsKKysJCQkJY2FzZSA2NDog bWQ9RVZQX3NoYTUxMigpOyBicmVhazsKKysJCQkJZGVmYXVsdDogZ290byBwYXJzZV9lcnJvcjsK KysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIkxlbiIpKQorKwkJ CXsKKysJCQlpZiAoTGVuICE9IC0xKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCUxlbiA9 IGF0b2kodmFsdWUpOworKwkJCWlmIChMZW4gPCAwKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwor KwkJCS8qIE9ubHkgaGFuZGxlIG11bHRpcGxlcyBvZiA4IGJpdHMgKi8KKysJCQlpZiAoTGVuICYg MHg3KQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCWlmIChMZW4gPiBTSEFfVEVTVF9NQVhf QklUUykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlNc2dMZW4gPSBMZW4gPj4gMzsKKysJ CQl9CisrCisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJNc2ciKSkKKysJCQl7CisrCQkJ bG9uZyB0bXBsZW47CisrCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkqKC0tdmFsdWUp ID0gJzAnOworKwkJCWlmIChNc2cpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJTXNnID0g aGV4MmJpbl9tKHZhbHVlLCAmdG1wbGVuKTsKKysJCQlpZiAoIU1zZykKKysJCQkJZ290byBwYXJz ZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJTZWVkIikpCisr CQkJeworKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKKysJCQkJKigtLXZhbHVlKSA9ICcwJzsK KysJCQlpZiAoU2VlZCkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlTZWVkID0gaGV4MmJp bl9tKHZhbHVlLCAmU2VlZExlbik7CisrCQkJaWYgKCFTZWVkKQorKwkJCQlnb3RvIHBhcnNlX2Vy cm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1EIikpCisrCQkJY29u dGludWU7CisrCQllbHNlCisrCQkJZ290byBwYXJzZV9lcnJvcjsKKysKKysJCWZwdXRzKG9saW5l YnVmLCBvdXQpOworKworKwkJaWYgKG1kICYmIE1zZyAmJiAoTXNnTGVuID49IDApKQorKwkJCXsK KysJCQlpZiAoIXByaW50X2Rnc3QobWQsIG91dCwgTXNnLCBNc2dMZW4pKQorKwkJCQlnb3RvIGVy cm9yOworKwkJCU9QRU5TU0xfZnJlZShNc2cpOworKwkJCU1zZyA9IE5VTEw7CisrCQkJTXNnTGVu ID0gLTE7CisrCQkJTGVuID0gLTE7CisrCQkJfQorKwkJZWxzZSBpZiAobWQgJiYgU2VlZCAmJiAo U2VlZExlbiA+IDApKQorKwkJCXsKKysJCQlpZiAoIXByaW50X21vbnRlKG1kLCBvdXQsIFNlZWQs IFNlZWRMZW4pKQorKwkJCQlnb3RvIGVycm9yOworKwkJCU9QRU5TU0xfZnJlZShTZWVkKTsKKysJ CQlTZWVkID0gTlVMTDsKKysJCQlTZWVkTGVuID0gLTE7CisrCQkJfQorKwkKKysKKysJCX0KKysK KysKKysJcmV0ID0gMTsKKysKKysKKysJZXJyb3I6CisrCisrCWlmIChvbGluZWJ1ZikKKysJCU9Q RU5TU0xfZnJlZShvbGluZWJ1Zik7CisrCWlmIChsaW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKGxp bmVidWYpOworKwlpZiAoTXNnKQorKwkJT1BFTlNTTF9mcmVlKE1zZyk7CisrCWlmIChTZWVkKQor KwkJT1BFTlNTTF9mcmVlKFNlZWQpOworKworKwlyZXR1cm4gcmV0OworKworKwlwYXJzZV9lcnJv cjoKKysKKysJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxp bmUgJWRcbiIsIGxudW0pOworKworKwlnb3RvIGVycm9yOworKworKwl9CisrCisrc3RhdGljIGlu dCBwcmludF9kZ3N0KGNvbnN0IEVWUF9NRCAqZW1kLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBj aGFyICpNc2csIGludCBNc2dsZW4pCisrCXsKKysJaW50IGksIG1kbGVuOworKwl1bnNpZ25lZCBj aGFyIG1kW0VWUF9NQVhfTURfU0laRV07CisrCWlmICghRVZQX0RpZ2VzdChNc2csIE1zZ2xlbiwg bWQsICh1bnNpZ25lZCBpbnQgKikmbWRsZW4sIGVtZCwgTlVMTCkpCisrCQl7CisrCQlmcHV0cygi RXJyb3IgY2FsY3VsYXRpbmcgSEFTSFxuIiwgc3RkZXJyKTsKKysJCXJldHVybiAwOworKwkJfQor KwlmcHV0cygiTUQgPSAiLCBvdXQpOworKwlmb3IgKGkgPSAwOyBpIDwgbWRsZW47IGkrKykKKysJ CWZwcmludGYob3V0LCAiJTAyeCIsIG1kW2ldKTsKKysJZnB1dHMoIlxuIiwgb3V0KTsKKysJcmV0 dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IHByaW50X21vbnRlKGNvbnN0IEVWUF9NRCAqbWQs IEZJTEUgKm91dCwKKysJCXVuc2lnbmVkIGNoYXIgKlNlZWQsIGludCBTZWVkTGVuKQorKwl7Cisr CXVuc2lnbmVkIGludCBpLCBqLCBrOworKwlpbnQgcmV0ID0gMDsKKysJRVZQX01EX0NUWCBjdHg7 CisrCXVuc2lnbmVkIGNoYXIgKm0xLCAqbTIsICptMywgKnA7CisrCXVuc2lnbmVkIGludCBtbGVu LCBtMWxlbiwgbTJsZW4sIG0zbGVuOworKworKwlFVlBfTURfQ1RYX2luaXQoJmN0eCk7CisrCisr CWlmIChTZWVkTGVuID4gRVZQX01BWF9NRF9TSVpFKQorKwkJbWxlbiA9IFNlZWRMZW47CisrCWVs c2UKKysJCW1sZW4gPSBFVlBfTUFYX01EX1NJWkU7CisrCisrCW0xID0gT1BFTlNTTF9tYWxsb2Mo bWxlbik7CisrCW0yID0gT1BFTlNTTF9tYWxsb2MobWxlbik7CisrCW0zID0gT1BFTlNTTF9tYWxs b2MobWxlbik7CisrCisrCWlmICghbTEgfHwgIW0yIHx8ICFtMykKKysJCWdvdG8gbWNfZXJyb3I7 CisrCisrCW0xbGVuID0gbTJsZW4gPSBtM2xlbiA9IFNlZWRMZW47CisrCW1lbWNweShtMSwgU2Vl ZCwgU2VlZExlbik7CisrCW1lbWNweShtMiwgU2VlZCwgU2VlZExlbik7CisrCW1lbWNweShtMywg U2VlZCwgU2VlZExlbik7CisrCisrCWZwdXRzKCJcbiIsIG91dCk7CisrCisrCWZvciAoaiA9IDA7 IGogPCAxMDA7IGorKykKKysJCXsKKysJCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspCisrCQkJ eworKwkJCUVWUF9EaWdlc3RJbml0X2V4KCZjdHgsIG1kLCBOVUxMKTsKKysJCQlFVlBfRGlnZXN0 VXBkYXRlKCZjdHgsIG0xLCBtMWxlbik7CisrCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMiwg bTJsZW4pOworKwkJCUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgbTMsIG0zbGVuKTsKKysJCQlwID0g bTE7CisrCQkJbTEgPSBtMjsKKysJCQltMWxlbiA9IG0ybGVuOworKwkJCW0yID0gbTM7CisrCQkJ bTJsZW4gPSBtM2xlbjsKKysJCQltMyA9IHA7CisrCQkJRVZQX0RpZ2VzdEZpbmFsX2V4KCZjdHgs IG0zLCAmbTNsZW4pOworKwkJCX0KKysJCWZwcmludGYob3V0LCAiQ09VTlQgPSAlZFxuIiwgaik7 CisrCQlmcHV0cygiTUQgPSAiLCBvdXQpOworKwkJZm9yIChrID0gMDsgayA8IG0zbGVuOyBrKysp CisrCQkJZnByaW50ZihvdXQsICIlMDJ4IiwgbTNba10pOworKwkJZnB1dHMoIlxuXG4iLCBvdXQp OworKwkJbWVtY3B5KG0xLCBtMywgbTNsZW4pOworKwkJbWVtY3B5KG0yLCBtMywgbTNsZW4pOwor KwkJbTFsZW4gPSBtMmxlbiA9IG0zbGVuOworKwkJfQorKworKwlyZXQgPSAxOworKworKwltY19l cnJvcjoKKysJaWYgKG0xKQorKwkJT1BFTlNTTF9mcmVlKG0xKTsKKysJaWYgKG0yKQorKwkJT1BF TlNTTF9mcmVlKG0yKTsKKysJaWYgKG0zKQorKwkJT1BFTlNTTF9mcmVlKG0zKTsKKysKKysJRVZQ X01EX0NUWF9jbGVhbnVwKCZjdHgpOworKworKwlyZXR1cm4gcmV0OworKwl9CisrCisrI2VuZGlm CitkaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfdXRsLmgKKy0tLSAvZGV2L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwu aAkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwzNDMgQEAK KysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoK KysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmli dXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAq CisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0 IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICog ICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAg bm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAq IDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRo ZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBS T0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisr ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NM IFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKyt2b2lkIGRvX3ByaW50X2Vycm9ycyh2b2lk KQorKwl7CisrCWNvbnN0IGNoYXIgKmZpbGUsICpkYXRhOworKwlpbnQgbGluZSwgZmxhZ3M7Cisr CXVuc2lnbmVkIGxvbmcgbDsKKysJd2hpbGUgKChsID0gRVJSX2dldF9lcnJvcl9saW5lX2RhdGEo JmZpbGUsICZsaW5lLCAmZGF0YSwgJmZsYWdzKSkpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwg IkVSUk9SOiVseDpsaWI9JWQsZnVuYz0lZCxyZWFzb249JWQiCisrCQkJCSI6ZmlsZT0lczpsaW5l PSVkOiVzXG4iLAorKwkJCWwsIEVSUl9HRVRfTElCKGwpLCBFUlJfR0VUX0ZVTkMobCksIEVSUl9H RVRfUkVBU09OKGwpLAorKwkJCWZpbGUsIGxpbmUsIGZsYWdzICYgRVJSX1RYVF9TVFJJTkcgPyBk YXRhIDogIiIpOworKwkJfQorKwl9CisrCisraW50IGhleDJiaW4oY29uc3QgY2hhciAqaW4sIHVu c2lnbmVkIGNoYXIgKm91dCkKKysgICAgeworKyAgICBpbnQgbjEsIG4yOworKyAgICB1bnNpZ25l ZCBjaGFyIGNoOworKworKyAgICBmb3IgKG4xPTAsbjI9MCA7IGluW24xXSAmJiBpbltuMV0gIT0g J1xuJyA7ICkKKysJeyAvKiBmaXJzdCBieXRlICovCisrCWlmICgoaW5bbjFdID49ICcwJykgJiYg KGluW24xXSA8PSAnOScpKQorKwkgICAgY2ggPSBpbltuMSsrXSAtICcwJzsKKysJZWxzZSBpZiAo KGluW24xXSA+PSAnQScpICYmIChpbltuMV0gPD0gJ0YnKSkKKysJICAgIGNoID0gaW5bbjErK10g LSAnQScgKyAxMDsKKysJZWxzZSBpZiAoKGluW24xXSA+PSAnYScpICYmIChpbltuMV0gPD0gJ2Yn KSkKKysJICAgIGNoID0gaW5bbjErK10gLSAnYScgKyAxMDsKKysJZWxzZQorKwkgICAgcmV0dXJu IC0xOworKwlpZighaW5bbjFdKQorKwkgICAgeworKwkgICAgb3V0W24yKytdPWNoOworKwkgICAg YnJlYWs7CisrCSAgICB9CisrCW91dFtuMl0gPSBjaCA8PCA0OworKwkvKiBzZWNvbmQgYnl0ZSAq LworKwlpZiAoKGluW24xXSA+PSAnMCcpICYmIChpbltuMV0gPD0gJzknKSkKKysJICAgIGNoID0g aW5bbjErK10gLSAnMCc7CisrCWVsc2UgaWYgKChpbltuMV0gPj0gJ0EnKSAmJiAoaW5bbjFdIDw9 ICdGJykpCisrCSAgICBjaCA9IGluW24xKytdIC0gJ0EnICsgMTA7CisrCWVsc2UgaWYgKChpbltu MV0gPj0gJ2EnKSAmJiAoaW5bbjFdIDw9ICdmJykpCisrCSAgICBjaCA9IGluW24xKytdIC0gJ2En ICsgMTA7CisrCWVsc2UKKysJICAgIHJldHVybiAtMTsKKysJb3V0W24yKytdIHw9IGNoOworKwl9 CisrICAgIHJldHVybiBuMjsKKysgICAgfQorKworK3Vuc2lnbmVkIGNoYXIgKmhleDJiaW5fbShj b25zdCBjaGFyICppbiwgbG9uZyAqcGxlbikKKysJeworKwl1bnNpZ25lZCBjaGFyICpwOworKwlw ID0gT1BFTlNTTF9tYWxsb2MoKHN0cmxlbihpbikgKyAxKS8yKTsKKysJKnBsZW4gPSBoZXgyYmlu KGluLCBwKTsKKysJcmV0dXJuIHA7CisrCX0KKysKKytpbnQgZG9faGV4MmJuKEJJR05VTSAqKnBy LCBjb25zdCBjaGFyICppbikKKysJeworKwl1bnNpZ25lZCBjaGFyICpwOworKwlsb25nIHBsZW47 CisrCWludCByID0gMDsKKysJcCA9IGhleDJiaW5fbShpbiwgJnBsZW4pOworKwlpZiAoIXApCisr CQlyZXR1cm4gMDsKKysJaWYgKCEqcHIpCisrCQkqcHIgPSBCTl9uZXcoKTsKKysJaWYgKCEqcHIp CisrCQlyZXR1cm4gMDsKKysJaWYgKEJOX2JpbjJibihwLCBwbGVuLCAqcHIpKQorKwkJciA9IDE7 CisrCU9QRU5TU0xfZnJlZShwKTsKKysJcmV0dXJuIHI7CisrCX0KKysKKytpbnQgZG9fYm5fcHJp bnQoRklMRSAqb3V0LCBCSUdOVU0gKmJuKQorKwl7CisrCWludCBsZW4sIGk7CisrCXVuc2lnbmVk IGNoYXIgKnRtcDsKKysJbGVuID0gQk5fbnVtX2J5dGVzKGJuKTsKKysJaWYgKGxlbiA9PSAwKQor KwkJeworKwkJZnB1dHMoIjAwIiwgb3V0KTsKKysJCXJldHVybiAxOworKwkJfQorKworKwl0bXAg PSBPUEVOU1NMX21hbGxvYyhsZW4pOworKwlpZiAoIXRtcCkKKysJCXsKKysJCWZwcmludGYoc3Rk ZXJyLCAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOworKwkJcmV0dXJuIDA7CisrCQl9Cisr CUJOX2JuMmJpbihibiwgdG1wKTsKKysJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorKwkJZnBy aW50ZihvdXQsICIlMDJ4IiwgdG1wW2ldKTsKKysJT1BFTlNTTF9mcmVlKHRtcCk7CisrCXJldHVy biAxOworKwl9CisrCisraW50IGRvX2JuX3ByaW50X25hbWUoRklMRSAqb3V0LCBjb25zdCBjaGFy ICpuYW1lLCBCSUdOVU0gKmJuKQorKwl7CisrCWludCByOworKwlmcHJpbnRmKG91dCwgIiVzID0g IiwgbmFtZSk7CisrCXIgPSBkb19ibl9wcmludChvdXQsIGJuKTsKKysJaWYgKCFyKQorKwkJcmV0 dXJuIDA7CisrCWZwdXRzKCJcbiIsIG91dCk7CisrCXJldHVybiAxOworKwl9CisrCisraW50IHBh cnNlX2xpbmUoY2hhciAqKnBrdywgY2hhciAqKnB2YWwsIGNoYXIgKmxpbmVidWYsIGNoYXIgKm9s aW5lYnVmKQorKwl7CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZSwgKnAsICpxOworKwlzdHJjcHko bGluZWJ1Ziwgb2xpbmVidWYpOworKwlrZXl3b3JkID0gbGluZWJ1ZjsKKysJLyogU2tpcCBsZWFk aW5nIHNwYWNlICovCisrCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkK KysJCWtleXdvcmQrKzsKKysKKysJLyogTG9vayBmb3IgPSBzaWduICovCisrCXAgPSBzdHJjaHIo bGluZWJ1ZiwgJz0nKTsKKysKKysJLyogSWYgbm8gJz0nIGV4aXQgKi8KKysJaWYgKCFwKQorKwkJ cmV0dXJuIDA7CisrCisrCXEgPSBwIC0gMTsKKysKKysJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNl ICovCisrCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCSpxLS0gPSAwOwor KworKwkqcCA9IDA7CisrCXZhbHVlID0gcCArIDE7CisrCisrCS8qIFJlbW92ZSBsZWFkaW5nIHNw YWNlIGZyb20gdmFsdWUgKi8KKysJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVl KSkKKysJCXZhbHVlKys7CisrCisrCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVl ICovCisrCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKworKwl3aGlsZSAoKnAgPT0g J1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCSpwLS0gPSAwOworKworKwkq cGt3ID0ga2V5d29yZDsKKysJKnB2YWwgPSB2YWx1ZTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytC SUdOVU0gKmhleDJibihjb25zdCBjaGFyICppbikKKysgICAgeworKyAgICBCSUdOVU0gKnA9TlVM TDsKKysKKysgICAgaWYgKCFkb19oZXgyYm4oJnAsIGluKSkKKysJcmV0dXJuIE5VTEw7CisrCisr ICAgIHJldHVybiBwOworKyAgICB9CisrCisraW50IGJpbjJoZXgoY29uc3QgdW5zaWduZWQgY2hh ciAqaW4saW50IGxlbixjaGFyICpvdXQpCisrICAgIHsKKysgICAgaW50IG4xLCBuMjsKKysgICAg dW5zaWduZWQgY2hhciBjaDsKKysKKysgICAgZm9yIChuMT0wLG4yPTAgOyBuMSA8IGxlbiA7ICsr bjEpCisrCXsKKysJY2g9aW5bbjFdID4+IDQ7CisrCWlmIChjaCA8PSAweDA5KQorKwkgICAgb3V0 W24yKytdPWNoKycwJzsKKysJZWxzZQorKwkgICAgb3V0W24yKytdPWNoLTEwKydhJzsKKysJY2g9 aW5bbjFdICYgMHgwZjsKKysJaWYoY2ggPD0gMHgwOSkKKysJICAgIG91dFtuMisrXT1jaCsnMCc7 CisrCWVsc2UKKysJICAgIG91dFtuMisrXT1jaC0xMCsnYSc7CisrCX0KKysgICAgb3V0W24yXT0n XDAnOworKyAgICByZXR1cm4gbjI7CisrICAgIH0KKysKKyt2b2lkIHB2KGNvbnN0IGNoYXIgKnRh Zyxjb25zdCB1bnNpZ25lZCBjaGFyICp2YWwsaW50IGxlbikKKysgICAgeworKyAgICBjaGFyIG9i dWZbMjA0OF07CisrCisrICAgIGJpbjJoZXgodmFsLGxlbixvYnVmKTsKKysgICAgcHJpbnRmKCIl cyA9ICVzXG4iLHRhZyxvYnVmKTsKKysgICAgfQorKworKy8qIFRvIGF2b2lkIGV4dGVuc2l2ZSBj aGFuZ2VzIHRvIHRlc3QgcHJvZ3JhbSBhdCB0aGlzIHN0YWdlIGp1c3QgY29udmVydAorKyAqIHRo ZSBpbnB1dCBsaW5lIGludG8gYW4gYWNjZXB0YWJsZSBmb3JtLiBLZXl3b3JkIGxpbmVzIGNvbnZl cnRlZCB0byBmb3JtCisrICogImtleXdvcmQgPSB2YWx1ZVxuIiBubyBtYXR0ZXIgd2hhdCB3aGl0 ZSBzcGFjZSBwcmVzZW50LCBhbGwgb3RoZXIgbGluZXMKKysgKiBqdXN0IGhhdmUgbGVhZGluZyBh bmQgdHJhaWxpbmcgc3BhY2UgcmVtb3ZlZC4KKysgKi8KKysKKytpbnQgdGlkeV9saW5lKGNoYXIg KmxpbmVidWYsIGNoYXIgKm9saW5lYnVmKQorKwl7CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZSwg KnAsICpxOworKwlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwlrZXl3b3JkID0gbGluZWJ1 ZjsKKysJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisrCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25l ZCBjaGFyKSprZXl3b3JkKSkKKysJCWtleXdvcmQrKzsKKysJLyogTG9vayBmb3IgPSBzaWduICov CisrCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysKKysJLyogSWYgbm8gJz0nIGp1c3QgY2hv cCBsZWFkaW5nLCB0cmFpbGluZyB3cyAqLworKwlpZiAoIXApCisrCQl7CisrCQlwID0ga2V5d29y ZCArIHN0cmxlbihrZXl3b3JkKSAtIDE7CisrCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNl KCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkqcC0tID0gMDsKKysJCXN0cmNweShvbGluZWJ1Ziwg a2V5d29yZCk7CisrCQlzdHJjYXQob2xpbmVidWYsICJcbiIpOworKwkJcmV0dXJuIDE7CisrCQl9 CisrCisrCXEgPSBwIC0gMTsKKysKKysJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisrCXdo aWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCSpxLS0gPSAwOworKworKwkqcCA9 IDA7CisrCXZhbHVlID0gcCArIDE7CisrCisrCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20g dmFsdWUgKi8KKysJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKKysJCXZh bHVlKys7CisrCisrCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCXAg PSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKworKwl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBp c3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCSpwLS0gPSAwOworKworKwlzdHJjcHkob2xp bmVidWYsIGtleXdvcmQpOworKwlzdHJjYXQob2xpbmVidWYsICIgPSAiKTsKKysJc3RyY2F0KG9s aW5lYnVmLCB2YWx1ZSk7CisrCXN0cmNhdChvbGluZWJ1ZiwgIlxuIik7CisrCisrCXJldHVybiAx OworKwl9CisrCisrLyogTkI6IHRoaXMgcmV0dXJuIHRoZSBudW1iZXIgb2YgX2JpdHNfIHJlYWQg Ki8KKytpbnQgYmludDJiaW4oY29uc3QgY2hhciAqaW4sIGludCBsZW4sIHVuc2lnbmVkIGNoYXIg Km91dCkKKysgICAgeworKyAgICBpbnQgbjsKKysKKysgICAgbWVtc2V0KG91dCwwLGxlbik7Cisr ICAgIGZvcihuPTAgOyBuIDwgbGVuIDsgKytuKQorKwlpZihpbltuXSA9PSAnMScpCisrCSAgICBv dXRbbi84XXw9KDB4ODAgPj4gKG4lOCkpOworKyAgICByZXR1cm4gbGVuOworKyAgICB9CisrCisr aW50IGJpbjJiaW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLGludCBsZW4sY2hhciAqb3V0KQor KyAgICB7CisrICAgIGludCBuOworKworKyAgICBmb3Iobj0wIDsgbiA8IGxlbiA7ICsrbikKKysJ b3V0W25dPShpbltuLzhdJigweDgwID4+IChuJTgpKSkgPyAnMScgOiAnMCc7CisrICAgIHJldHVy biBuOworKyAgICB9CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSovCisrCisrdm9pZCBQcmludFZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hh ciAqdmFsLCBpbnQgbGVuKQorK3sKKysjaWYgVkVSQk9TRQorKyAgY2hhciBvYnVmWzIwNDhdOwor KyAgaW50IG9sZW47CisrICBvbGVuID0gYmluMmhleCh2YWwsIGxlbiwgb2J1Zik7CisrICBwcmlu dGYoIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsKKysjZW5kaWYKKyt9CisrCisrdm9p ZCBPdXRwdXRWYWx1ZShjaGFyICp0YWcsIHVuc2lnbmVkIGNoYXIgKnZhbCwgaW50IGxlbiwgRklM RSAqcmZwLGludCBiaXRtb2RlKQorKyAgICB7CisrICAgIGNoYXIgb2J1ZlsyMDQ4XTsKKysgICAg aW50IG9sZW47CisrCisrICAgIGlmKGJpdG1vZGUpCisrCW9sZW49YmluMmJpbnQodmFsLGxlbixv YnVmKTsKKysgICAgZWxzZQorKwlvbGVuPWJpbjJoZXgodmFsLGxlbixvYnVmKTsKKysKKysgICAg ZnByaW50ZihyZnAsICIlcyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7CisrI2lmIFZFUkJP U0UKKysgICAgcHJpbnRmKCIlcyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7CisrI2VuZGlm CisrICAgIH0KKysKK2RpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9maXBzX2Vyci5jCistLS0gL2Rldi9udWxsCTIwMDktMTEtMDQgMTI6MDA6NTguODAxMDAyMjc2 ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwc19lcnIuYwkyMDA5LTEx LTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSw3IEBACisrI2luY2x1ZGUg PG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrIyBpbmNs dWRlICJmaXBzX2Vyci5oIgorKyNlbHNlCisrc3RhdGljIHZvaWQgKmR1bW15PSZkdW1teTsKKysj ZW5kaWYKK2RpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBz X2Vyci5oCistLS0gL2Rldi9udWxsCTIwMDktMTEtMDQgMTI6MDA6NTguODAxMDAyMjc2ICswMTAw CisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwc19lcnIuaAkyMDA5LTExLTEyIDEy OjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxMzcgQEAKKysvKiBjcnlwdG8vZmlw c19lcnIuaCAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDcg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl CisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3Bl blNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQg Ik9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICog ICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVh c2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysg KiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5 IEVyaWMgWW91bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNv bSkuCisrICoKKysgKi8KKysKKysvKiBOT1RFOiB0aGlzIGZpbGUgd2FzIGF1dG8gZ2VuZXJhdGVk IGJ5IHRoZSBta2Vyci5wbCBzY3JpcHQ6IGFueSBjaGFuZ2VzCisrICogbWFkZSB0byBpdCB3aWxs IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBuZXh0IHVwZGF0ZXMgdGhpcyBmaWxlLAor KyAqIG9ubHkgcmVhc29uIHN0cmluZ3Mgd2lsbCBiZSBwcmVzZXJ2ZWQuCisrICovCisrCisrI2lu Y2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgorKworKy8qIEJFR0lOIEVSUk9SIENPREVTICovCisrI2lmbmRlZiBPUEVO U1NMX05PX0VSUgorKworKyNkZWZpbmUgRVJSX0ZVTkMoZnVuYykgRVJSX1BBQ0soRVJSX0xJQl9G SVBTLGZ1bmMsMCkKKysjZGVmaW5lIEVSUl9SRUFTT04ocmVhc29uKSBFUlJfUEFDSyhFUlJfTElC X0ZJUFMsMCxyZWFzb24pCisrCisrc3RhdGljIEVSUl9TVFJJTkdfREFUQSBGSVBTX3N0cl9mdW5j dHNbXT0KKysJeworK3tFUlJfRlVOQyhGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMpLAkiREhf QlVJTFRJTl9HRU5QQVJBTVMifSwKKyt7RVJSX0ZVTkMoRklQU19GX0RTQV9CVUlMVElOX1BBUkFN R0VOKSwJIkRTQV9CVUlMVElOX1BBUkFNR0VOIn0sCisre0VSUl9GVU5DKEZJUFNfRl9EU0FfRE9f U0lHTiksCSJEU0FfZG9fc2lnbiJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRFNBX0RPX1ZFUklGWSks CSJEU0FfZG9fdmVyaWZ5In0sCisre0VSUl9GVU5DKEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWCks CSJFVlBfQ2lwaGVySW5pdF9leCJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRVZQX0RJR0VTVElOSVRf RVgpLAkiRVZQX0RpZ2VzdEluaXRfZXgifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfQ0hFQ0tf RFNBKSwJIkZJUFNfQ0hFQ0tfRFNBIn0sCisre0VSUl9GVU5DKEZJUFNfRl9GSVBTX0NIRUNLX0lO Q09SRV9GSU5HRVJQUklOVCksCSJGSVBTX0NIRUNLX0lOQ09SRV9GSU5HRVJQUklOVCJ9LAorK3tF UlJfRlVOQyhGSVBTX0ZfRklQU19DSEVDS19SU0EpLAkiRklQU19DSEVDS19SU0EifSwKKyt7RVJS X0ZVTkMoRklQU19GX0ZJUFNfRFNBX0NIRUNLKSwJIkZJUFNfRFNBX0NIRUNLIn0sCisre0VSUl9G VU5DKEZJUFNfRl9GSVBTX01PREVfU0VUKSwJIkZJUFNfbW9kZV9zZXQifSwKKyt7RVJSX0ZVTkMo RklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVCksCSJmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3QifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTKSwJIkZJUFNfc2VsZnRl c3RfYWVzIn0sCisre0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0RFUyksCSJGSVBTX3Nl bGZ0ZXN0X2RlcyJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVTVF9EU0EpLAkiRklQ U19zZWxmdGVzdF9kc2EifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfSE1BQyks CSJGSVBTX3NlbGZ0ZXN0X2htYWMifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1Rf Uk5HKSwJIkZJUFNfc2VsZnRlc3Rfcm5nIn0sCisre0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZU RVNUX1NIQTEpLAkiRklQU19zZWxmdGVzdF9zaGExIn0sCisre0VSUl9GVU5DKEZJUFNfRl9IQVNI X0ZJTkFMKSwJIkhBU0hfRklOQUwifSwKKyt7RVJSX0ZVTkMoRklQU19GX1JTQV9CVUlMVElOX0tF WUdFTiksCSJSU0FfQlVJTFRJTl9LRVlHRU4ifSwKKyt7RVJSX0ZVTkMoRklQU19GX1JTQV9FQVlf UFJJVkFURV9ERUNSWVBUKSwJIlJTQV9FQVlfUFJJVkFURV9ERUNSWVBUIn0sCisre0VSUl9GVU5D KEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVCksCSJSU0FfRUFZX1BSSVZBVEVfRU5DUllQ VCJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVCksCSJSU0FfRUFZ X1BVQkxJQ19ERUNSWVBUIn0sCisre0VSUl9GVU5DKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19FTkNS WVBUKSwJIlJTQV9FQVlfUFVCTElDX0VOQ1JZUFQifSwKKyt7RVJSX0ZVTkMoRklQU19GX1JTQV9Y OTMxX0dFTkVSQVRFX0tFWV9FWCksCSJSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgifSwKKyt7RVJS X0ZVTkMoRklQU19GX1NTTEVBWV9SQU5EX0JZVEVTKSwJIlNTTEVBWV9SQU5EX0JZVEVTIn0sCisr ezAsTlVMTH0KKysJfTsKKysKKytzdGF0aWMgRVJSX1NUUklOR19EQVRBIEZJUFNfc3RyX3JlYXNv bnNbXT0KKysJeworK3tFUlJfUkVBU09OKEZJUFNfUl9DQU5OT1RfUkVBRF9FWEUpICAgICAgLCJj YW5ub3QgcmVhZCBleGUifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfQ0FOTk9UX1JFQURfRVhFX0RJ R0VTVCksImNhbm5vdCByZWFkIGV4ZSBkaWdlc3QifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfQ09O VFJBRElDVElOR19FVklERU5DRSksImNvbnRyYWRpY3RpbmcgZXZpZGVuY2UifSwKKyt7RVJSX1JF QVNPTihGSVBTX1JfRVhFX0RJR0VTVF9ET0VTX05PVF9NQVRDSCksImV4ZSBkaWdlc3QgZG9lcyBu b3QgbWF0Y2gifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFU Q0gpLCJmaW5nZXJwcmludCBkb2VzIG5vdCBtYXRjaCJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9G SU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSF9OT05QSUNfUkVMT0NBVEVEKSwiZmluZ2VycHJpbnQg ZG9lcyBub3QgbWF0Y2ggbm9ucGljIHJlbG9jYXRlZCJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9G SU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSF9TRUdNRU5UX0FMSUFTSU5HKSwiZmluZ2VycHJpbnQg ZG9lcyBub3QgbWF0Y2ggc2VnbWVudCBhbGlhc2luZyJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9G SVBTX01PREVfQUxSRUFEWV9TRVQpLCJmaXBzIG1vZGUgYWxyZWFkeSBzZXQifSwKKyt7RVJSX1JF QVNPTihGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpICwiZmlwcyBzZWxmdGVzdCBmYWlsZWQi fSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RIKSAgICwiaW52YWxpZCBr ZXkgbGVuZ3RoIn0sCisre0VSUl9SRUFTT04oRklQU19SX0tFWV9UT09fU0hPUlQpICAgICAgICAs ImtleSB0b28gc2hvcnQifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKSAg ICAgICwibm9uIGZpcHMgbWV0aG9kIn0sCisre0VSUl9SRUFTT04oRklQU19SX1BBSVJXSVNFX1RF U1RfRkFJTEVEKSAsInBhaXJ3aXNlIHRlc3QgZmFpbGVkIn0sCisre0VSUl9SRUFTT04oRklQU19S X1JTQV9ERUNSWVBUX0VSUk9SKSAgICAsInJzYSBkZWNyeXB0IGVycm9yIn0sCisre0VSUl9SRUFT T04oRklQU19SX1JTQV9FTkNSWVBUX0VSUk9SKSAgICAsInJzYSBlbmNyeXB0IGVycm9yIn0sCisr e0VSUl9SRUFTT04oRklQU19SX1NFTEZURVNUX0ZBSUxFRCkgICAgICAsInNlbGZ0ZXN0IGZhaWxl ZCJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9URVNUX0ZBSUxVUkUpICAgICAgICAgLCJ0ZXN0IGZh aWx1cmUifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfVU5TVVBQT1JURURfUExBVEZPUk0pICwidW5z dXBwb3J0ZWQgcGxhdGZvcm0ifSwKKyt7MCxOVUxMfQorKwl9OworKworKyNlbmRpZgorKworK3Zv aWQgRVJSX2xvYWRfRklQU19zdHJpbmdzKHZvaWQpCisrCXsKKysjaWZuZGVmIE9QRU5TU0xfTk9f RVJSCisrCisrCWlmIChFUlJfZnVuY19lcnJvcl9zdHJpbmcoRklQU19zdHJfZnVuY3RzWzBdLmVy cm9yKSA9PSBOVUxMKQorKwkJeworKwkJRVJSX2xvYWRfc3RyaW5ncygwLEZJUFNfc3RyX2Z1bmN0 cyk7CisrCQlFUlJfbG9hZF9zdHJpbmdzKDAsRklQU19zdHJfcmVhc29ucyk7CisrCQl9CisrI2Vu ZGlmCisrCX0KK2RpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9m aXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMKKy0tLSAvZGV2L251bGwJMjAwOS0xMS0wNCAxMjowMDo1 OC44MDEwMDIyNzYgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2Zp cHNfYWVzX3NlbGZ0ZXN0LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BA IC0wLDAgKzEsMTAxIEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl CisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQg Ik9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICog ICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVh c2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUg PHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrc3RhdGljIHN0cnVjdAorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5WzE2XTsK KysgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMTZdOworKyAgICB1bnNpZ25lZCBjaGFyIGNp cGhlcnRleHRbMTZdOworKyAgICB9IHRlc3RzW109CisrCXsKKysJeworKwl7IDB4MDAsMHgwMSww eDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywKKysJICAweDA4LDB4MDksMHgwQSwweDBCLDB4 MEMsMHgwRCwweDBFLDB4MEYgfSwKKysJeyAweDAwLDB4MTEsMHgyMiwweDMzLDB4NDQsMHg1NSww eDY2LDB4NzcsCisrCSAgMHg4OCwweDk5LDB4QUEsMHhCQiwweENDLDB4REQsMHhFRSwweEZGIH0s CisrCXsgMHg2OSwweEM0LDB4RTAsMHhEOCwweDZBLDB4N0IsMHgwNCwweDMwLAorKwkgIDB4RDgs MHhDRCwweEI3LDB4ODAsMHg3MCwweEI0LDB4QzUsMHg1QSB9LAorKwl9LAorKwl9OworKworK3Zv aWQgRklQU19jb3JydXB0X2FlcygpCisrICAgIHsKKysgICAgdGVzdHNbMF0ua2V5WzBdKys7Cisr ICAgIH0KKysKKytpbnQgRklQU19zZWxmdGVzdF9hZXMoKQorKyAgICB7CisrICAgIGludCBuOwor KyAgICBpbnQgcmV0ID0gMDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBfQ0lQ SEVSX0NUWF9pbml0KCZjdHgpOworKworKyAgICBmb3Iobj0wIDsgbiA8IDEgOyArK24pCisrCXsK KysJaWYgKGZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksCisrCQkJCXRl c3RzW25dLmtleSwgTlVMTCwKKysJCQkJdGVzdHNbbl0ucGxhaW50ZXh0LAorKwkJCQl0ZXN0c1tu XS5jaXBoZXJ0ZXh0LAorKwkJCQkxNikgPD0gMCkKKysJCWdvdG8gZXJyOworKwl9CisrICAgIHJl dCA9IDE7CisrICAgIGVycjoKKysgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysg ICAgaWYgKHJldCA9PSAwKQorKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVMs RklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgIHJldHVybiByZXQ7CisrICAgIH0KKysjZW5k aWYKK2RpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2Zp cHMuYworLS0tIC9kZXYvbnVsbAkyMDA5LTExLTA0IDEyOjAwOjU4LjgwMTAwMjI3NiArMDEwMAor KysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvZmlwcy5jCTIwMDktMTEtMTIgMTI6 MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDQxOSBAQAorKy8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz IHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1l dDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAq IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug b2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25v d2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFt ZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVz ZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9y IHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVA b3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NM IiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVy bWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRp b25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAq ICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycg QU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBE SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAq IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF UyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJ Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up CisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K KysgKgorKyAqLworKworKworKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9iaW8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvcnNhLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxsaW1pdHMu aD4KKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwor KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysKKysjaWZuZGVmIFBBVEhfTUFYCisrI2RlZmlu ZSBQQVRIX01BWCAxMDI0CisrI2VuZGlmCisrCisrc3RhdGljIGludCBmaXBzX3NlbGZ0ZXN0X2Zh aWw7Cisrc3RhdGljIGludCBmaXBzX21vZGU7Cisrc3RhdGljIGNvbnN0IHZvaWQgKmZpcHNfcmFu ZF9jaGVjazsKKysKKytzdGF0aWMgdm9pZCBmaXBzX3NldF9tb2RlKGludCBvbm9mZikKKysJewor KwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOworKworKwlpZiAo Zmlwc19pc19zdGFydGVkKCkpCisrCQl7CisrCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfd19s b2NrKCk7CisrCQlmaXBzX21vZGUgPSBvbm9mZjsKKysJCWlmICghb3duaW5nX3RocmVhZCkgZmlw c193X3VubG9jaygpOworKwkJfQorKwl9CisrCisrc3RhdGljIHZvaWQgZmlwc19zZXRfcmFuZF9j aGVjayhjb25zdCB2b2lkICpyYW5kX2NoZWNrKQorKwl7CisrCWludCBvd25pbmdfdGhyZWFkID0g Zmlwc19pc19vd25pbmdfdGhyZWFkKCk7CisrCisrCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKKysJ CXsKKysJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc193X2xvY2soKTsKKysJCWZpcHNfcmFuZF9j aGVjayA9IHJhbmRfY2hlY2s7CisrCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfd191bmxvY2so KTsKKysJCX0KKysJfQorKworK2ludCBGSVBTX21vZGUodm9pZCkKKysJeworKwlpbnQgcmV0ID0g MDsKKysJaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKKysKKysJ aWYgKGZpcHNfaXNfc3RhcnRlZCgpKQorKwkJeworKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBz X3JfbG9jaygpOworKwkJcmV0ID0gZmlwc19tb2RlOworKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBm aXBzX3JfdW5sb2NrKCk7CisrCQl9CisrCXJldHVybiByZXQ7CisrCX0KKysKKytjb25zdCB2b2lk ICpGSVBTX3JhbmRfY2hlY2sodm9pZCkKKysJeworKwljb25zdCB2b2lkICpyZXQgPSAwOworKwlp bnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOworKworKwlpZiAoZmlw c19pc19zdGFydGVkKCkpCisrCQl7CisrCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl9sb2Nr KCk7CisrCQlyZXQgPSBmaXBzX3JhbmRfY2hlY2s7CisrCQlpZiAoIW93bmluZ190aHJlYWQpIGZp cHNfcl91bmxvY2soKTsKKysJCX0KKysJcmV0dXJuIHJldDsKKysJfQorKworK2ludCBGSVBTX3Nl bGZ0ZXN0X2ZhaWxlZCh2b2lkKQorKyAgICB7CisrICAgIGludCByZXQgPSAwOworKyAgICBpZiAo Zmlwc19pc19zdGFydGVkKCkpCisrCXsKKysJaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293 bmluZ190aHJlYWQoKTsKKysKKysJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfbG9jaygpOwor KwlyZXQgPSBmaXBzX3NlbGZ0ZXN0X2ZhaWw7CisrCWlmICghb3duaW5nX3RocmVhZCkgZmlwc19y X3VubG9jaygpOworKwl9CisrICAgIHJldHVybiByZXQ7CisrICAgIH0KKysKKysvKiBTZWxmdGVz dCBmYWlsdXJlIGZhdGFsIGV4aXQgcm91dGluZS4gVGhpcyB3aWxsIGJlIGNhbGxlZAorKyAqIGR1 cmluZyAqYW55KiBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbi4gSXQgaGFzIHRoZSBtaW5pbXVtCisr ICogb3ZlcmhlYWQgcG9zc2libGUgdG8gYXZvaWQgdG9vIGJpZyBhIHBlcmZvcm1hbmNlIGhpdC4K KysgKi8KKysKKyt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2sodm9pZCkKKysgICAgeworKyAgICBp ZiAoZmlwc19zZWxmdGVzdF9mYWlsKQorKwl7CisrCU9wZW5TU0xEaWUoX19GSUxFX18sX19MSU5F X18sICJGQVRBTCBGSVBTIFNFTEZURVNUIEZBSUxVUkUiKTsKKysJfQorKyAgICB9CisrCisrdm9p ZCBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKHZvaWQpCisrICAgIHsKKysgICAgZmlwc19zZWxmdGVz dF9mYWlsID0gMTsKKysgICAgfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0KCkKKysgICAgeworKwor KyAgICByZXR1cm4gRklQU19zZWxmdGVzdF9zaGExKCkKKysJJiYgRklQU19zZWxmdGVzdF9obWFj KCkKKysJJiYgRklQU19zZWxmdGVzdF9hZXMoKQorKwkmJiBGSVBTX3NlbGZ0ZXN0X2RlcygpCisr CSYmIEZJUFNfc2VsZnRlc3RfcnNhKCkKKysJJiYgRklQU19zZWxmdGVzdF9kc2EoKTsKKysgICAg fQorKworK2ludCBGSVBTX21vZGVfc2V0KGludCBvbm9mZikKKysgICAgeworKyAgICBpbnQgZmlw c19zZXRfb3duaW5nX3RocmVhZCgpOworKyAgICBpbnQgZmlwc19jbGVhcl9vd25pbmdfdGhyZWFk KCk7CisrICAgIGludCByZXQgPSAwOworKworKyAgICBmaXBzX3dfbG9jaygpOworKyAgICBmaXBz X3NldF9zdGFydGVkKCk7CisrICAgIGZpcHNfc2V0X293bmluZ190aHJlYWQoKTsKKysKKysgICAg aWYob25vZmYpCisrCXsKKysJdW5zaWduZWQgY2hhciBidWZbNDhdOworKworKwlmaXBzX3NlbGZ0 ZXN0X2ZhaWwgPSAwOworKworKwkvKiBEb24ndCBnbyBpbnRvIEZJUFMgbW9kZSB0d2ljZSwganVz dCBzbyB3ZSBjYW4gZG8gYXV0b21hZ2ljCisrCSAgIHNlZWRpbmcgKi8KKysJaWYoRklQU19tb2Rl KCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX01PREVfU0VULEZJUFNfUl9G SVBTX01PREVfQUxSRUFEWV9TRVQpOworKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysJ ICAgIHJldCA9IDA7CisrCSAgICBnb3RvIGVuZDsKKysJICAgIH0KKysKKysjaWZkZWYgT1BFTlNT TF9JQTMyX1NTRTIKKysJaWYgKChPUEVOU1NMX2lhMzJjYXAgJiAoMTw8MjV8MTw8MjYpKSAhPSAo MTw8MjV8MTw8MjYpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RFX1NF VCxGSVBTX1JfVU5TVVBQT1JURURfUExBVEZPUk0pOworKwkgICAgZmlwc19zZWxmdGVzdF9mYWls ID0gMTsKKysJICAgIHJldCA9IDA7CisrCSAgICBnb3RvIGVuZDsKKysJICAgIH0KKysjZW5kaWYK KysKKysJLyogUGVyZm9ybSBSTkcgS0FUIGJlZm9yZSBzZWVkaW5nICovCisrCWlmICghRklQU19z ZWxmdGVzdF9ybmcoKSkKKysJICAgIHsKKysJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Cisr CSAgICByZXQgPSAwOworKwkgICAgZ290byBlbmQ7CisrCSAgICB9CisrCisrCS8qIGF1dG9tYWdp Y2FsbHkgc2VlZCBQUk5HIGlmIG5vdCBhbHJlYWR5IHNlZWRlZCAqLworKwlpZighRklQU19yYW5k X3N0YXR1cygpKQorKwkgICAgeworKwkgICAgaWYoUkFORF9ieXRlcyhidWYsc2l6ZW9mIGJ1Zikg PD0gMCkKKysJCXsKKysJCWZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrCQlyZXQgPSAwOworKwkJ Z290byBlbmQ7CisrCQl9CisrCSAgICBGSVBTX3JhbmRfc2V0X2tleShidWYsMzIpOworKwkgICAg RklQU19yYW5kX3NlZWQoYnVmKzMyLDE2KTsKKysJICAgIH0KKysKKysJLyogbm93IHN3aXRjaCBp bnRvIEZJUFMgbW9kZSAqLworKwlmaXBzX3NldF9yYW5kX2NoZWNrKEZJUFNfcmFuZF9tZXRob2Qo KSk7CisrCVJBTkRfc2V0X3JhbmRfbWV0aG9kKEZJUFNfcmFuZF9tZXRob2QoKSk7CisrCWlmKEZJ UFNfc2VsZnRlc3QoKSkKKysJICAgIGZpcHNfc2V0X21vZGUoMSk7CisrCWVsc2UKKysJICAgIHsK KysJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrCSAgICByZXQgPSAwOworKwkgICAgZ290 byBlbmQ7CisrCSAgICB9CisrCXJldCA9IDE7CisrCWdvdG8gZW5kOworKwl9CisrICAgIGZpcHNf c2V0X21vZGUoMCk7CisrICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDA7CisrICAgIHJldCA9IDE7 CisrZW5kOgorKyAgICBmaXBzX2NsZWFyX293bmluZ190aHJlYWQoKTsKKysgICAgZmlwc193X3Vu bG9jaygpOworKyAgICByZXR1cm4gcmV0OworKyAgICB9CisrCisrdm9pZCBmaXBzX3dfbG9jayh2 b2lkKQkJeyBDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0ZJUFMpOyB9Cisrdm9pZCBmaXBzX3df dW5sb2NrKHZvaWQpCXsgQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMpOyB9Cisrdm9p ZCBmaXBzX3JfbG9jayh2b2lkKQkJeyBDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX0ZJUFMpOyB9 Cisrdm9pZCBmaXBzX3JfdW5sb2NrKHZvaWQpCXsgQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NL X0ZJUFMpOyB9CisrCisrc3RhdGljIGludCBmaXBzX3N0YXJ0ZWQgPSAwOworK3N0YXRpYyB1bnNp Z25lZCBsb25nIGZpcHNfdGhyZWFkID0gMDsKKysKKyt2b2lkIGZpcHNfc2V0X3N0YXJ0ZWQodm9p ZCkKKysJeworKwlmaXBzX3N0YXJ0ZWQgPSAxOworKwl9CisrCisraW50IGZpcHNfaXNfc3RhcnRl ZCh2b2lkKQorKwl7CisrCXJldHVybiBmaXBzX3N0YXJ0ZWQ7CisrCX0KKysKKytpbnQgZmlwc19p c19vd25pbmdfdGhyZWFkKHZvaWQpCisrCXsKKysJaW50IHJldCA9IDA7CisrCisrCWlmIChmaXBz X2lzX3N0YXJ0ZWQoKSkKKysJCXsKKysJCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIp OworKwkJaWYgKGZpcHNfdGhyZWFkICE9IDAgJiYgZmlwc190aHJlYWQgPT0gQ1JZUFRPX3RocmVh ZF9pZCgpKQorKwkJCXJldCA9IDE7CisrCQlDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfRklQ UzIpOworKwkJfQorKwlyZXR1cm4gcmV0OworKwl9CisrCisraW50IGZpcHNfc2V0X293bmluZ190 aHJlYWQodm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysKKysJaWYgKGZpcHNfaXNfc3RhcnRl ZCgpKQorKwkJeworKwkJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrCQlpZiAo Zmlwc190aHJlYWQgPT0gMCkKKysJCQl7CisrCQkJZmlwc190aHJlYWQgPSBDUllQVE9fdGhyZWFk X2lkKCk7CisrCQkJcmV0ID0gMTsKKysJCQl9CisrCQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xP Q0tfRklQUzIpOworKwkJfQorKwlyZXR1cm4gcmV0OworKwl9CisrCisraW50IGZpcHNfY2xlYXJf b3duaW5nX3RocmVhZCh2b2lkKQorKwl7CisrCWludCByZXQgPSAwOworKworKwlpZiAoZmlwc19p c19zdGFydGVkKCkpCisrCQl7CisrCQlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsK KysJCWlmIChmaXBzX3RocmVhZCA9PSBDUllQVE9fdGhyZWFkX2lkKCkpCisrCQkJeworKwkJCWZp cHNfdGhyZWFkID0gMDsKKysJCQlyZXQgPSAxOworKwkJCX0KKysJCUNSWVBUT193X3VubG9jayhD UllQVE9fTE9DS19GSVBTMik7CisrCQl9CisrCXJldHVybiByZXQ7CisrCX0KKysKKysvKiBHZW5l cmFsaXplZCBwdWJsaWMga2V5IHRlc3Qgcm91dGluZS4gU2lnbnMgYW5kIHZlcmlmaWVzIHRoZSBk YXRhCisrICogc3VwcGxpZWQgaW4gdGJzIHVzaW5nIG1lc2FnZSBkaWdlc3QgbWQgYW5kIHNldHRp bmcgb3B0aW9uIGRpZ2VzdAorKyAqIGZsYWdzIG1kX2ZsYWdzLiBJZiB0aGUgJ2thdCcgcGFyYW1l dGVyIGlzIG5vdCBOVUxMIGl0IHdpbGwKKysgKiBhZGRpdGlvbmFsbHkgY2hlY2sgdGhlIHNpZ25h dHVyZSBtYXRjaGVzIGl0OiBhIGtub3duIGFuc3dlciB0ZXN0CisrICogVGhlIHN0cmluZyAiZmFp bF9zdHIiIGlzIHVzZWQgZm9yIGlkZW50aWZpY2F0aW9uIHB1cnBvc2VzIGluIGNhc2UKKysgKiBv ZiBmYWlsdXJlLgorKyAqLworKworK2ludCBmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QoRVZQX1BL RVkgKnBrZXksCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBpbnQgdGJzbGVuLAorKwkJ CWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdCwgdW5zaWduZWQgaW50IGthdGxlbiwKKysJCQljb25z dCBFVlBfTUQgKmRpZ2VzdCwgdW5zaWduZWQgaW50IG1kX2ZsYWdzLAorKwkJCWNvbnN0IGNoYXIg KmZhaWxfc3RyKQorKwl7CQorKwlpbnQgcmV0ID0gMDsKKysJdW5zaWduZWQgY2hhciBzaWd0bXBb MjU2XSwgKnNpZyA9IHNpZ3RtcDsKKysJdW5zaWduZWQgaW50IHNpZ2xlbjsKKysJRVZQX01EX0NU WCBtY3R4OworKwlFVlBfTURfQ1RYX2luaXQoJm1jdHgpOworKworKwlpZiAoKHBrZXktPnR5cGUg PT0gRVZQX1BLRVlfUlNBKQorKwkJJiYgKFJTQV9zaXplKHBrZXktPnBrZXkucnNhKSA+IHNpemVv ZihzaWd0bXApKSkKKysJCXsKKysJCXNpZyA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHBrZXkt PnBrZXkucnNhKSk7CisrCQlpZiAoIXNpZykKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfRklQ U19QS0VZX1NJR05BVFVSRV9URVNULEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKysJCQlyZXR1cm4g MDsKKysJCQl9CisrCQl9CisrCisrCWlmICh0YnNsZW4gPT0gLTEpCisrCQl0YnNsZW4gPSBzdHJs ZW4oKGNoYXIgKil0YnMpOworKworKwlpZiAobWRfZmxhZ3MpCisrCQlFVlBfTURfQ1RYX3NldF9m bGFncygmbWN0eCwgbWRfZmxhZ3MpOworKworKwlpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwg ZGlnZXN0LCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1NpZ25VcGRhdGUoJm1j dHgsIHRicywgdGJzbGVuKSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1NpZ25GaW5hbCgm bWN0eCwgc2lnLCAmc2lnbGVuLCBwa2V5KSkKKysJCWdvdG8gZXJyb3I7CisrCisrCWlmIChrYXQg JiYgKChzaWdsZW4gIT0ga2F0bGVuKSB8fCBtZW1jbXAoa2F0LCBzaWcsIGthdGxlbikpKQorKwkJ Z290byBlcnJvcjsKKysKKysJaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgZGlnZXN0LCBO VUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgdGJz LCB0YnNsZW4pKQorKwkJZ290byBlcnJvcjsKKysJcmV0ID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4 LCBzaWcsIHNpZ2xlbiwgcGtleSk7CisrCisrCWVycm9yOgorKwlpZiAoc2lnICE9IHNpZ3RtcCkK KysJCU9QRU5TU0xfZnJlZShzaWcpOworKwlFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOworKwlp ZiAocmV0ICE9IDEpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJF X1RFU1QsRklQU19SX1RFU1RfRkFJTFVSRSk7CisrCQlpZiAoZmFpbF9zdHIpCisrCQkJRVJSX2Fk ZF9lcnJvcl9kYXRhKDIsICJUeXBlPSIsIGZhaWxfc3RyKTsKKysJCXJldHVybiAwOworKwkJfQor KwlyZXR1cm4gMTsKKysJfQorKworKy8qIEdlbmVyYWxpemVkIHN5bW1ldHJpYyBjaXBoZXIgdGVz dCByb3V0aW5lLiBFbmNyeXB0IGRhdGEsIHZlcmlmeSByZXN1bHQKKysgKiBhZ2FpbnN0IGtub3du IGFuc3dlciwgZGVjcnlwdCBhbmQgY29tcGFyZSB3aXRoIG9yaWdpbmFsIHBsYWludGV4dC4KKysg Ki8KKysKKytpbnQgZmlwc19jaXBoZXJfdGVzdChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCBF VlBfQ0lQSEVSICpjaXBoZXIsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorKwkJCWNv bnN0IHVuc2lnbmVkIGNoYXIgKml2LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4 dCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0LAorKwkJCWludCBsZW4pCisr CXsKKysJdW5zaWduZWQgY2hhciBwbHRtcFtGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFXTsKKysJ dW5zaWduZWQgY2hhciBjaXRtcFtGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFXTsKKysJT1BFTlNT TF9hc3NlcnQobGVuIDw9IEZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkUpOworKwlpZiAoRVZQX0Np cGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGtleSwgaXYsIDEpIDw9IDApCisrCQlyZXR1 cm4gMDsKKysJRVZQX0NpcGhlcihjdHgsIGNpdG1wLCBwbGFpbnRleHQsIGxlbik7CisrCWlmICht ZW1jbXAoY2l0bXAsIGNpcGhlcnRleHQsIGxlbikpCisrCQlyZXR1cm4gMDsKKysJaWYgKEVWUF9D aXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBrZXksIGl2LCAwKSA8PSAwKQorKwkJcmV0 dXJuIDA7CisrCUVWUF9DaXBoZXIoY3R4LCBwbHRtcCwgY2l0bXAsIGxlbik7CisrCWlmIChtZW1j bXAocGx0bXAsIHBsYWludGV4dCwgbGVuKSkKKysJCXJldHVybiAwOworKwlyZXR1cm4gMTsKKysJ fQorKworKyNpZiAwCisrLyogVGhlIHB1cnBvc2Ugb2YgdGhpcyBpcyB0byBlbnN1cmUgdGhlIGVy cm9yIGNvZGUgZXhpc3RzIGFuZCB0aGUgZnVuY3Rpb24KKysgKiBuYW1lIGlzIHRvIGtlZXAgdGhl IGVycm9yIGNoZWNraW5nIHNjcmlwdCBxdWlldAorKyAqLworK3ZvaWQgaGFzaF9maW5hbCh2b2lk KQorKwl7CisrCUZJUFNlcnIoRklQU19GX0hBU0hfRklOQUwsRklQU19SX05PTl9GSVBTX01FVEhP RCk7CisrCX0KKysjZW5kaWYKKysKKysKKysjZW5kaWYKK2RpZmYgLXVwIC9kZXYvbnVsbCBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMKKy0tLSAvZGV2 L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMJMjAwOS0xMS0xMiAxMjoz Njo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMTM3IEBACisrLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0 OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK KysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICog My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1l cyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNl ZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBv cGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wi IGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJt aXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlv bnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICog ICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBB TkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICog SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ REVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT IChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK KysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor KyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysKKytzdGF0aWMgc3RydWN0CisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBrZXlb MTZdOworKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsKKysgICAgdW5zaWduZWQgY2hh ciBjaXBoZXJ0ZXh0WzhdOworKyAgICB9IHRlc3RzMltdPQorKwl7CisrCXsKKysJeyAweDdjLDB4 NGYsMHg2ZSwweGY3LDB4YTIsMHgwNCwweDE2LDB4ZWMsCisrCSAgMHgwYiwweDZiLDB4N2MsMHg5 ZSwweDVlLDB4MTksMHhhNywweGM0IH0sCisrCXsgMHgwNiwweGE3LDB4ZDgsMHg3OSwweGFhLDB4 Y2UsMHg2OSwweGVmIH0sCisrCXsgMHg0YywweDExLDB4MTcsMHg1NSwweGJmLDB4YzQsMHg0ZSww eGZkIH0KKysJfSwKKysJeworKwl7IDB4NWQsMHg5ZSwweDAxLDB4ZDMsMHgyNSwweGM3LDB4M2Us MHgzNCwKKysJICAweDAxLDB4MTYsMHg3YywweDg1LDB4MjMsMHhkZiwweGUwLDB4NjggfSwKKysJ eyAweDljLDB4NTAsMHgwOSwweDBmLDB4NWUsMHg3ZCwweDY5LDB4N2UgfSwKKysJeyAweGQyLDB4 MGIsMHgxOCwweGRmLDB4ZDksMHgwZCwweDllLDB4ZmYgfSwKKysJfQorKwl9OworKworK3N0YXRp YyBzdHJ1Y3QKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtleVsyNF07CisrICAgIHVuc2ln bmVkIGNoYXIgcGxhaW50ZXh0WzhdOworKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbOF07 CisrICAgIH0gdGVzdHMzW109CisrCXsKKysJeworKwl7IDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwKKysJICAweEZFLDB4REMsMHhCQSwweDk4LDB4NzYsMHg1NCwweDMy LDB4MTAsCisrCSAgMHgxMiwweDM0LDB4NTYsMHg3OCwweDlhLDB4YmMsMHhkZSwweGYwIH0sCisr CXsgMHg4ZiwweDhmLDB4YmYsMHg5YiwweDVkLDB4NDgsMHhiNCwweDFjIH0sCisrCXsgMHg1OSww eDhjLDB4ZTUsMHhkMywweDZjLDB4YTIsMHhlYSwweDFiIH0sCisrCX0sCisrCXsKKysJeyAweERD LDB4QkEsMHg5OCwweDc2LDB4NTQsMHgzMiwweDEwLDB4RkUsCisrCSAgMHgwMSwweDIzLDB4NDUs MHg2NywweDg5LDB4QUIsMHhDRCwweEVGLAorKwkgIDB4RUQsMHgzOSwweEQ5LDB4NTAsMHhGQSww eDc0LDB4QkMsMHhDNCB9LAorKwl7IDB4MDEsMHgyMywweDQ1LDB4NjcsMHg4OSwweEFCLDB4Q0Qs MHhFRiB9LAorKwl7IDB4MTEsMHgyNSwweGIwLDB4MzUsMHhiZSwweGEwLDB4ODIsMHg4NiB9LAor Kwl9LAorKwl9OworKworK3ZvaWQgRklQU19jb3JydXB0X2RlcygpCisrICAgIHsKKysgICAgdGVz dHMyWzBdLnBsYWludGV4dFswXSsrOworKyAgICB9CisrCisraW50IEZJUFNfc2VsZnRlc3RfZGVz KCkKKysgICAgeworKyAgICBpbnQgbiwgcmV0ID0gMDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4 OworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKyAgICAvKiBFbmNyeXB0L2RlY3J5 cHQgd2l0aCAyLWtleSAzREVTIGFuZCBjb21wYXJlIHRvIGtub3duIGFuc3dlcnMgKi8KKysgICAg Zm9yKG49MCA7IG4gPCAyIDsgKytuKQorKwl7CisrCWlmICghZmlwc19jaXBoZXJfdGVzdCgmY3R4 LCBFVlBfZGVzX2VkZV9lY2IoKSwKKysJCQkJdGVzdHMyW25dLmtleSwgTlVMTCwKKysJCQkJdGVz dHMyW25dLnBsYWludGV4dCwgdGVzdHMyW25dLmNpcGhlcnRleHQsIDgpKQorKwkJZ290byBlcnI7 CisrCX0KKysKKysgICAgLyogRW5jcnlwdC9kZWNyeXB0IHdpdGggM0RFUyBhbmQgY29tcGFyZSB0 byBrbm93biBhbnN3ZXJzICovCisrICAgIGZvcihuPTAgOyBuIDwgMiA7ICsrbikKKysJeworKwlp ZiAoIWZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLAorKwkJCQl0ZXN0 czNbbl0ua2V5LCBOVUxMLAorKwkJCQl0ZXN0czNbbl0ucGxhaW50ZXh0LCB0ZXN0czNbbl0uY2lw aGVydGV4dCwgOCkpCisrCQlnb3RvIGVycjsKKysJfQorKyAgICByZXQgPSAxOworKyAgICBlcnI6 CisrICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrICAgIGlmIChyZXQgPT0gMCkK KysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfREVTLEZJUFNfUl9TRUxGVEVTVF9G QUlMRUQpOworKworKyAgICByZXR1cm4gcmV0OworKyAgICB9CisrI2VuZGlmCitkaWZmIC11cCAv ZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVz dC5jCistLS0gL2Rldi9udWxsCTIwMDktMTEtMDQgMTI6MDA6NTguODAxMDAyMjc2ICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jCTIw MDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDE4NCBAQAorKy8q IGNyeXB0by9kc2EvZHNhdGVzdC5jICovCisrLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJp YyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisrICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysg KgorKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorKyAq IGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKysgKiBUaGUgaW1wbGVtZW50YXRp b24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisrICog CisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJj aWFsIHVzZSBhcyBsb25nIGFzCisrICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVh cmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXBwbHkgdG8gYWxsIGNvZGUg Zm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKysgKiBsaGFz aCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3Vt ZW50YXRpb24KKysgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQg YnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisrICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBp cyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICogCisrICogQ29weXJpZ2h0IHJl bWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4K KysgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisrICogSWYgdGhpcyBwYWNrYWdl IGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1 dGlvbgorKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQu CisrICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJv Z3JhbSBzdGFydHVwIG9yCisrICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwp IHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisrICogCisrICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCisrICogYXJlIG1ldDoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKysgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbiB0aGUKKysgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKyAqIDMuIEFsbCBhZHZl cnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0 d2FyZQorKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoK KysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3Jp dHRlbiBieQorKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisrICogICAg VGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBm cm9tIHRoZSBsaWJyYXJ5CisrICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMg cmVsYXRlZCA6LSkuCisrICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMg Y29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisrICogICAgdGhlIGFwcHMgZGly ZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdl bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkg VGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorKyAqIAorKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisrICogQU5ZIEVYUFJFU1Mg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF CisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKysgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorKyAqIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMCisrICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKysgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsIFNUUklDVAorKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKysgKiBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisr ICogU1VDSCBEQU1BR0UuCisrICogCisrICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0 ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKysgKiBkZXJpdmF0 aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5v dCBzaW1wbHkgYmUKKysgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlv biBsaWNlbmNlCisrICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKysgKi8K KysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2JuLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKy8qIHNlZWQs IG91dF9wLCBvdXRfcSwgb3V0X2cgYXJlIHRha2VuIHRoZSBOSVNUIHRlc3QgdmVjdG9ycyAqLwor KworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHNlZWRbMjBdID0geworKwkweDc3LCAweDhmLCAweDQw LCAweDc0LCAweDZmLCAweDY2LCAweGJlLCAweDMzLCAweGNlLCAweGJlLCAweDk5LCAweDM0LAor KwkweDRjLCAweGZjLCAweGYzLCAweDI4LCAweGFhLCAweDcwLCAweDJkLCAweDNhCisrICAJfTsK KysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRfcFtdID0geworKwkweGY3LCAweDdjLCAweDFi LCAweDgzLCAweGQ4LCAweGU4LCAweDVjLCAweDdmLCAweDg1LCAweDMwLCAweDE3LCAweDU3LAor KwkweDIxLCAweDk1LCAweGZlLCAweDI2LCAweDA0LCAweGViLCAweDQ3LCAweDRjLCAweDNhLCAw eDRhLCAweDgxLCAweDRiLAorKwkweDcxLCAweDJlLCAweGVkLCAweDZlLCAweDRmLCAweDNkLCAw eDExLCAweDBmLCAweDdjLCAweGZlLCAweDM2LCAweDQzLAorKwkweDUxLCAweGQ5LCAweDgxLCAw eDM5LCAweDE3LCAweGRmLCAweDYyLCAweGY2LCAweDljLCAweDAxLCAweGE4LCAweDY5LAorKwkw eDcxLCAweGRkLCAweDI5LCAweDdmLCAweDQ3LCAweGU2LCAweDY1LCAweGE2LCAweDIyLCAweGU4 LCAweDZhLCAweDEyLAorKwkweDJiLCAweGMyLCAweDgxLCAweGZmLCAweDMyLCAweDcwLCAweDJm LCAweDllLCAweGNhLCAweDUzLCAweDI2LCAweDQ3LAorKwkweDBmLCAweDU5LCAweGQ3LCAweDll LCAweDJjLCAweGE1LCAweDA3LCAweGM0LCAweDQ5LCAweDUyLCAweGEzLCAweGU0LAorKwkweDZi LCAweDA0LCAweDAwLCAweDI1LCAweDQ5LCAweGUyLCAweGU2LCAweDdmLCAweDI4LCAweDc4LCAw eDk3LCAweGI4LAorKwkweDNhLCAweDMyLCAweDE0LCAweDM4LCAweGEyLCAweDUxLCAweDMzLCAw eDIyLCAweDQ0LCAweDdlLCAweGQ3LCAweGVmLAorKwkweDQ1LCAweGRiLCAweDA2LCAweDRhLCAw eGQyLCAweDgyLCAweDRhLCAweDgyLCAweDJjLCAweGIxLCAweGQ3LCAweGQ4LAorKwkweGI2LCAw eDczLCAweDAwLCAweDRkLCAweDk0LCAweDc3LCAweDk0LCAweGVmCisrCX07CisrCisrc3RhdGlj IHVuc2lnbmVkIGNoYXIgb3V0X3FbXSA9IHsKKysJMHhkNCwgMHgwYSwgMHhhYywgMHg5ZiwgMHhi ZCwgMHg4YywgMHg4MCwgMHhjMiwgMHgzOCwgMHg3ZSwgMHgyZSwgMHgwYywKKysJMHg1MiwgMHg1 YywgMHhlYSwgMHgzNCwgMHhhMSwgMHg4MywgMHgzMiwgMHhmMworKwl9OworKworK3N0YXRpYyB1 bnNpZ25lZCBjaGFyIG91dF9nW10gPSB7CisrCTB4MzQsIDB4NzMsIDB4OGIsIDB4NTcsIDB4ODQs IDB4OGUsIDB4NTUsIDB4YmYsIDB4NTcsIDB4Y2MsIDB4NDEsIDB4YmIsCisrCTB4NWUsIDB4MmIs IDB4ZDUsIDB4NDIsIDB4ZGQsIDB4MjQsIDB4MjIsIDB4MmEsIDB4MDksIDB4ZWEsIDB4MjYsIDB4 MWUsCisrCTB4MTcsIDB4NjUsIDB4Y2IsIDB4MWEsIDB4YjMsIDB4MTIsIDB4NDQsIDB4YTMsIDB4 OWUsIDB4OTksIDB4ZTksIDB4NjMsCisrCTB4ZWIsIDB4MzAsIDB4YjEsIDB4NzgsIDB4N2IsIDB4 MDksIDB4NDAsIDB4MzAsIDB4ZmEsIDB4ODMsIDB4YzIsIDB4MzUsCisrCTB4ZTEsIDB4YzQsIDB4 MmQsIDB4NzQsIDB4MWEsIDB4YjEsIDB4ODMsIDB4NTQsIDB4ZDgsIDB4MjksIDB4ZjQsIDB4Y2Ys CisrCTB4N2YsIDB4NmYsIDB4NjcsIDB4MWMsIDB4MzYsIDB4NDksIDB4ZWUsIDB4NmMsIDB4YTIs IDB4M2MsIDB4MmQsIDB4NmEsCisrCTB4ZTksIDB4ZDMsIDB4OWEsIDB4ZjYsIDB4NTcsIDB4Nzgs IDB4NmYsIDB4ZmQsIDB4MzMsIDB4Y2QsIDB4M2MsIDB4ZWQsCisrCTB4ZmQsIDB4ZDQsIDB4NDEs IDB4ZTYsIDB4NWMsIDB4OGIsIDB4ZTAsIDB4NjgsIDB4MzEsIDB4NDcsIDB4NDcsIDB4YWYsCisr CTB4MTIsIDB4YTcsIDB4ZjksIDB4MzIsIDB4MGQsIDB4OTQsIDB4MTUsIDB4NDgsIDB4ZDAsIDB4 NTQsIDB4ODUsIDB4YjIsCisrCTB4MDQsIDB4YjUsIDB4NGQsIDB4ZDQsIDB4OWQsIDB4MDUsIDB4 MjIsIDB4MjUsIDB4ZDksIDB4ZmQsIDB4NmMsIDB4MzYsCisrCTB4ZWYsIDB4YmUsIDB4NjksIDB4 NmMsIDB4NTUsIDB4ZjQsIDB4ZWUsIDB4ZWMKKysJfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzdHIxW109IjEyMzQ1Njc4OTAxMjM0NTY3ODkwIjsKKysKKyt2b2lkIEZJUFNfY29y cnVwdF9kc2EoKQorKyAgICB7CisrICAgICsrc2VlZFswXTsKKysgICAgfQorKworK2ludCBGSVBT X3NlbGZ0ZXN0X2RzYSgpCisrICAgIHsKKysgICAgRFNBICpkc2E7CisrICAgIGludCBjb3VudGVy LGksaiwgcmV0ID0gMDsKKysgICAgdW5zaWduZWQgaW50IHNsZW47CisrICAgIHVuc2lnbmVkIGNo YXIgYnVmWzI1Nl07CisrICAgIHVuc2lnbmVkIGxvbmcgaDsKKysgICAgRVZQX01EX0NUWCBtY3R4 OworKyAgICBFVlBfUEtFWSAqcGsgPSBOVUxMOworKworKyAgICBFVlBfTURfQ1RYX2luaXQoJm1j dHgpOworKworKyAgICBkc2EgPSBEU0FfbmV3KCk7CisrCisrICAgIGlmKGRzYSA9PSBOVUxMKQor Kwlnb3RvIGVycjsKKysgICAgaWYoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgMTAy NCxzZWVkLDIwLCZjb3VudGVyLCZoLE5VTEwpKQorKwlnb3RvIGVycjsKKysgICAgaWYgKGNvdW50 ZXIgIT0gMzc4KSAKKysJZ290byBlcnI7CisrICAgIGlmIChoICE9IDIpCisrCWdvdG8gZXJyOwor KyAgICBpPUJOX2JuMmJpbihkc2EtPnEsYnVmKTsKKysgICAgaj1zaXplb2Yob3V0X3EpOworKyAg ICBpZiAoaSAhPSBqIHx8IG1lbWNtcChidWYsb3V0X3EsaSkgIT0gMCkKKysJZ290byBlcnI7Cisr CisrICAgIGk9Qk5fYm4yYmluKGRzYS0+cCxidWYpOworKyAgICBqPXNpemVvZihvdXRfcCk7Cisr ICAgIGlmIChpICE9IGogfHwgbWVtY21wKGJ1ZixvdXRfcCxpKSAhPSAwKQorKwlnb3RvIGVycjsK KysKKysgICAgaT1CTl9ibjJiaW4oZHNhLT5nLGJ1Zik7CisrICAgIGo9c2l6ZW9mKG91dF9nKTsK KysgICAgaWYgKGkgIT0gaiB8fCBtZW1jbXAoYnVmLG91dF9nLGkpICE9IDApCisrCWdvdG8gZXJy OworKyAgICBEU0FfZ2VuZXJhdGVfa2V5KGRzYSk7CisrCisrICAgIGlmICgocGs9RVZQX1BLRVlf bmV3KCkpID09IE5VTEwpCisrCWdvdG8gZXJyOworKyAgICBFVlBfUEtFWV9hc3NpZ25fRFNBKHBr LCBkc2EpOworKworKyAgICBpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwg TlVMTCkpCisrCWdvdG8gZXJyOworKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBzdHIx LCAyMCkpCisrCWdvdG8gZXJyOworKyAgICBpZiAoIUVWUF9TaWduRmluYWwoJm1jdHgsIGJ1Ziwg JnNsZW4sIHBrKSkKKysJZ290byBlcnI7CisrCisrICAgIGlmICghRVZQX1ZlcmlmeUluaXRfZXgo Jm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpKQorKwlnb3RvIGVycjsKKysgICAgaWYgKCFFVlBfVmVy aWZ5VXBkYXRlKCZtY3R4LCBzdHIxLCAyMCkpCisrCWdvdG8gZXJyOworKyAgICBpZiAoRVZQX1Zl cmlmeUZpbmFsKCZtY3R4LCBidWYsIHNsZW4sIHBrKSAhPSAxKQorKwlnb3RvIGVycjsKKysKKysg ICAgcmV0ID0gMTsKKysKKysgICAgZXJyOgorKyAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgp OworKyAgICBpZiAocGspCisrCUVWUF9QS0VZX2ZyZWUocGspOworKyAgICBlbHNlIGlmIChkc2Ep CisrCURTQV9mcmVlKGRzYSk7CisrICAgIGlmIChyZXQgPT0gMCkKKysJICAgIEZJUFNlcnIoRklQ U19GX0ZJUFNfU0VMRlRFU1RfRFNBLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKyAgICByZXR1 cm4gcmV0OworKyAgICB9CisrI2VuZGlmCitkaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vZmlwcy9maXBzLmgKKy0tLSAvZGV2L251bGwJMjAwOS0xMS0wNCAxMjow MDo1OC44MDEwMDIyNzYgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBz L2ZpcHMuaAkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwx NjMgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g CisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBk aXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQ cm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0 CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisr ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysg KgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8b3BlbnNzbC9v cGVuc3NsY29uZi5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2Vycm9yIEZJUFMgaXMg ZGlzYWJsZWQuCisrI2VuZGlmCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKyNpZmRlZiAg X19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKytzdHJ1Y3QgZHNhX3N0Owor K3N0cnVjdCBldnBfcGtleV9zdDsKKytzdHJ1Y3QgZW52X21kX3N0OworK3N0cnVjdCBldnBfY2lw aGVyX3N0OworK3N0cnVjdCBldnBfY2lwaGVyX2N0eF9zdDsKKysKKytpbnQgRklQU19tb2RlX3Nl dChpbnQgb25vZmYpOworK2ludCBGSVBTX21vZGUodm9pZCk7CisrY29uc3Qgdm9pZCAqRklQU19y YW5kX2NoZWNrKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2b2lkKTsKKyt2b2lk IEZJUFNfc2VsZnRlc3RfY2hlY2sodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfc2hhMSh2b2lk KTsKKytpbnQgRklQU19zZWxmdGVzdF9zaGExKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X2Fl cyh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9hZXModm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1 cHRfZGVzKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2Rlcyh2b2lkKTsKKyt2b2lkIEZJUFNf Y29ycnVwdF9yc2Eodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbih2b2lkKTsK KytpbnQgRklQU19zZWxmdGVzdF9yc2Eodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfZHNhKHZv aWQpOworK3ZvaWQgRklQU19jb3JydXB0X2RzYV9rZXlnZW4odm9pZCk7CisraW50IEZJUFNfc2Vs ZnRlc3RfZHNhKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X3JuZyh2b2lkKTsKKyt2b2lkIEZJ UFNfcm5nX3N0aWNrKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X3JuZyh2b2lkKTsKKytpbnQg RklQU19zZWxmdGVzdF9obWFjKHZvaWQpOworKworK2ludCBmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3Qoc3RydWN0IGV2cF9wa2V5X3N0ICpwa2V5LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRi cywgaW50IHRic2xlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICprYXQsIHVuc2lnbmVkIGlu dCBrYXRsZW4sCisrCQkJY29uc3Qgc3RydWN0IGVudl9tZF9zdCAqZGlnZXN0LCB1bnNpZ25lZCBp bnQgbWRfZmxhZ3MsCisrCQkJY29uc3QgY2hhciAqZmFpbF9zdHIpOworKworK2ludCBmaXBzX2Np cGhlcl90ZXN0KHN0cnVjdCBldnBfY2lwaGVyX2N0eF9zdCAqY3R4LAorKwkJCWNvbnN0IHN0cnVj dCBldnBfY2lwaGVyX3N0ICpjaXBoZXIsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAor KwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBs YWludGV4dCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0LAorKwkJCWludCBs ZW4pOworKworKy8qIEJFR0lOIEVSUk9SIENPREVTICovCisrLyogVGhlIGZvbGxvd2luZyBsaW5l cyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMK KysgKiBtYWRlIGFmdGVyIHRoaXMgcG9pbnQgbWF5IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNj cmlwdCBpcyBuZXh0IHJ1bi4KKysgKi8KKyt2b2lkIEVSUl9sb2FkX0ZJUFNfc3RyaW5ncyh2b2lk KTsKKysKKysvKiBFcnJvciBjb2RlcyBmb3IgdGhlIEZJUFMgZnVuY3Rpb25zLiAqLworKworKy8q IEZ1bmN0aW9uIGNvZGVzLiAqLworKyNkZWZpbmUgRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1T CQkJIDEwMAorKyNkZWZpbmUgRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOCQkJIDEwMQorKyNk ZWZpbmUgRklQU19GX0RTQV9ET19TSUdOCQkJCSAxMDIKKysjZGVmaW5lIEZJUFNfRl9EU0FfRE9f VkVSSUZZCQkJCSAxMDMKKysjZGVmaW5lIEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWAkJCSAxMjQK KysjZGVmaW5lIEZJUFNfRl9FVlBfRElHRVNUSU5JVF9FWAkJCSAxMjUKKysjZGVmaW5lIEZJUFNf Rl9GSVBTX0NIRUNLX0RTQQkJCQkgMTA0CisrI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19JTkNP UkVfRklOR0VSUFJJTlQJCSAxMDUKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX1JTQQkJCQkg MTA2CisrI2RlZmluZSBGSVBTX0ZfRklQU19EU0FfQ0hFQ0sJCQkJIDEwNworKyNkZWZpbmUgRklQ U19GX0ZJUFNfTU9ERV9TRVQJCQkJIDEwOAorKyNkZWZpbmUgRklQU19GX0ZJUFNfUEtFWV9TSUdO QVRVUkVfVEVTVAkJCSAxMDkKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFUwkJCSAx MTAKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0RFUwkJCSAxMTEKKysjZGVmaW5lIEZJ UFNfRl9GSVBTX1NFTEZURVNUX0RTQQkJCSAxMTIKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZU RVNUX0hNQUMJCQkgMTEzCisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9STkcJCQkgMTE0 CisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9TSEExCQkJIDExNQorKyNkZWZpbmUgRklQ U19GX0hBU0hfRklOQUwJCQkJIDEyMworKyNkZWZpbmUgRklQU19GX1JTQV9CVUlMVElOX0tFWUdF TgkJCSAxMTYKKysjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfREVDUllQVAkJCSAxMTcK KysjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVAkJCSAxMTgKKysjZGVmaW5l IEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBUCQkJIDExOQorKyNkZWZpbmUgRklQU19GX1JT QV9FQVlfUFVCTElDX0VOQ1JZUFQJCQkgMTIwCisrI2RlZmluZSBGSVBTX0ZfUlNBX1g5MzFfR0VO RVJBVEVfS0VZX0VYCQkJIDEyMQorKyNkZWZpbmUgRklQU19GX1NTTEVBWV9SQU5EX0JZVEVTCQkJ IDEyMgorKworKy8qIFJlYXNvbiBjb2Rlcy4gKi8KKysjZGVmaW5lIEZJUFNfUl9DQU5OT1RfUkVB RF9FWEUJCQkJIDEwMworKyNkZWZpbmUgRklQU19SX0NBTk5PVF9SRUFEX0VYRV9ESUdFU1QJCQkg MTA0CisrI2RlZmluZSBGSVBTX1JfQ09OVFJBRElDVElOR19FVklERU5DRQkJCSAxMTQKKysjZGVm aW5lIEZJUFNfUl9FWEVfRElHRVNUX0RPRVNfTk9UX01BVENICQkgMTA1CisrI2RlZmluZSBGSVBT X1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0gJCSAxMTAKKysjZGVmaW5lIEZJUFNfUl9GSU5H RVJQUklOVF9ET0VTX05PVF9NQVRDSF9OT05QSUNfUkVMT0NBVEVEIDExMQorKyNkZWZpbmUgRklQ U19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX1NFR01FTlRfQUxJQVNJTkcgMTEyCisrI2Rl ZmluZSBGSVBTX1JfRklQU19NT0RFX0FMUkVBRFlfU0VUCQkJIDEwMgorKyNkZWZpbmUgRklQU19S X0ZJUFNfU0VMRlRFU1RfRkFJTEVECQkJIDEwNgorKyNkZWZpbmUgRklQU19SX0lOVkFMSURfS0VZ X0xFTkdUSAkJCSAxMDkKKysjZGVmaW5lIEZJUFNfUl9LRVlfVE9PX1NIT1JUCQkJCSAxMDgKKysj ZGVmaW5lIEZJUFNfUl9OT05fRklQU19NRVRIT0QJCQkJIDEwMAorKyNkZWZpbmUgRklQU19SX1BB SVJXSVNFX1RFU1RfRkFJTEVECQkJIDEwNworKyNkZWZpbmUgRklQU19SX1JTQV9ERUNSWVBUX0VS Uk9SCQkJIDExNQorKyNkZWZpbmUgRklQU19SX1JTQV9FTkNSWVBUX0VSUk9SCQkJIDExNgorKyNk ZWZpbmUgRklQU19SX1NFTEZURVNUX0ZBSUxFRAkJCQkgMTAxCisrI2RlZmluZSBGSVBTX1JfVEVT VF9GQUlMVVJFCQkJCSAxMTcKKysjZGVmaW5lIEZJUFNfUl9VTlNVUFBPUlRFRF9QTEFURk9STQkJ CSAxMTMKKysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKyNlbmRpZgorZGlm ZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvZmlwc19obWFj X3NlbGZ0ZXN0LmMKKy0tLSAvZGV2L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxm dGVzdC5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDEz NSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK KysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRp c3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki CisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK KysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAq CisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK KysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyt0eXBl ZGVmIHN0cnVjdCB7CisrCWNvbnN0IEVWUF9NRCAqKCphbGcpKHZvaWQpOworKwljb25zdCBjaGFy ICprZXksICppdjsKKysJdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdOworK30g SE1BQ19LQVQ7CisrCisrc3RhdGljIGNvbnN0IEhNQUNfS0FUIHZlY3RvcltdID0geworKyAgICB7 CUVWUF9zaGExLAorKwkvKiBmcm9tIGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9ucy9m aXBzL2ZpcHMxOTgvZmlwcy0xOThhLnBkZiAqLworKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAor KwkiU2FtcGxlICMyIiwKKysJeyAweDA5LDB4MjIsMHhkMywweDQwLDB4NWYsMHhhYSwweDNkLDB4 MTksCisrCSAgMHg0ZiwweDgyLDB4YTQsMHg1OCwweDMwLDB4NzMsMHg3ZCwweDVjLAorKwkgIDB4 YzYsMHhjNywweDVkLDB4MjQgfQorKyAgICB9LAorKyAgICB7CUVWUF9zaGEyMjQsCisrCS8qIGp1 c3Qga2VlcCBleHRlbmRpbmcgdGhlIGFib3ZlLi4uICovCisrCSIwMTIzNDU2Nzg5Ojs8PT4/QEFC QyIsCisrCSJTYW1wbGUgIzIiLAorKwl7IDB4ZGQsMHhlZiwweDBhLDB4NDAsMHhjYiwweDdkLDB4 NTAsMHhmYiwKKysJICAweDZlLDB4ZTYsMHhjZSwweGExLDB4MjAsMHhiYSwweDI2LDB4YWEsCisr CSAgMHgwOCwweGYzLDB4MDcsMHg3NSwweDg3LDB4YjgsMHhhZCwweDFiLAorKwkgIDB4OGMsMHg4 ZCwweDEyLDB4YzcgfQorKyAgICB9LAorKyAgICB7CUVWUF9zaGEyNTYsCisrCSIwMTIzNDU2Nzg5 Ojs8PT4/QEFCQyIsCisrCSJTYW1wbGUgIzIiLAorKwl7IDB4YjgsMHhmMiwweDBkLDB4YjUsMHg0 MSwweGVhLDB4NDMsMHgwOSwKKysJICAweGNhLDB4NGUsMHhhOSwweDM4LDB4MGMsMHhkMCwweGU4 LDB4MzQsCisrCSAgMHhmNywweDFmLDB4YmUsMHg5MSwweDc0LDB4YTIsMHg2MSwweDM4LAorKwkg IDB4MGQsMHhjMSwweDdlLDB4YWUsMHg2YSwweDM0LDB4NTEsMHhkOSB9CisrICAgIH0sCisrICAg IHsJRVZQX3NoYTM4NCwKKysJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysJIlNhbXBsZSAjMiIs CisrCXsgMHgwOCwweGJjLDB4YjAsMHhkYSwweDQ5LDB4MWUsMHg4NywweGFkLAorKwkgIDB4OWEs MHgxZCwweDZhLDB4Y2UsMHgyMywweGM1LDB4MGIsMHhmNiwKKysJICAweGI3LDB4MTgsMHgwNiww eGE1LDB4NzcsMHhjZCwweDQ5LDB4MDQsCisrCSAgMHg4OSwweGYxLDB4ZTYsMHgyMywweDQ0LDB4 NTEsMHg1MSwweDlmLAorKwkgIDB4ODUsMHg1NiwweDgwLDB4NzksMHgwYywweGJkLDB4NGQsMHg1 MCwKKysJICAweGE0LDB4NWYsMHgyOSwweGUzLDB4OTMsMHhmMCwweGU4LDB4N2YgfQorKyAgICB9 LAorKyAgICB7CUVWUF9zaGE1MTIsCisrCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCisrCSJTYW1w bGUgIzIiLAorKwl7IDB4ODAsMHg5ZCwweDQ0LDB4MDUsMHg3YywweDViLDB4OTUsMHg0MSwKKysJ ICAweDA1LDB4YmQsMHgwNCwweDEzLDB4MTYsMHhkYiwweDBmLDB4YWMsCisrCSAgMHg0NCwweGQ1 LDB4YTQsMHhkNSwweGQwLDB4ODksMHgyYiwweGQwLAorKwkgIDB4NGUsMHg4NiwweDY0LDB4MTIs MHhjMCwweDkwLDB4NzcsMHg2OCwKKysJICAweGYxLDB4ODcsMHhiNywweDdjLDB4NGYsMHhhZSww eDJjLDB4MmYsCisrCSAgMHgyMSwweGE1LDB4YjUsMHg2NSwweDlhLDB4NGYsMHg0YiwweGE3LAor KwkgIDB4NDcsMHgwMiwweGEzLDB4ZGUsMHg5YiwweDUxLDB4ZjEsMHg0NSwKKysJICAweGJkLDB4 NGYsMHgyNSwweDI3LDB4NDIsMHg5OCwweDk5LDB4MDUgfQorKyAgICB9LAorK307CisrCisraW50 IEZJUFNfc2VsZnRlc3RfaG1hYygpCisrICAgIHsKKysgICAgaW50IG47CisrICAgIHVuc2lnbmVk IGludCAgICBvdXRsZW47CisrICAgIHVuc2lnbmVkIGNoYXIgICBvdXRbRVZQX01BWF9NRF9TSVpF XTsKKysgICAgY29uc3QgRVZQX01EICAgKm1kOworKyAgICBjb25zdCBITUFDX0tBVCAqdDsKKysK KysgICAgZm9yKG49MCx0PXZlY3RvcjsgbjxzaXplb2YodmVjdG9yKS9zaXplb2YodmVjdG9yWzBd KTsgbisrLHQrKykKKysJeworKwltZCA9ICgqdC0+YWxnKSgpOworKwlITUFDKG1kLHQtPmtleSxz dHJsZW4odC0+a2V5KSwKKysJCShjb25zdCB1bnNpZ25lZCBjaGFyICopdC0+aXYsc3RybGVuKHQt Pml2KSwKKysJCW91dCwmb3V0bGVuKTsKKysKKysJaWYobWVtY21wKG91dCx0LT5rYXZhbCxvdXRs ZW4pKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9ITUFDLEZJ UFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9CisrCX0KKysg ICAgcmV0dXJuIDE7CisrICAgIH0KKysjZW5kaWYKK2RpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jCistLS0gL2Rldi9udWxsCTIwMDkt MTEtMDQgMTI6MDA6NTguODAxMDAyMjc2ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vZmlwcy9maXBzX3JhbmQuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEw MAorQEAgLTAsMCArMSw0MTAgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykg MjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAq ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0 d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQi IGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3Jz ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQK KysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24s IHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisr ICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxs ZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5h bWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5T U0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0 c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoK KysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0ICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNT RUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisr ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysg KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysvKgor KyAqIFRoaXMgaXMgYSBGSVBTIGFwcHJvdmVkIEFFUyBQUk5HIGJhc2VkIG9uIEFOU0kgWDkuMzEg QS4yLjQuCisrICovCisrCisrI2luY2x1ZGUgImVfb3MuaCIKKysKKysvKiBJZiB3ZSBkb24ndCBk ZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCwgc3RydWN0IHRpbWV2YWwgd29uJ3QKKysgICBi ZSBkZWZpbmVkIGFuZCBnZXR0aW1lb2ZkYXkoKSB3b24ndCBiZSBkZWNsYXJlZCB3aXRoIHN0cmlj dCBjb21waWxlcnMKKysgICBsaWtlIERFQyBDIGluIEFOU0kgQyBtb2RlLiAgKi8KKysjaWZuZGVm IF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKysjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQg MQorKyNlbmRpZgorKworKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9hZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9maXBzX3JhbmQuaD4KKysjaWZuZGVmIE9QRU5TU0xfU1lTX1dJTjMyCisrI2luY2x1ZGUgPHN5 cy90aW1lLmg+CisrI2VuZGlmCisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpZm5kZWYgT1BFTlNT TF9TWVNfV0lOMzIKKysjIGlmZGVmIE9QRU5TU0xfVU5JU1RECisrIyAgaW5jbHVkZSBPUEVOU1NM X1VOSVNURAorKyMgZWxzZQorKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgorKyMgZW5kaWYKKysjZW5k aWYKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNp bmNsdWRlICJmaXBzX2xvY2wuaCIKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrdm9pZCAq T1BFTlNTTF9zdGRlcnIodm9pZCk7CisrCisrI2RlZmluZSBBRVNfQkxPQ0tfTEVOR1RICTE2Cisr CisrCisrLyogQUVTIEZJUFMgUFJORyBpbXBsZW1lbnRhdGlvbiAqLworKworK3R5cGVkZWYgc3Ry dWN0IAorKwl7CisrCWludCBzZWVkZWQ7CisrCWludCBrZXllZDsKKysJaW50IHRlc3RfbW9kZTsK KysJaW50IHNlY29uZDsKKysJaW50IGVycm9yOworKwl1bnNpZ25lZCBsb25nIGNvdW50ZXI7Cisr CUFFU19LRVkga3M7CisrCWludCB2cG9zOworKwkvKiBUZW1wb3Jhcnkgc3RvcmFnZSBmb3Iga2V5 IGlmIGl0IGVxdWFscyBzZWVkIGxlbmd0aCAqLworKwl1bnNpZ25lZCBjaGFyIHRtcF9rZXlbQUVT X0JMT0NLX0xFTkdUSF07CisrCXVuc2lnbmVkIGNoYXIgVltBRVNfQkxPQ0tfTEVOR1RIXTsKKysJ dW5zaWduZWQgY2hhciBEVFtBRVNfQkxPQ0tfTEVOR1RIXTsKKysJdW5zaWduZWQgY2hhciBsYXN0 W0FFU19CTE9DS19MRU5HVEhdOworKwl9IEZJUFNfUFJOR19DVFg7CisrCisrc3RhdGljIEZJUFNf UFJOR19DVFggc2N0eDsKKysKKytzdGF0aWMgaW50IGZpcHNfcHJuZ19mYWlsID0gMDsKKysKKyt2 b2lkIEZJUFNfcm5nX3N0aWNrKHZvaWQpCisrCXsKKysJZmlwc19wcm5nX2ZhaWwgPSAxOworKwl9 CisrCisrdm9pZCBmaXBzX3JhbmRfcHJuZ19yZXNldChGSVBTX1BSTkdfQ1RYICpjdHgpCisrCXsK KysJY3R4LT5zZWVkZWQgPSAwOworKwljdHgtPmtleWVkID0gMDsKKysJY3R4LT50ZXN0X21vZGUg PSAwOworKwljdHgtPmNvdW50ZXIgPSAwOworKwljdHgtPnNlY29uZCA9IDA7CisrCWN0eC0+ZXJy b3IgPSAwOworKwljdHgtPnZwb3MgPSAwOworKwlPUEVOU1NMX2NsZWFuc2UoY3R4LT5WLCBBRVNf QkxPQ0tfTEVOR1RIKTsKKysJT1BFTlNTTF9jbGVhbnNlKCZjdHgtPmtzLCBzaXplb2YoQUVTX0tF WSkpOworKwl9CisrCQorKworK3N0YXRpYyBpbnQgZmlwc19zZXRfcHJuZ19rZXkoRklQU19QUk5H X0NUWCAqY3R4LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgRklQU19SQU5EX1NJWkVf VCBrZXlsZW4pCisrCXsKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKwlpZiAoa2V5bGVuICE9 IDE2ICYmIGtleWxlbiAhPSAyNCAmJiBrZXlsZW4gIT0gMzIpCisrCQl7CisrCQkvKiBlcnJvcjog aW52YWxpZCBrZXkgc2l6ZSAqLworKwkJcmV0dXJuIDA7CisrCQl9CisrCUFFU19zZXRfZW5jcnlw dF9rZXkoa2V5LCBrZXlsZW4gPDwgMywgJmN0eC0+a3MpOworKwlpZiAoa2V5bGVuID09IDE2KQor KwkJeworKwkJbWVtY3B5KGN0eC0+dG1wX2tleSwga2V5LCAxNik7CisrCQljdHgtPmtleWVkID0g MjsKKysJCX0KKysJZWxzZQorKwkJY3R4LT5rZXllZCA9IDE7CisrCWN0eC0+c2VlZGVkID0gMDsK KysJY3R4LT5zZWNvbmQgPSAwOworKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgZmlw c19zZXRfcHJuZ19zZWVkKEZJUFNfUFJOR19DVFggKmN0eCwKKysJCQljb25zdCB1bnNpZ25lZCBj aGFyICpzZWVkLCBGSVBTX1JBTkRfU0laRV9UIHNlZWRsZW4pCisrCXsKKysJaW50IGk7CisrCWlm ICghY3R4LT5rZXllZCkKKysJCXJldHVybiAwOworKwkvKiBJbiB0ZXN0IG1vZGUgc2VlZCBpcyBq dXN0IHN1cHBsaWVkIGRhdGEgKi8KKysJaWYgKGN0eC0+dGVzdF9tb2RlKQorKwkJeworKwkJaWYg KHNlZWRsZW4gIT0gQUVTX0JMT0NLX0xFTkdUSCkKKysJCQlyZXR1cm4gMDsKKysJCW1lbWNweShj dHgtPlYsIHNlZWQsIEFFU19CTE9DS19MRU5HVEgpOworKwkJY3R4LT5zZWVkZWQgPSAxOworKwkJ cmV0dXJuIDE7CisrCQl9CisrCS8qIE91dHNpZGUgdGVzdCBtb2RlIFhPUiBzdXBwbGllZCBkYXRh IHdpdGggZXhpc3Rpbmcgc2VlZCAqLworKwlmb3IgKGkgPSAwOyBpIDwgc2VlZGxlbjsgaSsrKQor KwkJeworKwkJY3R4LT5WW2N0eC0+dnBvcysrXSBePSBzZWVkW2ldOworKwkJaWYgKGN0eC0+dnBv cyA9PSBBRVNfQkxPQ0tfTEVOR1RIKQorKwkJCXsKKysJCQljdHgtPnZwb3MgPSAwOworKwkJCS8q IFNwZWNpYWwgY2FzZSBpZiBmaXJzdCBzZWVkIGFuZCBrZXkgbGVuZ3RoIGVxdWFscworKyAJCQkg KiBibG9jayBzaXplIGNoZWNrIGtleSBhbmQgc2VlZCBkbyBub3QgbWF0Y2guCisrIAkJCSAqLyAK KysJCQlpZiAoY3R4LT5rZXllZCA9PSAyKQorKwkJCQl7CisrCQkJCWlmICghbWVtY21wKGN0eC0+ dG1wX2tleSwgY3R4LT5WLCAxNikpCisrCQkJCQl7CisrCQkJCQlSQU5EZXJyKFJBTkRfRl9GSVBT X1NFVF9QUk5HX1NFRUQsCisrCQkJCQkJUkFORF9SX1BSTkdfU0VFRF9NVVNUX05PVF9NQVRDSF9L RVkpOworKwkJCQkJcmV0dXJuIDA7CisrCQkJCQl9CisrCQkJCU9QRU5TU0xfY2xlYW5zZShjdHgt PnRtcF9rZXksIDE2KTsKKysJCQkJY3R4LT5rZXllZCA9IDE7CisrCQkJCX0KKysJCQljdHgtPnNl ZWRlZCA9IDE7CisrCQkJfQorKwkJfQorKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBmaXBzX3Nl dF90ZXN0X21vZGUoRklQU19QUk5HX0NUWCAqY3R4KQorKwl7CisrCWlmIChjdHgtPmtleWVkKQor KwkJeworKwkJUkFORGVycihSQU5EX0ZfRklQU19TRVRfVEVTVF9NT0RFLFJBTkRfUl9QUk5HX0tF WUVEKTsKKysJCXJldHVybiAwOworKwkJfQorKwljdHgtPnRlc3RfbW9kZSA9IDE7CisrCXJldHVy biAxOworKwl9CisrCisraW50IEZJUFNfcmFuZF90ZXN0X21vZGUodm9pZCkKKysJeworKwlyZXR1 cm4gZmlwc19zZXRfdGVzdF9tb2RlKCZzY3R4KTsKKysJfQorKworK2ludCBGSVBTX3JhbmRfc2V0 X2R0KHVuc2lnbmVkIGNoYXIgKmR0KQorKwl7CisrCWlmICghc2N0eC50ZXN0X21vZGUpCisrCQl7 CisrCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkRfU0VUX0RULFJBTkRfUl9OT1RfSU5fVEVTVF9N T0RFKTsKKysJCXJldHVybiAwOworKwkJfQorKwltZW1jcHkoc2N0eC5EVCwgZHQsIEFFU19CTE9D S19MRU5HVEgpOworKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyB2b2lkIGZpcHNfZ2V0X2R0 KEZJUFNfUFJOR19DVFggKmN0eCkKKysgICAgeworKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgor KwlGSUxFVElNRSBmdDsKKysjZWxzZQorKwlzdHJ1Y3QgdGltZXZhbCB0djsKKysjZW5kaWYKKysJ dW5zaWduZWQgY2hhciAqYnVmID0gY3R4LT5EVDsKKysKKysjaWZuZGVmIEdFVFBJRF9JU19NRUFO SU5HTEVTUworKwl1bnNpZ25lZCBsb25nIHBpZDsKKysjZW5kaWYKKysKKysjaWZkZWYgT1BFTlNT TF9TWVNfV0lOMzIKKysJR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoJmZ0KTsKKysJYnVmWzBdID0g KHVuc2lnbmVkIGNoYXIpIChmdC5kd0hpZ2hEYXRlVGltZSAmIDB4ZmYpOworKwlidWZbMV0gPSAo dW5zaWduZWQgY2hhcikgKChmdC5kd0hpZ2hEYXRlVGltZSA+PiA4KSAmIDB4ZmYpOworKwlidWZb Ml0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0hpZ2hEYXRlVGltZSA+PiAxNikgJiAweGZmKTsK KysJYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4gMjQpICYg MHhmZik7CisrCWJ1Zls0XSA9ICh1bnNpZ25lZCBjaGFyKSAoZnQuZHdMb3dEYXRlVGltZSAmIDB4 ZmYpOworKwlidWZbNV0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0xvd0RhdGVUaW1lID4+IDgp ICYgMHhmZik7CisrCWJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3TG93RGF0ZVRpbWUg Pj4gMTYpICYgMHhmZik7CisrCWJ1Zls3XSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3TG93RGF0 ZVRpbWUgPj4gMjQpICYgMHhmZik7CisrI2Vsc2UKKysJZ2V0dGltZW9mZGF5KCZ0dixOVUxMKTsK KysJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpICh0di50dl9zZWMgJiAweGZmKTsKKysJYnVmWzFd ID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfc2VjID4+IDgpICYgMHhmZik7CisrCWJ1ZlsyXSA9 ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiAxNikgJiAweGZmKTsKKysJYnVmWzNdID0g KHVuc2lnbmVkIGNoYXIpICgodHYudHZfc2VjID4+IDI0KSAmIDB4ZmYpOworKwlidWZbNF0gPSAo dW5zaWduZWQgY2hhcikgKHR2LnR2X3VzZWMgJiAweGZmKTsKKysJYnVmWzVdID0gKHVuc2lnbmVk IGNoYXIpICgodHYudHZfdXNlYyA+PiA4KSAmIDB4ZmYpOworKwlidWZbNl0gPSAodW5zaWduZWQg Y2hhcikgKCh0di50dl91c2VjID4+IDE2KSAmIDB4ZmYpOworKwlidWZbN10gPSAodW5zaWduZWQg Y2hhcikgKCh0di50dl91c2VjID4+IDI0KSAmIDB4ZmYpOworKyNlbmRpZgorKwlidWZbOF0gPSAo dW5zaWduZWQgY2hhcikgKGN0eC0+Y291bnRlciAmIDB4ZmYpOworKwlidWZbOV0gPSAodW5zaWdu ZWQgY2hhcikgKChjdHgtPmNvdW50ZXIgPj4gOCkgJiAweGZmKTsKKysJYnVmWzEwXSA9ICh1bnNp Z25lZCBjaGFyKSAoKGN0eC0+Y291bnRlciA+PiAxNikgJiAweGZmKTsKKysJYnVmWzExXSA9ICh1 bnNpZ25lZCBjaGFyKSAoKGN0eC0+Y291bnRlciA+PiAyNCkgJiAweGZmKTsKKysKKysJY3R4LT5j b3VudGVyKys7CisrCisrCisrI2lmbmRlZiBHRVRQSURfSVNfTUVBTklOR0xFU1MKKysJcGlkPSh1 bnNpZ25lZCBsb25nKWdldHBpZCgpOworKwlidWZbMTJdID0gKHVuc2lnbmVkIGNoYXIpIChwaWQg JiAweGZmKTsKKysJYnVmWzEzXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiA4KSAmIDB4ZmYp OworKwlidWZbMTRdID0gKHVuc2lnbmVkIGNoYXIpICgocGlkID4+IDE2KSAmIDB4ZmYpOworKwli dWZbMTVdID0gKHVuc2lnbmVkIGNoYXIpICgocGlkID4+IDI0KSAmIDB4ZmYpOworKyNlbmRpZgor KyAgICB9CisrCisrc3RhdGljIGludCBmaXBzX3JhbmQoRklQU19QUk5HX0NUWCAqY3R4LAorKwkJ CXVuc2lnbmVkIGNoYXIgKm91dCwgRklQU19SQU5EX1NJWkVfVCBvdXRsZW4pCisrCXsKKysJdW5z aWduZWQgY2hhciBSW0FFU19CTE9DS19MRU5HVEhdLCBJW0FFU19CTE9DS19MRU5HVEhdOworKwl1 bnNpZ25lZCBjaGFyIHRtcFtBRVNfQkxPQ0tfTEVOR1RIXTsKKysJaW50IGk7CisrCWlmIChjdHgt PmVycm9yKQorKwkJeworKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9QUk5HX0VS Uk9SKTsKKysJCXJldHVybiAwOworKwkJfQorKwlpZiAoIWN0eC0+a2V5ZWQpCisrCQl7CisrCQlS QU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX05PX0tFWV9TRVQpOworKwkJcmV0dXJuIDA7 CisrCQl9CisrCWlmICghY3R4LT5zZWVkZWQpCisrCQl7CisrCQlSQU5EZXJyKFJBTkRfRl9GSVBT X1JBTkQsUkFORF9SX1BSTkdfTk9UX1NFRURFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJZm9y ICg7OykKKysJCXsKKysJCWlmICghY3R4LT50ZXN0X21vZGUpCisrCQkJZmlwc19nZXRfZHQoY3R4 KTsKKysJCUFFU19lbmNyeXB0KGN0eC0+RFQsIEksICZjdHgtPmtzKTsKKysJCWZvciAoaSA9IDA7 IGkgPCBBRVNfQkxPQ0tfTEVOR1RIOyBpKyspCisrCQkJdG1wW2ldID0gSVtpXSBeIGN0eC0+Vltp XTsKKysJCUFFU19lbmNyeXB0KHRtcCwgUiwgJmN0eC0+a3MpOworKwkJZm9yIChpID0gMDsgaSA8 IEFFU19CTE9DS19MRU5HVEg7IGkrKykKKysJCQl0bXBbaV0gPSBSW2ldIF4gSVtpXTsKKysJCUFF U19lbmNyeXB0KHRtcCwgY3R4LT5WLCAmY3R4LT5rcyk7CisrCQkvKiBDb250aW51b3VzIFBSTkcg dGVzdCAqLworKwkJaWYgKGN0eC0+c2Vjb25kKQorKwkJCXsKKysJCQlpZiAoZmlwc19wcm5nX2Zh aWwpCisrCQkJCW1lbWNweShjdHgtPmxhc3QsIFIsIEFFU19CTE9DS19MRU5HVEgpOworKwkJCWlm ICghbWVtY21wKFIsIGN0eC0+bGFzdCwgQUVTX0JMT0NLX0xFTkdUSCkpCisrCQkJCXsKKysJICAg IAkJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19TVFVDSyk7CisrCQkJCWN0 eC0+ZXJyb3IgPSAxOworKwkJCQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7CisrCQkJCXJldHVy biAwOworKwkJCQl9CisrCQkJfQorKwkJbWVtY3B5KGN0eC0+bGFzdCwgUiwgQUVTX0JMT0NLX0xF TkdUSCk7CisrCQlpZiAoIWN0eC0+c2Vjb25kKQorKwkJCXsKKysJCQljdHgtPnNlY29uZCA9IDE7 CisrCQkJaWYgKCFjdHgtPnRlc3RfbW9kZSkKKysJCQkJY29udGludWU7CisrCQkJfQorKworKwkJ aWYgKG91dGxlbiA8PSBBRVNfQkxPQ0tfTEVOR1RIKQorKwkJCXsKKysJCQltZW1jcHkob3V0LCBS LCBvdXRsZW4pOworKwkJCWJyZWFrOworKwkJCX0KKysKKysJCW1lbWNweShvdXQsIFIsIEFFU19C TE9DS19MRU5HVEgpOworKwkJb3V0ICs9IEFFU19CTE9DS19MRU5HVEg7CisrCQlvdXRsZW4gLT0g QUVTX0JMT0NLX0xFTkdUSDsKKysJCX0KKysJcmV0dXJuIDE7CisrCX0KKysKKysKKytpbnQgRklQ U19yYW5kX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBGSVBTX1JBTkRfU0laRV9U IGtleWxlbikKKysJeworKwlpbnQgcmV0OworKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JB TkQpOworKwlyZXQgPSBmaXBzX3NldF9wcm5nX2tleSgmc2N0eCwga2V5LCBrZXlsZW4pOworKwlD UllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldHVybiByZXQ7CisrCX0KKysK KytpbnQgRklQU19yYW5kX3NlZWQoY29uc3Qgdm9pZCAqc2VlZCwgRklQU19SQU5EX1NJWkVfVCBz ZWVkbGVuKQorKwl7CisrCWludCByZXQ7CisrCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFO RCk7CisrCXJldCA9IGZpcHNfc2V0X3Bybmdfc2VlZCgmc2N0eCwgc2VlZCwgc2VlZGxlbik7Cisr CUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0dXJuIHJldDsKKysJfQor KworKworK2ludCBGSVBTX3JhbmRfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBGSVBTX1JBTkRf U0laRV9UIGNvdW50KQorKwl7CisrCWludCByZXQ7CisrCUNSWVBUT193X2xvY2soQ1JZUFRPX0xP Q0tfUkFORCk7CisrCXJldCA9IGZpcHNfcmFuZCgmc2N0eCwgb3V0LCBjb3VudCk7CisrCUNSWVBU T193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0dXJuIHJldDsKKysJfQorKworK2lu dCBGSVBTX3JhbmRfc3RhdHVzKHZvaWQpCisrCXsKKysJaW50IHJldDsKKysJQ1JZUFRPX3JfbG9j ayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0ID0gc2N0eC5zZWVkZWQ7CisrCUNSWVBUT19yX3Vu bG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0dXJuIHJldDsKKysJfQorKworK3ZvaWQgRklQ U19yYW5kX3Jlc2V0KHZvaWQpCisrCXsKKysJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5E KTsKKysJZmlwc19yYW5kX3BybmdfcmVzZXQoJnNjdHgpOworKwlDUllQVE9fd191bmxvY2soQ1JZ UFRPX0xPQ0tfUkFORCk7CisrCX0KKysKKytzdGF0aWMgdm9pZCBmaXBzX2RvX3JhbmRfc2VlZChj b25zdCB2b2lkICpzZWVkLCBGSVBTX1JBTkRfU0laRV9UIHNlZWRsZW4pCisrCXsKKysJRklQU19y YW5kX3NlZWQoc2VlZCwgc2VlZGxlbik7CisrCX0KKysKKytzdGF0aWMgdm9pZCBmaXBzX2RvX3Jh bmRfYWRkKGNvbnN0IHZvaWQgKnNlZWQsIEZJUFNfUkFORF9TSVpFX1Qgc2VlZGxlbiwKKysJCQkJ CWRvdWJsZSBhZGRfZW50cm9weSkKKysJeworKwlGSVBTX3JhbmRfc2VlZChzZWVkLCBzZWVkbGVu KTsKKysJfQorKworK3N0YXRpYyBjb25zdCBSQU5EX01FVEhPRCByYW5kX2ZpcHNfbWV0aD0KKysg ICAgeworKyAgICBmaXBzX2RvX3JhbmRfc2VlZCwKKysgICAgRklQU19yYW5kX2J5dGVzLAorKyAg ICBGSVBTX3JhbmRfcmVzZXQsCisrICAgIGZpcHNfZG9fcmFuZF9hZGQsCisrICAgIEZJUFNfcmFu ZF9ieXRlcywKKysgICAgRklQU19yYW5kX3N0YXR1cworKyAgICB9OworKworK2NvbnN0IFJBTkRf TUVUSE9EICpGSVBTX3JhbmRfbWV0aG9kKHZvaWQpCisreworKyAgcmV0dXJuICZyYW5kX2ZpcHNf bWV0aDsKKyt9CisrCisrI2VuZGlmCitkaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaAorLS0tIC9kZXYvbnVsbAkyMDA5LTExLTA0IDEy OjAwOjU4LjgwMTAwMjI3NiArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Zp cHMvZmlwc19yYW5kLmgJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0w LDAgKzEsNzcgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUg T3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysg KiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Cisr ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3Ns Lm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3Bl blNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBj b250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5T U0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhv dXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVj dC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11 c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisr ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUg UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaWZuZGVmIEhFQURF Ul9GSVBTX1JBTkRfSAorKyNkZWZpbmUgSEVBREVSX0ZJUFNfUkFORF9ICisrCisrI2luY2x1ZGUg ImRlcy5oIgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysjaWZkZWYgIF9fY3BsdXNwbHVz CisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisraW50IEZJUFNfcmFuZF9zZXRfa2V5KGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmtleSwgRklQU19SQU5EX1NJWkVfVCBrZXlsZW4pOworK2ludCBGSVBT X3JhbmRfc2VlZChjb25zdCB2b2lkICpidWYsIEZJUFNfUkFORF9TSVpFX1QgbnVtKTsKKytpbnQg RklQU19yYW5kX2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgRklQU19SQU5EX1NJWkVfVCBvdXRs ZW4pOworKworK2ludCBGSVBTX3JhbmRfdGVzdF9tb2RlKHZvaWQpOworK3ZvaWQgRklQU19yYW5k X3Jlc2V0KHZvaWQpOworK2ludCBGSVBTX3JhbmRfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KTsK KysKKytpbnQgRklQU19yYW5kX3N0YXR1cyh2b2lkKTsKKysKKytjb25zdCBSQU5EX01FVEhPRCAq RklQU19yYW5kX21ldGhvZCh2b2lkKTsKKysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisrfQorKyNl bmRpZgorKyNlbmRpZgorKyNlbmRpZgorZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMKKy0tLSAvZGV2L251bGwJMjAw OS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0 L2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAw MDAwMDAwICswMTAwCitAQCAtMCwwICsxLDM3MSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29w eXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgor KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwor KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5v cmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkg bm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIg aW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBv ZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFu eSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25v d2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQor KyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK KysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAq LworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysK KysKKysKKyt0eXBlZGVmIHN0cnVjdAorKwl7CisrCXVuc2lnbmVkIGNoYXIgRFRbMTZdOworKwl1 bnNpZ25lZCBjaGFyIFZbMTZdOworKwl1bnNpZ25lZCBjaGFyIFJbMTZdOworKwl9IEFFU19QUk5H X1RWOworKworKy8qIFRoZSBmb2xsb3dpbmcgdGVzdCB2ZWN0b3JzIGFyZSB0YWtlbiBkaXJlY3Rs eSBmcm9tIHRoZSBSR05WUyBzcGVjICovCisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzEy OF9rZXlbMTZdID0KKysJCXsweGYzLDB4YjEsMHg2NiwweDZkLDB4MTMsMHg2MCwweDcyLDB4NDIs CisrCQkgMHhlZCwweDA2LDB4MWMsMHhhYiwweGI4LDB4ZDQsMHg2MiwweDAyfTsKKysKKytzdGF0 aWMgQUVTX1BSTkdfVFYgYWVzXzEyOF90dltdID0geworKwl7CisrCQkJCS8qIERUICovCisrCQl7 MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAorKwkJIDB4ZDcsMHgxZCww eDRhLDB4ZmIsMHhiMCwweGU5LDB4MjIsMHhmOX0sCisrCQkJCS8qIFYgKi8KKysJCXsweDgwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4NTksMHg1MywweDFl LDB4ZDEsMHgzYiwweGIwLDB4YzAsMHg1NSwKKysJCSAweDg0LDB4NzksMHg2NiwweDg1LDB4YzEs MHgyZiwweDc2LDB4NDF9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweGU2LDB4YjMs MHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCisrCQkgMHhkNywweDFkLDB4NGEsMHhmYiww eGIwLDB4ZTksMHgyMiwweGZhfSwKKysJCQkJLyogViAqLworKwkJezB4YzAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHg3YywweDIyLDB4MmMsMHhmNCwweGNh LDB4OGYsMHhhMiwweDRjLAorKwkJIDB4MWMsMHg5YywweGI2LDB4NDEsMHhhOSwweGYzLDB4MjIs MHgwZH0KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZTYsMHhiMywweGJlLDB4Nzgs MHgyYSwweDIzLDB4ZmEsMHg2MiwKKysJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSww eDIyLDB4ZmJ9LAorKwkJCQkvKiBWICovCisrCQl7MHhlMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MH0sCisrCQkJCS8qIFIgKi8KKysJCXsweDhhLDB4YWEsMHgwMCwweDM5LDB4NjYsMHg2NywweDVi LDB4ZTUsCisrCQkgMHgyOSwweDE0LDB4MjgsMHg4MSwweGE5LDB4NGQsMHg0ZSwweGM3fQorKwl9 LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4MjMs MHhmYSwweDYyLAorKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4MjIsMHhmY30s CisrCQkJCS8qIFYgKi8KKysJCXsweGYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJ LyogUiAqLworKwkJezB4ODgsMHhkZCwweGE0LDB4NTYsMHgzMCwweDI0LDB4MjMsMHhlNSwKKysJ CSAweGY2LDB4OWQsMHhhNSwweDdlLDB4N2IsMHg5NSwweGM3LDB4M2F9CisrCX0sCisrCXsKKysJ CQkJLyogRFQgKi8KKysJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIs CisrCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMiwweGZkfSwKKysJCQkJLyog ViAqLworKwkJezB4ZjgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAw eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisr CQl7MHgwNSwweDI1LDB4OTIsMHg0NiwweDYxLDB4NzksMHhkMiwweGNiLAorKwkJIDB4NzgsMHhj NCwweDBiLDB4MTQsMHgwYSwweDVhLDB4OWEsMHhjOH0KKysJfSwKKysJeworKwkJCQkvKiBEVCAq LworKwkJezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKKysJCSAweGQ3 LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSwweDIzLDB4Nzd9LAorKwkJCQkvKiBWICovCisrCQl7 MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAorKwkJIDB4ZmYsMHhmZiww eGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZX0sCisrCQkJCS8qIFIgKi8KKysJCXsweDBkLDB4 ZDUsMHhhMCwweDM2LDB4N2EsMHg1OSwweDI2LDB4YmMsCisrCQkgMHg0OCwweGQ5LDB4MzgsMHhi ZiwweGYwLDB4ODUsMHg4ZiwweGVhfQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHhl NiwweGIzLDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAorKwkJIDB4ZDcsMHgxZCwweDRh LDB4ZmIsMHhiMCwweGU5LDB4MjMsMHg3OH0sCisrCQkJCS8qIFYgKi8KKysJCXsweGZmLDB4ZmYs MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCisrCQkgMHhmZiwweGZmLDB4ZmYsMHhmZiww eGZmLDB4ZmYsMHhmZiwweGZmfSwKKysJCQkJLyogUiAqLworKwkJezB4YWUsMHg1MywweDg3LDB4 ZWUsMHg4YywweGQ5LDB4MTIsMHhmNSwKKysJCSAweDczLDB4NTMsMHhhZSwweDAzLDB4ZjksMHhk NSwweDEzLDB4MzN9CisrCX0sCisrfTsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMTky X2tleVsyNF0gPQorKwkJezB4MTUsMHhkOCwweDc4LDB4MGQsMHg2MiwweGQzLDB4MjUsMHg2ZSwK KysJCSAweDQ0LDB4NjQsMHgxMCwweDEzLDB4NjAsMHgyYiwweGE5LDB4YmMsCisrCQkgMHg0YSww eGZiLDB4Y2EsMHhlYiwweDRjLDB4OGIsMHg5OSwweDNifTsKKysKKytzdGF0aWMgQUVTX1BSTkdf VFYgYWVzXzE5Ml90dltdID0geworKwl7CisrCQkJCS8qIERUICovCisrCQl7MHgzZiwweGQ4LDB4 ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMxLAorKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgy NCwweDc4LDB4ZjMsMHg0Yn0sCisrCQkJCS8qIFYgKi8KKysJCXsweDgwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4MTcsMHgwNywweGQ1LDB4MjgsMHgxOSww eDc5LDB4MWUsMHhlZiwKKysJCSAweGE1LDB4MGMsMHhiZiwweDI1LDB4ZTUsMHg1NiwweGI0LDB4 OTN9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4 ODAsMHg2OSwweDhiLDB4YzEsCisrCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhm MywweDRjfSwKKysJCQkJLyogViAqLworKwkJezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9 LAorKwkJCQkvKiBSICovCisrCQl7MHg5MiwweDhkLDB4YmUsMHgwNywweGRkLDB4YzcsMHg1OCww eGMwLAorKwkJIDB4NmYsMHgzNSwweDQxLDB4OWIsMHgxNywweGM5LDB4YmQsMHg5Yn0KKysJfSwK KysJeworKwkJCQkvKiBEVCAqLworKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5LDB4 OGIsMHhjMSwKKysJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4NGR9LAor KwkJCQkvKiBWICovCisrCQl7MHhlMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8q IFIgKi8KKysJCXsweGQ1LDB4ZGUsMHhmNCwweDUwLDB4ZjMsMHhiNywweDEwLDB4NGUsCisrCQkg MHhiOCwweGM2LDB4ZjgsMHhjZiwweGUyLDB4YjEsMHhjYSwweGEyfQorKwl9LAorKwl7CisrCQkJ CS8qIERUICovCisrCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMxLAor KwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMsMHg0ZX0sCisrCQkJCS8qIFYg Ki8KKysJCXsweGYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJ ezB4Y2UsMHgyOSwweDA4LDB4NDMsMHhmYywweDM0LDB4NDEsMHhlNywKKysJCSAweDQ3LDB4OGYs MHhiMywweDY2LDB4MmIsMHg0NiwweGIxLDB4YmJ9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8K KysJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCisrCQkgMHhiZiww eDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweDRmfSwKKysJCQkJLyogViAqLworKwkJezB4 ZjgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHhiMywweDI2 LDB4MGYsMHhmNSwweGQ2LDB4Y2EsMHhhOCwweGJmLAorKwkJIDB4ODksMHhiOCwweDVlLDB4MmYs MHgyMiwweDU2LDB4OTIsMHgyZn0KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4M2Ys MHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKKysJCSAweGJmLDB4OTksMHg3ZCww eGE0LDB4MjQsMHg3OCwweGYzLDB4Yzl9LAorKwkJCQkvKiBWICovCisrCQl7MHhmZiwweGZmLDB4 ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAorKwkJIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhm ZiwweGZmLDB4ZmYsMHhmZX0sCisrCQkJCS8qIFIgKi8KKysJCXsweDA1LDB4ZWIsMHgxOCwweDUy LDB4MzQsMHg0MywweDAwLDB4NDMsCisrCQkgMHg2ZSwweDVhLDB4YTUsMHhmZSwweDdiLDB4MzIs MHhjNCwweDJkfQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHgzZiwweGQ4LDB4ZmYs MHhlOCwweDgwLDB4NjksMHg4YiwweGMxLAorKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgyNCww eDc4LDB4ZjMsMHhjYX0sCisrCQkJCS8qIFYgKi8KKysJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4 ZmYsMHhmZiwweGZmLDB4ZmYsCisrCQkgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhm ZiwweGZmfSwKKysJCQkJLyogUiAqLworKwkJezB4MTUsMHgzYywweGU4LDB4ZDEsMHgwNCwweGM3 LDB4YWQsMHg1MCwKKysJCSAweDBiLDB4ZjAsMHgwNywweDE2LDB4ZTcsMHg1NiwweDdhLDB4ZWF9 CisrCX0sCisrfTsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMjU2X2tleVszMl0gPQor KwkJezB4NmQsMHgxNCwweDA2LDB4NmMsMHhiNiwweGQ4LDB4MjEsMHgyZCwKKysJCSAweDgyLDB4 OGQsMHhmYSwweGYyLDB4N2EsMHgwMywweGI3LDB4OWYsCisrCQkgMHgwYywweGM3LDB4M2UsMHhj ZCwweDc2LDB4ZWIsMHhlZSwweGI1LAorKwkJIDB4MjEsMHgwNSwweDhjLDB4NGYsMHgzMSwweDdh LDB4ODAsMHhiYn07CisrCisrc3RhdGljIEFFU19QUk5HX1RWIGFlc18yNTZfdHZbXSA9IHsKKysJ eworKwkJCQkvKiBEVCAqLworKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAs MHhkNSwKKysJCSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDllLDB4ODh9LAorKwkJ CQkvKiBWICovCisrCQl7MHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAor KwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIg Ki8KKysJCXsweDM1LDB4YzcsMHhlZiwweGE3LDB4NzgsMHg0ZCwweDI5LDB4YmMsCisrCQkgMHg4 MiwweDc5LDB4OTksMHhmYiwweGQwLDB4YjMsMHgzYiwweDcyfQorKwl9LAorKwl7CisrCQkJCS8q IERUICovCisrCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAorKwkJ IDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWUsMHg4OX0sCisrCQkJCS8qIFYgKi8K KysJCXsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4 NmMsMHhmNCwweDQyLDB4NWQsMHhjNywweDA0LDB4MWEsMHg0MSwKKysJCSAweDI4LDB4MmEsMHg3 OCwweGE5LDB4YjAsMHgxMiwweGM0LDB4OTV9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJ CXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCisrCQkgMHhmMiwweGE5 LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZSwweDhhfSwKKysJCQkJLyogViAqLworKwkJezB4ZTAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHgxNiwweDkwLDB4 YTQsMHhmZiwweDdiLDB4N2UsMHhiOSwweDMwLAorKwkJIDB4ZGIsMHg2NywweDRiLDB4YWMsMHgy ZCwweGUxLDB4ZDEsMHg3NX0KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZGEsMHgz YSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKKysJCSAweGYyLDB4YTksMHg0ZSwweDM0 LDB4NzQsMHg4ZSwweDllLDB4OGJ9LAorKwkJCQkvKiBWICovCisrCQl7MHhmMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweDE0LDB4NmYsMHhmNSwweDk1LDB4 YTEsMHg0NiwweDY1LDB4MzAsCisrCQkgMHhiYywweDU3LDB4ZTIsMHg0YSwweGY3LDB4NDUsMHg2 MiwweDA1fQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHhkYSwweDNhLDB4NDEsMHhl YywweDFkLDB4YTMsMHhiMCwweGQ1LAorKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhl LDB4OWUsMHg4Y30sCisrCQkJCS8qIFYgKi8KKysJCXsweGY4LDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4OTYsMHhlMiwweGI0LDB4MWUsMHg2NiwweDVlLDB4 MGYsMHhhNCwKKysJCSAweGM1LDB4Y2QsMHhhMiwweDA3LDB4Y2MsMHhiNywweDk0LDB4NDB9Cisr CX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhh MywweGIwLDB4ZDUsCisrCQkgMHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZiwweDA2 fSwKKysJCQkJLyogViAqLworKwkJezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYs MHhmZiwKKysJCSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmV9LAorKwkJ CQkvKiBSICovCisrCQl7MHg2MSwweGNlLDB4MWQsMHg2YSwweDQ4LDB4NzUsMHg5NywweDI4LAor KwkJIDB4NGIsMHg0MSwweGRlLDB4MTgsMHg0NCwweDRmLDB4NTYsMHhlY30KKysJfSwKKysJewor KwkJCQkvKiBEVCAqLworKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhk NSwKKysJCSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDlmLDB4MDd9LAorKwkJCQkv KiBWICovCisrCQl7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAorKwkJ IDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZn0sCisrCQkJCS8qIFIgKi8K KysJCXsweDUyLDB4ODksMHg1OSwweDc5LDB4MmQsMHhhYSwweDI4LDB4YjMsCisrCQkgMHhiMCww eDhhLDB4M2UsMHg3MCwweGZhLDB4NzEsMHg1OSwweDg0fQorKwl9LAorK307CisrCisrCisrdm9p ZCBGSVBTX2NvcnJ1cHRfcm5nKCkKKysgICAgeworKyAgICBhZXNfMTkyX3R2WzBdLlZbMF0rKzsK KysgICAgfQorKworKyNkZWZpbmUgZmlwc19yYW5kX3Rlc3Qoa2V5LCB0dikgXAorKwlkb19yYW5k X3Rlc3Qoa2V5LCBzaXplb2Yga2V5LCB0diwgc2l6ZW9mKHR2KS9zaXplb2YoQUVTX1BSTkdfVFYp KQorKworK3N0YXRpYyBpbnQgZG9fcmFuZF90ZXN0KHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtl eWxlbiwKKysJCQlBRVNfUFJOR19UViAqdHYsIGludCBudHYpCisrCXsKKysJdW5zaWduZWQgY2hh ciBSWzE2XTsKKysJaW50IGk7CisrCWlmICghRklQU19yYW5kX3NldF9rZXkoa2V5LCBrZXlsZW4p KQorKwkJcmV0dXJuIDA7CisrCWZvciAoaSA9IDA7IGkgPCBudHY7IGkrKykKKysJCXsKKysJCUZJ UFNfcmFuZF9zZWVkKHR2W2ldLlYsIDE2KTsKKysJCUZJUFNfcmFuZF9zZXRfZHQodHZbaV0uRFQp OworKwkJRklQU19yYW5kX2J5dGVzKFIsIDE2KTsKKysJCWlmIChtZW1jbXAoUiwgdHZbaV0uUiwg MTYpKQorKwkJCXJldHVybiAwOworKwkJfQorKwlyZXR1cm4gMTsKKysJfQorKwkKKysKKytpbnQg RklQU19zZWxmdGVzdF9ybmcoKQorKwl7CisrCUZJUFNfcmFuZF9yZXNldCgpOworKwlpZiAoIUZJ UFNfcmFuZF90ZXN0X21vZGUoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRF U1RfUk5HLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWlm ICghZmlwc19yYW5kX3Rlc3QoYWVzXzEyOF9rZXksYWVzXzEyOF90dikKKysJCXx8ICFmaXBzX3Jh bmRfdGVzdChhZXNfMTkyX2tleSwgYWVzXzE5Ml90dikKKysJCXx8ICFmaXBzX3JhbmRfdGVzdChh ZXNfMjU2X2tleSwgYWVzXzI1Nl90dikpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NF TEZURVNUX1JORyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJCXJldHVybiAwOworKwkJfQor KwlGSVBTX3JhbmRfcmVzZXQoKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKysjZW5kaWYKK2RpZmYg LXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2ZpcHNfcmFuZHRl c3QuYworLS0tIC9kZXYvbnVsbAkyMDA5LTExLTA0IDEyOjAwOjU4LjgwMTAwMjI3NiArMDEwMAor KysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jCTIwMDkt MTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDI0OCBAQAorKy8qIENv cHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorKyAq IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGlt cGxlbWVudGF0aW9uIHdyaXR0ZW4KKysgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNv bSkuCisrICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0g d2l0aCBOZXRzY2FwZXMgU1NMLgorKyAqIAorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBj b21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworKyAqIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cworKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBp dCB0aGUgUkM0LCBSU0EsCisrICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhl IFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisrICogaW5jbHVkZWQgd2l0aCB0aGlz IGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworKyAq IGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20p LgorKyAqIAorKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2gg YW55IENvcHlyaWdodCBub3RpY2VzIGluCisrICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1v dmVkLgorKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3Vu ZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKysgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBw YXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9m IGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorKyAqIGluIGRvY3VtZW50 YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorKyAq IAorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKysg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisrICogICAgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry aWJ1dGlvbi4KKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh dHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKysgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZv bGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBj cnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKysgKiAgICAgRXJpYyBZb3VuZyAoZWF5 QGNyeXB0c29mdC5jb20pIgorKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUg bGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorKyAqICAgIGJlaW5nIHVz ZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorKyAqIDQuIElmIHlvdSBpbmNs dWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBm cm9tIAorKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11 c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIK KysgKiAKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJ UycnIEFORAorKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisrICogQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUKKysgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorKyAqIERBTUFHRVMgKElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisr ICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKysgKiBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg V0FZCisrICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE IE9GIFRIRSBQT1NTSUJJTElUWSBPRgorKyAqIFNVQ0ggREFNQUdFLgorKyAqIAorKyAqIFRoZSBs aWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJs ZSB2ZXJzaW9uIG9yCisrICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5n ZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisrICogY29waWVkIGFuZCBwdXQg dW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorKyAqIFtpbmNsdWRpbmcgdGhlIEdO VSBQdWJsaWMgTGljZW5jZS5dCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQg KGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoK KysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K KysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlz aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAg c29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6 Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29s a2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo b3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNz aW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysg KgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUg Y2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVp ciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBP cGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0g d2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQ UkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV VAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S IFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE CisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisr I2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJp bmcuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysKKysjaW5jbHVkZSAiZV9vcy5oIgorKworKyNp Zm5kZWYgT1BFTlNTTF9GSVBTCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7 CisrICAgIHByaW50ZigiTm8gRklQUyBSQU5EIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7 CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrdHlwZWRlZiBz dHJ1Y3QKKysJeworKwl1bnNpZ25lZCBjaGFyIERUWzE2XTsKKysJdW5zaWduZWQgY2hhciBWWzE2 XTsKKysJdW5zaWduZWQgY2hhciBSWzE2XTsKKysJfSBBRVNfUFJOR19NQ1Q7CisrCisrc3RhdGlj IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9tY3Rfa2V5WzE2XSA9CisrCXsweDlmLDB4NWIsMHg1MSww eDIwLDB4MGIsMHhmMywweDM0LDB4YjUsCisrCSAweGQ4LDB4MmIsMHhlOCwweGMzLDB4NzIsMHg1 NSwweGM4LDB4NDh9OworKworK3N0YXRpYyBBRVNfUFJOR19NQ1QgYWVzXzEyOF9tY3RfdHYgPSB7 CisrCQkJLyogRFQgKi8KKysJezB4NjMsMHg3NiwweGJiLDB4ZTUsMHgyOSwweDAyLDB4YmEsMHgz YiwKKysJIDB4NjcsMHhjOSwweDI1LDB4ZmEsMHg3MCwweDFmLDB4MTEsMHhhY30sCisrCQkJLyog ViAqLworKwl7MHg1NywweDJjLDB4OGUsMHg3NiwweDg3LDB4MjYsMHg0NywweDk3LAorKwkgMHg3 ZSwweDc0LDB4ZmIsMHhkZCwweGM0LDB4OTUsMHgwMSwweGQxfSwKKysJCQkvKiBSICovCisrCXsw eDQ4LDB4ZTksMHhiZCwweDBkLDB4MDYsMHhlZSwweDE4LDB4ZmIsCisrCSAweGU0LDB4NTcsMHg5 MCwweGQ1LDB4YzMsMHhmYywweDliLDB4NzN9CisrfTsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hh ciBhZXNfMTkyX21jdF9rZXlbMjRdID0KKysJezB4YjcsMHg2YywweDM0LDB4ZDEsMHgwOSwweDY3 LDB4YWIsMHg3MywKKysJIDB4NGQsMHg1YSwweGQ1LDB4MzQsMHg5OCwweDE2LDB4MGIsMHg5MSwK KysJIDB4YmMsMHgzNSwweDUxLDB4MTYsMHg2YiwweGFlLDB4OTMsMHg4YX07CisrCisrc3RhdGlj IEFFU19QUk5HX01DVCBhZXNfMTkyX21jdF90diA9IHsKKysJCQkvKiBEVCAqLworKwl7MHg4NCww eGNlLDB4MjIsMHg3ZCwweDkxLDB4NWEsMHhhMywweGM5LAorKwkgMHg4NCwweDNjLDB4MGEsMHhi MywweGE5LDB4NjMsMHgxNSwweDUyfSwKKysJCQkvKiBWICovCisrCXsweGI2LDB4YWYsMHhlNiww eDhmLDB4OTksMHg5ZSwweDkwLDB4NjQsCisrCSAweGRkLDB4YzcsMHg3YSwweGMxLDB4YmIsMHg5 MCwweDNhLDB4NmR9LAorKwkJCS8qIFIgKi8KKysJezB4ZmMsMHg4NSwweDYwLDB4OWEsMHgyOSww eDZmLDB4ZWYsMHgyMSwKKysJIDB4ZGQsMHg4NiwweDIwLDB4MzIsMHg4YSwweDI5LDB4NmYsMHg0 N30KKyt9OworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbWN0X2tleVszMl0gPQor Kwl7MHg5YiwweDA1LDB4YzgsMHg2OCwweGZmLDB4NDcsMHhmOCwweDNhLAorKwkgMHhhNiwweDNh LDB4YTgsMHhjYiwweDRlLDB4NzEsMHhiMiwweGUwLAorKwkgMHhiOCwweDdlLDB4ZjEsMHgzNyww eGI2LDB4YjQsMHhmNiwweDZkLAorKwkgMHg4NiwweDMyLDB4ZmMsMHgxZiwweDVlLDB4MWQsMHgx ZSwweDUwfTsKKysKKytzdGF0aWMgQUVTX1BSTkdfTUNUIGFlc18yNTZfbWN0X3R2ID0geworKwkJ CS8qIERUICovCisrCXsweDMxLDB4NmUsMHgzNSwweDlhLDB4YjEsMHg0NCwweGYwLDB4ZWUsCisr CSAweDYyLDB4NmQsMHgwNCwweDQ2LDB4ZTAsMHhhMywweDkyLDB4NGN9LAorKwkJCS8qIFYgKi8K KysJezB4NGYsMHhjZCwweGMxLDB4ODcsMHg4MiwweDFmLDB4NGQsMHhhMSwKKysJIDB4M2UsMHgw ZSwweDU2LDB4NDQsMHg1OSwweGU4LDB4ODMsMHhjYX0sCisrCQkJLyogUiAqLworKwl7MHhjOCww eDg3LDB4YzIsMHg2MSwweDViLDB4ZDAsMHhiOSwweGUxLAorKwkgMHhlNywweGYzLDB4OGIsMHhk NywweDViLDB4ZDUsMHhmMSwweDhkfQorK307CisrCisrc3RhdGljIHZvaWQgZHVtcChjb25zdCB1 bnNpZ25lZCBjaGFyICpiLGludCBuKQorKyAgICB7CisrICAgIHdoaWxlKG4tLSA+IDApCisrCXsK KysJcHJpbnRmKCIgJTAyeCIsKmIrKyk7CisrCX0KKysgICAgfQorKworK3N0YXRpYyB2b2lkIGNv bXBhcmUoY29uc3QgdW5zaWduZWQgY2hhciAqcmVzdWx0LGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4 cGVjdGVkLAorKwkJICAgIGludCBuKQorKyAgICB7CisrICAgIGludCBpOworKworKyAgICBmb3Io aT0wIDsgaSA8IG4gOyArK2kpCisrCWlmKHJlc3VsdFtpXSAhPSBleHBlY3RlZFtpXSkKKysJICAg IHsKKysJICAgIHB1dHMoIlJhbmRvbSB0ZXN0IGZhaWxlZCwgZ290OiIpOworKwkgICAgZHVtcChy ZXN1bHQsbik7CisrCSAgICBwdXRzKCJcbiAgICAgICAgICAgICAgIGV4cGVjdGVkOiIpOworKwkg ICAgZHVtcChleHBlY3RlZCxuKTsKKysJICAgIHB1dGNoYXIoJ1xuJyk7CisrCSAgICBFWElUKDEp OworKwkgICAgfQorKyAgICB9CisrCisrCisrc3RhdGljIHZvaWQgcnVuX3Rlc3QodW5zaWduZWQg Y2hhciAqa2V5LCBpbnQga2V5bGVuLCBBRVNfUFJOR19NQ1QgKnR2KQorKyAgICB7CisrICAgIHVu c2lnbmVkIGNoYXIgYnVmWzE2XSwgZHRbMTZdOworKyAgICBpbnQgaSwgajsKKysgICAgRklQU19y YW5kX3Jlc2V0KCk7CisrICAgIEZJUFNfcmFuZF90ZXN0X21vZGUoKTsKKysgICAgRklQU19yYW5k X3NldF9rZXkoa2V5LCBrZXlsZW4pOworKyAgICBGSVBTX3JhbmRfc2VlZCh0di0+ViwgMTYpOwor KyAgICBtZW1jcHkoZHQsIHR2LT5EVCwgMTYpOworKyAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDA7 IGkrKykKKysJeworKyAgICAJRklQU19yYW5kX3NldF9kdChkdCk7CisrCUZJUFNfcmFuZF9ieXRl cyhidWYsIDE2KTsKKysJLyogSW5jcmVtZW50IERUICovCisrCWZvciAoaiA9IDE1OyBqID49IDA7 IGotLSkKKysJCXsKKysJCWR0W2pdKys7CisrCQlpZiAoZHRbal0pCisrCQkJYnJlYWs7CisrCQl9 CisrCX0KKysKKysgICAgY29tcGFyZShidWYsdHYtPlIsIDE2KTsKKysgICAgfQorKworK2ludCBt YWluKCkKKysJeworKwlydW5fdGVzdChhZXNfMTI4X21jdF9rZXksIDE2LCAmYWVzXzEyOF9tY3Rf dHYpOworKwlwcmludGYoIkZJUFMgUFJORyB0ZXN0IDEgZG9uZVxuIik7CisrCXJ1bl90ZXN0KGFl c18xOTJfbWN0X2tleSwgMjQsICZhZXNfMTkyX21jdF90dik7CisrCXByaW50ZigiRklQUyBQUk5H IHRlc3QgMiBkb25lXG4iKTsKKysJcnVuX3Rlc3QoYWVzXzI1Nl9tY3Rfa2V5LCAzMiwgJmFlc18y NTZfbWN0X3R2KTsKKysJcHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAzIGRvbmVcbiIpOworKwlyZXR1 cm4gMDsKKysJfQorKworKyNlbmRpZgorZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYworLS0tIC9kZXYvbnVsbAkyMDA5 LTExLTA0IDEyOjAwOjU4LjgwMTAwMjI3NiArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAw MDAwMCArMDEwMAorQEAgLTAsMCArMSw0MzkgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHly aWdodCAoYykgMjAwMy0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysg KgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdt ZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9w ZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8K KysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0 ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNz bC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBt YXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBl YXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lv biBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9m IGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFj a25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFO WQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICog QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgor KyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysK KytzdGF0aWMgdW5zaWduZWQgY2hhciBuW10gPQorKyJceDAwXHhCQlx4RjhceDJGXHgwOVx4MDZc eDgyXHhDRVx4OUNceDIzXHgzOFx4QUNceDJCXHg5RFx4QThceDcxIgorKyJceEY3XHgzNlx4OERc eDA3XHhFRVx4RDRceDEwXHg0M1x4QTRceDQwXHhENlx4QjZceEYwXHg3NFx4NTRceEY1IgorKyJc eDFGXHhCOFx4REZceEJBXHhBRlx4MDNceDVDXHgwMlx4QUJceDYxXHhFQVx4NDhceENFXHhFQlx4 NkZceENEIgorKyJceDQ4XHg3Nlx4RURceDUyXHgwRFx4NjBceEUxXHhFQ1x4NDZceDE5XHg3MVx4 OURceDhBXHg1Qlx4OEJceDgwIgorKyJceDdGXHhBRlx4QjhceEUwXHhBM1x4REZceEM3XHgzN1x4 NzJceDNFXHhFNlx4QjRceEI3XHhEOVx4M0FceDI1IgorKyJceDg0XHhFRVx4NkFceDY0XHg5RFx4 MDZceDA5XHg1M1x4NzRceDg4XHgzNFx4QjJceDQ1XHg0NVx4OThceDM5IgorKyJceDRFXHhFMFx4 QUFceEIxXHgyRFx4N0JceDYxXHhBNVx4MUZceDUyXHg3QVx4OUFceDQxXHhGNlx4QzFceDY4Igor KyJceDdGXHhFMlx4NTNceDcyXHg5OFx4Q0FceDJBXHg4Rlx4NTlceDQ2XHhGOFx4RTVceEZEXHgw OVx4MURceEJEIgorKyJceENCIjsKKysKKysKKytzdGF0aWMgaW50IHNldHJzYWtleShSU0EgKmtl eSkKKysgICAgeworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlW10gPSAiXHgxMSI7 CisrCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRbXSA9CisrIlx4MDBceEE1XHhE QVx4RkNceDUzXHg0MVx4RkFceEYyXHg4OVx4QzRceEI5XHg4OFx4REJceDMwXHhDMVx4Q0QiCisr Ilx4RjhceDNGXHgzMVx4MjVceDFFXHgwNlx4NjhceEI0XHgyN1x4ODRceDgxXHgzOFx4MDFceDU3 XHg5Nlx4NDEiCisrIlx4QjJceDk0XHgxMFx4QjNceEM3XHg5OVx4OERceDZCXHhDNFx4NjVceDc0 XHg1RVx4NUNceDM5XHgyNlx4NjkiCisrIlx4RDZceDg3XHgwRFx4QTJceEMwXHg4Mlx4QTlceDM5 XHhFM1x4N0ZceERDXHhCOFx4MkVceEM5XHgzRVx4REEiCisrIlx4QzlceDdGXHhGM1x4QURceDU5 XHg1MFx4QUNceENGXHhCQ1x4MTFceDFDXHg3Nlx4RjFceEE5XHg1Mlx4OTQiCisrIlx4NDRceEU1 XHg2QVx4QUZceDY4XHhDNVx4NkNceDA5XHgyQ1x4RDNceDhEXHhDM1x4QkVceEY1XHhEMlx4MEEi CisrIlx4OTNceDk5XHgyNlx4RURceDRGXHg3NFx4QTFceDNFXHhERFx4RkJceEUxXHhBMVx4Q0Vc eENDXHg0OFx4OTQiCisrIlx4QUZceDk0XHgyOFx4QzJceEI3XHhCOFx4ODhceDNGXHhFNFx4NDZc eDNBXHg0Qlx4QzhceDVCXHgxQ1x4QjMiCisrIlx4QzEiOworKworKyAgICBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBwW10gPQorKyJceDAwXHhFRVx4Q0ZceEFFXHg4MVx4QjFceEI5XHhCM1x4 QzlceDA4XHg4MVx4MEJceDEwXHhBMVx4QjVceDYwIgorKyJceDAxXHg5OVx4RUJceDlGXHg0NFx4 QUVceEY0XHhGRFx4QTRceDkzXHhCOFx4MUFceDlFXHgzRFx4ODRceEY2IgorKyJceDMyXHgxMlx4 NEVceEYwXHgyM1x4NkVceDVEXHgxRVx4M0JceDdFXHgyOFx4RkFceEU3XHhBQVx4MDRceDBBIgor KyJceDJEXHg1Qlx4MjVceDIxXHg3Nlx4NDVceDlEXHgxRlx4MzlceDc1XHg0MVx4QkFceDJBXHg1 OFx4RkJceDY1IgorKyJceDk5IjsKKysKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg cVtdID0KKysiXHgwMFx4QzlceDdGXHhCMVx4RjBceDI3XHhGNFx4NTNceEY2XHgzNFx4MTJceDMz XHhFQVx4QUFceEQxXHhEOSIKKysiXHgzNVx4M0ZceDZDXHg0Mlx4RDBceDg4XHg2Nlx4QjFceEQw XHg1QVx4MEZceDIwXHgzNVx4MDJceDhCXHg5RCIKKysiXHg4Nlx4OThceDQwXHhCNFx4MTZceDY2 XHhCNFx4MkVceDkyXHhFQVx4MERceEEzXHhCNFx4MzJceDA0XHhCNSIKKysiXHhDRlx4Q0VceDMz XHg1Mlx4NTJceDREXHgwNFx4MTZceEE1XHhBNFx4NDFceEU3XHgwMFx4QUZceDQ2XHgxNSIKKysi XHgwMyI7CisrCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRtcDFbXSA9CisrIlx4 NTRceDQ5XHg0Q1x4QTZceDNFXHhCQVx4MDNceDM3XHhFNFx4RTJceDQwXHgyM1x4RkNceEQ2XHg5 QVx4NUEiCisrIlx4RUJceDA3XHhERFx4RENceDAxXHg4M1x4QTRceEQwXHhBQ1x4OUJceDU0XHhC MFx4NTFceEYyXHhCMVx4M0UiCisrIlx4RDlceDQ5XHgwOVx4NzVceEVBXHhCN1x4NzRceDE0XHhG Rlx4NTlceEMxXHhGN1x4NjlceDJFXHg5QVx4MkUiCisrIlx4MjBceDJCXHgzOFx4RkNceDkxXHgw QVx4NDdceDQxXHg3NFx4QURceEM5XHgzQ1x4MUZceDY3XHhDOVx4ODEiOworKworKyAgICBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBkbXExW10gPQorKyJceDQ3XHgxRVx4MDJceDkwXHhGRlx4 MEFceEYwXHg3NVx4MDNceDUxXHhCN1x4RjhceDc4XHg4Nlx4NENceEE5IgorKyJceDYxXHhBRFx4 QkRceDNBXHg4QVx4N0VceDk5XHgxQ1x4NUNceDA1XHg1Nlx4QTlceDRDXHgzMVx4NDZceEE3Igor KyJceEY5XHg4MFx4M0ZceDhGXHg2Rlx4OEFceEUzXHg0Mlx4RTlceDMxXHhGRFx4OEFceEU0XHg3 QVx4MjJceDBEIgorKyJceDFCXHg5OVx4QTRceDk1XHg4NFx4OThceDA3XHhGRVx4MzlceEY5XHgy NFx4NUFceDk4XHgzNlx4REFceDNEIjsKKysgICAgCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGlxbXBbXSA9CisrIlx4MDBceEIwXHg2Q1x4NEZceERBXHhCQlx4NjNceDAxXHgxOVx4 OERceDI2XHg1Qlx4REJceEFFXHg5NFx4MjMiCisrIlx4QjNceDgwXHhGMlx4NzFceEY3XHgzNFx4 NTNceDg4XHg1MFx4OTNceDA3XHg3Rlx4Q0RceDM5XHhFMlx4MTEiCisrIlx4OUZceEM5XHg4Nlx4 MzJceDE1XHg0Rlx4NThceDgzXHhCMVx4NjdceEE5XHg2N1x4QkZceDQwXHgyQlx4NEUiCisrIlx4 OUVceDJFXHgwRlx4OTZceDU2XHhFNlx4OThceEVBXHgzNlx4NjZceEVEXHhGQlx4MjVceDc5XHg4 MFx4MzkiCisrIlx4RjciOworKworKyAgICBrZXktPm4gPSBCTl9iaW4yYm4obiwgc2l6ZW9mKG4p LTEsIGtleS0+bik7CisrICAgIGtleS0+ZSA9IEJOX2JpbjJibihlLCBzaXplb2YoZSktMSwga2V5 LT5lKTsKKysgICAga2V5LT5kID0gQk5fYmluMmJuKGQsIHNpemVvZihkKS0xLCBrZXktPmQpOwor KyAgICBrZXktPnAgPSBCTl9iaW4yYm4ocCwgc2l6ZW9mKHApLTEsIGtleS0+cCk7CisrICAgIGtl eS0+cSA9IEJOX2JpbjJibihxLCBzaXplb2YocSktMSwga2V5LT5xKTsKKysgICAga2V5LT5kbXAx ID0gQk5fYmluMmJuKGRtcDEsIHNpemVvZihkbXAxKS0xLCBrZXktPmRtcDEpOworKyAgICBrZXkt PmRtcTEgPSBCTl9iaW4yYm4oZG1xMSwgc2l6ZW9mKGRtcTEpLTEsIGtleS0+ZG1xMSk7CisrICAg IGtleS0+aXFtcCA9IEJOX2JpbjJibihpcW1wLCBzaXplb2YoaXFtcCktMSwga2V5LT5pcW1wKTsK KysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKyt2b2lkIEZJUFNfY29ycnVwdF9yc2EoKQorKyAg ICB7CisrICAgIG5bMF0rKzsKKysgICAgfQorKworKy8qIEtub3duIEFuc3dlciBUZXN0IChLQVQp IGRhdGEgZm9yIHRoZSBhYm92ZSBSU0EgcHJpdmF0ZSBrZXkgc2lnbmluZworKyAqIGthdF90YnMu CisrICovCisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X3Ric1tdID0gIk9wZW5T U0wgRklQUyAxNDAtMiBQdWJsaWMgS2V5IFJTQSBLQVQiOworKworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTFbXSA9IHsKKysgIDB4MkQsIDB4QUYsIDB4NkUsIDB4 QzIsIDB4OTgsIDB4RkIsIDB4OEEsIDB4QTEsIDB4QjksIDB4NDYsIDB4REEsIDB4MEYsCisrICAw eDAxLCAweDFFLCAweDM3LCAweDkzLCAweEMyLCAweDU1LCAweDI3LCAweEU0LCAweDFELCAweEQy LCAweDkwLCAweEJCLAorKyAgMHhGNCwgMHhCRiwgMHg0QSwgMHg3NCwgMHgzOSwgMHg1MSwgMHhC QiwgMHhFOCwgMHgwQywgMHhCNywgMHhGOCwgMHhEMywKKysgIDB4RDEsIDB4REYsIDB4RTcsIDB4 QkUsIDB4ODAsIDB4MDUsIDB4QzMsIDB4QjUsIDB4QzcsIDB4ODMsIDB4RDUsIDB4NEMsCisrICAw eDdGLCAweDQ5LCAweEZCLCAweDNGLCAweDI5LCAweDlCLCAweEUxLCAweDEyLCAweDUxLCAweDYw LCAweEQwLCAweEE3LAorKyAgMHgwRCwgMHhBOSwgMHgyOCwgMHg1NiwgMHg3MywgMHhEOSwgMHgw NywgMHhFMywgMHg1RSwgMHgzRiwgMHg5QiwgMHhGNSwKKysgIDB4QjYsIDB4RjMsIDB4RjIsIDB4 NUUsIDB4NzQsIDB4QzksIDB4ODMsIDB4ODEsIDB4NDcsIDB4RjAsIDB4QzUsIDB4NDUsCisrICAw eDBBLCAweEU5LCAweDhFLCAweDM4LCAweEQ3LCAweDE4LCAweEM2LCAweDJBLCAweDBGLCAweEY4 LCAweEI3LCAweDMxLAorKyAgMHhENiwgMHg1NSwgMHhFNCwgMHg2NiwgMHg3OCwgMHg4MSwgMHhE NCwgMHhFNiwgMHhEQiwgMHg5RiwgMHhCQSwgMHhFOCwKKysgIDB4MjMsIDB4QjUsIDB4N0YsIDB4 REMsIDB4MDgsIDB4RUEsIDB4RDUsIDB4MjYsIDB4MUUsIDB4MjAsIDB4MjUsIDB4ODQsCisrICAw eDI2LCAweEM2LCAweDc5LCAweEM5LCAweDlCLCAweDNELCAweDdFLCAweEE5CisrfTsKKysKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEyMjRbXSA9IHsKKysgIDB4 MzksIDB4NEEsIDB4NkEsIDB4MjAsIDB4QkMsIDB4RTksIDB4MzMsIDB4RUQsIDB4RUYsIDB4QzUs IDB4NTgsIDB4QTcsCisrICAweEZFLCAweDgxLCAweEM0LCAweDM2LCAweDUwLCAweDlBLCAweDJD LCAweDgyLCAweDk4LCAweDA4LCAweDk1LCAweEZBLAorKyAgMHhCMSwgMHg5RSwgMHhEMiwgMHg1 NSwgMHg2MSwgMHg4NywgMHgyMSwgMHg1OSwgMHg4NywgMHg3QiwgMHgxRiwgMHg1NywKKysgIDB4 MzAsIDB4OUQsIDB4MEQsIDB4NEEsIDB4MDYsIDB4RUIsIDB4NTIsIDB4MzcsIDB4NTUsIDB4NTQs IDB4MUMsIDB4ODksCisrICAweDgzLCAweDc1LCAweDU5LCAweDY1LCAweDY0LCAweDkwLCAweDJF LCAweDE2LCAweENDLCAweDg2LCAweDA1LCAweEVFLAorKyAgMHhCMSwgMHhFNiwgMHg3QiwgMHhC QSwgMHgxNiwgMHg3NSwgMHgwRCwgMHgwQywgMHg2NCwgMHgwQiwgMHhBQiwgMHgyMiwKKysgIDB4 MTUsIDB4NzgsIDB4NkIsIDB4NkYsIDB4QTQsIDB4RkIsIDB4NzcsIDB4NDAsIDB4NjQsIDB4NjIs IDB4RDEsIDB4QjUsCisrICAweDM3LCAweDFFLCAweEUwLCAweDNELCAweEE4LCAweEY5LCAweEQy LCAweEJELCAweEFBLCAweDM4LCAweDI0LCAweDQ5LAorKyAgMHg1OCwgMHhEMiwgMHg3NCwgMHg4 NSwgMHhGNCwgMHhCNSwgMHg5MywgMHg4RSwgMHhGNSwgMHgwMywgMHhFQSwgMHgyRCwKKysgIDB4 QzgsIDB4NTIsIDB4RkEsIDB4Q0YsIDB4N0UsIDB4MzUsIDB4QjAsIDB4NkEsIDB4QUYsIDB4OTUs IDB4QzAsIDB4MDAsCisrICAweDU0LCAweDc2LCAweDNELCAweDBDLCAweDlDLCAweEIyLCAweEVF LCAweEMwCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19T SEEyNTZbXSA9IHsKKysgIDB4NkQsIDB4M0QsIDB4QkUsIDB4OEYsIDB4NjAsIDB4NkQsIDB4MjUs IDB4MTQsIDB4RjAsIDB4MzEsIDB4RTMsIDB4ODksCisrICAweDAwLCAweDk3LCAweEZBLCAweDk5 LCAweDcxLCAweDI4LCAweEU1LCAweDEwLCAweDI1LCAweDlBLCAweEYzLCAweDhGLAorKyAgMHg3 QiwgMHhDNSwgMHhBOCwgMHg0QSwgMHg3NCwgMHg1MSwgMHgzNiwgMHhFMiwgMHg4RCwgMHg3RCwg MHg3MywgMHgyOCwKKysgIDB4QzEsIDB4NzcsIDB4QzYsIDB4MjcsIDB4OTcsIDB4MDAsIDB4OEIs IDB4MDAsIDB4QTMsIDB4OTYsIDB4NzMsIDB4NEUsCisrICAweDdELCAweDJFLCAweDJDLCAweDM0 LCAweDY4LCAweDhDLCAweDhFLCAweERGLCAweDlELCAweDQ5LCAweDQ3LCAweDA1LAorKyAgMHhB QiwgMHhGNSwgMHgwMSwgMHhENiwgMHg4MSwgMHg0NywgMHg3MCwgMHhGNSwgMHgxRCwgMHg2RCwg MHgyNiwgMHhCQSwKKysgIDB4MkYsIDB4N0EsIDB4NTQsIDB4NTMsIDB4NEUsIDB4RUQsIDB4NzEs IDB4RDksIDB4NUEsIDB4RjMsIDB4REEsIDB4QjYsCisrICAweDBCLCAweDQ3LCAweDM0LCAweEFG LCAweDkwLCAweERDLCAweEM4LCAweEQ5LCAweDZGLCAweDU2LCAweENELCAweDlGLAorKyAgMHgy MSwgMHhCNywgMHg3RSwgMHhBRCwgMHg3QywgMHgyRiwgMHg3NSwgMHg1MCwgMHg0NywgMHgxMiwg MHhFNCwgMHg2RCwKKysgIDB4NUYsIDB4QjcsIDB4MDEsIDB4REYsIDB4QzMsIDB4MTEsIDB4NkMs IDB4QTksIDB4OUUsIDB4NDksIDB4QjksIDB4RjYsCisrICAweDcyLCAweEY0LCAweEY2LCAweEVG LCAweDg4LCAweDFFLCAweDJELCAweDFDCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBrYXRfUlNBX1BTU19TSEEzODRbXSA9IHsKKysgIDB4NDAsIDB4RkIsIDB4QTEsIDB4MjEs IDB4RjQsIDB4QjIsIDB4NDAsIDB4OUEsIDB4QjQsIDB4MzEsIDB4QTgsIDB4RjIsCisrICAweEVD LCAweDFDLCAweEM0LCAweEM4LCAweDdDLCAweDIyLCAweDY1LCAweDlDLCAweDU3LCAweDQ1LCAw eENELCAweDVFLAorKyAgMHg4NiwgMHgwMCwgMHhGNywgMHgyNSwgMHg3OCwgMHhERSwgMHhEQywg MHg3QSwgMHg3MSwgMHg0NCwgMHg5QSwgMHhDRCwKKysgIDB4QUEsIDB4MjUsIDB4RjQsIDB4QjIs IDB4RkMsIDB4RjAsIDB4NzUsIDB4RDksIDB4MkYsIDB4NzgsIDB4MjMsIDB4N0YsCisrICAweDZG LCAweDAyLCAweEVGLCAweEMxLCAweEFGLCAweEE2LCAweDI4LCAweDE2LCAweDMxLCAweERDLCAw eDQyLCAweDZDLAorKyAgMHhCMiwgMHg0NCwgMHhFNSwgMHg0RCwgMHg2NiwgMHhBMiwgMHhFNiwg MHg3MSwgMHhGMywgMHhBQywgMHg0RiwgMHhGQiwKKysgIDB4OTEsIDB4Q0EsIDB4RjUsIDB4NzAs IDB4RUYsIDB4NkIsIDB4OUQsIDB4QTQsIDB4RUYsIDB4RDksIDB4M0QsIDB4MkYsCisrICAweDNB LCAweEJFLCAweDg5LCAweDM4LCAweDU5LCAweDAxLCAweEJBLCAweERBLCAweDMyLCAweEFELCAw eDQyLCAweDg5LAorKyAgMHg5OCwgMHg4QiwgMHgzOSwgMHg0NCwgMHhGMCwgMHhGQywgMHgzOCwg MHhBQywgMHg4NywgMHgxRiwgMHhDQSwgMHg2RiwKKysgIDB4NDgsIDB4RjYsIDB4QUUsIDB4RDcs IDB4NDUsIDB4RUUsIDB4QUUsIDB4ODgsIDB4MEUsIDB4NjAsIDB4RjQsIDB4NTUsCisrICAweDQ4 LCAweDQ0LCAweEVFLCAweDFGLCAweDkwLCAweDE4LCAweDRCLCAweEYxCisrfTsKKysKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEE1MTJbXSA9IHsKKysgIDB4MDcs IDB4MUUsIDB4RDgsIDB4RDUsIDB4MDUsIDB4RTgsIDB4RTYsIDB4RTYsIDB4NTcsIDB4QUUsIDB4 NjMsIDB4OEMsCisrICAweEM2LCAweDgzLCAweEI3LCAweEEwLCAweDU5LCAweEJCLCAweEYyLCAw eEM2LCAweDhGLCAweDEyLCAweDUzLCAweDlBLAorKyAgMHg5QiwgMHg1NCwgMHg5RSwgMHhCMywg MHhDMSwgMHgxRCwgMHgyMywgMHg0RCwgMHg1MSwgMHhFRCwgMHg5RSwgMHhERCwKKysgIDB4NEIs IDB4RjMsIDB4NDYsIDB4OUIsIDB4NkIsIDB4RjYsIDB4N0MsIDB4MjQsIDB4NjAsIDB4NzksIDB4 MjMsIDB4MzksCisrICAweDAxLCAweDFDLCAweDUxLCAweENCLCAweEQ4LCAweEU5LCAweDlBLCAw eDAxLCAweDY3LCAweDVGLCAweEZFLCAweEQ3LAorKyAgMHg3QywgMHhFMywgMHg3RiwgMHhFRCwg MHhEQiwgMHg4NywgMHhCQiwgMHhGMCwgMHgzRCwgMHg3OCwgMHg1NSwgMHg2MSwKKysgIDB4NTcs IDB4RTMsIDB4MEYsIDB4RTMsIDB4RDIsIDB4OUQsIDB4MEMsIDB4MkEsIDB4MjAsIDB4QjAsIDB4 ODUsIDB4MTMsCisrICAweEM1LCAweDQ3LCAweDM0LCAweDBELCAweDMyLCAweDE1LCAweEM4LCAw eEFFLCAweDlBLCAweDZBLCAweDM5LCAweDYzLAorKyAgMHgyRCwgMHg2MCwgMHhGNSwgMHg0Qywg MHhERiwgMHg4QSwgMHg0OCwgMHg0QiwgMHhCRiwgMHhGNCwgMHhBOCwgMHhGRSwKKysgIDB4NzYs IDB4RjIsIDB4MzIsIDB4MUIsIDB4OUMsIDB4N0MsIDB4Q0EsIDB4RkUsIDB4N0YsIDB4ODAsIDB4 QzIsIDB4ODgsCisrICAweDVDLCAweDk3LCAweDcwLCAweEI0LCAweDI2LCAweEM5LCAweDE0LCAw eDhCCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTFbXSA9 IHsKKysgIDB4NzEsIDB4RUUsIDB4MUEsIDB4QzAsIDB4RkUsIDB4MDEsIDB4OTMsIDB4NTQsIDB4 NzksIDB4NUMsIDB4RjIsIDB4NEMsCisrICAweDRBLCAweEZELCAweDFBLCAweDA1LCAweDhGLCAw eDY0LCAweEIxLCAweDZELCAweDYxLCAweDMzLCAweDhELCAweDlCLAorKyAgMHhFNywgMHhGRCwg MHg2MCwgMHhBMywgMHg4MywgMHhCNSwgMHhBMywgMHg1MSwgMHg1NSwgMHg3NywgMHg5MCwgMHhD RiwKKysgIDB4REMsIDB4MjIsIDB4MzcsIDB4OEUsIDB4RDAsIDB4RTEsIDB4QUUsIDB4MDksIDB4 RTMsIDB4M0QsIDB4MUUsIDB4RjgsCisrICAweDgwLCAweEQxLCAweDhCLCAweEMyLCAweEVDLCAw eDBBLCAweEQ3LCAweDZCLCAweDg4LCAweDhCLCAweDhCLCAweEExLAorKyAgMHgyMCwgMHgyMiwg MHhCRSwgMHg1OSwgMHg1QiwgMHhFMCwgMHgyMywgMHgyNCwgMHhBMSwgMHg0OSwgMHgzMCwgMHhC QSwKKysgIDB4QTksIDB4OUUsIDB4RTgsIDB4QjEsIDB4OEEsIDB4NjIsIDB4MTYsIDB4QkYsIDB4 NEUsIDB4Q0EsIDB4MkUsIDB4NEUsCisrICAweEJDLCAweDI5LCAweEE4LCAweDY3LCAweDEzLCAw eEI3LCAweDlGLCAweDFELCAweDA0LCAweDQ0LCAweEU1LCAweDVGLAorKyAgMHgzNSwgMHgwNywg MHgxMSwgMHhCQywgMHhFRCwgMHgxOSwgMHgzNywgMHgyMSwgMHhDRiwgMHgyMywgMHg0OCwgMHgx RiwKKysgIDB4NzIsIDB4MDUsIDB4REUsIDB4RTYsIDB4RTgsIDB4N0YsIDB4MzMsIDB4OEEsIDB4 NzYsIDB4NEIsIDB4MkYsIDB4OTUsCisrICAweERGLCAweEYxLCAweDVGLCAweDg0LCAweDgwLCAw eEQ5LCAweDQ2LCAweEI0CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRf UlNBX1NIQTIyNFtdID0geworKyAgMHg2MiwgMHhBQSwgMHg3OSwgMHhBOSwgMHgxOCwgMHgwRSwg MHg1RiwgMHg4QywgMHhCQiwgMHhCNywgMHgxNSwgMHhGOSwKKysgIDB4MjUsIDB4QkIsIDB4RkEs IDB4RDQsIDB4M0EsIDB4MzQsIDB4RUQsIDB4OUUsIDB4QTAsIDB4QTksIDB4MTgsIDB4OEQsCisr ICAweDVCLCAweDU1LCAweDlBLCAweDdFLCAweDFFLCAweDA4LCAweDA4LCAweDYwLCAweEM1LCAw eDFBLCAweEM1LCAweDg5LAorKyAgMHgwOCwgMHhFMiwgMHgxQiwgMHhCRCwgMHg2MiwgMHg1MCwg MHgxNywgMHg3NiwgMHgzMCwgMHgyQywgMHg5RSwgMHhDRCwKKysgIDB4QTQsIDB4MDIsIDB4QUQs IDB4QjEsIDB4NkQsIDB4NDQsIDB4NkQsIDB4RDUsIDB4QzYsIDB4NDUsIDB4NDEsIDB4RTUsCisr ICAweEVFLCAweDFGLCAweDhELCAweDdFLCAweDA4LCAweDE2LCAweEE2LCAweEUxLCAweDVFLCAw eDBCLCAweEE5LCAweENDLAorKyAgMHhEQiwgMHg1OSwgMHg1NSwgMHg4NywgMHgwOSwgMHgyNSwg MHg3MCwgMHg4NiwgMHg4NCwgMHgwMiwgMHhDNiwgMHgzQiwKKysgIDB4MEIsIDB4NDQsIDB4NEMs IDB4NDYsIDB4OTUsIDB4RjQsIDB4RjgsIDB4NUEsIDB4OTEsIDB4MjgsIDB4M0UsIDB4QjIsCisr ICAweDU4LCAweDJFLCAweDA2LCAweDQ1LCAweDQ5LCAweEUwLCAweDkyLCAweEUyLCAweEMwLCAw eDY2LCAweEU2LCAweDM1LAorKyAgMHhEOSwgMHg3OSwgMHg3RiwgMHgxNywgMHg1RSwgMHgwMiwg MHg3MywgMHgwNCwgMHg3NywgMHg4MiwgMHhFNiwgMHhEQywKKysgIDB4NDAsIDB4MjEsIDB4ODks IDB4OEIsIDB4MzcsIDB4M0UsIDB4MUUsIDB4OEQKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGthdF9SU0FfU0hBMjU2W10gPSB7CisrICAweDBELCAweDU1LCAweEUyLCAweEFB LCAweDgxLCAweERCLCAweDhFLCAweDgyLCAweDA1LCAweDE3LCAweEE1LCAweDIzLAorKyAgMHhF NywgMHgzQiwgMHgxRCwgMHhBRiwgMHhGQiwgMHg4QywgMHhEMCwgMHg4MSwgMHgyMCwgMHg3Qiwg MHhBQSwgMHgyMywKKysgIDB4OTIsIDB4ODcsIDB4OEMsIDB4RDEsIDB4NTMsIDB4ODUsIDB4MTYs IDB4REMsIDB4QkUsIDB4QUQsIDB4NkYsIDB4MzUsCisrICAweDk4LCAweDJELCAweDY5LCAweDg0 LCAweEJGLCAweEQ5LCAweDhBLCAweDAxLCAweDE3LCAweDU4LCAweEIyLCAweDZFLAorKyAgMHgy QywgMHg0NCwgMHg5QiwgMHg5MCwgMHhGMSwgMHhGQiwgMHg1MSwgMHhFOCwgMHg2QSwgMHg5MCwg MHgyRCwgMHgxOCwKKysgIDB4MEUsIDB4QzAsIDB4OTAsIDB4MTAsIDB4MjQsIDB4QTksIDB4MUQs IDB4QjMsIDB4NTgsIDB4N0EsIDB4OTEsIDB4MzAsCisrICAweEJFLCAweDIyLCAweEM3LCAweEQz LCAweEVDLCAweEMzLCAweDA5LCAweDVELCAweEJGLCAweEUyLCAweDgwLCAweDNBLAorKyAgMHg3 QywgMHg4NSwgMHhCNCwgMHhCQywgMHhEMSwgMHhFOSwgMHhGMCwgMHg1QywgMHhERSwgMHg4MSwg MHhBNiwgMHgzOCwKKysgIDB4QjgsIDB4NDIsIDB4QkIsIDB4ODYsIDB4QzUsIDB4OUQsIDB4Q0Us IDB4N0MsIDB4MkMsIDB4RUUsIDB4RDEsIDB4REEsCisrICAweDI3LCAweDQ4LCAweDJCLCAweEY1 LCAweEFCLCAweEI5LCAweEY3LCAweDgwLCAweEQxLCAweDkwLCAweDI3LCAweDkwLAorKyAgMHhC RCwgMHg0NCwgMHg5NywgMHg2MCwgMHhDRCwgMHg1NywgMHhDMCwgMHg3QQorK307CisrCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEzODRbXSA9IHsKKysgIDB4MUQsIDB4 RTMsIDB4NkEsIDB4REQsIDB4MjcsIDB4NEMsIDB4QzAsIDB4QTUsIDB4MjcsIDB4RUYsIDB4RTYs IDB4MUYsCisrICAweEQyLCAweDkxLCAweDY4LCAweDU5LCAweDA0LCAweEFFLCAweEJELCAweDk5 LCAweDYzLCAweDU2LCAweDQ3LCAweEM3LAorKyAgMHg2RiwgMHgyMiwgMHgxNiwgMHg0OCwgMHhE MCwgMHhGOSwgMHgxOCwgMHhBOSwgMHhDQSwgMHhGQSwgMHg1RCwgMHg1QywKKysgIDB4QTcsIDB4 NjUsIDB4NTIsIDB4OEEsIDB4QzgsIDB4NDQsIDB4N0UsIDB4ODYsIDB4NUQsIDB4QTksIDB4QTYs IDB4NTUsCisrICAweDY1LCAweDNFLCAweEQ5LCAweDJELCAweDAyLCAweDM4LCAweEE4LCAweDc5 LCAweDI4LCAweDdGLCAweEI2LCAweENGLAorKyAgMHg4MiwgMHhERCwgMHg3RSwgMHg1NSwgMHhF MSwgMHhCMSwgMHhCQywgMHhFMiwgMHgxOSwgMHgyQiwgMHgzMCwgMHhDMiwKKysgIDB4MUIsIDB4 MkIsIDB4QjAsIDB4ODIsIDB4NDYsIDB4QUMsIDB4NEIsIDB4RDEsIDB4RTIsIDB4N0QsIDB4RUIs IDB4OEMsCisrICAweEZGLCAweDk1LCAweEU5LCAweDZBLCAweDFDLCAweDNELCAweDRELCAweEJG LCAweDhGLCAweDhCLCAweDlDLCAweENELAorKyAgMHhFQSwgMHg4NSwgMHhFRSwgMHgwMCwgMHhE QywgMHgxQywgMHhBNywgMHhFQiwgMHhEMCwgMHg4RiwgMHg5OSwgMHhGMSwKKysgIDB4MTYsIDB4 MjgsIDB4MjQsIDB4NjQsIDB4MDQsIDB4MzksIDB4MkQsIDB4NTgsIDB4MUUsIDB4MzcsIDB4REMs IDB4MDQsCisrICAweEJELCAweDMxLCAweEEyLCAweDJGLCAweEIzLCAweDM1LCAweDU2LCAweEJG CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTUxMltdID0g eworKyAgMHg2OSwgMHg1MiwgMHgxQiwgMHg1MSwgMHg1RSwgMHgwNiwgMHhDQSwgMHg5QiwgMHgx NiwgMHg1MSwgMHg1RCwgMHhDRiwKKysgIDB4NDksIDB4MjUsIDB4NEEsIDB4QTEsIDB4NkEsIDB4 NzcsIDB4NEMsIDB4MzYsIDB4NDAsIDB4RjgsIDB4QjIsIDB4OUEsCisrICAweDE1LCAweEVBLCAw eDVDLCAweEU1LCAweEU2LCAweDgyLCAweEUwLCAweDg2LCAweDgyLCAweDZCLCAweDMyLCAweEYx LAorKyAgMHgwNCwgMHhDMSwgMHg1QSwgMHgxQSwgMHhFRCwgMHgxRSwgMHg5QSwgMHhCNiwgMHg0 QywgMHg1NCwgMHg5RiwgMHhEOCwKKysgIDB4OEQsIDB4Q0MsIDB4QUMsIDB4OEEsIDB4QkIsIDB4 OUMsIDB4ODIsIDB4M0YsIDB4QTYsIDB4NTMsIDB4NjIsIDB4QjUsCisrICAweDgwLCAweEUyLCAw eEJDLCAweERELCAweDY3LCAweDJCLCAweEQ5LCAweDNGLCAweEU0LCAweDc1LCAweDkyLCAweDZC LAorKyAgMHhBRiwgMHg2MiwgMHg3QywgMHg1MiwgMHhGMCwgMHhFRSwgMHgzMywgMHhERiwgMHgx QiwgMHgxRCwgMHg0NywgMHhFNiwKKysgIDB4NTksIDB4NTYsIDB4QTUsIDB4QjksIDB4NUMsIDB4 RTYsIDB4NzcsIDB4NzgsIDB4MTYsIDB4NjMsIDB4ODQsIDB4MDUsCisrICAweDZGLCAweDBFLCAw eDJCLCAweDMxLCAweDlELCAweEY3LCAweDdGLCAweEIyLCAweDY0LCAweDcxLCAweEUwLCAweDJE LAorKyAgMHgzRSwgMHg2MiwgMHhDRSwgMHhCNSwgMHgzRiwgMHg4OCwgMHhERiwgMHgyRCwgMHhB QiwgMHg5OCwgMHg2NSwgMHg5MSwKKysgIDB4REYsIDB4NzAsIDB4MTQsIDB4QTUsIDB4M0YsIDB4 MzYsIDB4QUIsIDB4ODQKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9S U0FfWDkzMV9TSEExW10gPSB7CisrICAweDg2LCAweEI0LCAweDE4LCAweEJBLCAweEQxLCAweDgw LCAweEI2LCAweDdDLCAweDQyLCAweDQ1LCAweDRELCAweERGLAorKyAgMHhFOSwgMHgyRCwgMHhF MSwgMHg4MywgMHg1RiwgMHhCNSwgMHgyRiwgMHhDOSwgMHhDRCwgMHhDNCwgMHhCMiwgMHg3NSwK KysgIDB4ODAsIDB4QTQsIDB4RjEsIDB4NEEsIDB4RTcsIDB4ODMsIDB4MTIsIDB4MUUsIDB4MUUs IDB4MTQsIDB4QjgsIDB4QUMsCisrICAweDM1LCAweEUyLCAweEFBLCAweDBCLCAweDVDLCAweEY4 LCAweDM4LCAweDRELCAweDA0LCAweEVFLCAweEE5LCAweDk3LAorKyAgMHg3MCwgMHhGQiwgMHg1 RSwgMHhFNywgMHhCNywgMHhFMywgMHg2MiwgMHgyMywgMHg0QiwgMHgzOCwgMHhCRSwgMHhENiwK KysgIDB4NTMsIDB4MTUsIDB4RjcsIDB4REYsIDB4ODcsIDB4QjQsIDB4MEUsIDB4Q0MsIDB4QjEs IDB4MUEsIDB4MTEsIDB4MTksCisrICAweEVFLCAweDUxLCAweENDLCAweDkyLCAweERELCAweEJD LCAweDYzLCAweDI5LCAweDYzLCAweDBDLCAweDU5LCAweEQ3LAorKyAgMHg2RiwgMHg0QywgMHgz QywgMHgzNywgMHg1QiwgMHgzNywgMHgwMywgMHg2MSwgMHg3RCwgMHgyNCwgMHgxQywgMHg5OSwK KysgIDB4NDgsIDB4QUYsIDB4ODIsIDB4RkUsIDB4MzIsIDB4NDEsIDB4OUIsIDB4QjIsIDB4REIs IDB4RUEsIDB4RUQsIDB4NzYsCisrICAweDhFLCAweDZFLCAweENBLCAweDdFLCAweDRFLCAweDE0 LCAweEJBLCAweDMwLCAweDg0LCAweDFDLCAweEIzLCAweDY3LAorKyAgMHhBMywgMHgyOSwgMHg4 MCwgMHg3MCwgMHg1NCwgMHg2OCwgMHg3RCwgMHg0OQorK307CisrCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTI1NltdID0geworKyAgMHg3RSwgMHhBMiwgMHg3 NywgMHhGRSwgMHhCOCwgMHg1NCwgMHg4QSwgMHhDNywgMHg3RiwgMHg2NCwgMHg1NCwgMHg4OSwK KysgIDB4RTUsIDB4NTIsIDB4MTUsIDB4OEUsIDB4NTIsIDB4OTYsIDB4NEUsIDB4QTYsIDB4NTgs IDB4OTIsIDB4MUMsIDB4REQsCisrICAweEVBLCAweEEyLCAweDJELCAweDVDLCAweEQxLCAweDYy LCAweDAwLCAweDQ5LCAweDA1LCAweDk1LCAweDczLCAweENGLAorKyAgMHgxNiwgMHg3NiwgMHg2 OCwgMHhGNiwgMHhDNiwgMHg1RSwgMHg4MCwgMHhCOCwgMHhCOCwgMHg3QiwgMHhDOCwgMHg5QiwK KysgIDB4QzYsIDB4NTMsIDB4ODgsIDB4MjYsIDB4MjAsIDB4ODgsIDB4NzMsIDB4QjYsIDB4MTMs IDB4QjgsIDB4RjAsIDB4NEIsCisrICAweDAwLCAweDg1LCAweEYzLCAweERELCAweDA3LCAweDUw LCAweEVCLCAweDIwLCAweEM0LCAweDM4LCAweDBFLCAweDk4LAorKyAgMHhBRCwgMHg0RSwgMHg0 OSwgMHgyQywgMHhENywgMHg2NSwgMHhBNSwgMHgxOSwgMHgwRSwgMHg1OSwgMHgwMSwgMHhFQywK KysgIDB4N0UsIDB4NzUsIDB4ODksIDB4NjksIDB4MkUsIDB4NjMsIDB4NzYsIDB4ODUsIDB4NDYs IDB4OEQsIDB4QTAsIDB4OEMsCisrICAweDMzLCAweDFELCAweDgyLCAweDhDLCAweDAzLCAweEVB LCAweDY5LCAweDg4LCAweDM1LCAweEExLCAweDQyLCAweEJELAorKyAgMHgyMSwgMHhFRCwgMHg4 RCwgMHhCQywgMHhCQywgMHhEQiwgMHgzMCwgMHhGRiwgMHg4NiwgMHhGMCwgMHg1QiwgMHhEQywK KysgIDB4RTMsIDB4RTIsIDB4RTgsIDB4MEEsIDB4MEEsIDB4MjksIDB4OTQsIDB4ODAKKyt9Owor KworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEEzODRbXSA9IHsK KysgIDB4NUMsIDB4N0QsIDB4OTYsIDB4MzUsIDB4RUMsIDB4N0UsIDB4MTEsIDB4MzgsIDB4QkIs IDB4N0IsIDB4RUMsIDB4N0IsCisrICAweEYyLCAweDgyLCAweDhFLCAweDk5LCAweEJELCAweEVG LCAweEQ4LCAweEFFLCAweEQ3LCAweDM5LCAweDM3LCAweENCLAorKyAgMHhFNiwgMHg0RiwgMHg1 RSwgMHgwQSwgMHgxMywgMHhFNCwgMHgyRSwgMHg0MCwgMHhCOSwgMHhCRSwgMHgyRSwgMHhFMywK KysgIDB4RUYsIDB4NzgsIDB4ODMsIDB4MTgsIDB4NDQsIDB4MzUsIDB4OUMsIDB4OEUsIDB4RDcs IDB4NEEsIDB4NjMsIDB4RjYsCisrICAweDU3LCAweEMyLCAweEIwLCAweDA4LCAweDUxLCAweDcz LCAweENGLCAweENBLCAweDk5LCAweDY2LCAweEVFLCAweDMxLAorKyAgMHhEOCwgMHg2OSwgMHhF OSwgMHhBQiwgMHgxMywgMHgyNywgMHg3QiwgMHg0MSwgMHgxRSwgMHg2RCwgMHg4RCwgMHhGMSwK KysgIDB4M0UsIDB4OUMsIDB4MzUsIDB4OTUsIDB4NTgsIDB4REQsIDB4MkIsIDB4RDUsIDB4QTAs IDB4NjAsIDB4NDEsIDB4NzksCisrICAweDI0LCAweDIyLCAweEU0LCAweEI3LCAweEJGLCAweDQ3 LCAweDUzLCAweEY2LCAweDM0LCAweEQ1LCAweDdDLCAweEZGLAorKyAgMHgwRSwgMHgwOSwgMHhF RSwgMHgyRSwgMHhFMiwgMHgzNywgMHhCOSwgMHhERSwgMHhDNSwgMHgxMiwgMHg0NCwgMHgzNSwK KysgIDB4RUYsIDB4MDEsIDB4RTYsIDB4NUUsIDB4MzksIDB4MzEsIDB4MkQsIDB4NzEsIDB4QTUs IDB4REMsIDB4QzYsIDB4NkQsCisrICAweEUyLCAweENELCAweDg1LCAweERCLCAweDczLCAweDgy LCAweDY1LCAweDI4CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNB X1g5MzFfU0hBNTEyW10gPSB7CisrICAweEE2LCAweDY1LCAweEEyLCAweDc3LCAweDRGLCAweEIz LCAweDg2LCAweENCLCAweDY0LCAweDNBLCAweEMxLCAweDYzLAorKyAgMHhGQywgMHhBMSwgMHhB QSwgMHhDQiwgMHg5QiwgMHg3OSwgMHhERCwgMHg0QiwgMHhFMSwgMHhEOSwgMHhEQSwgMHhBQywK KysgIDB4RTcsIDB4NDcsIDB4MDksIDB4QjIsIDB4MTEsIDB4NEIsIDB4OEEsIDB4QUEsIDB4MDUs IDB4OUUsIDB4NzcsIDB4RDcsCisrICAweDNBLCAweEJELCAweDVFLCAweDUzLCAweDA5LCAweDRB LCAweEU2LCAweDBGLCAweDVFLCAweEY5LCAweDE0LCAweDI4LAorKyAgMHhBMCwgMHg5OSwgMHg3 NCwgMHg2NCwgMHg3MCwgMHg0RSwgMHhGMiwgMHhFMywgMHhGQSwgMHhDNywgMHhGOCwgMHhDNSwK KysgIDB4NkUsIDB4MkIsIDB4NzksIDB4OTYsIDB4MEQsIDB4MEMsIDB4QzgsIDB4MTAsIDB4MzQs IDB4NTMsIDB4RDIsIDB4QUYsCisrICAweDE3LCAweDBFLCAweEUwLCAweEJGLCAweDc5LCAweEY2 LCAweDA0LCAweDcyLCAweDEwLCAweEUwLCAweEY2LCAweEQwLAorKyAgMHhDRSwgMHg4QSwgMHg2 RiwgMHhBMSwgMHg5NSwgMHg4OSwgMHhCRiwgMHg1OCwgMHg4RiwgMHg0NiwgMHg1RiwgMHgwOSwK KysgIDB4OUYsIDB4MDksIDB4Q0EsIDB4ODQsIDB4MTUsIDB4ODUsIDB4RTAsIDB4RUQsIDB4MDQs IDB4MkQsIDB4RkIsIDB4N0MsCisrICAweDM2LCAweDM1LCAweDIxLCAweDMxLCAweEMzLCAweEZE LCAweDkyLCAweDQyLCAweDExLCAweDMwLCAweDcxLCAweDFCLAorKyAgMHg2MCwgMHg4MywgMHgx OCwgMHg4OCwgMHhBMywgMHhGNSwgMHg1OSwgMHhDMworK307CisrCisrCisraW50IEZJUFNfc2Vs ZnRlc3RfcnNhKCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJUlNBICprZXk7CisrCUVWUF9QS0VZ ICpwayA9IE5VTEw7CisrCisrCWlmICgoa2V5PVJTQV9uZXcoKSkgPT0gTlVMTCkKKysJCWdvdG8g ZXJyOworKwlzZXRyc2FrZXkoa2V5KTsKKysJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVM TCkKKysJCWdvdG8gZXJyOworKworKwlFVlBfUEtFWV9hc3NpZ25fUlNBKHBrLCBrZXkpOworKwor KwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90 YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9TSEExLCBzaXplb2Yoa2F0X1JTQV9TSEExKSwKKysJCQkJ RVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJIlJTQSBTSEExIFBL Q1MjMSIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBr LCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1NIQTIyNCwgc2l6 ZW9mKGthdF9SU0FfU0hBMjI0KSwKKysJCQkJRVZQX3NoYTIyNCgpLCBFVlBfTURfQ1RYX0ZMQUdf UEFEX1BLQ1MxLAorKwkJCQkiUlNBIFNIQTIyNCBQS0NTIzEiKSkKKysJCWdvdG8gZXJyOworKwlp ZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMp IC0gMSwKKysJCQkJa2F0X1JTQV9TSEEyNTYsIHNpemVvZihrYXRfUlNBX1NIQTI1NiksCisrCQkJ CUVWUF9zaGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJIlJTQSBTSEEy NTYgUEtDUyMxIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfU0hBMzg0 LCBzaXplb2Yoa2F0X1JTQV9TSEEzODQpLAorKwkJCQlFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhf RkxBR19QQURfUEtDUzEsCisrCQkJCSJSU0EgU0hBMzg0IFBLQ1MjMSIpKQorKwkJZ290byBlcnI7 CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0 X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfU0hBNTEyKSwK KysJCQkJRVZQX3NoYTUxMigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAorKwkJCQkiUlNB IFNIQTUxMiBQS0NTIzEiKSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIWZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JT QV9QU1NfU0hBMSwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTEpLAorKwkJCQlFVlBfc2hhMSgpLCBF VlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKKysJCQkJIlJTQSBTSEExIFBTUyIpKQorKwkJZ290byBl cnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yo a2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1BTU19TSEEyMjQsIHNpemVvZihrYXRfUlNBX1BT U19TSEEyMjQpLAorKwkJCQlFVlBfc2hhMjI0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAor KwkJCQkiUlNBIFNIQTIyNCBQU1MiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9z aWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0 X1JTQV9QU1NfU0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMjU2KSwKKysJCQkJRVZQX3No YTI1NigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKKysJCQkJIlJTQSBTSEEyNTYgUFNTIikp CisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90 YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfUFNTX1NIQTM4NCwgc2l6ZW9m KGthdF9SU0FfUFNTX1NIQTM4NCksCisrCQkJCUVWUF9zaGEzODQoKSwgRVZQX01EX0NUWF9GTEFH X1BBRF9QU1MsCisrCQkJCSJSU0EgU0hBMzg0IFBTUyIpKQorKwkJZ290byBlcnI7CisrCWlmICgh Zmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAx LAorKwkJCQlrYXRfUlNBX1BTU19TSEE1MTIsIHNpemVvZihrYXRfUlNBX1BTU19TSEE1MTIpLAor KwkJCQlFVlBfc2hhNTEyKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAorKwkJCQkiUlNBIFNI QTUxMiBQU1MiKSkKKysJCWdvdG8gZXJyOworKworKworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1 cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQlrYXRfUlNBX1g5 MzFfU0hBMSwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEExKSwKKysJCQlFVlBfc2hhMSgpLCBFVlBf TURfQ1RYX0ZMQUdfUEFEX1g5MzEsCisrCQkJIlJTQSBTSEExIFg5MzEiKSkKKysJCWdvdG8gZXJy OworKwkvKiBOQjogU0hBMjI0IG5vdCBzdXBwb3J0ZWQgaW4gWDkuMzEgKi8KKysJaWYgKCFmaXBz X3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisr CQkJa2F0X1JTQV9YOTMxX1NIQTI1Niwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEEyNTYpLAorKwkJ CUVWUF9zaGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAorKwkJCSJSU0EgU0hBMjU2 IFg5MzEiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChw aywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQlrYXRfUlNBX1g5MzFfU0hBMzg0 LCBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTM4NCksCisrCQkJRVZQX3NoYTM4NCgpLCBFVlBfTURf Q1RYX0ZMQUdfUEFEX1g5MzEsCisrCQkJIlJTQSBTSEEzODQgWDkzMSIpKQorKwkJZ290byBlcnI7 CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0 X3RicykgLSAxLAorKwkJCWthdF9SU0FfWDkzMV9TSEE1MTIsIHNpemVvZihrYXRfUlNBX1g5MzFf U0hBNTEyKSwKKysJCQlFVlBfc2hhNTEyKCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKKysJ CQkiUlNBIFNIQTUxMiBYOTMxIikpCisrCQlnb3RvIGVycjsKKysKKysKKysJcmV0ID0gMTsKKysK KysJZXJyOgorKwlpZiAocGspCisrCQlFVlBfUEtFWV9mcmVlKHBrKTsKKysJZWxzZSBpZiAoa2V5 KQorKwkJUlNBX2ZyZWUoa2V5KTsKKysJcmV0dXJuIHJldDsKKysJfQorKworKyNlbmRpZiAvKiBk ZWYgT1BFTlNTTF9GSVBTICovCitkaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jCistLS0gL2Rldi9udWxsCTIwMDktMTEtMDQg MTI6MDA6NTguODAxMDAyMjc2ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v Zmlwcy9maXBzX3JzYV94OTMxZy5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAw CitAQCAtMCwwICsxLDI4MSBAQAorKy8qIGNyeXB0by9yc2EvcnNhX2dlbi5jICovCisrLyogQ29w eXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisrICog QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1w bGVtZW50YXRpb24gd3JpdHRlbgorKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29t KS4KKysgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3 aXRoIE5ldHNjYXBlcyBTU0wuCisrICogCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNv bW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisrICogdGhlIGZvbGxv d2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25z CisrICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0 IHRoZSBSQzQsIFJTQSwKKysgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUg U1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKysgKiBpbmNsdWRlZCB3aXRoIHRoaXMg ZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisrICog ZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSku CisrICogCisrICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBh bnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKysgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92 ZWQuCisrICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5n IHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBh cnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisrICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2Yg YSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisrICogaW4gZG9jdW1lbnRh dGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisrICog CisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4KKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKysgKiAgICBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp YnV0aW9uLgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNy eXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorKyAqICAgICBFcmljIFlvdW5nIChlYXlA Y3J5cHRzb2Z0LmNvbSkiCisrICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBs ZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisrICogICAgYmVpbmcgdXNl ZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisrICogNC4gSWYgeW91IGluY2x1 ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZy b20gCisrICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVz dCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgor KyAqIAorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElT JycgQU5ECisrICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKysgKiBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JT IEJFIExJQUJMRQorKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisrICogREFNQUdFUyAoSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKysg KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorKyAqIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX QVkKKysgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg T0YgVEhFIFBPU1NJQklMSVRZIE9GCisrICogU1VDSCBEQU1BR0UuCisrICogCisrICogVGhlIGxp Y2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxl IHZlcnNpb24gb3IKKysgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdl ZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKysgKiBjb3BpZWQgYW5kIHB1dCB1 bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisrICogW2luY2x1ZGluZyB0aGUgR05V IFB1YmxpYyBMaWNlbmNlLl0KKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVk ZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHRpbWUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrCisrZXh0 ZXJuIGludCBmaXBzX2NoZWNrX3JzYShSU0EgKnJzYSk7CisrI2VuZGlmCisrCisrLyogWDkuMzEg UlNBIGtleSBkZXJpdmF0aW9uIGFuZCBnZW5lcmF0aW9uICovCisrCisraW50IFJTQV9YOTMxX2Rl cml2ZV9leChSU0EgKnJzYSwgQklHTlVNICpwMSwgQklHTlVNICpwMiwgQklHTlVNICpxMSwgQklH TlVNICpxMiwKKysJCQljb25zdCBCSUdOVU0gKlhwMSwgY29uc3QgQklHTlVNICpYcDIsIGNvbnN0 IEJJR05VTSAqWHAsCisrCQkJY29uc3QgQklHTlVNICpYcTEsIGNvbnN0IEJJR05VTSAqWHEyLCBj b25zdCBCSUdOVU0gKlhxLAorKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKQorKwl7 CisrCUJJR05VTSAqcjA9TlVMTCwqcjE9TlVMTCwqcjI9TlVMTCwqcjM9TlVMTDsKKysJQk5fQ1RY ICpjdHg9TlVMTCwqY3R4Mj1OVUxMOworKworKwlpZiAoIXJzYSkgCisrCQlnb3RvIGVycjsKKysK KysJY3R4ID0gQk5fQ1RYX25ldygpOworKwlpZiAoIWN0eCkgCisrCQlnb3RvIGVycjsKKysJQk5f Q1RYX3N0YXJ0KGN0eCk7CisrCisrCXIwID0gQk5fQ1RYX2dldChjdHgpOworKwlyMSA9IEJOX0NU WF9nZXQoY3R4KTsKKysJcjIgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCXIzID0gQk5fQ1RYX2dldChj dHgpOworKworKwlpZiAocjMgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKwlpZiAoIXJzYS0+ZSkK KysJCXsKKysJCXJzYS0+ZSA9IEJOX2R1cChlKTsKKysJCWlmICghcnNhLT5lKQorKwkJCWdvdG8g ZXJyOworKwkJfQorKwllbHNlCisrCQllID0gcnNhLT5lOworKworKwkvKiBJZiBub3QgYWxsIHBh cmFtZXRlcnMgcHJlc2VudCBvbmx5IGNhbGN1bGF0ZSB3aGF0IHdlIGNhbi4KKysJICogVGhpcyBh bGxvd3MgdGVzdCBwcm9ncmFtcyB0byBvdXRwdXQgc2VsZWN0aXZlIHBhcmFtZXRlcnMuCisrCSAq LworKworKwlpZiAoWHAgJiYgIXJzYS0+cCkKKysJCXsKKysJCXJzYS0+cCA9IEJOX25ldygpOwor KwkJaWYgKCFyc2EtPnApCisrCQkJZ290byBlcnI7CisrCisrCQlpZiAoIUJOX1g5MzFfZGVyaXZl X3ByaW1lX2V4KHJzYS0+cCwgcDEsIHAyLAorKwkJCQkJWHAsIFhwMSwgWHAyLCBlLCBjdHgsIGNi KSkKKysJCQlnb3RvIGVycjsKKysJCX0KKysKKysJaWYgKFhxICYmICFyc2EtPnEpCisrCQl7Cisr CQlyc2EtPnEgPSBCTl9uZXcoKTsKKysJCWlmICghcnNhLT5xKQorKwkJCWdvdG8gZXJyOworKwkJ aWYgKCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChyc2EtPnEsIHExLCBxMiwKKysJCQkJCVhxLCBY cTEsIFhxMiwgZSwgY3R4LCBjYikpCisrCQkJZ290byBlcnI7CisrCQl9CisrCisrCWlmICghcnNh LT5wIHx8ICFyc2EtPnEpCisrCQl7CisrCQlCTl9DVFhfZW5kKGN0eCk7CisrCQlCTl9DVFhfZnJl ZShjdHgpOworKwkJcmV0dXJuIDI7CisrCQl9CisrCisrCS8qIFNpbmNlIGJvdGggcHJpbWVzIGFy ZSBzZXQgd2UgY2FuIG5vdyBjYWxjdWxhdGUgYWxsIHJlbWFpbmluZyAKKysJICogY29tcG9uZW50 cy4KKysJICovCisrCisrCS8qIGNhbGN1bGF0ZSBuICovCisrCXJzYS0+bj1CTl9uZXcoKTsKKysJ aWYgKHJzYS0+biA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCWlmICghQk5fbXVsKHJzYS0+bixy c2EtPnAscnNhLT5xLGN0eCkpCisrCQlnb3RvIGVycjsKKysKKysJLyogY2FsY3VsYXRlIGQgKi8K KysJaWYgKCFCTl9zdWIocjEscnNhLT5wLEJOX3ZhbHVlX29uZSgpKSkKKysJCWdvdG8gZXJyOwkv KiBwLTEgKi8KKysJaWYgKCFCTl9zdWIocjIscnNhLT5xLEJOX3ZhbHVlX29uZSgpKSkKKysJCWdv dG8gZXJyOwkvKiBxLTEgKi8KKysJaWYgKCFCTl9tdWwocjAscjEscjIsY3R4KSkKKysJCWdvdG8g ZXJyOwkvKiAocC0xKShxLTEpICovCisrCisrCWlmICghQk5fZ2NkKHIzLCByMSwgcjIsIGN0eCkp CisrCQlnb3RvIGVycjsKKysKKysJaWYgKCFCTl9kaXYocjAsIE5VTEwsIHIwLCByMywgY3R4KSkK KysJCWdvdG8gZXJyOwkvKiBMQ00oKHAtMSkocS0xKSkgKi8KKysKKysJY3R4MiA9IEJOX0NUWF9u ZXcoKTsKKysJaWYgKCFjdHgyKQorKwkJZ290byBlcnI7CisrCisrCXJzYS0+ZD1CTl9tb2RfaW52 ZXJzZShOVUxMLHJzYS0+ZSxyMCxjdHgyKTsJLyogZCAqLworKwlpZiAocnNhLT5kID09IE5VTEwp CisrCQlnb3RvIGVycjsKKysKKysJLyogY2FsY3VsYXRlIGQgbW9kIChwLTEpICovCisrCXJzYS0+ ZG1wMT1CTl9uZXcoKTsKKysJaWYgKHJzYS0+ZG1wMSA9PSBOVUxMKQorKwkJZ290byBlcnI7Cisr CWlmICghQk5fbW9kKHJzYS0+ZG1wMSxyc2EtPmQscjEsY3R4KSkKKysJCWdvdG8gZXJyOworKwor KwkvKiBjYWxjdWxhdGUgZCBtb2QgKHEtMSkgKi8KKysJcnNhLT5kbXExPUJOX25ldygpOworKwlp ZiAocnNhLT5kbXExID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysJaWYgKCFCTl9tb2QocnNhLT5k bXExLHJzYS0+ZCxyMixjdHgpKQorKwkJZ290byBlcnI7CisrCisrCS8qIGNhbGN1bGF0ZSBpbnZl cnNlIG9mIHEgbW9kIHAgKi8KKysJcnNhLT5pcW1wPUJOX21vZF9pbnZlcnNlKE5VTEwscnNhLT5x LHJzYS0+cCxjdHgyKTsKKysKKysJZXJyOgorKwlpZiAoY3R4KQorKwkJeworKwkJQk5fQ1RYX2Vu ZChjdHgpOworKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKKysJCX0KKysJaWYgKGN0eDIpCisrCQlCTl9D VFhfZnJlZShjdHgyKTsKKysJLyogSWYgdGhpcyBpcyBzZXQgYWxsIGNhbGxzIHN1Y2Nlc3NmdWwg Ki8KKysJaWYgKHJzYSAmJiByc2EtPmlxbXAgIT0gTlVMTCkKKysJCXJldHVybiAxOworKworKwly ZXR1cm4gMDsKKysKKysJfQorKworK2ludCBSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpy c2EsIGludCBiaXRzLCBjb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYikKKysJeworKwlpbnQg b2sgPSAwOworKwlCSUdOVU0gKlhwID0gTlVMTCwgKlhxID0gTlVMTDsKKysJQk5fQ1RYICpjdHgg PSBOVUxMOworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKGJpdHMgPCBPUEVOU1NMX1JT QV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9S U0FfWDkzMV9HRU5FUkFURV9LRVlfRVgsRklQU19SX0tFWV9UT09fU0hPUlQpOworKwkgICAgcmV0 dXJuIDA7CisrCSAgICB9CisrCisrCWlmIChiaXRzICYgMHhmZikKKysJICAgIHsKKysJICAgIEZJ UFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBTX1JfSU5WQUxJRF9LRVlf TEVOR1RIKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKworKwlpZihGSVBTX3NlbGZ0ZXN0 X2ZhaWxlZCgpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFfR0VORVJB VEVfS0VZX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICByZXR1cm4gMDsK KysJICAgIH0KKysjZW5kaWYKKysKKysJY3R4ID0gQk5fQ1RYX25ldygpOworKwlpZiAoIWN0eCkK KysJCWdvdG8gZXJyb3I7CisrCisrCUJOX0NUWF9zdGFydChjdHgpOworKwlYcCA9IEJOX0NUWF9n ZXQoY3R4KTsKKysJWHEgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCWlmICghQk5fWDkzMV9nZW5lcmF0 ZV9YcHEoWHAsIFhxLCBiaXRzLCBjdHgpKQorKwkJZ290byBlcnJvcjsKKysKKysJcnNhLT5wID0g Qk5fbmV3KCk7CisrCXJzYS0+cSA9IEJOX25ldygpOworKwlpZiAoIXJzYS0+cCB8fCAhcnNhLT5x KQorKwkJZ290byBlcnJvcjsKKysKKysJLyogR2VuZXJhdGUgdHdvIHByaW1lcyBmcm9tIFhwLCBY cSAqLworKworKwlpZiAoIUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgocnNhLT5wLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMLCBYcCwKKysJCQkJCWUsIGN0eCwgY2IpKQorKwkJZ290byBlcnJvcjsK KysKKysJaWYgKCFCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KHJzYS0+cSwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCwgWHEsCisrCQkJCQllLCBjdHgsIGNiKSkKKysJCWdvdG8gZXJyb3I7CisrCisr CS8qIFNpbmNlIHJzYS0+cCBhbmQgcnNhLT5xIGFyZSB2YWxpZCB0aGlzIGNhbGwgd2lsbCBqdXN0 IGRlcml2ZQorKwkgKiByZW1haW5pbmcgUlNBIGNvbXBvbmVudHMuCisrCSAqLworKworKwlpZiAo IVJTQV9YOTMxX2Rlcml2ZV9leChyc2EsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisrCQkJCU5V TEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIGUsIGNiKSkKKysJCWdvdG8gZXJyb3I7 CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZighZmlwc19jaGVja19yc2EocnNhKSkKKysJ ICAgIGdvdG8gZXJyb3I7CisrI2VuZGlmCisrCisrCW9rID0gMTsKKysKKysJZXJyb3I6CisrCWlm IChjdHgpCisrCQl7CisrCQlCTl9DVFhfZW5kKGN0eCk7CisrCQlCTl9DVFhfZnJlZShjdHgpOwor KwkJfQorKworKwlpZiAob2spCisrCQlyZXR1cm4gMTsKKysKKysJcmV0dXJuIDA7CisrCisrCX0K K2RpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2ZpcHNf c2hhMV9zZWxmdGVzdC5jCistLS0gL2Rldi9udWxsCTIwMDktMTEtMDQgMTI6MDA6NTguODAxMDAy Mjc2ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9maXBzX3NoYTFf c2VsZnRlc3QuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCAr MSw5NyBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisr ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAg IGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK KysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgor KyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Cisr CisrI2lmZGVmIE9QRU5TU0xfRklQUworK3N0YXRpYyBjaGFyIHRlc3RbXVs2MF09CisrICAgIHsK KysgICAgIiIsCisrICAgICJhYmMiLAorKyAgICAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hp amhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiCisrICAgIH07CisrCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgcmV0W11bU0hBX0RJR0VTVF9MRU5HVEhdPQorKyAgICB7CisrICAgIHsg MHhkYSwweDM5LDB4YTMsMHhlZSwweDVlLDB4NmIsMHg0YiwweDBkLDB4MzIsMHg1NSwKKysgICAg ICAweGJmLDB4ZWYsMHg5NSwweDYwLDB4MTgsMHg5MCwweGFmLDB4ZDgsMHgwNywweDA5IH0sCisr ICAgIHsgMHhhOSwweDk5LDB4M2UsMHgzNiwweDQ3LDB4MDYsMHg4MSwweDZhLDB4YmEsMHgzZSwK KysgICAgICAweDI1LDB4NzEsMHg3OCwweDUwLDB4YzIsMHg2YywweDljLDB4ZDAsMHhkOCwweDlk IH0sCisrICAgIHsgMHg4NCwweDk4LDB4M2UsMHg0NCwweDFjLDB4M2IsMHhkMiwweDZlLDB4YmEs MHhhZSwKKysgICAgICAweDRhLDB4YTEsMHhmOSwweDUxLDB4MjksMHhlNSwweGU1LDB4NDYsMHg3 MCwweGYxIH0sCisrICAgIH07CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfc2hhMSgpCisrICAgIHsK KysgICAgdGVzdFsyXVswXSsrOworKyAgICB9CisrCisraW50IEZJUFNfc2VsZnRlc3Rfc2hhMSgp CisrICAgIHsKKysgICAgaW50IG47CisrCisrICAgIGZvcihuPTAgOyBuPHNpemVvZih0ZXN0KS9z aXplb2YodGVzdFswXSkgOyArK24pCisrCXsKKysJdW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNU X0xFTkdUSF07CisrCisrCUVWUF9EaWdlc3QodGVzdFtuXSxzdHJsZW4odGVzdFtuXSksbWQsIE5V TEwsIEVWUF9zaGExKCksIE5VTEwpOworKwlpZihtZW1jbXAobWQscmV0W25dLHNpemVvZiBtZCkp CisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEsRklQU19S X1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJfQorKyAgICBy ZXR1cm4gMTsKKysgICAgfQorKworKyNlbmRpZgorZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX3NoYTEuYworLS0tIC9kZXYv bnVsbAkyMDA5LTExLTA0IDEyOjAwOjU4LjgwMTAwMjI3NiArMDEwMAorKysrIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX3NoYTEuYwkyMDA5LTExLTEyIDEy OjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxNzMgQEAKKysvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBt ZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5h bWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1 c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3Jl QG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNT TCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBl cm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0 aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysg KiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycn IEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysg KiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RS SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu CisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+ CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgor KworKyNpZm5kZWYgRklQU0NBTklTVEVSX08KKytpbnQgRklQU19zZWxmdGVzdF9mYWlsZWQoKSB7 IHJldHVybiAwOyB9Cisrdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKCkge30KKyt2b2lkIE9QRU5T U0xfY2xlYW5zZSh2b2lkICpwLHNpemVfdCBsZW4pIHt9CisrI2VuZGlmCisrCisrI2lmZGVmIE9Q RU5TU0xfRklQUworKworK3N0YXRpYyB2b2lkIGhtYWNfaW5pdChTSEFfQ1RYICptZF9jdHgsU0hB X0NUWCAqb19jdHgsCisrCQkgICAgICBjb25zdCBjaGFyICprZXkpCisrICAgIHsKKysgICAgc2l6 ZV90IGxlbj1zdHJsZW4oa2V5KTsKKysgICAgaW50IGk7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5 bWRbSE1BQ19NQVhfTURfQ0JMT0NLXTsKKysgICAgdW5zaWduZWQgY2hhciBwYWRbSE1BQ19NQVhf TURfQ0JMT0NLXTsKKysKKysgICAgaWYgKGxlbiA+IFNIQV9DQkxPQ0spCisrCXsKKysJU0hBMV9J bml0KG1kX2N0eCk7CisrCVNIQTFfVXBkYXRlKG1kX2N0eCxrZXksbGVuKTsKKysJU0hBMV9GaW5h bChrZXltZCxtZF9jdHgpOworKwlsZW49MjA7CisrCX0KKysgICAgZWxzZQorKwltZW1jcHkoa2V5 bWQsa2V5LGxlbik7CisrICAgIG1lbXNldCgma2V5bWRbbGVuXSwnXDAnLEhNQUNfTUFYX01EX0NC TE9DSy1sZW4pOworKworKyAgICBmb3IoaT0wIDsgaSA8IEhNQUNfTUFYX01EX0NCTE9DSyA7IGkr KykKKysJcGFkW2ldPTB4MzZea2V5bWRbaV07CisrICAgIFNIQTFfSW5pdChtZF9jdHgpOworKyAg ICBTSEExX1VwZGF0ZShtZF9jdHgscGFkLFNIQV9DQkxPQ0spOworKworKyAgICBmb3IoaT0wIDsg aSA8IEhNQUNfTUFYX01EX0NCTE9DSyA7IGkrKykKKysJcGFkW2ldPTB4NWNea2V5bWRbaV07Cisr ICAgIFNIQTFfSW5pdChvX2N0eCk7CisrICAgIFNIQTFfVXBkYXRlKG9fY3R4LHBhZCxTSEFfQ0JM T0NLKTsKKysgICAgfQorKworK3N0YXRpYyB2b2lkIGhtYWNfZmluYWwodW5zaWduZWQgY2hhciAq bWQsU0hBX0NUWCAqbWRfY3R4LFNIQV9DVFggKm9fY3R4KQorKyAgICB7CisrICAgIHVuc2lnbmVk IGNoYXIgYnVmWzIwXTsKKysKKysgICAgU0hBMV9GaW5hbChidWYsbWRfY3R4KTsKKysgICAgU0hB MV9VcGRhdGUob19jdHgsYnVmLHNpemVvZiBidWYpOworKyAgICBTSEExX0ZpbmFsKG1kLG9fY3R4 KTsKKysgICAgfQorKworKyNlbmRpZgorKworK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2 KQorKyAgICB7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBzdGF0aWMgY2hhciBrZXlbXT0i ZXRhb25yaXNoZGxjdXBmbSI7CisrICAgIGludCBuLGJpbmFyeT0wOworKworKyAgICBpZihhcmdj IDwgMikKKysJeworKwlmcHJpbnRmKHN0ZGVyciwiJXMgWzxmaWxlPl0rXG4iLGFyZ3ZbMF0pOwor KwlleGl0KDEpOworKwl9CisrCisrICAgIG49MTsKKysgICAgaWYgKCFzdHJjbXAoYXJndltuXSwi LWJpbmFyeSIpKQorKwl7CisrCW4rKzsKKysJYmluYXJ5PTE7CS8qIGVtaXQgYmluYXJ5IGZpbmdl cnByaW50Li4uICovCisrCX0KKysKKysgICAgZm9yKDsgbiA8IGFyZ2MgOyArK24pCisrCXsKKysJ RklMRSAqZj1mb3Blbihhcmd2W25dLCJyYiIpOworKwlTSEFfQ1RYIG1kX2N0eCxvX2N0eDsKKysJ dW5zaWduZWQgY2hhciBtZFsyMF07CisrCWludCBpOworKworKwlpZighZikKKysJICAgIHsKKysJ ICAgIHBlcnJvcihhcmd2W25dKTsKKysJICAgIGV4aXQoMik7CisrCSAgICB9CisrCisrCWhtYWNf aW5pdCgmbWRfY3R4LCZvX2N0eCxrZXkpOworKwlmb3IoIDsgOyApCisrCSAgICB7CisrCSAgICBj aGFyIGJ1ZlsxMDI0XTsKKysJICAgIHNpemVfdCBsPWZyZWFkKGJ1ZiwxLHNpemVvZiBidWYsZik7 CisrCisrCSAgICBpZihsID09IDApCisrCQl7CisrCQlpZihmZXJyb3IoZikpCisrCQkgICAgewor KwkJICAgIHBlcnJvcihhcmd2W25dKTsKKysJCSAgICBleGl0KDMpOworKwkJICAgIH0KKysJCWVs c2UKKysJCSAgICBicmVhazsKKysJCX0KKysJICAgIFNIQTFfVXBkYXRlKCZtZF9jdHgsYnVmLGwp OworKwkgICAgfQorKwlobWFjX2ZpbmFsKG1kLCZtZF9jdHgsJm9fY3R4KTsKKysKKysJaWYgKGJp bmFyeSkKKysJICAgIHsKKysJICAgIGZ3cml0ZShtZCwyMCwxLHN0ZG91dCk7CisrCSAgICBicmVh azsJLyogLi4uIGZvciBzaW5nbGUoISkgZmlsZSAqLworKwkgICAgfQorKworKwlwcmludGYoIkhN QUMtU0hBMSglcyk9ICIsYXJndltuXSk7CisrCWZvcihpPTAgOyBpIDwgMjAgOyArK2kpCisrCSAg ICBwcmludGYoIiUwMngiLG1kW2ldKTsKKysJcHJpbnRmKCJcbiIpOworKwl9CisrI2VuZGlmCisr ICAgIHJldHVybiAwOworKyAgICB9CisrCisrCitkaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYworLS0tIC9kZXYvbnVsbAky MDA5LTExLTA0IDEyOjAwOjU4LjgwMTAwMjI3NiArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAw MDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsNTg4IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5 cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu CisrICoKKysgKgorKyAqIFRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBhcyBhIHRlc3QgZHJpdmVy IGZvciB0aGUgRklQUy0xNDAgdGVzdGluZworKyAqIGxhYiBwZXJmb3JtaW5nIEZJUFMtMTQwIHZh bGlkYXRpb24uICBJdCBkZW1vbnN0cmF0ZXMgdGhlIHVzZSBvZiB0aGUKKysgKiBPcGVuU1NMIGxp YnJhcnkgaXRvIHBlcmZvcm0gYSB2YXJpZXR5IG9mIGNvbW1vbiBjcnlwdG9ncmFwaGljCisrICog ZnVuY3Rpb25zLiAgQSBwb3dlci11cCBzZWxmIHRlc3QgaXMgZGVtb25zdHJhdGVkIGJ5IGRlbGli ZXJhdGVseQorKyAqIHBvaW50aW5nIHRvIGFuIGludmFsaWQgZXhlY3V0YWJsZSBoYXNoCisrICoK KysgKiBDb250cmlidXRlZCBieSBTdGV2ZSBNYXJxdWVzcy4KKysgKgorKyAqLworKyNpbmNsdWRl IDxzdGRpby5oPgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysj aW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2Flcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L3JzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Ro Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgorKworKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorKworKworKyNpZm5kZWYgT1BFTlNTTF9GSVBT CisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKysgICAgeworKyAgICBwcmludGYo Ik5vIEZJUFMgc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKysgICAgfQorKyNlbHNlCisr CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKwor Ky8qIEFFUzogZW5jcnlwdCBhbmQgZGVjcnlwdCBrbm93biBwbGFpbnRleHQsIHZlcmlmeSByZXN1 bHQgbWF0Y2hlcyBvcmlnaW5hbCBwbGFpbnRleHQKKysqLworK3N0YXRpYyBpbnQgRklQU19hZXNf dGVzdCh2b2lkKQorKwl7CisrCWludCByZXQgPSAwOworKwl1bnNpZ25lZCBjaGFyIHBsdG1wWzE2 XTsKKysJdW5zaWduZWQgY2hhciBjaXRtcFsxNl07CisrCXVuc2lnbmVkIGNoYXIga2V5WzE2XSA9 IHsgMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTZ9OworKwl1bnNpZ25lZCBj aGFyIHBsYWludGV4dFsxNl0gPSAiZXRhb25yaXNoZGxjdSI7CisrCUVWUF9DSVBIRVJfQ1RYIGN0 eDsKKysJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysJaWYgKEVWUF9DaXBoZXJJbml0X2V4 KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMSkgPD0gMCkKKysJCWdv dG8gZXJyOworKwlFVlBfQ2lwaGVyKCZjdHgsIGNpdG1wLCBwbGFpbnRleHQsIDE2KTsKKysJaWYg KEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLE5VTEwsIGtleSwgTlVM TCwgMCkgPD0gMCkKKysJCWdvdG8gZXJyOworKwlFVlBfQ2lwaGVyKCZjdHgsIHBsdG1wLCBjaXRt cCwgMTYpOworKwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIDE2KSkKKysJCWdvdG8gZXJy OworKwlyZXQgPSAxOworKwllcnI6CisrCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Cisr CXJldHVybiByZXQ7CisrCX0KKysKKytzdGF0aWMgaW50IEZJUFNfZGVzM190ZXN0KHZvaWQpCisr CXsKKysJaW50IHJldCA9IDA7CisrCXVuc2lnbmVkIGNoYXIgcGx0bXBbOF07CisrCXVuc2lnbmVk IGNoYXIgY2l0bXBbOF07CisrICAgIAl1bnNpZ25lZCBjaGFyIGtleVtdID0geyAxLDIsMyw0LDUs Niw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwKKysJCSAgICAgICAgICAgICAgMTks MjAsMjEsMjIsMjMsMjR9OworKyAgICAJdW5zaWduZWQgY2hhciBwbGFpbnRleHRbXSA9IHsgJ2Un LCAndCcsICdhJywgJ28nLCAnbicsICdyJywgJ2knLCAncycgfTsKKysJRVZQX0NJUEhFUl9DVFgg Y3R4OworKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKwlpZiAoRVZQX0NpcGhlckluaXRf ZXgoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMSkgPD0gMCkKKysJ CWdvdG8gZXJyOworKwlFVlBfQ2lwaGVyKCZjdHgsIGNpdG1wLCBwbGFpbnRleHQsIDgpOworKwlp ZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLE5VTEwsIGtleSwg TlVMTCwgMCkgPD0gMCkKKysJCWdvdG8gZXJyOworKwlFVlBfQ2lwaGVyKCZjdHgsIHBsdG1wLCBj aXRtcCwgOCk7CisrCWlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4dCwgOCkpCisrCQlnb3RvIGVy cjsKKysJcmV0ID0gMTsKKysJZXJyOgorKwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOwor KwlyZXR1cm4gcmV0OworKwl9CisrCisrLyoKKysgKiBEU0E6IGdlbmVyYXRlIGtleXMgYW5kIHNp Z24sIHZlcmlmeSBpbnB1dCBwbGFpbnRleHQuCisrICovCisrc3RhdGljIGludCBGSVBTX2RzYV90 ZXN0KGludCBiYWQpCisrICAgIHsKKysgICAgRFNBICpkc2EgPSBOVUxMOworKyAgICBFVlBfUEtF WSBwazsKKysgICAgdW5zaWduZWQgY2hhciBkZ3N0W10gPSAiZXRhb25yaXNoZGxjIjsKKysgICAg dW5zaWduZWQgY2hhciBidWZbNjBdOworKyAgICB1bnNpZ25lZCBpbnQgc2xlbjsKKysgICAgaW50 IHIgPSAwOworKyAgICBFVlBfTURfQ1RYIG1jdHg7CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigp OworKyAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOworKyAgICBkc2EgPSBEU0FfbmV3KCk7Cisr ICAgIGlmICghZHNhKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1l dGVyc19leChkc2EsIDEwMjQsTlVMTCwwLE5VTEwsTlVMTCxOVUxMKSkKKysJZ290byBlbmQ7Cisr ICAgIGlmICghRFNBX2dlbmVyYXRlX2tleShkc2EpKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKGJh ZCkKKysJICAgIEJOX2FkZF93b3JkKGRzYS0+cHViX2tleSwgMSk7CisrCisrICAgIHBrLnR5cGUg PSBFVlBfUEtFWV9EU0E7CisrICAgIHBrLnBrZXkuZHNhID0gZHNhOworKworKyAgICBpZiAoIUVW UF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCisrCWdvdG8gZW5kOworKyAg ICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBkZ3N0LCBzaXplb2YoZGdzdCkgLSAxKSkKKysJ Z290byBlbmQ7CisrICAgIGlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgYnVmLCAmc2xlbiwgJnBr KSkKKysJZ290byBlbmQ7CisrCisrICAgIGlmICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVW UF9kc3MxKCksIE5VTEwpKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKCFFVlBfVmVyaWZ5VXBkYXRl KCZtY3R4LCBkZ3N0LCBzaXplb2YoZGdzdCkgLSAxKSkKKysJZ290byBlbmQ7CisrICAgIHIgPSBF VlBfVmVyaWZ5RmluYWwoJm1jdHgsIGJ1Ziwgc2xlbiwgJnBrKTsKKysgICAgZW5kOgorKyAgICBF VlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOworKyAgICBpZiAoZHNhKQorKyAgCSAgRFNBX2ZyZWUo ZHNhKTsKKysgICAgaWYgKHIgIT0gMSkKKysJcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAg ICB9CisrCisrLyoKKysgKiBSU0E6IGdlbmVyYXRlIGtleXMgYW5kIHNpZ24sIHZlcmlmeSBpbnB1 dCBwbGFpbnRleHQuCisrICovCisrc3RhdGljIGludCBGSVBTX3JzYV90ZXN0KGludCBiYWQpCisr ICAgIHsKKysgICAgUlNBICprZXk7CisrICAgIHVuc2lnbmVkIGNoYXIgaW5wdXRfcHRleHRbXSA9 ICJldGFvbnJpc2hkbGMiOworKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyNTZdOworKyAgICB1bnNp Z25lZCBpbnQgc2xlbjsKKysgICAgQklHTlVNICpibjsKKysgICAgRVZQX01EX0NUWCBtY3R4Owor KyAgICBFVlBfUEtFWSBwazsKKysgICAgaW50IHIgPSAwOworKworKyAgICBFUlJfY2xlYXJfZXJy b3IoKTsKKysgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKKysgICAga2V5ID0gUlNBX25ldygp OworKyAgICBibiA9IEJOX25ldygpOworKyAgICBpZiAoIWtleSB8fCAhYm4pCisrCXJldHVybiAw OworKyAgICBCTl9zZXRfd29yZChibiwgNjU1MzcpOworKyAgICBpZiAoIVJTQV9nZW5lcmF0ZV9r ZXlfZXgoa2V5LCAxMDI0LGJuLE5VTEwpKQorKwlyZXR1cm4gMDsKKysgICAgQk5fZnJlZShibik7 CisrICAgIGlmIChiYWQpCisrCSAgICBCTl9hZGRfd29yZChrZXktPm4sIDEpOworKworKyAgICBw ay50eXBlID0gRVZQX1BLRVlfUlNBOworKyAgICBway5wa2V5LnJzYSA9IGtleTsKKysKKysgICAg aWYgKCFFVlBfU2lnbkluaXRfZXgoJm1jdHgsIEVWUF9zaGExKCksIE5VTEwpKQorKwlnb3RvIGVu ZDsKKysgICAgaWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgaW5wdXRfcHRleHQsIHNpemVvZihp bnB1dF9wdGV4dCkgLSAxKSkKKysJZ290byBlbmQ7CisrICAgIGlmICghRVZQX1NpZ25GaW5hbCgm bWN0eCwgYnVmLCAmc2xlbiwgJnBrKSkKKysJZ290byBlbmQ7CisrCisrICAgIGlmICghRVZQX1Zl cmlmeUluaXRfZXgoJm1jdHgsIEVWUF9zaGExKCksIE5VTEwpKQorKwlnb3RvIGVuZDsKKysgICAg aWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBpbnB1dF9wdGV4dCwgc2l6ZW9mKGlucHV0X3B0 ZXh0KSAtIDEpKQorKwlnb3RvIGVuZDsKKysgICAgciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwg YnVmLCBzbGVuLCAmcGspOworKyAgICBlbmQ6CisrICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0 eCk7CisrICAgIGlmIChrZXkpCisrICAJICAgIFJTQV9mcmVlKGtleSk7CisrICAgIGlmIChyICE9 IDEpCisrCXJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIFNIQTE6IGdl bmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisr ICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfc2hhMV90 ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEFfRElHRVNUX0xFTkdU SF0gPQorKyAgICAgICAgeyAweDExLCAweGYxLCAweDlhLCAweDNhLCAweGVjLCAweDFhLCAweDFl LCAweDhlLCAweDY1LCAweGQ0LCAweDlhLCAweDM4LCAweDBjLCAweDhiLCAweDFlLCAweDJjLCAw eGU4LCAweGIzLCAweGM1LCAweDE4IH07CisrICAgIHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRh b25yaXNoZCI7CisrCisrICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hBX0RJR0VTVF9MRU5HVEhdOwor KworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFFVlBfRGlnZXN0KHN0cixzaXpl b2Yoc3RyKSAtIDEsbWQsIE5VTEwsIEVWUF9zaGExKCksIE5VTEwpKSByZXR1cm4gMDsKKysgICAg aWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1kKSkpCisrICAgICAgICByZXR1cm4gMDsKKysg ICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBTSEEyNTY6IGdlbmVyYXRlIGhhc2ggb2Yga25v d24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29y cmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfc2hhMjU2X3Rlc3QoKQorKyAgICB7Cisr ICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQTI1Nl9ESUdFU1RfTEVOR1RIXSA9CisrCXsweGY1 LCAweDUzLCAweGNkLCAweGI4LCAweGNmLCAweDEsIDB4ZWUsIDB4MTcsIDB4OWIsIDB4OTMsIDB4 YzksIDB4NjgsIDB4YzAsIDB4ZWEsIDB4NDAsIDB4OTEsCisrCSAweDYsIDB4ZWMsIDB4OGUsIDB4 MTEsIDB4OTYsIDB4YzgsIDB4NWQsIDB4MWMsIDB4YWYsIDB4NjQsIDB4MjIsIDB4ZTYsIDB4NTAs IDB4NGYsIDB4NDcsIDB4NTd9OworKyAgICB1bnNpZ25lZCBjaGFyIHN0cltdID0gImV0YW9ucmlz aGQiOworKworKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKKysK KysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghRVZQX0RpZ2VzdChzdHIsc2l6ZW9m KHN0cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hhMjU2KCksIE5VTEwpKSByZXR1cm4gMDsKKysgICAg aWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1kKSkpCisrICAgICAgICByZXR1cm4gMDsKKysg ICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBTSEE1MTI6IGdlbmVyYXRlIGhhc2ggb2Yga25v d24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29y cmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfc2hhNTEyX3Rlc3QoKQorKyAgICB7Cisr ICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQTUxMl9ESUdFU1RfTEVOR1RIXSA9CisrCXsweDk5 LCAweGM5LCAweGU5LCAweDViLCAweDg4LCAweGQ0LCAweDc4LCAweDg4LCAweGRmLCAweDg4LCAw eDVmLCAweDk0LCAweDcxLCAweDY0LCAweDI4LCAweGNhLAorKwkgMHgxNiwgMHgxZiwgMHgzZCwg MHhmNCwgMHgxZiwgMHhmMywgMHgwZiwgMHhjNSwgMHgwMywgMHg5OSwgMHhiMiwgMHhkMCwgMHhl NywgMHgwYiwgMHg5NCwgMHg0YSwKKysJIDB4NDUsIDB4ZDIsIDB4NmMsIDB4NGYsIDB4MjAsIDB4 MDYsIDB4ZWYsIDB4NzEsIDB4YTksIDB4MjUsIDB4N2YsIDB4MjQsIDB4YjEsIDB4ZDksIDB4NDAs IDB4MjIsCisrCSAweDQ5LCAweDU0LCAweDEwLCAweGMyLCAweDIyLCAweDlkLCAweDI3LCAweGZl LCAweGJkLCAweGQ2LCAweGQ2LCAweGViLCAweDJkLCAweDQyLCAweDFkLCAweGEzfTsKKysgICAg dW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFvbnJpc2hkIjsKKysKKysgICAgdW5zaWduZWQgY2hh ciBtZFtTSEE1MTJfRElHRVNUX0xFTkdUSF07CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOwor KyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNpemVvZihzdHIpIC0gMSxtZCwgTlVMTCwgRVZQX3No YTUxMigpLCBOVUxMKSkgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAobWQsZGlnZXN0LHNpemVv ZihtZCkpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisr LyogSE1BQy1TSEExOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29t cGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGlj IGludCBGSVBTX2htYWNfc2hhMV90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtl eVtdID0gImV0YW9ucmlzaGQiOworKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRl eHQiOworKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQorKwl7MHg3 MywgMHhmNywgMHhhMCwgMHg0OCwgMHhmOCwgMHg5NCwgMHhlZCwgMHhkZCwgMHgwYSwgMHhlYSwg MHhlYSwgMHg1NiwgMHgxYiwgMHg2MSwgMHgyZSwgMHg3MCwKKysJIDB4YjIsIDB4ZmIsIDB4ZWMs IDB4YzZ9OworKworKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAg ICB1bnNpZ25lZCBpbnQgb3V0bGVuOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAg aWYgKCFITUFDKEVWUF9zaGExKCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91 dCwmb3V0bGVuKSkgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikp CisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBITUFD LVNIQTIyNDogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUg dG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQg RklQU19obWFjX3NoYTIyNF90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtleVtd ID0gImV0YW9ucmlzaGQiOworKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQi OworKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQorKwl7MHg3NSwg MHg1OCwgMHhkNSwgMHhiZCwgMHg1NSwgMHg2ZCwgMHg4NywgMHgwZiwgMHg3NSwgMHhmZiwgMHhi ZSwgMHgxYywgMHhiMiwgMHhmMCwgMHgyMCwgMHgzNSwKKysJIDB4ZTUsIDB4NjIsIDB4NDksIDB4 YjYsIDB4OTQsIDB4YjksIDB4ZmMsIDB4NjUsIDB4MzQsIDB4MzMsIDB4M2EsIDB4MTl9OworKwor KyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICB1bnNpZ25lZCBp bnQgb3V0bGVuOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFITUFDKEVW UF9zaGEyMjQoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZvdXRsZW4p KSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKKysgICAgICAg IHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIEhNQUMtU0hBMjU2OiBn ZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgor KyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX2htYWNf c2hhMjU2X3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25y aXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7CisrICAgIHVu c2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9CisrCXsweGU5LCAweDE3LCAweGMx LCAweDdiLCAweDRjLCAweDZiLCAweDc3LCAweGRhLCAweGQyLCAweDMwLCAweDM2LCAweDAyLCAw eGY1LCAweDcyLCAweDMzLCAweDg3LAorKwkgMHg5ZiwgMHhjNiwgMHg2ZSwgMHg3YiwgMHg3ZSwg MHhhOCwgMHhlYSwgMHhhYSwgMHg5ZiwgMHhiYSwgMHhlZSwgMHg1MSwgMHhmZiwgMHhkYSwgMHgy NCwgMHhmNH07CisrCisrICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07Cisr ICAgIHVuc2lnbmVkIGludCBvdXRsZW47CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAg ICBpZiAoIUhNQUMoRVZQX3NoYTI1NigpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdikt MSxvdXQsJm91dGxlbikpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRs ZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyog SE1BQy1TSEEzODQ6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21w YXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMg aW50IEZJUFNfaG1hY19zaGEzODRfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBr ZXlbXSA9ICJldGFvbnJpc2hkIjsKKysgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0 ZXh0IjsKKysgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KKysJezB4 YjIsIDB4OWQsIDB4NDAsIDB4NTgsIDB4MzIsIDB4YzQsIDB4ZTMsIDB4MzEsIDB4YjYsIDB4NjMs IDB4MDgsIDB4MjYsIDB4OTksIDB4ZWYsIDB4M2IsIDB4MTAsCisrCSAweGUyLCAweGRmLCAweGY4 LCAweGZmLCAweGM2LCAweGUxLCAweDAzLCAweDI5LCAweDgxLCAweDJhLCAweDFiLCAweGFjLCAw eGIwLCAweDA3LCAweDM5LCAweDA4LAorKwkgMHhmMywgMHg5MSwgMHgzNSwgMHgxMSwgMHg3Niwg MHhkNiwgMHg0YywgMHgyMCwgMHhmYiwgMHg0ZCwgMHhjMywgMHhmMywgMHhiOCwgMHg5YiwgMHg4 OCwgMHgxY307CisrCisrICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07Cisr ICAgIHVuc2lnbmVkIGludCBvdXRsZW47CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAg ICBpZiAoIUhNQUMoRVZQX3NoYTM4NCgpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdikt MSxvdXQsJm91dGxlbikpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRs ZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyog SE1BQy1TSEE1MTI6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21w YXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMg aW50IEZJUFNfaG1hY19zaGE1MTJfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBr ZXlbXSA9ICJldGFvbnJpc2hkIjsKKysgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0 ZXh0IjsKKysgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KKysJezB4 Y2QsIDB4M2UsIDB4YjksIDB4NTEsIDB4YjgsIDB4YmMsIDB4N2YsIDB4OWEsIDB4MjMsIDB4YWYs IDB4ZjMsIDB4NzcsIDB4NTksIDB4ODUsIDB4YTksIDB4ZTYsCisrCSAweGY3LCAweGQxLCAweDUx LCAweDk2LCAweDE3LCAweGUwLCAweDkyLCAweGQ4LCAweGE2LCAweDNiLCAweGMxLCAweGFkLCAw eDdlLCAweDI0LCAweGNhLCAweGIxLAorKwkgMHhkNywgMHg3OSwgMHgwYSwgMHhhNSwgMHhlYSwg MHgyYywgMHgwMiwgMHg1OCwgMHgwYiwgMHhhNiwgMHg1MiwgMHg2YiwgMHg2MSwgMHg3ZiwgMHhl YiwgMHg5YywKKysJIDB4NDcsIDB4ODYsIDB4NWQsIDB4NzQsIDB4MmIsIDB4ODgsIDB4ZGYsIDB4 ZWUsIDB4NDYsIDB4NjksIDB4OTYsIDB4M2QsIDB4YTYsIDB4ZDksIDB4MmEsIDB4NTN9OworKwor KyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICB1bnNpZ25lZCBp bnQgb3V0bGVuOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFITUFDKEVW UF9zaGE1MTIoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZvdXRsZW4p KSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKKysgICAgICAg IHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKworKy8qIERIOiBnZW5lcmF0 ZSBzaGFyZWQgcGFyYW1ldGVycworKyovCisrc3RhdGljIGludCBkaF90ZXN0KCkKKysgICAgewor KyAgICBESCAqZGg7CisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBkaCA9IEZJUFNfZGhf bmV3KCk7CisrICAgIGlmICghZGgpCisrCXJldHVybiAwOworKyAgICBpZiAoIURIX2dlbmVyYXRl X3BhcmFtZXRlcnNfZXgoZGgsIDEwMjQsIDIsIE5VTEwpKQorKwlyZXR1cm4gMDsKKysgICAgRklQ U19kaF9mcmVlKGRoKTsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBaZXJvaXplCisr Ki8KKytzdGF0aWMgaW50IFplcm9pemUoKQorKyAgICB7CisrICAgIFJTQSAqa2V5OworKyAgICBC SUdOVU0gKmJuOworKyAgICB1bnNpZ25lZCBjaGFyIHVzZXJrZXlbMTZdID0gCisrCXsgMHg0OCwg MHg1MCwgMHhmMCwgMHhhMywgMHgzYSwgMHhlZCwgMHhkMywgMHhhZiwgMHg2ZSwgMHg0NywgMHg3 ZiwgMHg4MywgMHgwMiwgMHhiMSwgMHgwOSwgMHg2OCB9OworKyAgICBpbnQgaSwgbjsKKysKKysg ICAga2V5ID0gRklQU19yc2FfbmV3KCk7CisrICAgIGJuID0gQk5fbmV3KCk7CisrICAgIGlmICgh a2V5IHx8ICFibikKKysJcmV0dXJuIDA7CisrICAgIEJOX3NldF93b3JkKGJuLCA2NTUzNyk7Cisr ICAgIGlmICghUlNBX2dlbmVyYXRlX2tleV9leChrZXksIDEwMjQsYm4sTlVMTCkpCisrCXJldHVy biAwOworKyAgICBCTl9mcmVlKGJuKTsKKysgICAgCisrICAgIG4gPSBCTl9udW1fYnl0ZXMoa2V5 LT5kKTsKKysgICAgcHJpbnRmKCIgR2VuZXJhdGVkICVkIGJ5dGUgUlNBIHByaXZhdGUga2V5XG4i LCBuKTsKKysgICAgcHJpbnRmKCJcdEJOIGtleSBiZWZvcmUgb3ZlcndyaXRpbmc6XG4iKTsKKysg ICAgZG9fYm5fcHJpbnQoc3Rkb3V0LCBrZXktPmQpOworKyAgICBCTl9yYW5kKGtleS0+ZCxuKjgs LTEsMCk7CisrICAgIHByaW50ZigiXHRCTiBrZXkgYWZ0ZXIgb3ZlcndyaXRpbmc6XG4iKTsKKysg ICAgZG9fYm5fcHJpbnQoc3Rkb3V0LCBrZXktPmQpOworKworKyAgICBwcmludGYoIlx0Y2hhciBi dWZmZXIga2V5IGJlZm9yZSBvdmVyd3JpdGluZzogXG5cdFx0Iik7CisrICAgIGZvcihpID0gMDsg aSA8IHNpemVvZih1c2Vya2V5KTsgaSsrKSBwcmludGYoIiUwMngiLCB1c2Vya2V5W2ldKTsKKysg ICAgICAgIHByaW50ZigiXG4iKTsKKysgICAgUkFORF9ieXRlcyh1c2Vya2V5LCBzaXplb2YgdXNl cmtleSk7CisrICAgIHByaW50ZigiXHRjaGFyIGJ1ZmZlciBrZXkgYWZ0ZXIgb3ZlcndyaXRpbmc6 IFxuXHRcdCIpOworKyAgICBmb3IoaSA9IDA7IGkgPCBzaXplb2YodXNlcmtleSk7IGkrKykgcHJp bnRmKCIlMDJ4IiwgdXNlcmtleVtpXSk7CisrICAgICAgICBwcmludGYoIlxuIik7CisrCisrICAg IHJldHVybiAxOworKyAgICB9CisrCisrc3RhdGljIGludCBFcnJvcjsKKytjb25zdCBjaGFyICog RmFpbChjb25zdCBjaGFyICptc2cpCisrICAgIHsKKysgICAgZG9fcHJpbnRfZXJyb3JzKCk7Cisr ICAgIEVycm9yKys7CisrICAgIHJldHVybiBtc2c7IAorKyAgICB9CisrCisraW50IG1haW4oaW50 IGFyZ2MsY2hhciAqKmFyZ3YpCisrICAgIHsKKysKKysgICAgaW50IGRvX2NvcnJ1cHRfcnNhX2tl eWdlbiA9IDAsIGRvX2NvcnJ1cHRfZHNhX2tleWdlbiA9IDA7CisrICAgIGludCBiYWRfcnNhID0g MCwgYmFkX2RzYSA9IDA7CisrICAgIGludCBkb19ybmdfc3RpY2sgPSAwOworKyAgICBpbnQgbm9f ZXhpdCA9IDA7CisrCisrICAgIHByaW50ZigiXHRGSVBTLW1vZGUgdGVzdCBhcHBsaWNhdGlvblxu XG4iKTsKKysKKysgICAgLyogTG9hZCBlbnRyb3B5IGZyb20gZXh0ZXJuYWwgZmlsZSwgaWYgYW55 ICovCisrICAgIFJBTkRfbG9hZF9maWxlKCIucm5kIiwgMTAyNCk7CisrCisrICAgIGlmIChhcmd2 WzFdKSB7CisrICAgICAgICAvKiBDb3JydXB0ZWQgS0FUIHRlc3RzICovCisrICAgICAgICBpZiAo IXN0cmNtcChhcmd2WzFdLCAiYWVzIikpIHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfYWVz KCk7CisrICAgICAgICAgICAgcHJpbnRmKCJBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHdpdGgg Y29ycnVwdGVkIEtBVC4uLlxuIik7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsx XSwgImRlcyIpKSB7CisrICAgICAgICAgICAgRklQU19jb3JydXB0X2RlcygpOworKyAgICAgICAg ICAgIHByaW50ZigiREVTMy1FQ0IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHdpdGggY29ycnVwdGVk IEtBVC4uLlxuIik7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRzYSIp KSB7CisrICAgICAgICAgICAgRklQU19jb3JydXB0X2RzYSgpOworKyAgICAgICAgICAgIHByaW50 ZigiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1 cHRlZCBLQVQuLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJy c2EiKSkgeworKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9yc2EoKTsKKysgICAgICAgICAgICBw cmludGYoIlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBj b3JydXB0ZWQgS0FULi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFd LCAicnNha2V5IikpIHsKKysgICAgICAgICAgICBwcmludGYoIlJTQSBrZXkgZ2VuZXJhdGlvbiBh bmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Li4uXG4iKTsKKysJICAg IGJhZF9yc2EgPSAxOworKwkgICAgbm9fZXhpdCA9IDE7CisrICAgICAgICB9IGVsc2UgaWYgKCFz dHJjbXAoYXJndlsxXSwgInJzYWtleWdlbiIpKSB7CisrCSAgICBkb19jb3JydXB0X3JzYV9rZXln ZW4gPSAxOworKwkgICAgbm9fZXhpdCA9IDE7CisrICAgICAgICAgICAgcHJpbnRmKCJSU0Ega2V5 IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleWdl bi4uLlxuIik7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRzYWtleSIp KSB7CisrICAgICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVy ZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleS4uLlxuIik7CisrCSAgICBiYWRfZHNhID0g MTsKKysJICAgIG5vX2V4aXQgPSAxOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3Zb MV0sICJkc2FrZXlnZW4iKSkgeworKwkgICAgZG9fY29ycnVwdF9kc2Ffa2V5Z2VuID0gMTsKKysJ ICAgIG5vX2V4aXQgPSAxOworKyAgICAgICAgICAgIHByaW50ZigiRFNBIGtleSBnZW5lcmF0aW9u IGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXlnZW4uLi5cbiIpOwor KyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJzaGExIikpIHsKKysgICAgICAg ICAgICBGSVBTX2NvcnJ1cHRfc2hhMSgpOworKyAgICAgICAgICAgIHByaW50ZigiU0hBLTEgaGFz aCB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOworKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsx XSwgInJuZyIpKSB7CisrCSAgICBGSVBTX2NvcnJ1cHRfcm5nKCk7CisrCX0gZWxzZSBpZiAoIXN0 cmNtcChhcmd2WzFdLCAicm5nc3RpY2siKSkgeworKwkgICAgZG9fcm5nX3N0aWNrID0gMTsKKysJ ICAgIG5vX2V4aXQgPSAxOworKwkgICAgcHJpbnRmKCJSTkcgdGVzdCB3aXRoIHN0dWNrIGNvbnRp bnVvdXMgdGVzdC4uLlxuIik7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIHByaW50 ZigiQmFkIGFyZ3VtZW50IFwiJXNcIlxuIiwgYXJndlsxXSk7CisrICAgICAgICAgICAgZXhpdCgx KTsKKysgICAgICAgIH0KKysJaWYgKCFub19leGl0KSB7CisrICAgICAgICAJaWYgKCFGSVBTX21v ZGVfc2V0KDEpKSB7CisrIAkJICAgIGRvX3ByaW50X2Vycm9ycygpOworKyAgICAgICAgCSAgICBw cmludGYoIlBvd2VyLXVwIHNlbGYgdGVzdCBmYWlsZWRcbiIpOworKwkJICAgIGV4aXQoMSk7Cisr CQl9CisrICAgICAgICAJcHJpbnRmKCJQb3dlci11cCBzZWxmIHRlc3Qgc3VjY2Vzc2Z1bFxuIik7 CisrICAgICAgICAJZXhpdCgwKTsKKysJfQorKyAgICB9CisrCisrICAgIC8qIE5vbi1BcHByb3Zl ZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbgorKyAgICAqLworKyAgICBwcmludGYoIjEuIE5vbi1B cHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbiB0ZXN0Li4uXG4iKTsKKysgICAgcHJpbnRm KCJcdGEuIEluY2x1ZGVkIGFsZ29yaXRobSAoRC1IKS4uLiIpOworKyAgICBwcmludGYoIGRoX3Rl c3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8q IFBvd2VyLXVwIHNlbGYgdGVzdAorKyAgICAqLworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysg ICAgcHJpbnRmKCIyLiBBdXRvbWF0aWMgcG93ZXItdXAgc2VsZiB0ZXN0Li4uIik7CisrICAgIGlm ICghRklQU19tb2RlX3NldCgxKSkKKysJeworKwlkb19wcmludF9lcnJvcnMoKTsKKysgICAgICAg IHByaW50ZihGYWlsKCJGQUlMRUQhXG4iKSk7CisrCWV4aXQoMSk7CisrCX0KKysgICAgcHJpbnRm KCJzdWNjZXNzZnVsXG4iKTsKKysgICAgaWYgKGRvX2NvcnJ1cHRfZHNhX2tleWdlbikKKysgICAg ICAgICAgICBGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbigpOworKyAgICBpZiAoZG9fY29ycnVwdF9y c2Ffa2V5Z2VuKQorKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuKCk7CisrICAg IGlmIChkb19ybmdfc3RpY2spCisrICAgICAgICAgICAgRklQU19ybmdfc3RpY2soKTsKKysKKysg ICAgLyogQUVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorKyAgICAqLworKyAgICBwcmludGYoIjMu IEFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2Flc190 ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAv KiBSU0Ega2V5IGdlbmVyYXRpb24gYW5kIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorKyAgICAqLwor KyAgICBwcmludGYoIjQuIFJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgZW5jcnlwdGlvbi9kZWNyeXB0 aW9uLi4uIik7CisrICAgIHByaW50ZiggRklQU19yc2FfdGVzdChiYWRfcnNhKSA/ICJzdWNjZXNz ZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIERFUy1DQkMgZW5jcnlw dGlvbi9kZWNyeXB0aW9uCisrICAgICovCisrICAgIHByaW50ZigiNS4gREVTLUVDQiBlbmNyeXB0 aW9uL2RlY3J5cHRpb24uLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2RlczNfdGVzdCgpID8gInN1 Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogRFNBIGtleSBn ZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbgorKyAgICAqLworKyAgICBwcmludGYo IjYuIERTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24uLi4iKTsKKysg ICAgcHJpbnRmKCBGSVBTX2RzYV90ZXN0KGJhZF9kc2EpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFp bCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogU0hBLTEgaGFzaAorKyAgICAqLworKyAgICBw cmludGYoIjdhLiBTSEEtMSBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19zaGExX3Rlc3Qo KSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIFNI QS0yNTYgaGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdiLiBTSEEtMjU2IGhhc2guLi4iKTsK KysgICAgcHJpbnRmKCBGSVBTX3NoYTI1Nl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWls KCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBTSEEtNTEyIGhhc2gKKysgICAgKi8KKysgICAg cHJpbnRmKCI3Yy4gU0hBLTUxMiBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19zaGE1MTJf dGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAg LyogSE1BQy1TSEEtMSBoYXNoCisrICAgICovCisrICAgIHByaW50ZigiN2QuIEhNQUMtU0hBLTEg aGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGExX3Rlc3QoKSA/ICJzdWNjZXNz ZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIEhNQUMtU0hBLTIyNCBo YXNoCisrICAgICovCisrICAgIHByaW50ZigiN2UuIEhNQUMtU0hBLTIyNCBoYXNoLi4uIik7Cisr ICAgIHByaW50ZiggRklQU19obWFjX3NoYTIyNF90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBG YWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBITUFDLVNIQS0yNTYgaGFzaAorKyAgICAq LworKyAgICBwcmludGYoIjdmLiBITUFDLVNIQS0yNTYgaGFzaC4uLiIpOworKyAgICBwcmludGYo IEZJUFNfaG1hY19zaGEyNTZfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVE IVxuIikgKTsKKysKKysgICAgLyogSE1BQy1TSEEtMzg0IGhhc2gKKysgICAgKi8KKysgICAgcHJp bnRmKCI3Zy4gSE1BQy1TSEEtMzg0IGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2htYWNf c2hhMzg0X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Cisr CisrICAgIC8qIEhNQUMtU0hBLTUxMiBoYXNoCisrICAgICovCisrICAgIHByaW50ZigiN2guIEhN QUMtU0hBLTUxMiBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19obWFjX3NoYTUxMl90ZXN0 KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBO b24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24KKysgICAgKi8KKysgICAgcHJpbnRm KCI4LiBOb24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24gdGVzdC4uLlxuIik7Cisr ICAgIHByaW50ZigiXHRhLiBJbmNsdWRlZCBhbGdvcml0aG0gKEQtSCkuLi4iKTsKKysgICAgcHJp bnRmKCBkaF90ZXN0KCkgPyAic3VjY2Vzc2Z1bCBhcyBleHBlY3RlZFxuIgorKwkgICAgOiBGYWls KCJmYWlsZWQgSU5DT1JSRUNUTFkhXG4iKSApOworKworKyAgICAvKiBaZXJvaXphdGlvbgorKyAg ICAqLworKyAgICBwcmludGYoIjkuIFplcm8taXphdGlvbi4uLlxuIik7CisrICAgIHByaW50Zigg WmVyb2l6ZSgpID8gIlx0c3VjY2Vzc2Z1bCBhcyBleHBlY3RlZFxuIgorKwkgICAgOiBGYWlsKCJc dGZhaWxlZCBJTkNPUlJFQ1RMWSFcbiIpICk7CisrCisrICAgIHByaW50ZigiXG5BbGwgdGVzdHMg Y29tcGxldGVkIHdpdGggJWQgZXJyb3JzXG4iLCBFcnJvcik7CisrICAgIHJldHVybiBFcnJvciA/ IDEgOiAwOworKyAgICB9CisrCisrI2VuZGlmCitkaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vZmlwc19sb2NsLmgKKy0tLSAvZGV2L251bGwJMjAwOS0xMS0wNCAx MjowMDo1OC44MDEwMDIyNzYgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9m aXBzX2xvY2wuaAkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCAr MSw3MiBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisr ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAg IGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK KysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgor KyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisr dm9pZCBmaXBzX3dfbG9jayh2b2lkKTsKKyt2b2lkIGZpcHNfd191bmxvY2sodm9pZCk7Cisrdm9p ZCBmaXBzX3JfbG9jayh2b2lkKTsKKyt2b2lkIGZpcHNfcl91bmxvY2sodm9pZCk7CisraW50IGZp cHNfaXNfc3RhcnRlZCh2b2lkKTsKKyt2b2lkIGZpcHNfc2V0X3N0YXJ0ZWQodm9pZCk7CisraW50 IGZpcHNfaXNfb3duaW5nX3RocmVhZCh2b2lkKTsKKytpbnQgZmlwc19zZXRfb3duaW5nX3RocmVh ZCh2b2lkKTsKKyt2b2lkIGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwodm9pZCk7CisraW50IGZpcHNf Y2xlYXJfb3duaW5nX3RocmVhZCh2b2lkKTsKKysKKysjZGVmaW5lIEZJUFNfTUFYX0NJUEhFUl9U RVNUX1NJWkUJMTYKKysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKyNlbmRp ZgorZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvTWFr ZWZpbGUKKy0tLSAvZGV2L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYgKzAxMDAK KysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL01ha2VmaWxlCTIwMDktMTEtMTIg MTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDgxIEBACisrIworKyMgT3BlblNT TC9jcnlwdG8vZmlwcy9NYWtlZmlsZQorKyMKKysKKytESVI9CWZpcHMKKytUT1A9CS4uLy4uCisr Q0M9CWNjCisrSU5DTFVERVM9CisrQ0ZMQUc9LWcKKytNQUtFRklMRT0JTWFrZWZpbGUKKytBUj0J CWFyIHIKKysKKytDRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCisrCisrR0VORVJBTD1NYWtl ZmlsZQorK1RFU1Q9Zmlwc190ZXN0X3N1aXRlLmMgZmlwc19yYW5kdGVzdC5jCisrQVBQUz0KKysK KytMSUI9JChUT1ApL2xpYmNyeXB0by5hCisrTElCU1JDPWZpcHNfYWVzX3NlbGZ0ZXN0LmMgZmlw c19kZXNfc2VsZnRlc3QuYyBmaXBzX2htYWNfc2VsZnRlc3QuYyBmaXBzX3JhbmRfc2VsZnRlc3Qu YyBcCisrICAgIGZpcHNfcnNhX3NlbGZ0ZXN0LmMgZmlwc19zaGExX3NlbGZ0ZXN0LmMgZmlwcy5j IGZpcHNfZHNhX3NlbGZ0ZXN0LmMgIGZpcHNfcmFuZC5jIFwKKysgICAgZmlwc19yc2FfeDkzMWcu YworKworK0xJQk9CSj1maXBzX2Flc19zZWxmdGVzdC5vIGZpcHNfZGVzX3NlbGZ0ZXN0Lm8gZmlw c19obWFjX3NlbGZ0ZXN0Lm8gZmlwc19yYW5kX3NlbGZ0ZXN0Lm8gXAorKyAgICBmaXBzX3JzYV9z ZWxmdGVzdC5vIGZpcHNfc2hhMV9zZWxmdGVzdC5vIGZpcHMubyBmaXBzX2RzYV9zZWxmdGVzdC5v ICBmaXBzX3JhbmQubyBcCisrICAgIGZpcHNfcnNhX3g5MzFnLm8KKysKKytTUkM9ICQoTElCU1JD KSBmaXBzX3N0YW5kYWxvbmVfc2hhMS5jCisrCisrRVhIRUFERVI9IGZpcHMuaCBmaXBzX3JhbmQu aAorK0hFQURFUj0JJChFWEhFQURFUikKKysKKytBTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQo SEVBREVSKQorKworK3RvcDoKKysJKGNkIC4uLy4uOyAkKE1BS0UpIERJUlM9Y3J5cHRvIFNESVJT PSQoRElSKSBzdWJfYWxsKQorKworK2FsbDoJbGliCisrCisrbGliOgkkKExJQk9CSikKKysJJChB UikgJChMSUIpICQoTElCT0JKKQorKwkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWlu ZC4KKysJQHRvdWNoIGxpYgorKworK2ZpbGVzOgorKwkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVz LnBsIE1ha2VmaWxlID4+ICQoVE9QKS9NSU5GTworKworK2xpbmtzOgorKwlAJChQRVJMKSAkKFRP UCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhIRUFERVIpCisrCUAk KFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkKKysJQCQoUEVS TCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQorKworK2luc3RhbGw6 CisrCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZp bGUuLi4KKysJQGhlYWRlcmxpc3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4gJCRoZWFkZXJsaXN0 IDsgXAorKwlkbyAgXAorKwkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9p bmNsdWRlL29wZW5zc2wvJCRpOyBcCisrCWNobW9kIDY0NCAkKElOU1RBTExfUFJFRklYKSQoSU5T VEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaSApOyBcCisrCWRvbmU7CisrCisrdGFnczoKKysJ Y3RhZ3MgJChTUkMpCisrCisrdGVzdHM6CisrCisrbGludDoKKysJbGludCAtRExJTlQgJChJTkNM VURFUykgJChTUkMpPmZsdWZmCisrCisrZGVwZW5kOgorKwlAWyAtbiAiJChNQUtFREVQRU5EKSIg XSAjIHNob3VsZCBiZSBzZXQgYnkgdXBwZXIgTWFrZWZpbGUuLi4KKysJJChNQUtFREVQRU5EKSAt LSAkKENGTEFHKSAkKElOQ0xVREVTKSAkKERFUEZMQUcpIC0tICQoUFJPR1MpICQoTElCU1JDKQor KworK2RjbGVhbjoKKysJJChQRVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERFTEVURSBUSElTIExJ TkUvKSB7cHJpbnQ7IGV4aXQoMCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxlLm5ldworKwltdiAt ZiBNYWtlZmlsZS5uZXcgJChNQUtFRklMRSkKKysKKytjbGVhbjoKKysJcm0gLWYgKi5vICoub2Jq IGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKKysKKysjIERPIE5P VCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCisrCitkaWZm IC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9obWFjL2htYWMuYy5maXBzIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL2htYWMvaG1hYy5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vaG1hYy9obWFjLmMuZmlwcwkyMDA4LTExLTEyIDA0OjU4OjAyLjAwMDAwMDAwMCArMDEw MAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2htYWMvaG1hYy5jCTIwMDktMTEtMTIg MTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtNzcsNiArNzcsMTMgQEAgaW50IEhNQUNfSW5p dF9leChITUFDX0NUWCAqY3R4LCBjb25zdCB2bworIAorIAlpZiAoa2V5ICE9IE5VTEwpCisgCQl7 CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJaWYgKEZJUFNfbW9kZSgpICYmICEobWQtPmZsYWdz ICYgRVZQX01EX0ZMQUdfRklQUykKKysJCSYmICghKGN0eC0+bWRfY3R4LmZsYWdzICYgRVZQX01E X0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKQorKwkJIHx8ICEoY3R4LT5pX2N0eC5mbGFncyAmIEVW UF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykKKysJCSB8fCAhKGN0eC0+b19jdHguZmxhZ3Mg JiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKSkKKysJCQlnb3RvIGVycjsKKysjZW5k aWYKKyAJCXJlc2V0PTE7CisgCQlqPUVWUF9NRF9ibG9ja19zaXplKG1kKTsKKyAJCU9QRU5TU0xf YXNzZXJ0KGogPD0gKGludClzaXplb2YoY3R4LT5rZXkpKTsKK0BAIC0yMDksMyArMjE2LDEwIEBA IHVuc2lnbmVkIGNoYXIgKkhNQUMoY29uc3QgRVZQX01EICpldnBfbWQKKyAJcmV0dXJuIE5VTEw7 CisgCX0KKyAKKyt2b2lkIEhNQUNfQ1RYX3NldF9mbGFncyhITUFDX0NUWCAqY3R4LCB1bnNpZ25l ZCBsb25nIGZsYWdzKQorKwl7CisrCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgtPmlfY3R4LCBm bGFncyk7CisrCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgtPm9fY3R4LCBmbGFncyk7CisrCUVW UF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgtPm1kX2N0eCwgZmxhZ3MpOworKwl9CisrCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9obWFjL2htYWMuaC5maXBzIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL2htYWMvaG1hYy5oCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vaG1hYy9obWFjLmguZmlwcwkyMDA5LTExLTEyIDEyOjM2OjQ5LjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2htYWMvaG1hYy5oCTIwMDktMTEtMTIgMTI6 MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMTAxLDYgKzEwMSw3IEBAIHVuc2lnbmVkIGNoYXIg KkhNQUMoY29uc3QgRVZQX01EICpldnBfbWQKKyAJCSAgICB1bnNpZ25lZCBpbnQgKm1kX2xlbik7 CisgaW50IEhNQUNfQ1RYX2NvcHkoSE1BQ19DVFggKmRjdHgsIEhNQUNfQ1RYICpzY3R4KTsKKyAK Kyt2b2lkIEhNQUNfQ1RYX3NldF9mbGFncyhITUFDX0NUWCAqY3R4LCB1bnNpZ25lZCBsb25nIGZs YWdzKTsKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCisgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vTWFrZWZpbGUuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9N YWtlZmlsZQorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL01ha2VmaWxlLmZpcHMJMjAw OS0wNC0wNiAxNjozMTozNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0 L2NyeXB0by9NYWtlZmlsZQkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAg LTM0LDE0ICszNCwxNCBAQCBHRU5FUkFMPU1ha2VmaWxlIFJFQURNRSBjcnlwdG8tbGliLmNvbSBp CisgCisgTElCPSAkKFRPUCkvbGliY3J5cHRvLmEKKyBTSEFSRURfTElCPSBsaWJjcnlwdG8kKFNI TElCX0VYVCkKKy1MSUJTUkM9CWNyeXB0bGliLmMgbWVtLmMgbWVtX2Nsci5jIG1lbV9kYmcuYyBj dmVyc2lvbi5jIGV4X2RhdGEuYyBjcHRfZXJyLmMgZWJjZGljLmMgdWlkLmMgb190aW1lLmMgb19z dHIuYyBvX2Rpci5jCistTElCT0JKPSBjcnlwdGxpYi5vIG1lbS5vIG1lbV9kYmcubyBjdmVyc2lv bi5vIGV4X2RhdGEubyBjcHRfZXJyLm8gZWJjZGljLm8gdWlkLm8gb190aW1lLm8gb19zdHIubyBv X2Rpci5vICQoQ1BVSURfT0JKKQorK0xJQlNSQz0JY3J5cHRsaWIuYyBtZW0uYyBtZW1fY2xyLmMg bWVtX2RiZy5jIGN2ZXJzaW9uLmMgZXhfZGF0YS5jIGNwdF9lcnIuYyBlYmNkaWMuYyB1aWQuYyBv X3RpbWUuYyBvX3N0ci5jIG9fZGlyLmMgb19pbml0LmMgZmlwc19lcnIuYworK0xJQk9CSj0gY3J5 cHRsaWIubyBtZW0ubyBtZW1fZGJnLm8gY3ZlcnNpb24ubyBleF9kYXRhLm8gY3B0X2Vyci5vIGVi Y2RpYy5vIHVpZC5vIG9fdGltZS5vIG9fc3RyLm8gb19kaXIubyBvX2luaXQubyBmaXBzX2Vyci5v ICQoQ1BVSURfT0JKKQorIAorIFNSQz0gJChMSUJTUkMpCisgCisgRVhIRUFERVI9IGNyeXB0by5o IG9wZW5zc2x2Lmggb3BlbnNzbGNvbmYuaCBlYmNkaWMuaCBzeW1oYWNrcy5oIFwKKyAJb3NzbF90 eXAuaAorLUhFQURFUj0JY3J5cHRsaWIuaCBidWlsZGluZi5oIG1kMzJfY29tbW9uLmggb190aW1l Lmggb19zdHIuaCBvX2Rpci5oICQoRVhIRUFERVIpCisrSEVBREVSPQljcnlwdGxpYi5oIGJ1aWxk aW5mLmggZmlwc19sb2NsLmggbWQzMl9jb21tb24uaCBvX3RpbWUuaCBvX3N0ci5oIG9fZGlyLmgg JChFWEhFQURFUikKKyAKKyBBTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQorIAor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jLmZpcHMg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jCistLS0gb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jLmZpcHMJMjAwNC0wNy0yNSAyMToxMDo0 MS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZGMyL21k YzJkZ3N0LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC02MSw2ICs2 MSwxMSBAQAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4K KyAjaW5jbHVkZSA8b3BlbnNzbC9tZGMyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Cisr I2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYK KysKKyAKKyAjdW5kZWYgYzJsCisgI2RlZmluZSBjMmwoYyxsKQkobCA9KChERVNfTE9ORykoKigo YykrKykpKSAgICAsIFwKK0BAIC03NSw3ICs4MCw3IEBACisgCQkJKigoYykrKyk9KHVuc2lnbmVk IGNoYXIpKCgobCk+PjI0TCkmMHhmZikpCisgCisgc3RhdGljIHZvaWQgbWRjMl9ib2R5KE1EQzJf Q1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGxlbik7CistaW50IE1EQzJf SW5pdChNREMyX0NUWCAqYykKKytGSVBTX05PTl9GSVBTX01EX0luaXQoTURDMikKKyAJeworIAlj LT5udW09MDsKKyAJYy0+cGFkX3R5cGU9MTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL21kYzIvbWRjMi5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWRjMi9t ZGMyLmgKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZGMyL21kYzIuaC5maXBzCTIw MDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vbWRjMi9tZGMyLmgJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAK K0BAIC04MCw3ICs4MCw5IEBAIHR5cGVkZWYgc3RydWN0IG1kYzJfY3R4X3N0CisgCWludCBwYWRf dHlwZTsgLyogZWl0aGVyIDEgb3IgMiwgZGVmYXVsdCAxICovCisgCX0gTURDMl9DVFg7CisgCist CisrI2lmZGVmIE9QRU5TU0xfRklQUworK2ludCBwcml2YXRlX01EQzJfSW5pdChNREMyX0NUWCAq Yyk7CisrI2VuZGlmCisgaW50IE1EQzJfSW5pdChNREMyX0NUWCAqYyk7CisgaW50IE1EQzJfVXBk YXRlKE1EQzJfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgbGVuKTsK KyBpbnQgTURDMl9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgTURDMl9DVFggKmMpOworZGlmZiAt dXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWQyL21kMl9kZ3N0LmMuZmlwcyBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9tZDIvbWQyX2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL21kMi9tZDJfZGdzdC5jLmZpcHMJMjAwNy0wOC0zMSAxMjoxMjozNS4wMDAwMDAw MDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZDIvbWQyX2Rnc3QuYwky MDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTYyLDYgKzYyLDExIEBACisg I2luY2x1ZGUgPG9wZW5zc2wvbWQyLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4K KyAjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgorIAorIGNvbnN0IGNoYXIgTUQyX3ZlcnNpb25bXT0iTUQyIiBPUEVOU1NMX1ZFUlNJT05f UFRFWFQ7CisgCitAQCAtMTE2LDcgKzEyMSw3IEBAIGNvbnN0IGNoYXIgKk1EMl9vcHRpb25zKHZv aWQpCisgCQlyZXR1cm4oIm1kMihpbnQpIik7CisgCX0KKyAKKy1pbnQgTUQyX0luaXQoTUQyX0NU WCAqYykKKytGSVBTX05PTl9GSVBTX01EX0luaXQoTUQyKQorIAl7CisgCWMtPm51bT0wOworIAlt ZW1zZXQoYy0+c3RhdGUsMCxzaXplb2YgYy0+c3RhdGUpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vbWQyL21kMi5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v bWQyL21kMi5oCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWQyL21kMi5oLmZpcHMJ MjAwOS0xMS0xMiAxMjozNjo0OS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by9tZDIvbWQyLmgJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAK K0BAIC04MSw2ICs4MSw5IEBAIHR5cGVkZWYgc3RydWN0IE1EMnN0YXRlX3N0CisgCX0gTUQyX0NU WDsKKyAKKyBjb25zdCBjaGFyICpNRDJfb3B0aW9ucyh2b2lkKTsKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisraW50IHByaXZhdGVfTUQyX0luaXQoTUQyX0NUWCAqYyk7CisrI2VuZGlmCisgaW50IE1E Ml9Jbml0KE1EMl9DVFggKmMpOworIGludCBNRDJfVXBkYXRlKE1EMl9DVFggKmMsIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBsZW4pOworIGludCBNRDJfRmluYWwodW5zaWduZWQg Y2hhciAqbWQsIE1EMl9DVFggKmMpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vbWQ0L21kNF9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZDQvbWQ0 X2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kNC9tZDRfZGdzdC5jLmZp cHMJMjAwNy0wMS0yMSAxNDowNzoxMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9tZDQvbWQ0X2Rnc3QuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAw MCArMDEwMAorQEAgLTU5LDYgKzU5LDExIEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1 ZGUgIm1kNF9sb2NsLmgiCisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgorKyNlbmRpZgorKworIAorIGNvbnN0IGNoYXIgTUQ0X3ZlcnNpb25bXT0iTUQ0 IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCitAQCAtNzAsNyArNzUsNyBAQCBjb25zdCBjaGFy IE1ENF92ZXJzaW9uW109Ik1ENCIgT1BFTlNTTF9WCisgI2RlZmluZSBJTklUX0RBVEFfQyAodW5z aWduZWQgbG9uZykweDk4YmFkY2ZlTAorICNkZWZpbmUgSU5JVF9EQVRBX0QgKHVuc2lnbmVkIGxv bmcpMHgxMDMyNTQ3NkwKKyAKKy1pbnQgTUQ0X0luaXQoTUQ0X0NUWCAqYykKKytGSVBTX05PTl9G SVBTX01EX0luaXQoTUQ0KQorIAl7CisgCW1lbXNldCAoYywwLHNpemVvZigqYykpOworIAljLT5B PUlOSVRfREFUQV9BOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWQ0L21k NC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWQ0L21kNC5oCistLS0gb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vbWQ0L21kNC5oLmZpcHMJMjAwOS0xMS0xMiAxMjozNjo0OS4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZDQvbWQ0LmgJ MjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMDUsNiArMTA1LDkgQEAg dHlwZWRlZiBzdHJ1Y3QgTUQ0c3RhdGVfc3QKKyAJdW5zaWduZWQgaW50IG51bTsKKyAJfSBNRDRf Q1RYOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgcHJpdmF0ZV9NRDRfSW5pdChNRDRf Q1RYICpjKTsKKysjZW5kaWYKKyBpbnQgTUQ0X0luaXQoTUQ0X0NUWCAqYyk7CisgaW50IE1ENF9V cGRhdGUoTUQ0X0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CisgaW50IE1E NF9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgTUQ0X0NUWCAqYyk7CitkaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9tZDUvbWQ1X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL21kNS9tZDVfZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v bWQ1L21kNV9kZ3N0LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjExLjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kNS9tZDVfZGdzdC5jCTIwMDktMTEtMTIg MTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtNTksNiArNTksMTEgQEAKKyAjaW5jbHVkZSA8 c3RkaW8uaD4KKyAjaW5jbHVkZSAibWQ1X2xvY2wuaCIKKyAjaW5jbHVkZSA8b3BlbnNzbC9vcGVu c3Nsdi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgCisgY29uc3QgY2hhciBN RDVfdmVyc2lvbltdPSJNRDUiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKKyAKK0BAIC03MCw3ICs3 NSw3IEBAIGNvbnN0IGNoYXIgTUQ1X3ZlcnNpb25bXT0iTUQ1IiBPUEVOU1NMX1YKKyAjZGVmaW5l IElOSVRfREFUQV9DICh1bnNpZ25lZCBsb25nKTB4OThiYWRjZmVMCisgI2RlZmluZSBJTklUX0RB VEFfRCAodW5zaWduZWQgbG9uZykweDEwMzI1NDc2TAorIAorLWludCBNRDVfSW5pdChNRDVfQ1RY ICpjKQorK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChNRDUpCisgCXsKKyAJbWVtc2V0IChjLDAsc2l6 ZW9mKCpjKSk7CisgCWMtPkE9SU5JVF9EQVRBX0E7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by9tZDUvbWQ1LmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZDUv bWQ1LmgKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZDUvbWQ1LmguZmlwcwkyMDA5 LTExLTEyIDEyOjM2OjQ5LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL21kNS9tZDUuaAkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAg LTEwNSw2ICsxMDUsOSBAQCB0eXBlZGVmIHN0cnVjdCBNRDVzdGF0ZV9zdAorIAl1bnNpZ25lZCBp bnQgbnVtOworIAl9IE1ENV9DVFg7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworK2ludCBwcml2 YXRlX01ENV9Jbml0KE1ENV9DVFggKmMpOworKyNlbmRpZgorIGludCBNRDVfSW5pdChNRDVfQ1RY ICpjKTsKKyBpbnQgTUQ1X1VwZGF0ZShNRDVfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXpl X3QgbGVuKTsKKyBpbnQgTUQ1X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBNRDVfQ1RYICpjKTsK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21lbS5jLmZpcHMgb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vbWVtLmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9t ZW0uYy5maXBzCTIwMDgtMTEtMTIgMDQ6NTc6NDcuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vbWVtLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAg KzAxMDAKK0BAIC0xMDEsNyArMTAxLDcgQEAgc3RhdGljIHZvaWQgKCpmcmVlX2xvY2tlZF9mdW5j KSh2b2lkICopIAorIAorIC8qIG1heSBiZSBjaGFuZ2VkIGFzIGxvbmcgYXMgJ2FsbG93X2N1c3Rv bWl6ZV9kZWJ1ZycgaXMgc2V0ICovCisgLyogWFhYIHVzZSBjb3JyZWN0IGZ1bmN0aW9uIHBvaW50 ZXIgdHlwZXMgKi8KKy0jaWZkZWYgQ1JZUFRPX01ERUJVRworKyNpZiBkZWZpbmVkKENSWVBUT19N REVCVUcpICYmICFkZWZpbmVkKE9QRU5TU0xfRklQUykKKyAvKiB1c2UgZGVmYXVsdCBmdW5jdGlv bnMgZnJvbSBtZW1fZGJnLmMgKi8KKyBzdGF0aWMgdm9pZCAoKm1hbGxvY19kZWJ1Z19mdW5jKSh2 b2lkICosaW50LGNvbnN0IGNoYXIgKixpbnQsaW50KQorIAk9IENSWVBUT19kYmdfbWFsbG9jOwor ZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL29faW5pdC5jCist LS0gL2Rldi9udWxsCTIwMDktMTEtMDQgMTI6MDA6NTguODAxMDAyMjc2ICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vb19pbml0LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAw MDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsODAgQEAKKysvKiBvX2luaXQuYyAqLworKy8qIFdyaXR0 ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3Bl blNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQg KGMpIDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoK KysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K KysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlz aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAg c29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6 Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29s a2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo b3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNz aW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysg KgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUg Y2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVp ciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBP cGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0g d2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQ UkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV VAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S IFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE CisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3 cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5 cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8ZV9vcy5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgorKworKy8qIFBlcmZvcm0gYW55IGVzc2VudGlhbCBPcGVuU1NMIGlu aXRpYWxpemF0aW9uIG9wZXJhdGlvbnMuCisrICogQ3VycmVudGx5IG9ubHkgc2V0cyBGSVBTIGNh bGxiYWNrcworKyAqLworKworK3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCkKKysJewor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJc3RhdGljIGludCBkb25lID0gMDsKKysJaWYgKCFkb25l KQorKwkJeworKyNpZmRlZiBDUllQVE9fTURFQlVHCisrCQlDUllQVE9fbWFsbG9jX2RlYnVnX2lu aXQoKTsKKysjZW5kaWYKKysJCWRvbmUgPSAxOworKwkJfQorKyNlbmRpZgorKwl9CisrCQkKKysK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL29wZW5zc2xjb25mLmguaW4uZmlw cyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9vcGVuc3NsY29uZi5oLmluCistLS0gb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbi5maXBzCTIwMDUtMTItMTYgMTE6 Mzc6MjMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vb3Bl bnNzbGNvbmYuaC5pbgkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTEs NSArMSwyMCBAQAorIC8qIGNyeXB0by9vcGVuc3NsY29uZi5oLmluICovCisgCisrI2lmZGVmIE9Q RU5TU0xfRE9JTkdfTUFLRURFUEVORAorKworKy8qIEluY2x1ZGUgYW55IHN5bWJvbHMgaGVyZSB0 aGF0IGhhdmUgdG8gYmUgZXhwbGljaXRseSBzZXQgdG8gZW5hYmxlIGEgZmVhdHVyZQorKyAqIHRo YXQgc2hvdWxkIGJlIHZpc2libGUgdG8gbWFrZWRlcGVuZC4KKysgKgorKyAqIFtPdXIgIm1ha2Ug ZGVwZW5kIiBkb2Vzbid0IGFjdHVhbGx5IGxvb2sgYXQgdGhpcywgd2UgdXNlIGFjdHVhbCBidWls ZCBzZXR0aW5ncworKyAqIGluc3RlYWQ7IHdlIHdhbnQgdG8gbWFrZSBpdCBlYXN5IHRvIHJlbW92 ZSBzdWJkaXJlY3RvcmllcyB3aXRoIGRpc2FibGVkIGFsZ29yaXRobXMuXQorKyAqLworKworKyNp Zm5kZWYgT1BFTlNTTF9GSVBTCisrI2RlZmluZSBPUEVOU1NMX0ZJUFMKKysjZW5kaWYKKysKKysj ZW5kaWYKKysKKyAvKiBHZW5lcmF0ZSA4MDM4NiBjb2RlPyAqLworICN1bmRlZiBJMzg2X09OTFkK KyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3BrY3MxMi9wMTJfY3J0LmMu ZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9wa2NzMTIvcDEyX2NydC5jCistLS0gb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYy5maXBzCTIwMDktMDMtMDkg MTQ6MDg6MDQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v cGtjczEyL3AxMl9jcnQuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAg LTU5LDYgKzU5LDEwIEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgImNyeXB0bGli LmgiCisgI2luY2x1ZGUgPG9wZW5zc2wvcGtjczEyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUwor KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAKKyAKKyBzdGF0aWMgaW50 IHBrY3MxMl9hZGRfYmFnKFNUQUNLX09GKFBLQ1MxMl9TQUZFQkFHKSAqKnBiYWdzLCBQS0NTMTJf U0FGRUJBRyAqYmFnKTsKK0BAIC05MCw3ICs5NCwxNCBAQCBQS0NTMTIgKlBLQ1MxMl9jcmVhdGUo Y2hhciAqcGFzcywgY2hhciAqCisgCisgCS8qIFNldCBkZWZhdWx0cyAqLworIAlpZiAoIW5pZF9j ZXJ0KQorKwkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCWlmIChGSVBTX21vZGUoKSkKKysJ CQluaWRfY2VydCA9IE5JRF9wYmVfV2l0aFNIQTFBbmQzX0tleV9UcmlwbGVERVNfQ0JDOworKwkJ ZWxzZQorKyNlbmRpZgorIAkJbmlkX2NlcnQgPSBOSURfcGJlX1dpdGhTSEExQW5kNDBCaXRSQzJf Q0JDOworKwkJfQorIAlpZiAoIW5pZF9rZXkpCisgCQluaWRfa2V5ID0gTklEX3BiZV9XaXRoU0hB MUFuZDNfS2V5X1RyaXBsZURFU19DQkM7CisgCWlmICghaXRlcikKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL3JhbmQvbWRfcmFuZC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vcmFuZC9tZF9yYW5kLmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9y YW5kL21kX3JhbmQuYy5maXBzCTIwMDktMDEtMDMgMTA6MjU6MzIuMDAwMDAwMDAwICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmFuZC9tZF9yYW5kLmMJMjAwOS0xMS0xMiAx MjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMjYsNiArMTI2LDEwIEBACisgCisgI2luY2x1 ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVm IE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAK KyAjaWZkZWYgQk5fREVCVUcKKyAjIGRlZmluZSBQUkVESUNUCitAQCAtMzQyLDYgKzM0NiwxNCBA QCBzdGF0aWMgaW50IHNzbGVheV9yYW5kX2J5dGVzKHVuc2lnbmVkIGNoCisgI2VuZGlmCisgCWlu dCBkb19zdGlyX3Bvb2wgPSAwOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19t b2RlKCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9TU0xFQVlfUkFORF9CWVRFUyxG SVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKyNlbmRp ZgorKworICNpZmRlZiBQUkVESUNUCisgCWlmIChyYW5kX3ByZWRpY3RhYmxlKQorIAkJeworZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmFuZC9yYW5kX2Vyci5jLmZpcHMgb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmFuZC9yYW5kX2Vyci5jCistLS0gb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vcmFuZC9yYW5kX2Vyci5jLmZpcHMJMjAwNi0xMS0yMSAyMjoyOTo0MS4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYW5kL3JhbmRf ZXJyLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC03MCw2ICs3MCwx MyBAQAorIAorIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgUkFORF9zdHJfZnVuY3RzW109CisgCXsK Kyt7RVJSX0ZVTkMoUkFORF9GX0VOR19SQU5EX0dFVF9SQU5EX01FVEhPRCksCSJFTkdfUkFORF9H RVRfUkFORF9NRVRIT0QifSwKKyt7RVJSX0ZVTkMoUkFORF9GX0ZJUFNfUkFORCksCSJGSVBTX1JB TkQifSwKKyt7RVJSX0ZVTkMoUkFORF9GX0ZJUFNfUkFORF9CWVRFUyksCSJGSVBTX1JBTkRfQllU RVMifSwKKyt7RVJSX0ZVTkMoUkFORF9GX0ZJUFNfUkFORF9TRVRfRFQpLAkiRklQU19SQU5EX1NF VF9EVCJ9LAorK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19TRVRfRFQpLAkiRklQU19TRVRfRFQifSwK Kyt7RVJSX0ZVTkMoUkFORF9GX0ZJUFNfU0VUX1BSTkdfU0VFRCksCSJGSVBTX1NFVF9QUk5HX1NF RUQifSwKKyt7RVJSX0ZVTkMoUkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9ERSksCSJGSVBTX1NFVF9U RVNUX01PREUifSwKKyB7RVJSX0ZVTkMoUkFORF9GX1JBTkRfR0VUX1JBTkRfTUVUSE9EKSwJIlJB TkRfZ2V0X3JhbmRfbWV0aG9kIn0sCisge0VSUl9GVU5DKFJBTkRfRl9TU0xFQVlfUkFORF9CWVRF UyksCSJTU0xFQVlfUkFORF9CWVRFUyJ9LAorIHswLE5VTEx9CitAQCAtNzcsNyArODQsMTcgQEAg c3RhdGljIEVSUl9TVFJJTkdfREFUQSBSQU5EX3N0cl9mdW5jdHNbXQorIAorIHN0YXRpYyBFUlJf U1RSSU5HX0RBVEEgUkFORF9zdHJfcmVhc29uc1tdPQorIAl7Cisre0VSUl9SRUFTT04oUkFORF9S X05PTl9GSVBTX01FVEhPRCkgICAgICAsIm5vbiBmaXBzIG1ldGhvZCJ9LAorK3tFUlJfUkVBU09O KFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFKSAgICAgLCJub3QgaW4gdGVzdCBtb2RlIn0sCisre0VS Ul9SRUFTT04oUkFORF9SX05PX0tFWV9TRVQpICAgICAgICAgICAsIm5vIGtleSBzZXQifSwKKyt7 RVJSX1JFQVNPTihSQU5EX1JfUFJOR19BU0tJTkdfRk9SX1RPT19NVUNIKSwicHJuZyBhc2tpbmcg Zm9yIHRvbyBtdWNoIn0sCisre0VSUl9SRUFTT04oUkFORF9SX1BSTkdfRVJST1IpICAgICAgICAg ICAsInBybmcgZXJyb3IifSwKKyt7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19LRVlFRCkgICAgICAg ICAgICwicHJuZyBrZXllZCJ9LAorK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX05PVF9SRUtFWUVE KSAgICAgLCJwcm5nIG5vdCByZWtleWVkIn0sCisre0VSUl9SRUFTT04oUkFORF9SX1BSTkdfTk9U X1JFU0VFREVEKSAgICAsInBybmcgbm90IHJlc2VlZGVkIn0sCisge0VSUl9SRUFTT04oUkFORF9S X1BSTkdfTk9UX1NFRURFRCkgICAgICAsIlBSTkcgbm90IHNlZWRlZCJ9LAorK3tFUlJfUkVBU09O KFJBTkRfUl9QUk5HX1NFRURfTVVTVF9OT1RfTUFUQ0hfS0VZKSwicHJuZyBzZWVkIG11c3Qgbm90 IG1hdGNoIGtleSJ9LAorK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX1NUVUNLKSAgICAgICAgICAg LCJwcm5nIHN0dWNrIn0sCisgezAsTlVMTH0KKyAJfTsKKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL3JhbmQvcmFuZC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vcmFuZC9yYW5kLmgKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYW5kL3JhbmQu aC5maXBzCTIwMDktMTEtMTIgMTI6MzY6NDkuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vcmFuZC9yYW5kLmgJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAw MDAgKzAxMDAKK0BAIC0xMjgsMTEgKzEyOCwyOCBAQCB2b2lkIEVSUl9sb2FkX1JBTkRfc3RyaW5n cyh2b2lkKTsKKyAvKiBFcnJvciBjb2RlcyBmb3IgdGhlIFJBTkQgZnVuY3Rpb25zLiAqLworIAor IC8qIEZ1bmN0aW9uIGNvZGVzLiAqLworKyNkZWZpbmUgUkFORF9GX0VOR19SQU5EX0dFVF9SQU5E X01FVEhPRAkJCSAxMDgKKysjZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkQJCQkJIDEwMworKyNkZWZp bmUgUkFORF9GX0ZJUFNfUkFORF9CWVRFUwkJCQkgMTAyCisrI2RlZmluZSBSQU5EX0ZfRklQU19S QU5EX1NFVF9EVAkJCQkgMTA2CisrI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfRFQJCQkJIDEwNAor KyNkZWZpbmUgUkFORF9GX0ZJUFNfU0VUX1BSTkdfU0VFRAkJCSAxMDcKKysjZGVmaW5lIFJBTkRf Rl9GSVBTX1NFVF9URVNUX01PREUJCQkgMTA1CisgI2RlZmluZSBSQU5EX0ZfUkFORF9HRVRfUkFO RF9NRVRIT0QJCQkgMTAxCisgI2RlZmluZSBSQU5EX0ZfU1NMRUFZX1JBTkRfQllURVMJCQkgMTAw CisgCisgLyogUmVhc29uIGNvZGVzLiAqLworKyNkZWZpbmUgUkFORF9SX05PTl9GSVBTX01FVEhP RAkJCQkgMTA1CisrI2RlZmluZSBSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERQkJCQkgMTA2CisrI2Rl ZmluZSBSQU5EX1JfTk9fS0VZX1NFVAkJCQkgMTA3CisrI2RlZmluZSBSQU5EX1JfUFJOR19BU0tJ TkdfRk9SX1RPT19NVUNICQkJIDEwMQorKyNkZWZpbmUgUkFORF9SX1BSTkdfRVJST1IJCQkJIDEw OAorKyNkZWZpbmUgUkFORF9SX1BSTkdfS0VZRUQJCQkJIDEwOQorKyNkZWZpbmUgUkFORF9SX1BS TkdfTk9UX1JFS0VZRUQJCQkJIDEwMgorKyNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1JFU0VFREVE CQkJIDEwMworICNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1NFRURFRAkJCQkgMTAwCisrI2RlZmlu ZSBSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENIX0tFWQkJIDExMAorKyNkZWZpbmUgUkFO RF9SX1BSTkdfU1RVQ0sJCQkJIDEwNAorIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKyB9CitkaWZm IC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYW5kL3JhbmRfbGliLmMuZmlwcyBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYW5kL3JhbmRfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9yYW5kL3JhbmRfbGliLmMuZmlwcwkyMDA4LTExLTEyIDA0OjU4OjA0LjAw MDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JhbmQvcmFuZF9s aWIuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTYwLDYgKzYwLDEy IEBACisgI2luY2x1ZGUgPHRpbWUuaD4KKyAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKyAjaW5jbHVk ZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgInJhbmRfbGNsLmgiCisrI2lmZGVmIE9QRU5T U0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9m aXBzX3JhbmQuaD4KKysjZW5kaWYKKysKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisgI2lu Y2x1ZGUgPG9wZW5zc2wvZW5naW5lLmg+CisgI2VuZGlmCitAQCAtMTAyLDggKzEwOCwxOSBAQCBj b25zdCBSQU5EX01FVEhPRCAqUkFORF9nZXRfcmFuZF9tZXRob2QoCisgCQkJZnVuY3RfcmVmID0g ZTsKKyAJCWVsc2UKKyAjZW5kaWYKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQkJZGVmYXVsdF9S QU5EX21ldGggPSBGSVBTX21vZGUoKSA/IEZJUFNfcmFuZF9tZXRob2QoKSA6IFJBTkRfU1NMZWF5 KCk7CisrCQl9CisrCWlmIChGSVBTX21vZGUoKQorKwkJJiYgZGVmYXVsdF9SQU5EX21ldGggIT0g RklQU19yYW5kX2NoZWNrKCkpCisrCSAgICB7CisrCSAgICBSQU5EZXJyKFJBTkRfRl9SQU5EX0dF VF9SQU5EX01FVEhPRCxSQU5EX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJICAgIHJldHVybiAwOwor KwkgICAgfQorKyNlbHNlCisgCQkJZGVmYXVsdF9SQU5EX21ldGggPSBSQU5EX1NTTGVheSgpOwor IAkJfQorKyNlbmRpZgorIAlyZXR1cm4gZGVmYXVsdF9SQU5EX21ldGg7CisgCX0KKyAKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjMi9yYzIuaC5maXBzIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL3JjMi9yYzIuaAorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRv L3JjMi9yYzIuaC5maXBzCTIwMDktMTEtMTIgMTI6MzY6NDkuMDAwMDAwMDAwICswMTAwCisrKysg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmMyL3JjMi5oCTIwMDktMTEtMTIgMTI6MzY6NTAu MDAwMDAwMDAwICswMTAwCitAQCAtNzksNyArNzksOSBAQCB0eXBlZGVmIHN0cnVjdCByYzJfa2V5 X3N0CisgCVJDMl9JTlQgZGF0YVs2NF07CisgCX0gUkMyX0tFWTsKKyAKKy0gCisrI2lmZGVmIE9Q RU5TU0xfRklQUyAKKyt2b2lkIHByaXZhdGVfUkMyX3NldF9rZXkoUkMyX0tFWSAqa2V5LCBpbnQg bGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLGludCBiaXRzKTsKKysjZW5kaWYKKyB2b2lk IFJDMl9zZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAq ZGF0YSxpbnQgYml0cyk7Cisgdm9pZCBSQzJfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hh ciAqaW4sdW5zaWduZWQgY2hhciAqb3V0LFJDMl9LRVkgKmtleSwKKyAJCSAgICAgaW50IGVuYyk7 CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzIvcmMyX3NrZXkuYy5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjMi9yYzJfc2tleS5jCistLS0gb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vcmMyL3JjMl9za2V5LmMuZmlwcwkyMDA3LTA5LTE4IDIzOjEwOjMy LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjMi9yYzJf c2tleS5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtNTcsNiArNTcs MTEgQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSA8b3BlbnNzbC9yYzIuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9jcnlwdG8uaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgorKyNlbmRpZgorKworICNpbmNsdWRlICJyYzJfbG9jbC5oIgorIAorIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGtleV90YWJsZVsyNTZdPXsKK0BAIC05NCw4ICs5OSwyMCBAQCBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrZXlfdGFibGVbMjU2CisgICogQlNBRkUgdXNlcyB0 aGUgJ3JldGFyZGVkJyB2ZXJzaW9uLiAgV2hhdCBJIHByZXZpb3VzbHkgc2hpcHBlZCBpcworICAq IHRoZSBzYW1lIGFzIHNwZWNpZnlpbmcgMTAyNCBmb3IgdGhlICdiaXRzJyBwYXJhbWV0ZXIuICBC c2FmZSB1c2VzCisgICogYSB2ZXJzaW9uIHdoZXJlIHRoZSBiaXRzIHBhcmFtZXRlciBpcyB0aGUg c2FtZSBhcyBsZW4qOCAqLworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyB2b2lkIFJDMl9zZXRf a2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50 IGJpdHMpCisgCXsKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJRklQU19CQURfQUJPUlQoUkMyKQor Kwlwcml2YXRlX1JDMl9zZXRfa2V5KGtleSwgbGVuLCBkYXRhLCBiaXRzKTsKKysJfQorK3ZvaWQg cHJpdmF0ZV9SQzJfc2V0X2tleShSQzJfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmRhdGEsCisrCQkJCQkJCQlpbnQgYml0cykKKysjZWxzZQorK3ZvaWQgUkMyX3NldF9r ZXkoUkMyX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQg Yml0cykKKysjZW5kaWYKKysJeworIAlpbnQgaSxqOworIAl1bnNpZ25lZCBjaGFyICprOworIAlS QzJfSU5UICpraTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9hc20v cmM0LXMzOTB4LnBsLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmM0L2FzbS9yYzQt czM5MHgucGwKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzQvYXNtL3JjNC1zMzkw eC5wbC5maXBzCTIwMDktMDItMTIgMTU6NDg6NDkuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vcmM0L2FzbS9yYzQtczM5MHgucGwJMjAwOS0xMS0xMiAxMjoz Njo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMDIsNCArMjAyLDYgQEAgUkM0X29wdGlvbnM6Cisg LnN0cmluZwkicmM0KDh4LGNoYXIpIgorIF9fXworIAorKyRjb2RlID1+IHMvUkM0X3NldF9rZXkv cHJpdmF0ZV9SQzRfc2V0X2tleS9nIGlmICgkRU5We0ZJUFN9IG5lICIiKTsKKysKKyBwcmludCAk Y29kZTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9hc20vcmM0LXg4 Nl82NC5wbC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9hc20vcmM0LXg4Nl82 NC5wbAorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9hc20vcmM0LXg4Nl82NC5w bC5maXBzCTIwMDktMDQtMjcgMjE6MzE6MDQuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vcmM0L2FzbS9yYzQteDg2XzY0LnBsCTIwMDktMTEtMTIgMTI6MzY6 NTAuMDAwMDAwMDAwICswMTAwCitAQCAtNDk5LDYgKzQ5OSw4IEBAIF9fXworIAorICRjb2RlID1+ IHMvIyhbYndkXSkvJDEvZ207CisgCisrJGNvZGUgPX4gcy9SQzRfc2V0X2tleS9wcml2YXRlX1JD NF9zZXRfa2V5L2cgaWYgKCRFTlZ7RklQU30gbmUgIiIpOworKworIHByaW50ICRjb2RlOworIAor IGNsb3NlIFNURE9VVDsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9h c20vcmM0LTU4Ni5wbC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9hc20vcmM0 LTU4Ni5wbAorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9hc20vcmM0LTU4Ni5w bC5maXBzCTIwMDctMTItMDIgMjI6MzI6MDMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vcmM0L2FzbS9yYzQtNTg2LnBsCTIwMDktMTEtMTIgMTI6MzY6NTAu MDAwMDAwMDAwICswMTAwCitAQCAtMTY2LDggKzE2NiwxMiBAQCAkaWR4PSJlZHgiOworIAorICZl eHRlcm5hbF9sYWJlbCgiT1BFTlNTTF9pYTMyY2FwX1AiKTsKKyAKKyskc2V0a2V5ZnVuYyA9ICJS QzRfc2V0X2tleSI7CisrJHNldGtleWZ1bmMgPSAicHJpdmF0ZV9SQzRfc2V0X2tleSIgaWYgKCRF TlZ7RklQU30gbmUgIiIpOworKworKworICMgdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXks aW50IGxlbixjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKy0mZnVuY3Rpb25fYmVnaW4oIlJD NF9zZXRfa2V5Iik7CisrJmZ1bmN0aW9uX2JlZ2luKCRzZXRrZXlmdW5jKTsKKyAJJm1vdgkoJG91 dCwmd3BhcmFtKDApKTsJCSMgbG9hZCBrZXkKKyAJJm1vdgkoJGlkaSwmd3BhcmFtKDEpKTsJCSMg bG9hZCBsZW4KKyAJJm1vdgkoJGlucCwmd3BhcmFtKDIpKTsJCSMgbG9hZCBkYXRhCitAQCAtMjQ1 LDcgKzI0OSw3IEBAICRpZHg9ImVkeCI7CisgCSZ4b3IJKCJlYXgiLCJlYXgiKTsKKyAJJm1vdgko JkRXUCgtOCwkb3V0KSwiZWF4Iik7CQkjIGtleS0+eD0wOworIAkmbW92CSgmRFdQKC00LCRvdXQp LCJlYXgiKTsJCSMga2V5LT55PTA7CistJmZ1bmN0aW9uX2VuZCgiUkM0X3NldF9rZXkiKTsKKysm ZnVuY3Rpb25fZW5kKCRzZXRrZXlmdW5jKTsKKyAKKyAjIGNvbnN0IGNoYXIgKlJDNF9vcHRpb25z KHZvaWQpOworICZmdW5jdGlvbl9iZWdpbl9CKCJSQzRfb3B0aW9ucyIpOworZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmM0L01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vcmM0L01ha2VmaWxlCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v cmM0L01ha2VmaWxlLmZpcHMJMjAwOS0wMi0xMSAxMTowMTozNi4wMDAwMDAwMDAgKzAxMDAKKysr KyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzQvTWFrZWZpbGUJMjAwOS0xMS0xMiAxMjoz Njo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMSw4ICsyMSw4IEBAIFRFU1Q9cmM0dGVzdC5jCisg QVBQUz0KKyAKKyBMSUI9JChUT1ApL2xpYmNyeXB0by5hCistTElCU1JDPXJjNF9za2V5LmMgcmM0 X2VuYy5jCistTElCT0JKPSQoUkM0X0VOQykKKytMSUJTUkM9cmM0X3NrZXkuYyByYzRfZW5jLmMg cmM0X2ZibGsuYworK0xJQk9CSj0kKFJDNF9FTkMpIHJjNF9mYmxrLm8KKyAKKyBTUkM9ICQoTElC U1JDKQorIAorZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3Jj NC9yYzRfZmJsay5jCistLS0gL2Rldi9udWxsCTIwMDktMTEtMDQgMTI6MDA6NTguODAxMDAyMjc2 ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmM0L3JjNF9mYmxrLmMJMjAw OS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsNzUgQEAKKysvKiBj cnlwdG8vcmM0L3JjNF9mYmxrLmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5z b24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAq LworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBPcGVuU1NMIFBy b2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysg KgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3Ry aWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmlu ZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisr ICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2pl Y3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0 ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysg KiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBu b3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0 dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICog Ni4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhl IGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcv KSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJP SkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysg KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wg UFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVT RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBP RiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqLworKworKworKyNpbmNsdWRlIDxv cGVuc3NsL3JjNC5oPgorKyNpbmNsdWRlICJyYzRfbG9jbC5oIgorKyNpbmNsdWRlIDxvcGVuc3Ns L29wZW5zc2x2Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2lmZGVmIE9QRU5T U0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKysvKiBGSVBT IG1vZGUgYmxvY2tpbmcgZm9yIFJDNCBoYXMgdG8gYmUgZG9uZSBzZXBhcmF0ZWx5IHNpbmNlIFJD NF9zZXRfa2V5CisrICogbWF5IGJlIGltcGxlbWVudGVkIGluIGFuIGFzc2VtYmx5IGxhbmd1YWdl IGZpbGUuCisrICovCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworK3ZvaWQgUkM0X3NldF9rZXko UkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQorKwl7Cisr CWlmIChGSVBTX21vZGUoKSkKKysJCUZJUFNfQkFEX0FCT1JUKFJDNCkKKysJcHJpdmF0ZV9SQzRf c2V0X2tleShrZXksIGxlbiwgZGF0YSk7CisrCX0KKysjZW5kaWYKKysKK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9yYzQuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL3JjNC9yYzQuaAorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9yYzQu aC5maXBzCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vcmM0L3JjNC5oCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAw ICswMTAwCitAQCAtNzgsNiArNzgsOSBAQCB0eXBlZGVmIHN0cnVjdCByYzRfa2V5X3N0CisgCisg IAorIGNvbnN0IGNoYXIgKlJDNF9vcHRpb25zKHZvaWQpOworKyNpZmRlZiBPUEVOU1NMX0ZJUFMK Kyt2b2lkIHByaXZhdGVfUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1 bnNpZ25lZCBjaGFyICpkYXRhKTsKKysjZW5kaWYKKyB2b2lkIFJDNF9zZXRfa2V5KFJDNF9LRVkg KmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Cisgdm9pZCBSQzQoUkM0 X0tFWSAqa2V5LCBzaXplX3QgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbmRhdGEsCisgCQl1 bnNpZ25lZCBjaGFyICpvdXRkYXRhKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL3JjNC9yYzRfc2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmM0L3Jj NF9za2V5LmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzQvcmM0X3NrZXkuYy5m aXBzCTIwMDctMDEtMjEgMTQ6MDc6MTMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vcmM0L3JjNF9za2V5LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAw MDAgKzAxMDAKK0BAIC01OSw2ICs1OSwxMSBAQAorICNpbmNsdWRlIDxvcGVuc3NsL3JjNC5oPgor ICNpbmNsdWRlICJyYzRfbG9jbC5oIgorICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAKKyBjb25zdCBjaGFyIFJDNF92ZXJz aW9uW109IlJDNCIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorQEAgLTg1LDcgKzkwLDExIEBA IGNvbnN0IGNoYXIgKlJDNF9vcHRpb25zKHZvaWQpCisgICogRGF0ZTogV2VkLCAxNCBTZXAgMTk5 NCAwNjozNTozMSBHTVQKKyAgKi8KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrdm9pZCBwcml2 YXRlX1JDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hh ciAqZGF0YSkKKysjZWxzZQorIHZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVu LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQorKyNlbmRpZgorIAl7CisgICAgICAgICByZWdp c3RlciBSQzRfSU5UIHRtcDsKKyAgICAgICAgIHJlZ2lzdGVyIGludCBpZDEsaWQyOworQEAgLTEy Niw3ICsxMzUsMTIgQEAgdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIAor IAkJICogbW9kdWxlLi4uCisgCQkgKgkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+CisgCQkgKi8K KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQl1bnNpZ25lZCBsb25nICppYTMyY2FwX3B0ciA9IE9Q RU5TU0xfaWEzMmNhcF9sb2MoKTsKKysJCWlmIChpYTMyY2FwX3B0ciAmJiAoKmlhMzJjYXBfcHRy ICYgKDE8PDI4KSkpIHsKKysjZWxzZQorIAkJaWYgKE9QRU5TU0xfaWEzMmNhcF9QICYgKDE8PDI4 KSkgeworKyNlbmRpZgorIAkJCXVuc2lnbmVkIGNoYXIgKmNwPSh1bnNpZ25lZCBjaGFyICopZDsK KyAKKyAJCQlmb3IgKGk9MDtpPDI1NjtpKyspIGNwW2ldPWk7CitkaWZmIC11cCBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9yaXBlbWQvcmlwZW1kLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0 L2NyeXB0by9yaXBlbWQvcmlwZW1kLmgKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9y aXBlbWQvcmlwZW1kLmguZmlwcwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JpcGVtZC9yaXBlbWQuaAkyMDA5LTExLTEy IDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTkxLDYgKzkxLDkgQEAgdHlwZWRlZiBzdHJ1 Y3QgUklQRU1EMTYwc3RhdGVfc3QKKyAJdW5zaWduZWQgaW50ICAgbnVtOworIAl9IFJJUEVNRDE2 MF9DVFg7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworK2ludCBwcml2YXRlX1JJUEVNRDE2MF9J bml0KFJJUEVNRDE2MF9DVFggKmMpOworKyNlbmRpZgorIGludCBSSVBFTUQxNjBfSW5pdChSSVBF TUQxNjBfQ1RYICpjKTsKKyBpbnQgUklQRU1EMTYwX1VwZGF0ZShSSVBFTUQxNjBfQ1RYICpjLCBj b25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKKyBpbnQgUklQRU1EMTYwX0ZpbmFsKHVuc2ln bmVkIGNoYXIgKm1kLCBSSVBFTUQxNjBfQ1RYICpjKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9y aXBlbWQvcm1kX2Rnc3QuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6MTMuMDAwMDAwMDAwICswMTAw CisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMJMjAwOS0x MS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC01OSw2ICs1OSwxMSBAQAorICNpbmNs dWRlIDxzdGRpby5oPgorICNpbmNsdWRlICJybWRfbG9jbC5oIgorICNpbmNsdWRlIDxvcGVuc3Ns L29wZW5zc2x2Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xf RklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAKKyBjb25zdCBj aGFyIFJNRDE2MF92ZXJzaW9uW109IlJJUEUtTUQxNjAiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsK KyAKK0BAIC02OSw3ICs3NCw3IEBAIGNvbnN0IGNoYXIgUk1EMTYwX3ZlcnNpb25bXT0iUklQRS1N RDE2MCIKKyAgICAgIHZvaWQgcmlwZW1kMTYwX2Jsb2NrKFJJUEVNRDE2MF9DVFggKmMsIHVuc2ln bmVkIGxvbmcgKnAsc2l6ZV90IG51bSk7CisgIyAgZW5kaWYKKyAKKy1pbnQgUklQRU1EMTYwX0lu aXQoUklQRU1EMTYwX0NUWCAqYykKKytGSVBTX05PTl9GSVBTX01EX0luaXQoUklQRU1EMTYwKQor IAl7CisgCW1lbXNldCAoYywwLHNpemVvZigqYykpOworIAljLT5BPVJJUEVNRDE2MF9BOworZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcnNhL3JzYV9lYXkuYy5maXBzIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9yc2FfZWF5LmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by9yc2EvcnNhX2VheS5jLmZpcHMJMjAwOC0wOS0xNCAxNTo1MTo0NC4wMDAwMDAw MDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yc2EvcnNhX2VheS5jCTIw MDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMTE0LDYgKzExNCw4IEBACisg I2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAjaW5j bHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgorIAorICNpZm5kZWYgUlNBX05VTEwKKyAKK0BAIC0xMzgsNyAr MTQwLDcgQEAgc3RhdGljIFJTQV9NRVRIT0QgcnNhX3BrY3MxX2VheV9tZXRoPXsKKyAJQk5fbW9k X2V4cF9tb250LCAvKiBYWFggcHJvYmFibHkgd2Ugc2hvdWxkIG5vdCB1c2UgTW9udGdvbWVyeSBp ZiAgZSA9PSAzICovCisgCVJTQV9lYXlfaW5pdCwKKyAJUlNBX2VheV9maW5pc2gsCistCTAsIC8q IGZsYWdzICovCisrCVJTQV9GTEFHX0ZJUFNfTUVUSE9ELCAvKiBmbGFncyAqLworIAlOVUxMLAor IAkwLCAvKiByc2Ffc2lnbiAqLworIAkwLCAvKiByc2FfdmVyaWZ5ICovCitAQCAtMTUwLDYgKzE1 MiwxNiBAQCBjb25zdCBSU0FfTUVUSE9EICpSU0FfUEtDUzFfU1NMZWF5KHZvaWQpCisgCXJldHVy bigmcnNhX3BrY3MxX2VheV9tZXRoKTsKKyAJfQorIAorKy8qIFVzYWdlIGV4YW1wbGU7CisrICog ICAgTU9OVF9IRUxQRVIocnNhLCBibl9jdHgsIHAsIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNI RV9QUklWQVRFLCBnb3RvIGVycik7CisrICovCisrI2RlZmluZSBNT05UX0hFTFBFUihyc2EsIGN0 eCwgbSwgcHJlX2NvbmQsIGVycl9pbnN0cikgXAorKwlpZigocHJlX2NvbmQpICYmICgocnNhKS0+ X21ldGhvZF9tb2RfIyNtID09IE5VTEwpICYmIFwKKysJCQkhQk5fTU9OVF9DVFhfc2V0X2xvY2tl ZCgmKChyc2EpLT5fbWV0aG9kX21vZF8jI20pLCBcCisrCQkJCUNSWVBUT19MT0NLX1JTQSwgXAor KwkJCQkocnNhKS0+bSwgKGN0eCkpKSBcCisrCQllcnJfaW5zdHIKKysKKyBzdGF0aWMgaW50IFJT QV9lYXlfcHVibGljX2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb20s CisgCSAgICAgdW5zaWduZWQgY2hhciAqdG8sIFJTQSAqcnNhLCBpbnQgcGFkZGluZykKKyAJewor QEAgLTE1OCw2ICsxNzAsMjMgQEAgc3RhdGljIGludCBSU0FfZWF5X3B1YmxpY19lbmNyeXB0KGlu dCBmbAorIAl1bnNpZ25lZCBjaGFyICpidWY9TlVMTDsKKyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAK KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfbW9kZSgpKQorKwkJeworKwkJaWYgKEZJ UFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlf UFVCTElDX0VOQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCQlnb3RvIGVy cjsKKysJCQl9CisrCisrCQlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJ UFNfTUlOX01PRFVMVVNfQklUUykKKysJCQl7CisrCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVC TElDX0VOQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQkJcmV0dXJuIC0xOwor KwkJCX0KKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKEJOX251bV9iaXRzKHJzYS0+bikgPiBPUEVO U1NMX1JTQV9NQVhfTU9EVUxVU19CSVRTKQorIAkJeworIAkJUlNBZXJyKFJTQV9GX1JTQV9FQVlf UFVCTElDX0VOQ1JZUFQsIFJTQV9SX01PRFVMVVNfVE9PX0xBUkdFKTsKK0BAIC0yMjMsOSArMjUy LDcgQEAgc3RhdGljIGludCBSU0FfZWF5X3B1YmxpY19lbmNyeXB0KGludCBmbAorIAkJZ290byBl cnI7CisgCQl9CisgCistCWlmIChyc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDKQor LQkJaWYgKCFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCZyc2EtPl9tZXRob2RfbW9kX24sIENSWVBU T19MT0NLX1JTQSwgcnNhLT5uLCBjdHgpKQorLQkJCWdvdG8gZXJyOworKwlNT05UX0hFTFBFUihy c2EsIGN0eCwgbiwgcnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQywgZ290byBlcnIp OworIAorIAlpZiAoIXJzYS0+bWV0aC0+Ym5fbW9kX2V4cChyZXQsZixyc2EtPmUscnNhLT5uLGN0 eCwKKyAJCXJzYS0+X21ldGhvZF9tb2RfbikpIGdvdG8gZXJyOworQEAgLTM1NSw2ICszODIsMjMg QEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZW5jcnlwdChpbnQgZgorIAlpbnQgbG9jYWxf YmxpbmRpbmcgPSAwOworIAlCTl9CTElORElORyAqYmxpbmRpbmcgPSBOVUxMOworIAorKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJeworKwkJaWYoRklQU19zZWxm dGVzdF9mYWlsZWQoKSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QUklWQVRF X0VOQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCQlnb3RvIGVycjsKKysJ CQl9CisrCisrCQlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlO X01PRFVMVVNfQklUUykKKysJCQl7CisrCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFJJVkFURV9F TkNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJCXJldHVybiAtMTsKKysJCQl9 CisrCQl9CisrI2VuZGlmCisrCisgCWlmICgoY3R4PUJOX0NUWF9uZXcoKSkgPT0gTlVMTCkgZ290 byBlcnI7CisgCUJOX0NUWF9zdGFydChjdHgpOworIAlmICAgPSBCTl9DVFhfZ2V0KGN0eCk7CitA QCAtNDMyLDkgKzQ3Niw3IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wcml2YXRlX2VuY3J5cHQoaW50 IGYKKyAJCWVsc2UKKyAJCQlkPSByc2EtPmQ7CisgCistCQlpZiAocnNhLT5mbGFncyAmIFJTQV9G TEFHX0NBQ0hFX1BVQkxJQykKKy0JCQlpZighQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNhLT5f bWV0aG9kX21vZF9uLCBDUllQVE9fTE9DS19SU0EsIHJzYS0+biwgY3R4KSkKKy0JCQkJZ290byBl cnI7CisrCQlNT05UX0hFTFBFUihyc2EsIGN0eCwgbiwgcnNhLT5mbGFncyAmIFJTQV9GTEFHX0NB Q0hFX1BVQkxJQywgZ290byBlcnIpOworIAorIAkJaWYgKCFyc2EtPm1ldGgtPmJuX21vZF9leHAo cmV0LGYsZCxyc2EtPm4sY3R4LAorIAkJCQlyc2EtPl9tZXRob2RfbW9kX24pKSBnb3RvIGVycjsK K0BAIC00ODgsNiArNTMwLDIzIEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wcml2YXRlX2RlY3J5cHQo aW50IGYKKyAJaW50IGxvY2FsX2JsaW5kaW5nID0gMDsKKyAJQk5fQkxJTkRJTkcgKmJsaW5kaW5n ID0gTlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSkKKysJ CXsKKysJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQ U19GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7 CisrCQkJZ290byBlcnI7CisrCQkJfQorKworKwkJaWYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBP UEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpCisrCQkJeworKwkJCVJTQWVycihSU0Ff Rl9SU0FfRUFZX1BSSVZBVEVfREVDUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJ CQlyZXR1cm4gLTE7CisrCQkJfQorKwkJfQorKyNlbmRpZgorKworIAlpZigoY3R4ID0gQk5fQ1RY X25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKKyAJQk5fQ1RYX3N0YXJ0KGN0eCk7CisgCWYgICA9 IEJOX0NUWF9nZXQoY3R4KTsKK0BAIC01NTUsOSArNjE0LDcgQEAgc3RhdGljIGludCBSU0FfZWF5 X3ByaXZhdGVfZGVjcnlwdChpbnQgZgorIAkJZWxzZQorIAkJCWQgPSByc2EtPmQ7CisgCistCQlp ZiAocnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQykKKy0JCQlpZiAoIUJOX01PTlRf Q1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2RfbiwgQ1JZUFRPX0xPQ0tfUlNBLCByc2Et Pm4sIGN0eCkpCistCQkJCWdvdG8gZXJyOworKwkJTU9OVF9IRUxQRVIocnNhLCBjdHgsIG4sIHJz YS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMsIGdvdG8gZXJyKTsKKyAJCWlmICghcnNh LT5tZXRoLT5ibl9tb2RfZXhwKHJldCxmLGQscnNhLT5uLGN0eCwKKyAJCQkJcnNhLT5fbWV0aG9k X21vZF9uKSkKKyAJCSAgZ290byBlcnI7CitAQCAtNjE3LDYgKzY3NCwyMyBAQCBzdGF0aWMgaW50 IFJTQV9lYXlfcHVibGljX2RlY3J5cHQoaW50IGZsCisgCXVuc2lnbmVkIGNoYXIgKmJ1Zj1OVUxM OworIAlCTl9DVFggKmN0eD1OVUxMOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJ UFNfbW9kZSgpKQorKwkJeworKwkJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCQl7Cisr CQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVCxGSVBTX1JfRklQU19TRUxG VEVTVF9GQUlMRUQpOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysKKysJCWlmIChCTl9udW1fYml0 cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQorKwkJCXsKKysJ CQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9P X1NNQUxMKTsKKysJCQlyZXR1cm4gLTE7CisrCQkJfQorKwkJfQorKyNlbmRpZgorKworIAlpZiAo Qk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5TU0xfUlNBX01BWF9NT0RVTFVTX0JJVFMpCisgCQl7 CisgCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVCwgUlNBX1JfTU9EVUxVU19U T09fTEFSR0UpOworQEAgLTY2Nyw5ICs3NDEsNyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGlj X2RlY3J5cHQoaW50IGZsCisgCQlnb3RvIGVycjsKKyAJCX0KKyAKKy0JaWYgKHJzYS0+ZmxhZ3Mg JiBSU0FfRkxBR19DQUNIRV9QVUJMSUMpCistCQlpZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQo JnJzYS0+X21ldGhvZF9tb2RfbiwgQ1JZUFRPX0xPQ0tfUlNBLCByc2EtPm4sIGN0eCkpCistCQkJ Z290byBlcnI7CisrCU1PTlRfSEVMUEVSKHJzYSwgY3R4LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZM QUdfQ0FDSEVfUFVCTElDLCBnb3RvIGVycik7CisgCisgCWlmICghcnNhLT5tZXRoLT5ibl9tb2Rf ZXhwKHJldCxmLHJzYS0+ZSxyc2EtPm4sY3R4LAorIAkJcnNhLT5fbWV0aG9kX21vZF9uKSkgZ290 byBlcnI7CitAQCAtNzE3LDYgKzc4OSw3IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9tb2RfZXhwKEJJ R05VTSAqcjAsIGMKKyAJQklHTlVNICpyMSwqbTEsKnZyZnk7CisgCUJJR05VTSBsb2NhbF9kbXAx LGxvY2FsX2RtcTEsbG9jYWxfYyxsb2NhbF9yMTsKKyAJQklHTlVNICpkbXAxLCpkbXExLCpjLCpw cjE7CisrCWludCBibl9mbGFnczsKKyAJaW50IHJldD0wOworIAorIAlCTl9DVFhfc3RhcnQoY3R4 KTsKK0BAIC03MjQsNDEgKzc5NywzMSBAQCBzdGF0aWMgaW50IFJTQV9lYXlfbW9kX2V4cChCSUdO VU0gKnIwLCBjCisgCW0xID0gQk5fQ1RYX2dldChjdHgpOworIAl2cmZ5ID0gQk5fQ1RYX2dldChj dHgpOworIAorLQl7CistCQlCSUdOVU0gbG9jYWxfcCwgbG9jYWxfcTsKKy0JCUJJR05VTSAqcCA9 IE5VTEwsICpxID0gTlVMTDsKKy0KKy0JCS8qIE1ha2Ugc3VyZSBCTl9tb2RfaW52ZXJzZSBpbiBN b250Z29tZXJ5IGludGlhbGl6YXRpb24gdXNlcyB0aGUKKy0JCSAqIEJOX0ZMR19DT05TVFRJTUUg ZmxhZyAodW5sZXNzIFJTQV9GTEFHX05PX0NPTlNUVElNRSBpcyBzZXQpCistCQkgKi8KKy0JCWlm ICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT19DT05TVFRJTUUpKQorLQkJCXsKKy0JCQlCTl9p bml0KCZsb2NhbF9wKTsKKy0JCQlwID0gJmxvY2FsX3A7CistCQkJQk5fd2l0aF9mbGFncyhwLCBy c2EtPnAsIEJOX0ZMR19DT05TVFRJTUUpOworLQorLQkJCUJOX2luaXQoJmxvY2FsX3EpOworLQkJ CXEgPSAmbG9jYWxfcTsKKy0JCQlCTl93aXRoX2ZsYWdzKHEsIHJzYS0+cSwgQk5fRkxHX0NPTlNU VElNRSk7CistCQkJfQorLQkJZWxzZQorLQkJCXsKKy0JCQlwID0gcnNhLT5wOworLQkJCXEgPSBy c2EtPnE7CistCQkJfQorKwkvKiBNYWtlIHN1cmUgbW9kX2ludmVyc2UgaW4gbW9udGdvbWVyZXkg aW50aWFsaXphdGlvbiB1c2UgY29ycmVjdCAKKysJICogQk5fRkxHX0NPTlNUVElNRSBmbGFnLgor KwkgKi8KKysJYm5fZmxhZ3MgPSByc2EtPnAtPmZsYWdzOworKwlpZiAoIShyc2EtPmZsYWdzICYg UlNBX0ZMQUdfTk9fQ09OU1RUSU1FKSkKKysJCXsKKysJCXJzYS0+cC0+ZmxhZ3MgfD0gQk5fRkxH X0NPTlNUVElNRTsKKysJCX0KKysJTU9OVF9IRUxQRVIocnNhLCBjdHgsIHAsIHJzYS0+ZmxhZ3Mg JiBSU0FfRkxBR19DQUNIRV9QUklWQVRFLCBnb3RvIGVycik7CisrCS8qIFdlIHJlc3RvcmUgYm5f ZmxhZ3MgYmFjayAqLworKwlyc2EtPnAtPmZsYWdzID0gYm5fZmxhZ3M7CisgCistCQlpZiAocnNh LT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BSSVZBVEUpCistCQkJeworLQkJCWlmICghQk5fTU9O VF9DVFhfc2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9wLCBDUllQVE9fTE9DS19SU0EsIHAs IGN0eCkpCistCQkJCWdvdG8gZXJyOworLQkJCWlmICghQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgm cnNhLT5fbWV0aG9kX21vZF9xLCBDUllQVE9fTE9DS19SU0EsIHEsIGN0eCkpCistCQkJCWdvdG8g ZXJyOworLQkJCX0KKy0JfQorKyAgICAgICAgLyogTWFrZSBzdXJlIG1vZF9pbnZlcnNlIGluIG1v bnRnb21lcmV5IGludGlhbGl6YXRpb24gdXNlIGNvcnJlY3QKKysgICAgICAgICAqIEJOX0ZMR19D T05TVFRJTUUgZmxhZy4KKysgICAgICAgICAqLworKwlibl9mbGFncyA9IHJzYS0+cS0+ZmxhZ3M7 CisrCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT19DT05TVFRJTUUpKQorKwkJeworKwkJ cnNhLT5xLT5mbGFncyB8PSBCTl9GTEdfQ09OU1RUSU1FOworKwkJfQorKwlNT05UX0hFTFBFUihy c2EsIGN0eCwgcSwgcnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BSSVZBVEUsIGdvdG8gZXJy KTsKKysJLyogV2UgcmVzdG9yZSBibl9mbGFncyBiYWNrICovCisrCXJzYS0+cS0+ZmxhZ3MgPSBi bl9mbGFnczsJCisgCistCWlmIChyc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDKQor LQkJaWYgKCFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCZyc2EtPl9tZXRob2RfbW9kX24sIENSWVBU T19MT0NLX1JTQSwgcnNhLT5uLCBjdHgpKQorLQkJCWdvdG8gZXJyOworKwlNT05UX0hFTFBFUihy c2EsIGN0eCwgbiwgcnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQywgZ290byBlcnIp OworIAorIAkvKiBjb21wdXRlIEkgbW9kIHEgKi8KKyAJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9G TEFHX05PX0NPTlNUVElNRSkpCitAQCAtODc1LDYgKzkzOCw5IEBAIGVycjoKKyAKKyBzdGF0aWMg aW50IFJTQV9lYXlfaW5pdChSU0EgKnJzYSkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJ RklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAlyc2EtPmZsYWdzfD1SU0FfRkxBR19D QUNIRV9QVUJMSUN8UlNBX0ZMQUdfQ0FDSEVfUFJJVkFURTsKKyAJcmV0dXJuKDEpOworIAl9Citk aWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yc2EvcnNhX2Vyci5jLmZpcHMgb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcnNhL3JzYV9lcnIuYworLS0tIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL3JzYS9yc2FfZXJyLmMuZmlwcwkyMDA4LTEyLTI5IDE3OjExOjU2LjAwMDAw MDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9yc2FfZXJyLmMJ MjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMTEsOCArMTExLDEyIEBA IHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgUlNBX3N0cl9mdW5jdHNbXT0KKyB7RVJSX0ZVTkMoUlNB X0ZfUlNBX1BSSU5UX0ZQKSwJIlJTQV9wcmludF9mcCJ9LAorIHtFUlJfRlVOQyhSU0FfRl9SU0Ff UFJJVl9ERUNPREUpLAkiUlNBX1BSSVZfREVDT0RFIn0sCisge0VSUl9GVU5DKFJTQV9GX1JTQV9Q UklWX0VOQ09ERSksCSJSU0FfUFJJVl9FTkNPREUifSwKKyt7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BS SVZBVEVfRU5DUllQVCksCSJSU0FfcHJpdmF0ZV9lbmNyeXB0In0sCisge0VSUl9GVU5DKFJTQV9G X1JTQV9QVUJfREVDT0RFKSwJIlJTQV9QVUJfREVDT0RFIn0sCisre0VSUl9GVU5DKFJTQV9GX1JT QV9QVUJMSUNfREVDUllQVCksCSJSU0FfcHVibGljX2RlY3J5cHQifSwKKyB7RVJSX0ZVTkMoUlNB X0ZfUlNBX1NFVFVQX0JMSU5ESU5HKSwJIlJTQV9zZXR1cF9ibGluZGluZyJ9LAorK3tFUlJfRlVO QyhSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVUSE9EKSwJIlJTQV9zZXRfZGVmYXVsdF9tZXRob2Qi fSwKKyt7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVF9NRVRIT0QpLAkiUlNBX3NldF9tZXRob2QifSwK KyB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NJR04pLAkiUlNBX3NpZ24ifSwKKyB7RVJSX0ZVTkMoUlNB X0ZfUlNBX1NJR05fQVNOMV9PQ1RFVF9TVFJJTkcpLAkiUlNBX3NpZ25fQVNOMV9PQ1RFVF9TVFJJ TkcifSwKKyB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1ZFUklGWSksCSJSU0FfdmVyaWZ5In0sCitAQCAt MTU1LDEwICsxNTksMTIgQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSU0Ffc3RyX3JlYXNvbnNb XQorIHtFUlJfUkVBU09OKFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCkgICAgLCJrZXkgc2l6ZSB0 b28gc21hbGwifSwKKyB7RVJSX1JFQVNPTihSU0FfUl9MQVNUX09DVEVUX0lOVkFMSUQpICAgICwi bGFzdCBvY3RldCBpbnZhbGlkIn0sCisge0VSUl9SRUFTT04oUlNBX1JfTU9EVUxVU19UT09fTEFS R0UpICAgICAsIm1vZHVsdXMgdG9vIGxhcmdlIn0sCisre0VSUl9SRUFTT04oUlNBX1JfTk9OX0ZJ UFNfTUVUSE9EKSAgICAgICAsIm5vbiBmaXBzIG1ldGhvZCJ9LAorIHtFUlJfUkVBU09OKFJTQV9S X05PX1BVQkxJQ19FWFBPTkVOVCkgICAgLCJubyBwdWJsaWMgZXhwb25lbnQifSwKKyB7RVJSX1JF QVNPTihSU0FfUl9OVUxMX0JFRk9SRV9CTE9DS19NSVNTSU5HKSwibnVsbCBiZWZvcmUgYmxvY2sg bWlzc2luZyJ9LAorIHtFUlJfUkVBU09OKFJTQV9SX05fRE9FU19OT1RfRVFVQUxfUF9RKSAgLCJu IGRvZXMgbm90IGVxdWFsIHAgcSJ9LAorIHtFUlJfUkVBU09OKFJTQV9SX09BRVBfREVDT0RJTkdf RVJST1IpICAgLCJvYWVwIGRlY29kaW5nIGVycm9yIn0sCisre0VSUl9SRUFTT04oUlNBX1JfT1BF UkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSksIm9wZXJhdGlvbiBub3QgYWxsb3dlZCBp biBmaXBzIG1vZGUifSwKKyB7RVJSX1JFQVNPTihSU0FfUl9PUEVSQVRJT05fTk9UX1NVUFBPUlRF RF9GT1JfVEhJU19LRVlUWVBFKSwib3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMga2V5 dHlwZSJ9LAorIHtFUlJfUkVBU09OKFJTQV9SX1BBRERJTkdfQ0hFQ0tfRkFJTEVEKSAgLCJwYWRk aW5nIGNoZWNrIGZhaWxlZCJ9LAorIHtFUlJfUkVBU09OKFJTQV9SX1BfTk9UX1BSSU1FKSAgICAg ICAgICAgLCJwIG5vdCBwcmltZSJ9LAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vcnNhL3JzYV9nZW4uYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9yc2Ff Z2VuLmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yc2EvcnNhX2dlbi5jLmZpcHMJ MjAwNy0wMy0yOCAwMjoxNToyNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by9yc2EvcnNhX2dlbi5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICsw MTAwCitAQCAtNjcsNiArNjcsODIgQEAKKyAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKyAjaW5jbHVk ZSA8b3BlbnNzbC9ibi5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgImZpcHNfbG9jbC5o IgorKworK3N0YXRpYyBpbnQgZmlwc19yc2FfcGFpcndpc2VfZmFpbCA9IDA7CisrCisrdm9pZCBG SVBTX2NvcnJ1cHRfcnNhX2tleWdlbih2b2lkKQorKwl7CisrCWZpcHNfcnNhX3BhaXJ3aXNlX2Zh aWwgPSAxOworKwl9CisrCisraW50IGZpcHNfY2hlY2tfcnNhKFJTQSAqcnNhKQorKwl7CisrCWNv bnN0IHVuc2lnbmVkIGNoYXIgdGJzW10gPSAiUlNBIFBhaXJ3aXNlIENoZWNrIERhdGEiOworKwl1 bnNpZ25lZCBjaGFyICpjdGJ1ZiA9IE5VTEwsICpwdGJ1ZiA9IE5VTEw7CisrCWludCBsZW4sIHJl dCA9IDA7CisrCUVWUF9QS0VZICpwazsKKysKKysJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0g TlVMTCkKKysJCWdvdG8gZXJyOworKworKwlFVlBfUEtFWV9zZXQxX1JTQShwaywgcnNhKTsKKysK KysJLyogUGVyZm9ybSBwYWlyd2lzZSBjb25zaXN0ZW5jeSBzaWduYXR1cmUgdGVzdCAqLworKwlp ZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwKKysJCQlOVUxMLCAwLCBF VlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLCBOVUxMKQorKwkJfHwgIWZpcHNf cGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwKKysJCQlOVUxMLCAwLCBFVlBfc2hhMSgp LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsIE5VTEwpCisrCQl8fCAhZmlwc19wa2V5X3NpZ25h dHVyZV90ZXN0KHBrLCB0YnMsIC0xLAorKwkJCU5VTEwsIDAsIEVWUF9zaGExKCksIEVWUF9NRF9D VFhfRkxBR19QQURfUFNTLCBOVUxMKSkKKysJCWdvdG8gZXJyOworKwkvKiBOb3cgcGVyZm9ybSBw YWlyd2lzZSBjb25zaXN0ZW5jeSBlbmNyeXB0L2RlY3J5cHQgdGVzdCAqLworKwljdGJ1ZiA9IE9Q RU5TU0xfbWFsbG9jKFJTQV9zaXplKHJzYSkpOworKwlpZiAoIWN0YnVmKQorKwkJZ290byBlcnI7 CisrCisrCWxlbiA9IFJTQV9wdWJsaWNfZW5jcnlwdChzaXplb2YodGJzKSAtIDEsIHRicywgY3Ri dWYsIHJzYSwgUlNBX1BLQ1MxX1BBRERJTkcpOworKwlpZiAobGVuIDw9IDApCisrCQlnb3RvIGVy cjsKKysJLyogQ2hlY2sgY2lwaGVydGV4dCBkb2Vzbid0IG1hdGNoIHBsYWludGV4dCAqLworKwlp ZiAoKGxlbiA9PSAoc2l6ZW9mKHRicykgLSAxKSkgJiYgIW1lbWNtcCh0YnMsIGN0YnVmLCBsZW4p KQorKwkJZ290byBlcnI7CisrCXB0YnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX3NpemUocnNhKSk7 CisrCisrCWlmICghcHRidWYpCisrCQlnb3RvIGVycjsKKysJbGVuID0gUlNBX3ByaXZhdGVfZGVj cnlwdChsZW4sIGN0YnVmLCBwdGJ1ZiwgcnNhLCBSU0FfUEtDUzFfUEFERElORyk7CisrCWlmIChs ZW4gIT0gKHNpemVvZih0YnMpIC0gMSkpCisrCQlnb3RvIGVycjsKKysJaWYgKG1lbWNtcChwdGJ1 ZiwgdGJzLCBsZW4pKQorKwkJZ290byBlcnI7CisrCisrCXJldCA9IDE7CisrCisrCWlmICghcHRi dWYpCisrCQlnb3RvIGVycjsKKysJCisrCWVycjoKKysJaWYgKHJldCA9PSAwKQorKwkJeworKwkJ Zmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOworKwkJRklQU2VycihGSVBTX0ZfRklQU19DSEVDS19S U0EsRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVEKTsKKysJCX0KKysKKysJaWYgKGN0YnVmKQor KwkJT1BFTlNTTF9mcmVlKGN0YnVmKTsKKysJaWYgKHB0YnVmKQorKwkJT1BFTlNTTF9mcmVlKHB0 YnVmKTsKKysJaWYgKHBrKQorKwkJRVZQX1BLRVlfZnJlZShwayk7CisrCisrCXJldHVybiByZXQ7 CisrCX0KKysjZW5kaWYKKyAKKyBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJz YSwgaW50IGJpdHMsIEJJR05VTSAqZV92YWx1ZSwgQk5fR0VOQ0IgKmNiKTsKKyAKK0BAIC05MCw2 ICsxNjYsMjMgQEAgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsIAorIAlp bnQgYml0c3AsYml0c3Esb2s9IC0xLG49MDsKKyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmKEZJUFNfc2Vs ZnRlc3RfZmFpbGVkKCkpCisrCSAgICAJeworKwkJICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlM VElOX0tFWUdFTixGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkgICAgCXJldHVybiAw OworKwkgICAgCX0KKysKKysJCWlmIChiaXRzIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxV U19CSVRTKQorKwkJICAgIHsKKysJCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlH RU4sRklQU19SX0tFWV9UT09fU0hPUlQpOworKwkJICAgIHJldHVybiAwOworKwkJCX0KKysJCX0K KysjZW5kaWYKKysKKyAJY3R4PUJOX0NUWF9uZXcoKTsKKyAJaWYgKGN0eCA9PSBOVUxMKSBnb3Rv IGVycjsKKyAJQk5fQ1RYX3N0YXJ0KGN0eCk7CitAQCAtMjAxLDYgKzI5NCwxNyBAQCBzdGF0aWMg aW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwgCisgCQlwID0gcnNhLT5wOworIAlpZiAo IUJOX21vZF9pbnZlcnNlKHJzYS0+aXFtcCxyc2EtPnEscCxjdHgpKSBnb3RvIGVycjsKKyAKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmIChmaXBz X3JzYV9wYWlyd2lzZV9mYWlsKQorKwkJCUJOX2FkZF93b3JkKHJzYS0+biwgMSk7CisrCisrCQlp ZighZmlwc19jaGVja19yc2EocnNhKSkKKysJCSAgICBnb3RvIGVycjsKKysJCX0KKysjZW5kaWYK KysKKyAJb2s9MTsKKyBlcnI6CisgCWlmIChvayA9PSAtMSkKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL3JzYS9yc2EuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRv L3JzYS9yc2EuaAorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9yc2EuaC5maXBz CTIwMDktMTEtMTIgMTI6MzY6NDkuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vcnNhL3JzYS5oCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAw CitAQCAtNzQsNiArNzQsMjEgQEAKKyAjZXJyb3IgUlNBIGlzIGRpc2FibGVkLgorICNlbmRpZgor IAorKy8qIElmIHRoaXMgZmxhZyBpcyBzZXQgdGhlIFJTQSBtZXRob2QgaXMgRklQUyBjb21wbGlh bnQgYW5kIGNhbiBiZSB1c2VkCisrICogaW4gRklQUyBtb2RlLiBUaGlzIGlzIHNldCBpbiB0aGUg dmFsaWRhdGVkIG1vZHVsZSBtZXRob2QuIElmIGFuCisrICogYXBwbGljYXRpb24gc2V0cyB0aGlz IGZsYWcgaW4gaXRzIG93biBtZXRob2RzIGl0IGlzIGl0cyByZXBvc2liaWxpdHkKKysgKiB0byBl bnN1cmUgdGhlIHJlc3VsdCBpcyBjb21wbGlhbnQuCisrICovCisrCisrI2RlZmluZSBSU0FfRkxB R19GSVBTX01FVEhPRAkJCTB4MDQwMAorKworKy8qIElmIHRoaXMgZmxhZyBpcyBzZXQgdGhlIG9w ZXJhdGlvbnMgbm9ybWFsbHkgZGlzYWJsZWQgaW4gRklQUyBtb2RlIGFyZQorKyAqIHBlcm1pdHRl ZCBpdCBpcyB0aGVuIHRoZSBhcHBsaWNhdGlvbnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRo YXQgdGhlCisrICogdXNhZ2UgaXMgY29tcGxpYW50LgorKyAqLworKworKyNkZWZpbmUgUlNBX0ZM QUdfTk9OX0ZJUFNfQUxMT1cJCQkweDA0MDAKKysKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCisgZXh0 ZXJuICJDIiB7CisgI2VuZGlmCitAQCAtMTY0LDYgKzE3OSw4IEBAIHN0cnVjdCByc2Ffc3QKKyAj IGRlZmluZSBPUEVOU1NMX1JTQV9NQVhfTU9EVUxVU19CSVRTCTE2Mzg0CisgI2VuZGlmCisgCisr I2RlZmluZSBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAorKworICNpZm5k ZWYgT1BFTlNTTF9SU0FfU01BTExfTU9EVUxVU19CSVRTCisgIyBkZWZpbmUgT1BFTlNTTF9SU0Ff U01BTExfTU9EVUxVU19CSVRTCTMwNzIKKyAjZW5kaWYKK0BAIC0yNjcsNiArMjg0LDExIEBAIFJT QSAqCVJTQV9nZW5lcmF0ZV9rZXkoaW50IGJpdHMsIHVuc2lnbmUKKyAKKyAvKiBOZXcgdmVyc2lv biAqLworIGludAlSU0FfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVN ICplLCBCTl9HRU5DQiAqY2IpOworK2ludCBSU0FfWDkzMV9kZXJpdmVfZXgoUlNBICpyc2EsIEJJ R05VTSAqcDEsIEJJR05VTSAqcDIsIEJJR05VTSAqcTEsIEJJR05VTSAqcTIsCisrCQkJY29uc3Qg QklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLCBjb25zdCBCSUdOVU0gKlhwLAorKwkJCWNv bnN0IEJJR05VTSAqWHExLCBjb25zdCBCSUdOVU0gKlhxMiwgY29uc3QgQklHTlVNICpYcSwKKysJ CQljb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7CisraW50IFJTQV9YOTMxX2dlbmVyYXRl X2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIGNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNi KTsKKyAKKyBpbnQJUlNBX2NoZWNrX2tleShjb25zdCBSU0EgKik7CisgCS8qIG5leHQgNCByZXR1 cm4gLTEgb24gZXJyb3IgKi8KK0BAIC00MzgsOCArNDYwLDEyIEBAIHZvaWQgRVJSX2xvYWRfUlNB X3N0cmluZ3Modm9pZCk7CisgI2RlZmluZSBSU0FfRl9SU0FfUFJJTlRfRlAJCQkJIDExNgorICNk ZWZpbmUgUlNBX0ZfUlNBX1BSSVZfREVDT0RFCQkJCSAxMzcKKyAjZGVmaW5lIFJTQV9GX1JTQV9Q UklWX0VOQ09ERQkJCQkgMTM4CisrI2RlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBUCQkJ IDE0OAorICNkZWZpbmUgUlNBX0ZfUlNBX1BVQl9ERUNPREUJCQkJIDEzOQorKyNkZWZpbmUgUlNB X0ZfUlNBX1BVQkxJQ19ERUNSWVBUCQkJIDE0OQorICNkZWZpbmUgUlNBX0ZfUlNBX1NFVFVQX0JM SU5ESU5HCQkJIDEzNgorKyNkZWZpbmUgUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRAkJCSAx NTAKKysjZGVmaW5lIFJTQV9GX1JTQV9TRVRfTUVUSE9ECQkJCSAxNTEKKyAjZGVmaW5lIFJTQV9G X1JTQV9TSUdOCQkJCQkgMTE3CisgI2RlZmluZSBSU0FfRl9SU0FfU0lHTl9BU04xX09DVEVUX1NU UklORwkJIDExOAorICNkZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWQkJCQkgMTE5CitAQCAtNDc5LDEw ICs1MDUsMTIgQEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKKyAjZGVmaW5lIFJT QV9SX0tFWV9TSVpFX1RPT19TTUFMTAkJCSAxMjAKKyAjZGVmaW5lIFJTQV9SX0xBU1RfT0NURVRf SU5WQUxJRAkJCSAxMzQKKyAjZGVmaW5lIFJTQV9SX01PRFVMVVNfVE9PX0xBUkdFCQkJCSAxMDUK KysjZGVmaW5lIFJTQV9SX05PTl9GSVBTX01FVEhPRAkJCQkgMTQ5CisgI2RlZmluZSBSU0FfUl9O T19QVUJMSUNfRVhQT05FTlQJCQkgMTQwCisgI2RlZmluZSBSU0FfUl9OVUxMX0JFRk9SRV9CTE9D S19NSVNTSU5HCQkJIDExMworICNkZWZpbmUgUlNBX1JfTl9ET0VTX05PVF9FUVVBTF9QX1EJCQkg MTI3CisgI2RlZmluZSBSU0FfUl9PQUVQX0RFQ09ESU5HX0VSUk9SCQkJIDEyMQorKyNkZWZpbmUg UlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERQkgMTUwCisgI2RlZmluZSBS U0FfUl9PUEVSQVRJT05fTk9UX1NVUFBPUlRFRF9GT1JfVEhJU19LRVlUWVBFCSAxNDgKKyAjZGVm aW5lIFJTQV9SX1BBRERJTkdfQ0hFQ0tfRkFJTEVECQkJIDExNAorICNkZWZpbmUgUlNBX1JfUF9O T1RfUFJJTUUJCQkJIDEyOAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcnNh L3JzYV9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9yc2FfbGliLmMK Ky0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yc2EvcnNhX2xpYi5jLmZpcHMJMjAwOS0w OC0wNSAxNzowNDoxNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9yc2EvcnNhX2xpYi5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitA QCAtODAsNiArODAsMTMgQEAgUlNBICpSU0FfbmV3KHZvaWQpCisgCisgdm9pZCBSU0Ffc2V0X2Rl ZmF1bHRfbWV0aG9kKGNvbnN0IFJTQV9NRVRIT0QgKm1ldGgpCisgCXsKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSAmJiAhKG1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQ U19NRVRIT0QpKQorKwkJeworKwkJUlNBZXJyKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0Qs IFJTQV9SX05PTl9GSVBTX01FVEhPRCk7CisrCQlyZXR1cm47CisrCQl9CisrI2VuZGlmCisgCWRl ZmF1bHRfUlNBX21ldGggPSBtZXRoOworIAl9CisgCitAQCAtMTExLDYgKzExOCwxMyBAQCBpbnQg UlNBX3NldF9tZXRob2QoUlNBICpyc2EsIGNvbnN0IFJTQV9NCisgCS8qIE5COiBUaGUgY2FsbGVy IGlzIHNwZWNpZmljYWxseSBzZXR0aW5nIGEgbWV0aG9kLCBzbyBpdCdzIG5vdCB1cCB0byB1cwor IAkgKiB0byBkZWFsIHdpdGggd2hpY2ggRU5HSU5FIGl0IGNvbWVzIGZyb20uICovCisgCWNvbnN0 IFJTQV9NRVRIT0QgKm10bXA7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2Rl KCkgJiYgIShtZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkKKysJCXsKKysJCVJT QWVycihSU0FfRl9SU0FfU0VUX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJCXJl dHVybiAwOworKwkJfQorKyNlbmRpZgorIAltdG1wID0gcnNhLT5tZXRoOworIAlpZiAobXRtcC0+ ZmluaXNoKSBtdG1wLT5maW5pc2gocnNhKTsKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCitA QCAtMTYzLDYgKzE3NywxOCBAQCBSU0EgKlJTQV9uZXdfbWV0aG9kKEVOR0lORSAqZW5naW5lKQor IAkJCX0KKyAJCX0KKyAjZW5kaWYKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21v ZGUoKSAmJiAhKHJldC0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCisrCQl7 CisrCQlSU0FlcnIoUlNBX0ZfUlNBX05FV19NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7 CisrI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorKwkJaWYgKHJldC0+ZW5naW5lKQorKwkJCUVO R0lORV9maW5pc2gocmV0LT5lbmdpbmUpOworKyNlbmRpZgorKwkJT1BFTlNTTF9mcmVlKHJldCk7 CisrCQlyZXR1cm4gTlVMTDsKKysJCX0KKysjZW5kaWYKKyAKKyAJcmV0LT5wYWQ9MDsKKyAJcmV0 LT52ZXJzaW9uPTA7CitAQCAtMjg1LDYgKzMxMSwxMyBAQCBpbnQgUlNBX3B1YmxpY19lbmNyeXB0 KGludCBmbGVuLCBjb25zdCB1CisgaW50IFJTQV9wcml2YXRlX2VuY3J5cHQoaW50IGZsZW4sIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmZyb20sIHVuc2lnbmVkIGNoYXIgKnRvLAorIAkgICAgIFJTQSAq cnNhLCBpbnQgcGFkZGluZykKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19t b2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorKwkJewor KwkJUlNBZXJyKFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQsIFJTQV9SX09QRVJBVElPTl9OT1Rf QUxMT1dFRF9JTl9GSVBTX01PREUpOworKwkJcmV0dXJuIDA7CisrCQl9CisrI2VuZGlmCisgCXJl dHVybihyc2EtPm1ldGgtPnJzYV9wcml2X2VuYyhmbGVuLCBmcm9tLCB0bywgcnNhLCBwYWRkaW5n KSk7CisgCX0KKyAKK0BAIC0yOTcsNiArMzMwLDEzIEBAIGludCBSU0FfcHJpdmF0ZV9kZWNyeXB0 KGludCBmbGVuLCBjb25zdCAKKyBpbnQgUlNBX3B1YmxpY19kZWNyeXB0KGludCBmbGVuLCBjb25z dCB1bnNpZ25lZCBjaGFyICpmcm9tLCB1bnNpZ25lZCBjaGFyICp0bywKKyAJICAgICBSU0EgKnJz YSwgaW50IHBhZGRpbmcpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfbW9k ZSgpICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKysJCXsKKysJ CVJTQWVycihSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX09QRVJBVElPTl9OT1RfQUxM T1dFRF9JTl9GSVBTX01PREUpOworKwkJcmV0dXJuIDA7CisrCQl9CisrI2VuZGlmCisgCXJldHVy bihyc2EtPm1ldGgtPnJzYV9wdWJfZGVjKGZsZW4sIGZyb20sIHRvLCByc2EsIHBhZGRpbmcpKTsK KyAJfQorIAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcnNhL3JzYV9zaWdu LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yc2EvcnNhX3NpZ24uYworLS0tIG9w ZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jLmZpcHMJMjAwNy0wNC0yNCAw MzowNTo0Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9y c2EvcnNhX3NpZ24uYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTEz MCw3ICsxMzAsOCBAQCBpbnQgUlNBX3NpZ24oaW50IHR5cGUsIGNvbnN0IHVuc2lnbmVkIGNoCisg CQlpMmRfWDUwOV9TSUcoJnNpZywmcCk7CisgCQlzPXRtcHM7CisgCX0KKy0JaT1SU0FfcHJpdmF0 ZV9lbmNyeXB0KGkscyxzaWdyZXQscnNhLFJTQV9QS0NTMV9QQURESU5HKTsKKysJLyogTkI6IGNh bGwgdW5kZXJseWluZyBtZXRob2QgZGlyZWN0bHkgdG8gYXZvaWQgRklQUyBibG9ja2luZyAqLwor KwlpID0gcnNhLT5tZXRoLT5yc2FfcHJpdl9lbmMgPyByc2EtPm1ldGgtPnJzYV9wcml2X2VuYyhp LHMsc2lncmV0LHJzYSxSU0FfUEtDUzFfUEFERElORykgOiAwOworIAlpZiAoaSA8PSAwKQorIAkJ cmV0PTA7CisgCWVsc2UKK0BAIC0xNjEsOCArMTYyLDggQEAgaW50IGludF9yc2FfdmVyaWZ5KGlu dCBkdHlwZSwgY29uc3QgdW5zaQorIAorIAlpZigoZHR5cGUgPT0gTklEX21kNV9zaGExKSAmJiBy bSkKKyAJCXsKKy0JCWkgPSBSU0FfcHVibGljX2RlY3J5cHQoKGludClzaWdsZW4sCistCQkJCQlz aWdidWYscm0scnNhLFJTQV9QS0NTMV9QQURESU5HKTsKKysJCWkgPSByc2EtPm1ldGgtPnJzYV9w dWJfZGVjID8gcnNhLT5tZXRoLT5yc2FfcHViX2RlYygoaW50KXNpZ2xlbiwKKysJCQkJCXNpZ2J1 ZixybSxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpIDogMDsKKyAJCWlmIChpIDw9IDApCisgCQkJcmV0 dXJuIDA7CisgCQkqcHJtX2xlbiA9IGk7CitAQCAtMTc5LDcgKzE4MCw4IEBAIGludCBpbnRfcnNh X3ZlcmlmeShpbnQgZHR5cGUsIGNvbnN0IHVuc2kKKyAJCQlSU0FlcnIoUlNBX0ZfSU5UX1JTQV9W RVJJRlksUlNBX1JfSU5WQUxJRF9NRVNTQUdFX0xFTkdUSCk7CisgCQkJZ290byBlcnI7CisgCX0K Ky0JaT1SU0FfcHVibGljX2RlY3J5cHQoKGludClzaWdsZW4sc2lnYnVmLHMscnNhLFJTQV9QS0NT MV9QQURESU5HKTsKKysJLyogTkI6IGNhbGwgdW5kZXJseWluZyBtZXRob2QgZGlyZWN0bHkgdG8g YXZvaWQgRklQUyBibG9ja2luZyAqLworKwlpID0gcnNhLT5tZXRoLT5yc2FfcHViX2RlYyA/IHJz YS0+bWV0aC0+cnNhX3B1Yl9kZWMoKGludClzaWdsZW4sc2lnYnVmLHMscnNhLFJTQV9QS0NTMV9Q QURESU5HKSA6IDA7CisgCisgCWlmIChpIDw9IDApIGdvdG8gZXJyOworIAorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hhL3NoYV9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9zaGEvc2hhX2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL3NoYS9zaGFfZGdzdC5jLmZpcHMJMjAwNy0wMS0yMSAxNDowNzoxNC4wMDAwMDAwMDAgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9zaGEvc2hhX2Rnc3QuYwkyMDA5LTEx LTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTU3LDYgKzU3LDEyIEBACisgICovCisg CisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9j cnlwdG8uaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorICNpZiAhZGVmaW5lZChP UEVOU1NMX05PX1NIQTApICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKQorIAorICN1bmRlZiAg U0hBXzEKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3NoYS9zaGEuaC5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3NoYS9zaGEuaAorLS0tIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL3NoYS9zaGEuaC5maXBzCTIwMDktMTEtMTIgMTI6MzY6NDkuMDAwMDAwMDAw ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hhL3NoYS5oCTIwMDktMTEt MTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMTA2LDYgKzEwNiw5IEBAIHR5cGVkZWYg c3RydWN0IFNIQXN0YXRlX3N0CisgCX0gU0hBX0NUWDsKKyAKKyAjaWZuZGVmIE9QRU5TU0xfTk9f U0hBMAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgcHJpdmF0ZV9TSEFfSW5pdChTSEFfQ1RY ICpjKTsKKysjZW5kaWYKKyBpbnQgU0hBX0luaXQoU0hBX0NUWCAqYyk7CisgaW50IFNIQV9VcGRh dGUoU0hBX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CisgaW50IFNIQV9G aW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBX0NUWCAqYyk7CitkaWZmIC11cCBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9zaGEvc2hhX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL3NoYS9zaGFfbG9jbC5oCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hh L3NoYV9sb2NsLmguZmlwcwkyMDA5LTExLTEyIDEyOjM2OjQ5LjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3NoYS9zaGFfbG9jbC5oCTIwMDktMTEtMTIgMTI6 MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMTIyLDggKzEyMiwxNSBAQCB2b2lkIHNoYTFfYmxv Y2tfZGF0YV9vcmRlciAoU0hBX0NUWCAqYywgCisgI2RlZmluZSBJTklUX0RBVEFfaDMgMHgxMDMy NTQ3NlVMCisgI2RlZmluZSBJTklUX0RBVEFfaDQgMHhjM2QyZTFmMFVMCisgCisrI2lmIGRlZmlu ZWQoU0hBXzApICYmIGRlZmluZWQoT1BFTlNTTF9GSVBTKQorK0ZJUFNfTk9OX0ZJUFNfTURfSW5p dChTSEEpCisrI2Vsc2UKKyBpbnQgSEFTSF9JTklUIChTSEFfQ1RYICpjKQorKyNlbmRpZgorIAl7 CisrI2lmIGRlZmluZWQoU0hBXzEpICYmIGRlZmluZWQoT1BFTlNTTF9GSVBTKQorKwlGSVBTX3Nl bGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCW1lbXNldCAoYywwLHNpemVvZigqYykpOworIAlj LT5oMD1JTklUX0RBVEFfaDA7CisgCWMtPmgxPUlOSVRfREFUQV9oMTsKK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL3NoYS9zaGExZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vc2hhL3NoYTFkZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9zaGEvc2hhMWRnc3QuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6MTQuMDAwMDAwMDAwICswMTAw CisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hhL3NoYTFkZ3N0LmMJMjAwOS0xMS0x MiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC02Myw2ICs2MywxMCBAQAorICNkZWZpbmUg U0hBXzEKKyAKKyAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgorKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgCisgY29uc3Qg Y2hhciBTSEExX3ZlcnNpb25bXT0iU0hBMSIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hhL3NoYTI1Ni5jLmZpcHMgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hhL3NoYTI1Ni5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vc2hhL3NoYTI1Ni5jLmZpcHMJMjAwNy0wMS0yMSAxNDowNzoxNC4wMDAwMDAwMDAg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9zaGEvc2hhMjU2LmMJMjAwOS0x MS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMiwxMiArMTIsMTkgQEAKKyAKKyAj aW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgor KworICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisgCisgY29uc3QgY2hhciBTSEEyNTZf dmVyc2lvbltdPSJTSEEtMjU2IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCisgaW50IFNIQTIy NF9Jbml0IChTSEEyNTZfQ1RYICpjKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBT X3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCW1lbXNldCAoYywwLHNpemVvZigqYykpOwor IAljLT5oWzBdPTB4YzEwNTllZDhVTDsJYy0+aFsxXT0weDM2N2NkNTA3VUw7CisgCWMtPmhbMl09 MHgzMDcwZGQxN1VMOwljLT5oWzNdPTB4ZjcwZTU5MzlVTDsKK0BAIC0yOSw2ICszNiw5IEBAIGlu dCBTSEEyMjRfSW5pdCAoU0hBMjU2X0NUWCAqYykKKyAKKyBpbnQgU0hBMjU2X0luaXQgKFNIQTI1 Nl9DVFggKmMpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hl Y2soKTsKKysjZW5kaWYKKyAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMtPmhbMF09MHg2 YTA5ZTY2N1VMOwljLT5oWzFdPTB4YmI2N2FlODVVTDsKKyAJYy0+aFsyXT0weDNjNmVmMzcyVUw7 CWMtPmhbM109MHhhNTRmZjUzYVVMOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vc2hhL3NoYTUxMi5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hhL3NoYTUx Mi5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hhL3NoYTUxMi5jLmZpcHMJMjAw OC0xMi0yOSAxMzozNTo0OC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0 L2NyeXB0by9zaGEvc2hhNTEyLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAK K0BAIC01LDYgKzUsMTAgQEAKKyAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAqLworICNpbmNsdWRlIDxvcGVu c3NsL29wZW5zc2xjb25mLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYm ICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBNTEyKQorIC8qCisgICogSU1QTEVNRU5UQVRJT04gTk9U RVMuCitAQCAtNjEsNiArNjUsOSBAQCBjb25zdCBjaGFyIFNIQTUxMl92ZXJzaW9uW109IlNIQS01 MTIiIE9QCisgCisgaW50IFNIQTM4NF9Jbml0IChTSEE1MTJfQ1RYICpjKQorIAl7CisrI2lmZGVm IE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgI2lmIGRl ZmluZWQoU0hBNTEyX0FTTSkgJiYgKGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX2FybSkp CisgCS8qIG1haW50YWluIGR3b3JkIG9yZGVyIHJlcXVpcmVkIGJ5IGFzc2VtYmxlciBtb2R1bGUg Ki8KKyAJdW5zaWduZWQgaW50ICpoID0gKHVuc2lnbmVkIGludCAqKWMtPmg7CitAQCAtOTAsNiAr OTcsOSBAQCBpbnQgU0hBMzg0X0luaXQgKFNIQTUxMl9DVFggKmMpCisgCisgaW50IFNIQTUxMl9J bml0IChTSEE1MTJfQ1RYICpjKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3Nl bGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgI2lmIGRlZmluZWQoU0hBNTEyX0FTTSkgJiYgKGRl ZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX2FybSkpCisgCS8qIG1haW50YWluIGR3b3JkIG9y ZGVyIHJlcXVpcmVkIGJ5IGFzc2VtYmxlciBtb2R1bGUgKi8KKyAJdW5zaWduZWQgaW50ICpoID0g KHVuc2lnbmVkIGludCAqKWMtPmg7CitAQCAtMzgwLDcgKzM5MCw3IEBAIHN0YXRpYyBjb25zdCBT SEFfTE9ORzY0IEs1MTJbODBdID0geworIAkJCQkoKFNIQV9MT05HNjQpaGkpPDwzMnxsbzsJfSkK KyAjICAgZW5kaWYKKyAjICBlbGlmIChkZWZpbmVkKF9BUkNIX1BQQykgJiYgZGVmaW5lZChfXzY0 QklUX18pKSB8fCBkZWZpbmVkKF9BUkNIX1BQQzY0KQorLSMgICBkZWZpbmUgUk9UUihhLG4pCSh7 IHVuc2lnbmVkIGxvbmcgcmV0OwkJXAorKyMgICBkZWZpbmUgUk9UUihhLG4pCSh7IFNIQV9MT05H NjQgcmV0OwkJXAorIAkJCQlhc20gKCJyb3RyZGkgJTAsJTEsJTIiCVwKKyAJCQkJOiAiPXIiKHJl dCkJCVwKKyAJCQkJOiAiciIoYSksIksiKG4pKTsgcmV0Owl9KQorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMC1iZXRhNC9NYWtlZmlsZS5vcmcuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L01ha2VmaWxl Lm9yZworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvTWFrZWZpbGUub3JnLmZpcHMJMjAwOS0xMS0x MiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L01ha2Vm aWxlLm9yZwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTExMCw2ICsx MTAsOSBAQCBMSUJLUkI1PQorIFpMSUJfSU5DTFVERT0KKyBMSUJaTElCPQorIAorKyMgTm9uLWVt cHR5IGlmIEZJUFMgZW5hYmxlZAorK0ZJUFM9CisrCisgRElSUz0gICBjcnlwdG8gc3NsIGVuZ2lu ZXMgYXBwcyB0ZXN0IHRvb2xzCisgRU5HRElSUz0gY2Nnb3N0CisgU0hMSUJESVJTPSBjcnlwdG8g c3NsCitAQCAtMTIyLDcgKzEyNSw3IEBAIFNESVJTPSAgXAorIAlibiBlYyByc2EgZHNhIGVjZHNh IGRoIGVjZGggZHNvIGVuZ2luZSBcCisgCWJ1ZmZlciBiaW8gc3RhY2sgbGhhc2ggcmFuZCBlcnIg XAorIAlldnAgYXNuMSBwZW0geDUwOSB4NTA5djMgY29uZiB0eHRfZGIgcGtjczcgcGtjczEyIGNv bXAgb2NzcCB1aSBrcmI1IFwKKy0JY21zIHBxdWV1ZSB0cyBqcGFrZSBzdG9yZQorKwljbXMgcHF1 ZXVlIHRzIGpwYWtlIHN0b3JlIGZpcHMKKyAjIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBhYm92ZSBs aXN0IGlzIGFkanVzdGVkIGJ5IC4vQ29uZmlndXJlCisgIyBhY2NvcmRpbmcgdG8gbm8teHh4IGFy Z3VtZW50cy4uLgorIAorQEAgLTIwNiw2ICsyMDksNyBAQCBCVUlMREVOVj0JUExBVEZPUk09JyQo UExBVEZPUk0pJyBQUk9DRVNTCisgCQlSTUQxNjBfQVNNX09CSj0nJChSTUQxNjBfQVNNX09CSikn CQlcCisgCQlXUF9BU01fT0JKPSckKFdQX0FTTV9PQkopJwkJCVwKKyAJCVBFUkxBU01fU0NIRU1F PSckKFBFUkxBU01fU0NIRU1FKScJCVwKKysJCUZJUFM9IiQke0ZJUFM6LSQoRklQUyl9IglcCisg CQlUSElTPSQke1RISVM6LSRAfSBNQUtFRklMRT1NYWtlZmlsZSBNQUtFT1ZFUlJJREVTPQorICMg TUFLRU9WRVJSSURFUz0gZWZmZWN0aXZlbHkgImVxdWFsaXplcyIgR05VLWlzaCBhbmQgU3lzVi1p c2ggbWFrZSBmbGF2b3JzLAorICMgd2hpY2ggaW4gdHVybiBlbGltaW5hdGVzIGFtYmlndWl0aWVz IGluIHZhcmlhYmxlIHRyZWF0bWVudCB3aXRoIC1lLgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1i ZXRhNC9zc2wvc3NsX2NpcGguYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3NzbF9jaXBo LmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zc2xfY2lwaC5jLmZpcHMJMjAwOS0wOS0x MyAwMToxODowOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9z c2xfY2lwaC5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtNzI3LDYg KzcyNyw5IEBAIHN0YXRpYyB2b2lkIHNzbF9jaXBoZXJfY29sbGVjdF9jaXBoZXJzKGMKKyAJCSAg ICAhKGMtPmFsZ29yaXRobV9hdXRoICYgZGlzYWJsZWRfYXV0aCkgJiYKKyAJCSAgICAhKGMtPmFs Z29yaXRobV9lbmMgJiBkaXNhYmxlZF9lbmMpICYmCisgCQkgICAgIShjLT5hbGdvcml0aG1fbWFj ICYgZGlzYWJsZWRfbWFjKSAmJgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCQkoIUZJUFNfbW9k ZSgpIHx8IChjLT5hbGdvX3N0cmVuZ3RoICYgU1NMX0ZJUFMpKSAmJgorKyNlbmRpZgorIAkJICAg ICEoYy0+YWxnb3JpdGhtX3NzbCAmIGRpc2FibGVkX3NzbCkpCisgCQkJeworIAkJCWNvX2xpc3Rb Y29fbGlzdF9udW1dLmNpcGhlciA9IGM7CitAQCAtMTQyMyw3ICsxNDI2LDExIEBAIFNUQUNLX09G KFNTTF9DSVBIRVIpICpzc2xfY3JlYXRlX2NpcGhlcl8KKyAJICovCisgCWZvciAoY3VyciA9IGhl YWQ7IGN1cnIgIT0gTlVMTDsgY3VyciA9IGN1cnItPm5leHQpCisgCQl7CisrI2lmZGVmIE9QRU5T U0xfRklQUworKwkJaWYgKGN1cnItPmFjdGl2ZSAmJiAoIUZJUFNfbW9kZSgpIHx8IGN1cnItPmNp cGhlci0+YWxnb19zdHJlbmd0aCAmIFNTTF9GSVBTKSkKKysjZWxzZQorIAkJaWYgKGN1cnItPmFj dGl2ZSkKKysjZW5kaWYKKyAJCQl7CisgCQkJc2tfU1NMX0NJUEhFUl9wdXNoKGNpcGhlcnN0YWNr LCBjdXJyLT5jaXBoZXIpOworICNpZmRlZiBDSVBIRVJfREVCVUcKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjAtYmV0YTQvc3NsL3NzbF9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3Nz bF9saWIuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3NzbF9saWIuYy5maXBzCTIwMDkt MTAtMTYgMTU6NDE6NTIuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9z c2wvc3NsX2xpYi5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMTQ3 MSw2ICsxNDcxLDE0IEBAIFNTTF9DVFggKlNTTF9DVFhfbmV3KGNvbnN0IFNTTF9NRVRIT0QgKm0K KyAJCXJldHVybihOVUxMKTsKKyAJCX0KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChG SVBTX21vZGUoKSAmJiAobWV0aC0+dmVyc2lvbiA8IFRMUzFfVkVSU0lPTikpCQorKwkJeworKwkJ U1NMZXJyKFNTTF9GX1NTTF9DVFhfTkVXLCBTU0xfUl9PTkxZX1RMU19BTExPV0VEX0lOX0ZJUFNf TU9ERSk7CisrCQlyZXR1cm4gTlVMTDsKKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKFNTTF9nZXRf ZXhfZGF0YV9YNTA5X1NUT1JFX0NUWF9pZHgoKSA8IDApCisgCQl7CisgCQlTU0xlcnIoU1NMX0Zf U1NMX0NUWF9ORVcsU1NMX1JfWDUwOV9WRVJJRklDQVRJT05fU0VUVVBfUFJPQkxFTVMpOworZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvc3NsdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAu MC1iZXRhNC9zc2wvc3NsdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvc3NsdGVz dC5jLmZpcHMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4wLWJldGE0L3NzbC9zc2x0ZXN0LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAg KzAxMDAKK0BAIC0yNjUsNiArMjY1LDkgQEAgc3RhdGljIHZvaWQgc3ZfdXNhZ2Uodm9pZCkKKyAJ eworIAlmcHJpbnRmKHN0ZGVyciwidXNhZ2U6IHNzbHRlc3QgW2FyZ3MgLi4uXVxuIik7CisgCWZw cmludGYoc3RkZXJyLCJcbiIpOworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJZnByaW50ZihzdGRl cnIsIi1GICAgICAgICAgICAgIC0gcnVuIHRlc3QgaW4gRklQUyBtb2RlXG4iKTsKKysjZW5kaWYK KyAJZnByaW50ZihzdGRlcnIsIiAtc2VydmVyX2F1dGggIC0gY2hlY2sgc2VydmVyIGNlcnRpZmlj YXRlXG4iKTsKKyAJZnByaW50ZihzdGRlcnIsIiAtY2xpZW50X2F1dGggIC0gZG8gY2xpZW50IGF1 dGhlbnRpY2F0aW9uXG4iKTsKKyAJZnByaW50ZihzdGRlcnIsIiAtcHJveHkgICAgICAgIC0gYWxs b3cgcHJveHkgY2VydGlmaWNhdGVzXG4iKTsKK0BAIC00ODQsNiArNDg3LDkgQEAgaW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAjZW5kaWYKKyAJU1RBQ0tfT0YoU1NMX0NPTVApICpz c2xfY29tcF9tZXRob2RzID0gTlVMTDsKKyAJaW50IHRlc3RfY2lwaGVybGlzdCA9IDA7CisrI2lm ZGVmIE9QRU5TU0xfRklQUworKwlpbnQgZmlwc19tb2RlPTA7CisrI2VuZGlmCisgCisgCXZlcmJv c2UgPSAwOworIAlkZWJ1ZyA9IDA7CitAQCAtNTE1LDcgKzUyMSwxNiBAQCBpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQorIAorIAl3aGlsZSAoYXJnYyA+PSAxKQorIAkJeworLQkJaWYJ KHN0cmNtcCgqYXJndiwiLXNlcnZlcl9hdXRoIikgPT0gMCkKKysJCWlmKCFzdHJjbXAoKmFyZ3Ys Ii1GIikpCisrCQkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCQlmaXBzX21vZGU9MTsKKysj ZWxzZQorKwkJCWZwcmludGYoc3RkZXJyLCJub3QgY29tcGlsZWQgd2l0aCBGSVBTIHN1cHBvcnQs IHNvIGV4aXR0aW5nIHdpdGhvdXQgcnVubmluZy5cbiIpOworKwkJCUVYSVQoMCk7CisrI2VuZGlm CisrCQkJfQorKwkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItc2VydmVyX2F1dGgiKSA9PSAwKQor IAkJCXNlcnZlcl9hdXRoPTE7CisgCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1jbGllbnRfYXV0 aCIpID09IDApCisgCQkJY2xpZW50X2F1dGg9MTsKK0BAIC03MTEsNiArNzI2LDIwIEBAIGJhZDoK KyAJCUVYSVQoMSk7CisgCQl9CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihmaXBzX21v ZGUpCisrCQl7CisrCQlpZighRklQU19tb2RlX3NldCgxKSkKKysJCQl7CisrCQkJRVJSX2xvYWRf Y3J5cHRvX3N0cmluZ3MoKTsKKysJCQlFUlJfcHJpbnRfZXJyb3JzKEJJT19uZXdfZnAoc3RkZXJy LEJJT19OT0NMT1NFKSk7CisrCQkJRVhJVCgxKTsKKysJCQl9CisrCQllbHNlCisrCQkJZnByaW50 ZihzdGRlcnIsIioqKiBJTiBGSVBTIE1PREUgKioqXG4iKTsKKysJCX0KKysjZW5kaWYKKysKKyAJ aWYgKHByaW50X3RpbWUpCisgCQl7CisgCQlpZiAoIWJpb19wYWlyKQorQEAgLTIxNTMsMTIgKzIx ODIsMTIgQEAgc3RhdGljIGludCBNU19DQUxMQkFDSyBhcHBfdmVyaWZ5X2NhbGxiYQorIAkJfQor IAorICNpZm5kZWYgT1BFTlNTTF9OT19YNTA5X1ZFUklGWQorLSMgaWZkZWYgT1BFTlNTTF9GSVBT CisrIyBpZiAwCisgCWlmKHMtPnZlcnNpb24gPT0gVExTMV9WRVJTSU9OKQorIAkJRklQU19hbGxv d19tZDUoMSk7CisgIyBlbmRpZgorIAlvayA9IFg1MDlfdmVyaWZ5X2NlcnQoY3R4KTsKKy0jIGlm ZGVmIE9QRU5TU0xfRklQUworKyMgaWYgMAorIAlpZihzLT52ZXJzaW9uID09IFRMUzFfVkVSU0lP TikKKyAJCUZJUFNfYWxsb3dfbWQ1KDApOworICMgZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjAtYmV0YTQvc3NsL3MyM19jbG50LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zMjNf Y2xudC5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvczIzX2NsbnQuYy5maXBzCTIwMDkt MDgtMDUgMTc6Mjk6MTQuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9z c2wvczIzX2NsbnQuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTMz NSw2ICszMzUsMTQgQEAgc3RhdGljIGludCBzc2wyM19jbGllbnRfaGVsbG8oU1NMICpzKQorIAkJ CXZlcnNpb25fbWFqb3IgPSBUTFMxX1ZFUlNJT05fTUFKT1I7CisgCQkJdmVyc2lvbl9taW5vciA9 IFRMUzFfVkVSU0lPTl9NSU5PUjsKKyAJCQl9CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJZWxz ZSBpZihGSVBTX21vZGUoKSkKKysJCQl7CisrCQkJU1NMZXJyKFNTTF9GX1NTTDIzX0NMSUVOVF9I RUxMTywKKysJCQkJCVNTTF9SX09OTFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFKTsKKysJCQly ZXR1cm4gLTE7CisrCQkJfQorKyNlbmRpZgorIAkJZWxzZSBpZiAodmVyc2lvbiA9PSBTU0wzX1ZF UlNJT04pCisgCQkJeworIAkJCXZlcnNpb25fbWFqb3IgPSBTU0wzX1ZFUlNJT05fTUFKT1I7CitA QCAtNjE4LDYgKzYyNiwxNCBAQCBzdGF0aWMgaW50IHNzbDIzX2dldF9zZXJ2ZXJfaGVsbG8oU1NM ICpzCisgCQlpZiAoKHBbMl0gPT0gU1NMM19WRVJTSU9OX01JTk9SKSAmJgorIAkJCSEocy0+b3B0 aW9ucyAmIFNTTF9PUF9OT19TU0x2MykpCisgCQkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJ CQlpZihGSVBTX21vZGUoKSkKKysJCQkJeworKwkJCQlTU0xlcnIoU1NMX0ZfU1NMMjNfR0VUX1NF UlZFUl9IRUxMTywKKysJCQkJCVNTTF9SX09OTFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFKTsK KysJCQkJZ290byBlcnI7CisrCQkJCX0KKysjZW5kaWYKKyAJCQlzLT52ZXJzaW9uPVNTTDNfVkVS U0lPTjsKKyAJCQlzLT5tZXRob2Q9U1NMdjNfY2xpZW50X21ldGhvZCgpOworIAkJCX0KK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MyM19zcnZyLmMuZmlwcyBvcGVuc3NsLTEuMC4w LWJldGE0L3NzbC9zMjNfc3J2ci5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvczIzX3Ny dnIuYy5maXBzCTIwMDgtMDYtMDMgMDQ6NDg6MzQuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNz bC0xLjAuMC1iZXRhNC9zc2wvczIzX3NydnIuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAw MCArMDEwMAorQEAgLTM4Niw2ICszODYsMTUgQEAgaW50IHNzbDIzX2dldF9jbGllbnRfaGVsbG8o U1NMICpzKQorIAkJCX0KKyAJCX0KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBT X21vZGUoKSAmJiAocy0+dmVyc2lvbiA8IFRMUzFfVkVSU0lPTikpCisrCQl7CisrCQlTU0xlcnIo U1NMX0ZfU1NMMjNfR0VUX0NMSUVOVF9IRUxMTywKKysJCQkJCVNTTF9SX09OTFlfVExTX0FMTE9X RURfSU5fRklQU19NT0RFKTsKKysJCWdvdG8gZXJyOworKwkJfQorKyNlbmRpZgorKworIAlpZiAo cy0+c3RhdGUgPT0gU1NMMjNfU1RfU1JfQ0xOVF9IRUxMT19CKQorIAkJeworIAkJLyogd2UgaGF2 ZSBTU0x2My9UTFN2MSBpbiBhbiBTU0x2MiBoZWFkZXIKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAt YmV0YTQvc3NsL3MzX2NsbnQuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MzX2NsbnQu YworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MzX2NsbnQuYy5maXBzCTIwMDktMTAtMzAg MTU6MDY6MTguMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvczNf Y2xudC5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMTU2LDYgKzE1 NiwxMCBAQAorICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyAjaW5jbHVkZSA8b3BlbnNz bC9ldnAuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9tZDUuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworICNpZm5kZWYgT1BFTlNT TF9OT19ESAorICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+CisgI2VuZGlmCitAQCAtMTUzMCw2ICsx NTM0LDggQEAgaW50IHNzbDNfZ2V0X2tleV9leGNoYW5nZShTU0wgKnMpCisgCQkJcT1tZF9idWY7 CisgCQkJZm9yIChudW09MjsgbnVtID4gMDsgbnVtLS0pCisgCQkJCXsKKysJCQkJRVZQX01EX0NU WF9zZXRfZmxhZ3MoJm1kX2N0eCwKKysJCQkJCUVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExP Vyk7CisgCQkJCUVWUF9EaWdlc3RJbml0X2V4KCZtZF9jdHgsKG51bSA9PSAyKQorIAkJCQkJP3Mt PmN0eC0+bWQ1OnMtPmN0eC0+c2hhMSwgTlVMTCk7CisgCQkJCUVWUF9EaWdlc3RVcGRhdGUoJm1k X2N0eCwmKHMtPnMzLT5jbGllbnRfcmFuZG9tWzBdKSxTU0wzX1JBTkRPTV9TSVpFKTsKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MzX2VuYy5jLmZpcHMgb3BlbnNzbC0xLjAuMC1i ZXRhNC9zc2wvczNfZW5jLmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zM19lbmMuYy5m aXBzCTIwMDktMDQtMTYgMTk6MjI6NTAuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAu MC1iZXRhNC9zc2wvczNfZW5jLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAK K0BAIC0xNzAsNiArMTcwLDcgQEAgc3RhdGljIGludCBzc2wzX2dlbmVyYXRlX2tleV9ibG9jayhT U0wgKgorICNlbmRpZgorIAlrPTA7CisgCUVWUF9NRF9DVFhfaW5pdCgmbTUpOworKwlFVlBfTURf Q1RYX3NldF9mbGFncygmbTUsIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7CisgCUVW UF9NRF9DVFhfaW5pdCgmczEpOworIAlmb3IgKGk9MDsgKGludClpPG51bTsgaSs9TUQ1X0RJR0VT VF9MRU5HVEgpCisgCQl7CitAQCAtNjE0LDYgKzYxNSw4IEBAIGludCBzc2wzX2RpZ2VzdF9jYWNo ZWRfcmVjb3JkcyhTU0wgKnMpCisgCQlpZiAoKG1hc2sgJiBzLT5zMy0+dG1wLm5ld19jaXBoZXIt PmFsZ29yaXRobTIpICYmIG1kKSAKKyAJCQl7CisgCQkJcy0+czMtPmhhbmRzaGFrZV9kZ3N0W2ld PUVWUF9NRF9DVFhfY3JlYXRlKCk7CisrCQkJRVZQX01EX0NUWF9zZXRfZmxhZ3Mocy0+czMtPmhh bmRzaGFrZV9kZ3N0W2ldLAorKwkJCQlFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwor IAkJCUVWUF9EaWdlc3RJbml0X2V4KHMtPnMzLT5oYW5kc2hha2VfZGdzdFtpXSxtZCxOVUxMKTsK KyAJCQlFVlBfRGlnZXN0VXBkYXRlKHMtPnMzLT5oYW5kc2hha2VfZGdzdFtpXSxoZGF0YSxoZGF0 YWxlbik7CisgCQkJfSAKK0BAIC02NzAsNiArNjczLDcgQEAgc3RhdGljIGludCBzc2wzX2hhbmRz aGFrZV9tYWMoU1NMICpzLCBpbgorIAkJcmV0dXJuIDA7CisgCX0JCisgCUVWUF9NRF9DVFhfaW5p dCgmY3R4KTsKKysJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9GTEFHX05P Tl9GSVBTX0FMTE9XKTsKKyAJRVZQX01EX0NUWF9jb3B5X2V4KCZjdHgsZCk7CisgCW49RVZQX01E X0NUWF9zaXplKCZjdHgpOworIAlpZiAobiA8IDApCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGE0L3NzbC9zM19zcnZyLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zM19zcnZyLmMK Ky0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zM19zcnZyLmMuZmlwcwkyMDA5LTEwLTMwIDE0 OjIyOjQ0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MzX3Ny dnIuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTE2NzksNiArMTY3 OSw4IEBAIGludCBzc2wzX3NlbmRfc2VydmVyX2tleV9leGNoYW5nZShTU0wgKnMKKyAJCQkJaj0w OworIAkJCQlmb3IgKG51bT0yOyBudW0gPiAwOyBudW0tLSkKKyAJCQkJCXsKKysJCQkJCUVWUF9N RF9DVFhfc2V0X2ZsYWdzKCZtZF9jdHgsCisrCQkJCQkJRVZQX01EX0NUWF9GTEFHX05PTl9GSVBT X0FMTE9XKTsKKyAJCQkJCUVWUF9EaWdlc3RJbml0X2V4KCZtZF9jdHgsKG51bSA9PSAyKQorIAkJ CQkJCT9zLT5jdHgtPm1kNTpzLT5jdHgtPnNoYTEsIE5VTEwpOworIAkJCQkJRVZQX0RpZ2VzdFVw ZGF0ZSgmbWRfY3R4LCYocy0+czMtPmNsaWVudF9yYW5kb21bMF0pLFNTTDNfUkFORE9NX1NJWkUp OworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvdDFfZW5jLmMuZmlwcyBvcGVuc3Ns LTEuMC4wLWJldGE0L3NzbC90MV9lbmMuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3Qx X2VuYy5jLmZpcHMJMjAwOS0wNC0xOSAyMDowMzoxMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVu c3NsLTEuMC4wLWJldGE0L3NzbC90MV9lbmMuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAw MCArMDEwMAorQEAgLTE2OSw2ICsxNjksOCBAQCBzdGF0aWMgdm9pZCB0bHMxX1BfaGFzaChjb25z dCBFVlBfTUQgKm1kCisgCisgCUhNQUNfQ1RYX2luaXQoJmN0eCk7CisgCUhNQUNfQ1RYX2luaXQo JmN0eF90bXApOworKwlITUFDX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9GTEFHX05P Tl9GSVBTX0FMTE9XKTsKKysJSE1BQ19DVFhfc2V0X2ZsYWdzKCZjdHhfdG1wLCBFVlBfTURfQ1RY X0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOworIAlITUFDX0luaXRfZXgoJmN0eCxzZWMsc2VjX2xlbixt ZCwgTlVMTCk7CisgCUhNQUNfSW5pdF9leCgmY3R4X3RtcCxzZWMsc2VjX2xlbixtZCwgTlVMTCk7 CisgCWlmIChzZWVkMSAhPSBOVUxMKSBITUFDX1VwZGF0ZSgmY3R4LHNlZWQxLHNlZWQxX2xlbik7 CgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMC1iZXRhNC1yZWRoYXQucGF0Y2ggYi9vcGVuc3Ns LTEuMC4wLWJldGE0LXJlZGhhdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5hZDYxYmY4Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMC1iZXRhNC1yZWRo YXQucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9D b25maWd1cmUucmVkaGF0IG9wZW5zc2wtMS4wLjAtYmV0YTQvQ29uZmlndXJlCistLS0gb3BlbnNz bC0xLjAuMC1iZXRhNC9Db25maWd1cmUucmVkaGF0CTIwMDktMTEtMDkgMTU6MTE6MTMuMDAwMDAw MDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9Db25maWd1cmUJMjAwOS0xMS0xMiAx MjoxNToyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zMzYsMzIgKzMzNiwzMiBAQCBteSAldGFibGU9 KAorICMjIyMKKyAjICotZ2VuZXJpYyogaXMgZW5kaWFuLW5ldXRyYWwgdGFyZ2V0LCBidXQgLi9j b25maWcgaXMgZnJlZSB0bworICMgdGhyb3cgaW4gLURbQkxdX0VORElBTiwgd2hpY2hldmVyIGFw cHJvcHJpYXRlLi4uCistImxpbnV4LWdlbmVyaWMzMiIsImdjYzotRFRFUk1JTyAtTzMgLWZvbWl0 LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hB UiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246bGlu dXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCist ImxpbnV4LXBwYyIsCSJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5U UkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJP TEw6JHtwcGMzMl9hc219OmxpbnV4MzI6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQo U0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LWdlbmVyaWMzMiIsImdjYzot RFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xM T05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNt fTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6XCQoUlBNX09QVF9GTEFHUyk6LnNvLlwkKFNITElC X1NPTkFNRVZFUikiLAorKyJsaW51eC1wcGMiLAkiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gLVdh bGwgXCQoUlBNX09QVF9GTEFHUyk6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hB UiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtwcGMzMl9hc219OmxpbnV4MzI6ZGxm Y246bGludXgtc2hhcmVkOi1mUElDOlwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05B TUVWRVIpIiwKKyAjIEl0J3MgYmVsaWV2ZWQgdGhhdCBtYWpvcml0eSBvZiBBUk0gdG9vbGNoYWlu cyBwcmVkZWZpbmUgYXBwcm9wcmlhdGUgLW1hcmNoLgorICMgSWYgeW91IGNvbXBpbGVyIGRvZXMg bm90LCBkbyBjb21wbGVtZW50IGNvbmZpZyBjb21tYW5kIGxpbmUgd2l0aCBvbmUhCistImxpbnV4 LWFybXY0IiwJImdjYzotRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9M TE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke2FybXY0 X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNI TElCX01JTk9SKSIsCisrImxpbnV4LWFybXY0IiwJImdjYzotRFRFUk1JTyAtV2FsbCBcJChSUE1f T1BUX0ZMQUdTKTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVO SyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFy ZWQ6LWZQSUM6XCQoUlBNX09QVF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFNRVZFUikiLAorICMj IyMgSUEtMzIgdGFyZ2V0cy4uLgorICJsaW51eC1pYTMyLWljYyIsCSJpY2M6LURMX0VORElBTiAt RFRFUk1JTyAtTzIgLW5vX2NwcHJ0OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZf Z2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJl ZDotS1BJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorLSJsaW51eC1l bGYiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1X YWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2Nj X29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNI TElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1lbGYiLAkiZ2NjOi1ETF9FTkRJ QU4gLURURVJNSU8gLVdhbGwgXCQoUlBNX09QVF9GTEFHUyk6Oi1EX1JFRU5UUkFOVDo6LWxkbDpC Tl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxm Y246bGludXgtc2hhcmVkOi1mUElDOlwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05B TUVWRVIpIiwKKyAibGludXgtYW91dCIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAtTzMgLWZv bWl0LWZyYW1lLXBvaW50ZXIgLW1hcmNoPWk0ODYgLVdhbGw6Oih1bmtub3duKTo6OkJOX0xMT05H ICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9hc219OmEub3V0IiwKKyAjIyMj CistImxpbnV4LWdlbmVyaWM2NCIsImdjYzotRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFO VDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERF U19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5c JChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKy0ibGludXgtcHBjNjQiLAkiZ2NjOi1t NjQgLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhU WV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDok e3BwYzY0X2FzbX06bGludXg2NDpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQo U0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKKy0ibGludXgtaWE2NCIsCSJnY2M6 LURMX0VORElBTiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9G T1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfVU5ST0xMIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxm Y246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9S KSIsCisrImxpbnV4LWdlbmVyaWM2NCIsImdjYzotRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZM QUdTKTo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0 X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNo YXJlZDotZlBJQzpcJChSUE1fT1BUX0ZMQUdTKTpcJChTSExJQl9TT05BTUVWRVIpIiwKKysibGlu dXgtcHBjNjQiLAkiZ2NjOi1tNjQgLURCX0VORElBTiAtRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BU X0ZMQUdTKTo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIg UkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7cHBjNjRfYXNtfTpsaW51eDY0OmRsZmNu OmxpbnV4LXNoYXJlZDotZlBJQzotbTY0IFwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9T T05BTUVWRVIpOjo6NjQiLAorKyJsaW51eC1pYTY0IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlP IC1XYWxsIFwkKFJQTV9PUFRfRkxBR1MpOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9C SVRfTE9ORyBSQzRfQ0hVTksgREVTX1VOUk9MTCBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmxp bnV4LXNoYXJlZDotZlBJQzpcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVS KSIsCisgImxpbnV4LWlhNjQtZWNjIiwiZWNjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8yIC1XYWxs IC1ub19jcHBydDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NI VU5LIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQo U0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisgImxpbnV4LWlhNjQtaWNjIiwiaWNjOi1E TF9FTkRJQU4gLURURVJNSU8gLU8yIC1XYWxsIC1ub19jcHBydDo6LURfUkVFTlRSQU5UOjotbGRs OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfSU5UOiR7aWE2NF9h c219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJ Ql9NSU5PUikiLAorLSJsaW51eC14ODZfNjQiLAkiZ2NjOi1tNjQgLURMX0VORElBTiAtRFRFUk1J TyAtTzMgLVdhbGwgLURNRDMyX1JFR19UPWludDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZP VVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVs ZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNI TElCX01JTk9SKTo6OjY0IiwKKy0ibGludXgtczM5MHgiLAkiZ2NjOi1tNjQgLURCX0VORElBTiAt RFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05H IFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHtzMzkweF9hc219OmRsZmNu OmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlO T1IpOjo6NjQiLAorKyJsaW51eC14ODZfNjQiLAkiZ2NjOi1tNjQgLURMX0VORElBTiAtRFRFUk1J TyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKSAtRE1EMzJfUkVHX1Q9aW50OjotRF9SRUVOVFJBTlQ6 Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7 eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0IFwkKFJQTV9PUFRf RkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpOjo6NjQiLAorKyJsaW51eC1zMzkweCIsCSJn Y2M6LW02NCAtREJfRU5ESUFOIC1EVEVSTUlPIC1XYWxsIFwkKFJQTV9PUFRfRkxBR1MpOjotRF9S RUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVT X0lOVCBERVNfVU5ST0xMOiR7czM5MHhfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02 NCBcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKTo6OjY0IiwKKyAjIyMj IFNQQVJDIExpbnV4IHNldHVwcworICMgUmF5IE1pbGxlciA8cmF5Lm1pbGxlckBjb21wdXRpbmct c2VydmljZXMub3hmb3JkLmFjLnVrPiBoYXMgcGF0aWVudGx5CisgIyBhc3Npc3RlZCB3aXRoIGRl YnVnZ2luZyBvZiBmb2xsb3dpbmcgdHdvIGNvbmZpZ3MuCistImxpbnV4LXNwYXJjdjgiLCJnY2M6 LW12OCAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAt REJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5L IERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJ Qzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1zcGFyY3Y4 IiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gLVdhbGwgXCQoUlBNX09QVF9GTEFHUykgLURCTl9E SVYyVzo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNf VU5ST0xMIEJGX1BUUjoke3NwYXJjdjhfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6XCQo UlBNX09QVF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFNRVZFUikiLAorICMgaXQncyBhIHJlYWwg bWVzcyB3aXRoIC1tY3B1PXVsdHJhc3BhcmMgb3B0aW9uIHVuZGVyIExpbnV4LCBidXQKKyAjIC1X YSwtQXY4cGx1cyBzaG91bGQgZG8gdGhlIHRyaWNrIG5vIG1hdHRlciB3aGF0LgorLSJsaW51eC1z cGFyY3Y5IiwiZ2NjOi1tMzIgLW1jcHU9dWx0cmFzcGFyYyAtREJfRU5ESUFOIC1EVEVSTUlPIC1P MyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtV2EsLUF2OHBsdXMgLURCTl9ESVYyVzo6LURf UkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVT X1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1t MzI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1zcGFyY3Y5 IiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gLVdhbGwgXCQoUlBNX09QVF9GTEFHUykgLURCTl9E SVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRf Q0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246bGludXgtc2hhcmVk Oi1mUElDOlwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpIiwKKyAjIEdD QyAzLjEgaXMgYSByZXF1aXJlbWVudAorLSJsaW51eDY0LXNwYXJjdjkiLCJnY2M6LW02NCAtbWNw dT11bHRyYXNwYXJjIC1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVy IC1XYWxsOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJD NF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3Bh cmN2OV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpP UikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAorKyJsaW51eDY0LXNwYXJjdjkiLCJnY2M6LURCX0VO RElBTiAtRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6LURfUkVFTlRSQU5UOlVMVFJB U1BBUkM6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERF U19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpsaW51eC1zaGFy ZWQ6LWZQSUM6XCQoUlBNX09QVF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFNRVZFUik6Ojo2NCIs CisgIyMjIyBBbHBoYSBMaW51eCB3aXRoIEdOVSBDIGFuZCBDb21wYXEgQyBzZXR1cHMKKyAjIFNw ZWNpYWwgbm90ZXM6CisgIyAtIGxpbnV4LWFscGhhK2J3eC1nY2MgaXMgbWVudCB0byBiZSB1c2Vk IGZyb20gLi9jb25maWcgb25seS4gSWYgeW91CitAQCAtMzc1LDggKzM3NSw4IEBAIG15ICV0YWJs ZT0oCisgIworICMJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KKyAjCistImxpbnV4LWFscGhh LWdjYyIsImdjYzotTzMgLURMX0VORElBTiAtRFRFUk1JTzo6LURfUkVFTlRSQU5UOjotbGRsOlNJ WFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFf YXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hM SUJfTUlOT1IpIiwKKy0ibGludXgtYWxwaGErYnd4LWdjYyIsImdjYzotTzMgLURMX0VORElBTiAt RFRFUk1JTzo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIg UkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfTpkbGZjbjpsaW51eC1z aGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysibGlu dXgtYWxwaGEtZ2NjIiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gLVdhbGwgXCQoUlBNX09QVF9G TEFHUyk6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBE RVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElD OlwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpIiwKKysibGludXgtYWxw aGErYnd4LWdjYyIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1XYWxsIFwkKFJQTV9PUFRfRkxB R1MpOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRf Q0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219OmRsZmNuOmxpbnV4LXNoYXJl ZDotZlBJQzpcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKSIsCisgImxp bnV4LWFscGhhLWNjYyIsImNjYzotZmFzdCAtcmVhZG9ubHlfc3RyaW5ncyAtRExfRU5ESUFOIC1E VEVSTUlPOjotRF9SRUVOVFJBTlQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNf SU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219IiwKKyAibGludXgt YWxwaGErYnd4LWNjYyIsImNjYzotZmFzdCAtcmVhZG9ubHlfc3RyaW5ncyAtRExfRU5ESUFOIC1E VEVSTUlPOjotRF9SRUVOVFJBTlQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9D SFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219IiwK KyAKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWJldGE0LXJlbmVnLnBhdGNoIGIvb3BlbnNz bC0xLjAuMC1iZXRhNC1yZW5lZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi45MmUyMDZkCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMC1iZXRhNC1yZW5l Zy5wYXRjaApAQCAtMCwwICsxLDIzNyBAQAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9h cHBzL3NfY2IuYy5yZW5lZyBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvc19jYi5jCistLS0gb3Bl bnNzbC0xLjAuMC1iZXRhNC9hcHBzL3NfY2IuYy5yZW5lZwkyMDA5LTEwLTE1IDIwOjQ4OjQ3LjAw MDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvYXBwcy9zX2NiLmMJMjAwOS0x MS0xMiAxNTowMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC02NjksNiArNjY5LDEwIEBAIHZvaWQg TVNfQ0FMTEJBQ0sgdGxzZXh0X2NiKFNTTCAqcywgaW50IGMKKyAJCWV4dG5hbWUgPSAic2VydmVy IHRpY2tldCI7CisgCQlicmVhazsKKyAKKysJCWNhc2UgVExTRVhUX1RZUEVfcmVuZWdvdGlhdGU6 CisrCQlleHRuYW1lID0gInJlbmVnb3RpYXRlIjsKKysJCWJyZWFrOworKworICNpZmRlZiBUTFNF WFRfVFlQRV9vcGFxdWVfcHJmX2lucHV0CisgCQljYXNlIFRMU0VYVF9UWVBFX29wYXF1ZV9wcmZf aW5wdXQ6CisgCQlleHRuYW1lID0gIm9wYXF1ZSBQUkYgaW5wdXQiOworZGlmZiAtdXAgb3BlbnNz bC0xLjAuMC1iZXRhNC9hcHBzL3NfY2xpZW50LmMucmVuZWcgb3BlbnNzbC0xLjAuMC1iZXRhNC9h cHBzL3NfY2xpZW50LmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvc19jbGllbnQuYy5y ZW5lZwkyMDA5LTExLTEyIDE0OjU3OjQ4LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjAtYmV0YTQvYXBwcy9zX2NsaWVudC5jCTIwMDktMTEtMTIgMTU6MDE6NDguMDAwMDAwMDAwICsw MTAwCitAQCAtMzQzLDYgKzM0Myw3IEBAIHN0YXRpYyB2b2lkIHNjX3VzYWdlKHZvaWQpCisgCUJJ T19wcmludGYoYmlvX2VyciwiIC1zdGF0dXMgICAgICAgICAgIC0gcmVxdWVzdCBjZXJ0aWZpY2F0 ZSBzdGF0dXMgZnJvbSBzZXJ2ZXJcbiIpOworIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtbm9fdGlj a2V0ICAgICAgICAtIGRpc2FibGUgdXNlIG9mIFJGQzQ1MDdiaXMgc2Vzc2lvbiB0aWNrZXRzXG4i KTsKKyAjZW5kaWYKKysJQklPX3ByaW50ZihiaW9fZXJyLCIgLWxlZ2FjeV9yZW5lZ290aWF0aW9u IC0gZW5hYmxlIHVzZSBvZiBsZWdhY3kgcmVuZWdvdGlhdGlvbiAoZGFuZ2Vyb3VzKVxuIik7Cisg CX0KKyAKKyAjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCitAQCAtNjU3LDYgKzY1OCw4IEBAIGlu dCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAjZW5kaWYKKyAJCWVsc2UgaWYgKHN0cmNt cCgqYXJndiwiLXNlcnZlcnByZWYiKSA9PSAwKQorIAkJCW9mZnw9U1NMX09QX0NJUEhFUl9TRVJW RVJfUFJFRkVSRU5DRTsKKysJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLWxlZ2FjeV9yZW5lZ290 aWF0aW9uIikgPT0gMCkKKysJCQlvZmZ8PVNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JFTkVH T1RJQVRJT047CisgCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1jaXBoZXIiKSA9PSAwKQorIAkJ CXsKKyAJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4w LWJldGE0L2FwcHMvc19zZXJ2ZXIuYy5yZW5lZyBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvc19z ZXJ2ZXIuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvYXBwcy9zX3NlcnZlci5jLnJlbmVnCTIw MDktMTEtMTIgMTQ6NTc6NDguMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRh NC9hcHBzL3Nfc2VydmVyLmMJMjAwOS0xMS0xMiAxNTowMTo0OC4wMDAwMDAwMDAgKzAxMDAKK0BA IC00OTEsNiArNDkxLDcgQEAgc3RhdGljIHZvaWQgc3ZfdXNhZ2Uodm9pZCkKKyAJQklPX3ByaW50 ZihiaW9fZXJyLCIgICAgICAgICAgICAgICAgIG5vdCBzcGVjaWZpZWQgKGRlZmF1bHQgaXMgJXMp XG4iLFRFU1RfQ0VSVDIpOworIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtdGxzZXh0ZGVidWcgIC0g aGV4IGR1bXAgb2YgYWxsIFRMUyBleHRlbnNpb25zIHJlY2VpdmVkXG4iKTsKKyAJQklPX3ByaW50 ZihiaW9fZXJyLCIgLW5vX3RpY2tldCAgICAtIGRpc2FibGUgdXNlIG9mIFJGQzQ1MDdiaXMgc2Vz c2lvbiB0aWNrZXRzXG4iKTsKKysJQklPX3ByaW50ZihiaW9fZXJyLCIgLWxlZ2FjeV9yZW5lZ290 aWF0aW9uIC0gZW5hYmxlIHVzZSBvZiBsZWdhY3kgcmVuZWdvdGlhdGlvbiAoZGFuZ2Vyb3VzKVxu Iik7CisgI2VuZGlmCisgCX0KKyAKK0BAIC0xMDEzLDYgKzEwMTQsOCBAQCBpbnQgTUFJTihpbnQg YXJnYywgY2hhciAqYXJndltdKQorIAkJCXZlcmlmeV9yZXR1cm5fZXJyb3IgPSAxOworIAkJZWxz ZSBpZgkoc3RyY21wKCphcmd2LCItc2VydmVycHJlZiIpID09IDApCisgCQkJeyBvZmZ8PVNTTF9P UF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0U7IH0KKysJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwi LWxlZ2FjeV9yZW5lZ290aWF0aW9uIikgPT0gMCkKKysJCQlvZmZ8PVNTTF9PUF9BTExPV19VTlNB RkVfTEVHQUNZX1JFTkVHT1RJQVRJT047CisgCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1jaXBo ZXIiKSA9PSAwKQorIAkJCXsKKyAJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7CitkaWZmIC11 cCBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC90bHMxLmgucmVuZWcgb3BlbnNzbC0xLjAuMC1iZXRh NC9zc2wvdGxzMS5oCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvdGxzMS5oLnJlbmVnCTIw MDktMTEtMTIgMTQ6NTc6NDcuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRh NC9zc2wvdGxzMS5oCTIwMDktMTEtMTIgMTU6MDI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMjAx LDYgKzIwMSw5IEBAIGV4dGVybiAiQyIgeworICMgZGVmaW5lIFRMU0VYVF9UWVBFX29wYXF1ZV9w cmZfaW5wdXQJCT8/ICovCisgI2VuZGlmCisgCisrLyogVGVtcG9yYXJ5IGV4dGVuc2lvbiB0eXBl ICovCisrI2RlZmluZSBUTFNFWFRfVFlQRV9yZW5lZ290aWF0ZSAgICAgICAgICAgICAgICAgMHhm ZjAxCisrCisgLyogTmFtZVR5cGUgdmFsdWUgZnJvbSBSRkMgMzU0NiAqLworICNkZWZpbmUgVExT RVhUX05BTUVUWVBFX2hvc3RfbmFtZSAwCisgLyogc3RhdHVzIHJlcXVlc3QgdmFsdWUgZnJvbSBS RkMgMzU0NiAqLworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvdDFfbGliLmMucmVu ZWcgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvdDFfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJl dGE0L3NzbC90MV9saWIuYy5yZW5lZwkyMDA5LTExLTA4IDE1OjM2OjMyLjAwMDAwMDAwMCArMDEw MAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3QxX2xpYi5jCTIwMDktMTEtMTIgMTU6MDI6 MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMzE1LDYgKzMxNSwzMCBAQCB1bnNpZ25lZCBjaGFyICpz c2xfYWRkX2NsaWVudGhlbGxvX3Rsc2V4CisgCQlyZXQrPXNpemVfc3RyOworIAkJfQorIAorKyAg ICAgICAgLyogQWRkIHRoZSByZW5lZ290aWF0aW9uIG9wdGlvbjogVE9ET0VLUiBzd2l0Y2ggKi8K KysgICAgICAgIHsKKysgICAgICAgICAgaW50IGVsOworKyAgICAgICAgICAKKysgICAgICAgICAg aWYoIXNzbF9hZGRfY2xpZW50aGVsbG9fcmVuZWdvdGlhdGVfZXh0KHMsIDAsICZlbCwgMCkpCisr ICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBTU0xlcnIoU1NMX0ZfU1NMX0FERF9DTElF TlRIRUxMT19UTFNFWFQsIEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKKysgICAgICAgICAgICAgIHJl dHVybiBOVUxMOworKyAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICBpZigobGltaXQgLSBw IC0gNCAtIGVsKSA8IDApIHJldHVybiBOVUxMOworKyAgICAgICAgICAKKysgICAgICAgICAgczJu KFRMU0VYVF9UWVBFX3JlbmVnb3RpYXRlLHJldCk7CisrICAgICAgICAgIHMybihlbCxyZXQpOwor KworKyAgICAgICAgICBpZighc3NsX2FkZF9jbGllbnRoZWxsb19yZW5lZ290aWF0ZV9leHQocywg cmV0LCAmZWwsIGVsKSkKKysgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIFNTTGVycihT U0xfRl9TU0xfQUREX0NMSUVOVEhFTExPX1RMU0VYVCwgRVJSX1JfSU5URVJOQUxfRVJST1IpOwor KyAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgICB9CisrCisrICAgICAg ICAgIHJldCArPSBlbDsKKysgICAgICAgIH0KKysKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRUMKKyAJ aWYgKHMtPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdCAhPSBOVUxMKQorIAkJeworQEAgLTQ5MCw2 ICs1MTQsMzEgQEAgdW5zaWduZWQgY2hhciAqc3NsX2FkZF9zZXJ2ZXJoZWxsb190bHNleAorIAkJ czJuKFRMU0VYVF9UWVBFX3NlcnZlcl9uYW1lLHJldCk7CisgCQlzMm4oMCxyZXQpOworIAkJfQor KworKyAgICAgICAgaWYocy0+czMtPnNlbmRfY29ubmVjdGlvbl9iaW5kaW5nKQorKyAgICAgICAg eworKyAgICAgICAgICBpbnQgZWw7CisrICAgICAgICAgIAorKyAgICAgICAgICBpZighc3NsX2Fk ZF9zZXJ2ZXJoZWxsb19yZW5lZ290aWF0ZV9leHQocywgMCwgJmVsLCAwKSkKKysgICAgICAgICAg ICAgIHsKKysgICAgICAgICAgICAgIFNTTGVycihTU0xfRl9TU0xfQUREX1NFUlZFUkhFTExPX1RM U0VYVCwgRVJSX1JfSU5URVJOQUxfRVJST1IpOworKyAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7 CisrICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgIGlmKChsaW1pdCAtIHAgLSA0IC0gZWwp IDwgMCkgcmV0dXJuIE5VTEw7CisrICAgICAgICAgIAorKyAgICAgICAgICBzMm4oVExTRVhUX1RZ UEVfcmVuZWdvdGlhdGUscmV0KTsKKysgICAgICAgICAgczJuKGVsLHJldCk7CisrCisrICAgICAg ICAgIGlmKCFzc2xfYWRkX3NlcnZlcmhlbGxvX3JlbmVnb3RpYXRlX2V4dChzLCByZXQsICZlbCwg ZWwpKQorKyAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgU1NMZXJyKFNTTF9GX1NTTF9B RERfU0VSVkVSSEVMTE9fVExTRVhULCBFUlJfUl9JTlRFUk5BTF9FUlJPUik7CisrICAgICAgICAg ICAgICByZXR1cm4gTlVMTDsKKysgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgcmV0ICs9 IGVsOworKyAgICAgICAgfQorKworICNpZm5kZWYgT1BFTlNTTF9OT19FQworIAlpZiAocy0+dGxz ZXh0X2VjcG9pbnRmb3JtYXRsaXN0ICE9IE5VTEwpCisgCQl7CitAQCAtNTc0LDExICs2MjMsMjMg QEAgaW50IHNzbF9wYXJzZV9jbGllbnRoZWxsb190bHNleHQoU1NMICpzLAorIAl1bnNpZ25lZCBz aG9ydCBzaXplOworIAl1bnNpZ25lZCBzaG9ydCBsZW47CisgCXVuc2lnbmVkIGNoYXIgKmRhdGEg PSAqcDsKKysJaW50IHJlbmVnb3RpYXRlX3NlZW4gPSAwOworKworIAlzLT5zZXJ2ZXJuYW1lX2Rv bmUgPSAwOworIAlzLT50bHNleHRfc3RhdHVzX3R5cGUgPSAtMTsKKysJcy0+czMtPnNlbmRfY29u bmVjdGlvbl9iaW5kaW5nID0gMDsKKyAKKyAJaWYgKGRhdGEgPj0gKGQrbi0yKSkKKysJCXsKKysJ CWlmIChzLT5uZXdfc2Vzc2lvbgorKwkJCSYmICEocy0+Y3R4LT5vcHRpb25zICYgU1NMX09QX0FM TE9XX1VOU0FGRV9MRUdBQ1lfUkVORUdPVElBVElPTikpCisrCQkJeworKwkJCS8qIFdlIHNob3Vs ZCBhbHdheXMgc2VlIG9uZSBleHRlbnNpb246IHRoZSByZW5lZ290aWF0ZSBleHRlbnNpb24gKi8K KysJCQkqYWwgPSBTU0xfQURfSUxMRUdBTF9QQVJBTUVURVI7IC8qIGlzIHRoaXMgdGhlIHJpZ2h0 IGFsZXJ0PyAqLworKwkJCXJldHVybiAwOworKwkJCX0KKyAJCXJldHVybiAxOworKwkJfQorIAlu MnMoZGF0YSxsZW4pOworIAorIAlpZiAoZGF0YSA+IChkK24tbGVuKSkgCitAQCAtNzkwLDYgKzg1 MSwxMiBAQCBpbnQgc3NsX3BhcnNlX2NsaWVudGhlbGxvX3Rsc2V4dChTU0wgKnMsCisgCQkJCXJl dHVybiAwOworIAkJCQl9CisgCQkJfQorKwkJZWxzZSBpZiAodHlwZSA9PSBUTFNFWFRfVFlQRV9y ZW5lZ290aWF0ZSkKKysJCQl7CisrCQkJaWYoIXNzbF9wYXJzZV9jbGllbnRoZWxsb19yZW5lZ290 aWF0ZV9leHQocywgZGF0YSwgc2l6ZSwgYWwpKQorKwkJCQlyZXR1cm4gMDsKKysJCQlyZW5lZ290 aWF0ZV9zZWVuID0gMTsKKysJCQl9CisgCQllbHNlIGlmICh0eXBlID09IFRMU0VYVF9UWVBFX3N0 YXR1c19yZXF1ZXN0CisgCQkJCQkJJiYgcy0+Y3R4LT50bHNleHRfc3RhdHVzX2NiKQorIAkJCXsK K0BAIC04OTQsNiArOTYxLDE0IEBAIGludCBzc2xfcGFyc2VfY2xpZW50aGVsbG9fdGxzZXh0KFNT TCAqcywKKyAJCS8qIHNlc3Npb24gdGlja2V0IHByb2Nlc3NlZCBlYXJsaWVyICovCisgCQlkYXRh Kz1zaXplOworIAkJfQorKyAgCisrIAlpZiAocy0+bmV3X3Nlc3Npb24gJiYgIXJlbmVnb3RpYXRl X3NlZW4KKysgCQkmJiAhKHMtPmN0eC0+b3B0aW9ucyAmIFNTTF9PUF9BTExPV19VTlNBRkVfTEVH QUNZX1JFTkVHT1RJQVRJT04pKQorKyAJCXsKKysgCQkqYWwgPSBTU0xfQURfSUxMRUdBTF9QQVJB TUVURVI7IC8qIGlzIHRoaXMgdGhlIHJpZ2h0IGFsZXJ0PyAqLworKyAJCXJldHVybiAwOworKyAJ CX0KKysgCisgCQkJCQorIAkqcCA9IGRhdGE7CisgCXJldHVybiAxOworQEAgLTkwNSwxMSArOTgw LDIyIEBAIGludCBzc2xfcGFyc2Vfc2VydmVyaGVsbG9fdGxzZXh0KFNTTCAqcywKKyAJdW5zaWdu ZWQgc2hvcnQgc2l6ZTsKKyAJdW5zaWduZWQgc2hvcnQgbGVuOyAgCisgCXVuc2lnbmVkIGNoYXIg KmRhdGEgPSAqcDsKKy0KKyAJaW50IHRsc2V4dF9zZXJ2ZXJuYW1lID0gMDsKKysJaW50IHJlbmVn b3RpYXRlX3NlZW4gPSAwOworIAorIAlpZiAoZGF0YSA+PSAoZCtuLTIpKQorKwkJeworKwkJLyog QmVjYXVzZSB0aGUgY2xpZW50IGRvZXMgbm90IHNlZSBhbnkgcmVuZWdvdGlhdGlvbiBkdXJpbmcg YW4KKysJCSAgIGF0dGFjaywgd2UgbXVzdCBlbmZvcmNlIHRoaXMgb24gYWxsIHNlcnZlciBoZWxs b3MsIGV2ZW4gdGhlCisrCQkgICBmaXJzdCAqLworKwkJaWYgKCEocy0+Y3R4LT5vcHRpb25zICYg U1NMX09QX0FMTE9XX1VOU0FGRV9MRUdBQ1lfUkVORUdPVElBVElPTikpCisrCQkJeworKwkJCS8q IFdlIHNob3VsZCBhbHdheXMgc2VlIG9uZSBleHRlbnNpb246IHRoZSByZW5lZ290aWF0ZSBleHRl bnNpb24gKi8KKysJCQkqYWwgPSBTU0xfQURfSUxMRUdBTF9QQVJBTUVURVI7IC8qIGlzIHRoaXMg dGhlIHJpZ2h0IGFsZXJ0PyAqLworKwkJCXJldHVybiAwOworKwkJCX0KKyAJCXJldHVybiAxOwor KwkJfQorIAorIAluMnMoZGF0YSxsZW4pOworIAorQEAgLTEwMjUsNyArMTExMSwxMiBAQCBpbnQg c3NsX3BhcnNlX3NlcnZlcmhlbGxvX3Rsc2V4dChTU0wgKnMsCisgCQkJLyogU2V0IGZsYWcgdG8g ZXhwZWN0IENlcnRpZmljYXRlU3RhdHVzIG1lc3NhZ2UgKi8KKyAJCQlzLT50bHNleHRfc3RhdHVz X2V4cGVjdGVkID0gMTsKKyAJCQl9CistCisrCQllbHNlIGlmICh0eXBlID09IFRMU0VYVF9UWVBF X3JlbmVnb3RpYXRlKQorKwkJCXsKKysJCQlpZighc3NsX3BhcnNlX3NlcnZlcmhlbGxvX3JlbmVn b3RpYXRlX2V4dChzLCBkYXRhLCBzaXplLCBhbCkpCisrCQkJCXJldHVybiAwOworKwkJCXJlbmVn b3RpYXRlX3NlZW4gPSAxOworKwkJCX0KKyAJCWRhdGErPXNpemU7CQkKKyAJCX0KKyAKK0BAIC0x MDM1LDYgKzExMjYsMTMgQEAgaW50IHNzbF9wYXJzZV9zZXJ2ZXJoZWxsb190bHNleHQoU1NMICpz LAorIAkJcmV0dXJuIDA7CisgCQl9CisgCisrCWlmICghcmVuZWdvdGlhdGVfc2VlbgorKwkJJiYg IShzLT5jdHgtPm9wdGlvbnMgJiBTU0xfT1BfQUxMT1dfVU5TQUZFX0xFR0FDWV9SRU5FR09USUFU SU9OKSkKKysJCXsKKysJCSphbCA9IFNTTF9BRF9JTExFR0FMX1BBUkFNRVRFUjsgLyogaXMgdGhp cyB0aGUgcmlnaHQgYWxlcnQ/ICovCisrCQlyZXR1cm4gMDsKKysJCX0KKysKKyAJaWYgKCFzLT5o aXQgJiYgdGxzZXh0X3NlcnZlcm5hbWUgPT0gMSkKKyAJCXsKKyAgCQlpZiAocy0+dGxzZXh0X2hv c3RuYW1lKQoKZGlmZiAtLWdpdCBhL29wZW5zc2wuc3BlYyBiL29wZW5zc2wuc3BlYwppbmRleCAx NDEyYzg2Li4wMDY2YWJhIDEwMDY0NAotLS0gYS9vcGVuc3NsLnNwZWMKKysrIGIvb3BlbnNzbC5z cGVjCkBAIC0xMSw3ICsxMSw3IEBACiAjIDEuMC4wIHNvdmVyc2lvbiA9IDEwCiAlZGVmaW5lIHNv dmVyc2lvbiAxMAogCi0lZGVmaW5lIGJldGEgYmV0YTMKKyVkZWZpbmUgYmV0YSBiZXRhNAogCiAj IE51bWJlciBvZiB0aHJlYWRzIHRvIHNwYXduIHdoZW4gdGVzdGluZyBzb21lIHRocmVhZGluZyBm aXhlcy4KICVkZWZpbmUgdGhyZWFkX3Rlc3RfdGhyZWFkcyAlez90aHJlYWRzOiV7dGhyZWFkc319 JXshP3RocmVhZHM6MX0KQEAgLTIzLDcgKzIzLDcgQEAKIFN1bW1hcnk6IEEgZ2VuZXJhbCBwdXJw b3NlIGNyeXB0b2dyYXBoeSBsaWJyYXJ5IHdpdGggVExTIGltcGxlbWVudGF0aW9uCiBOYW1lOiBv cGVuc3NsCiBWZXJzaW9uOiAxLjAuMAotUmVsZWFzZTogMC4xMC4le2JldGF9JXs/ZGlzdH0KK1Jl bGVhc2U6IDAuMTEuJXtiZXRhfSV7P2Rpc3R9CiAjIFdlIHJlbW92ZSBjZXJ0YWluIHBhdGVudGVk IGFsZ29yaXRobXMgZnJvbSB0aGUgb3BlbnNzbCBzb3VyY2UgdGFyYmFsbAogIyB3aXRoIHRoZSBo b2JibGUtb3BlbnNzbCBzY3JpcHQgd2hpY2ggaXMgaW5jbHVkZWQgYmVsb3cuCiBTb3VyY2U6IG9w ZW5zc2wtJXt2ZXJzaW9ufS0le2JldGF9LXVzYS50YXIuYnoyCkBAIC0zNSw0MSArMzUsMzMgQEAg U291cmNlOTogb3BlbnNzbGNvbmYtbmV3LmgKIFNvdXJjZTEwOiBvcGVuc3NsY29uZi1uZXctd2Fy bmluZy5oCiBTb3VyY2UxMTogUkVBRE1FLkZJUFMKICMgQnVpbGQgY2hhbmdlcwotUGF0Y2gwOiBv cGVuc3NsLTEuMC4wLWJldGEzLXJlZGhhdC5wYXRjaAorUGF0Y2gwOiBvcGVuc3NsLTEuMC4wLWJl dGE0LXJlZGhhdC5wYXRjaAogUGF0Y2gxOiBvcGVuc3NsLTEuMC4wLWJldGEzLWRlZmF1bHRzLnBh dGNoCi1QYXRjaDI6IG9wZW5zc2wtMS4wLjAtYmV0YTMta3JiNS5wYXRjaAogUGF0Y2gzOiBvcGVu c3NsLTEuMC4wLWJldGEzLXNvdmVyc2lvbi5wYXRjaAotUGF0Y2g0OiBvcGVuc3NsLTEuMC4wLWJl dGEzLWVuZ2luZXNkaXIucGF0Y2gKK1BhdGNoNDogb3BlbnNzbC0xLjAuMC1iZXRhNC1lbmdpbmVz ZGlyLnBhdGNoCiBQYXRjaDU6IG9wZW5zc2wtMC45LjhhLW5vLXJwYXRoLnBhdGNoCiBQYXRjaDY6 IG9wZW5zc2wtMC45LjhiLXRlc3QtdXNlLWxvY2FsaG9zdC5wYXRjaAogIyBCdWcgZml4ZXMKLVBh dGNoMjE6IG9wZW5zc2wtMC45LjhiLWFsaWFzaW5nLWJ1Zy5wYXRjaAotUGF0Y2gyMzogb3BlbnNz bC0xLjAuMC1iZXRhMy1kZWZhdWx0LXBhdGhzLnBhdGNoCitQYXRjaDIzOiBvcGVuc3NsLTEuMC4w LWJldGE0LWRlZmF1bHQtcGF0aHMucGF0Y2gKK1BhdGNoMjQ6IG9wZW5zc2wtMS4wLjAtYmV0YTQt YmludXRpbHMucGF0Y2gKICMgRnVuY3Rpb25hbGl0eSBjaGFuZ2VzCiBQYXRjaDMyOiBvcGVuc3Ns LTAuOS44Zy1pYTY0LnBhdGNoCi1QYXRjaDMzOiBvcGVuc3NsLTAuOS44ai1jYS1kaXIucGF0Y2gK K1BhdGNoMzM6IG9wZW5zc2wtMS4wLjAtYmV0YTQtY2EtZGlyLnBhdGNoCiBQYXRjaDM0OiBvcGVu c3NsLTAuOS42LXg1MDkucGF0Y2gKIFBhdGNoMzU6IG9wZW5zc2wtMC45LjhqLXZlcnNpb24tYWRk LWVuZ2luZXMucGF0Y2gKIFBhdGNoMzg6IG9wZW5zc2wtMS4wLjAtYmV0YTMtY2lwaGVyLWNoYW5n ZS5wYXRjaAogUGF0Y2gzOTogb3BlbnNzbC0xLjAuMC1iZXRhMy1pcHY2LWFwcHMucGF0Y2gKLVBh dGNoNDA6IG9wZW5zc2wtMS4wLjAtYmV0YTMtZmlwcy5wYXRjaAorUGF0Y2g0MDogb3BlbnNzbC0x LjAuMC1iZXRhNC1maXBzLnBhdGNoCiBQYXRjaDQxOiBvcGVuc3NsLTEuMC4wLWJldGEzLWZpcHNj aGVjay5wYXRjaAogUGF0Y2g0Mzogb3BlbnNzbC0xLjAuMC1iZXRhMy1maXBzbW9kZS5wYXRjaAog UGF0Y2g0NDogb3BlbnNzbC0xLjAuMC1iZXRhMy1maXBzcm5nLnBhdGNoCiBQYXRjaDQ1OiBvcGVu c3NsLTAuOS44ai1lbnYtbm96bGliLnBhdGNoCiBQYXRjaDQ3OiBvcGVuc3NsLTAuOS44ai1yZWFk bWUtd2FybmluZy5wYXRjaAogUGF0Y2g0ODogb3BlbnNzbC0wLjkuOGotYmFkLW1pbWUucGF0Y2gK LVBhdGNoNDk6IG9wZW5zc2wtMC45LjhrLWFsZ28tZG9jLnBhdGNoCi1QYXRjaDUwOiBvcGVuc3Ns LTEuMC4wLWJldGEzLWN1cmwucGF0Y2gKLVBhdGNoNTE6IG9wZW5zc2wtMS4wLjAtYmV0YTMtY29u c3QucGF0Y2gKLVBhdGNoNTI6IG9wZW5zc2wtMS4wLjAtYmV0YTMtZHNzMS5wYXRjaAorUGF0Y2g0 OTogb3BlbnNzbC0xLjAuMC1iZXRhNC1hbGdvLWRvYy5wYXRjaAorUGF0Y2g1MDogb3BlbnNzbC0x LjAuMC1iZXRhNC1kdGxzMS1hYmkucGF0Y2gKICMgQmFja3BvcnRlZCBmaXhlcyBpbmNsdWRpbmcg c2VjdXJpdHkgZml4ZXMKLVBhdGNoNjA6IG9wZW5zc2wtMS4wLjAtYmV0YTMtbmFtaW5nc3RyLnBh dGNoCi1QYXRjaDYxOiBvcGVuc3NsLTEuMC4wLWJldGEzLW5hbWluZ2Jsay5wYXRjaAotUGF0Y2g2 Mjogb3BlbnNzbC0xLjAuMC1iZXRhMy1jYW1lbGxpYS1yb3VuZHMucGF0Y2gKLVBhdGNoNjM6IG9w ZW5zc2wtMS4wLjAtYmV0YTMtZHRsczEtZml4LnBhdGNoCi1QYXRjaDY0OiBvcGVuc3NsLTEuMC4w LWJldGEzLXNzbC1zZXNzaW9uLnBhdGNoCi1QYXRjaDY1OiBvcGVuc3NsLTEuMC4wLWJldGEzLXNz bC1mcmVlLnBhdGNoCitQYXRjaDYwOiBvcGVuc3NsLTEuMC4wLWJldGE0LXJlbmVnLnBhdGNoCiAK IExpY2Vuc2U6IE9wZW5TU0wKIEdyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvTGlicmFyaWVzCkBA IC0xMjQsMTUgKzExNiwxMyBAQCBmcm9tIG90aGVyIGZvcm1hdHMgdG8gdGhlIGZvcm1hdHMgdXNl ZCBieSB0aGUgT3BlblNTTCB0b29sa2l0LgogJXtTT1VSQ0UxfSA+IC9kZXYvbnVsbAogJXBhdGNo MCAtcDEgLWIgLnJlZGhhdAogJXBhdGNoMSAtcDEgLWIgLmRlZmF1bHRzCi0jIEZpeCBsaW5rIGxp bmUgZm9yIGxpYnNzbCAoYnVnICMxMTExNTQpLgotJXBhdGNoMiAtcDEgLWIgLmtyYjUKICVwYXRj aDMgLXAxIC1iIC5zb3ZlcnNpb24KICVwYXRjaDQgLXAxIC1iIC5lbmdpbmVzZGlyCiAlcGF0Y2g1 IC1wMSAtYiAubm8tcnBhdGgKICVwYXRjaDYgLXAxIC1iIC51c2UtbG9jYWxob3N0CiAKLSVwYXRj aDIxIC1wMSAtYiAuYWxpYXNpbmctYnVnCiAlcGF0Y2gyMyAtcDEgLWIgLmRlZmF1bHQtcGF0aHMK KyVwYXRjaDI0IC1wMSAtYiAuYmludXRpbHMKIAogJXBhdGNoMzIgLXAxIC1iIC5pYTY0CiAlcGF0 Y2gzMyAtcDEgLWIgLmNhLWRpcgpAQCAtMTQ4LDE1ICsxMzgsOSBAQCBmcm9tIG90aGVyIGZvcm1h dHMgdG8gdGhlIGZvcm1hdHMgdXNlZCBieSB0aGUgT3BlblNTTCB0b29sa2l0LgogJXBhdGNoNDcg LXAxIC1iIC53YXJuaW5nCiAlcGF0Y2g0OCAtcDEgLWIgLmJhZC1taW1lCiAlcGF0Y2g0OSAtcDEg LWIgLmFsZ28tZG9jCi0lcGF0Y2g1MCAtcDEgLWIgLmN1cmwKLSVwYXRjaDUxIC1wMSAtYiAuY29u c3QKLSVwYXRjaDUyIC1wMSAtYiAuZHNzMQotJXBhdGNoNjAgLXAxIC1iIC5uYW1pbmdzdHIKLSVw YXRjaDYxIC1wMSAtYiAubmFtaW5nYmxrCi0lcGF0Y2g2MiAtcDEgLWIgLmNtbGwtcm91bmRzCi0l cGF0Y2g2MyAtcDEgLWIgLmR0bHMxLWZpeAotJXBhdGNoNjQgLXAxIC1iIC5zc2wtc2Vzc2lvbgot JXBhdGNoNjUgLXAxIC1iIC5zc2wtZnJlZQorJXBhdGNoNTAgLXAxIC1iIC5kdGxzMS1hYmkKKwor JXBhdGNoNjAgLXAxIC1iIC5yZW5lZwogCiAjIE1vZGlmeSB0aGUgdmFyaW91cyBwZXJsIHNjcmlw dHMgdG8gcmVmZXJlbmNlIHBlcmwgaW4gdGhlIHJpZ2h0IGxvY2F0aW9uLgogcGVybCB1dGlsL3Bl cmxwYXRoLnBsIGBkaXJuYW1lICV7X19wZXJsfWAKQEAgLTQwNSw2ICszODksMTIgQEAgcm0gLXJm ICRSUE1fQlVJTERfUk9PVC8le19saWJkaXJ9L2ZpcHNjYW5pc3Rlci4qCiAlcG9zdHVuIC1wIC9z YmluL2xkY29uZmlnCiAKICVjaGFuZ2Vsb2cKKyogVGh1IE5vdiAxMiAyMDA5IFRvbWFzIE1yYXog PHRtcmF6QHJlZGhhdC5jb20+IDEuMC4wLTAuMTEuYmV0YTQKKy0gdXBkYXRlIHRvIG5ldyB1cHN0 cmVhbSB2ZXJzaW9uLCBubyBzb25hbWUgYnVtcCBuZWVkZWQgCistIGZpeCBDVkUtMjAwOS0zNTU1 IC0gbm90ZSB0aGF0IHRoZSBmaXggaXMgYnlwYXNzZWQgaWYgU1NMX09QX0FMTCBpcyB1c2VkCisg IHNvIHRoZSBjb21wYXRpYmlsaXR5IHdpdGggdW5maXhlZCBjbGllbnRzIGlzIG5vdCBicm9rZW4u IFRoZQorICBwcm90b2NvbCBleHRlbnNpb24gaXMgYWxzbyBub3QgZmluYWwuCisKICogRnJpIE9j dCAxNiAyMDA5IFRvbWFzIE1yYXogPHRtcmF6QHJlZGhhdC5jb20+IDEuMC4wLTAuMTAuYmV0YTMK IC0gZml4IHVzZSBvZiBmcmVlZCBtZW1vcnkgaWYgU1NMX0NUWF9mcmVlKCkgaXMgY2FsbGVkIGJl Zm9yZQogICBTU0xfZnJlZSgpICgjNTIxMzQyKQoKZGlmZiAtLWdpdCBhL3NvdXJjZXMgYi9zb3Vy Y2VzCmluZGV4IGNjZDI1MzIuLjhhMmM2NDggMTAwNjQ0Ci0tLSBhL3NvdXJjZXMKKysrIGIvc291 cmNlcwpAQCAtMSArMSBAQAotOTkyNmRjZjc4ZTc5N2ExMmQ4ZTNmZmQ3YTAxODgyNGIgIG9wZW5z c2wtMS4wLjAtYmV0YTMtdXNhLnRhci5iejIKKzFmYzBlNDFjMjMwZDA2OThmODM0NDEzZGZiYTg2 NGFkICBvcGVuc3NsLTEuMC4wLWJldGE0LXVzYS50YXIuYnoyCg==