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: Tomas Mraz To: git-commits@fedoraproject.org Subject: [rpms/openssl] rebase_40beta: new upstream release from the 1.0.1 branch Date: Tue, 09 Jun 2026 12:42:34 GMT Message-ID: <178100895437.1.15800964254359202814.rpms-openssl-00c4986d538a@fedoraproject.org> List-ID: X-Git-Repo: rpms/openssl X-Git-Branch: rebase_40beta X-Git-Rev: 00c4986d538a0c61809fa14e7e06f1a1f89d511a ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvb3BlbnNzbAogICAgICAgICAgICBCcmFuY2ggOiByZWJhc2VfNDBiZXRhCiAg ICAgICAgICAgIENvbW1pdCA6IDAwYzQ5ODZkNTM4YTBjNjE4MDlmYTE0ZTdlMDZmMWExZjg5ZDUx MWEKICAgICAgICAgICAgQXV0aG9yIDogVG9tYXMgTXJheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5v cmc+CiAgICAgICAgICAgIERhdGUgICA6IDIwMTItMDItMjlUMjE6NTQ6MDgrMDE6MDAKICAgICAg ICAgICAgU3RhdHMgIDogKzIxMjkwLy0yMTM0NyBpbiAxMyBmaWxlKHMpCiAgICAgICAgICAgIFVS TCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3JnL3JwbXMvb3BlbnNzbC9jLzAwYzQ5 ODZkNTM4YTBjNjE4MDlmYTE0ZTdlMDZmMWExZjg5ZDUxMWE/YnJhbmNoPXJlYmFzZV80MGJldGEK CiAgICAgICAgICAgIExvZzoKICAgICAgICAgICAgbmV3IHVwc3RyZWFtIHJlbGVhc2UgZnJvbSB0 aGUgMS4wLjEgYnJhbmNoCgotIGVwb2NoIGJ1bXBlZCB0byAxIGR1ZSB0byByZXZlcnQgdG8gMS4w LjBnIG9uIEZlZG9yYSAxNwotIGZpeCBzMzkweCBidWlsZCAoIzc5ODQxMSkKLSB2ZXJzaW9uaW5n IGZvciB0aGUgU1NMZWF5IHN5bWJvbCAoIzc5NDk1MCkKLSBhZGQgLURQVVJJRlkgdG8gYnVpbGQg ZmxhZ3MgKCM3OTczMjMpCi0gZmlsdGVyIGVuZ2luZSBwcm92aWRlcwotIHNwbGl0IHRoZSBsaWJy YXJpZXMgdG8gYSBzZXBhcmF0ZSAtbGlicyBwYWNrYWdlCi0gYWRkIG1ha2UgdG8gcmVxdWlyZXMg b24gdGhlIGJhc2UgcGFja2FnZSAoIzc4MzQ0NikKCi0tLQpkaWZmIC0tZ2l0IGEvLmdpdGlnbm9y ZSBiLy5naXRpZ25vcmUKaW5kZXggZDU2NzRiNS4uZGUyN2E5NCAxMDA2NDQKLS0tIGEvLmdpdGln bm9yZQorKysgYi8uZ2l0aWdub3JlCkBAIC02LDMgKzYsNCBAQCBvcGVuc3NsLTEuMC4wYS11c2Eu dGFyLmJ6MgogL29wZW5zc2wtMS4wLjBmLXVzYS50YXIuYnoyCiAvb3BlbnNzbC0xLjAuMGctdXNh LnRhci54egogL29wZW5zc2wtMS4wLjEtYmV0YTItdXNhLnRhci54egorL29wZW5zc2wtMS4wLjEt YmV0YTMtdXNhLnRhci54egoKZGlmZiAtLWdpdCBhL2hvYmJsZS1vcGVuc3NsIGIvaG9iYmxlLW9w ZW5zc2wKaW5kZXggMjkxZDhhMy4uNGNhN2VhYiAxMDA3NTUKLS0tIGEvaG9iYmxlLW9wZW5zc2wK KysrIGIvaG9iYmxlLW9wZW5zc2wKQEAgLTExLDcgKzExLDcgQEAgc2V0IC1lCiAjIFNSUDogICA/ Pz8/Pz8/Pz8gPz8vPz8vMjA/PwogCiAjIFJlbW92ZSBhc3NlbWJsZXIgcG9ydGlvbnMgb2YgSURF QSwgTURDMiwgYW5kIFJDNS4KLShmaW5kIGNyeXB0by97cmM1fS9hc20gLXR5cGUgZiB8IHhhcmdz IC1yIHJtIC1mdikKKyhmaW5kIGNyeXB0by9yYzUvYXNtIC10eXBlIGYgfCB4YXJncyAtciBybSAt ZnYpCiAKICMgUkM1LCBFQywgU1JQLgogZm9yIGEgaW4gcmM1IGVjIGVjZGggZWNkc2Egc3JwOyBk bwoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMC45LjhqLWJhZC1taW1lLnBhdGNoIGIvb3BlbnNzbC0w LjkuOGotYmFkLW1pbWUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5OTA5 MTEuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0wLjkuOGotYmFkLW1pbWUucGF0Y2gKKysrIC9kZXYv bnVsbApAQCAtMSwxNCArMCwwIEBACi1kaWZmIC11cCBvcGVuc3NsLTAuOS44ai9jcnlwdG8vYXNu MS9hc25fbWltZS5jLmJhZC1taW1lIG9wZW5zc2wtMC45LjhqL2NyeXB0by9hc24xL2Fzbl9taW1l LmMKLS0tLSBvcGVuc3NsLTAuOS44ai9jcnlwdG8vYXNuMS9hc25fbWltZS5jLmJhZC1taW1lCTIw MDgtMDgtMDUgMTc6NTY6MTEuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0wLjkuOGovY3J5 cHRvL2FzbjEvYXNuX21pbWUuYwkyMDA5LTAxLTE0IDIyOjA4OjM0LjAwMDAwMDAwMCArMDEwMAot QEAgLTc5Miw2ICs3OTIsMTAgQEAgc3RhdGljIGludCBtaW1lX2hkcl9hZGRwYXJhbShNSU1FX0hF QURFUgotIHN0YXRpYyBpbnQgbWltZV9oZHJfY21wKGNvbnN0IE1JTUVfSEVBREVSICogY29uc3Qg KmEsCi0gCQkJY29uc3QgTUlNRV9IRUFERVIgKiBjb25zdCAqYikKLSB7Ci0rCWlmICgoKmEpLT5u YW1lID09IE5VTEwgfHwgKCpiKS0+bmFtZSA9PSBOVUxMKQotKwkJcmV0dXJuICgqYSktPm5hbWUg LSAoKmIpLT5uYW1lIDwgMCA/IC0xIDoKLSsJCQkoKmEpLT5uYW1lIC0gKCpiKS0+bmFtZSA+IDAg PyAxIDogMDsKLSsKLSAJcmV0dXJuKHN0cmNtcCgoKmEpLT5uYW1lLCAoKmIpLT5uYW1lKSk7Ci0g fQotIAoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjBhLWxvYWQtY2VydHMucGF0Y2ggYi9vcGVu c3NsLTEuMC4wYS1sb2FkLWNlcnRzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCA0YzAzYTQ0Li4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjBhLWxvYWQtY2VydHMucGF0Y2gK KysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wYS9h cHBzL2FwcHMuYy5sb2FkLWNlcnRzIG9wZW5zc2wtMS4wLjBhL2FwcHMvYXBwcy5jCi0tLS0gb3Bl bnNzbC0xLjAuMGEvYXBwcy9hcHBzLmMubG9hZC1jZXJ0cwkyMDEwLTA1LTI3IDE2OjA5OjEzLjAw MDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjBhL2FwcHMvYXBwcy5jCTIwMTEtMDQtMjgg MjE6MjQ6MDYuMDAwMDAwMDAwICswMjAwCi1AQCAtMTIwOCw3ICsxMjA4LDggQEAgU1RBQ0tfT0Yo WDUwOSkgKmxvYWRfY2VydHMoQklPICplcnIsIGNvbgotIAljb25zdCBjaGFyICpwYXNzLCBFTkdJ TkUgKmUsIGNvbnN0IGNoYXIgKmRlc2MpCi0gCXsKLSAJU1RBQ0tfT0YoWDUwOSkgKmNlcnRzOwot LQlsb2FkX2NlcnRzX2NybHMoZXJyLCBmaWxlLCBmb3JtYXQsIHBhc3MsIGUsIGRlc2MsICZjZXJ0 cywgTlVMTCk7Ci0rCWlmICghbG9hZF9jZXJ0c19jcmxzKGVyciwgZmlsZSwgZm9ybWF0LCBwYXNz LCBlLCBkZXNjLCAmY2VydHMsIE5VTEwpKQotKwkJcmV0dXJuIE5VTEw7Ci0gCXJldHVybiBjZXJ0 czsKLSAJfQkKLSAKLUBAIC0xMjE2LDcgKzEyMTcsOCBAQCBTVEFDS19PRihYNTA5X0NSTCkgKmxv YWRfY3JscyhCSU8gKmVyciwgCi0gCWNvbnN0IGNoYXIgKnBhc3MsIEVOR0lORSAqZSwgY29uc3Qg Y2hhciAqZGVzYykKLSAJewotIAlTVEFDS19PRihYNTA5X0NSTCkgKmNybHM7Ci0tCWxvYWRfY2Vy dHNfY3JscyhlcnIsIGZpbGUsIGZvcm1hdCwgcGFzcywgZSwgZGVzYywgTlVMTCwgJmNybHMpOwot KwlpZiAoIWxvYWRfY2VydHNfY3JscyhlcnIsIGZpbGUsIGZvcm1hdCwgcGFzcywgZSwgZGVzYywg TlVMTCwgJmNybHMpKQotKwkJcmV0dXJuIE5VTEw7Ci0gCXJldHVybiBjcmxzOwotIAl9CQotIAoK ZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjBlLXBrZ2NvbmZpZy1wcml2YXRlLnBhdGNoIGIvb3Bl bnNzbC0xLjAuMGUtcGtnY29uZmlnLXByaXZhdGUucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IGExZjg4NzguLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMGUtcGtnY29uZmln LXByaXZhdGUucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi1kaWZmIC11cCBv cGVuc3NsLTEuMC4wZS9NYWtlZmlsZS5vcmcucHJpdmF0ZSBvcGVuc3NsLTEuMC4wZS9NYWtlZmls ZS5vcmcKLS0tLSBvcGVuc3NsLTEuMC4wZS9NYWtlZmlsZS5vcmcucHJpdmF0ZQkyMDExLTExLTAz IDEwOjAxOjUzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjBlL01ha2VmaWxlLm9y ZwkyMDExLTExLTIyIDExOjUwOjI3LjAwMDAwMDAwMCArMDEwMAotQEAgLTMyNiw3ICszMjYsOCBA QCBsaWJjcnlwdG8ucGM6IE1ha2VmaWxlCi0gCSAgICBlY2hvICdEZXNjcmlwdGlvbjogT3BlblNT TCBjcnlwdG9ncmFwaHkgbGlicmFyeSc7IFwKLSAJICAgIGVjaG8gJ1ZlcnNpb246ICckKFZFUlNJ T04pOyBcCi0gCSAgICBlY2hvICdSZXF1aXJlczogJzsgXAotLQkgICAgZWNobyAnTGliczogLUwk JHtsaWJkaXJ9IC1sY3J5cHRvICQoRVhfTElCUyknOyBcCi0rCSAgICBlY2hvICdMaWJzOiAtTCQk e2xpYmRpcn0gLWxjcnlwdG8nOyBcCi0rCSAgICBlY2hvICdMaWJzLnByaXZhdGU6ICQoRVhfTElC UyknOyBcCi0gCSAgICBlY2hvICdDZmxhZ3M6IC1JJCR7aW5jbHVkZWRpcn0gJChLUkI1X0lOQ0xV REVTKScgKSA+IGxpYmNyeXB0by5wYwotIAotIGxpYnNzbC5wYzogTWFrZWZpbGUKLUBAIC0zMzks NyArMzQwLDggQEAgbGlic3NsLnBjOiBNYWtlZmlsZQotIAkgICAgZWNobyAnRGVzY3JpcHRpb246 IFNlY3VyZSBTb2NrZXRzIExheWVyIGFuZCBjcnlwdG9ncmFwaHkgbGlicmFyaWVzJzsgXAotIAkg ICAgZWNobyAnVmVyc2lvbjogJyQoVkVSU0lPTik7IFwKLSAJICAgIGVjaG8gJ1JlcXVpcmVzOiAn OyBcCi0tCSAgICBlY2hvICdMaWJzOiAtTCQke2xpYmRpcn0gLWxzc2wgLWxjcnlwdG8gJChFWF9M SUJTKSc7IFwKLSsJICAgIGVjaG8gJ0xpYnM6IC1MJCR7bGliZGlyfSAtbHNzbCAtbGNyeXB0byc7 IFwKLSsJICAgIGVjaG8gJ0xpYnMucHJpdmF0ZTogJChFWF9MSUJTKSc7IFwKLSAJICAgIGVjaG8g J0NmbGFnczogLUkkJHtpbmNsdWRlZGlyfSAkKEtSQjVfSU5DTFVERVMpJyApID4gbGlic3NsLnBj Ci0gCi0gb3BlbnNzbC5wYzogTWFrZWZpbGUKLUBAIC0zNTIsNyArMzU0LDggQEAgb3BlbnNzbC5w YzogTWFrZWZpbGUKLSAJICAgIGVjaG8gJ0Rlc2NyaXB0aW9uOiBTZWN1cmUgU29ja2V0cyBMYXll ciBhbmQgY3J5cHRvZ3JhcGh5IGxpYnJhcmllcyBhbmQgdG9vbHMnOyBcCi0gCSAgICBlY2hvICdW ZXJzaW9uOiAnJChWRVJTSU9OKTsgXAotIAkgICAgZWNobyAnUmVxdWlyZXM6ICc7IFwKLS0JICAg IGVjaG8gJ0xpYnM6IC1MJCR7bGliZGlyfSAtbHNzbCAtbGNyeXB0byAkKEVYX0xJQlMpJzsgXAot KwkgICAgZWNobyAnTGliczogLUwkJHtsaWJkaXJ9IC1sc3NsIC1sY3J5cHRvJzsgXAotKwkgICAg ZWNobyAnTGlicy5wcml2YXRlOiAkKEVYX0xJQlMpJzsgXAotIAkgICAgZWNobyAnQ2ZsYWdzOiAt SSQke2luY2x1ZGVkaXJ9ICQoS1JCNV9JTkNMVURFUyknICkgPiBvcGVuc3NsLnBjCi0gCi0gTWFr ZWZpbGU6IE1ha2VmaWxlLm9yZyBDb25maWd1cmUgY29uZmlnCgpkaWZmIC0tZ2l0IGEvb3BlbnNz bC0xLjAuMS1iZXRhMi1maXBzLnBhdGNoIGIvb3BlbnNzbC0xLjAuMS1iZXRhMi1maXBzLnBhdGNo CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTMxZmJlLi4wMDAwMDAwCi0tLSBhL29w ZW5zc2wtMS4wLjEtYmV0YTItZmlwcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIxMTQzICsw LDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvYXBwcy9wa2NzMTIuYy5maXBzIG9w ZW5zc2wtMS4wLjEtYmV0YTIvYXBwcy9wa2NzMTIuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIv YXBwcy9wa2NzMTIuYy5maXBzCTIwMTEtMDMtMTMgMTk6MjA6MjMuMDAwMDAwMDAwICswMTAwCi0r Kysgb3BlbnNzbC0xLjAuMS1iZXRhMi9hcHBzL3BrY3MxMi5jCTIwMTItMDItMDcgMTE6MDc6MDIu NTI0MzkzNTY2ICswMTAwCi1AQCAtNjcsNiArNjcsOSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3BlbS5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3BrY3Mx Mi5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0r I2VuZGlmCi0gCi0gI2RlZmluZSBQUk9HIHBrY3MxMl9tYWluCi0gCi1AQCAtMTMwLDYgKzEzMywx MSBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0gCi0gICAgIGFwcHNfc3RhcnR1 cCgpOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYgKEZJUFNfbW9kZSgpKQotKwlj ZXJ0X3BiZSA9IGtleV9wYmU7IC8qIGNhbm5vdCB1c2UgUkMyIGluIHRoZSBGSVBTIG1vZGUgKi8K LSsjZW5kaWYKLSsKLSAgICAgZW5jID0gRVZQX2Rlc19lZGUzX2NiYygpOwotICAgICBpZiAoYmlv X2VyciA9PSBOVUxMICkgYmlvX2VyciA9IEJJT19uZXdfZnAgKHN0ZGVyciwgQklPX05PQ0xPU0Up OwotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9hcHBzL3NwZWVkLmMuZmlwcyBvcGVu c3NsLTEuMC4xLWJldGEyL2FwcHMvc3BlZWQuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvYXBw cy9zcGVlZC5jLmZpcHMJMjAxMi0wMS0xMSAyMjo0OToxNi4wMDAwMDAwMDAgKzAxMDAKLSsrKyBv cGVuc3NsLTEuMC4xLWJldGEyL2FwcHMvc3BlZWQuYwkyMDEyLTAyLTA3IDExOjA3OjAyLjUyNTM5 MzU3NCArMDEwMAotQEAgLTE5NSw3ICsxOTUsNiBAQAotICNpZmRlZiBPUEVOU1NMX0RPSU5HX01B S0VERVBFTkQKLSAjdW5kZWYgQUVTX3NldF9lbmNyeXB0X2tleQotICN1bmRlZiBBRVNfc2V0X2Rl Y3J5cHRfa2V5Ci0tI3VuZGVmIERFU19zZXRfa2V5X3VuY2hlY2tlZAotICNlbmRpZgotICNkZWZp bmUgQkZfc2V0X2tleQlwcml2YXRlX0JGX3NldF9rZXkKLSAjZGVmaW5lIENBU1Rfc2V0X2tleQlw cml2YXRlX0NBU1Rfc2V0X2tleQotQEAgLTIwMyw3ICsyMDIsNiBAQAotICNkZWZpbmUgU0VFRF9z ZXRfa2V5CXByaXZhdGVfU0VFRF9zZXRfa2V5Ci0gI2RlZmluZSBSQzJfc2V0X2tleQlwcml2YXRl X1JDMl9zZXRfa2V5Ci0gI2RlZmluZSBSQzRfc2V0X2tleQlwcml2YXRlX1JDNF9zZXRfa2V5Ci0t I2RlZmluZSBERVNfc2V0X2tleV91bmNoZWNrZWQJcHJpdmF0ZV9ERVNfc2V0X2tleV91bmNoZWNr ZWQKLSAjZGVmaW5lIEFFU19zZXRfZW5jcnlwdF9rZXkJcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRf a2V5Ci0gI2RlZmluZSBBRVNfc2V0X2RlY3J5cHRfa2V5CXByaXZhdGVfQUVTX3NldF9kZWNyeXB0 X2tleQotICNkZWZpbmUgQ2FtZWxsaWFfc2V0X2tleQlwcml2YXRlX0NhbWVsbGlhX3NldF9rZXkK LUBAIC05NDEsNyArOTM5LDEyIEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAj aWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0gCQkJaWYgKHN0cmNtcCgqYXJndiwicnNhIikgPT0gMCkK LSAJCQl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJCQlpZiAoIUZJUFNfbW9kZSgpKQotKyNl bmRpZgotKwkJCQl7Ci0gCQkJcnNhX2RvaXRbUl9SU0FfNTEyXT0xOwotKwkJCQl9Ci0gCQkJcnNh X2RvaXRbUl9SU0FfMTAyNF09MTsKLSAJCQlyc2FfZG9pdFtSX1JTQV8yMDQ4XT0xOwotIAkJCXJz YV9kb2l0W1JfUlNBXzQwOTZdPTE7Ci1AQCAtOTUxLDcgKzk1NCwxMiBAQCBpbnQgTUFJTihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCi0gI2lmbmRlZiBPUEVOU1NMX05PX0RTQQotIAkJCWlmIChzdHJj bXAoKmFyZ3YsImRzYSIpID09IDApCi0gCQkJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCQkJ aWYgKCFGSVBTX21vZGUoKSkKLSsjZW5kaWYKLSsJCQkJewotIAkJCWRzYV9kb2l0W1JfRFNBXzUx Ml09MTsKLSsJCQkJfQotIAkJCWRzYV9kb2l0W1JfRFNBXzEwMjRdPTE7Ci0gCQkJZHNhX2RvaXRb Ul9EU0FfMjA0OF09MTsKLSAJCQl9Ci1AQCAtMTIyNiwzMCArMTIzNCw1NCBAQCBpbnQgTUFJTihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCi0gCUFFU19zZXRfZW5jcnlwdF9rZXkoa2V5MzIsMjU2LCZh ZXNfa3MzKTsKLSAjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fQ0FNRUxMSUEKLSsJaWYgKGRv aXRbRF9DQkNfMTI4X0NNTF0gfHwgZG9pdFtEX0NCQ18xOTJfQ01MXSB8fCBkb2l0W0RfQ0JDXzI1 Nl9DTUxdKQotKwkgICAgewotIAlDYW1lbGxpYV9zZXRfa2V5KGtleTE2LDEyOCwmY2FtZWxsaWFf a3MxKTsKLSAJQ2FtZWxsaWFfc2V0X2tleShja2V5MjQsMTkyLCZjYW1lbGxpYV9rczIpOwotIAlD YW1lbGxpYV9zZXRfa2V5KGNrZXkzMiwyNTYsJmNhbWVsbGlhX2tzMyk7Ci0rCSAgICB9Ci0gI2Vu ZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0lERUEKLSsJaWYgKGRvaXRbRF9DQkNfSURFQV0pCi0r CSAgICB7Ci0gCWlkZWFfc2V0X2VuY3J5cHRfa2V5KGtleTE2LCZpZGVhX2tzKTsKLSsJICAgIH0K LSAjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fU0VFRAotKwlpZiAoZG9pdFtEX0NCQ19TRUVE XSkKLSsJICAgIHsKLSAJU0VFRF9zZXRfa2V5KGtleTE2LCZzZWVkX2tzKTsKLSsJICAgIH0KLSAj ZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fUkM0Ci0rCWlmIChkb2l0W0RfUkM0XSkKLSsJICAg IHsKLSAJUkM0X3NldF9rZXkoJnJjNF9rcywxNixrZXkxNik7Ci0rCSAgICB9Ci0gI2VuZGlmCi0g I2lmbmRlZiBPUEVOU1NMX05PX1JDMgotKwlpZiAoZG9pdFtEX0NCQ19SQzJdKQotKwkgICAgewot IAlSQzJfc2V0X2tleSgmcmMyX2tzLDE2LGtleTE2LDEyOCk7Ci0rCSAgICB9Ci0gI2VuZGlmCi0g I2lmbmRlZiBPUEVOU1NMX05PX1JDNQotKwlpZiAoZG9pdFtEX0NCQ19SQzVdKQotKwkgICAgewot IAlSQzVfMzJfc2V0X2tleSgmcmM1X2tzLDE2LGtleTE2LDEyKTsKLSsJICAgIH0KLSAjZW5kaWYK LSAjaWZuZGVmIE9QRU5TU0xfTk9fQkYKLSsJaWYgKGRvaXRbRF9DQkNfQkZdKQotKwkgICAgewot IAlCRl9zZXRfa2V5KCZiZl9rcywxNixrZXkxNik7Ci0rCSAgICB9Ci0gI2VuZGlmCi0gI2lmbmRl ZiBPUEVOU1NMX05PX0NBU1QKLSsJaWYgKGRvaXRbRF9DQkNfQ0FTVF0pCi0rCSAgICB7Ci0gCUNB U1Rfc2V0X2tleSgmY2FzdF9rcywxNixrZXkxNik7Ci0rCSAgICB9Ci0gI2VuZGlmCi0gI2lmbmRl ZiBPUEVOU1NMX05PX1JTQQotIAltZW1zZXQocnNhX2MsMCxzaXplb2YocnNhX2MpKTsKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvQ29uZmlndXJlLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRh Mi9Db25maWd1cmUKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL0NvbmZpZ3VyZS5maXBzCTIwMTIt MDItMDcgMTE6MDc6MDIuNDc2MzkzMTY1ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9D b25maWd1cmUJMjAxMi0wMi0wNyAxMTowNzowMi41MjYzOTM1ODIgKzAxMDAKLUBAIC05OTMsMTEg Kzk5Myw2IEBAIGlmIChkZWZpbmVkKCRkaXNhYmxlZHsibWQ1In0pIHx8IGRlZmluZWQKLSAJJGRp c2FibGVkeyJzc2wyIn0gPSAiZm9yY2VkIjsKLSAJfQotIAotLWlmICgkZmlwcyAmJiAkZmlwc2xp YmRpciBlcSAiIikKLS0JewotLQkkZmlwc2xpYmRpciA9ICRmaXBzZGlyIC4gIi9saWIvIjsKLS0J fQotLQotICMgUlNBWCBFTkdJTkUgc2V0cyBkZWZhdWx0IG5vbi1GSVBTIFJTQSBtZXRob2QuCi0g aWYgKCRmaXBzKQotIAl7Ci1AQCAtMTQ3OCw3ICsxNDczLDYgQEAgJGNmbGFncy49IiAtRE9QRU5T U0xfQk5fQVNNX0dGMm0iIGlmICgkYgotIGlmICgkZmlwcykKLSAJewotIAkkb3BlbnNzbF9vdGhl cl9kZWZpbmVzLj0iI2RlZmluZSBPUEVOU1NMX0ZJUFNcbiI7Ci0tCSRjZmxhZ3MgLj0gIiAtSVwk KEZJUFNESVIpL2luY2x1ZGUiOwotIAl9Ci0gCi0gJGNwdWlkX29iaj0ibWVtX2Nsci5vIgl1bmxl c3MgKCRjcHVpZF9vYmogPX4gL1wubyQvKTsKLUBAIC0xNjY1LDkgKzE2NTksMTIgQEAgd2hpbGUg KDxJTj4pCi0gCi0gCXMvXkZJUFNESVI9LiovRklQU0RJUj0kZmlwc2Rpci87Ci0gCXMvXkZJUFNM SUJESVI9LiovRklQU0xJQkRJUj0kZmlwc2xpYmRpci87Ci0tCXMvXkZJUFNDQU5MSUI9LiovRklQ U0NBTkxJQj1saWJjcnlwdG8vIGlmICRmaXBzOwotIAlzL15CQVNFQUREUj0uKi9CQVNFQUREUj0k YmFzZWFkZHIvOwotIAotKwlpZiAoJGZpcHMpCi0rCQl7Ci0rCQlzL15GSVBTPS4qL0ZJUFM9eWVz LzsKLSsJCX0KLSAJcy9eU0hMSUJfVEFSR0VUPS4qL1NITElCX1RBUkdFVD0kc2hhcmVkX3Rhcmdl dC87Ci0gCXMvXlNITElCX01BUks9LiovU0hMSUJfTUFSSz0kc2hhcmVkX21hcmsvOwotIAlzL15T SEFSRURfTElCUz0uKi9TSEFSRURfTElCUz1cJChTSEFSRURfQ1JZUFRPKSBcJChTSEFSRURfU1NM KS8gaWYgKCEkbm9fc2hhcmVkKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRv L2Flcy9hZXNfbWlzYy5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vYWVzL2Flc19t aXNjLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9hZXMvYWVzX21pc2MuYy5maXBz CTIwMTEtMDYtMDUgMTk6MzY6MzMuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMS1i ZXRhMi9jcnlwdG8vYWVzL2Flc19taXNjLmMJMjAxMi0wMi0wNyAxMTowNzowMi41MjYzOTM1ODIg KzAxMDAKLUBAIC02OSwxNyArNjksMTEgQEAgY29uc3QgY2hhciAqQUVTX29wdGlvbnModm9pZCkg ewotIGludCBBRVNfc2V0X2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXks IGNvbnN0IGludCBiaXRzLAotIAkJCUFFU19LRVkgKmtleSkKLSAJewotLSNpZmRlZiBPUEVOU1NM X0ZJUFMKLS0JZmlwc19jaXBoZXJfYWJvcnQoQUVTKTsKLS0jZW5kaWYKLSAJcmV0dXJuIHByaXZh dGVfQUVTX3NldF9lbmNyeXB0X2tleSh1c2VyS2V5LCBiaXRzLCBrZXkpOwotIAl9Ci0gCi0gaW50 IEFFU19zZXRfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3Qg aW50IGJpdHMsCi0gCQkJQUVTX0tFWSAqa2V5KQotIAl7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwot LQlmaXBzX2NpcGhlcl9hYm9ydChBRVMpOwotLSNlbmRpZgotIAlyZXR1cm4gcHJpdmF0ZV9BRVNf c2V0X2RlY3J5cHRfa2V5KHVzZXJLZXksIGJpdHMsIGtleSk7Ci0gCX0KLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjEtYmV0YTIvY3J5cHRvL2NtYWMvY21hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRh Mi9jcnlwdG8vY21hYy9jbWFjLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9jbWFj L2NtYWMuYy5maXBzCTIwMTEtMDYtMTIgMTc6MDc6MjUuMDAwMDAwMDAwICswMjAwCi0rKysgb3Bl bnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vY21hYy9jbWFjLmMJMjAxMi0wMi0wNyAxMTowNzowMi41 MjczOTM1OTAgKzAxMDAKLUBAIC0xMDcsMTMgKzEwNyw2IEBAIENNQUNfQ1RYICpDTUFDX0NUWF9u ZXcodm9pZCkKLSAKLSB2b2lkIENNQUNfQ1RYX2NsZWFudXAoQ01BQ19DVFggKmN0eCkKLSAJewot LSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JaWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmNjdHguZW5n aW5lKQotLQkJewotLQkJRklQU19jbWFjX2N0eF9jbGVhbnVwKGN0eCk7Ci0tCQlyZXR1cm47Ci0t CQl9Ci0tI2VuZGlmCi0gCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eC0+Y2N0eCk7Ci0gCU9Q RU5TU0xfY2xlYW5zZShjdHgtPnRibCwgRVZQX01BWF9CTE9DS19MRU5HVEgpOwotIAlPUEVOU1NM X2NsZWFuc2UoY3R4LT5rMSwgRVZQX01BWF9CTE9DS19MRU5HVEgpOwotQEAgLTE2NCwxMSArMTU3 LDYgQEAgaW50IENNQUNfSW5pdChDTUFDX0NUWCAqY3R4LCBjb25zdCB2b2lkCi0gCQkJRVZQZXJy KEVWUF9GX0NNQUNfSU5JVCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpOwotIAkJCXJldHVybiAw OwotIAkJCX0KLS0JCS8qIE90aGVyIGFsZ29yaXRobSBibG9ja2luZyB3aWxsIGJlIGRvbmUgaW4g RklQU19jbWFjX2luaXQsCi0tCQkgKiB2aWEgRklQU19jaXBoZXJpbml0KCkuCi0tCQkgKi8KLS0J CWlmICghaW1wbCAmJiAhY3R4LT5jY3R4LmVuZ2luZSkKLS0JCQlyZXR1cm4gRklQU19jbWFjX2lu aXQoY3R4LCBrZXksIGtleWxlbiwgY2lwaGVyLCBOVUxMKTsKLSAJCX0KLSAjZW5kaWYKLSAJLyog QWxsIHplcm9zIG1lYW5zIHJlc3RhcnQgKi8KLUBAIC0yMTQsMTAgKzIwMiw2IEBAIGludCBDTUFD X1VwZGF0ZShDTUFDX0NUWCAqY3R4LCBjb25zdCB2b2kKLSAJewotIAljb25zdCB1bnNpZ25lZCBj aGFyICpkYXRhID0gaW47Ci0gCXNpemVfdCBibDsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWlm IChGSVBTX21vZGUoKSAmJiAhY3R4LT5jY3R4LmVuZ2luZSkKLS0JCXJldHVybiBGSVBTX2NtYWNf dXBkYXRlKGN0eCwgaW4sIGRsZW4pOwotLSNlbmRpZgotIAlpZiAoY3R4LT5ubGFzdF9ibG9jayA9 PSAtMSkKLSAJCXJldHVybiAwOwotIAlpZiAoZGxlbiA9PSAwKQotQEAgLTI1OSwxMCArMjQzLDYg QEAgaW50IENNQUNfVXBkYXRlKENNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaQotIGludCBDTUFDX0Zp bmFsKENNQUNfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90ICpwb3V0bGVuKQot IAl7Ci0gCWludCBpLCBibCwgbGI7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQlpZiAoRklQU19t b2RlKCkgJiYgIWN0eC0+Y2N0eC5lbmdpbmUpCi0tCQlyZXR1cm4gRklQU19jbWFjX2ZpbmFsKGN0 eCwgb3V0LCBwb3V0bGVuKTsKLS0jZW5kaWYKLSAJaWYgKGN0eC0+bmxhc3RfYmxvY2sgPT0gLTEp Ci0gCQlyZXR1cm4gMDsKLSAJYmwgPSBFVlBfQ0lQSEVSX0NUWF9ibG9ja19zaXplKCZjdHgtPmNj dHgpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vY3J5cHRvLmguZmlwcyBv cGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9jcnlwdG8uaAotLS0tIG9wZW5zc2wtMS4wLjEtYmV0 YTIvY3J5cHRvL2NyeXB0by5oLmZpcHMJMjAxMi0wMi0wNyAxMTowNzowMi4yNTgzOTEzNTAgKzAx MDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9jcnlwdG8uaAkyMDEyLTAyLTA3IDEx OjA3OjAyLjUyNzM5MzU5MCArMDEwMAotQEAgLTU1MywyNCArNTUzLDI5IEBAIGludCBGSVBTX21v ZGVfc2V0KGludCByKTsKLSB2b2lkIE9QRU5TU0xfaW5pdCh2b2lkKTsKLSAKLSAjZGVmaW5lIGZp cHNfbWRfaW5pdChhbGcpIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBhbGcpCi0rI2RlZmluZSBub25m aXBzX21kX2luaXQoYWxnKSBub25maXBzX21kX2luaXRfY3R4KGFsZywgYWxnKQotKyNkZWZpbmUg Zmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBcCi0rCWludCBhbGcjI19Jbml0KGN4IyNfQ1RYICpj KQotIAotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0jZGVmaW5lIGZpcHNfbWRfaW5pdF9jdHgoYWxn LCBjeCkgXAotKyNkZWZpbmUgbm9uZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBcCi0gCWludCBh bGcjI19Jbml0KGN4IyNfQ1RYICpjKSBcCi0gCXsgXAotIAlpZiAoRklQU19tb2RlKCkpIE9wZW5T U0xEaWUoX19GSUxFX18sIF9fTElORV9fLCBcCi0tCQkiTG93IGxldmVsIEFQSSBjYWxsIHRvIGRp Z2VzdCAiICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQUyBtb2RlISIpOyBcCi0rCQkiRGlnZXN0ICIg I2FsZyAiIGZvcmJpZGRlbiBpbiBGSVBTIG1vZGUhIik7IFwKLSAJcmV0dXJuIHByaXZhdGVfIyNh bGcjI19Jbml0KGMpOyBcCi0gCX0gXAotIAlpbnQgcHJpdmF0ZV8jI2FsZyMjX0luaXQoY3gjI19D VFggKmMpCi0gCi0gI2RlZmluZSBmaXBzX2NpcGhlcl9hYm9ydChhbGcpIFwKLSAJaWYgKEZJUFNf bW9kZSgpKSBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAotLQkJIkxvdyBsZXZlbCBB UEkgY2FsbCB0byBjaXBoZXIgIiAjYWxnICIgZm9yYmlkZGVuIGluIEZJUFMgbW9kZSEiKQotKwkJ IkNpcGhlciAiICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQUyBtb2RlISIpCi0rCi0rLyogZGllIGlm IEZJUFMgc2VsZnRlc3QgZmFpbGVkICovCi0rdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKHZvaWQp OwotIAotICNlbHNlCi0tI2RlZmluZSBmaXBzX21kX2luaXRfY3R4KGFsZywgY3gpIFwKLS0JaW50 IGFsZyMjX0luaXQoY3gjI19DVFggKmMpCi0rI2RlZmluZSBub25maXBzX21kX2luaXRfY3R4KGFs ZywgY3gpIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkKLSAjZGVmaW5lIGZpcHNfY2lwaGVyX2Fi b3J0KGFsZykgd2hpbGUoMCkKLSAjZW5kaWYKLSAKLUBAIC01ODAsNiArNTg1LDkgQEAgdm9pZCBP UEVOU1NMX2luaXQodm9pZCk7Ci0gICovCi0gdm9pZCBFUlJfbG9hZF9DUllQVE9fc3RyaW5ncyh2 b2lkKTsKLSAKLSsjZGVmaW5lIE9QRU5TU0xfSEFWRV9JTklUCTEKLSt2b2lkIE9QRU5TU0xfaW5p dF9saWJyYXJ5KHZvaWQpOwotKwotIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgQ1JZUFRPIGZ1bmN0 aW9ucy4gKi8KLSAKLSAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjEtYmV0YTIvY3J5cHRvL2Rlcy9kZXMuaC5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRv L2Rlcy9kZXMuaAotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2Rlcy9kZXMuaC5maXBz CTIwMTItMDItMDcgMTE6MDc6MDIuMzI3MzkxOTI1ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1i ZXRhMi9jcnlwdG8vZGVzL2Rlcy5oCTIwMTItMDItMDcgMTE6MDc6MDIuNTI4MzkzNTk4ICswMTAw Ci1AQCAtMjI0LDkgKzIyNCw2IEBAIGludCBERVNfc2V0X2tleShjb25zdF9ERVNfY2Jsb2NrICpr ZXksREUKLSBpbnQgREVTX2tleV9zY2hlZChjb25zdF9ERVNfY2Jsb2NrICprZXksREVTX2tleV9z Y2hlZHVsZSAqc2NoZWR1bGUpOwotIGludCBERVNfc2V0X2tleV9jaGVja2VkKGNvbnN0X0RFU19j YmxvY2sgKmtleSxERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7Ci0gdm9pZCBERVNfc2V0X2tl eV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LERFU19rZXlfc2NoZWR1bGUgKnNjaGVk dWxlKTsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tdm9pZCBwcml2YXRlX0RFU19zZXRfa2V5X3Vu Y2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUp OwotLSNlbmRpZgotIHZvaWQgREVTX3N0cmluZ190b19rZXkoY29uc3QgY2hhciAqc3RyLERFU19j YmxvY2sgKmtleSk7Ci0gdm9pZCBERVNfc3RyaW5nX3RvXzJrZXlzKGNvbnN0IGNoYXIgKnN0cixE RVNfY2Jsb2NrICprZXkxLERFU19jYmxvY2sgKmtleTIpOwotIHZvaWQgREVTX2NmYjY0X2VuY3J5 cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sdW5zaWduZWQgY2hhciAqb3V0LGxvbmcgbGVuZ3Ro LAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZGVzL3NldF9rZXkuYy5maXBz IG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2Rlcy9zZXRfa2V5LmMKLS0tLSBvcGVuc3NsLTEu MC4xLWJldGEyL2NyeXB0by9kZXMvc2V0X2tleS5jLmZpcHMJMjAxMS0wNi0wMSAxODo1NDowNC4w MDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9kZXMvc2V0X2tl eS5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTI4MzkzNTk4ICswMTAwCi1AQCAtMzM3LDEzICszMzcs NiBAQCBpbnQgREVTX3NldF9rZXlfY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrCi0gCX0KLSAKLSB2 b2lkIERFU19zZXRfa2V5X3VuY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksIERFU19rZXlf c2NoZWR1bGUgKnNjaGVkdWxlKQotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JewotLQlmaXBzX2Np cGhlcl9hYm9ydChERVMpOwotLQlwcml2YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tlZChrZXksIHNj aGVkdWxlKTsKLS0JfQotLXZvaWQgcHJpdmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3Rf REVTX2NibG9jayAqa2V5LCBERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSkKLS0jZW5kaWYKLSAJ ewotIAlzdGF0aWMgY29uc3QgaW50IHNoaWZ0czJbMTZdPXswLDAsMSwxLDEsMSwxLDEsMCwxLDEs MSwxLDEsMSwwfTsKLSAJcmVnaXN0ZXIgREVTX0xPTkcgYyxkLHQscyx0MjsKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMS1i ZXRhMi9jcnlwdG8vZGgvZGhfZ2VuLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9k aC9kaF9nZW4uYy5maXBzCTIwMTEtMDYtMDkgMTc6MjE6NDYuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZGgvZGhfZ2VuLmMJMjAxMi0wMi0wNyAxMTowNzow Mi41MjgzOTM1OTggKzAxMDAKLUBAIC04NCwxMSArODQsNiBAQCBpbnQgREhfZ2VuZXJhdGVfcGFy YW1ldGVyc19leChESCAqcmV0LCBpCi0gI2VuZGlmCi0gCWlmKHJldC0+bWV0aC0+Z2VuZXJhdGVf cGFyYW1zKQotIAkJcmV0dXJuIHJldC0+bWV0aC0+Z2VuZXJhdGVfcGFyYW1zKHJldCwgcHJpbWVf bGVuLCBnZW5lcmF0b3IsIGNiKTsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWlmIChGSVBTX21v ZGUoKSkKLS0JCXJldHVybiBGSVBTX2RoX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgocmV0LCBwcmlt ZV9sZW4sCi0tCQkJCQkJCWdlbmVyYXRvciwgY2IpOwotLSNlbmRpZgotIAlyZXR1cm4gZGhfYnVp bHRpbl9nZW5wYXJhbXMocmV0LCBwcmltZV9sZW4sIGdlbmVyYXRvciwgY2IpOwotIAl9Ci0gCi1A QCAtMTIzLDYgKzExOCwyMCBAQCBzdGF0aWMgaW50IGRoX2J1aWx0aW5fZ2VucGFyYW1zKERIICpy ZXQsCi0gCWludCBnLG9rPSAtMTsKLSAJQk5fQ1RYICpjdHg9TlVMTDsKLSAKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJy KEZJUFNfRl9ESF9CVUlMVElOX0dFTlBBUkFNUyxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQp OwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCi0rCWlmIChGSVBTX21vZGUoKSAmJiAocHJpbWVfbGVu IDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJREhlcnIoREhf Rl9ESF9CVUlMVElOX0dFTlBBUkFNUywgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJZ290 byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWN0eD1CTl9DVFhfbmV3KCk7Ci0gCWlmIChjdHgg PT0gTlVMTCkgZ290byBlcnI7Ci0gCUJOX0NUWF9zdGFydChjdHgpOwotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMS1iZXRhMi9jcnlwdG8vZGgvZGguaC5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5 cHRvL2RoL2RoLmgKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9kaC9kaC5oLmZpcHMJ MjAxMi0wMi0wNyAxMTowNzowMi4xOTYzOTA4MzYgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJl dGEyL2NyeXB0by9kaC9kaC5oCTIwMTItMDItMDcgMTE6MDc6MDIuNTI5MzkzNjA2ICswMTAwCi1A QCAtNzcsNiArNzcsOCBAQAotICMgZGVmaW5lIE9QRU5TU0xfREhfTUFYX01PRFVMVVNfQklUUwkx MDAwMAotICNlbmRpZgotIAotKyNkZWZpbmUgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJ VFMgMTAyNAotKwotICNkZWZpbmUgREhfRkxBR19DQUNIRV9NT05UX1AgICAgIDB4MDEKLSAjZGVm aW5lIERIX0ZMQUdfTk9fRVhQX0NPTlNUVElNRSAweDAyIC8qIG5ldyB3aXRoIDAuOS43aDsgdGhl IGJ1aWx0LWluIERICi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBp bXBsZW1lbnRhdGlvbiBub3cgdXNlcyBjb25zdGFudCB0aW1lCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4xLWJldGEyL2NyeXB0by9kaC9kaF9rZXkuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5 cHRvL2RoL2RoX2tleS5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZGgvZGhfa2V5 LmMuZmlwcwkyMDExLTExLTE0IDE1OjE2OjA5LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wt MS4wLjEtYmV0YTIvY3J5cHRvL2RoL2RoX2tleS5jCTIwMTItMDItMDcgMTM6MzI6NDIuMTQ0NDQx NDIxICswMTAwCi1AQCAtNjEsNiArNjEsOSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0g I2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+Ci0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAK LSBzdGF0aWMgaW50IGdlbmVyYXRlX2tleShESCAqZGgpOwotIHN0YXRpYyBpbnQgY29tcHV0ZV9r ZXkodW5zaWduZWQgY2hhciAqa2V5LCBjb25zdCBCSUdOVU0gKnB1Yl9rZXksIERIICpkaCk7Ci1A QCAtMTA0LDcgKzEwNyw3IEBAIGNvbXB1dGVfa2V5LAotIGRoX2JuX21vZF9leHAsCi0gZGhfaW5p dCwKLSBkaF9maW5pc2gsCi0tMCwKLStESF9GTEFHX0ZJUFNfTUVUSE9ELAotIE5VTEwsCi0gTlVM TAotIH07Ci1AQCAtMTIzLDYgKzEyNiwxNCBAQCBzdGF0aWMgaW50IGdlbmVyYXRlX2tleShESCAq ZGgpCi0gCUJOX01PTlRfQ1RYICptb250PU5VTEw7Ci0gCUJJR05VTSAqcHViX2tleT1OVUxMLCpw cml2X2tleT1OVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgp ICYmIChCTl9udW1fYml0cyhkaC0+cCkgPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklU UykpCi0rCQl7Ci0rCQlESGVycihESF9GX0dFTkVSQVRFX0tFWSwgREhfUl9LRVlfU0laRV9UT09f U01BTEwpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWN0eCA9IEJOX0NUWF9u ZXcoKTsKLSAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKLSAKLUBAIC0yMTMsNiArMjI0LDEz IEBAIHN0YXRpYyBpbnQgY29tcHV0ZV9rZXkodW5zaWduZWQgY2hhciAqa2UKLSAJCURIZXJyKERI X0ZfQ09NUFVURV9LRVksREhfUl9NT0RVTFVTX1RPT19MQVJHRSk7Ci0gCQlnb3RvIGVycjsKLSAJ CX0KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2Jp dHMoZGgtPnApIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJ REhlcnIoREhfRl9DT01QVVRFX0tFWSwgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJZ290 byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0gCi0gCWN0eCA9IEJOX0NUWF9uZXcoKTsKLSAJaWYgKGN0 eCA9PSBOVUxMKSBnb3RvIGVycjsKLUBAIC0yODAsNiArMjk4LDkgQEAgc3RhdGljIGludCBkaF9i bl9tb2RfZXhwKGNvbnN0IERIICpkaCwgQgotIAotIHN0YXRpYyBpbnQgZGhfaW5pdChESCAqZGgp Ci0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsj ZW5kaWYKLSAJZGgtPmZsYWdzIHw9IERIX0ZMQUdfQ0FDSEVfTU9OVF9QOwotIAlyZXR1cm4oMSk7 Ci0gCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2RoL2RoX2xpYi5jLmZp cHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZGgvZGhfbGliLmMKLS0tLSBvcGVuc3NsLTEu MC4xLWJldGEyL2NyeXB0by9kaC9kaF9saWIuYy5maXBzCTIwMTEtMDYtMjAgMjE6NDE6MTEuMDAw MDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZGgvZGhfbGliLmMJ MjAxMi0wMi0wNyAxMTowNzowMi41MjkzOTM2MDYgKzAxMDAKLUBAIC04MSwxNCArODEsNyBAQCBj b25zdCBESF9NRVRIT0QgKkRIX2dldF9kZWZhdWx0X21ldGhvZCh2Ci0gCXsKLSAJaWYoIWRlZmF1 bHRfREhfbWV0aG9kKQotIAkJewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JCWlmIChGSVBTX21v ZGUoKSkKLS0JCQlyZXR1cm4gRklQU19kaF9vcGVuc3NsKCk7Ci0tCQllbHNlCi0tCQkJcmV0dXJu IERIX09wZW5TU0woKTsKLS0jZWxzZQotIAkJZGVmYXVsdF9ESF9tZXRob2QgPSBESF9PcGVuU1NM KCk7Ci0tI2VuZGlmCi0gCQl9Ci0gCXJldHVybiBkZWZhdWx0X0RIX21ldGhvZDsKLSAJfQotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZHNhL2RzYV9lcnIuYy5maXBzIG9wZW5z c2wtMS4wLjEtYmV0YTIvY3J5cHRvL2RzYS9kc2FfZXJyLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJl dGEyL2NyeXB0by9kc2EvZHNhX2Vyci5jLmZpcHMJMjAxMS0xMC0xMCAwMToxMzo0OS4wMDAwMDAw MDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9kc2EvZHNhX2Vyci5jCTIw MTItMDItMDcgMTE6MDc6MDIuNTMwMzkzNjE0ICswMTAwCi1AQCAtNzQsNiArNzQsOCBAQCBzdGF0 aWMgRVJSX1NUUklOR19EQVRBIERTQV9zdHJfZnVuY3RzW109Ci0ge0VSUl9GVU5DKERTQV9GX0RP X0RTQV9QUklOVCksCSJET19EU0FfUFJJTlQifSwKLSB7RVJSX0ZVTkMoRFNBX0ZfRFNBUEFSQU1T X1BSSU5UKSwJIkRTQXBhcmFtc19wcmludCJ9LAotIHtFUlJfRlVOQyhEU0FfRl9EU0FQQVJBTVNf UFJJTlRfRlApLAkiRFNBcGFyYW1zX3ByaW50X2ZwIn0sCi0re0VSUl9GVU5DKERTQV9GX0RTQV9C VUlMVElOX0tFWUdFTiksCSJkc2FfYnVpbHRpbl9rZXlnZW4ifSwKLSt7RVJSX0ZVTkMoRFNBX0Zf RFNBX0JVSUxUSU5fUEFSQU1HRU4pLAkiZHNhX2J1aWx0aW5fcGFyYW1nZW4ifSwKLSB7RVJSX0ZV TkMoRFNBX0ZfRFNBX0RPX1NJR04pLAkiRFNBX2RvX3NpZ24ifSwKLSB7RVJSX0ZVTkMoRFNBX0Zf RFNBX0RPX1ZFUklGWSksCSJEU0FfZG9fdmVyaWZ5In0sCi0ge0VSUl9GVU5DKERTQV9GX0RTQV9H RU5FUkFURV9LRVkpLAkiRFNBX2dlbmVyYXRlX2tleSJ9LAotQEAgLTEwNiw2ICsxMDgsOCBAQCBz dGF0aWMgRVJSX1NUUklOR19EQVRBIERTQV9zdHJfcmVhc29uc1tdCi0ge0VSUl9SRUFTT04oRFNB X1JfREFUQV9UT09fTEFSR0VfRk9SX0tFWV9TSVpFKSwiZGF0YSB0b28gbGFyZ2UgZm9yIGtleSBz aXplIn0sCi0ge0VSUl9SRUFTT04oRFNBX1JfREVDT0RFX0VSUk9SKSAgICAgICAgICAsImRlY29k ZSBlcnJvciJ9LAotIHtFUlJfUkVBU09OKERTQV9SX0lOVkFMSURfRElHRVNUX1RZUEUpICAgLCJp bnZhbGlkIGRpZ2VzdCB0eXBlIn0sCi0re0VSUl9SRUFTT04oRFNBX1JfS0VZX1NJWkVfSU5WQUxJ RCkgICAgICAsImtleSBzaXplIGludmFsaWQifSwKLSt7RVJSX1JFQVNPTihEU0FfUl9LRVlfU0la RV9UT09fU01BTEwpICAgICwia2V5IHNpemUgdG9vIHNtYWxsIn0sCi0ge0VSUl9SRUFTT04oRFNB X1JfTUlTU0lOR19QQVJBTUVURVJTKSAgICAsIm1pc3NpbmcgcGFyYW1ldGVycyJ9LAotIHtFUlJf UkVBU09OKERTQV9SX01PRFVMVVNfVE9PX0xBUkdFKSAgICAgLCJtb2R1bHVzIHRvbyBsYXJnZSJ9 LAotIHtFUlJfUkVBU09OKERTQV9SX05FRURfTkVXX1NFVFVQX1ZBTFVFUykgLCJuZWVkIG5ldyBz ZXR1cCB2YWx1ZXMifSwKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2RzYS9k c2FfZ2VuLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9kc2EvZHNhX2dlbi5jCi0t LS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZHNhL2RzYV9nZW4uYy5maXBzCTIwMTEtMDYt MDkgMTc6MjE6NDYuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlw dG8vZHNhL2RzYV9nZW4uYwkyMDEyLTAyLTA3IDExOjA3OjAyLjUzMDM5MzYxNCArMDEwMAotQEAg LTg1LDYgKzg1LDE0IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotICNlbmRpZgotIAot KyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rc3RhdGljIGludCBGSVBTX2RzYV9nZW5lcmF0ZV9wcShC Tl9DVFggKmN0eCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKLSsJCWNvbnN0IEVWUF9NRCAq ZXZwbWQsIHVuc2lnbmVkIGNoYXIgKnNlZWQsIGludCBzZWVkX2xlbiwKLSsJCUJJR05VTSAqKnBf cmV0LCBCSUdOVU0gKipxX3JldCwgaW50ICpjb3VudGVyX3JldCwgQk5fR0VOQ0IgKmNiKTsKLStz dGF0aWMgaW50IEZJUFNfZHNhX2dlbmVyYXRlX2coQk5fQ1RYICpjdHgsIEJJR05VTSAqcCwgQklH TlVNICpxLAotKwkJQklHTlVNICoqZ19yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5D QiAqY2IpOwotKyNlbmRpZgotKwotIGludCBEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChEU0Eg KnJldCwgaW50IGJpdHMsCi0gCQljb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBpbnQgc2Vl ZF9sZW4sCi0gCQlpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VO Q0IgKmNiKQotQEAgLTEwMCwxNCArMTA4LDYgQEAgaW50IERTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJz X2V4KERTQSAqcmV0LAotIAlpZihyZXQtPm1ldGgtPmRzYV9wYXJhbWdlbikKLSAJCXJldHVybiBy ZXQtPm1ldGgtPmRzYV9wYXJhbWdlbihyZXQsIGJpdHMsIHNlZWRfaW4sIHNlZWRfbGVuLAotIAkJ CQljb3VudGVyX3JldCwgaF9yZXQsIGNiKTsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWVsc2Ug aWYgKEZJUFNfbW9kZSgpKQotLQkJewotLQkJcmV0dXJuIEZJUFNfZHNhX2dlbmVyYXRlX3BhcmFt ZXRlcnNfZXgocmV0LCBiaXRzLCAKLS0JCQkJCQkJc2VlZF9pbiwgc2VlZF9sZW4sCi0tCQkJCQkJ CWNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOwotLQkJfQotLSNlbmRpZgotIAllbHNlCi0gCQl7Ci0g CQljb25zdCBFVlBfTUQgKmV2cG1kOwotQEAgLTEyNSwyNyArMTI1LDExOSBAQCBpbnQgRFNBX2dl bmVyYXRlX3BhcmFtZXRlcnNfZXgoRFNBICpyZXQsCi0gCQkJfQotIAotIAkJcmV0dXJuIGRzYV9i dWlsdGluX3BhcmFtZ2VuKHJldCwgYml0cywgcWJpdHMsIGV2cG1kLAotLQkJCXNlZWRfaW4sIHNl ZWRfbGVuLCBOVUxMLCBjb3VudGVyX3JldCwgaF9yZXQsIGNiKTsKLSsJCQkJc2VlZF9pbiwgc2Vl ZF9sZW4sIGNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOwotIAkJfQotIAl9Ci0gCi0rI2lmZGVmIE9Q RU5TU0xfRklQUwotK2ludCBGSVBTX2RzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXpl X3QgYml0cywgc2l6ZV90IHFiaXRzLAotKwljb25zdCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1bnNp Z25lZCBjaGFyICpzZWVkX2luLCBzaXplX3Qgc2VlZF9sZW4sCi0rCWludCAqY291bnRlcl9yZXQs IHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpCi0rCXsKLSsJcmV0dXJuIGRzYV9i dWlsdGluX3BhcmFtZ2VuKHJldCwgYml0cywgcWJpdHMsCi0rCQlldnBtZCwgc2VlZF9pbiwgc2Vl ZF9sZW4sCi0rCQljb3VudGVyX3JldCwgaF9yZXQsIGNiKTsKLSsJfQotKyNlbmRpZgotKwotIGlu dCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0 cywKLSAJY29uc3QgRVZQX01EICpldnBtZCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwg c2l6ZV90IHNlZWRfbGVuLAotLQl1bnNpZ25lZCBjaGFyICpzZWVkX291dCwKLSAJaW50ICpjb3Vu dGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYikKLSAJewotIAlpbnQg b2s9MDsKLSAJdW5zaWduZWQgY2hhciBzZWVkW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKLSsJQklH TlVNICpnPU5VTEwsKnE9TlVMTCwqcD1OVUxMOwotKwlzaXplX3QgcXNpemUgPSBxYml0cyA+PiAz OwotKwlCTl9DVFggKmN0eD1OVUxMOwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQ U19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0RTQV9C VUlMVElOX1BBUkFNR0VOLAotKwkJICAgIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0r CSAgICBnb3RvIGVycjsKLSsJICAgIH0KLSsKLSsJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSAmJgot KwkgICAgKGJpdHMgIT0gMTAyNCB8fCBxYml0cyAhPSAxNjApICYmCi0rCSAgICAoYml0cyAhPSAy MDQ4IHx8IHFiaXRzICE9IDIyNCkgJiYKLSsJICAgIChiaXRzICE9IDIwNDggfHwgcWJpdHMgIT0g MjU2KSAmJgotKwkgICAgKGJpdHMgIT0gMzA3MiB8fCBxYml0cyAhPSAyNTYpKQotKwkJewotKwkJ RFNBZXJyKERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOLCBEU0FfUl9LRVlfU0laRV9JTlZBTElE KTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKyNlbmRpZgotKwlpZiAoc2VlZF9sZW4gJiYgKHNlZWRf bGVuIDwgKHNpemVfdClxc2l6ZSkpCi0rCQlzZWVkX2luID0gTlVMTDsJCS8qIHNlZWQgYnVmZmVy IHRvbyBzbWFsbCAtLSBpZ25vcmUgKi8KLSsJaWYgKHNlZWRfbGVuID4gc2l6ZW9mKHNlZWQpKSAK LSsJCXNlZWRfbGVuID0gc2l6ZW9mKHNlZWQpOwkvKiBBcHAuIDIuMiBvZiBGSVBTIFBVQiAxODYg YWxsb3dzIGxhcmdlciBTRUVELAotKwkJCQkJCSAqIGJ1dCBvdXIgaW50ZXJuYWwgYnVmZmVycyBh cmUgcmVzdHJpY3RlZCB0byAyNTYgYml0cyovCi0rCWlmIChzZWVkX2luICE9IE5VTEwpCi0rCQlt ZW1jcHkoc2VlZCwgc2VlZF9pbiwgc2VlZF9sZW4pOwotKwllbHNlCi0rCQlzZWVkX2xlbiA9IDA7 Ci0rCi0rCWlmICgoY3R4PUJOX0NUWF9uZXcoKSkgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwot KwlCTl9DVFhfc3RhcnQoY3R4KTsKLSsKLSsJaWYgKCFGSVBTX2RzYV9nZW5lcmF0ZV9wcShjdHgs IGJpdHMsIHFiaXRzLCBldnBtZCwKLSsJCXNlZWQsIHNlZWRfbGVuLCAmcCwgJnEsIGNvdW50ZXJf cmV0LCBjYikpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKCFGSVBTX2RzYV9nZW5lcmF0ZV9nKGN0 eCwgcCwgcSwgJmcsIGhfcmV0LCBjYikpCi0rCQlnb3RvIGVycjsKLSsKLSsJb2s9MTsKLStlcnI6 Ci0rCWlmIChvaykKLSsJCXsKLSsJCWlmKHJldC0+cCkKLSsJCQl7Ci0rCQkJQk5fZnJlZShyZXQt PnApOwotKwkJCXJldC0+cCA9IE5VTEw7Ci0rCQkJfQotKwkJaWYocmV0LT5xKQotKwkJCXsKLSsJ CQlCTl9mcmVlKHJldC0+cSk7Ci0rCQkJcmV0LT5xID0gTlVMTDsKLSsJCQl9Ci0rCQlpZihyZXQt PmcpCi0rCQkJewotKwkJCUJOX2ZyZWUocmV0LT5nKTsKLSsJCQlyZXQtPmcgPSBOVUxMOwotKwkJ CX0KLSsJCXJldC0+cD1CTl9kdXAocCk7Ci0rCQlyZXQtPnE9Qk5fZHVwKHEpOwotKwkJcmV0LT5n PUJOX2R1cChnKTsKLSsJCWlmIChyZXQtPnAgPT0gTlVMTCB8fCByZXQtPnEgPT0gTlVMTCB8fCBy ZXQtPmcgPT0gTlVMTCkKLSsJCQlvaz0wOwotKwkJfQotKwlpZihjdHgpCi0rCQl7Ci0rCQlCTl9D VFhfZW5kKGN0eCk7Ci0rCQlCTl9DVFhfZnJlZShjdHgpOwotKwkJfQotKwlyZXR1cm4gb2s7Ci0r CX0KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotK3N0YXRpYwotKyNlbmRpZgotK2ludCBGSVBT X2RzYV9nZW5lcmF0ZV9wcShCTl9DVFggKmN0eCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywK LSsJCWNvbnN0IEVWUF9NRCAqZXZwbWQsIHVuc2lnbmVkIGNoYXIgKnNlZWQsIGludCBzZWVkX2xl biwKLSsJCUJJR05VTSAqKnBfcmV0LCBCSUdOVU0gKipxX3JldCwgaW50ICpjb3VudGVyX3JldCwg Qk5fR0VOQ0IgKmNiKQotKwl7Ci0rCWludCBvaz0wOwotIAl1bnNpZ25lZCBjaGFyIG1kW1NIQTI1 Nl9ESUdFU1RfTEVOR1RIXTsKLS0JdW5zaWduZWQgY2hhciBidWZbU0hBMjU2X0RJR0VTVF9MRU5H VEhdLGJ1ZjJbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOwotKwl1bnNpZ25lZCBjaGFyIGJ1ZltTSEEy NTZfRElHRVNUX0xFTkdUSF07Ci0gCUJJR05VTSAqcjAsKlcsKlgsKmMsKnRlc3Q7Ci0tCUJJR05V TSAqZz1OVUxMLCpxPU5VTEwsKnA9TlVMTDsKLS0JQk5fTU9OVF9DVFggKm1vbnQ9TlVMTDsKLS0J aW50IGksIGssIG49MCwgbT0wLCBxc2l6ZSA9IHFiaXRzID4+IDM7Ci0rCUJJR05VTSAqcT1OVUxM LCpwPU5VTEw7Ci0rCWludCBpLCBrLCBiLCBuPTAsIG09MCwgcXNpemUgPSBxYml0cyA+PiAzOwot IAlpbnQgY291bnRlcj0wOwotIAlpbnQgcj0wOwotLQlCTl9DVFggKmN0eD1OVUxMOwotLQl1bnNp Z25lZCBpbnQgaD0yOwotIAotIAlpZiAocXNpemUgIT0gU0hBX0RJR0VTVF9MRU5HVEggJiYgcXNp emUgIT0gU0hBMjI0X0RJR0VTVF9MRU5HVEggJiYKLSAJICAgIHFzaXplICE9IFNIQTI1Nl9ESUdF U1RfTEVOR1RIKQotQEAgLTE1Myw1MSArMjQ1LDQzIEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdl bihEU0EgKnJldCwgc2l6ZV8KLSAJCXJldHVybiAwOwotIAotIAlpZiAoZXZwbWQgPT0gTlVMTCkK LS0JCS8qIHVzZSBTSEExIGFzIGRlZmF1bHQgKi8KLS0JCWV2cG1kID0gRVZQX3NoYTEoKTsKLSsJ ICAgIHsKLSsJCWlmIChxYml0cyA8PSAxNjApCi0rCQkJZXZwbWQgPSBFVlBfc2hhMSgpOwotKwkJ ZWxzZSBpZiAocWJpdHMgPD0gMjI0KQotKwkJCWV2cG1kID0gRVZQX3NoYTIyNCgpOwotKwkJZWxz ZQotKwkJCWV2cG1kID0gRVZQX3NoYTI1NigpOwotKwkgICAgfQotIAotIAlpZiAoYml0cyA8IDUx MikKLSAJCWJpdHMgPSA1MTI7Ci0gCi0gCWJpdHMgPSAoYml0cys2MykvNjQqNjQ7Ci0gCi0tCS8q IE5COiBzZWVkX2xlbiA9PSAwIGlzIHNwZWNpYWwgY2FzZTogY29weSBnZW5lcmF0ZWQgc2VlZCB0 bwotLSAJICogc2VlZF9pbiBpZiBpdCBpcyBub3QgTlVMTC4KLS0gCSAqLwotLQlpZiAoc2VlZF9s ZW4gJiYgKHNlZWRfbGVuIDwgKHNpemVfdClxc2l6ZSkpCi0tCQlzZWVkX2luID0gTlVMTDsJCS8q IHNlZWQgYnVmZmVyIHRvbyBzbWFsbCAtLSBpZ25vcmUgKi8KLS0JaWYgKHNlZWRfbGVuID4gKHNp emVfdClxc2l6ZSkgCi0tCQlzZWVkX2xlbiA9IHFzaXplOwkvKiBBcHAuIDIuMiBvZiBGSVBTIFBV QiAxODYgYWxsb3dzIGxhcmdlciBTRUVELAotLQkJCQkJICogYnV0IG91ciBpbnRlcm5hbCBidWZm ZXJzIGFyZSByZXN0cmljdGVkIHRvIDE2MCBiaXRzKi8KLS0JaWYgKHNlZWRfaW4gIT0gTlVMTCkK LS0JCW1lbWNweShzZWVkLCBzZWVkX2luLCBzZWVkX2xlbik7Ci0tCi0tCWlmICgoY3R4PUJOX0NU WF9uZXcoKSkgPT0gTlVMTCkKLS0JCWdvdG8gZXJyOwotLQotLQlpZiAoKG1vbnQ9Qk5fTU9OVF9D VFhfbmV3KCkpID09IE5VTEwpCi0tCQlnb3RvIGVycjsKLS0KLS0JQk5fQ1RYX3N0YXJ0KGN0eCk7 Ci0gCXIwID0gQk5fQ1RYX2dldChjdHgpOwotLQlnID0gQk5fQ1RYX2dldChjdHgpOwotIAlXID0g Qk5fQ1RYX2dldChjdHgpOwotLQlxID0gQk5fQ1RYX2dldChjdHgpOwotKwkqcV9yZXQgPSBxID0g Qk5fQ1RYX2dldChjdHgpOwotIAlYID0gQk5fQ1RYX2dldChjdHgpOwotIAljID0gQk5fQ1RYX2dl dChjdHgpOwotLQlwID0gQk5fQ1RYX2dldChjdHgpOwotKwkqcF9yZXQgPSBwID0gQk5fQ1RYX2dl dChjdHgpOwotIAl0ZXN0ID0gQk5fQ1RYX2dldChjdHgpOwotIAotIAlpZiAoIUJOX2xzaGlmdCh0 ZXN0LEJOX3ZhbHVlX29uZSgpLGJpdHMtMSkpCi0gCQlnb3RvIGVycjsKLSAKLSsJLyogc3RlcCAz IG4gPSBcbGNlaWwgYml0cyAvIHFiaXRzIFxyY2VpbCAtIDEgKi8KLSsJbiA9IChiaXRzK3FiaXRz LTEpL3FiaXRzIC0gMTsKLSsJLyogc3RlcCA0IGIgPSBiaXRzIC0gMSAtIG4gKiBxYml0cyAqLwot KwliID0gYml0cyAtIDEgLSBuKnFiaXRzOwotKwotIAlmb3IgKDs7KQotIAkJewotIAkJZm9yICg7 OykgLyogZmluZCBxICovCi0gCQkJewotIAkJCWludCBzZWVkX2lzX3JhbmRvbTsKLSAKLS0JCQkv KiBzdGVwIDEgKi8KLSsJCQkvKiBzdGVwIDUgZ2VuZXJhdGUgc2VlZCAqLwotIAkJCWlmKCFCTl9H RU5DQl9jYWxsKGNiLCAwLCBtKyspKQotIAkJCQlnb3RvIGVycjsKLSAKLUBAIC0yMTIsMzAgKzI5 NiwxOCBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCi0gCQkJCXNl ZWRfbGVuPTA7IC8qIHVzZSByYW5kb20gc2VlZCBpZiAnc2VlZF9pbicgdHVybnMgb3V0IHRvIGJl IGJhZCovCi0gCQkJCX0KLSAJCQltZW1jcHkoYnVmICwgc2VlZCwgcXNpemUpOwotLQkJCW1lbWNw eShidWYyLCBzZWVkLCBxc2l6ZSk7Ci0tCQkJLyogcHJlY29tcHV0ZSAiU0VFRCArIDEiIGZvciBz dGVwIDc6ICovCi0tCQkJZm9yIChpID0gcXNpemUtMTsgaSA+PSAwOyBpLS0pCi0tCQkJCXsKLS0J CQkJYnVmW2ldKys7Ci0tCQkJCWlmIChidWZbaV0gIT0gMCkKLS0JCQkJCWJyZWFrOwotLQkJCQl9 Ci0gCi0tCQkJLyogc3RlcCAyICovCi0rCQkJLyogc3RlcCA2IFUgPSBoYXNoKHNlZWQpICovCi0g CQkJaWYgKCFFVlBfRGlnZXN0KHNlZWQsIHFzaXplLCBtZCwgICBOVUxMLCBldnBtZCwgTlVMTCkp Ci0gCQkJCWdvdG8gZXJyOwotLQkJCWlmICghRVZQX0RpZ2VzdChidWYsICBxc2l6ZSwgYnVmMiwg TlVMTCwgZXZwbWQsIE5VTEwpKQotLQkJCQlnb3RvIGVycjsKLS0JCQlmb3IgKGkgPSAwOyBpIDwg cXNpemU7IGkrKykKLS0JCQkJbWRbaV1ePWJ1ZjJbaV07Ci0gCi0tCQkJLyogc3RlcCAzICovCi0r CQkJLyogc3RlcCA3IHEgPSAyXihxYml0cy0xKSArIFUgKyAxIC0gKFUgbW9kIDIpICovCi0gCQkJ bWRbMF0gfD0gMHg4MDsKLSAJCQltZFtxc2l6ZS0xXSB8PSAweDAxOwotIAkJCWlmICghQk5fYmlu MmJuKG1kLCBxc2l6ZSwgcSkpCi0gCQkJCWdvdG8gZXJyOwotIAotLQkJCS8qIHN0ZXAgNCAqLwot KwkJCS8qIHN0ZXAgOCB0ZXN0IGZvciBwcmltZSAoNjQgcm91bmQgb2YgUmFiaW4tTWlsbGVyKSAq LwotIAkJCXIgPSBCTl9pc19wcmltZV9mYXN0dGVzdF9leChxLCBEU1NfcHJpbWVfY2hlY2tzLCBj dHgsCi0gCQkJCQlzZWVkX2lzX3JhbmRvbSwgY2IpOwotIAkJCWlmIChyID4gMCkKLUBAIC0yNDMs MjcgKzMxNSwyMiBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCi0g CQkJaWYgKHIgIT0gMCkKLSAJCQkJZ290byBlcnI7Ci0gCi0tCQkJLyogZG8gYSBjYWxsYmFjayBj YWxsICovCi0tCQkJLyogc3RlcCA1ICovCi0gCQkJfQotIAotIAkJaWYoIUJOX0dFTkNCX2NhbGwo Y2IsIDIsIDApKSBnb3RvIGVycjsKLSAJCWlmKCFCTl9HRU5DQl9jYWxsKGNiLCAzLCAwKSkgZ290 byBlcnI7Ci0gCi0tCQkvKiBzdGVwIDYgKi8KLSsJCS8qIHN0ZXAgMTEgKi8KLSAJCWNvdW50ZXI9 MDsKLS0JCS8qICJvZmZzZXQgPSAyIiAqLwotLQotLQkJbj0oYml0cy0xKS8xNjA7Ci0rCQkvKiAi b2Zmc2V0ID0gMSIgKi8KLSAKLSAJCWZvciAoOzspCi0gCQkJewotIAkJCWlmICgoY291bnRlciAh PSAwKSAmJiAhQk5fR0VOQ0JfY2FsbChjYiwgMCwgY291bnRlcikpCi0gCQkJCWdvdG8gZXJyOwot IAotLQkJCS8qIHN0ZXAgNyAqLwotKwkJCS8qIHN0ZXAgMTEuMSwgMTEuMiBvYnRhaW4gVyAqLwot IAkJCUJOX3plcm8oVyk7Ci0tCQkJLyogbm93ICdidWYnIGNvbnRhaW5zICJTRUVEICsgb2Zmc2V0 IC0gMSIgKi8KLSAJCQlmb3IgKGs9MDsgazw9bjsgaysrKQotIAkJCQl7Ci0gCQkJCS8qIG9idGFp biAiU0VFRCArIG9mZnNldCArIGsiIGJ5IGluY3JlbWVudGluZzogKi8KLUBAIC0yNzgsMjggKzM0 NSwzMCBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCi0gCQkJCQkJ CQkJTlVMTCkpCi0gCQkJCQlnb3RvIGVycjsKLSAKLS0JCQkJLyogc3RlcCA4ICovCi0gCQkJCWlm ICghQk5fYmluMmJuKG1kLCBxc2l6ZSwgcjApKQotIAkJCQkJZ290byBlcnI7Ci0tCQkJCWlmICgh Qk5fbHNoaWZ0KHIwLHIwLChxc2l6ZSA8PCAzKSprKSkgZ290byBlcnI7Ci0rCQkJCWlmIChrID09 IG4pCi0rCQkJCQlCTl9tYXNrX2JpdHMocjAsYik7Ci0rCQkJCWlmICghQk5fbHNoaWZ0KHIwLHIw LHFiaXRzKmspKSBnb3RvIGVycjsKLSAJCQkJaWYgKCFCTl9hZGQoVyxXLHIwKSkgZ290byBlcnI7 Ci0gCQkJCX0KLSAKLS0JCQkvKiBtb3JlIG9mIHN0ZXAgOCAqLwotLQkJCWlmICghQk5fbWFza19i aXRzKFcsYml0cy0xKSkgZ290byBlcnI7Ci0rCQkJLyogc3RlcCAxMS4zIFggPSBXICsgMl4oTC0x KSAqLwotIAkJCWlmICghQk5fY29weShYLFcpKSBnb3RvIGVycjsKLSAJCQlpZiAoIUJOX2FkZChY LFgsdGVzdCkpIGdvdG8gZXJyOwotIAotLQkJCS8qIHN0ZXAgOSAqLwotKwkJCS8qIHN0ZXAgMTEu NCBjID0gWCBtb2QgMipxICovCi0gCQkJaWYgKCFCTl9sc2hpZnQxKHIwLHEpKSBnb3RvIGVycjsK LSAJCQlpZiAoIUJOX21vZChjLFgscjAsY3R4KSkgZ290byBlcnI7Ci0rCi0rCQkJLyogc3RlcCAx MS41IHAgPSBYIC0gKGMgLSAxKSAqLwotIAkJCWlmICghQk5fc3ViKHIwLGMsQk5fdmFsdWVfb25l KCkpKSBnb3RvIGVycjsKLSAJCQlpZiAoIUJOX3N1YihwLFgscjApKSBnb3RvIGVycjsKLSAKLS0J CQkvKiBzdGVwIDEwICovCi0rCQkJLyogc3RlcCAxMS42ICovCi0gCQkJaWYgKEJOX2NtcChwLHRl c3QpID49IDApCi0gCQkJCXsKLS0JCQkJLyogc3RlcCAxMSAqLwotKwkJCQkvKiBzdGVwIDExLjcg Ki8KLSAJCQkJciA9IEJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4KHAsIERTU19wcmltZV9jaGVja3Ms Ci0gCQkJCQkJY3R4LCAxLCBjYik7Ci0gCQkJCWlmIChyID4gMCkKLUBAIC0zMDgsMTkgKzM3Nyw0 NSBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCi0gCQkJCQlnb3Rv IGVycjsKLSAJCQkJfQotIAotLQkJCS8qIHN0ZXAgMTMgKi8KLSsJCQkvKiBzdGVwIDExLjkgKi8K LSAJCQljb3VudGVyKys7Ci0gCQkJLyogIm9mZnNldCA9IG9mZnNldCArIG4gKyAxIiAqLwotIAot LQkJCS8qIHN0ZXAgMTQgKi8KLS0JCQlpZiAoY291bnRlciA+PSA0MDk2KSBicmVhazsKLSsJCQkv KiBzdGVwIDEyICovCi0rCQkJaWYgKGNvdW50ZXIgPj0gNCpiaXRzKSBicmVhazsKLSAJCQl9Ci0g CQl9Ci0gZW5kOgotIAlpZighQk5fR0VOQ0JfY2FsbChjYiwgMiwgMSkpCi0gCQlnb3RvIGVycjsK LSAKLS0JLyogV2Ugbm93IG5lZWQgdG8gZ2VuZXJhdGUgZyAqLwotKwlvaz0xOwotK2VycjoKLSsJ aWYgKG9rKQotKwkJewotKwkJaWYgKGNvdW50ZXJfcmV0ICE9IE5VTEwpICpjb3VudGVyX3JldD1j b3VudGVyOwotKwkJfQotKwlyZXR1cm4gb2s7Ci0rCX0KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQ UwotK3N0YXRpYwotKyNlbmRpZgotK2ludCBGSVBTX2RzYV9nZW5lcmF0ZV9nKEJOX0NUWCAqY3R4 LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwKLSsJCUJJR05VTSAqKmdfcmV0LCB1bnNpZ25lZCBsb25n ICpoX3JldCwgQk5fR0VOQ0IgKmNiKQotKwl7Ci0rCWludCBvaz0wOwotKwlCSUdOVU0gKnIwLCAq dGVzdCwgKmcgPSBOVUxMOwotKwlCTl9NT05UX0NUWCAqbW9udDsKLSsJdW5zaWduZWQgaW50IGg9 MjsKLSsKLSsJaWYgKChtb250PUJOX01PTlRfQ1RYX25ldygpKSA9PSBOVUxMKQotKwkJZ290byBl cnI7Ci0rCi0rCXIwID0gQk5fQ1RYX2dldChjdHgpOwotKwkqZ19yZXQgPSBnID0gQk5fQ1RYX2dl dChjdHgpOwotKwl0ZXN0ID0gQk5fQ1RYX2dldChjdHgpOwotKwotIAkvKiBTZXQgcjA9KHAtMSkv cSAqLwotIAlpZiAoIUJOX3N1Yih0ZXN0LHAsQk5fdmFsdWVfb25lKCkpKSBnb3RvIGVycjsKLSAJ aWYgKCFCTl9kaXYocjAsTlVMTCx0ZXN0LHEsY3R4KSkgZ290byBlcnI7Ci1AQCAtMzQ0LDI2ICs0 MzksNyBAQCBlbmQ6Ci0gZXJyOgotIAlpZiAob2spCi0gCQl7Ci0tCQlpZihyZXQtPnApIEJOX2Zy ZWUocmV0LT5wKTsKLS0JCWlmKHJldC0+cSkgQk5fZnJlZShyZXQtPnEpOwotLQkJaWYocmV0LT5n KSBCTl9mcmVlKHJldC0+Zyk7Ci0tCQlyZXQtPnA9Qk5fZHVwKHApOwotLQkJcmV0LT5xPUJOX2R1 cChxKTsKLS0JCXJldC0+Zz1CTl9kdXAoZyk7Ci0tCQlpZiAocmV0LT5wID09IE5VTEwgfHwgcmV0 LT5xID09IE5VTEwgfHwgcmV0LT5nID09IE5VTEwpCi0tCQkJewotLQkJCW9rPTA7Ci0tCQkJZ290 byBlcnI7Ci0tCQkJfQotLQkJaWYgKGNvdW50ZXJfcmV0ICE9IE5VTEwpICpjb3VudGVyX3JldD1j b3VudGVyOwotIAkJaWYgKGhfcmV0ICE9IE5VTEwpICpoX3JldD1oOwotLQkJaWYgKHNlZWRfb3V0 KQotLQkJCW1lbWNweShzZWVkX291dCwgc2VlZCwgcXNpemUpOwotLQkJfQotLQlpZihjdHgpCi0t CQl7Ci0tCQlCTl9DVFhfZW5kKGN0eCk7Ci0tCQlCTl9DVFhfZnJlZShjdHgpOwotIAkJfQotIAlp ZiAobW9udCAhPSBOVUxMKSBCTl9NT05UX0NUWF9mcmVlKG1vbnQpOwotIAlyZXR1cm4gb2s7Ci1k aWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9kc2EvZHNhLmguZmlwcyBvcGVuc3Ns LTEuMC4xLWJldGEyL2NyeXB0by9kc2EvZHNhLmgKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2Ny eXB0by9kc2EvZHNhLmguZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAyLjAyMTM4OTM3OSArMDEwMAot KysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2RzYS9kc2EuaAkyMDEyLTAyLTA3IDExOjA3 OjAyLjUzMTM5MzYyMyArMDEwMAotQEAgLTg4LDYgKzg4LDggQEAKLSAjIGRlZmluZSBPUEVOU1NM X0RTQV9NQVhfTU9EVUxVU19CSVRTCTEwMDAwCi0gI2VuZGlmCi0gCi0rI2RlZmluZSBPUEVOU1NM X0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAotKwotICNkZWZpbmUgRFNBX0ZMQUdfQ0FD SEVfTU9OVF9QCTB4MDEKLSAjZGVmaW5lIERTQV9GTEFHX05PX0VYUF9DT05TVFRJTUUgICAgICAg MHgwMiAvKiBuZXcgd2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBEU0EKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiBub3cgdXNl cyBjb25zdGFudCB0aW1lCi1AQCAtMjY0LDYgKzI2NiwxNyBAQCBpbnQJRFNBX3ByaW50X2ZwKEZJ TEUgKmJwLCBjb25zdCBEU0EgKngsCi0gREggKkRTQV9kdXBfREgoY29uc3QgRFNBICpyKTsKLSAj ZW5kaWYKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IEZJUFNfZHNhX2J1aWx0aW5fcGFy YW1nZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCi0rCWNvbnN0IEVWUF9N RCAqZXZwbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIHNpemVfdCBzZWVkX2xlbiwK LSsJaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYik7 Ci0raW50IEZJUFNfZHNhX2dlbmVyYXRlX3BxKEJOX0NUWCAqY3R4LCBzaXplX3QgYml0cywgc2l6 ZV90IHFiaXRzLAotKwkJY29uc3QgRVZQX01EICpldnBtZCwgdW5zaWduZWQgY2hhciAqc2VlZCwg aW50IHNlZWRfbGVuLAotKwkJQklHTlVNICoqcF9yZXQsIEJJR05VTSAqKnFfcmV0LCBpbnQgKmNv dW50ZXJfcmV0LCBCTl9HRU5DQiAqY2IpOwotK2ludCBGSVBTX2RzYV9nZW5lcmF0ZV9nKEJOX0NU WCAqY3R4LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwKLSsJCUJJR05VTSAqKmdfcmV0LCB1bnNpZ25l ZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKTsKLSsjZW5kaWYKLSsKLSAjZGVmaW5lIEVWUF9Q S0VZX0NUWF9zZXRfZHNhX3BhcmFtZ2VuX2JpdHMoY3R4LCBuYml0cykgXAotIAlFVlBfUEtFWV9D VFhfY3RybChjdHgsIEVWUF9QS0VZX0RTQSwgRVZQX1BLRVlfT1BfUEFSQU1HRU4sIFwKLSAJCQkJ RVZQX1BLRVlfQ1RSTF9EU0FfUEFSQU1HRU5fQklUUywgbmJpdHMsIE5VTEwpCi1AQCAtMjg1LDEw ICsyOTgsMTMgQEAgdm9pZCBFUlJfbG9hZF9EU0Ffc3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5lIERT QV9GX0RPX0RTQV9QUklOVAkJCQkgMTA0Ci0gI2RlZmluZSBEU0FfRl9EU0FQQVJBTVNfUFJJTlQJ CQkJIDEwMAotICNkZWZpbmUgRFNBX0ZfRFNBUEFSQU1TX1BSSU5UX0ZQCQkJIDEwMQotKyNkZWZp bmUgRFNBX0ZfRFNBX0JVSUxUSU5fS0VZR0VOCQkJIDEyNAotKyNkZWZpbmUgRFNBX0ZfRFNBX0JV SUxUSU5fUEFSQU1HRU4JCQkgMTIzCi0gI2RlZmluZSBEU0FfRl9EU0FfRE9fU0lHTgkJCQkgMTEy Ci0gI2RlZmluZSBEU0FfRl9EU0FfRE9fVkVSSUZZCQkJCSAxMTMKLS0jZGVmaW5lIERTQV9GX0RT QV9HRU5FUkFURV9LRVkJCQkJIDEyNAotLSNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFN RVRFUlNfRVgJCSAxMjMKLSsjZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9LRVkJCQkJIDEyNgot KyNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRFUlNfRVgJCSAxMjcKLSsjZGVmaW5l IERTQV9GX0RTQV9HRU5FUkFURV9QQVJBTUVURVJTCS8qIHVudXNlZCAqLwkgMTI1Ci0gI2RlZmlu ZSBEU0FfRl9EU0FfTkVXX01FVEhPRAkJCQkgMTAzCi0gI2RlZmluZSBEU0FfRl9EU0FfUEFSQU1f REVDT0RFCQkJCSAxMTkKLSAjZGVmaW5lIERTQV9GX0RTQV9QUklOVF9GUAkJCQkgMTA1Ci1AQCAt MzE0LDExICszMzAsMTUgQEAgdm9pZCBFUlJfbG9hZF9EU0Ffc3RyaW5ncyh2b2lkKTsKLSAjZGVm aW5lIERTQV9SX0RBVEFfVE9PX0xBUkdFX0ZPUl9LRVlfU0laRQkJIDEwMAotICNkZWZpbmUgRFNB X1JfREVDT0RFX0VSUk9SCQkJCSAxMDQKLSAjZGVmaW5lIERTQV9SX0lOVkFMSURfRElHRVNUX1RZ UEUJCQkgMTA2Ci0rI2RlZmluZSBEU0FfUl9LRVlfU0laRV9JTlZBTElECQkJCSAxMTMKLSsjZGVm aW5lIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTAkJCSAxMTAKLSAjZGVmaW5lIERTQV9SX01JU1NJ TkdfUEFSQU1FVEVSUwkJCSAxMDEKLSAjZGVmaW5lIERTQV9SX01PRFVMVVNfVE9PX0xBUkdFCQkJ CSAxMDMKLS0jZGVmaW5lIERTQV9SX05FRURfTkVXX1NFVFVQX1ZBTFVFUwkJCSAxMTAKLSsjZGVm aW5lIERTQV9SX05FRURfTkVXX1NFVFVQX1ZBTFVFUwkJCSAxMTIKLSAjZGVmaW5lIERTQV9SX05P Tl9GSVBTX0RTQV9NRVRIT0QJCQkgMTExCi0rI2RlZmluZSBEU0FfUl9OT05fRklQU19NRVRIT0QJ CQkJIDExMQotICNkZWZpbmUgRFNBX1JfTk9fUEFSQU1FVEVSU19TRVQJCQkJIDEwNwotKyNkZWZp bmUgRFNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSAvKiB1bnVzZWQgKi8g MTEyCi0gI2RlZmluZSBEU0FfUl9QQVJBTUVURVJfRU5DT0RJTkdfRVJST1IJCQkgMTA1Ci0gCi0g I2lmZGVmICBfX2NwbHVzcGx1cwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8v ZHNhL2RzYV9rZXkuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2RzYS9kc2Ffa2V5 LmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9kc2EvZHNhX2tleS5jLmZpcHMJMjAx MS0wNi0wOSAxNzoyMTo0Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEy L2NyeXB0by9kc2EvZHNhX2tleS5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTMxMzkzNjIzICswMTAw Ci1AQCAtNjYsNiArNjYsMjQgQEAKLSAKLSAjaWZkZWYgT1BFTlNTTF9GSVBTCi0gI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKwotK3N0YXRpYyBp bnQgZmlwc19jaGVja19kc2EoRFNBICpkc2EpCi0rCXsKLSsJRVZQX1BLRVkgcGs7Ci0rCXVuc2ln bmVkIGNoYXIgdGJzW10gPSAiRFNBIFBhaXJ3aXNlIENoZWNrIERhdGEiOwotKyAgICAJcGsudHlw ZSA9IEVWUF9QS0VZX0RTQTsKLSsgICAgCXBrLnBrZXkuZHNhID0gZHNhOwotKwotKwlpZiAoIWZp cHNfcGtleV9zaWduYXR1cmVfdGVzdCgmcGssIHRicywgMCwgTlVMTCwgMCwgTlVMTCwgMCwgTlVM TCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0NIRUNLX0RTQSxGSVBTX1JfUEFJUldJ U0VfVEVTVF9GQUlMRUQpOwotKwkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOwotKwkJcmV0dXJu IDA7Ci0rCQl9Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0gI2VuZGlmCi0gCi0gc3RhdGljIGludCBk c2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpOwotQEAgLTgyLDEwICsxMDAsNiBAQCBpbnQgRFNB X2dlbmVyYXRlX2tleShEU0EgKmRzYSkKLSAjZW5kaWYKLSAJaWYoZHNhLT5tZXRoLT5kc2Ffa2V5 Z2VuKQotIAkJcmV0dXJuIGRzYS0+bWV0aC0+ZHNhX2tleWdlbihkc2EpOwotLSNpZmRlZiBPUEVO U1NMX0ZJUFMKLS0JaWYgKEZJUFNfbW9kZSgpKQotLQkJcmV0dXJuIEZJUFNfZHNhX2dlbmVyYXRl X2tleShkc2EpOwotLSNlbmRpZgotIAlyZXR1cm4gZHNhX2J1aWx0aW5fa2V5Z2VuKGRzYSk7Ci0g CX0KLSAKLUBAIC05NSw2ICsxMDksMTUgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4o RFNBICpkc2EpCi0gCUJOX0NUWCAqY3R4PU5VTEw7Ci0gCUJJR05VTSAqcHViX2tleT1OVUxMLCpw cml2X2tleT1OVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgp ICYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQotKwkJJiYgKEJOX251 bV9iaXRzKGRzYS0+cCkgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJ ewotKwkJRFNBZXJyKERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTiwgRFNBX1JfS0VZX1NJWkVfVE9P X1NNQUxMKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKyNlbmRpZgotKwotIAlpZiAoKGN0eD1CTl9D VFhfbmV3KCkpID09IE5VTEwpIGdvdG8gZXJyOwotIAotIAlpZiAoZHNhLT5wcml2X2tleSA9PSBO VUxMKQotQEAgLTEzMyw2ICsxNTYsMTQgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4o RFNBICpkc2EpCi0gCi0gCWRzYS0+cHJpdl9rZXk9cHJpdl9rZXk7Ci0gCWRzYS0+cHViX2tleT1w dWJfa2V5OwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19tb2RlKCkgJiYgIWZpcHNf Y2hlY2tfZHNhKGRzYSkpCi0rCQl7Ci0rCQlkc2EtPnB1Yl9rZXkgPSBOVUxMOwotKwkJZHNhLT5w cml2X2tleSA9IE5VTEw7Ci0rCSAgICAJZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0gCW9rPTE7 Ci0gCi0gZXJyOgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZHNhL2RzYV9s aWIuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2RzYS9kc2FfbGliLmMKLS0tLSBv cGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9kc2EvZHNhX2xpYi5jLmZpcHMJMjAxMS0xMS0xNCAx NToxNjowOS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9k c2EvZHNhX2xpYi5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTMxMzkzNjIzICswMTAwCi1AQCAtODcs MTQgKzg3LDcgQEAgY29uc3QgRFNBX01FVEhPRCAqRFNBX2dldF9kZWZhdWx0X21ldGhvZAotIAl7 Ci0gCWlmKCFkZWZhdWx0X0RTQV9tZXRob2QpCi0gCQl7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwot LQkJaWYgKEZJUFNfbW9kZSgpKQotLQkJCXJldHVybiBGSVBTX2RzYV9vcGVuc3NsKCk7Ci0tCQll bHNlCi0tCQkJcmV0dXJuIERTQV9PcGVuU1NMKCk7Ci0tI2Vsc2UKLSAJCWRlZmF1bHRfRFNBX21l dGhvZCA9IERTQV9PcGVuU1NMKCk7Ci0tI2VuZGlmCi0gCQl9Ci0gCXJldHVybiBkZWZhdWx0X0RT QV9tZXRob2Q7Ci0gCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2RzYS9k c2FfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZHNhL2RzYV9sb2NsLmgK LS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9kc2EvZHNhX2xvY2wuaC5maXBzCTIwMTIt MDItMDcgMTE6MDc6MDIuMDI1Mzg5NDEyICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9j cnlwdG8vZHNhL2RzYV9sb2NsLmgJMjAxMi0wMi0wNyAxMTowNzowMi41MzIzOTM2MzIgKzAxMDAK LUBAIC01Niw1ICs1Niw0IEBACi0gCi0gaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0 LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAotIAljb25zdCBFVlBfTUQgKmV2cG1kLCBjb25z dCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBzaXplX3Qgc2VlZF9sZW4sCi0tCXVuc2lnbmVkIGNo YXIgKnNlZWRfb3V0LAotIAlpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwg Qk5fR0VOQ0IgKmNiKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2RzYS9k c2Ffb3NzbC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZHNhL2RzYV9vc3NsLmMK LS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9kc2EvZHNhX29zc2wuYy5maXBzCTIwMTEt MDItMDEgMTM6NTM6NDcuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9j cnlwdG8vZHNhL2RzYV9vc3NsLmMJMjAxMi0wMi0wNyAxMTowNzowMi41MzIzOTM2MzIgKzAxMDAK LUBAIC02NSw2ICs2NSw5IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0gI2luY2x1ZGUg PG9wZW5zc2wvcmFuZC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2FzbjEuaD4KLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotIHN0YXRp YyBEU0FfU0lHICpkc2FfZG9fc2lnbihjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBpbnQgZGxl biwgRFNBICpkc2EpOwotIHN0YXRpYyBpbnQgZHNhX3NpZ25fc2V0dXAoRFNBICpkc2EsIEJOX0NU WCAqY3R4X2luLCBCSUdOVU0gKipraW52cCwgQklHTlVNICoqcnApOwotQEAgLTgyLDcgKzg1LDcg QEAgTlVMTCwgLyogZHNhX21vZF9leHAsICovCi0gTlVMTCwgLyogZHNhX2JuX21vZF9leHAsICov Ci0gZHNhX2luaXQsCi0gZHNhX2ZpbmlzaCwKLS0wLAotK0RTQV9GTEFHX0ZJUFNfTUVUSE9ELAot IE5VTEwsCi0gTlVMTCwKLSBOVUxMCi1AQCAtMTM4LDYgKzE0MSwyMSBAQCBzdGF0aWMgRFNBX1NJ RyAqZHNhX2RvX3NpZ24oY29uc3QgdW5zaWduCi0gCURTQV9TSUcgKnJldD1OVUxMOwotIAlpbnQg bm9yZWRvID0gMDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRlc3Rf ZmFpbGVkKCkpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9EU0FfRE9fU0lHTixGSVBT X1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkgICAgcmV0dXJuIE5VTEw7Ci0rCSAgICB9Ci0r Ci0rCWlmIChGSVBTX21vZGUoKSAmJiAhKGRzYS0+ZmxhZ3MgJiBEU0FfRkxBR19OT05fRklQU19B TExPVykgCi0rCQkmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlO X01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlEU0FlcnIoRFNBX0ZfRFNBX0RPX1NJR04sIERTQV9S X0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJCX0KLSsjZW5kaWYKLSsK LSAJQk5faW5pdCgmbSk7Ci0gCUJOX2luaXQoJnhyKTsKLSAKLUBAIC0zMjUsNiArMzQzLDIxIEBA IHN0YXRpYyBpbnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZAotIAkJcmV0dXJuIC0xOwot IAkJfQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQo KSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0RTQV9ET19WRVJJRlksRklQU19SX0ZJ UFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJICAgIHJldHVybiAtMTsKLSsJICAgIH0KLSsKLSsJaWYg KEZJUFNfbW9kZSgpICYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSAK LSsJCSYmIChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxV U19CSVRTKSkKLSsJCXsKLSsJCURTQWVycihEU0FfRl9EU0FfRE9fVkVSSUZZLCBEU0FfUl9LRVlf U0laRV9UT09fU01BTEwpOwotKwkJcmV0dXJuIC0xOwotKwkJfQotKyNlbmRpZgotKwotIAlpZiAo Qk5fbnVtX2JpdHMoZHNhLT5wKSA+IE9QRU5TU0xfRFNBX01BWF9NT0RVTFVTX0JJVFMpCi0gCQl7 Ci0gCQlEU0FlcnIoRFNBX0ZfRFNBX0RPX1ZFUklGWSxEU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7 Ci1AQCAtMzk5LDYgKzQzMiw5IEBAIHN0YXRpYyBpbnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNp Z25lZAotIAotIHN0YXRpYyBpbnQgZHNhX2luaXQoRFNBICpkc2EpCi0gewotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAlkc2EtPmZsYWdz fD1EU0FfRkxBR19DQUNIRV9NT05UX1A7Ci0gCXJldHVybigxKTsKLSB9Ci1kaWZmIC11cCBvcGVu c3NsLTEuMC4xLWJldGEyL2NyeXB0by9kc2EvZHNhX3BtZXRoLmMuZmlwcyBvcGVuc3NsLTEuMC4x LWJldGEyL2NyeXB0by9kc2EvZHNhX3BtZXRoLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2Ny eXB0by9kc2EvZHNhX3BtZXRoLmMuZmlwcwkyMDExLTA2LTIwIDIyOjA1OjEzLjAwMDAwMDAwMCAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2RzYS9kc2FfcG1ldGguYwkyMDEy LTAyLTA3IDExOjA3OjAyLjUzMzM5MzY0MSArMDEwMAotQEAgLTI1NSw3ICsyNTUsNyBAQCBzdGF0 aWMgaW50IHBrZXlfZHNhX3BhcmFtZ2VuKEVWUF9QS0VZX0NUCi0gCWlmICghZHNhKQotIAkJcmV0 dXJuIDA7Ci0gCXJldCA9IGRzYV9idWlsdGluX3BhcmFtZ2VuKGRzYSwgZGN0eC0+bmJpdHMsIGRj dHgtPnFiaXRzLCBkY3R4LT5wbWQsCi0tCSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEws IDAsIE5VTEwsIE5VTEwsIE5VTEwsIHBjYik7Ci0rCSAgICAgICAgICAgICAgICAgICAgICAgICAg IE5VTEwsIDAsIE5VTEwsIE5VTEwsIHBjYik7Ci0gCWlmIChyZXQpCi0gCQlFVlBfUEtFWV9hc3Np Z25fRFNBKHBrZXksIGRzYSk7Ci0gCWVsc2UKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIv Y3J5cHRvL2RzYS9kc2F0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9kc2Ev ZHNhdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZHNhL2RzYXRlc3QuYy5m aXBzCTIwMDgtMDgtMDYgMTc6NTQ6MTEuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MS1iZXRhMi9jcnlwdG8vZHNhL2RzYXRlc3QuYwkyMDEyLTAyLTA3IDExOjA3OjAyLjUzMzM5MzY0 MSArMDEwMAotQEAgLTk2LDM2ICs5Niw0MSBAQCBzdGF0aWMgaW50IE1TX0NBTExCQUNLIGRzYV9j YihpbnQgcCwgaW50Ci0gLyogc2VlZCwgb3V0X3AsIG91dF9xLCBvdXRfZyBhcmUgdGFrZW4gZnJv bSB0aGUgdXBkYXRlZCBBcHBlbmRpeCA1IHRvCi0gICogRklQUyBQVUIgMTg2IGFuZCBhbHNvIGFw cGVhciBpbiBBcHBlbmRpeCA1IHRvIEZJUFMgUElCIDE4Ni0xICovCi0gc3RhdGljIHVuc2lnbmVk IGNoYXIgc2VlZFsyMF09ewotLQkweGQ1LDB4MDEsMHg0ZSwweDRiLDB4NjAsMHhlZiwweDJiLDB4 YTgsMHhiNiwweDIxLDB4MWIsMHg0MCwKLS0JMHg2MiwweGJhLDB4MzIsMHgyNCwweGUwLDB4NDIs MHg3ZCwweGQzLAotKwkweDAyLDB4NDcsMHgxMSwweDkyLDB4MTEsMHg4OCwweEM4LDB4RkIsMHhB RiwweDQ4LDB4NEMsMHg2MiwKLSsJMHhERiwweEE1LDB4QkUsMHhBMCwweEE0LDB4M0MsMHg1Niww eEUzLAotIAl9OwotIAotIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9wW109ewotLQkweDhkLDB4 ZjIsMHhhNCwweDk0LDB4NDksMHgyMiwweDc2LDB4YWEsCi0tCTB4M2QsMHgyNSwweDc1LDB4OWIs MHhiMCwweDY4LDB4NjksMHhjYiwKLS0JMHhlYSwweGMwLDB4ZDgsMHgzYSwweGZiLDB4OGQsMHgw YywweGY3LAotLQkweGNiLDB4YjgsMHgzMiwweDRmLDB4MGQsMHg3OCwweDgyLDB4ZTUsCi0tCTB4 ZDAsMHg3NiwweDJmLDB4YzUsMHhiNywweDIxLDB4MGUsMHhhZiwKLS0JMHhjMiwweGU5LDB4YWQs MHhhYywweDMyLDB4YWIsMHg3YSwweGFjLAotLQkweDQ5LDB4NjksMHgzZCwweGZiLDB4ZjgsMHgz NywweDI0LDB4YzIsCi0tCTB4ZWMsMHgwNywweDM2LDB4ZWUsMHgzMSwweGM4LDB4MDIsMHg5MSwK LSsJMHhBQywweENCLDB4MUUsMHg2MywweDYwLDB4NjksMHgwQywweEZCLDB4MDYsMHgxOSwweDY4 LDB4M0UsCi0rCTB4QTUsMHgwMSwweDVBLDB4QTIsMHgxNSwweDVDLDB4RTIsMHg5OSwweDJELDB4 RDUsMHgzMCwweDk5LAotKwkweDdFLDB4NUYsMHg4RCwweEUyLDB4RjcsMHhDNiwweDJFLDB4OEQs MHhBMywweDlGLDB4NTgsMHhBRCwKLSsJMHhENiwweEE5LDB4N0QsMHgwRSwweDBELDB4OTUsMHg1 MywweEE2LDB4NzEsMHgzQSwweERFLDB4QUIsCi0rCTB4QUMsMHhFOSwweEY0LDB4MzYsMHg1NSww eDlFLDB4QjksMHhENiwweDkzLDB4QkYsMHhGMywweDE4LAotKwkweDFDLDB4MTQsMHg3QiwweEE1 LDB4NDIsMHgyRSwweENELDB4MDAsMHhFQiwweDM1LDB4M0IsMHgxQiwKLSsJMHhBOCwweDUxLDB4 QkIsMHhFMSwweDU4LDB4NDIsMHg4NSwweDg0LDB4MjIsMHhBNywweDk3LDB4NUUsCi0rCTB4OTks MHg2RiwweDM4LDB4MjAsMHhCRCwweDlELDB4QjYsMHhEOSwweDMzLDB4MzcsMHgyQSwweEZELAot KwkweEJCLDB4RDQsMHhCQywweDBDLDB4MkEsMHg2NywweENCLDB4OUYsMHhCQiwweERGLDB4Rjks MHg5MywKLSsJMHhBQSwweEQ2LDB4RjAsMHhENiwweDk1LDB4MEIsMHg1RCwweDY1LDB4MTQsMHhE MCwweDE4LDB4OUQsCi0rCTB4QzYsMHhBRiwweEYwLDB4QzYsMHgzNywweDdDLDB4RjMsMHg1RiwK LSAJfTsKLSAKLSBzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRfcVtdPXsKLS0JMHhjNywweDczLDB4 MjEsMHg4YywweDczLDB4N2UsMHhjOCwweGVlLAotLQkweDk5LDB4M2IsMHg0ZiwweDJkLDB4ZWQs MHgzMCwweGY0LDB4OGUsCi0tCTB4ZGEsMHhjZSwweDkxLDB4NWYsCi0rCTB4RTMsMHg4RSwweDVF LDB4NkQsMHhCRiwweDJCLDB4NzksMHhGOCwweEM1LDB4NEIsMHg4OSwweDhCLAotKwkweEJBLDB4 MkQsMHg5MSwweEMzLDB4NkMsMHg4MCwweEFDLDB4ODcsCi0gCX07Ci0gCi0gc3RhdGljIHVuc2ln bmVkIGNoYXIgb3V0X2dbXT17Ci0tCTB4NjIsMHg2ZCwweDAyLDB4NzgsMHgzOSwweGVhLDB4MGEs MHgxMywKLS0JMHg0MSwweDMxLDB4NjMsMHhhNSwweDViLDB4NGMsMHhiNSwweDAwLAotLQkweDI5 LDB4OWQsMHg1NSwweDIyLDB4OTUsMHg2YywweGVmLDB4Y2IsCi0tCTB4M2IsMHhmZiwweDEwLDB4 ZjMsMHg5OSwweGNlLDB4MmMsMHgyZSwKLS0JMHg3MSwweGNiLDB4OWQsMHhlNSwweGZhLDB4MjQs MHhiYSwweGJmLAotLQkweDU4LDB4ZTUsMHhiNywweDk1LDB4MjEsMHg5MiwweDVjLDB4OWMsCi0t CTB4YzQsMHgyZSwweDlmLDB4NmYsMHg0NiwweDRiLDB4MDgsMHg4YywKLS0JMHhjNSwweDcyLDB4 YWYsMHg1MywweGU2LDB4ZDcsMHg4OCwweDAyLAotKwkweDQyLDB4NEEsMHgwNCwweDRFLDB4Nzks MHhCNCwweDk5LDB4N0YsMHhGRCwweDU4LDB4MzYsMHgyQywKLSsJMHgxQiwweDVGLDB4MTgsMHg3 RSwweDBELDB4Q0MsMHhBQiwweDgxLDB4QzksMHg1RCwweDEwLDB4Q0UsCi0rCTB4NEUsMHg4MCww eDdFLDB4NTgsMHhCNCwweDM0LDB4M0YsMHhBNywweDQ1LDB4QzcsMHhBQSwweDM2LAotKwkweDI0 LDB4NDIsMHhBOSwweDNCLDB4RTgsMHgwRSwweDA0LDB4MDIsMHgyRCwweEZCLDB4QTYsMHgxMywK LSsJMHhCOSwweEI1LDB4MTUsMHhBNSwweDU2LDB4MDcsMHgzNSwweEU0LDB4MDMsMHhCNiwweDc5 LDB4N0MsCi0rCTB4NjIsMHhERCwweERGLDB4M0YsMHg3MSwweDNBLDB4OUQsMHg4QiwweEM0LDB4 RjYsMHhFNywweDFELAotKwkweDUyLDB4QTgsMHhBOSwweDQzLDB4MUQsMHgzMywweDUxLDB4ODgs MHgzOSwweEJELDB4NzMsMHhFOSwKLSsJMHg1RiwweEJFLDB4ODIsMHg0OSwweDI3LDB4RTYsMHhC NSwweDUzLDB4QzEsMHgzOCwweEFDLDB4MkYsCi0rCTB4NkQsMHg5NywweDZDLDB4RUIsMHg2Nyww eEMxLDB4NUYsMHg2NywweEY4LDB4MzUsMHgwNSwweDVFLAotKwkweEQ1LDB4NjgsMHg4MCwweEFB LDB4OTYsMHhDQSwweDBCLDB4OEEsMHhFNiwweEYxLDB4QjEsMHg0MSwKLSsJMHhDNiwweDc1LDB4 OTQsMHgwQSwweDBBLDB4MkEsMHhGQSwweDI5LAotIAl9OwotIAotIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHN0cjFbXT0iMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiOwotQEAgLTE1Nyw3ICsxNjIs NyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0gCUJJT19wcmludGYoYmlvX2Vy ciwidGVzdCBnZW5lcmF0aW9uIG9mIERTQSBwYXJhbWV0ZXJzXG4iKTsKLSAKLSAJQk5fR0VOQ0Jf c2V0KCZjYiwgZHNhX2NiLCBiaW9fZXJyKTsKLS0JaWYoKChkc2EgPSBEU0FfbmV3KCkpID09IE5V TEwpIHx8ICFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIDUxMiwKLSsJaWYoKChkc2Eg PSBEU0FfbmV3KCkpID09IE5VTEwpIHx8ICFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2Es IDEwMjQsCi0gCQkJCXNlZWQsIDIwLCAmY291bnRlciwgJmgsICZjYikpCi0gCQlnb3RvIGVuZDsK LSAKLUBAIC0xNzAsOSArMTc1LDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQot IAlCSU9fcHJpbnRmKGJpb19lcnIsIlxuY291bnRlcj0lZCBoPSVsZFxuIixjb3VudGVyLGgpOwot IAkJCi0gCURTQV9wcmludChiaW9fZXJyLGRzYSwwKTsKLS0JaWYgKGNvdW50ZXIgIT0gMTA1KSAK LSsJaWYgKGNvdW50ZXIgIT0gMjM5KSAKLSAJCXsKLS0JCUJJT19wcmludGYoYmlvX2VyciwiY291 bnRlciBzaG91bGQgYmUgMTA1XG4iKTsKLSsJCUJJT19wcmludGYoYmlvX2VyciwiY291bnRlciBz aG91bGQgYmUgMjM5XG4iKTsKLSAJCWdvdG8gZW5kOwotIAkJfQotIAlpZiAoaCAhPSAyKQotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYy5maXBzIG9w ZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMKLS0tLSBvcGVuc3NsLTEu MC4xLWJldGEyL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jLmZpcHMJMjAxMS0wOC0xMCAyMDo1Mzox My4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9lbmdpbmUv ZW5nX2FsbC5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTMzMzkzNjQxICswMTAwCi1AQCAtNTgsMTEg KzU4LDI1IEBACi0gCi0gI2luY2x1ZGUgImNyeXB0bGliLmgiCi0gI2luY2x1ZGUgImVuZ19pbnQu aCIKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNl bmRpZgotIAotIHZvaWQgRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzKHZvaWQpCi0gCXsKLSAJ LyogU29tZSBFTkdJTkVzIG5lZWQgdGhpcyAqLwotIAlPUEVOU1NMX2NwdWlkX3NldHVwKCk7Ci0r I2lmZGVmIE9QRU5TU0xfRklQUwotKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOwotKwlpZiAoRklQ U19tb2RlKCkpIHsKLSsJCS8qIFdlIGFsbG93IGxvYWRpbmcgZHluYW1pYyBlbmdpbmUgYXMgYSB0 aGlyZCBwYXJ0eQotKwkJICAgZW5naW5lIG1pZ2h0IGJlIEZJUFMgdmFsaWRhdGVkLgotKwkJICAg VXNlciBpcyBkaXNhbGxvd2VkIHRvIGxvYWQgbm9uLXZhbGlkYXRlZCBlbmdpbmVzCi0rCQkgICBi eSBzZWN1cml0eSBwb2xpY3kuICovCi0rCQlFTkdJTkVfbG9hZF9keW5hbWljKCk7Ci0rCQlyZXR1 cm47Ci0rCX0KLSsjZW5kaWYKLSAjaWYgMAotIAkvKiBUaGVyZSdzIG5vIGxvbmdlciBhbnkgbmVl ZCBmb3IgYW4gIm9wZW5zc2wiIEVOR0lORSB1bmxlc3MsIG9uZSBkYXksCi0gCSAqIGl0IGlzIHRo ZSAqb25seSogd2F5IGZvciBzdGFuZGFyZCBidWlsdGluIGltcGxlbWVudGF0aW9ucyB0byBiZSBi ZQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXJyL2Vycl9hbGwuYy5maXBz IG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2Vyci9lcnJfYWxsLmMKLS0tLSBvcGVuc3NsLTEu MC4xLWJldGEyL2NyeXB0by9lcnIvZXJyX2FsbC5jLmZpcHMJMjAxMS0wNi0yMSAxODo1ODoxMC4w MDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9lcnIvZXJyX2Fs bC5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTM0MzkzNjQ5ICswMTAwCi1AQCAtOTYsNiArOTYsOSBA QAotICNpbmNsdWRlIDxvcGVuc3NsL29jc3AuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K LSAjaW5jbHVkZSA8b3BlbnNzbC90cy5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVk ZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0NNUwotICNp bmNsdWRlIDxvcGVuc3NsL2Ntcy5oPgotICNlbmRpZgotQEAgLTE1Myw2ICsxNTYsOSBAQCB2b2lk IEVSUl9sb2FkX2NyeXB0b19zdHJpbmdzKHZvaWQpCi0gI2VuZGlmCi0gCUVSUl9sb2FkX09DU1Bf c3RyaW5ncygpOwotIAlFUlJfbG9hZF9VSV9zdHJpbmdzKCk7Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwlFUlJfbG9hZF9GSVBTX3N0cmluZ3MoKTsKLSsjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xf Tk9fQ01TCi0gCUVSUl9sb2FkX0NNU19zdHJpbmdzKCk7Ci0gI2VuZGlmCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAvY19hbGxjLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJl dGEyL2NyeXB0by9ldnAvY19hbGxjLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9l dnAvY19hbGxjLmMuZmlwcwkyMDExLTExLTE0IDIyOjEzOjM1LjAwMDAwMDAwMCArMDEwMAotKysr IG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9jX2FsbGMuYwkyMDEyLTAyLTA3IDExOjA3 OjAyLjUzNDM5MzY0OSArMDEwMAotQEAgLTY1LDYgKzY1LDExIEBACi0gdm9pZCBPcGVuU1NMX2Fk ZF9hbGxfY2lwaGVycyh2b2lkKQotIAl7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlPUEVO U1NMX2luaXRfbGlicmFyeSgpOwotKwlpZighRklQU19tb2RlKCkpIAotKwkJewotKyNlbmRpZgot ICNpZm5kZWYgT1BFTlNTTF9OT19ERVMKLSAJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19jZmIoKSk7 Ci0gCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfY2ZiMSgpKTsKLUBAIC0yMjcsNCArMjMyLDYwIEBA IHZvaWQgT3BlblNTTF9hZGRfYWxsX2NpcGhlcnModm9pZCkKLSAJRVZQX2FkZF9jaXBoZXJfYWxp YXMoU05fY2FtZWxsaWFfMjU2X2NiYywiQ0FNRUxMSUEyNTYiKTsKLSAJRVZQX2FkZF9jaXBoZXJf YWxpYXMoU05fY2FtZWxsaWFfMjU2X2NiYywiY2FtZWxsaWEyNTYiKTsKLSAjZW5kaWYKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rCQl9Ci0rCWVsc2UKLSsJCXsKLSsjaWZuZGVmIE9QRU5TU0xfTk9f REVTCi0rCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlX2NmYigpKTsKLSsJRVZQX2FkZF9jaXBo ZXIoRVZQX2Rlc19lZGUzX2NmYigpKTsKLSsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGVf b2ZiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfb2ZiKCkpOwotKwotKwlFVlBf YWRkX2NpcGhlcihFVlBfZGVzX2VkZV9jYmMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNf ZWRlM19jYmMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Rlc19lZGUzX2NiYywiREVT MyIpOwotKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9kZXNfZWRlM19jYmMsImRlczMiKTsKLSsK LSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9k ZXNfZWRlMygpKTsKLSsjZW5kaWYKLSsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fQUVTCi0rCUVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2VjYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18x MjhfY2JjKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jZmIoKSk7Ci0rCUVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NmYjEoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNf MTI4X2NmYjgoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X29mYigpKTsKLSsJRVZQ X2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY3RyKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzEyOF9nY20oKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X3h0cygpKTsKLSsJRVZQ X2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzEyOF9jYmMsIkFFUzEyOCIpOwotKwlFVlBfYWRkX2Np cGhlcl9hbGlhcyhTTl9hZXNfMTI4X2NiYywiYWVzMTI4Iik7Ci0rCUVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMTkyX2VjYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2JjKCkpOwot KwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jZmIoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMTkyX2NmYjEoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NmYjgoKSk7 Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX29mYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18xOTJfY3RyKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9nY20oKSk7 Ci0rCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xOTJfY2JjLCJBRVMxOTIiKTsKLSsJRVZQ X2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzE5Ml9jYmMsImFlczE5MiIpOwotKwlFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzI1Nl9lY2IoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2Ni YygpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2ZiKCkpOwotKwlFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzI1Nl9jZmIxKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9j ZmI4KCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9vZmIoKSk7Ci0rCUVWUF9hZGRf Y2lwaGVyKEVWUF9hZXNfMjU2X2N0cigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZf Z2NtKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl94dHMoKSk7Ci0rCUVWUF9hZGRf Y2lwaGVyX2FsaWFzKFNOX2Flc18yNTZfY2JjLCJBRVMyNTYiKTsKLSsJRVZQX2FkZF9jaXBoZXJf YWxpYXMoU05fYWVzXzI1Nl9jYmMsImFlczI1NiIpOwotKyNlbmRpZgotKwkJfQotKyNlbmRpZgot IAl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAvY19hbGxkLmMuZmlw cyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAvY19hbGxkLmMKLS0tLSBvcGVuc3NsLTEu MC4xLWJldGEyL2NyeXB0by9ldnAvY19hbGxkLmMuZmlwcwkyMDA5LTA3LTA4IDEwOjUwOjUzLjAw MDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9jX2FsbGQu YwkyMDEyLTAyLTA3IDExOjA3OjAyLjUzNDM5MzY0OSArMDEwMAotQEAgLTY0LDYgKzY0LDExIEBA Ci0gCi0gdm9pZCBPcGVuU1NMX2FkZF9hbGxfZGlnZXN0cyh2b2lkKQotIAl7Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOwotKwlpZiAoIUZJUFNfbW9kZSgp KQotKwkJewotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19NRDQKLSAJRVZQX2FkZF9kaWdl c3QoRVZQX21kNCgpKTsKLSAjZW5kaWYKLUBAIC0xMTEsNCArMTE2LDMyIEBAIHZvaWQgT3BlblNT TF9hZGRfYWxsX2RpZ2VzdHModm9pZCkKLSAjaWZuZGVmIE9QRU5TU0xfTk9fV0hJUkxQT09MCi0g CUVWUF9hZGRfZGlnZXN0KEVWUF93aGlybHBvb2woKSk7Ci0gI2VuZGlmCi0rI2lmZGVmIE9QRU5T U0xfRklQUwotKwkJfQotKwllbHNlCi0rCQl7Ci0rI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hB KSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTEpCi0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEx KCkpOwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExLCJzc2wzLXNoYTEiKTsKLSsJRVZQ X2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMVdpdGhSU0FFbmNyeXB0aW9uLFNOX3NoYTFXaXRoUlNB KTsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fRFNBCi0rCUVWUF9hZGRfZGlnZXN0KEVWUF9kc3MxKCkp OwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSxTTl9kc2FXaXRoU0hBMV8y KTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsIkRTUzEiKTsKLSsJRVZQ X2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsImRzczEiKTsKLSsjZW5kaWYKLSsjaWZu ZGVmIE9QRU5TU0xfTk9fRUNEU0EKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX2VjZHNhKCkpOwotKyNl bmRpZgotKyNlbmRpZgotKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYKLSsJRVZQX2FkZF9kaWdl c3QoRVZQX3NoYTIyNCgpKTsKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTI1NigpKTsKLSsjZW5k aWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCi0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEz ODQoKSk7Ci0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGE1MTIoKSk7Ci0rI2VuZGlmCi0rCQl9Ci0r I2VuZGlmCi0gCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9kaWdl c3QuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9kaWdlc3QuYwotLS0tIG9w ZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9kaWdlc3QuYy5maXBzCTIwMTEtMDUtMjkgMTc6 NTU6MTMuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZw L2RpZ2VzdC5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTM1MzkzNjU3ICswMTAwCi1AQCAtMTQyLDkg KzE0Miw1MCBAQCBpbnQgRVZQX0RpZ2VzdEluaXQoRVZQX01EX0NUWCAqY3R4LCBjb25zCi0gCXJl dHVybiBFVlBfRGlnZXN0SW5pdF9leChjdHgsIHR5cGUsIE5VTEwpOwotIAl9Ci0gCi0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwotKy8qIFRoZSBwdXJwb3NlIG9mIHRoZXNlIGlzIHRvIHRyYXAgcHJv Z3JhbXMgdGhhdCBhdHRlbXB0IHRvIHVzZSBub24gRklQUwotKyAqIGFsZ29yaXRobXMgaW4gRklQ UyBtb2RlIGFuZCBpZ25vcmUgdGhlIGVycm9ycy4KLSsgKi8KLSsKLStzdGF0aWMgaW50IGJhZF9p bml0KEVWUF9NRF9DVFggKmN0eCkKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCBpbml0 Iik7IHJldHVybiAwO30KLSsKLStzdGF0aWMgaW50IGJhZF91cGRhdGUoRVZQX01EX0NUWCAqY3R4 LGNvbnN0IHZvaWQgKmRhdGEsc2l6ZV90IGNvdW50KQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgi RGlnZXN0IHVwZGF0ZSIpOyByZXR1cm4gMDt9Ci0rCi0rc3RhdGljIGludCBiYWRfZmluYWwoRVZQ X01EX0NUWCAqY3R4LHVuc2lnbmVkIGNoYXIgKm1kKQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgi RGlnZXN0IEZpbmFsIik7IHJldHVybiAwO30KLSsKLStzdGF0aWMgY29uc3QgRVZQX01EIGJhZF9t ZCA9Ci0rCXsKLSsJMCwKLSsJMCwKLSsJMCwKLSsJMCwKLSsJYmFkX2luaXQsCi0rCWJhZF91cGRh dGUsCi0rCWJhZF9maW5hbCwKLSsJTlVMTCwKLSsJTlVMTCwKLSsJTlVMTCwKLSsJMCwKLSsJezAs MCwwLDB9LAotKwl9OwotKwotKyNlbmRpZgotKwotIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBf TURfQ1RYICpjdHgsIGNvbnN0IEVWUF9NRCAqdHlwZSwgRU5HSU5FICppbXBsKQotIAl7Ci0gCUVW UF9NRF9DVFhfY2xlYXJfZmxhZ3MoY3R4LEVWUF9NRF9DVFhfRkxBR19DTEVBTkVEKTsKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlG SVBTZXJyKEZJUFNfRl9FVlBfRElHRVNUSU5JVF9FWCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlM RUQpOwotKwkJY3R4LT5kaWdlc3QgPSAmYmFkX21kOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rI2Vu ZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotIAkvKiBXaGV0aGVyIGl0J3MgbmljZSBv ciBub3QsICJJbml0cyIgY2FuIGJlIHVzZWQgb24gIkZpbmFsIidkIGNvbnRleHRzCi0gCSAqIHNv IHRoaXMgY29udGV4dCBtYXkgYWxyZWFkeSBoYXZlIGFuIEVOR0lORSEgVHJ5IHRvIGF2b2lkIHJl bGVhc2luZwotQEAgLTIwMSw2ICsyNDIsMTggQEAgaW50IEVWUF9EaWdlc3RJbml0X2V4KEVWUF9N RF9DVFggKmN0eCwgYwotICNlbmRpZgotIAlpZiAoY3R4LT5kaWdlc3QgIT0gdHlwZSkKLSAJCXsK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQlpZiAoRklQU19tb2RlKCkpCi0rCQkJewotKwkJCWlm ICghKHR5cGUtPmZsYWdzICYgRVZQX01EX0ZMQUdfRklQUykgCi0rCQkJICYmICEoY3R4LT5mbGFn cyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykpCi0rCQkJCXsKLSsJCQkJRVZQZXJy KEVWUF9GX0VWUF9ESUdFU1RJTklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7Ci0rCQkJ CWN0eC0+ZGlnZXN0ID0gJmJhZF9tZDsKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJCX0KLSsJCQl9Ci0r I2VuZGlmCi0gCQlpZiAoY3R4LT5kaWdlc3QgJiYgY3R4LT5kaWdlc3QtPmN0eF9zaXplKQotIAkJ CU9QRU5TU0xfZnJlZShjdHgtPm1kX2RhdGEpOwotIAkJY3R4LT5kaWdlc3Q9dHlwZTsKLUBAIC0y MjksMjYgKzI4MiwxNSBAQCBza2lwX3RvX2luaXQ6Ci0gCQl9Ci0gCWlmIChjdHgtPmZsYWdzICYg RVZQX01EX0NUWF9GTEFHX05PX0lOSVQpCi0gCQlyZXR1cm4gMTsKLS0jaWZkZWYgT1BFTlNTTF9G SVBTCi0tCWlmIChGSVBTX21vZGUoKSkKLS0JCXsKLS0JCWlmIChGSVBTX2RpZ2VzdGluaXQoY3R4 LCB0eXBlKSkKLS0JCQlyZXR1cm4gMTsKLS0JCU9QRU5TU0xfZnJlZShjdHgtPm1kX2RhdGEpOwot LQkJY3R4LT5tZF9kYXRhID0gTlVMTDsKLS0JCXJldHVybiAwOwotLQkJfQotLSNlbmRpZgotIAly ZXR1cm4gY3R4LT5kaWdlc3QtPmluaXQoY3R4KTsKLSAJfQotIAotIGludCBFVlBfRGlnZXN0VXBk YXRlKEVWUF9NRF9DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGNvdW50KQotIAl7 Ci0gI2lmZGVmIE9QRU5TU0xfRklQUwotLQlyZXR1cm4gRklQU19kaWdlc3R1cGRhdGUoY3R4LCBk YXRhLCBjb3VudCk7Ci0tI2Vsc2UKLS0JcmV0dXJuIGN0eC0+dXBkYXRlKGN0eCxkYXRhLGNvdW50 KTsKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotICNlbmRpZgotKwlyZXR1cm4gY3R4LT51cGRh dGUoY3R4LGRhdGEsY291bnQpOwotIAl9Ci0gCi0gLyogVGhlIGNhbGxlciBjYW4gYXNzdW1lIHRo YXQgdGhpcyByZW1vdmVzIGFueSBzZWNyZXQgZGF0YSBmcm9tIHRoZSBjb250ZXh0ICovCi1AQCAt MjYzLDEwICszMDUsMTEgQEAgaW50IEVWUF9EaWdlc3RGaW5hbChFVlBfTURfQ1RYICpjdHgsIHVu cwotIC8qIFRoZSBjYWxsZXIgY2FuIGFzc3VtZSB0aGF0IHRoaXMgcmVtb3ZlcyBhbnkgc2VjcmV0 IGRhdGEgZnJvbSB0aGUgY29udGV4dCAqLwotIGludCBFVlBfRGlnZXN0RmluYWxfZXgoRVZQX01E X0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICptZCwgdW5zaWduZWQgaW50ICpzaXplKQotIAl7Ci0t I2lmZGVmIE9QRU5TU0xfRklQUwotLQlyZXR1cm4gRklQU19kaWdlc3RmaW5hbChjdHgsIG1kLCBz aXplKTsKLS0jZWxzZQotIAlpbnQgcmV0OwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19z ZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotKwotIAlPUEVOU1NMX2Fzc2VydChjdHgtPmRpZ2Vz dC0+bWRfc2l6ZSA8PSBFVlBfTUFYX01EX1NJWkUpOwotIAlyZXQ9Y3R4LT5kaWdlc3QtPmZpbmFs KGN0eCxtZCk7Ci0gCWlmIChzaXplICE9IE5VTEwpCi1AQCAtMjc4LDcgKzMyMSw2IEBAIGludCBF VlBfRGlnZXN0RmluYWxfZXgoRVZQX01EX0NUWCAqY3R4LAotIAkJfQotIAltZW1zZXQoY3R4LT5t ZF9kYXRhLDAsY3R4LT5kaWdlc3QtPmN0eF9zaXplKTsKLSAJcmV0dXJuIHJldDsKLS0jZW5kaWYK LSAJfQotIAotIGludCBFVlBfTURfQ1RYX2NvcHkoRVZQX01EX0NUWCAqb3V0LCBjb25zdCBFVlBf TURfQ1RYICppbikKLUBAIC0zNzIsNyArNDE0LDYgQEAgdm9pZCBFVlBfTURfQ1RYX2Rlc3Ryb3ko RVZQX01EX0NUWCAqY3R4KQotIC8qIFRoaXMgY2FsbCBmcmVlcyByZXNvdXJjZXMgYXNzb2NpYXRl ZCB3aXRoIHRoZSBjb250ZXh0ICovCi0gaW50IEVWUF9NRF9DVFhfY2xlYW51cChFVlBfTURfQ1RY ICpjdHgpCi0gCXsKLS0jaWZuZGVmIE9QRU5TU0xfRklQUwotIAkvKiBEb24ndCBhc3N1bWUgY3R4 LT5tZF9kYXRhIHdhcyBjbGVhbmVkIGluIEVWUF9EaWdlc3RfRmluYWwsCi0gCSAqIGJlY2F1c2Ug c29tZXRpbWVzIG9ubHkgY29waWVzIG9mIHRoZSBjb250ZXh0IGFyZSBldmVyIGZpbmFsaXNlZC4K LSAJICovCi1AQCAtMzg1LDcgKzQyNiw2IEBAIGludCBFVlBfTURfQ1RYX2NsZWFudXAoRVZQX01E X0NUWCAqY3R4KQotIAkJT1BFTlNTTF9jbGVhbnNlKGN0eC0+bWRfZGF0YSxjdHgtPmRpZ2VzdC0+ Y3R4X3NpemUpOwotIAkJT1BFTlNTTF9mcmVlKGN0eC0+bWRfZGF0YSk7Ci0gCQl9Ci0tI2VuZGlm Ci0gCWlmIChjdHgtPnBjdHgpCi0gCQlFVlBfUEtFWV9DVFhfZnJlZShjdHgtPnBjdHgpOwotICNp Zm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLUBAIC0zOTQsOSArNDM0LDYgQEAgaW50IEVWUF9NRF9D VFhfY2xlYW51cChFVlBfTURfQ1RYICpjdHgpCi0gCQkgKiBmdW5jdGlvbmFsIHJlZmVyZW5jZSB3 ZSBoZWxkIGZvciB0aGlzIHJlYXNvbi4gKi8KLSAJCUVOR0lORV9maW5pc2goY3R4LT5lbmdpbmUp OwotICNlbmRpZgotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JRklQU19tZF9jdHhfY2xlYW51cChj dHgpOwotLSNlbmRpZgotIAltZW1zZXQoY3R4LCdcMCcsc2l6ZW9mICpjdHgpOwotIAotIAlyZXR1 cm4gMTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9lX2Flcy5jLmZp cHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL2VfYWVzLmMKLS0tLSBvcGVuc3NsLTEu MC4xLWJldGEyL2NyeXB0by9ldnAvZV9hZXMuYy5maXBzCTIwMTEtMTEtMTUgMTM6MTk6NTYuMDAw MDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL2VfYWVzLmMJ MjAxMi0wMi0wNyAxMTowNzowMi41MzUzOTM2NTcgKzAxMDAKLUBAIC01Niw3ICs1Niw2IEBACi0g I2luY2x1ZGUgPGFzc2VydC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotICNpbmNsdWRl ICJldnBfbG9jbC5oIgotLSNpZm5kZWYgT1BFTlNTTF9GSVBTCi0gI2luY2x1ZGUgIm1vZGVzX2xj bC5oIgotICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSAKLUBAIC03MTYsNyArNzE1LDcgQEAg c3RhdGljIGludCBhZXNfZ2NtX2N0cmwoRVZQX0NJUEhFUl9DVFggKgotIAkJaWYgKGFyZyA8PSAw KQotIAkJCXJldHVybiAwOwotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JCWlmIChGSVBTX21vZHVs ZV9tb2RlKCkgJiYgIShjLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0r CQlpZiAoRklQU19tb2RlKCkgJiYgIShjLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNf QUxMT1cpCi0gCQkJCQkJICYmIGFyZyA8IDEyKQotIAkJCXJldHVybiAwOwotICNlbmRpZgotQEAg LTExMjgsNyArMTEyNyw3IEBAIHN0YXRpYyBpbnQgYWVzX3h0c19jaXBoZXIoRVZQX0NJUEhFUl9D VFgKLSAJCXJldHVybiAwOwotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLSAJLyogUmVxdWlyZW1lbnQg b2YgU1A4MDAtMzhFICovCi0tCWlmIChGSVBTX21vZHVsZV9tb2RlKCkgJiYgIShjdHgtPmZsYWdz ICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykgJiYKLSsJaWYgKEZJUFNfbW9kZSgpICYm ICEoY3R4LT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpICYmCi0gCQkJKGxl biA+ICgxVUw8PDIwKSoxNikpCi0gCQl7Ci0gCQlFVlBlcnIoRVZQX0ZfQUVTX1hUU19DSVBIRVIs IEVWUF9SX1RPT19MQVJHRSk7Ci1AQCAtMTMxMCw0ICsxMzA5LDMgQEAgQkxPQ0tfQ0lQSEVSX2N1 c3RvbShOSURfYWVzLDE5MiwxLDEyLGNjbQotIEJMT0NLX0NJUEhFUl9jdXN0b20oTklEX2Flcywy NTYsMSwxMixjY20sQ0NNLEVWUF9DSVBIX0ZMQUdfRklQU3xDVVNUT01fRkxBR1MpCi0gCi0gI2Vu ZGlmCi0tI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAvZV9k ZXMzLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAvZV9kZXMzLmMKLS0tLSBv cGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAvZV9kZXMzLmMuZmlwcwkyMDExLTA1LTI5IDAx OjAxOjI2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2 cC9lX2RlczMuYwkyMDEyLTAyLTA3IDExOjA3OjAyLjUzNTM5MzY1NyArMDEwMAotQEAgLTY1LDgg KzY1LDYgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9y YW5kLmg+Ci0gCi0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLS0KLSBzdGF0aWMgaW50IGRlc19lZGVf aW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAot IAkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdixpbnQgZW5jKTsKLSAKLUBAIC0yMDgsOSAr MjA2LDkgQEAgc3RhdGljIGludCBkZXNfZWRlM19jZmI4X2NpcGhlcihFVlBfQ0lQSAotICAgICB9 Ci0gCi0gQkxPQ0tfQ0lQSEVSX2RlZnMoZGVzX2VkZSwgREVTX0VERV9LRVksIE5JRF9kZXNfZWRl LCA4LCAxNiwgOCwgNjQsCi0tCQkJRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGVfaW5pdF9rZXks IE5VTEwsIAotLQkJCUVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkJRVZQX0NJUEhFUl9nZXRf YXNuMV9pdiwKLSsJCUVWUF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQ SF9GTEFHX0RFRkFVTFRfQVNOMSwKLSsJCQlkZXNfZWRlX2luaXRfa2V5LAotKwkJCU5VTEwsIE5V TEwsIE5VTEwsCi0gCQkJZGVzM19jdHJsKQotIAotICNkZWZpbmUgZGVzX2VkZTNfY2ZiNjRfY2lw aGVyIGRlc19lZGVfY2ZiNjRfY2lwaGVyCi1AQCAtMjE5LDIxICsyMTcsMjEgQEAgQkxPQ0tfQ0lQ SEVSX2RlZnMoZGVzX2VkZSwgREVTX0VERV9LRVksCi0gI2RlZmluZSBkZXNfZWRlM19lY2JfY2lw aGVyIGRlc19lZGVfZWNiX2NpcGhlcgotIAotIEJMT0NLX0NJUEhFUl9kZWZzKGRlc19lZGUzLCBE RVNfRURFX0tFWSwgTklEX2Rlc19lZGUzLCA4LCAyNCwgOCwgNjQsCi0tCQkJRVZQX0NJUEhfUkFO RF9LRVksIGRlc19lZGUzX2luaXRfa2V5LCBOVUxMLCAKLS0JCQlFVlBfQ0lQSEVSX3NldF9hc24x X2l2LAotLQkJCUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0rCQlFVlBfQ0lQSF9SQU5EX0tFWXxF VlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCi0rCQkJZGVzX2Vk ZTNfaW5pdF9rZXksCi0rCQkJTlVMTCwgTlVMTCwgTlVMTCwKLSAJCQlkZXMzX2N0cmwpCi0gCi0g QkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9LRVksTklEX2Rlc19lZGUzLDI0 LDgsMSwKLS0JCSAgICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LE5VTEws Ci0tCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkgICAgIEVWUF9DSVBIRVJfZ2V0 X2FzbjFfaXYsCi0rCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJ UEhfRkxBR19ERUZBVUxUX0FTTjEsCi0rCQkgICAgIGRlc19lZGUzX2luaXRfa2V5LAotKwkJICAg ICBOVUxMLCBOVUxMLCBOVUxMLAotIAkJICAgICBkZXMzX2N0cmwpCi0gCi0gQkxPQ0tfQ0lQSEVS X2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9LRVksTklEX2Rlc19lZGUzLDI0LDgsOCwKLS0JCSAg ICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LE5VTEwsCi0tCQkgICAgIEVW UF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0r CQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZB VUxUX0FTTjEsCi0rCQkgICAgIGRlc19lZGUzX2luaXRfa2V5LAotKwkJICAgICBOVUxMLCBOVUxM LCBOVUxMLAotIAkJICAgICBkZXMzX2N0cmwpCi0gCi0gc3RhdGljIGludCBkZXNfZWRlX2luaXRf a2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKLUBAIC0z MTMsNCArMzExLDMgQEAgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Rlc19lZGUzKHZvaWQpCi0gCXJl dHVybiAmZGVzX2VkZTNfZWNiOwotIH0KLSAjZW5kaWYKLS0jZW5kaWYKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9lX251bGwuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0 YTIvY3J5cHRvL2V2cC9lX251bGwuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2 cC9lX251bGwuYy5maXBzCTIwMTEtMDYtMjAgMjI6MDA6MTAuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL2VfbnVsbC5jCTIwMTItMDItMDcgMTE6MDc6 MDIuNTM1MzkzNjU3ICswMTAwCi1AQCAtNjEsOCArNjEsNiBAQAotICNpbmNsdWRlIDxvcGVuc3Ns L2V2cC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KLSAKLS0jaWZuZGVmIE9QRU5T U0xfRklQUwotLQotIHN0YXRpYyBpbnQgbnVsbF9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4 LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCi0gCWNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LGlu dCBlbmMpOwotIHN0YXRpYyBpbnQgbnVsbF9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5z aWduZWQgY2hhciAqb3V0LAotQEAgLTcxLDcgKzY5LDcgQEAgc3RhdGljIGNvbnN0IEVWUF9DSVBI RVIgbl9jaXBoZXI9Ci0gCXsKLSAJTklEX3VuZGVmLAotIAkxLDAsMCwKLS0JMCwKLSsJRVZQX0NJ UEhfRkxBR19GSVBTLAotIAludWxsX2luaXRfa2V5LAotIAludWxsX2NpcGhlciwKLSAJTlVMTCwK LUBAIC0xMDEsNCArOTksMyBAQCBzdGF0aWMgaW50IG51bGxfY2lwaGVyKEVWUF9DSVBIRVJfQ1RY ICpjCi0gCQltZW1jcHkoKGNoYXIgKilvdXQsKGNvbnN0IGNoYXIgKilpbixpbmwpOwotIAlyZXR1 cm4gMTsKLSAJfQotLSNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8v ZXZwL2V2cF9lbmMuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9ldnBfZW5j LmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAvZXZwX2VuYy5jLmZpcHMJMjAx MS0xMC0xMyAxNTo0MjoyOS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEy L2NyeXB0by9ldnAvZXZwX2VuYy5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTM2MzkzNjY1ICswMTAw Ci1AQCAtNjksMTcgKzY5LDU4IEBACi0gI2VuZGlmCi0gI2luY2x1ZGUgImV2cF9sb2NsLmgiCi0g Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLSNkZWZpbmUgTV9kb19jaXBoZXIoY3R4LCBvdXQsIGlu LCBpbmwpIEZJUFNfY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKQotLSNlbHNlCi0gI2RlZmluZSBN X2RvX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCkgY3R4LT5jaXBoZXItPmRvX2NpcGhlcihjdHgs IG91dCwgaW4sIGlubCkKLS0jZW5kaWYKLSAKLSAKLSBjb25zdCBjaGFyIEVWUF92ZXJzaW9uW109 IkVWUCIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsK LSsvKiBUaGUgcHVycG9zZSBvZiB0aGVzZSBpcyB0byB0cmFwIHByb2dyYW1zIHRoYXQgYXR0ZW1w dCB0byB1c2Ugbm9uIEZJUFMKLSsgKiBhbGdvcml0aG1zIGluIEZJUFMgbW9kZSBhbmQgaWdub3Jl IHRoZSBlcnJvcnMuCi0rICovCi0rCi0rc3RhdGljIGludCBiYWRfaW5pdChFVlBfQ0lQSEVSX0NU WCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCi0rCQkgICAgY29uc3QgdW5zaWduZWQg Y2hhciAqaXYsIGludCBlbmMpCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgaW5pdCIp OyByZXR1cm4gMDt9Ci0rCi0rc3RhdGljIGludCBiYWRfZG9fY2lwaGVyKEVWUF9DSVBIRVJfQ1RY ICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLSsJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqaW4s IHVuc2lnbmVkIGludCBpbmwpCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgdXBkYXRl Iik7IHJldHVybiAwO30KLSsKLSsvKiBOQjogbm8gY2xlYW51cCBiZWNhdXNlIGl0IGlzIGFsbG93 ZWQgYWZ0ZXIgZmFpbGVkIGluaXQgKi8KLSsKLStzdGF0aWMgaW50IGJhZF9zZXRfYXNuMShFVlBf Q0lQSEVSX0NUWCAqY3R4LCBBU04xX1RZUEUgKnR5cCkKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQo IkNpcGhlciBzZXRfYXNuMSIpOyByZXR1cm4gMDt9Ci0rc3RhdGljIGludCBiYWRfZ2V0X2FzbjEo RVZQX0NJUEhFUl9DVFggKmN0eCwgQVNOMV9UWVBFICp0eXApCi0rCXsgRklQU19FUlJPUl9JR05P UkVEKCJDaXBoZXIgZ2V0X2FzbjEiKTsgcmV0dXJuIDA7fQotK3N0YXRpYyBpbnQgYmFkX2N0cmwo RVZQX0NJUEhFUl9DVFggKmN0eCwgaW50IHR5cGUsIGludCBhcmcsIHZvaWQgKnB0cikKLSsJeyBG SVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBjdHJsIik7IHJldHVybiAwO30KLSsKLStzdGF0aWMg Y29uc3QgRVZQX0NJUEhFUiBiYWRfY2lwaGVyID0KLSsJewotKwkwLAotKwkwLAotKwkwLAotKwkw LAotKwkwLAotKwliYWRfaW5pdCwKLSsJYmFkX2RvX2NpcGhlciwKLSsJTlVMTCwKLSsJMCwKLSsJ YmFkX3NldF9hc24xLAotKwliYWRfZ2V0X2FzbjEsCi0rCWJhZF9jdHJsLAotKwlOVUxMCi0rCX07 Ci0rCi0rI2VuZGlmCi0rCi0gdm9pZCBFVlBfQ0lQSEVSX0NUWF9pbml0KEVWUF9DSVBIRVJfQ1RY ICpjdHgpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2so KTsKLSsjZW5kaWYKLSAJbWVtc2V0KGN0eCwwLHNpemVvZihFVlBfQ0lQSEVSX0NUWCkpOwotIAkv KiBjdHgtPmNpcGhlcj1OVUxMOyAqLwotIAl9Ci1AQCAtMTExLDYgKzE1MiwxNCBAQCBpbnQgRVZQ X0NpcGhlckluaXRfZXgoRVZQX0NJUEhFUl9DVFggKmN0Ci0gCQkJZW5jID0gMTsKLSAJCWN0eC0+ ZW5jcnlwdCA9IGVuYzsKLSAJCX0KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2Vs ZnRlc3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9F WCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJY3R4LT5jaXBoZXIgPSAmYmFkX2Np cGhlcjsKLSsJCXJldHVybiAwOwotKwkJfQotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19F TkdJTkUKLSAJLyogV2hldGhlciBpdCdzIG5pY2Ugb3Igbm90LCAiSW5pdHMiIGNhbiBiZSB1c2Vk IG9uICJGaW5hbCInZCBjb250ZXh0cwotIAkgKiBzbyB0aGlzIGNvbnRleHQgbWF5IGFscmVhZHkg aGF2ZSBhbiBFTkdJTkUhIFRyeSB0byBhdm9pZCByZWxlYXNpbmcKLUBAIC0xNjUsOSArMjE0LDYg QEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpjdAotIAkJCWN0eC0+ZW5n aW5lID0gTlVMTDsKLSAjZW5kaWYKLSAKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCQlyZXR1cm4g RklQU19jaXBoZXJpbml0KGN0eCwgY2lwaGVyLCBrZXksIGl2LCBlbmMpOwotLSNlbHNlCi0gCQlj dHgtPmNpcGhlcj1jaXBoZXI7Ci0gCQlpZiAoY3R4LT5jaXBoZXItPmN0eF9zaXplKQotIAkJCXsK LUBAIC0xOTIsNyArMjM4LDYgQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBIRVJfQ1RY ICpjdAotIAkJCQlyZXR1cm4gMDsKLSAJCQkJfQotIAkJCX0KLS0jZW5kaWYKLSAJCX0KLSAJZWxz ZSBpZighY3R4LT5jaXBoZXIpCi0gCQl7Ci1AQCAtMjAyLDkgKzI0Nyw2IEBAIGludCBFVlBfQ2lw aGVySW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5F Ci0gc2tpcF90b19pbml0OgotICNlbmRpZgotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JcmV0dXJu IEZJUFNfY2lwaGVyaW5pdChjdHgsIGNpcGhlciwga2V5LCBpdiwgZW5jKTsKLS0jZWxzZQotIAkv KiB3ZSBhc3N1bWUgYmxvY2sgc2l6ZSBpcyBhIHBvd2VyIG9mIDIgaW4gKmNyeXB0VXBkYXRlICov Ci0gCU9QRU5TU0xfYXNzZXJ0KGN0eC0+Y2lwaGVyLT5ibG9ja19zaXplID09IDEKLSAJICAgIHx8 IGN0eC0+Y2lwaGVyLT5ibG9ja19zaXplID09IDgKLUBAIC0yNDQsNiArMjg2LDIyIEBAIHNraXBf dG9faW5pdDoKLSAJCX0KLSAJfQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJLyogQWZ0ZXIg J2tleScgaXMgc2V0IG5vIGZ1cnRoZXIgcGFyYW1ldGVycyBjaGFuZ2VzIGFyZSBwZXJtaXNzaWJs ZS4KLSsJICogU28gb25seSBjaGVjayBmb3Igbm9uIEZJUFMgZW5hYmxpbmcgYXQgdGhpcyBwb2lu dC4KLSsJICovCi0rCWlmIChrZXkgJiYgRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZiAoIShjdHgt PmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0ZJUFMpCi0rCQkJJiAhKGN0eC0+ZmxhZ3Mg JiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKSkKLSsJCQl7Ci0rCQkJRVZQZXJyKEVWUF9G X0VWUF9DSVBIRVJJTklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7Ci0rCQkJY3R4LT5j aXBoZXIgPSAmYmFkX2NpcGhlcjsKLSsJCQlyZXR1cm4gMDsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlm Ci0rCi0gCWlmKGtleSB8fCAoY3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfQUxXQVlTX0NB TExfSU5JVCkpIHsKLSAJCWlmKCFjdHgtPmNpcGhlci0+aW5pdChjdHgsa2V5LGl2LGVuYykpIHJl dHVybiAwOwotIAl9Ci1AQCAtMjUxLDcgKzMwOSw2IEBAIHNraXBfdG9faW5pdDoKLSAJY3R4LT5m aW5hbF91c2VkPTA7Ci0gCWN0eC0+YmxvY2tfbWFzaz1jdHgtPmNpcGhlci0+YmxvY2tfc2l6ZS0x OwotIAlyZXR1cm4gMTsKLS0jZW5kaWYKLSAJfQotIAotIGludCBFVlBfQ2lwaGVyVXBkYXRlKEVW UF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgaW50ICpvdXRsLAotQEAgLTU2 NCw3ICs2MjEsNiBAQCB2b2lkIEVWUF9DSVBIRVJfQ1RYX2ZyZWUoRVZQX0NJUEhFUl9DVFgKLSAK LSBpbnQgRVZQX0NJUEhFUl9DVFhfY2xlYW51cChFVlBfQ0lQSEVSX0NUWCAqYykKLSAJewotLSNp Zm5kZWYgT1BFTlNTTF9GSVBTCi0gCWlmIChjLT5jaXBoZXIgIT0gTlVMTCkKLSAJCXsKLSAJCWlm KGMtPmNpcGhlci0+Y2xlYW51cCAmJiAhYy0+Y2lwaGVyLT5jbGVhbnVwKGMpKQotQEAgLTU3NSwx NiArNjMxLDEyIEBAIGludCBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKEVWUF9DSVBIRVJfQ1QKLSAJ CX0KLSAJaWYgKGMtPmNpcGhlcl9kYXRhKQotIAkJT1BFTlNTTF9mcmVlKGMtPmNpcGhlcl9kYXRh KTsKLS0jZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0gCWlmIChjLT5lbmdpbmUp Ci0gCQkvKiBUaGUgRVZQX0NJUEhFUiB3ZSB1c2VkIGJlbG9uZ3MgdG8gYW4gRU5HSU5FLCByZWxl YXNlIHRoZQotIAkJICogZnVuY3Rpb25hbCByZWZlcmVuY2Ugd2UgaGVsZCBmb3IgdGhpcyByZWFz b24uICovCi0gCQlFTkdJTkVfZmluaXNoKGMtPmVuZ2luZSk7Ci0gI2VuZGlmCi0tI2lmZGVmIE9Q RU5TU0xfRklQUwotLQlGSVBTX2NpcGhlcl9jdHhfY2xlYW51cChjKTsKLS0jZW5kaWYKLSAJbWVt c2V0KGMsMCxzaXplb2YoRVZQX0NJUEhFUl9DVFgpKTsKLSAJcmV0dXJuIDE7Ci0gCX0KLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9ldnAuaC5maXBzIG9wZW5zc2wtMS4w LjEtYmV0YTIvY3J5cHRvL2V2cC9ldnAuaAotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRv L2V2cC9ldnAuaC5maXBzCTIwMTItMDItMDcgMTE6MDc6MDIuMjg4MzkxNjAyICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL2V2cC5oCTIwMTItMDItMDcgMTE6MDc6MDIu NTM2MzkzNjY1ICswMTAwCi1AQCAtNzUsNiArNzUsMTAgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9i aW8uaD4KLSAjZW5kaWYKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgotKyNlbmRpZgotKwotIC8qCi0gI2RlZmluZSBFVlBfUkMyX0tFWV9TSVpFCQkx NgotICNkZWZpbmUgRVZQX1JDNF9LRVlfU0laRQkJMTYKLUBAIC0yNzIsMTAgKzI3Niw2IEBAIHN0 cnVjdCBlbnZfbWRfY3R4X3N0Ci0gCQkJCQkJKiBjbGVhbmVkICovCi0gI2RlZmluZSBFVlBfTURf Q1RYX0ZMQUdfUkVVU0UJCTB4MDAwNCAvKiBEb24ndCBmcmVlIHVwIGN0eC0+bWRfZGF0YQotIAkJ CQkJCSogaW4gRVZQX01EX0NUWF9jbGVhbnVwICovCi0tLyogRklQUyBhbmQgcGFkIG9wdGlvbnMg YXJlIGlnbm9yZWQgaW4gMS4wLjAsIGRlZmluaXRpb25zIGFyZSBoZXJlCi0tICogc28gd2UgZG9u J3QgYWNjaWRlbnRhbGx5IHJldXNlIHRoZSB2YWx1ZXMgZm9yIG90aGVyIHB1cnBvc2VzLgotLSAq LwotLQotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XCTB4MDAwOAkvKiBB bGxvdyB1c2Ugb2Ygbm9uIEZJUFMgZGlnZXN0Ci0gCQkJCQkJICogaW4gRklQUyBtb2RlICovCi0g Ci1AQCAtMjg3LDYgKzI4NywxMCBAQCBzdHJ1Y3QgZW52X21kX2N0eF9zdAotICNkZWZpbmUgRVZQ X01EX0NUWF9GTEFHX1BBRF9QS0NTMQkweDAwCS8qIFBLQ1MjMSB2MS41IG1vZGUgKi8KLSAjZGVm aW5lIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMQkweDEwCS8qIFg5LjMxIG1vZGUgKi8KLSAjZGVm aW5lIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTCQkweDIwCS8qIFBTUyBtb2RlICovCi0rI2RlZmlu ZSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpIFwKLSsJCSgoY3R4LT5mbGFncz4+MTYp ICYweEZGRkYpIC8qIHNlZWQgbGVuZ3RoICovCi0rI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUFNT X01ETEVOCTB4RkZGRgkvKiBzYWx0IGxlbiBzYW1lIGFzIGRpZ2VzdCAqLwotKyNkZWZpbmUgRVZQ X01EX0NUWF9GTEFHX1BTU19NUkVDCTB4RkZGRQkvKiBzYWx0IG1heCBvciBhdXRvIHJlY292ZXJl ZCAqLwotIAotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX05PX0lOSVQJCTB4MDEwMCAvKiBEb24n dCBpbml0aWFsaXplIG1kX2RhdGEgKi8KLSAKLUBAIC0zMzgsMTUgKzM0MiwxNSBAQCBzdHJ1Y3Qg ZXZwX2NpcGhlcl9zdAotIC8qIGNpcGhlciBoYW5kbGVzIHJhbmRvbSBrZXkgZ2VuZXJhdGlvbiAq LwotICNkZWZpbmUgCUVWUF9DSVBIX1JBTkRfS0VZCQkweDIwMAotIC8qIGNpcGhlciBoYXMgaXRz IG93biBhZGRpdGlvbmFsIGNvcHlpbmcgbG9naWMgKi8KLS0jZGVmaW5lIAlFVlBfQ0lQSF9DVVNU T01fQ09QWQkJMHg0MDAKLSsjZGVmaW5lIAlFVlBfQ0lQSF9DVVNUT01fQ09QWQkJMHg0MDAwCi0g LyogQWxsb3cgdXNlIGRlZmF1bHQgQVNOMSBnZXQvc2V0IGl2ICovCi0gI2RlZmluZQkJRVZQX0NJ UEhfRkxBR19ERUZBVUxUX0FTTjEJMHgxMDAwCi0gLyogQnVmZmVyIGxlbmd0aCBpbiBiaXRzIG5v dCBieXRlczogQ0ZCMSBtb2RlIG9ubHkgKi8KLSAjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0xFTkdU SF9CSVRTCTB4MjAwMAotIC8qIE5vdGUgaWYgc3VpdGFibGUgZm9yIHVzZSBpbiBGSVBTIG1vZGUg Ki8KLS0jZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0ZJUFMJCTB4NDAwMAotKyNkZWZpbmUJCUVWUF9D SVBIX0ZMQUdfRklQUwkJMHg0MDAKLSAvKiBBbGxvdyBub24gRklQUyBjaXBoZXIgaW4gRklQUyBt b2RlICovCi0tI2RlZmluZQkJRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVwkweDgwMDAKLSsj ZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XCTB4ODAwCi0gLyogQ2lwaGVyIGhh bmRsZXMgYW55IGFuZCBhbGwgcGFkZGluZyBsb2dpYyBhcyB3ZWxsCi0gICogYXMgZmluYWxpc2F0 aW9uLgotICAqLwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL2V2cF9s aWIuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9ldnBfbGliLmMKLS0tLSBv cGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAvZXZwX2xpYi5jLmZpcHMJMjAxMS0wNS0yOSAw NDozMjowNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9l dnAvZXZwX2xpYi5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTM3MzkzNjczICswMTAwCi1AQCAtMTkw LDYgKzE5MCw5IEBAIGludCBFVlBfQ0lQSEVSX0NUWF9ibG9ja19zaXplKGNvbnN0IEVWUF8KLSAK LSBpbnQgRVZQX0NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQs IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQotIAl7Ci0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCXJldHVy biBjdHgtPmNpcGhlci0+ZG9fY2lwaGVyKGN0eCxvdXQsaW4saW5sKTsKLSAJfQotIAotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL2V2cF9sb2NsLmguZmlwcyBvcGVuc3Ns LTEuMC4xLWJldGEyL2NyeXB0by9ldnAvZXZwX2xvY2wuaAotLS0tIG9wZW5zc2wtMS4wLjEtYmV0 YTIvY3J5cHRvL2V2cC9ldnBfbG9jbC5oLmZpcHMJMjAxMi0wMi0wNyAxMTowNzowMi4yNzkzOTE1 MjcgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAvZXZwX2xvY2wuaAky MDEyLTAyLTA3IDExOjA3OjAyLjUzNzM5MzY3MyArMDEwMAotQEAgLTI1OCwxMCArMjU4LDkgQEAg Y29uc3QgRVZQX0NJUEhFUiAqRVZQXyMjY25hbWUjI19lY2Iodm9pZAotIAlCTE9DS19DSVBIRVJf ZnVuY19jZmIoY2lwaGVyIyNfIyNrZXlzaXplLGNwcmVmaXgsY2JpdHMsa3N0cnVjdCxrc2NoZWQp IFwKLSAJQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoY2lwaGVyIyNfIyNrZXlzaXplLGtzdHJ1Y3QsIFwK LSAJCQkgICAgIE5JRF8jI2NpcGhlciMjXyMja2V5c2l6ZSwga2V5c2l6ZS84LCBpdl9sZW4sIGNi aXRzLCBcCi0tCQkJICAgICAwLCBjaXBoZXIjI19pbml0X2tleSwgTlVMTCwgXAotLQkJCSAgICAg RVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwgXAotLQkJCSAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9p diwgXAotLQkJCSAgICAgTlVMTCkKLSsJCQkgICAgIEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04x LCBcCi0rCQkJICAgICBjaXBoZXIjI19pbml0X2tleSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkK LSsKLSAKLSBzdHJ1Y3QgZXZwX3BrZXlfY3R4X3N0Ci0gCXsKLUBAIC0zNjcsMTEgKzM2Niw2IEBA IGludCBQS0NTNV92Ml9QQktERjJfa2V5aXZnZW4oRVZQX0NJUEhFUl8KLSAjZGVmaW5lIE1EMl9J bml0CXByaXZhdGVfTUQyX0luaXQKLSAjZGVmaW5lIE1EQzJfSW5pdAlwcml2YXRlX01EQzJfSW5p dAotICNkZWZpbmUgU0hBX0luaXQJcHJpdmF0ZV9TSEFfSW5pdAotLSNkZWZpbmUgU0hBMV9Jbml0 CXByaXZhdGVfU0hBMV9Jbml0Ci0tI2RlZmluZSBTSEEyMjRfSW5pdAlwcml2YXRlX1NIQTIyNF9J bml0Ci0tI2RlZmluZSBTSEEyNTZfSW5pdAlwcml2YXRlX1NIQTI1Nl9Jbml0Ci0tI2RlZmluZSBT SEEzODRfSW5pdAlwcml2YXRlX1NIQTM4NF9Jbml0Ci0tI2RlZmluZSBTSEE1MTJfSW5pdAlwcml2 YXRlX1NIQTUxMl9Jbml0Ci0gCi0gI2RlZmluZSBCRl9zZXRfa2V5CXByaXZhdGVfQkZfc2V0X2tl eQotICNkZWZpbmUgQ0FTVF9zZXRfa2V5CXByaXZhdGVfQ0FTVF9zZXRfa2V5Ci1AQCAtMzc5LDcg KzM3Myw2IEBAIGludCBQS0NTNV92Ml9QQktERjJfa2V5aXZnZW4oRVZQX0NJUEhFUl8KLSAjZGVm aW5lIFNFRURfc2V0X2tleQlwcml2YXRlX1NFRURfc2V0X2tleQotICNkZWZpbmUgUkMyX3NldF9r ZXkJcHJpdmF0ZV9SQzJfc2V0X2tleQotICNkZWZpbmUgUkM0X3NldF9rZXkJcHJpdmF0ZV9SQzRf c2V0X2tleQotLSNkZWZpbmUgREVTX3NldF9rZXlfdW5jaGVja2VkCXByaXZhdGVfREVTX3NldF9r ZXlfdW5jaGVja2VkCi0gI2RlZmluZSBDYW1lbGxpYV9zZXRfa2V5CXByaXZhdGVfQ2FtZWxsaWFf c2V0X2tleQotIAotICNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8v ZXZwL01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL01ha2VmaWxl Ci0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL01ha2VmaWxlLmZpcHMJMjAxMS0x Mi0yNyAxNTozODoyNy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2Ny eXB0by9ldnAvTWFrZWZpbGUJMjAxMi0wMi0wNyAxMTowNzowMi41MzgzOTM2ODEgKzAxMDAKLUBA IC0yOCw3ICsyOCw3IEBAIExJQlNSQz0gZW5jb2RlLmMgZGlnZXN0LmMgZXZwX2VuYy5jIGV2cF8K LSAJYmlvX21kLmMgYmlvX2I2NC5jIGJpb19lbmMuYyBldnBfZXJyLmMgZV9udWxsLmMgXAotIAlj X2FsbC5jIGNfYWxsYy5jIGNfYWxsZC5jIGV2cF9saWIuYyBiaW9fb2suYyBcCi0gCWV2cF9wa2V5 LmMgZXZwX3BiZS5jIHA1X2NycHQuYyBwNV9jcnB0Mi5jIFwKLS0JZV9vbGQuYyBwbWV0aF9saWIu YyBwbWV0aF9mbi5jIHBtZXRoX2duLmMgbV9zaWd2ZXIuYyBldnBfZmlwcy5jCVwKLSsJZV9vbGQu YyBwbWV0aF9saWIuYyBwbWV0aF9mbi5jIHBtZXRoX2duLmMgbV9zaWd2ZXIuYyBcCi0gCWVfYWVz X2NiY19obWFjX3NoYTEuYyBlX3JjNF9obWFjX21kNS5jCi0gCi0gTElCT0JKPQllbmNvZGUubyBk aWdlc3QubyBldnBfZW5jLm8gZXZwX2tleS5vIGV2cF9hY25mLm8gXAotQEAgLTQxLDcgKzQxLDcg QEAgTElCT0JKPQllbmNvZGUubyBkaWdlc3QubyBldnBfZW5jLm8gZXZwXwotIAliaW9fbWQubyBi aW9fYjY0Lm8gYmlvX2VuYy5vIGV2cF9lcnIubyBlX251bGwubyBcCi0gCWNfYWxsLm8gY19hbGxj Lm8gY19hbGxkLm8gZXZwX2xpYi5vIGJpb19vay5vIFwKLSAJZXZwX3BrZXkubyBldnBfcGJlLm8g cDVfY3JwdC5vIHA1X2NycHQyLm8gXAotLQllX29sZC5vIHBtZXRoX2xpYi5vIHBtZXRoX2ZuLm8g cG1ldGhfZ24ubyBtX3NpZ3Zlci5vIGV2cF9maXBzLm8gXAotKwllX29sZC5vIHBtZXRoX2xpYi5v IHBtZXRoX2ZuLm8gcG1ldGhfZ24ubyBtX3NpZ3Zlci5vIFwKLSAJZV9hZXNfY2JjX2htYWNfc2hh MS5vIGVfcmM0X2htYWNfbWQ1Lm8KLSAKLSBTUkM9ICQoTElCU1JDKQotQEAgLTEwMyw0NCArMTAz LDQ2IEBAIGJpb19iNjQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3AKLSBiaW9fYjY0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVm ZmVyLmgKLSBiaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZV9vczIuaAotIGJpb19iNjQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotLWJpb19iNjQubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotLWJp b19iNjQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbGNvbmYuaAotLWJpb19iNjQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLS1iaW9fYjY0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3Rh Y2suaAotLWJpb19iNjQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5 cHRsaWIuaCBiaW9fYjY0LmMKLStiaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBz LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStiaW9fYjY0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2Jp b19iNjQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2x2LmgKLStiaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v c3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2Jpb19iNjQubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhh Y2tzLmgKLStiaW9fYjY0Lm86IC4uL2NyeXB0bGliLmggYmlvX2I2NC5jCi0gYmlvX2VuYy5vOiAu Li8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotIGJpb19lbmMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAot IGJpb19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lX29zMi5oCi0gYmlvX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0tYmlvX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0tYmlvX2VuYy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3NsY29uZi5oCi0tYmlvX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotLWJpb19lbmMubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0t YmlvX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5o IGJpb19lbmMuYwotK2Jpb19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2Jpb19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rYmlvX2VuYy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbHYuaAotK2Jpb19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlw LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rYmlvX2VuYy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAot K2Jpb19lbmMubzogLi4vY3J5cHRsaWIuaCBiaW9fZW5jLmMKLSBiaW9fbWQubzogLi4vLi4vZV9v cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jp by5oCi0gYmlvX21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvY3J5cHRvLmgKLSBiaW9fbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vf b3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0tYmlvX21kLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotLWJpb19tZC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v YmplY3RzLmgKLS1iaW9fbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLS1iaW9fbWQubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0t YmlvX21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zeW1oYWNrcy5oCi0tYmlvX21kLm86IC4uL2NyeXB0bGliLmggYmlvX21kLmMKLStiaW9f bWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9m aXBzLmgKLStiaW9fbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2Jpb19tZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rYmlvX21kLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v c3NsX3R5cC5oCi0rYmlvX21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2Jpb19tZC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGJpb19tZC5jCi0gYmlvX29rLm86IC4uLy4u L2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9iaW8uaAotIGJpb19vay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0gYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotLWJpb19vay5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLS1iaW9f b2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oCi0tYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29u Zi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0tYmlvX29rLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLS1i aW9fb2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zdGFjay5oCi0tYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNr cy5oIC4uL2NyeXB0bGliLmggYmlvX29rLmMKLStiaW9fb2subzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStiaW9fb2subzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAot K2Jpb19vay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rYmlvX29rLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFj ay5oCi0rYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi0rYmlvX29rLm86IC4uL2NyeXB0bGliLmggYmlvX29rLmMK LSBjX2FsbC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLSBjX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0tY19hbGwubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLS1jX2Fs bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l Y2RzYS5oCi0tY19hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lcnIuaAotLWNfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2NfYWxsLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAotK2NfYWxsLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgK LStjX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9saGFzaC5oCi0gY19hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0gY19hbGwubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLSBj X2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvcGtjczcuaAotQEAgLTE1MCw5ICsxNTIsOCBAQCBjX2FsbC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wveDUwOS5oIC4uCi0gY19hbGwubzogLi4vY3J5cHRsaWIuaCBjX2FsbC5jCi0gY19h bGxjLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9iaW8uaAotIGNfYWxsYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVm ZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0tY19hbGxjLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi0tY19hbGxj Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vj ZHNhLmgKLS1jX2FsbGMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9ldnAuaAotK2NfYWxsYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStjX2FsbGMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLSBjX2FsbGMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMu aAotIGNfYWxsYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0gY19hbGxjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1AQCAtMTYzLDkg KzE2NCw4IEBAIGNfYWxsYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4KLSBjX2Fs bGMubzogLi4vY3J5cHRsaWIuaCBjX2FsbGMuYwotIGNfYWxsZC5vOiAuLi8uLi9lX29zLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLSBj X2FsbGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9jcnlwdG8uaAotLWNfYWxsZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotLWNfYWxsZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi0tY19hbGxkLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStjX2Fs bGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vyci5oCi0rY19hbGxkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZmlwcy5oCi0gY19hbGxkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFz aC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLSBjX2FsbGQubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYu aAotIGNfYWxsZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3NzbF90eXAuaAotQEAgLTE3NiwxMCArMTc2LDkgQEAgY19hbGxkLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLgotIGNfYWxsZC5vOiAuLi9jcnlwdGxpYi5oIGNf YWxsZC5jCi0gZGlnZXN0Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNu MS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotIGRpZ2VzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0tZGlnZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l Yy5oCi0tZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2VjZHNhLmgKLS1kaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2lu ZS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotLWRpZ2VzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStkaWdlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2lu ZS5oCi0rZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXZwLmgKLStkaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotIGRpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLSBkaWdlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2x2LmgKLSBkaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlw LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLUBAIC0xOTAsMTggKzE4OSwxOSBAQCBk aWdlc3QubzogLi4vY3J5cHRsaWIuaCBkaWdlc3QuYwotIGVfYWVzLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0gZV9hZXMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAot IGVfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lcnIuaAotLWVfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvbGhhc2guaAotLWVfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9t b2Rlcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLS1lX2Flcy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29u Zi5oCi0tZV9hZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLS1lX2Flcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv cmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotLWVfYWVzLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5o Ci0tZV9hZXMubzogLi4vbW9kZXMvbW9kZXNfbGNsLmggZV9hZXMuYyBldnBfbG9jbC5oCi0rZV9h ZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9m aXBzLmgKLStlX2Flcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvbW9kZXMuaAotK2VfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpf bWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2VfYWVzLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns di5oCi0rZV9hZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3JhbmQuaAotK2VfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZl c3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2VfYWVzLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL21vZGVzL21vZGVzX2xjbC5oIGVfYWVzLmMKLStl X2Flcy5vOiBldnBfbG9jbC5oCi0gZV9hZXNfY2JjX2htYWNfc2hhMS5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotIGVfYWVzX2NiY19o bWFjX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0gZV9hZXNfY2JjX2htYWNf c2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLSBlX2Flc19jYmNfaG1hY19z aGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0tZV9hZXNfY2JjX2htYWNfc2hh MS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStlX2Flc19jYmNfaG1hY19zaGExLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5o Ci0gZV9hZXNfY2JjX2htYWNfc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5o Ci0gZV9hZXNfY2JjX2htYWNfc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5o Ci0gZV9hZXNfY2JjX2htYWNfc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNv bmYuaAotQEAgLTIxMSwyMCArMjExLDIzIEBAIGVfYWVzX2NiY19obWFjX3NoYTEubzogLi4vLi4v aW5jbHVkZS9vcGUKLSBlX2Flc19jYmNfaG1hY19zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zaGEuaAotIGVfYWVzX2NiY19obWFjX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0 YWNrLmgKLSBlX2Flc19jYmNfaG1hY19zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1o YWNrcy5oIGVfYWVzX2NiY19obWFjX3NoYTEuYwotK2VfYWVzX2NiY19obWFjX3NoYTEubzogZXZw X2xvY2wuaAotIGVfYmYubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24x LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0gZV9iZi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYmxvd2Zpc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLSBlX2JmLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9v czIuaAotIGVfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9ldnAuaAotLWVfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotLWVfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotLWVfYmYu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29zc2xfdHlwLmgKLS1lX2JmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotLWVfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBlX2JmLmMgZXZwX2xvY2wuaAotK2VfYmYubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2gu aAotK2VfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb2JqZWN0cy5oCi0rZV9iZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2VfYmYubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFj ay5oCi0rZV9iZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc3ltaGFja3MuaAotK2VfYmYubzogLi4vY3J5cHRsaWIuaCBlX2JmLmMgZXZwX2xv Y2wuaAotIGVfY2FtZWxsaWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYmlvLmgKLSBlX2NhbWVsbGlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9jYW1lbGxpYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotIGVfY2FtZWxsaWEu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vy ci5oCi0tZV9jYW1lbGxpYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2xoYXNoLmgKLS1lX2NhbWVsbGlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2VfY2FtZWxsaWEu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBz LmgKLStlX2NhbWVsbGlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStlX2NhbWVsbGlhLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmplY3RzLmgKLSBlX2NhbWVsbGlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3NsY29uZi5oCi0gZV9jYW1lbGxpYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotIGVfY2FtZWxsaWEubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5o Ci1AQCAtMjMzLDc0ICsyMzYsODAgQEAgZV9jYXN0Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNs dWRlL29wZQotIGVfY2FzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Nhc3QuaAotIGVfY2FzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Y3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLSBlX2Nhc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotLWVfY2Fz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqX21hYy5oCi0tZV9jYXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLS1lX2Nhc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLS1l X2Nhc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zdGFjay5oCi0tZV9jYXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNr cy5oIC4uL2NyeXB0bGliLmggZV9jYXN0LmMgZXZwX2xvY2wuaAotK2VfY2FzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZV9j YXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29iamVjdHMuaAotK2VfY2FzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNv bmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2VfY2FzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNr LmgKLStlX2Nhc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3N5bWhhY2tzLmgKLStlX2Nhc3QubzogLi4vY3J5cHRsaWIuaCBlX2Nhc3QuYyBl dnBfbG9jbC5oCi0gZV9kZXMubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h c24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0gZV9kZXMubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotIGVfZGVz Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVz X29sZC5oCi0gZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vyci5oCi0tZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0tZV9kZXMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0tZV9kZXMu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2x2LmgKLS1lX2Rlcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi0tZV9kZXMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0tZV9kZXMu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3VpLmgKLS1lX2Rlcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWlfY29tcGF0LmggLi4vY3J5 cHRsaWIuaCBlX2Rlcy5jIGV2cF9sb2NsLmgKLStlX2Rlcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2VfZGVzLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStl X2Rlcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3NsY29uZi5oCi0rZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5z c2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLStlX2Rlcy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAot K2VfZGVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zeW1oYWNrcy5oCi0rZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3VpX2NvbXBhdC5oCi0rZV9kZXMubzogLi4vY3J5cHRsaWIuaCBl X2Rlcy5jIGV2cF9sb2NsLmgKLSBlX2RlczMubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0gZV9kZXMzLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRv LmgKLSBlX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlcy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9kZXNfb2xkLmgKLSBlX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3My LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0tZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotLWVfZGVzMy5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpl Y3RzLmgKLS1lX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLS1lX2RlczMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotLWVfZGVzMy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N0YWNrLmgKLS1lX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3VpLmgKLS1lX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3VpX2NvbXBhdC5oIC4uL2NyeXB0bGliLmggZV9kZXMzLmMgZXZwX2xvY2wuaAotK2VfZGVzMy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMu aAotK2VfZGVzMy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb2JqX21hYy5oCi0rZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpl Y3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStlX2RlczMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xf dHlwLmgKLStlX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStlX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLStlX2RlczMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3VpLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpX2NvbXBhdC5o Ci0rZV9kZXMzLm86IC4uL2NyeXB0bGliLmggZV9kZXMzLmMgZXZwX2xvY2wuaAotIGVfaWRlYS5v OiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYmlvLmgKLSBlX2lkZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotIGVfaWRlYS5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLS1lX2lkZWEubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9pZGVhLmgK LS1lX2lkZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29ial9tYWMuaAotLWVfaWRlYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0 cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0tZV9pZGVhLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5 cC5oCi0tZV9pZGVhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3RhY2suaAotLWVfaWRlYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGVfaWRlYS5jIGV2cF9sb2NsLmgKLStlX2lkZWEubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgK LStlX2lkZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2lkZWEuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvbGhhc2guaAotK2VfaWRlYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStlX2lkZWEubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgK LStlX2lkZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZV9pZGVhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z dGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi0rZV9pZGVhLm86IC4uL2Ny eXB0bGliLmggZV9pZGVhLmMgZXZwX2xvY2wuaAotIGVfbnVsbC5vOiAuLi8uLi9lX29zLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLSBl X251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9jcnlwdG8uaAotIGVfbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLS1lX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0tZV9udWxsLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMu aAotLWVfbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotLWVfbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLS1lX251bGwu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5 bWhhY2tzLmgKLS1lX251bGwubzogLi4vY3J5cHRsaWIuaCBlX251bGwuYwotK2VfbnVsbC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAot K2VfbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqX21hYy5oCi0rZV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3Rz LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStlX251bGwubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlw LmgKLStlX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z eW1oYWNrcy5oIC4uL2NyeXB0bGliLmggZV9udWxsLmMKLSBlX29sZC5vOiBlX29sZC5jCi0gZV9y YzIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Jpby5oCi0gZV9yYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZl ci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotIGVfcmMyLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotLWVfcmMyLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2gu aAotLWVfcmMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29iamVjdHMuaAotLWVfcmMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0tZV9yYzIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JjMi5o Ci0tZV9yYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zdGFjay5oCi0tZV9yYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhh Y2tzLmggLi4vY3J5cHRsaWIuaCBlX3JjMi5jIGV2cF9sb2NsLmgKLStlX3JjMi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2VfcmMy Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v YmpfbWFjLmgKLStlX3JjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZV9yYzIubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLStlX3Jj Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmMyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Nh ZmVzdGFjay5oCi0rZV9yYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLStlX3JjMi5vOiAuLi9jcnlwdGxpYi5oIGVfcmMy LmMgZXZwX2xvY2wuaAotIGVfcmM0Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotIGVfcmM0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLSBl X3JjNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXJyLmgKLS1lX3JjNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2xoYXNoLmgKLS1lX3JjNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq X21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLS1lX3JjNC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bHYuaAotLWVfcmM0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9yYzQuaAotLWVfcmM0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZl c3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotLWVfcmM0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggZV9yYzQuYyBldnBfbG9jbC5o Ci0rZV9yYzQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9maXBzLmgKLStlX3JjNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZV9yYzQubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2VfcmM0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vc3NsX3R5cC5oCi0rZV9yYzQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JjNC5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2VfcmM0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi0rZV9yYzQubzog Li4vY3J5cHRsaWIuaCBlX3JjNC5jIGV2cF9sb2NsLmgKLSBlX3JjNF9obWFjX21kNS5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotIGVf cmM0X2htYWNfbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZV9vczIuaAotLWVfcmM0X2htYWNfbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbWQ1LmgKLS1lX3JjNF9obWFjX21kNS5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZV9yYzRfaG1hY19tZDUubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStl X3JjNF9obWFjX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbWQ1LmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29ial9tYWMuaAotIGVfcmM0X2htYWNfbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmplY3RzLmgKLSBlX3JjNF9obWFjX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbGNvbmYuaAotIGVfcmM0X2htYWNfbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3Nsdi5oCi1AQCAtMzA4LDI5ICszMTcsMjQgQEAgZV9yYzRfaG1hY19tZDUubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsLwotIGVfcmM0X2htYWNfbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zYWZlc3RhY2suaAotIGVfcmM0X2htYWNfbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z dGFjay5oCi0gZV9yYzRfaG1hY19tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tz LmggZV9yYzRfaG1hY19tZDUuYwotLWVfcmM1Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYmlvLmgKLS1lX3JjNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0tZV9yYzUubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0tZV9yYzUubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xj b25mLmgKLS1lX3JjNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotLWVfcmM1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotLWVfcmM1Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggZV9yYzUuYwotK2Vf cmM1Lm86IGVfcmM1LmMKLSBlX3NlZWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLSBlX3NlZWQubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0gZV9zZWVkLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLS1l X3NlZWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29ial9tYWMuaAotLWVfc2VlZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0tZV9zZWVkLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5o Ci0tZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc2VlZC5oCi0tZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFj ay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi0tZV9zZWVkLm86IGVfc2VlZC5j IGV2cF9sb2NsLmgKLStlX3NlZWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2Vfc2VlZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStlX3NlZWQubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2x2LmgKLStlX3NlZWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZV9zZWVkLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zZWVkLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStlX3NlZWQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZV9zZWVkLmMgZXZwX2xvY2wuaAot IGVfeGNiY19kLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0g ZV94Y2JjX2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9idWZmZXIuaAotIGVfeGNiY19kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8u aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzLmgKLSBlX3hjYmNfZC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZGVzX29sZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0gZV94Y2Jj X2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l dnAuaAotLWVfeGNiY19kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLS1lX3hjYmNfZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZV94Y2Jj X2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv bGhhc2guaAotK2VfeGNiY19kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2VfeGNiY19kLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3NsY29uZi5oCi0gZV94Y2JjX2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLSBlX3hjYmNfZC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N0YWNrLmgKLSBlX3hjYmNfZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvdWkuaAotQEAgLTMzOSwyOCArMzQzLDI3IEBAIGVfeGNiY19k Lm86IGV2cF9sb2NsLmgKLSBlbmNvZGUubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0gZW5jb2RlLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgK LSBlbmNvZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oCi0tZW5jb2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotLWVuY29kZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLS1lbmNvZGUubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2x2LmgKLS1lbmNvZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0tZW5jb2RlLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi0tZW5j b2RlLm86IC4uL2NyeXB0bGliLmggZW5jb2RlLmMKLStlbmNvZGUubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStlbmNvZGUubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMu aAotK2VuY29kZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZW5jb2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZW5jb2RlLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3RhY2suaAotK2VuY29kZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9j cnlwdGxpYi5oIGVuY29kZS5jCi0gZXZwX2FjbmYubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9hc24xLmgKLSBldnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlv LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi0gZXZwX2FjbmYubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2NvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLSBldnBf YWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXJyLmgKLS1ldnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLS1ldnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLS1ldnBfYWNuZi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2V2cF9hY25mLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZXZw X2FjbmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29ial9tYWMuaAotK2V2cF9hY25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3Rz LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLSBldnBfYWNuZi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90 eXAuaAotIGV2cF9hY25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotIGV2cF9hY25mLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggZXZwX2FjbmYuYwotIGV2cF9lbmMubzogLi4v Li4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLSBldnBfZW5jLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLSBl dnBfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZV9vczIuaAotLWV2cF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotLWV2cF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCi0tZXZwX2VuYy5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0r ZXZwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oCi0rZXZwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotIGV2cF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotIGV2cF9lbmMubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbGNvbmYuaAotIGV2cF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2Lmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLUBAIC0zNzIsMjQgKzM3NSwxNyBAQCBl dnBfZW5jLm86IC4uL2NyeXB0bGliLmggZXZwX2VuYy5jIGV2cF9sCi0gZXZwX2Vyci5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotIGV2 cF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lX29zMi5oCi0gZXZwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0tZXZwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0tZXZwX2Vyci5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3NsY29uZi5oCi0tZXZwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotLWV2cF9lcnIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0tZXZw X2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBldnBfZXJyLmMKLS1ldnBf Zmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9iaW8uaAotLWV2cF9maXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotLWV2cF9maXBzLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0tZXZwX2ZpcHMubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbGNvbmYuaAotLWV2cF9maXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0tZXZwX2ZpcHMubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0t ZXZwX2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZXZwX2ZpcHMuYwot K2V2cF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvbGhhc2guaAotK2V2cF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZXZwX2Vyci5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYu aAotK2V2cF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZXZwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotK2V2cF9lcnIubzog ZXZwX2Vyci5jCi0gZXZwX2tleS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2FzbjEuaAotIGV2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotIGV2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0tZXZwX2tleS5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi0tZXZw X2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXJyLmgKLS1ldnBfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2V2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK2V2cF9rZXkubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotIGV2cF9r ZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oCi0gZXZwX2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNv bmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotIGV2cF9rZXkubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgK LUBAIC00MDEsMTcgKzM5NywxNyBAQCBldnBfbGliLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNs dWRlL29wCi0gZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2J1ZmZlci5oCi0gZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Y3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLSBldnBfbGliLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLS1ldnBf bGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmpfbWFjLmgKLS1ldnBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLS1ldnBfbGliLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5o Ci0tZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N0YWNrLmgKLS1ldnBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z eW1oYWNrcy5oIC4uL2NyeXB0bGliLmggZXZwX2xpYi5jCi0rZXZwX2xpYi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZXZwX2xp Yi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmgKLStldnBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29u Zi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZXZwX2xpYi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNr LmgKLStldnBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi0rZXZwX2xpYi5vOiAuLi9jcnlwdGxpYi5oIGV2cF9saWIu YwotIGV2cF9wYmUubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgK LSBldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYnVmZmVyLmgKLSBldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8u aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotLWV2cF9wYmUubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotLWV2cF9wYmUubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5o Ci0tZXZwX3BiZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2xoYXNoLmgKLStldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLSBldnBfcGJlLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVj dHMuaAotIGV2cF9wYmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLSBldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzMTIuaAotQEAgLTQy Miw5ICs0MTgsOCBAQCBldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmCi0g ZXZwX3BrZXkubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLSBl dnBfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2J1ZmZlci5oCi0gZXZwX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0tZXZwX3BrZXkubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotLWV2cF9wa2V5Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIu aAotLWV2cF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvbGhhc2guaAotK2V2cF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStldnBfcGtleS5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0gZXZwX3BrZXku bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqZWN0cy5oCi0gZXZwX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25m LmgKLSBldnBfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotQEAgLTQzNiw5ICs0MzEsOCBAQCBldnBfcGtleS5v OiAuLi9hc24xL2FzbjFfbG9jbC5oIC4uL2NyeXB0Ci0gbV9kc3MubzogLi4vLi4vZV9vcy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0g bV9kc3MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9jcnlwdG8uaAotIG1fZHNzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotLW1fZHNzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLS1tX2Rzcy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLS1tX2Rzcy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNo LmgKLSttX2Rzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2V2cC5oCi0rbV9kc3MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotIG1fZHNzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotIG1fZHNzLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3Nsdi5oCi0gbV9kc3MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLUBAIC00NDksOSArNDQzLDggQEAgbV9kc3Mubzog Li4vY3J5cHRsaWIuaCBtX2Rzcy5jCi0gbV9kc3MxLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotIG1fZHNzMS5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Ny eXB0by5oCi0gbV9kc3MxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZV9vczIuaAotLW1fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi0tbV9kc3MxLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotLW1fZHNzMS5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgK LSttX2RzczEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9ldnAuaAotK21fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0gbV9kc3MxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotIG1fZHNzMS5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbHYuaAotIG1fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotQEAgLTQ1OSwzMSArNDUyLDIzIEBAIG1fZHNz MS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWMKLSBtX2RzczEubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLSBt X2RzczEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wveDUwOV92ZnkuaAotIG1fZHNzMS5vOiAuLi9jcnlwdGxpYi5oIG1fZHNzMS5jCi0tbV9lY2Rz YS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotLW1fZWNkc2Eu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZm ZXIuaAotLW1fZWNkc2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0tbV9lY2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi0tbV9lY2RzYS5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLS1tX2VjZHNh Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhh c2guaAotLW1fZWNkc2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0tbV9lY2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotLW1fZWNk c2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3BrY3M3LmgKLS1tX2VjZHNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2su aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLS1tX2VjZHNhLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi0tbV9lY2Rz YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94 NTA5X3ZmeS5oCi0tbV9lY2RzYS5vOiAuLi9jcnlwdGxpYi5oIG1fZWNkc2EuYwotLW1fbWQyLm86 IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLSttX2VjZHNhLm86IG1f ZWNkc2EuYwotK21fbWQyLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNu MS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotIG1fbWQyLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLSBtX21kMi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJy LmgKLS1tX21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbGNvbmYuaAotLW1fbWQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0tbV9tZDIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFj ay5oCi0tbV9tZDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRs aWIuaCBtX21kMi5jCi0rbV9tZDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLSttX21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv bGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbWQyLmgKLSttX21kMi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStt X21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbHYuaAotK21fbWQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3Ns X3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi0rbV9tZDIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3JzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK21f bWQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3RhY2suaAotK21fbWQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLSttX21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv eDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIGV2cF9sb2NsLmggbV9tZDIuYwotIG1fbWQ0Lm86IC4u Ly4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9iaW8uaAotIG1fbWQ0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLS1tX21kNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotLW1fbWQ0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLS1tX21k NC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2 cC5oCi0rbV9tZDQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vyci5oCi0rbV9tZDQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLSBtX21kNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbWQ0LmgKLSBtX21kNC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgK LSBtX21kNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3BlbnNzbHYuaAotQEAgLTQ5NCw5ICs0NzksOCBAQCBtX21kNC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuCi0gbV9tZDQubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCBldnBfbG9jbC5oIG1fbWQ0LmMKLSBtX21kNS5v OiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYmlvLmgKLSBtX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0tbV9tZDUubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLS1tX21kNS5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi0t bV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9ldnAuaAotK21fbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lcnIuaAotK21fbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0gbV9tZDUubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL21kNS5oCi0gbV9tZDUubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0 cy5oCi0gbV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLUBAIC01MDUsMjYgKzQ4OSwxNyBAQCBtX21kNS5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4vCi0gbV9tZDUubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0gbV9tZDUubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1 MDkuaAotIG1fbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0 bGliLmggZXZwX2xvY2wuaCBtX21kNS5jCi0tbV9tZGMyLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotK21fbWRj Mi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0gbV9tZGMyLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5 cHRvLmgKLS1tX21kYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlcy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9kZXNfb2xkLmgKLS1tX21kYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vf b3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLS1tX21kYzIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotLW1fbWRjMi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5o Ci0tbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9tZGMyLmgKLS1tX21kYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0tbV9tZGMyLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5o Ci0tbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9wa2NzNy5oCi0tbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2Eu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLS1tX21kYzIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0tbV9tZGMy Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC91aS5oCi0tbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aV9jb21wYXQuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi0tbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggZXZwX2xvY2wuaCBtX21kYzIuYwotK21fbWRjMi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJy LmgKLSttX21kYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLSttX21kYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLSttX21kYzIubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z dGFjay5oCi0rbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2Ny eXB0bGliLmggbV9tZGMyLmMKLSBtX251bGwubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0gbV9udWxsLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRv LmgKLS1tX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2VjLmgKLS1tX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotLW1fbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rbV9udWxsLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK21f bnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2ZpcHMuaAotIG1fbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0gbV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLSBtX251bGwu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29zc2xfdHlwLmgKLUBAIC01MzUsOSArNTEwLDggQEAgbV9udWxsLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC94NTA5X3ZmeQotIG1fcmlwZW1kLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYXNuMS5oCi0gbV9yaXBlbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotIG1fcmlwZW1kLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotLW1fcmlw ZW1kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l Y2RoLmgKLS1tX3JpcGVtZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXJyLmgKLS1tX3JpcGVtZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLSttX3JpcGVtZC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rbV9yaXBl bWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv bGhhc2guaAotIG1fcmlwZW1kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotIG1fcmlwZW1kLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3NsY29uZi5oCi0gbV9yaXBlbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLUBAIC01NDksOSAr NTIzLDggQEAgbV9yaXBlbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdgotIG1fcmlw ZW1kLm86IG1fcmlwZW1kLmMKLSBtX3NoYS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLSBtX3NoYS5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5o Ci0tbV9zaGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2VjLmgKLS1tX3NoYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi0tbV9zaGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK21fc2hhLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK21fc2hhLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5o Ci0gbV9zaGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29ial9tYWMuaAotIG1fc2hhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3Rz LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLSBtX3NoYS5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAu aAotQEAgLTU2Miw5ICs1MzUsOCBAQCBtX3NoYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUw OS5oIC4uCi0gbV9zaGEubzogLi4vY3J5cHRsaWIuaCBldnBfbG9jbC5oIG1fc2hhLmMKLSBtX3No YTEubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Jpby5oCi0gbV9zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZm ZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLS1tX3NoYTEubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLS1tX3NoYTEu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNk c2EuaAotLW1fc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2V2cC5oCi0rbV9zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK21fc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotIG1fc2hhMS5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5o Ci0gbV9zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLSBtX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLUBAIC01NzYsOSAr NTQ4LDggQEAgbV9zaGExLm86IC4uL2NyeXB0bGliLmggbV9zaGExLmMKLSBtX3NpZ3Zlci5vOiAu Li8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotIG1fc2lndmVyLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgK LSBtX3NpZ3Zlci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vfb3MyLmgKLS1tX3NpZ3Zlci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi0tbV9zaWd2ZXIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0tbV9zaWd2ZXIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFz aC5oCi0rbV9zaWd2ZXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9ldnAuaAotK21fc2lndmVyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBz LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLSBtX3NpZ3Zlci5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLSBt X3NpZ3Zlci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotIG1fc2lndmVy Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vc3NsX3R5cC5oCi1AQCAtNTg5LDkgKzU2MCw4IEBAIG1fc2lndmVyLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC94NTA5X3YKLSBtX3NpZ3Zlci5vOiBtX3NpZ3Zlci5jCi0gbV93cC5vOiAuLi8u Li9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYmlvLmgKLSBtX3dwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLS1tX3dwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l X29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi0tbV93cC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi0tbV93cC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0r bV93cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXJyLmgKLSttX3dwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZmlwcy5oCi0gbV93cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2gu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0gbV93cC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0g bV93cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3NzbF90eXAuaAotQEAgLTYwMiw5ICs1NzIsOCBAQCBtX3dwLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC94NTA5LmggLi4vCi0gbV93cC5vOiAuLi9jcnlwdGxpYi5oIGV2cF9sb2NsLmgg bV93cC5jCi0gbmFtZXMubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24x LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0gbmFtZXMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotLW5hbWVzLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5o Ci0tbmFtZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZWNkc2EuaAotLW5hbWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStuYW1lcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStuYW1lcy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotIG5hbWVzLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpf bWFjLmgKLSBuYW1lcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0gbmFtZXMubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLUBAIC02MTUs OSArNTg0LDggQEAgbmFtZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LgotIHA1 X2NycHQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLSBwNV9j cnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YnVmZmVyLmgKLSBwNV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotLXA1X2NycHQubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotLXA1X2NycHQubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0tcDVf Y3JwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2xoYXNoLmgKLStwNV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXZwLmgKLStwNV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9m aXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLSBwNV9jcnB0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAot IHA1X2NycHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLSBwNV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi1AQCAtNjI4LDkgKzU5 Niw4IEBAIHA1X2NycHQubzogLi4vY3J5cHRsaWIuaCBwNV9jcnB0LmMKLSBwNV9jcnB0Mi5vOiAu Li8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotIHA1X2NycHQyLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgK LSBwNV9jcnB0Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vfb3MyLmgKLS1wNV9jcnB0Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi0tcDVfY3JwdDIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0tcDVfY3JwdDIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFj LmgKLStwNV9jcnB0Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2V2cC5oCi0rcDVfY3JwdDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCi0gcDVfY3JwdDIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotIHA1X2Ny cHQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2xjb25mLmgKLSBwNV9jcnB0Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotQEAgLTY0MSw5ICs2MDgs OCBAQCBwNV9jcnB0Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92Ci0gcDVfY3JwdDIu bzogcDVfY3JwdDIuYwotIHBfZGVjLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotIHBfZGVjLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLS1w X2RlYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZWMuaAotLXBfZGVjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2VjZHNhLmgKLS1wX2RlYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJy LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rcF9kZWMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rcF9kZWMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLSBw X2RlYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oCi0gcF9kZWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotIHBfZGVjLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1A QCAtNjU0LDkgKzYyMCw4IEBAIHBfZGVjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNr cy4KLSBwX2RlYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxp Yi5oIHBfZGVjLmMKLSBwX2VuYy5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLSBwX2VuYy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0tcF9l bmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2VjLmgKLS1wX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lY2RzYS5oCi0tcF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK3BfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK3BfZW5jLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0gcF9l bmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29ial9tYWMuaAotIHBfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLSBwX2VuYy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotQEAg LTY3MCw5ICs2MzUsOCBAQCBwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMV9tYWMu Ci0gcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2J1ZmZlci5oCi0gcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9kaC5oCi0gcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0tcF9saWIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotLXBfbGliLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdp bmUuaAotLXBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXZwLmgKLStwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLSBwX2xpYi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0g cF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbGNvbmYuaAotIHBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1AQCAtNjgzLDkgKzY0Nyw4 IEBAIHBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4KLSBwX2xpYi5vOiAu Li9hc24xL2FzbjFfbG9jbC5oIC4uL2NyeXB0bGliLmggcF9saWIuYwotIHBfb3Blbi5vOiAuLi8u Li9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYmlvLmgKLSBwX29wZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotLXBfb3Blbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotLXBfb3Blbi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi0tcF9v cGVuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXZwLmgKLStwX29wZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vyci5oCi0rcF9vcGVuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0gcF9vcGVuLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLSBwX29wZW4u bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbGNvbmYuaAotIHBfb3Blbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotQEAgLTY5Niw5ICs2NTksOCBAQCBw X29wZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuCi0gcF9vcGVuLm86IC4uL2Ny eXB0bGliLmggcF9vcGVuLmMKLSBwX3NlYWwubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0gcF9zZWFsLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRv LmgKLS1wX3NlYWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2VjLmgKLS1wX3NlYWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotLXBfc2VhbC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rcF9zZWFsLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK3Bf c2VhbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2ZpcHMuaAotIHBfc2VhbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0gcF9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLSBwX3NlYWwu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29zc2xfdHlwLmgKLUBAIC03MDksMzUgKzY3MSwzNiBAQCBwX3NlYWwubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3N5bWhhY2tzCi0gcF9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5 X3ZmeS5oIC4uL2NyeXB0bGliLmggcF9zZWFsLmMKLSBwX3NpZ24ubzogLi4vLi4vZV9vcy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0g cF9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvY3J5cHRvLmgKLS1wX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLS1wX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotLXBfc2lnbi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rcF9z aWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lcnIuaAotK3Bfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2ZpcHMuaAotIHBfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhh c2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0gcF9zaWduLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25m LmgKLSBwX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLS1wX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0tcF9zaWduLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAot LXBfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wveDUwOS5oCi0tcF9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3Zm eS5oIC4uL2NyeXB0bGliLmggcF9zaWduLmMKLStwX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi0rcF9zaWduLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgK LStwX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3N5bWhhY2tzLmgKLStwX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDku aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotK3Bfc2lnbi5vOiAuLi9jcnlwdGxp Yi5oIHBfc2lnbi5jCi0gcF92ZXJpZnkubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9hc24xLmgKLSBwX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi0gcF92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0tcF92ZXJpZnku bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGgu aAotLXBfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lcnIuaAotLXBfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK3BfdmVyaWZ5Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStwX3ZlcmlmeS5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFz aC5oCi0gcF92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0gcF92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2xjb25mLmgKLSBwX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotLXBfdmVyaWZ5Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3Rh Y2suaAotLXBfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3RhY2suaAotLXBfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z eW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLS1wX3ZlcmlmeS5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIHBfdmVyaWZ5LmMKLStw X3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvcnNhLmgKLStwX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNr LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi0rcF92ZXJpZnkubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLStwX3Zl cmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC94NTA5X3ZmeS5oCi0rcF92ZXJpZnkubzogLi4vY3J5cHRsaWIuaCBwX3ZlcmlmeS5jCi0gcG1l dGhfZm4ubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLSBwbWV0 aF9mbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2J1ZmZlci5oCi0gcG1ldGhfZm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0gcG1ldGhfZm4ubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotLXBtZXRoX2ZuLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFj LmgKLS1wbWV0aF9mbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rcG1ldGhfZm4ubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK3BtZXRoX2ZuLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaAotK3BtZXRoX2ZuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5o Ci0gcG1ldGhfZm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLSBwbWV0aF9mbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLSBwbWV0aF9mbi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGV2cF9sb2Ns LmgKLUBAIC03NDYsOSArNzA5LDkgQEAgcG1ldGhfZ24ubzogLi4vLi4vZV9vcy5oIC4uLy4uL2lu Y2x1ZGUvbwotIHBtZXRoX2duLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYm4uaAotIHBtZXRoX2duLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9i dWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLSBwbWV0aF9nbi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLS1w bWV0aF9nbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2xoYXNoLmgKLS1wbWV0aF9nbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLS1wbWV0aF9nbi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK3BtZXRoX2duLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rcG1ldGhfZ24ubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMu aAotK3BtZXRoX2duLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLSBwbWV0aF9nbi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotIHBtZXRo X2duLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc3RhY2suaAotIHBtZXRoX2duLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNr cy5oIC4uL2NyeXB0bGliLmggZXZwX2xvY2wuaAotQEAgLTc1Niw5ICs3MTksOCBAQCBwbWV0aF9n bi5vOiBwbWV0aF9nbi5jCi0gcG1ldGhfbGliLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYXNuMS5oCi0gcG1ldGhfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8u aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLSBwbWV0aF9saWIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0tcG1l dGhfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lY2RoLmgKLS1wbWV0aF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCi0tcG1ldGhfbGliLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStwbWV0aF9saWIubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIu aAotK3BtZXRoX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2ZpcHMuaAotIHBtZXRoX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhh c2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0gcG1ldGhfbGliLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLSBwbWV0aF9saWIubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2xjb25mLmgKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRv L2V2cC9tX2RzczEuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9tX2RzczEu YwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9tX2RzczEuYy5maXBzCTIwMTEt MDYtMDEgMTc6MTE6MDAuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9j cnlwdG8vZXZwL21fZHNzMS5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTM4MzkzNjgxICswMTAwCi1A QCAtNjgsOCArNjgsNiBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotICNlbmRpZgotIAot LSNpZm5kZWYgT1BFTlNTTF9GSVBTIAotLQotIHN0YXRpYyBpbnQgaW5pdChFVlBfTURfQ1RYICpj dHgpCi0gCXsgcmV0dXJuIFNIQTFfSW5pdChjdHgtPm1kX2RhdGEpOyB9Ci0gCi1AQCAtODQsNyAr ODIsNyBAQCBzdGF0aWMgY29uc3QgRVZQX01EIGRzczFfbWQ9Ci0gCU5JRF9kc2EsCi0gCU5JRF9k c2FXaXRoU0hBMSwKLSAJU0hBX0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfRElH RVNULAotKwlFVlBfTURfRkxBR19QS0VZX0RJR0VTVHxFVlBfTURfRkxBR19GSVBTLAotIAlpbml0 LAotIAl1cGRhdGUsCi0gCWZpbmFsLAotQEAgLTEwMCw0ICs5OCwzIEBAIGNvbnN0IEVWUF9NRCAq RVZQX2RzczEodm9pZCkKLSAJcmV0dXJuKCZkc3MxX21kKTsKLSAJfQotICNlbmRpZgotLSNlbmRp ZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL21fZHNzLmMuZmlwcyBv cGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAvbV9kc3MuYwotLS0tIG9wZW5zc2wtMS4wLjEt YmV0YTIvY3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMJMjAxMS0wNi0wMSAxNzoxMTowMC4wMDAwMDAw MDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAvbV9kc3MuYwkyMDEy LTAyLTA3IDExOjA3OjAyLjUzODM5MzY4MSArMDEwMAotQEAgLTY2LDcgKzY2LDYgQEAKLSAjZW5k aWYKLSAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBCi0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSAK LSBzdGF0aWMgaW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQotIAl7IHJldHVybiBTSEExX0luaXQo Y3R4LT5tZF9kYXRhKTsgfQotQEAgLTgyLDcgKzgxLDcgQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBk c2FfbWQ9Ci0gCU5JRF9kc2FXaXRoU0hBLAotIAlOSURfZHNhV2l0aFNIQSwKLSAJU0hBX0RJR0VT VF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNULAotKwlFVlBfTURfRkxBR19QS0VZ X0RJR0VTVHxFVlBfTURfRkxBR19GSVBTLAotIAlpbml0LAotIAl1cGRhdGUsCi0gCWZpbmFsLAot QEAgLTk4LDQgKzk3LDMgQEAgY29uc3QgRVZQX01EICpFVlBfZHNzKHZvaWQpCi0gCXJldHVybigm ZHNhX21kKTsKLSAJfQotICNlbmRpZgotLSNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1i ZXRhMi9jcnlwdG8vZXZwL21fbWQyLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9l dnAvbV9tZDIuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9tX21kMi5jLmZp cHMJMjAwNS0wNy0xNiAxNDozNzozMi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4x LWJldGEyL2NyeXB0by9ldnAvbV9tZDIuYwkyMDEyLTAyLTA3IDExOjA3OjAyLjUzODM5MzY4MSAr MDEwMAotQEAgLTY4LDYgKzY4LDcgQEAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0gI2luY2x1 ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gI2VuZGlmCi0rI2luY2x1ZGUgImV2cF9sb2NsLmgiCi0gCi0g c3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKLSAJeyByZXR1cm4gTUQyX0luaXQoY3R4 LT5tZF9kYXRhKTsgfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL21f c2hhMS5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL21fc2hhMS5jCi0tLS0g b3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMJMjAxMS0wNS0yOSAw MTowMToyNi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9l dnAvbV9zaGExLmMJMjAxMi0wMi0wNyAxMTowNzowMi41MzgzOTM2ODEgKzAxMDAKLUBAIC01OSw4 ICs1OSw2IEBACi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgImNyeXB0bGliLmgiCi0g Ci0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLS0KLSAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBCi0gCi0g I2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci1AQCAtODUsNyArODMsOCBAQCBzdGF0aWMgY29uc3Qg RVZQX01EIHNoYTFfbWQ9Ci0gCU5JRF9zaGExLAotIAlOSURfc2hhMVdpdGhSU0FFbmNyeXB0aW9u LAotIAlTSEFfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFU VVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsJRVZQX01EX0ZMQUdfUEtFWV9NRVRI T0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKLSsJCUVWUF9NRF9GTEFH X0ZJUFMsCi0gCWluaXQsCi0gCXVwZGF0ZSwKLSAJZmluYWwsCi1AQCAtMTIyLDcgKzEyMSw4IEBA IHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMjI0X21kPQotIAlOSURfc2hhMjI0LAotIAlOSURfc2hh MjI0V2l0aFJTQUVuY3J5cHRpb24sCi0gCVNIQTIyNF9ESUdFU1RfTEVOR1RILAotLQlFVlBfTURf RkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAot KwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURf QUJTRU5UfAotKwkJRVZQX01EX0ZMQUdfRklQUywKLSAJaW5pdDIyNCwKLSAJdXBkYXRlMjU2LAot IAlmaW5hbDI1NiwKLUBAIC0xNDEsNyArMTQxLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEy NTZfbWQ9Ci0gCU5JRF9zaGEyNTYsCi0gCU5JRF9zaGEyNTZXaXRoUlNBRW5jcnlwdGlvbiwKLSAJ U0hBMjU2X0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVS RXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCi0rCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9E X1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8Ci0rCQlFVlBfTURfRkxBR19G SVBTLAotIAlpbml0MjU2LAotIAl1cGRhdGUyNTYsCi0gCWZpbmFsMjU2LAotQEAgLTE3Miw3ICsx NzMsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTM4NF9tZD0KLSAJTklEX3NoYTM4NCwKLSAJ TklEX3NoYTM4NFdpdGhSU0FFbmNyeXB0aW9uLAotIAlTSEEzODRfRElHRVNUX0xFTkdUSCwKLS0J RVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FC U0VOVCwKLSsJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJ R0FMR0lEX0FCU0VOVHwKLSsJCUVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQzODQsCi0gCXVwZGF0 ZTUxMiwKLSAJZmluYWw1MTIsCi1AQCAtMTkxLDcgKzE5Myw4IEBAIHN0YXRpYyBjb25zdCBFVlBf TUQgc2hhNTEyX21kPQotIAlOSURfc2hhNTEyLAotIAlOSURfc2hhNTEyV2l0aFJTQUVuY3J5cHRp b24sCi0gCVNIQTUxMl9ESUdFU1RfTEVOR1RILAotLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9T SUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAotKwlFVlBfTURfRkxBR19QS0VZ X01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAotKwkJRVZQX01E X0ZMQUdfRklQUywKLSAJaW5pdDUxMiwKLSAJdXBkYXRlNTEyLAotIAlmaW5hbDUxMiwKLUBAIC0y MDYsNCArMjA5LDMgQEAgY29uc3QgRVZQX01EICpFVlBfc2hhNTEyKHZvaWQpCi0gCXsgcmV0dXJu KCZzaGE1MTJfbWQpOyB9Ci0gI2VuZGlmCS8qIGlmbmRlZiBPUEVOU1NMX05PX1NIQTUxMiAqLwot IAotLSNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL3Bfc2ln bi5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL3Bfc2lnbi5jCi0tLS0gb3Bl bnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZXZwL3Bfc2lnbi5jLmZpcHMJMjAxMS0wNi0wOSAxODow MjozOS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9ldnAv cF9zaWduLmMJMjAxMi0wMi0wNyAxMTowNzowMi41MzgzOTM2ODEgKzAxMDAKLUBAIC02MSw2ICs2 MSw3IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvb2Jq ZWN0cy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9y c2EuaD4KLSAKLSAjaWZkZWYgdW5kZWYKLSB2b2lkIEVWUF9TaWduSW5pdChFVlBfTURfQ1RYICpj dHgsIEVWUF9NRCAqdHlwZSkKLUBAIC0xMDMsNiArMTA0LDIyIEBAIGludCBFVlBfU2lnbkZpbmFs KEVWUF9NRF9DVFggKmN0eCwgdW5zaWcKLSAJCQlnb3RvIGVycjsKLSAJCWlmIChFVlBfUEtFWV9D VFhfc2V0X3NpZ25hdHVyZV9tZChwa2N0eCwgY3R4LT5kaWdlc3QpIDw9IDApCi0gCQkJZ290byBl cnI7Ci0rCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSkKLSsJCQlp ZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1g5MzFfUEFERElORykg PD0gMCkKLSsJCQkJZ290byBlcnI7Ci0rCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxB R19QQURfUFNTKQotKwkJCXsKLSsJCQlpbnQgc2FsdGxlbjsKLSsJCQlpZiAoRVZQX1BLRVlfQ1RY X3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1BLQ1MxX1BTU19QQURESU5HKSA8PSAwKQotKwkJ CQlnb3RvIGVycjsKLSsJCQlzYWx0bGVuID0gTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NBTFQoY3R4 KTsKLSsJCQlpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVOKQotKwkJCQlz YWx0bGVuID0gLTE7Ci0rCQkJZWxzZSBpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNT X01SRUMpCi0rCQkJCXNhbHRsZW4gPSAtMjsKLSsJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2Ff cHNzX3NhbHRsZW4ocGtjdHgsIHNhbHRsZW4pIDw9IDApCi0rCQkJCWdvdG8gZXJyOwotKwkJCX0K LSAJCWlmIChFVlBfUEtFWV9zaWduKHBrY3R4LCBzaWdyZXQsICZzbHRtcCwgbSwgbV9sZW4pIDw9 IDApCi0gCQkJZ290byBlcnI7Ci0gCQkqc2lnbGVuID0gc2x0bXA7Ci1kaWZmIC11cCBvcGVuc3Ns LTEuMC4xLWJldGEyL2NyeXB0by9ldnAvcF92ZXJpZnkuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0 YTIvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8v ZXZwL3BfdmVyaWZ5LmMuZmlwcwkyMDExLTA2LTA5IDE4OjAyOjM5LjAwMDAwMDAwMCArMDIwMAot KysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jCTIwMTItMDItMDcg MTE6MDc6MDIuNTM5MzkzNjg5ICswMTAwCi1AQCAtNjEsNiArNjEsNyBAQAotICNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KLSAjaW5jbHVkZSA8 b3BlbnNzbC94NTA5Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gCi0gaW50IEVWUF9W ZXJpZnlGaW5hbChFVlBfTURfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZ2J1ZiwK LSAJICAgICB1bnNpZ25lZCBpbnQgc2lnbGVuLCBFVlBfUEtFWSAqcGtleSkKLUBAIC04OCw2ICs4 OSwyMiBAQCBpbnQgRVZQX1ZlcmlmeUZpbmFsKEVWUF9NRF9DVFggKmN0eCwgY29uCi0gCQkJZ290 byBlcnI7Ci0gCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9zaWduYXR1cmVfbWQocGtjdHgsIGN0eC0+ ZGlnZXN0KSA8PSAwKQotIAkJCWdvdG8gZXJyOwotKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURf Q1RYX0ZMQUdfUEFEX1g5MzEpCi0rCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmco cGtjdHgsIFJTQV9YOTMxX1BBRERJTkcpIDw9IDApCi0rCQkJCWdvdG8gZXJyOwotKwkJaWYgKGN0 eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUykKLSsJCQl7Ci0rCQkJaW50IHNhbHRs ZW47Ci0rCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9QS0NT MV9QU1NfUEFERElORykgPD0gMCkKLSsJCQkJZ290byBlcnI7Ci0rCQkJc2FsdGxlbiA9IE1fRVZQ X01EX0NUWF9GTEFHX1BTU19TQUxUKGN0eCk7Ci0rCQkJaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NU WF9GTEFHX1BTU19NRExFTikKLSsJCQkJc2FsdGxlbiA9IC0xOwotKwkJCWVsc2UgaWYgKHNhbHRs ZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDKQotKwkJCQlzYWx0bGVuID0gLTI7Ci0rCQkJ aWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3Bzc19zYWx0bGVuKHBrY3R4LCBzYWx0bGVuKSA8PSAw KQotKwkJCQlnb3RvIGVycjsKLSsJCQl9Ci0gCQlpID0gRVZQX1BLRVlfdmVyaWZ5KHBrY3R4LCBz aWdidWYsIHNpZ2xlbiwgbSwgbV9sZW4pOwotIAkJZXJyOgotIAkJRVZQX1BLRVlfQ1RYX2ZyZWUo cGtjdHgpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfYWVzYXZzLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlw c19hZXNhdnMuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X2Flc2F2cy5jLmZpcHMJMjAxMi0wMi0wNyAxMTowNzowMi41MzkzOTM2ODkgKzAxMDAKLSsrKyBv cGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYwkyMDEyLTAy LTA3IDExOjA3OjAyLjUzOTM5MzY4OSArMDEwMAotQEAgLTAsMCArMSw5MzkgQEAKLSsvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxs 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 QU1BR0UuCi0rICoKLSsgKi8KLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQotKyAgTklTVCBBRVMgQWxnb3JpdGhtIFZhbGlkYXRpb24gU3VpdGUKLSsgIFRl c3QgUHJvZ3JhbQotKwotKyAgRG9uYXRlZCB0byBPcGVuU1NMIGJ5OgotKyAgVi1PTkUgQ29ycG9y YXRpb24KLSsgIDIwMjUwIENlbnR1cnkgQmx2ZCwgU3VpdGUgMzAwCi0rICBHZXJtYW50b3duLCBN RCAyMDg3NAotKyAgVS5TLkEuCi0rICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RkbGli Lmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxlcnJuby5oPgotKyNpbmNsdWRl IDxhc3NlcnQuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9hZXMu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgot KwotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlICJlX29zLmgiCi0rCi0rI2lm bmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQot K3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIEFFUyBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDAp OwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVk ZSAiZmlwc191dGwuaCIKLSsKLSsjZGVmaW5lIEFFU19CTE9DS19TSVpFIDE2Ci0rCi0rI2RlZmlu ZSBWRVJCT1NFIDAKLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKi8KLSsKLStpbnQgQUVTVGVzdChFVlBfQ0lQSEVSX0NUWCAqY3R4LAotKwkgICAg Y2hhciAqYW1vZGUsIGludCBha2V5c3osIHVuc2lnbmVkIGNoYXIgKmFLZXksIAotKwkgICAgdW5z aWduZWQgY2hhciAqaVZlYywgCi0rCSAgICBpbnQgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBl bmNyeXB0ICovCi0rCSAgICB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsIHVuc2lnbmVkIGNoYXIg KmNpcGhlcnRleHQsIGludCBsZW4pCi0rICAgIHsKLSsgICAgY29uc3QgRVZQX0NJUEhFUiAqY2lw aGVyID0gTlVMTDsKLSsKLSsgICAgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJDQkMiKSA9PSAwKQot Kwl7Ci0rCXN3aXRjaCAoYWtleXN6KQotKwkJewotKwkJY2FzZSAxMjg6Ci0rCQljaXBoZXIgPSBF VlBfYWVzXzEyOF9jYmMoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIg PSBFVlBfYWVzXzE5Ml9jYmMoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAyNTY6Ci0rCQljaXBo ZXIgPSBFVlBfYWVzXzI1Nl9jYmMoKTsKLSsJCWJyZWFrOwotKwkJfQotKwotKwl9Ci0rICAgIGVs c2UgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJFQ0IiKSA9PSAwKQotKwl7Ci0rCXN3aXRjaCAoYWtl eXN6KQotKwkJewotKwkJY2FzZSAxMjg6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9lY2IoKTsK LSsJCWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9lY2Io KTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAyNTY6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9l Y2IoKTsKLSsJCWJyZWFrOwotKwkJfQotKwl9Ci0rICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1v ZGUsICJDRkIxMjgiKSA9PSAwKQotKwl7Ci0rCXN3aXRjaCAoYWtleXN6KQotKwkJewotKwkJY2Fz ZSAxMjg6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jZmIxMjgoKTsKLSsJCWJyZWFrOwotKwot KwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jZmIxMjgoKTsKLSsJCWJyZWFr OwotKwotKwkJY2FzZSAyNTY6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jZmIxMjgoKTsKLSsJ CWJyZWFrOwotKwkJfQotKwotKwl9Ci0rICAgIGVsc2UgaWYgKHN0cm5jYXNlY21wKGFtb2RlLCAi T0ZCIiwgMykgPT0gMCkKLSsJewotKwlzd2l0Y2ggKGFrZXlzeikKLSsJCXsKLSsJCWNhc2UgMTI4 OgotKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfb2ZiKCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2Ug MTkyOgotKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfb2ZiKCk7Ci0rCQlicmVhazsKLSsKLSsJCWNh c2UgMjU2OgotKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfb2ZiKCk7Ci0rCQlicmVhazsKLSsJCX0K LSsJfQotKyAgICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikpCi0rCXsKLSsJc3dp dGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4 X2NmYjEoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBFVlBfYWVz XzE5Ml9jZmIxKCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMjU2OgotKwkJY2lwaGVyID0gRVZQ X2Flc18yNTZfY2ZiMSgpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCX0KLSsgICAgZWxzZSBpZighc3Ry Y2FzZWNtcChhbW9kZSwiQ0ZCOCIpKQotKwl7Ci0rCXN3aXRjaCAoYWtleXN6KQotKwkJewotKwkJ Y2FzZSAxMjg6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jZmI4KCk7Ci0rCQlicmVhazsKLSsK LSsJCWNhc2UgMTkyOgotKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2ZiOCgpOwotKwkJYnJlYWs7 Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2NmYjgoKTsKLSsJCWJy ZWFrOwotKwkJfQotKwl9Ci0rICAgIGVsc2UKLSsJewotKwlwcmludGYoIlVua25vd24gbW9kZTog JXNcbiIsIGFtb2RlKTsKLSsJcmV0dXJuIDA7Ci0rCX0KLSsgICAgaWYgKCFjaXBoZXIpCi0rCXsK LSsJcHJpbnRmKCJJbnZhbGlkIGtleSBzaXplOiAlZFxuIiwgYWtleXN6KTsKLSsJcmV0dXJuIDA7 IAotKwl9Ci0rICAgIGlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwgYUtl eSwgaVZlYywgZGlyKSA8PSAwKQotKwlyZXR1cm4gMDsKLSsgICAgaWYoIXN0cmNhc2VjbXAoYW1v ZGUsIkNGQjEiKSkKLSsJTV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoY3R4LCBFVlBfQ0lQSF9G TEFHX0xFTkdUSF9CSVRTKTsKLSsgICAgaWYgKGRpcikKLSsJCUVWUF9DaXBoZXIoY3R4LCBjaXBo ZXJ0ZXh0LCBwbGFpbnRleHQsIGxlbik7Ci0rCWVsc2UKLSsJCUVWUF9DaXBoZXIoY3R4LCBwbGFp bnRleHQsIGNpcGhlcnRleHQsIGxlbik7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0rY2hhciAq dF90YWdbMl0gPSB7IlBMQUlOVEVYVCIsICJDSVBIRVJURVhUIn07Ci0rY2hhciAqdF9tb2RlWzZd ID0geyJDQkMiLCJFQ0IiLCJPRkIiLCJDRkIxIiwiQ0ZCOCIsIkNGQjEyOCJ9OwotK2VudW0gTW9k ZSB7Q0JDLCBFQ0IsIE9GQiwgQ0ZCMSwgQ0ZCOCwgQ0ZCMTI4fTsKLStlbnVtIFhDcnlwdCB7WERF Q1JZUFQsIFhFTkNSWVBUfTsKLSsKLSsvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8K LSsvKiAgTW9udGUgQ2FybG8gVGVzdHMgICAgICAgICAgKi8KLSsvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKi8KLSsKLSsvKiNkZWZpbmUgZ2IoYSxiKSAoKChhKVsoYikvOF0gPj4gKChi KSU4KSkmMSkqLwotKy8qI2RlZmluZSBzYihhLGIsdikgKChhKVsoYikvOF09KChhKVsoYikvOF0m figxIDw8ICgoYiklOCkpKXwoISEodikgPDwgKChiKSU4KSkpKi8KLSsKLSsjZGVmaW5lIGdiKGEs YikgKCgoYSlbKGIpLzhdID4+ICg3LShiKSU4KSkmMSkKLSsjZGVmaW5lIHNiKGEsYix2KSAoKGEp WyhiKS84XT0oKGEpWyhiKS84XSZ+KDEgPDwgKDctKGIpJTgpKSl8KCEhKHYpIDw8ICg3LShiKSU4 KSkpCi0rCi0raW50IGRvX21jdChjaGFyICphbW9kZSwgCi0rCSAgIGludCBha2V5c3osIHVuc2ln bmVkIGNoYXIgKmFLZXksdW5zaWduZWQgY2hhciAqaVZlYywKLSsJICAgaW50IGRpciwgdW5zaWdu ZWQgY2hhciAqdGV4dCwgaW50IGxlbiwKLSsJICAgRklMRSAqcmZwKQotKyAgICB7Ci0rICAgIGlu dCByZXQgPSAwOwotKyAgICB1bnNpZ25lZCBjaGFyIGtleVsxMDFdWzMyXTsKLSsgICAgdW5zaWdu ZWQgY2hhciBpdlsxMDFdW0FFU19CTE9DS19TSVpFXTsKLSsgICAgdW5zaWduZWQgY2hhciBwdGV4 dFsxMDAxXVszMl07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY3RleHRbMTAwMV1bMzJdOwotKyAgICB1 bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbNjQrNF07Ci0rICAgIGludCBpLCBqLCBuLCBuMSwgbjI7 Ci0rICAgIGludCBpbW9kZSA9IDAsIG5rZXlzeiA9IGFrZXlzei84OwotKyAgICBFVlBfQ0lQSEVS X0NUWCBjdHg7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rICAgIGlmIChs ZW4gPiAzMikKLSsJewotKwlwcmludGYoIlxuPj4+PiBMZW5ndGggZXhjZWVkcyAzMiBmb3IgJXMg JWQgPDw8PFxuXG4iLCAKLSsJICAgICAgIGFtb2RlLCBha2V5c3opOwotKwlyZXR1cm4gLTE7Ci0r CX0KLSsgICAgZm9yIChpbW9kZSA9IDA7IGltb2RlIDwgNjsgKytpbW9kZSkKLSsJaWYgKHN0cmNt cChhbW9kZSwgdF9tb2RlW2ltb2RlXSkgPT0gMCkKLSsJICAgIGJyZWFrOwotKyAgICBpZiAoaW1v ZGUgPT0gNikKLSsJeyAKLSsJcHJpbnRmKCJVbnJlY29nbml6ZWQgbW9kZTogJXNcbiIsIGFtb2Rl KTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rCi0rICAgIG1lbWNweShrZXlbMF0sIGFLZXksIG5rZXlz eik7Ci0rICAgIGlmIChpVmVjKQotKwltZW1jcHkoaXZbMF0sIGlWZWMsIEFFU19CTE9DS19TSVpF KTsKLSsgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJbWVtY3B5KHB0ZXh0WzBdLCB0ZXh0LCBs ZW4pOwotKyAgICBlbHNlCi0rCW1lbWNweShjdGV4dFswXSwgdGV4dCwgbGVuKTsKLSsgICAgZm9y IChpID0gMDsgaSA8IDEwMDsgKytpKQotKwl7Ci0rCS8qIHByaW50ZigiSXRlcmF0aW9uICVkXG4i LCBpKTsgKi8KLSsJaWYgKGkgPiAwKQotKwkgICAgewotKwkgICAgZnByaW50ZihyZnAsIkNPVU5U ID0gJWRcbiIsaSk7Ci0rCSAgICBPdXRwdXRWYWx1ZSgiS0VZIixrZXlbaV0sbmtleXN6LHJmcCww KTsKLSsJICAgIGlmIChpbW9kZSAhPSBFQ0IpICAvKiBFQ0IgKi8KLSsJCU91dHB1dFZhbHVlKCJJ ViIsaXZbaV0sQUVTX0JMT0NLX1NJWkUscmZwLDApOwotKwkgICAgLyogT3V0cHV0IENpcGhlcnRl eHQgfCBQbGFpbnRleHQgKi8KLSsJICAgIE91dHB1dFZhbHVlKHRfdGFnW2Rpcl4xXSxkaXIgPyBw dGV4dFswXSA6IGN0ZXh0WzBdLGxlbixyZnAsCi0rCQkJaW1vZGUgPT0gQ0ZCMSk7Ci0rCSAgICB9 Ci0rCWZvciAoaiA9IDA7IGogPCAxMDAwOyArK2opCi0rCSAgICB7Ci0rCSAgICBzd2l0Y2ggKGlt b2RlKQotKwkJewotKwkgICAgY2FzZSBFQ0I6Ci0rCQlpZiAoaiA9PSAwKQotKwkJICAgIHsgLyog c2V0IHVwIGVuY3J5cHRpb24gKi8KLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBh a2V5c3osIGtleVtpXSwgTlVMTCwgCi0rCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBl bmNyeXB0ICovCi0rCQkJCSAgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOwotKwkJICAgIGlmIChk aXIgPT0gWEVOQ1JZUFQpCi0rCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2pdLCBsZW4pOwot KwkJICAgIGVsc2UKLSsJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbal0sIGxlbik7Ci0rCQkg ICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJ CXsKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKLSsJCQlt ZW1jcHkocHRleHRbaisxXSwgY3RleHRbal0sIGxlbik7Ci0rCQkJfQotKwkJICAgIGVsc2UKLSsJ CQl7Ci0rCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkJ bWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJCX0KLSsJCSAgICB9Ci0rCQli cmVhazsKLSsKLSsJICAgIGNhc2UgQ0JDOgotKwkgICAgY2FzZSBPRkI6ICAKLSsJICAgIGNhc2Ug Q0ZCMTI4OgotKwkJaWYgKGogPT0gMCkKLSsJCSAgICB7Ci0rCQkgICAgcmV0ID0gQUVTVGVzdCgm Y3R4LCBhbW9kZSwgYWtleXN6LCBrZXlbaV0sIGl2W2ldLCAKLSsJCQkJICBkaXIsICAvKiAwID0g ZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7 Ci0rCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJCQltZW1jcHkocHRleHRbaisxXSwgaXZb aV0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJCW1lbWNweShjdGV4dFtqKzFdLCBpdltpXSwgbGVu KTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZ UFQpCi0rCQkJewotKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4p OwotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqLTFdLCBsZW4pOwotKwkJCX0KLSsJCSAg ICBlbHNlCi0rCQkJewotKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBs ZW4pOwotKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtqLTFdLCBsZW4pOwotKwkJCX0KLSsJ CSAgICB9Ci0rCQlicmVhazsKLSsKLSsJICAgIGNhc2UgQ0ZCODoKLSsJCWlmIChqID09IDApCi0r CQkgICAgewotKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwga2V5W2ld LCBpdltpXSwgCi0rCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCi0r CQkJCSAgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAg ICB7Ci0rCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0 ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKLSsJCSAgICBlbHNlCi0rCQkJRVZQX0NpcGhlcigmY3R4 LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgfQotKwkJaWYgKGRpciA9PSBYRU5D UllQVCkKLSsJCSAgICB7Ci0rCQkgICAgaWYgKGogPCAxNikKLSsJCQltZW1jcHkocHRleHRbaisx XSwgJml2W2ldW2pdLCBsZW4pOwotKwkJICAgIGVsc2UKLSsJCQltZW1jcHkocHRleHRbaisxXSwg Y3RleHRbai0xNl0sIGxlbik7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBp ZiAoaiA8IDE2KQotKwkJCW1lbWNweShjdGV4dFtqKzFdLCAmaXZbaV1bal0sIGxlbik7Ci0rCQkg ICAgZWxzZQotKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtqLTE2XSwgbGVuKTsKLSsJCSAg ICB9Ci0rCQlicmVhazsKLSsKLSsJICAgIGNhc2UgQ0ZCMToKLSsJCWlmKGogPT0gMCkKLSsJCSAg ICB7Ci0rI2lmIDAKLSsJCSAgICAvKiBjb21wZW5zYXRlIGZvciB3cm9uZyBlbmRpYW5uZXNzIG9m IGlucHV0IGZpbGUgKi8KLSsJCSAgICBpZihpID09IDApCi0rCQkJcHRleHRbMF1bMF08PD03Owot KyNlbmRpZgotKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCxhbW9kZSxha2V5c3osa2V5W2ldLGl2 W2ldLGRpciwKLSsJCQkJcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOwotKwkJICAgIH0KLSsJCWVs c2UKLSsJCSAgICB7Ci0rCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJCQlFVlBfQ2lwaGVy KCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKLSsJCSAgICBlbHNlCi0rCQkJRVZQX0Np cGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCi0rCQkgICAgfQotKwkJaWYo ZGlyID09IFhFTkNSWVBUKQotKwkJICAgIHsKLSsJCSAgICBpZihqIDwgMTI4KQotKwkJCXNiKHB0 ZXh0W2orMV0sMCxnYihpdltpXSxqKSk7Ci0rCQkgICAgZWxzZQotKwkJCXNiKHB0ZXh0W2orMV0s MCxnYihjdGV4dFtqLTEyOF0sMCkpOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkg ICAgaWYoaiA8IDEyOCkKLSsJCQlzYihjdGV4dFtqKzFdLDAsZ2IoaXZbaV0saikpOwotKwkJICAg IGVsc2UKLSsJCQlzYihjdGV4dFtqKzFdLDAsZ2IocHRleHRbai0xMjhdLDApKTsKLSsJCSAgICB9 Ci0rCQlicmVhazsKLSsJCX0KLSsJICAgIH0KLSsJLS1qOyAvKiByZXNldCB0byBsYXN0IG9mIHJh bmdlICovCi0rCS8qIE91dHB1dCBDaXBoZXJ0ZXh0IHwgUGxhaW50ZXh0ICovCi0rCU91dHB1dFZh bHVlKHRfdGFnW2Rpcl0sZGlyID8gY3RleHRbal0gOiBwdGV4dFtqXSxsZW4scmZwLAotKwkJICAg IGltb2RlID09IENGQjEpOwotKwlmcHJpbnRmKHJmcCwgIlxuIik7ICAvKiBhZGQgc2VwYXJhdG9y ICovCi0rCi0rCS8qIENvbXB1dGUgbmV4dCBLRVkgKi8KLSsJaWYgKGRpciA9PSBYRU5DUllQVCkK LSsJICAgIHsKLSsJICAgIGlmIChpbW9kZSA9PSBDRkI4KQotKwkJeyAvKiBjdCA9IENUW2otMTVd IHx8IENUW2otMTRdIHx8IC4uLiB8fCBDVFtqXSAqLwotKwkJZm9yIChuMSA9IDAsIG4yID0gbmtl eXN6LTE7IG4xIDwgbmtleXN6OyArK24xLCAtLW4yKQotKwkJICAgIGNpcGhlcnRleHRbbjFdID0g Y3RleHRbai1uMl1bMF07Ci0rCQl9Ci0rCSAgICBlbHNlIGlmKGltb2RlID09IENGQjEpCi0rCQl7 Ci0rCQlmb3IobjE9MCxuMj1ha2V5c3otMSA7IG4xIDwgYWtleXN6IDsgKytuMSwtLW4yKQotKwkJ ICAgIHNiKGNpcGhlcnRleHQsbjEsZ2IoY3RleHRbai1uMl0sMCkpOwotKwkJfQotKwkgICAgZWxz ZQotKwkJc3dpdGNoIChha2V5c3opCi0rCQkgICAgewotKwkJY2FzZSAxMjg6Ci0rCQkgICAgbWVt Y3B5KGNpcGhlcnRleHQsIGN0ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJlYWs7Ci0rCQljYXNlIDE5 MjoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3RleHRbai0xXSs4LCA4KTsKLSsJCSAgICBt ZW1jcHkoY2lwaGVydGV4dCs4LCBjdGV4dFtqXSwgMTYpOwotKwkJICAgIGJyZWFrOwotKwkJY2Fz ZSAyNTY6Ci0rCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIGN0ZXh0W2otMV0sIDE2KTsKLSsJCSAg ICBtZW1jcHkoY2lwaGVydGV4dCsxNiwgY3RleHRbal0sIDE2KTsKLSsJCSAgICBicmVhazsKLSsJ CSAgICB9Ci0rCSAgICB9Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAgIGlmIChpbW9kZSA9PSBDRkI4 KQotKwkJeyAvKiBjdCA9IENUW2otMTVdIHx8IENUW2otMTRdIHx8IC4uLiB8fCBDVFtqXSAqLwot KwkJZm9yIChuMSA9IDAsIG4yID0gbmtleXN6LTE7IG4xIDwgbmtleXN6OyArK24xLCAtLW4yKQot KwkJICAgIGNpcGhlcnRleHRbbjFdID0gcHRleHRbai1uMl1bMF07Ci0rCQl9Ci0rCSAgICBlbHNl IGlmKGltb2RlID09IENGQjEpCi0rCQl7Ci0rCQlmb3IobjE9MCxuMj1ha2V5c3otMSA7IG4xIDwg YWtleXN6IDsgKytuMSwtLW4yKQotKwkJICAgIHNiKGNpcGhlcnRleHQsbjEsZ2IocHRleHRbai1u Ml0sMCkpOwotKwkJfQotKwkgICAgZWxzZQotKwkJc3dpdGNoIChha2V5c3opCi0rCQkgICAgewot KwkJY2FzZSAxMjg6Ci0rCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIHB0ZXh0W2pdLCAxNik7Ci0r CQkgICAgYnJlYWs7Ci0rCQljYXNlIDE5MjoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgcHRl eHRbai0xXSs4LCA4KTsKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCs4LCBwdGV4dFtqXSwgMTYp OwotKwkJICAgIGJyZWFrOwotKwkJY2FzZSAyNTY6Ci0rCQkgICAgbWVtY3B5KGNpcGhlcnRleHQs IHB0ZXh0W2otMV0sIDE2KTsKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCsxNiwgcHRleHRbal0s IDE2KTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCSAgICB9Ci0rCS8qIENvbXB1dGUgbmV4 dCBrZXk6IEtleVtpKzFdID0gS2V5W2ldIHhvciBjdCAqLwotKwlmb3IgKG4gPSAwOyBuIDwgbmtl eXN6OyArK24pCi0rCSAgICBrZXlbaSsxXVtuXSA9IGtleVtpXVtuXSBeIGNpcGhlcnRleHRbbl07 Ci0rCQotKwkvKiBDb21wdXRlIG5leHQgSVYgYW5kIHRleHQgKi8KLSsJaWYgKGRpciA9PSBYRU5D UllQVCkKLSsJICAgIHsKLSsJICAgIHN3aXRjaCAoaW1vZGUpCi0rCQl7Ci0rCSAgICBjYXNlIEVD QjoKLSsJCW1lbWNweShwdGV4dFswXSwgY3RleHRbal0sIEFFU19CTE9DS19TSVpFKTsKLSsJCWJy ZWFrOwotKwkgICAgY2FzZSBDQkM6Ci0rCSAgICBjYXNlIE9GQjoKLSsJICAgIGNhc2UgQ0ZCMTI4 OgotKwkJbWVtY3B5KGl2W2krMV0sIGN0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7Ci0rCQltZW1j cHkocHRleHRbMF0sIGN0ZXh0W2otMV0sIEFFU19CTE9DS19TSVpFKTsKLSsJCWJyZWFrOwotKwkg ICAgY2FzZSBDRkI4OgotKwkJLyogSVZbaSsxXSA9IGN0ICovCi0rCQlmb3IgKG4xID0gMCwgbjIg PSAxNTsgbjEgPCAxNjsgKytuMSwgLS1uMikKLSsJCSAgICBpdltpKzFdW24xXSA9IGN0ZXh0W2ot bjJdWzBdOwotKwkJcHRleHRbMF1bMF0gPSBjdGV4dFtqLTE2XVswXTsKLSsJCWJyZWFrOwotKwkg ICAgY2FzZSBDRkIxOgotKwkJZm9yKG4xPTAsbjI9MTI3IDsgbjEgPCAxMjggOyArK24xLC0tbjIp Ci0rCQkgICAgc2IoaXZbaSsxXSxuMSxnYihjdGV4dFtqLW4yXSwwKSk7Ci0rCQlwdGV4dFswXVsw XT1jdGV4dFtqLTEyOF1bMF0mMHg4MDsKLSsJCWJyZWFrOwotKwkJfQotKwkgICAgfQotKwllbHNl Ci0rCSAgICB7Ci0rCSAgICBzd2l0Y2ggKGltb2RlKQotKwkJewotKwkgICAgY2FzZSBFQ0I6Ci0r CQltZW1jcHkoY3RleHRbMF0sIHB0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7Ci0rCQlicmVhazsK LSsJICAgIGNhc2UgQ0JDOgotKwkgICAgY2FzZSBPRkI6Ci0rCSAgICBjYXNlIENGQjEyODoKLSsJ CW1lbWNweShpdltpKzFdLCBwdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOwotKwkJbWVtY3B5KGN0 ZXh0WzBdLCBwdGV4dFtqLTFdLCBBRVNfQkxPQ0tfU0laRSk7Ci0rCQlicmVhazsKLSsJICAgIGNh c2UgQ0ZCODoKLSsJCWZvciAobjEgPSAwLCBuMiA9IDE1OyBuMSA8IDE2OyArK24xLCAtLW4yKQot KwkJICAgIGl2W2krMV1bbjFdID0gcHRleHRbai1uMl1bMF07Ci0rCQljdGV4dFswXVswXSA9IHB0 ZXh0W2otMTZdWzBdOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENGQjE6Ci0rCQlmb3IobjE9MCxu Mj0xMjcgOyBuMSA8IDEyOCA7ICsrbjEsLS1uMikKLSsJCSAgICBzYihpdltpKzFdLG4xLGdiKHB0 ZXh0W2otbjJdLDApKTsKLSsJCWN0ZXh0WzBdWzBdPXB0ZXh0W2otMTI4XVswXSYweDgwOwotKwkJ YnJlYWs7Ci0rCQl9Ci0rCSAgICB9Ci0rCX0KLSsgICAgCi0rICAgIHJldHVybiByZXQ7Ci0rICAg IH0KLSsKLSsvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PSovCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rICAjIENvbmZpZyBpbmZvIGZv ciB2LW9uZQotKyAgIyBBRVNWUyBNTVQgdGVzdCBkYXRhIGZvciBFQ0IKLSsgICMgU3RhdGUgOiBF bmNyeXB0IGFuZCBEZWNyeXB0Ci0rICAjIEtleSBMZW5ndGggOiAyNTYKLSsgICMgRnJpIEF1ZyAz MCAwNDowNzoyMiBQTQotKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0rCi0raW50 IHByb2NfZmlsZShjaGFyICpycWZpbGUsIGNoYXIgKnJzcGZpbGUpCi0rICAgIHsKLSsgICAgY2hh ciBhZm5bMjU2XSwgcmZuWzI1Nl07Ci0rICAgIEZJTEUgKmFmcCA9IE5VTEwsICpyZnAgPSBOVUxM OwotKyAgICBjaGFyIGlidWZbMjA0OF07Ci0rICAgIGNoYXIgdGJ1ZlsyMDQ4XTsKLSsgICAgaW50 IGlsZW4sIGxlbiwgcmV0ID0gMDsKLSsgICAgY2hhciBhbGdvWzhdID0gIiI7Ci0rICAgIGNoYXIg YW1vZGVbOF0gPSAiIjsKLSsgICAgY2hhciBhdGVzdFs4XSA9ICIiOwotKyAgICBpbnQgYWtleXN6 ID0gMDsKLSsgICAgdW5zaWduZWQgY2hhciBpVmVjWzIwXSwgYUtleVs0MF07Ci0rICAgIGludCBk aXIgPSAtMSwgZXJyID0gMCwgc3RlcCA9IDA7Ci0rICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0 WzIwNDhdOwotKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbMjA0OF07Ci0rICAgIGNoYXIg KnJwOwotKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQo JmN0eCk7Ci0rCi0rICAgIGlmICghcnFmaWxlIHx8ICEoKnJxZmlsZSkpCi0rCXsKLSsJcHJpbnRm KCJObyByZXEgZmlsZVxuIik7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICBzdHJjcHkoYWZuLCBy cWZpbGUpOwotKwotKyAgICBpZiAoKGFmcCA9IGZvcGVuKGFmbiwgInIiKSkgPT0gTlVMTCkKLSsJ ewotKwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCi0rCSAgICAgICBhZm4s IHN0cmVycm9yKGVycm5vKSk7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICBpZiAoIXJzcGZpbGUp Ci0rCXsKLSsJc3RyY3B5KHJmbixhZm4pOwotKwlycD1zdHJzdHIocmZuLCJyZXEvIik7Ci0rI2lm ZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rCWlmICghcnApCi0rCSAgICBycD1zdHJzdHIocmZuLCJy ZXFcXCIpOwotKyNlbmRpZgotKwlhc3NlcnQocnApOwotKwltZW1jcHkocnAsInJzcCIsMyk7Ci0r CXJwID0gc3Ryc3RyKHJmbiwgIi5yZXEiKTsKLSsJbWVtY3B5KHJwLCAiLnJzcCIsIDQpOwotKwly c3BmaWxlID0gcmZuOwotKwl9Ci0rICAgIGlmICgocmZwID0gZm9wZW4ocnNwZmlsZSwgInciKSkg PT0gTlVMTCkKLSsJewotKwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCi0r CSAgICAgICByZm4sIHN0cmVycm9yKGVycm5vKSk7Ci0rCWZjbG9zZShhZnApOwotKwlhZnAgPSBO VUxMOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsgICAgd2hpbGUgKCFlcnIgJiYgKGZnZXRzKGlidWYs IHNpemVvZihpYnVmKSwgYWZwKSkgIT0gTlVMTCkKLSsJewotKwl0aWR5X2xpbmUodGJ1ZiwgaWJ1 Zik7Ci0rCWlsZW4gPSBzdHJsZW4oaWJ1Zik7Ci0rCS8qICAgICAgcHJpbnRmKCJzdGVwPSVkIGli dWY9JXMiLHN0ZXAsaWJ1Zik7ICovCi0rCXN3aXRjaCAoc3RlcCkKLSsJICAgIHsKLSsJY2FzZSAw OiAgLyogcmVhZCBwcmVhbWJsZSAqLwotKwkgICAgaWYgKGlidWZbMF0gPT0gJ1xuJykKLSsJCXsg LyogZW5kIG9mIHByZWFtYmxlICovCi0rCQlpZiAoKCphbGdvID09ICdcMCcpIHx8Ci0rCQkgICAg KCphbW9kZSA9PSAnXDAnKSB8fAotKwkJICAgIChha2V5c3ogPT0gMCkpCi0rCQkgICAgewotKwkJ ICAgIHByaW50ZigiTWlzc2luZyBBbGdvcml0aG0sIE1vZGUgb3IgS2V5U2l6ZSAoJXMvJXMvJWQp XG4iLAotKwkJCSAgIGFsZ28sYW1vZGUsYWtleXN6KTsKLSsJCSAgICBlcnIgPSAxOwotKwkJICAg IH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCSAgICAr KyBzdGVwOwotKwkJICAgIH0KLSsJCX0KLSsJICAgIGVsc2UgaWYgKGlidWZbMF0gIT0gJyMnKQot KwkJewotKwkJcHJpbnRmKCJJbnZhbGlkIHByZWFtYmxlIGl0ZW06ICVzXG4iLCBpYnVmKTsKLSsJ CWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7IC8qIHByb2Nlc3MgcHJlYW1ibGUgKi8K LSsJCWNoYXIgKnhwLCAqcHAgPSBpYnVmKzI7Ci0rCQlpbnQgbjsKLSsJCWlmIChha2V5c3opCi0r CQkgICAgeyAvKiBpbnNlcnQgY3VycmVudCB0aW1lICYgZGF0ZSAqLwotKwkJICAgIHRpbWVfdCBy dGltID0gdGltZSgwKTsKLSsJCSAgICBmcHJpbnRmKHJmcCwgIiMgJXMiLCBjdGltZSgmcnRpbSkp OwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsK LSsJCSAgICBpZiAoc3RybmNtcChwcCwgIkFFU1ZTICIsIDYpID09IDApCi0rCQkJewotKwkJCXN0 cmNweShhbGdvLCAiQUVTIik7Ci0rCQkJLyogZ2V0IHRlc3QgdHlwZSAqLwotKwkJCXBwICs9IDY7 Ci0rCQkJeHAgPSBzdHJjaHIocHAsICcgJyk7Ci0rCQkJbiA9IHhwLXBwOwotKwkJCXN0cm5jcHko YXRlc3QsIHBwLCBuKTsKLSsJCQlhdGVzdFtuXSA9ICdcMCc7Ci0rCQkJLyogZ2V0IG1vZGUgKi8K LSsJCQl4cCA9IHN0cnJjaHIocHAsICcgJyk7IC8qIGdldCBtb2RlIiAqLwotKwkJCW4gPSBzdHJs ZW4oeHArMSktMTsKLSsJCQlzdHJuY3B5KGFtb2RlLCB4cCsxLCBuKTsKLSsJCQlhbW9kZVtuXSA9 ICdcMCc7Ci0rCQkJLyogYW1vZGVbM10gPSAnXDAnOyAqLwotKwkJCWlmIChWRVJCT1NFKQotKwkJ CQlwcmludGYoIlRlc3QgPSAlcywgTW9kZSA9ICVzXG4iLCBhdGVzdCwgYW1vZGUpOwotKwkJCX0K LSsJCSAgICBlbHNlIGlmIChzdHJuY2FzZWNtcChwcCwgIktleSBMZW5ndGggOiAiLCAxMykgPT0g MCkKLSsJCQl7Ci0rCQkJYWtleXN6ID0gYXRvaShwcCsxMyk7Ci0rCQkJaWYgKFZFUkJPU0UpCi0r CQkJCXByaW50ZigiS2V5IHNpemUgPSAlZFxuIiwgYWtleXN6KTsKLSsJCQl9Ci0rCQkgICAgfQot KwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgMTogIC8qIFtFTkNSWVBUXSB8IFtERUNSWVBU XSAqLwotKwkgICAgaWYgKGlidWZbMF0gPT0gJ1snKQotKwkJewotKwkJZnB1dHMoaWJ1ZiwgcmZw KTsKLSsJCSsrc3RlcDsKLSsJCWlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0VOQ1JZUFRdIiwgOSkg PT0gMCkKLSsJCSAgICBkaXIgPSAxOwotKwkJZWxzZSBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltE RUNSWVBUXSIsIDkpID09IDApCi0rCQkgICAgZGlyID0gMDsKLSsJCWVsc2UKLSsJCSAgICB7Ci0r CQkgICAgcHJpbnRmKCJJbnZhbGlkIGtleXdvcmQ6ICVzXG4iLCBpYnVmKTsKLSsJCSAgICBlcnIg PSAxOwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwkJfQotKwkgICAgZWxzZSBpZiAoZGlyID09IC0x KQotKwkJewotKwkJZXJyID0gMTsKLSsJCXByaW50ZigiTWlzc2luZyBFTkNSWVBUL0RFQ1JZUFQg a2V5d29yZFxuIik7Ci0rCQlicmVhazsKLSsJCX0KLSsJICAgIGVsc2UgCi0rCQlzdGVwID0gMjsK LSsKLSsJY2FzZSAyOiAvKiBLRVkgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwot KwkgICAgaWYoKmlidWYgPT0gJ1xuJykKLSsJCWJyZWFrOwotKwkgICAgaWYoIXN0cm5jYXNlY21w KGlidWYsIkNPVU5UID0gIiw4KSkKLSsJCWJyZWFrOwotKwotKwkgICAgaWYgKHN0cm5jYXNlY21w KGlidWYsICJLRVkgPSAiLCA2KSAhPSAwKQotKwkJewotKwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxu Iik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJbGVuID0gaGV4MmJp bigoY2hhciopaWJ1Zis2LCBhS2V5KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAg ICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsKLSsJCSAgICBlcnIgPTE7Ci0rCQkgICAgYnJlYWs7 Ci0rCQkgICAgfQotKwkJUHJpbnRWYWx1ZSgiS0VZIiwgYUtleSwgbGVuKTsKLSsJCWlmIChzdHJj bXAoYW1vZGUsICJFQ0IiKSA9PSAwKQotKwkJICAgIHsKLSsJCSAgICBtZW1zZXQoaVZlYywgMCwg c2l6ZW9mKGlWZWMpKTsKLSsJCSAgICBzdGVwID0gKGRpcik/IDQ6IDU7ICAvKiBubyBpdmVjIGZv ciBFQ0IgKi8KLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgKytzdGVwOwotKwkJfQotKwkgICAg YnJlYWs7Ci0rCi0rCWNhc2UgMzogLyogSVYgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCBy ZnApOwotKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJJViA9ICIsIDUpICE9IDApCi0rCQl7 Ci0rCQlwcmludGYoIk1pc3NpbmcgSVZcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVs c2UKLSsJCXsKLSsJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNSwgaVZlYyk7Ci0rCQlpZiAo bGVuIDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIElWXG4iKTsKLSsJCSAg ICBlcnIgPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJUHJpbnRWYWx1ZSgiSVYiLCBp VmVjLCBsZW4pOwotKwkJc3RlcCA9IChkaXIpPyA0OiA1OwotKwkJfQotKwkgICAgYnJlYWs7Ci0r Ci0rCWNhc2UgNDogLyogUExBSU5URVhUID0geHh4eCAqLwotKwkgICAgZnB1dHMoaWJ1ZiwgcmZw KTsKLSsJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiUExBSU5URVhUID0gIiwgMTIpICE9IDAp Ci0rCQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgUExBSU5URVhUXG4iKTsKLSsJCWVyciA9IDE7Ci0r CQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlpbnQgbm4gPSBzdHJsZW4oaWJ1ZisxMik7Ci0rCQlp Zighc3RyY21wKGFtb2RlLCJDRkIxIikpCi0rCQkgICAgbGVuPWJpbnQyYmluKGlidWYrMTIsbm4t MSxwbGFpbnRleHQpOwotKwkJZWxzZQotKwkJICAgIGxlbj1oZXgyYmluKGlidWYrMTIsIHBsYWlu dGV4dCk7Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlk IFBMQUlOVEVYVDogJXMiLCBpYnVmKzEyKTsKLSsJCSAgICBlcnIgPTE7Ci0rCQkgICAgYnJlYWs7 Ci0rCQkgICAgfQotKwkJaWYgKGxlbiA+PSBzaXplb2YocGxhaW50ZXh0KSkKLSsJCSAgICB7Ci0r CQkgICAgcHJpbnRmKCJCdWZmZXIgb3ZlcmZsb3dcbiIpOwotKwkJICAgIH0KLSsJCVByaW50VmFs dWUoIlBMQUlOVEVYVCIsICh1bnNpZ25lZCBjaGFyKilwbGFpbnRleHQsIGxlbik7Ci0rCQlpZiAo c3RyY21wKGF0ZXN0LCAiTUNUIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KLSsJCSAg ICB7Ci0rCQkgICAgaWYoZG9fbWN0KGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAotKwkJCSAg ICAgIGRpciwgKHVuc2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVuLCAKLSsJCQkgICAgICByZnAp IDwgMCkKLSsJCQlFWElUKDEpOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAg cmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKLSsJCQkJICBk aXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBwbGFpbnRleHQsIGNp cGhlcnRleHQsIGxlbik7Ci0rCQkgICAgT3V0cHV0VmFsdWUoIkNJUEhFUlRFWFQiLGNpcGhlcnRl eHQsbGVuLHJmcCwKLSsJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKLSsJCSAgICB9Ci0rCQlz dGVwID0gNjsKLSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwljYXNlIDU6IC8qIENJUEhFUlRFWFQg PSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYgKHN0cm5jYXNlY21w KGlidWYsICJDSVBIRVJURVhUID0gIiwgMTMpICE9IDApCi0rCQl7Ci0rCQlwcmludGYoIk1pc3Np bmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlpZigh c3RyY21wKGFtb2RlLCJDRkIxIikpCi0rCQkgICAgbGVuPWJpbnQyYmluKGlidWYrMTMsc3RybGVu KGlidWYrMTMpLTEsY2lwaGVydGV4dCk7Ci0rCQllbHNlCi0rCQkgICAgbGVuID0gaGV4MmJpbihp YnVmKzEzLGNpcGhlcnRleHQpOwotKwkJaWYgKGxlbiA8IDApCi0rCQkgICAgewotKwkJICAgIHBy aW50ZigiSW52YWxpZCBDSVBIRVJURVhUXG4iKTsKLSsJCSAgICBlcnIgPTE7Ci0rCQkgICAgYnJl YWs7Ci0rCQkgICAgfQotKwotKwkJUHJpbnRWYWx1ZSgiQ0lQSEVSVEVYVCIsIGNpcGhlcnRleHQs IGxlbik7Ci0rCQlpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgPT0gMCkgIC8qIE1vbnRlIENhcmxv IFRlc3QgKi8KLSsJCSAgICB7Ci0rCQkgICAgZG9fbWN0KGFtb2RlLCBha2V5c3osIGFLZXksIGlW ZWMsIAotKwkJCSAgIGRpciwgY2lwaGVydGV4dCwgbGVuLCByZnApOwotKwkJICAgIH0KLSsJCWVs c2UKLSsJCSAgICB7Ci0rCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBh S2V5LCBpVmVjLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8K LSsJCQkJICBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7Ci0rCQkgICAgT3V0cHV0VmFsdWUo IlBMQUlOVEVYVCIsKHVuc2lnbmVkIGNoYXIgKilwbGFpbnRleHQsbGVuLHJmcCwKLSsJCQkJIXN0 cmNtcChhbW9kZSwiQ0ZCMSIpKTsKLSsJCSAgICB9Ci0rCQlzdGVwID0gNjsKLSsJCX0KLSsJICAg IGJyZWFrOwotKwotKwljYXNlIDY6Ci0rCSAgICBpZiAoaWJ1ZlswXSAhPSAnXG4nKQotKwkJewot KwkJZXJyID0gMTsKLSsJCXByaW50ZigiTWlzc2luZyB0ZXJtaW5hdG9yXG4iKTsKLSsJCX0KLSsJ ICAgIGVsc2UgaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpICE9IDApCi0rCQl7IC8qIE1DVCBhbHJl YWR5IGFkZGVkIHRlcm1pbmF0aW5nIG5sICovCi0rCQlmcHV0cyhpYnVmLCByZnApOwotKwkJfQot KwkgICAgc3RlcCA9IDE7Ci0rCSAgICBicmVhazsKLSsJICAgIH0KLSsJfQotKyAgICBpZiAocmZw KQotKwlmY2xvc2UocmZwKTsKLSsgICAgaWYgKGFmcCkKLSsJZmNsb3NlKGFmcCk7Ci0rICAgIHJl dHVybiBlcnI7Ci0rICAgIH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCi0rICBQcm9jZXNzZXMgZWl0aGVyIGEgc2luZ2xlIGZpbGUgb3Ig Ci0rICBhIHNldCBvZiBmaWxlcyB3aG9zZSBuYW1lcyBhcmUgcGFzc2VkIGluIGEgZmlsZS4KLSsg IEEgc2luZ2xlIGZpbGUgaXMgc3BlY2lmaWVkIGFzOgotKyAgICBhZXNfdGVzdCAtZiB4eHgucmVx Ci0rICBBIHNldCBvZiBmaWxlcyBpcyBzcGVjaWZpZWQgYXM6Ci0rICAgIGFlc190ZXN0IC1kIHh4 eHh4Lnh4eAotKyAgVGhlIGRlZmF1bHQgaXM6IC1kIHJlcS50eHQKLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0raW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQotKyAgICB7Ci0rICAgIGNoYXIgKnJxbGlzdCA9ICJyZXEudHh0IiwgKnJz cGZpbGUgPSBOVUxMOwotKyAgICBGSUxFICpmcCA9IE5VTEw7Ci0rICAgIGNoYXIgZm5bMjUwXSA9 ICIiLCByZm5bMjU2XSA9ICIiOwotKyAgICBpbnQgZl9vcHQgPSAwLCBkX29wdCA9IDE7Ci0rCi0r I2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKLSsJewotKwlk b19wcmludF9lcnJvcnMoKTsKLSsJRVhJVCgxKTsKLSsJfQotKyNlbmRpZgotKyAgICBpZiAoYXJn YyA+IDEpCi0rCXsKLSsJaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1kIikgPT0gMCkKLSsJICAg IHsKLSsJICAgIGRfb3B0ID0gMTsKLSsJICAgIH0KLSsJZWxzZSBpZiAoc3RyY2FzZWNtcChhcmd2 WzFdLCAiLWYiKSA9PSAwKQotKwkgICAgewotKwkgICAgZl9vcHQgPSAxOwotKwkgICAgZF9vcHQg PSAwOwotKwkgICAgfQotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIkludmFsaWQgcGFy YW1ldGVyOiAlc1xuIiwgYXJndlsxXSk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsJaWYg KGFyZ2MgPCAzKQotKwkgICAgewotKwkgICAgcHJpbnRmKCJNaXNzaW5nIHBhcmFtZXRlclxuIik7 Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsJaWYgKGRfb3B0KQotKwkgICAgcnFsaXN0ID0g YXJndlsyXTsKLSsJZWxzZQotKwkgICAgewotKwkgICAgc3RyY3B5KGZuLCBhcmd2WzJdKTsKLSsJ ICAgIHJzcGZpbGUgPSBhcmd2WzNdOwotKwkgICAgfQotKwl9Ci0rICAgIGlmIChkX29wdCkKLSsJ eyAvKiBsaXN0IG9mIGZpbGVzIChkaXJlY3RvcnkpICovCi0rCWlmICghKGZwID0gZm9wZW4ocnFs aXN0LCAiciIpKSkKLSsJICAgIHsKLSsJICAgIHByaW50ZigiQ2Fubm90IG9wZW4gcmVxIGxpc3Qg ZmlsZVxuIik7Ci0rCSAgICByZXR1cm4gLTE7Ci0rCSAgICB9Ci0rCXdoaWxlIChmZ2V0cyhmbiwg c2l6ZW9mKGZuKSwgZnApKQotKwkgICAgewotKwkgICAgc3RydG9rKGZuLCAiXHJcbiIpOwotKwkg ICAgc3RyY3B5KHJmbiwgZm4pOwotKwkgICAgaWYgKFZFUkJPU0UpCi0rCQlwcmludGYoIlByb2Nl c3Npbmc6ICVzXG4iLCByZm4pOwotKwkgICAgaWYgKHByb2NfZmlsZShyZm4sIHJzcGZpbGUpKQot KwkJewotKwkJcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIHJm bik7Ci0rCQlFWElUKDEpOwotKwkJfQotKwkgICAgfQotKwlmY2xvc2UoZnApOwotKwl9Ci0rICAg IGVsc2UgLyogc2luZ2xlIGZpbGUgKi8KLSsJewotKwlpZiAoVkVSQk9TRSkKLSsJICAgIHByaW50 ZigiUHJvY2Vzc2luZzogJXNcbiIsIGZuKTsKLSsJaWYgKHByb2NfZmlsZShmbiwgcnNwZmlsZSkp Ci0rCSAgICB7Ci0rCSAgICBwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8 PFxuIiwgZm4pOwotKwkgICAgfQotKwl9Ci0rICAgIEVYSVQoMCk7Ci0rICAgIHJldHVybiAwOwot KyAgICB9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9m aXBzL2NhdnMvZmlwc19jbWFjdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfY21hY3Rlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRv L2ZpcHMvY2F2cy9maXBzX2NtYWN0ZXN0LmMuZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAyLjUzOTM5 MzY4OSArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X2NtYWN0ZXN0LmMJMjAxMi0wMi0wNyAxMTowNzowMi41MzkzOTM2ODkgKzAxMDAKLUBAIC0wLDAg KzEsNTE3IEBACi0rLyogZmlwc19jbWFjdGVzdC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVw aGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJv amVjdCAyMDA1LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA1 IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0r ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAg dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRl cmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJl IG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9w ZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5k ICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9y IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAq ICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxl YXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQ cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3Bl blNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0 aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9q ZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIg bXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93 d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK LSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqCi0rICog VGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBF cmljIFlvdW5nCi0rICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20p LgotKyAqCi0rICovCi0rCi0rI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKLSsKLSsjaW5jbHVkZSA8 c3RkaW8uaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvY21hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2JuLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIENNQUMgc3Vw cG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rc3RhdGljIGludCBj bWFjX3Rlc3QoY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxFICpvdXQsIEZJTEUgKmluLAot KwlpbnQgbW9kZSwgaW50IEtsZW5fY291bnRzX2tleXMsIGludCBrbm93bl9rZXlsZW4pOwotK3N0 YXRpYyBpbnQgcHJpbnRfY21hY19nZW4oY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxFICpv dXQsCi0rCQl1bnNpZ25lZCBjaGFyICpLZXksIGludCBLbGVuLAotKwkJdW5zaWduZWQgY2hhciAq TXNnLCBpbnQgTXNnbGVuLAotKwkJaW50IFRsZW4pOwotK3N0YXRpYyBpbnQgcHJpbnRfY21hY192 ZXIoY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxFICpvdXQsCi0rCQl1bnNpZ25lZCBjaGFy ICpLZXksIGludCBLbGVuLAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTXNnbGVuLAotKwkJ dW5zaWduZWQgY2hhciAqTWFjLCBpbnQgTWFjbGVuLAotKwkJaW50IFRsZW4pOwotKwotKyNpZmRl ZiBGSVBTX0FMR1ZTCi0raW50IGZpcHNfY21hY3Rlc3RfbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCi0rI2Vsc2UKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rI2VuZGlmCi0r CXsKLSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsJaW50IG1vZGUgPSAwOwkJLyog MCA9PiBHZW5lcmF0ZSwgMSA9PiBWZXJpZnkgKi8KLSsJaW50IEtsZW5fY291bnRzX2tleXMgPSAw OyAvKiAwID0+IEtsZW4gaXMgc2l6ZSBvZiBvbmUga2V5Ci0rCQkJCSAgICAgMSA9PiBLbGVuIGlz IGFtb3VudCBvZiBrZXlzCi0rCQkJCSAgKi8KLSsJaW50IGtub3duX2tleWxlbiA9IDA7CS8qIE9u bHkgc2V0IHdoZW4gS2xlbl9jb3VudHNfa2V5cyA9IDEgKi8KLSsJY29uc3QgRVZQX0NJUEhFUiAq Y2lwaGVyID0gMDsKLSsJaW50IHJldCA9IDE7Ci0rCWZpcHNfYWxndGVzdF9pbml0KCk7Ci0rCi0r CXdoaWxlIChhcmdjID4gMSAmJiBhcmd2WzFdWzBdID09ICctJykKLSsJCXsKLSsJCXN3aXRjaCAo YXJndlsxXVsxXSkKLSsJCQl7Ci0rCQljYXNlICdhJzoKLSsJCQl7Ci0rCQkJY2hhciAqcCA9ICZh cmd2WzFdWzJdOwotKwkJCWlmICgqcCA9PSAnXDAnKQotKwkJCQl7Ci0rCQkJCWlmIChhcmdjIDw9 IDIpCi0rCQkJCQl7Ci0rCQkJCQlmcHJpbnRmKHN0ZGVyciwgIk9wdGlvbiAlcyBuZWVkcyBhIHZh bHVlXG4iLCBhcmd2WzFdKTsKLSsJCQkJCWdvdG8gZW5kOwotKwkJCQkJfQotKwkJCQlhcmd2Kys7 Ci0rCQkJCWFyZ2MtLTsKLSsJCQkJcCA9ICZhcmd2WzFdWzBdOwotKwkJCQl9Ci0rCQkJaWYgKCFz dHJjbXAocCwgImFlczEyOCIpKQotKwkJCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jYmMoKTsKLSsJ CQllbHNlIGlmICghc3RyY21wKHAsICJhZXMxOTIiKSkKLSsJCQkJY2lwaGVyID0gRVZQX2Flc18x OTJfY2JjKCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcChwLCAiYWVzMjU2IikpCi0rCQkJCWNpcGhl ciA9IEVWUF9hZXNfMjU2X2NiYygpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAocCwgInRkZWEzIikg fHwgIXN0cmNtcChwLCAidGRlczMiKSkKLSsJCQkJewotKwkJCQljaXBoZXIgPSBFVlBfZGVzX2Vk ZTNfY2JjKCk7Ci0rCQkJCUtsZW5fY291bnRzX2tleXMgPSAxOwotKwkJCQlrbm93bl9rZXlsZW4g PSA4OwotKwkJCQl9Ci0rCQkJZWxzZQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiVW5r bm93biBhbGdvcml0aG0gJXNcbiIsIHApOwotKwkJCQlnb3RvIGVuZDsKLSsJCQkJfQotKwkJCX0K LSsJCQlicmVhazsKLSsJCWNhc2UgJ2cnOgotKwkJCW1vZGUgPSAwOwotKwkJCWJyZWFrOwotKwkJ Y2FzZSAndic6Ci0rCQkJbW9kZSA9IDE7Ci0rCQkJYnJlYWs7Ci0rCQlkZWZhdWx0OgotKwkJCWZw cmludGYoc3RkZXJyLCAiVW5rbm93biBvcHRpb24gJXNcbiIsIGFyZ3ZbMV0pOwotKwkJCWdvdG8g ZW5kOwotKwkJCX0KLSsJCWFyZ3YrKzsKLSsJCWFyZ2MtLTsKLSsJCX0KLSsJaWYgKGFyZ2MgPT0g MSkKLSsJCWluID0gc3RkaW47Ci0rCWVsc2UKLSsJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsK LSsKLSsJaWYgKGFyZ2MgPCAyKQotKwkJb3V0ID0gc3Rkb3V0OwotKwllbHNlCi0rCQlvdXQgPSBm b3Blbihhcmd2WzJdLCAidyIpOwotKwotKwlpZiAoIWluKQotKwkJewotKwkJZnByaW50ZihzdGRl cnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsK LSsJCX0KLSsKLSsJaWYgKCFvdXQpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91 dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJ aWYgKCFjbWFjX3Rlc3QoY2lwaGVyLCBvdXQsIGluLCBtb2RlLAotKwkJCUtsZW5fY291bnRzX2tl eXMsIGtub3duX2tleWxlbikpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGNtYWMg ZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwllbHNlCi0r CQlyZXQgPSAwOwotKwotKwllbmQ6Ci0rCi0rCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4pKQotKwkJ ZmNsb3NlKGluKTsKLSsJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCi0rCQlmY2xvc2Uob3V0 KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJfQotKwotKyNkZWZpbmUgQ01BQ19URVNUX01BWExJ TkVMRU4JMTUwMDAwCi0rCi0raW50IGNtYWNfdGVzdChjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIs IEZJTEUgKm91dCwgRklMRSAqaW4sCi0rCWludCBtb2RlLCBpbnQgS2xlbl9jb3VudHNfa2V5cywg aW50IGtub3duX2tleWxlbikKLSsJewotKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAq cTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwl1bnNpZ25lZCBjaGFyICoqS2V5cyA9IE5V TEwsICpNc2cgPSBOVUxMLCAqTWFjID0gTlVMTDsKLSsJdW5zaWduZWQgY2hhciAqS2V5ID0gTlVM TDsKLSsJaW50IENvdW50LCBLbGVuLCBNbGVuLCBUbGVuOwotKwlsb25nIEtleWxlbiwgTXNnbGVu LCBNYWNsZW47Ci0rCWludCByZXQgPSAwOwotKwlpbnQgbG51bSA9IDA7Ci0rCi0rCW9saW5lYnVm ID0gT1BFTlNTTF9tYWxsb2MoQ01BQ19URVNUX01BWExJTkVMRU4pOwotKwlsaW5lYnVmID0gT1BF TlNTTF9tYWxsb2MoQ01BQ19URVNUX01BWExJTkVMRU4pOwotKwotKwlpZiAoIWxpbmVidWYgfHwg IW9saW5lYnVmKQotKwkJZ290byBlcnJvcjsKLSsKLSsJQ291bnQgPSAtMTsKLSsJS2xlbiA9IC0x OwotKwlNbGVuID0gLTE7Ci0rCVRsZW4gPSAtMTsKLSsKLSsJd2hpbGUgKGZnZXRzKG9saW5lYnVm LCBDTUFDX1RFU1RfTUFYTElORUxFTiwgaW4pKQotKwkJewotKwkJbG51bSsrOwotKwkJc3RyY3B5 KGxpbmVidWYsIG9saW5lYnVmKTsKLSsJCWtleXdvcmQgPSBsaW5lYnVmOwotKwkJLyogU2tpcCBs ZWFkaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29y ZCkpCi0rCQkJa2V5d29yZCsrOwotKwotKwkJLyogU2tpcCBjb21tZW50cyAqLwotKwkJaWYgKGtl eXdvcmRbMF0gPT0gJyMnKQotKwkJCXsKLSsJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAw KQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsKLSsJCS8qIExvb2sg Zm9yID0gc2lnbiAqLwotKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkJLyogSWYg bm8gPSBvciBzdGFydHMgd2l0aCBbIChmb3IgW0w9MjBdIGxpbmUpIGp1c3QgY29weSAqLwotKwkJ aWYgKCFwKQotKwkJCXsKLSsJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQotKwkJCQln b3RvIGVycm9yOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsKLSsJCXEgPSBwIC0gMTsKLSsKLSsJ CS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVk IGNoYXIpKnEpKQotKwkJCSpxLS0gPSAwOwotKwotKwkJKnAgPSAwOwotKwkJdmFsdWUgPSBwICsg MTsKLSsKLSsJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXdoaWxl IChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCi0rCQkJdmFsdWUrKzsKLSsKLSsJCS8q IFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCQlwID0gdmFsdWUgKyBzdHJs ZW4odmFsdWUpIC0gMTsKLSsKLSsJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2ln bmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAwOwotKwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwg IkNvdW50IikpCi0rCQkJewotKwkJCWlmIChDb3VudCAhPSAtMSkKLSsJCQkJZ290byBwYXJzZV9l cnJvcjsKLSsJCQlDb3VudCA9IGF0b2kodmFsdWUpOwotKwkJCWlmIChDb3VudCA8IDApCi0rCQkJ CWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAi S2xlbiIpKQotKwkJCXsKLSsJCQlpZiAoS2xlbiAhPSAtMSkKLSsJCQkJZ290byBwYXJzZV9lcnJv cjsKLSsJCQlLbGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQkJaWYgKEtsZW4gPCAwKQotKwkJCQlnb3Rv IHBhcnNlX2Vycm9yOwotKwkJCWlmIChLbGVuX2NvdW50c19rZXlzKQotKwkJCQl7Ci0rCQkJCUtl eXMgPSBPUEVOU1NMX21hbGxvYyhzaXplb2YoKktleXMpICogS2xlbik7Ci0rCQkJCW1lbXNldChL ZXlzLCAnXDAnLCBzaXplb2YoKktleXMpICogS2xlbik7Ci0rCQkJCX0KLSsJCQllbHNlCi0rCQkJ CXsKLSsJCQkJS2V5cyA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZigqS2V5cykpOwotKwkJCQltZW1z ZXQoS2V5cywgJ1wwJywgc2l6ZW9mKCpLZXlzKSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlm ICghc3RyY21wKGtleXdvcmQsICJNbGVuIikpCi0rCQkJewotKwkJCWlmIChNbGVuICE9IC0xKQot KwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCU1sZW4gPSBhdG9pKHZhbHVlKTsKLSsJCQlpZiAo TWxlbiA8IDApCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0 cmNtcChrZXl3b3JkLCAiVGxlbiIpKQotKwkJCXsKLSsJCQlpZiAoVGxlbiAhPSAtMSkKLSsJCQkJ Z290byBwYXJzZV9lcnJvcjsKLSsJCQlUbGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQkJaWYgKFRsZW4g PCAwKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwgIktleSIpICYmICFLbGVuX2NvdW50c19rZXlzKQotKwkJCXsKLSsJCQlpZiAoS2V5 c1swXSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlLZXlzWzBdID0gaGV4MmJpbl9tKHZh bHVlLCAmS2V5bGVuKTsKLSsJCQlpZiAoIUtleXNbMF0pCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7 Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cm5jbXAoa2V5d29yZCwgIktleSIsIDMpICYmIEtsZW5f Y291bnRzX2tleXMpCi0rCQkJewotKwkJCWludCBrZXludW0gPSBhdG9pKGtleXdvcmQgKyAzKTsK LSsJCQlpZiAoIWtleW51bSB8fCBrZXludW0gPiBLbGVuIHx8IEtleXNba2V5bnVtLTFdKQotKwkJ CQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCUtleXNba2V5bnVtLTFdID0gaGV4MmJpbl9tKHZhbHVl LCAmS2V5bGVuKTsKLSsJCQlpZiAoIUtleXNba2V5bnVtLTFdKQotKwkJCQlnb3RvIHBhcnNlX2Vy cm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQotKwkJCXsK LSsJCQlpZiAoTXNnKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCU1zZyA9IGhleDJiaW5f bSh2YWx1ZSwgJk1zZ2xlbik7Ci0rCQkJaWYgKCFNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7 Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTWFjIikpCi0rCQkJewotKwkJ CWlmIChtb2RlID09IDApCi0rCQkJCWNvbnRpbnVlOwotKwkJCWlmIChNYWMpCi0rCQkJCWdvdG8g cGFyc2VfZXJyb3I7Ci0rCQkJTWFjID0gaGV4MmJpbl9tKHZhbHVlLCAmTWFjbGVuKTsKLSsJCQlp ZiAoIU1hYykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsICJSZXN1bHQiKSkKLSsJCQl7Ci0rCQkJaWYgKG1vZGUgPT0gMSkKLSsJCQkJ Y29udGludWU7Ci0rCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlCi0rCQkJZ290 byBwYXJzZV9lcnJvcjsKLSsKLSsJCWZwdXRzKG9saW5lYnVmLCBvdXQpOwotKwotKwkJaWYgKEtl eXMgJiYgTXNnICYmICghbW9kZSB8fCBNYWMpICYmIChUbGVuID4gMCkgJiYgKEtsZW4gPiAwKSkK LSsJCQl7Ci0rCQkJaWYgKEtsZW5fY291bnRzX2tleXMpCi0rCQkJCXsKLSsJCQkJaW50IHg7Ci0r CQkJCUtleSA9IE9QRU5TU0xfbWFsbG9jKEtsZW4gKiBrbm93bl9rZXlsZW4pOwotKwkJCQlmb3Ig KHggPSAwOyB4IDwgS2xlbjsgeCsrKQotKwkJCQkJewotKwkJCQkJbWVtY3B5KEtleSArIHggKiBr bm93bl9rZXlsZW4sCi0rCQkJCQkJS2V5c1t4XSwga25vd25fa2V5bGVuKTsKLSsJCQkJCU9QRU5T U0xfZnJlZShLZXlzW3hdKTsKLSsJCQkJCX0KLSsJCQkJS2xlbiAqPSBrbm93bl9rZXlsZW47Ci0r CQkJCX0KLSsJCQllbHNlCi0rCQkJCXsKLSsJCQkJS2V5ID0gT1BFTlNTTF9tYWxsb2MoS2xlbik7 Ci0rCQkJCW1lbWNweShLZXksIEtleXNbMF0sIEtsZW4pOwotKwkJCQlPUEVOU1NMX2ZyZWUoS2V5 c1swXSk7Ci0rCQkJCX0KLSsJCQlPUEVOU1NMX2ZyZWUoS2V5cyk7Ci0rCi0rCQkJc3dpdGNoKG1v ZGUpCi0rCQkJCXsKLSsJCQljYXNlIDA6Ci0rCQkJCWlmICghcHJpbnRfY21hY19nZW4oY2lwaGVy LCBvdXQsCi0rCQkJCQkJS2V5LCBLbGVuLAotKwkJCQkJCU1zZywgTWxlbiwKLSsJCQkJCQlUbGVu KSkKLSsJCQkJCWdvdG8gZXJyb3I7Ci0rCQkJCWJyZWFrOwotKwkJCWNhc2UgMToKLSsJCQkJaWYg KCFwcmludF9jbWFjX3ZlcihjaXBoZXIsIG91dCwKLSsJCQkJCQlLZXksIEtsZW4sCi0rCQkJCQkJ TXNnLCBNbGVuLAotKwkJCQkJCU1hYywgTWFjbGVuLAotKwkJCQkJCVRsZW4pKQotKwkJCQkJZ290 byBlcnJvcjsKLSsJCQkJYnJlYWs7Ci0rCQkJCX0KLSsKLSsJCQlPUEVOU1NMX2ZyZWUoS2V5KTsK LSsJCQlLZXkgPSBOVUxMOwotKwkJCU9QRU5TU0xfZnJlZShNc2cpOwotKwkJCU1zZyA9IE5VTEw7 Ci0rCQkJT1BFTlNTTF9mcmVlKE1hYyk7Ci0rCQkJTWFjID0gTlVMTDsKLSsJCQlLbGVuID0gLTE7 Ci0rCQkJTWxlbiA9IC0xOwotKwkJCVRsZW4gPSAtMTsKLSsJCQlDb3VudCA9IC0xOwotKwkJCX0K LSsJCX0KLSsKLSsKLSsJcmV0ID0gMTsKLSsKLSsKLSsJZXJyb3I6Ci0rCi0rCWlmIChvbGluZWJ1 ZikKLSsJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVmKQotKwkJT1BFTlNT TF9mcmVlKGxpbmVidWYpOwotKwlpZiAoS2V5KQotKwkJT1BFTlNTTF9mcmVlKEtleSk7Ci0rCWlm IChNc2cpCi0rCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJaWYgKE1hYykKLSsJCU9QRU5TU0xfZnJl ZShNYWMpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwlwYXJzZV9lcnJvcjoKLSsKLSsJZnByaW50 ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0p OwotKwotKwlnb3RvIGVycm9yOwotKwotKwl9Ci0rCi0rc3RhdGljIGludCBwcmludF9jbWFjX2dl bihjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIEZJTEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIg KktleSwgaW50IEtsZW4sCi0rCQl1bnNpZ25lZCBjaGFyICpNc2csIGludCBNbGVuLAotKwkJaW50 IFRsZW4pCi0rCXsKLSsJaW50IHJjLCBpOwotKwlzaXplX3QgcmVzbGVuOwotKwl1bnNpZ25lZCBj aGFyIHJlc1sxMjhdOwotKwlDTUFDX0NUWCAqY21hY19jdHggPSBDTUFDX0NUWF9uZXcoKTsKLSsK LSsJQ01BQ19Jbml0KGNtYWNfY3R4LCBLZXksIEtsZW4sIGNpcGhlciwgMCk7Ci0rCUNNQUNfVXBk YXRlKGNtYWNfY3R4LCBNc2csIE1sZW4pOwotKwlpZiAoIUNNQUNfRmluYWwoY21hY19jdHgsIHJl cywgJnJlc2xlbikpCi0rCQl7Ci0rCQlmcHV0cygiRXJyb3IgY2FsY3VsYXRpbmcgQ01BQ1xuIiwg c3RkZXJyKTsKLSsJCXJjID0gMDsKLSsJCX0KLSsJZWxzZSBpZiAoVGxlbiA+IChpbnQpcmVzbGVu KQotKwkJewotKwkJZnB1dHMoIlBhcmFtZXRlciBlcnJvciwgVGxlbiA+IENNQUMgbGVuZ3RoXG4i LCBzdGRlcnIpOwotKwkJcmMgPSAwOwotKwkJfQotKwllbHNlCi0rCQl7Ci0rCQlmcHV0cygiTWFj ID0gIiwgb3V0KTsKLSsJCWZvciAoaSA9IDA7IGkgPCBUbGVuOyBpKyspCi0rCQkJZnByaW50Zihv dXQsICIlMDJ4IiwgcmVzW2ldKTsKLSsJCWZwdXRzKFJFU1BfRU9MLCBvdXQpOwotKwkJcmMgPSAx OwotKwkJfQotKwlDTUFDX0NUWF9mcmVlKGNtYWNfY3R4KTsKLSsJcmV0dXJuIHJjOwotKwl9Ci0r Ci0rc3RhdGljIGludCBwcmludF9jbWFjX3Zlcihjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIEZJ TEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKktleSwgaW50IEtsZW4sCi0rCQl1bnNpZ25lZCBj aGFyICpNc2csIGludCBNbGVuLAotKwkJdW5zaWduZWQgY2hhciAqTWFjLCBpbnQgTWFjbGVuLAot KwkJaW50IFRsZW4pCi0rCXsKLSsJaW50IHJjID0gMTsKLSsJc2l6ZV90IHJlc2xlbjsKLSsJdW5z aWduZWQgY2hhciByZXNbMTI4XTsKLSsJQ01BQ19DVFggKmNtYWNfY3R4ID0gQ01BQ19DVFhfbmV3 KCk7Ci0rCi0rCUNNQUNfSW5pdChjbWFjX2N0eCwgS2V5LCBLbGVuLCBjaXBoZXIsIDApOwotKwlD TUFDX1VwZGF0ZShjbWFjX2N0eCwgTXNnLCBNbGVuKTsKLSsJaWYgKCFDTUFDX0ZpbmFsKGNtYWNf Y3R4LCByZXMsICZyZXNsZW4pKQotKwkJewotKwkJZnB1dHMoIkVycm9yIGNhbGN1bGF0aW5nIENN QUNcbiIsIHN0ZGVycik7Ci0rCQlyYyA9IDA7Ci0rCQl9Ci0rCWVsc2UgaWYgKFRsZW4gPiAoaW50 KXJlc2xlbikKLSsJCXsKLSsJCWZwdXRzKCJQYXJhbWV0ZXIgZXJyb3IsIFRsZW4gPiBDTUFDIGxl bmd0aFxuIiwgc3RkZXJyKTsKLSsJCXJjID0gMDsKLSsJCX0KLSsJZWxzZSBpZiAoVGxlbiAhPSBN YWNsZW4pCi0rCQl7Ci0rCQlmcHV0cygiUGFyYW1ldGVyIGVycm9yLCBUbGVuICE9IHJlc3VsdGlu ZyBNYWMgbGVuZ3RoXG4iLCBzdGRlcnIpOwotKwkJcmMgPSAwOwotKwkJfQotKwllbHNlCi0rCQl7 Ci0rCQlpZiAoIW1lbWNtcChNYWMsIHJlcywgTWFjbGVuKSkKLSsJCQlmcHV0cygiUmVzdWx0ID0g UCIgUkVTUF9FT0wsIG91dCk7Ci0rCQllbHNlCi0rCQkJZnB1dHMoIlJlc3VsdCA9IEYiIFJFU1Bf RU9MLCBvdXQpOwotKwkJfQotKwlDTUFDX0NUWF9mcmVlKGNtYWNfY3R4KTsKLSsJcmV0dXJuIHJj OwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9m aXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9m aXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9m aXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMuZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0MDM5MzY5 OCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rl c21vdnMuYwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0MDM5MzY5OCArMDEwMAotQEAgLTAsMCArMSw3 MDIgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNCBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g Ci0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBk aXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQ cm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0 Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0r ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsg KgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKyAgTklTVCBERVMgTW9kZXMgb2YgT3BlcmF0aW9u IFZhbGlkYXRpb24gU3lzdGVtCi0rICBUZXN0IFByb2dyYW0KLSsKLSsgIEJhc2VkIG9uIHRoZSBB RVMgVmFsaWRhdGlvbiBTdWl0ZSwgd2hpY2ggd2FzOgotKyAgRG9uYXRlZCB0byBPcGVuU1NMIGJ5 OgotKyAgVi1PTkUgQ29ycG9yYXRpb24KLSsgIDIwMjUwIENlbnR1cnkgQmx2ZCwgU3VpdGUgMzAw Ci0rICBHZXJtYW50b3duLCBNRCAyMDg3NAotKyAgVS5TLkEuCi0rICAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4K LSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxl cnJuby5oPgotKyNpbmNsdWRlIDxhc3NlcnQuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9kZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9ibi5oPgotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRl ICJlX29zLmgiCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIERFUyBzdXBwb3J0XG4i KTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLSsjZGVmaW5lIERFU19CTE9DS19T SVpFIDgKLSsKLSsjZGVmaW5lIFZFUkJPU0UgMAotKwotK2ludCBERVNUZXN0KEVWUF9DSVBIRVJf Q1RYICpjdHgsCi0rCSAgICBjaGFyICphbW9kZSwgaW50IGFrZXlzeiwgdW5zaWduZWQgY2hhciAq YUtleSwgCi0rCSAgICB1bnNpZ25lZCBjaGFyICppVmVjLCAKLSsJICAgIGludCBkaXIsICAvKiAw ID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5z aWduZWQgY2hhciAqaW4sIGludCBsZW4pCi0rICAgIHsKLSsgICAgY29uc3QgRVZQX0NJUEhFUiAq Y2lwaGVyID0gTlVMTDsKLSsKLSsgICAgaWYgKGFrZXlzeiAhPSAxOTIpCi0rCXsKLSsJcHJpbnRm KCJJbnZhbGlkIGtleSBzaXplOiAlZFxuIiwgYWtleXN6KTsKLSsJRVhJVCgxKTsKLSsJfQotKwot KyAgICBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNCQyIpID09IDApCi0rCWNpcGhlciA9IEVWUF9k ZXNfZWRlM19jYmMoKTsKLSsgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkVDQiIpID09 IDApCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19lY2IoKTsKLSsgICAgZWxzZSBpZiAoc3RyY2Fz ZWNtcChhbW9kZSwgIkNGQjY0IikgPT0gMCkKLSsJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2NmYjY0 KCk7Ci0rICAgIGVsc2UgaWYgKHN0cm5jYXNlY21wKGFtb2RlLCAiT0ZCIiwgMykgPT0gMCkKLSsJ Y2lwaGVyID0gRVZQX2Rlc19lZGUzX29mYigpOwotKyAgICBlbHNlIGlmKCFzdHJjYXNlY21wKGFt b2RlLCJDRkI4IikpCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jZmI4KCk7Ci0rICAgIGVsc2Ug aWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2Nm YjEoKTsKLSsgICAgZWxzZQotKwl7Ci0rCXByaW50ZigiVW5rbm93biBtb2RlOiAlc1xuIiwgYW1v ZGUpOwotKwlFWElUKDEpOwotKwl9Ci0rCi0rICAgIGlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgs IGNpcGhlciwgTlVMTCwgYUtleSwgaVZlYywgZGlyKSA8PSAwKQotKwlyZXR1cm4gMDsKLSsgICAg aWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJTV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxh Z3MoY3R4LCBFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTKTsKLSsgICAgRVZQX0NpcGhlcihjdHgs IG91dCwgaW4sIGxlbik7Ci0rCi0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rdm9pZCBEZWJ1 Z1ZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBpbnQgbGVuKQotKyAgICB7Ci0r ICAgIGNoYXIgb2J1ZlsyMDQ4XTsKLSsgICAgaW50IG9sZW47Ci0rICAgIG9sZW4gPSBiaW4yaGV4 KHZhbCwgbGVuLCBvYnVmKTsKLSsgICAgcHJpbnRmKCIlcyA9ICUuKnNcbiIsIHRhZywgb2xlbiwg b2J1Zik7Ci0rICAgIH0KLSsKLSt2b2lkIHNoaWZ0aW4odW5zaWduZWQgY2hhciAqZHN0LHVuc2ln bmVkIGNoYXIgKnNyYyxpbnQgbmJpdHMpCi0rICAgIHsKLSsgICAgaW50IG47Ci0rCi0rICAgIC8q IG1vdmUgdGhlIGJ5dGVzLi4uICovCi0rICAgIG1lbW1vdmUoZHN0LGRzdCtuYml0cy84LDMqOC1u Yml0cy84KTsKLSsgICAgLyogYXBwZW5kIG5ldyBkYXRhICovCi0rICAgIG1lbWNweShkc3QrMyo4 LW5iaXRzLzgsc3JjLChuYml0cys3KS84KTsKLSsgICAgLyogbGVmdCBzaGlmdCB0aGUgYml0cyAq LwotKyAgICBpZihuYml0cyU4KQotKwlmb3Iobj0wIDsgbiA8IDMqOCA7ICsrbikKLSsJICAgIGRz dFtuXT0oZHN0W25dIDw8IChuYml0cyU4KSl8KGRzdFtuKzFdID4+ICg4LW5iaXRzJTgpKTsKLSsg ICAgfQkKLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKi8KLStjaGFyICp0X3RhZ1syXSA9IHsiUExBSU5URVhUIiwgIkNJUEhFUlRFWFQifTsKLStj aGFyICp0X21vZGVbNl0gPSB7IkNCQyIsIkVDQiIsIk9GQiIsIkNGQjEiLCJDRkI4IiwiQ0ZCNjQi fTsKLStlbnVtIE1vZGUge0NCQywgRUNCLCBPRkIsIENGQjEsIENGQjgsIENGQjY0fTsKLStpbnQg U2l6ZXNbNl09ezY0LDY0LDY0LDEsOCw2NH07Ci0rCi0rdm9pZCBkb19tY3QoY2hhciAqYW1vZGUs IAotKwkgICAgaW50IGFrZXlzeiwgaW50IG51bWtleXMsIHVuc2lnbmVkIGNoYXIgKmFrZXksdW5z aWduZWQgY2hhciAqaXZlYywKLSsJICAgIGludCBkaXIsIHVuc2lnbmVkIGNoYXIgKnRleHQsIGlu dCBsZW4sCi0rCSAgICBGSUxFICpyZnApCi0rICAgIHsKLSsgICAgaW50IGksaW1vZGU7Ci0rICAg IHVuc2lnbmVkIGNoYXIgbmtbNCo4XTsgLyogbG9uZ2VzdCBrZXkrOCAqLwotKyAgICB1bnNpZ25l ZCBjaGFyIHRleHQwWzhdOwotKwotKyAgICBmb3IgKGltb2RlPTAgOyBpbW9kZSA8IDYgOyArK2lt b2RlKQotKwlpZighc3RyY21wKGFtb2RlLHRfbW9kZVtpbW9kZV0pKQotKwkgICAgYnJlYWs7Ci0r ICAgIGlmIChpbW9kZSA9PSA2KQotKwl7IAotKwlwcmludGYoIlVucmVjb2duaXplZCBtb2RlOiAl c1xuIiwgYW1vZGUpOwotKwlFWElUKDEpOwotKwl9Ci0rCi0rICAgIGZvcihpPTAgOyBpIDwgNDAw IDsgKytpKQotKwl7Ci0rCWludCBqOwotKwlpbnQgbjsKLSsJaW50IGtwPWFrZXlzei82NDsKLSsJ dW5zaWduZWQgY2hhciBvbGRfaXZbOF07Ci0rCUVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsJRVZQX0NJ UEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsJZnByaW50ZihyZnAsIlxuQ09VTlQgPSAlZFxuIixp KTsKLSsJaWYoa3AgPT0gMSkKLSsJICAgIE91dHB1dFZhbHVlKCJLRVkiLGFrZXksOCxyZnAsMCk7 Ci0rCWVsc2UKLSsJICAgIGZvcihuPTAgOyBuIDwga3AgOyArK24pCi0rCQl7Ci0rCQlmcHJpbnRm KHJmcCwiS0VZJWQiLG4rMSk7Ci0rCQlPdXRwdXRWYWx1ZSgiIixha2V5K24qOCw4LHJmcCwwKTsK LSsJCX0KLSsKLSsJaWYoaW1vZGUgIT0gRUNCKQotKwkgICAgT3V0cHV0VmFsdWUoIklWIixpdmVj LDgscmZwLDApOwotKwlPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJeMV0sdGV4dCxsZW4scmZwLGltb2Rl ID09IENGQjEpOwotKyNpZiAwCi0rCS8qIGNvbXBlbnNhdGUgZm9yIGVuZGlhbm5lc3MgKi8KLSsJ aWYoaW1vZGUgPT0gQ0ZCMSkKLSsJICAgIHRleHRbMF08PD03OwotKyNlbmRpZgotKwltZW1jcHko dGV4dDAsdGV4dCw4KTsKLSsKLSsJZm9yKGo9MCA7IGogPCAxMDAwMCA7ICsraikKLSsJICAgIHsK LSsJICAgIHVuc2lnbmVkIGNoYXIgb2xkX3RleHRbOF07Ci0rCi0rCSAgICBtZW1jcHkob2xkX3Rl eHQsdGV4dCw4KTsKLSsJICAgIGlmKGogPT0gMCkKLSsJCXsKLSsJCW1lbWNweShvbGRfaXYsaXZl Yyw4KTsKLSsJCURFU1Rlc3QoJmN0eCxhbW9kZSxha2V5c3osYWtleSxpdmVjLGRpcix0ZXh0LHRl eHQsbGVuKTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCW1lbWNweShvbGRfaXYsY3R4Lml2 LDgpOwotKwkJRVZQX0NpcGhlcigmY3R4LHRleHQsdGV4dCxsZW4pOwotKwkJfQotKwkgICAgaWYo aiA9PSA5OTk5KQotKwkJewotKwkJT3V0cHV0VmFsdWUodF90YWdbZGlyXSx0ZXh0LGxlbixyZnAs aW1vZGUgPT0gQ0ZCMSk7Ci0rCQkvKgkJbWVtY3B5KGl2ZWMsdGV4dCw4KTsgKi8KLSsJCX0KLSsJ ICAgIC8qCSAgICBEZWJ1Z1ZhbHVlKCJpdiIsY3R4Lml2LDgpOyAqLwotKwkgICAgLyogYWNjdW11 bGF0ZSBtYXRlcmlhbCBmb3IgdGhlIG5leHQga2V5ICovCi0rCSAgICBzaGlmdGluKG5rLHRleHQs U2l6ZXNbaW1vZGVdKTsKLSsJICAgIC8qCSAgICBEZWJ1Z1ZhbHVlKCJuayIsbmssMjQpOyovCi0r CSAgICBpZigoZGlyICYmIChpbW9kZSA9PSBDRkIxIHx8IGltb2RlID09IENGQjggfHwgaW1vZGUg PT0gQ0ZCNjQKLSsJCQl8fCBpbW9kZSA9PSBDQkMpKSB8fCBpbW9kZSA9PSBPRkIpCi0rCQltZW1j cHkodGV4dCxvbGRfaXYsOCk7Ci0rCi0rCSAgICBpZighZGlyICYmIChpbW9kZSA9PSBDRkIxIHx8 IGltb2RlID09IENGQjggfHwgaW1vZGUgPT0gQ0ZCNjQpKQotKwkJewotKwkJLyogdGhlIHRlc3Qg c3BlY2lmaWVzIHVzaW5nIHRoZSBvdXRwdXQgb2YgdGhlIHJhdyBERVMgb3BlcmF0aW9uCi0rCQkg ICB3aGljaCB3ZSBkb24ndCBoYXZlLCBzbyByZWNvbnN0cnVjdCBpdC4uLiAqLwotKwkJZm9yKG49 MCA7IG4gPCA4IDsgKytuKQotKwkJICAgIHRleHRbbl1ePW9sZF90ZXh0W25dOwotKwkJfQotKwkg ICAgfQotKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCi0rCSAgICBha2V5W25dXj1ua1sxNituXTsK LSsJZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkgICAgYWtleVs4K25dXj1ua1s4K25dOwotKwlm b3Iobj0wIDsgbiA8IDggOyArK24pCi0rCSAgICBha2V5WzE2K25dXj1ua1tuXTsKLSsJaWYobnVt a2V5cyA8IDMpCi0rCSAgICBtZW1jcHkoJmFrZXlbMio4XSxha2V5LDgpOwotKwlpZihudW1rZXlz IDwgMikKLSsJICAgIG1lbWNweSgmYWtleVs4XSxha2V5LDgpOwotKwlERVNfc2V0X29kZF9wYXJp dHkoKERFU19jYmxvY2sgKilha2V5KTsKLSsJREVTX3NldF9vZGRfcGFyaXR5KChERVNfY2Jsb2Nr ICopKGFrZXkrOCkpOwotKwlERVNfc2V0X29kZF9wYXJpdHkoKERFU19jYmxvY2sgKikoYWtleSsx NikpOwotKwltZW1jcHkoaXZlYyxjdHguaXYsOCk7Ci0rCi0rCS8qIHBvaW50bGVzcyBleGVyY2lz ZSAtIHRoZSBmaW5hbCB0ZXh0IGRvZXNuJ3QgZGVwZW5kIG9uIHRoZQotKwkgICBpbml0aWFsIHRl eHQgaW4gT0ZCIG1vZGUsIHNvIHdobyBjYXJlcyB3aGF0IGl0IGlzPyAoV2hvCi0rCSAgIGRlc2ln bmVkIHRoZXNlIHRlc3RzPykgKi8KLSsJaWYoaW1vZGUgPT0gT0ZCKQotKwkgICAgZm9yKG49MCA7 IG4gPCA4IDsgKytuKQotKwkJdGV4dFtuXT10ZXh0MFtuXV5vbGRfaXZbbl07Ci0rCX0KLSsgICAg fQotKyAgICAKLStpbnQgcHJvY19maWxlKGNoYXIgKnJxZmlsZSwgY2hhciAqcnNwZmlsZSkKLSsg ICAgewotKyAgICBjaGFyIGFmblsyNTZdLCByZm5bMjU2XTsKLSsgICAgRklMRSAqYWZwID0gTlVM TCwgKnJmcCA9IE5VTEw7Ci0rICAgIGNoYXIgaWJ1ZlsyMDQ4XSwgdGJ1ZlsyMDQ4XTsKLSsgICAg aW50IGlsZW4sIGxlbiwgcmV0ID0gMDsKLSsgICAgY2hhciBhbW9kZVs4XSA9ICIiOwotKyAgICBj aGFyIGF0ZXN0WzEwMF0gPSAiIjsKLSsgICAgaW50IGFrZXlzej0wOwotKyAgICB1bnNpZ25lZCBj aGFyIGlWZWNbMjBdLCBhS2V5WzQwXTsKLSsgICAgaW50IGRpciA9IC0xLCBlcnIgPSAwLCBzdGVw ID0gMDsKLSsgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMjA0OF07Ci0rICAgIHVuc2lnbmVk IGNoYXIgY2lwaGVydGV4dFsyMDQ4XTsKLSsgICAgY2hhciAqcnA7Ci0rICAgIEVWUF9DSVBIRVJf Q1RYIGN0eDsKLSsgICAgaW50IG51bWtleXM9MTsKLSsgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgm Y3R4KTsKLSsKLSsgICAgaWYgKCFycWZpbGUgfHwgISgqcnFmaWxlKSkKLSsJewotKwlwcmludGYo Ik5vIHJlcSBmaWxlXG4iKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIHN0cmNweShhZm4sIHJx ZmlsZSk7Ci0rCi0rICAgIGlmICgoYWZwID0gZm9wZW4oYWZuLCAiciIpKSA9PSBOVUxMKQotKwl7 Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKLSsJICAgICAgIGFmbiwg c3RyZXJyb3IoZXJybm8pKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIGlmICghcnNwZmlsZSkK LSsJewotKwlzdHJjcHkocmZuLGFmbik7Ci0rCXJwPXN0cnN0cihyZm4sInJlcS8iKTsKLSsjaWZk ZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsJaWYgKCFycCkKLSsJICAgIHJwPXN0cnN0cihyZm4sInJl cVxcIik7Ci0rI2VuZGlmCi0rCWFzc2VydChycCk7Ci0rCW1lbWNweShycCwicnNwIiwzKTsKLSsJ cnAgPSBzdHJzdHIocmZuLCAiLnJlcSIpOwotKwltZW1jcHkocnAsICIucnNwIiwgNCk7Ci0rCXJz cGZpbGUgPSByZm47Ci0rCX0KLSsgICAgaWYgKChyZnAgPSBmb3Blbihyc3BmaWxlLCAidyIpKSA9 PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKLSsJ ICAgICAgIHJmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJZmNsb3NlKGFmcCk7Ci0rCWFmcCA9IE5V TEw7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICB3aGlsZSAoIWVyciAmJiAoZmdldHMoaWJ1Ziwg c2l6ZW9mKGlidWYpLCBhZnApKSAhPSBOVUxMKQotKwl7Ci0rCXRpZHlfbGluZSh0YnVmLCBpYnVm KTsKLSsJaWxlbiA9IHN0cmxlbihpYnVmKTsKLSsJLyoJcHJpbnRmKCJzdGVwPSVkIGlidWY9JXMi LHN0ZXAsaWJ1Zik7Ki8KLSsJaWYoc3RlcCA9PSAzICYmICFzdHJjbXAoYW1vZGUsIkVDQiIpKQot KwkgICAgewotKwkgICAgbWVtc2V0KGlWZWMsIDAsIHNpemVvZihpVmVjKSk7Ci0rCSAgICBzdGVw ID0gKGRpcik/IDQ6IDU7ICAvKiBubyBpdmVjIGZvciBFQ0IgKi8KLSsJICAgIH0KLSsJc3dpdGNo IChzdGVwKQotKwkgICAgewotKwljYXNlIDA6ICAvKiByZWFkIHByZWFtYmxlICovCi0rCSAgICBp ZiAoaWJ1ZlswXSA9PSAnXG4nKQotKwkJeyAvKiBlbmQgb2YgcHJlYW1ibGUgKi8KLSsJCWlmICgq YW1vZGUgPT0gJ1wwJykKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJNaXNzaW5nIE1vZGVcbiIp OwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBm cHV0cyhpYnVmLCByZnApOwotKwkJICAgICsrIHN0ZXA7Ci0rCQkgICAgfQotKwkJfQotKwkgICAg ZWxzZSBpZiAoaWJ1ZlswXSAhPSAnIycpCi0rCQl7Ci0rCQlwcmludGYoIkludmFsaWQgcHJlYW1i bGUgaXRlbTogJXNcbiIsIGlidWYpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJ CXsgLyogcHJvY2VzcyBwcmVhbWJsZSAqLwotKwkJY2hhciAqeHAsICpwcCA9IGlidWYrMjsKLSsJ CWludCBuOwotKwkJaWYoKmFtb2RlKQotKwkJICAgIHsgLyogaW5zZXJ0IGN1cnJlbnQgdGltZSAm IGRhdGUgKi8KLSsJCSAgICB0aW1lX3QgcnRpbSA9IHRpbWUoMCk7Ci0rCQkgICAgZnByaW50Zihy ZnAsICIjICVzIiwgY3RpbWUoJnJ0aW0pKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewot KwkJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQkgICAgaWYoIXN0cm5jbXAocHAsIklOVkVSU0Ug Iiw4KSB8fCAhc3RybmNtcChwcCwiREVTICIsNCkKLSsJCSAgICAgICB8fCAhc3RybmNtcChwcCwi VERFUyAiLDUpCi0rCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlBFUk1VVEFUSU9OICIsMTIpCi0r CQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlNVQlNUSVRVVElPTiAiLDEzKQotKwkJICAgICAgIHx8 ICFzdHJuY21wKHBwLCJWQVJJQUJMRSAiLDkpKQotKwkJCXsKLSsJCQkvKiBnZXQgdGVzdCB0eXBl ICovCi0rCQkJaWYoIXN0cm5jbXAocHAsIkRFUyAiLDQpKQotKwkJCSAgICBwcCs9NDsKLSsJCQll bHNlIGlmKCFzdHJuY21wKHBwLCJUREVTICIsNSkpCi0rCQkJICAgIHBwKz01OwotKwkJCXhwID0g c3RyY2hyKHBwLCAnICcpOwotKwkJCW4gPSB4cC1wcDsKLSsJCQlzdHJuY3B5KGF0ZXN0LCBwcCwg bik7Ci0rCQkJYXRlc3Rbbl0gPSAnXDAnOwotKwkJCS8qIGdldCBtb2RlICovCi0rCQkJeHAgPSBz dHJyY2hyKHBwLCAnICcpOyAvKiBnZXQgbW9kZSIgKi8KLSsJCQluID0gc3RybGVuKHhwKzEpLTE7 Ci0rCQkJc3RybmNweShhbW9kZSwgeHArMSwgbik7Ci0rCQkJYW1vZGVbbl0gPSAnXDAnOwotKwkJ CS8qIGFtb2RlWzNdID0gJ1wwJzsgKi8KLSsJCQlpZiAoVkVSQk9TRSkKLSsJCQkJcHJpbnRmKCJU ZXN0PSVzLCBNb2RlPSVzXG4iLGF0ZXN0LGFtb2RlKTsKLSsJCQl9Ci0rCQkgICAgfQotKwkJfQot KwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgMTogIC8qIFtFTkNSWVBUXSB8IFtERUNSWVBUXSAqLwot KwkgICAgaWYoaWJ1ZlswXSA9PSAnXG4nKQotKwkJYnJlYWs7Ci0rCSAgICBpZiAoaWJ1ZlswXSA9 PSAnWycpCi0rCQl7Ci0rCQlmcHV0cyhpYnVmLCByZnApOwotKwkJKytzdGVwOwotKwkJaWYgKHN0 cm5jYXNlY21wKGlidWYsICJbRU5DUllQVF0iLCA5KSA9PSAwKQotKwkJICAgIGRpciA9IDE7Ci0r CQllbHNlIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0RFQ1JZUFRdIiwgOSkgPT0gMCkKLSsJCSAg ICBkaXIgPSAwOwotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQga2V5 d29yZDogJXNcbiIsIGlidWYpOwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJYnJlYWs7 Ci0rCQl9Ci0rCSAgICBlbHNlIGlmIChkaXIgPT0gLTEpCi0rCQl7Ci0rCQllcnIgPSAxOwotKwkJ cHJpbnRmKCJNaXNzaW5nIEVOQ1JZUFQvREVDUllQVCBrZXl3b3JkXG4iKTsKLSsJCWJyZWFrOwot KwkJfQotKwkgICAgZWxzZSAKLSsJCXN0ZXAgPSAyOwotKwotKwljYXNlIDI6IC8qIEtFWSA9IHh4 eHggKi8KLSsJICAgIGlmKCppYnVmID09ICdcbicpCi0rCQl7Ci0rCSAgICAgICAgZnB1dHMoaWJ1 ZiwgcmZwKTsKLSsJCWJyZWFrOwotKyAgICAgICAgICAgICAgICB9Ci0rCSAgICBpZighc3RybmNh c2VjbXAoaWJ1ZiwiQ09VTlQgPSAiLDgpKQotKwkJewotKwkgICAgICAgIGZwdXRzKGlidWYsIHJm cCk7Ci0rCQlicmVhazsKLSsgICAgICAgICAgICAgICAgfQotKwkgICAgaWYoIXN0cm5jYXNlY21w KGlidWYsIkNPVU5UPSIsNikpCi0rCQl7Ci0rCSAgICAgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJ CWJyZWFrOwotKyAgICAgICAgICAgICAgICB9Ci0rCSAgICBpZighc3RybmNhc2VjbXAoaWJ1Ziwi TnVtS2V5cyA9ICIsMTApKQotKwkJewotKwkJbnVta2V5cz1hdG9pKGlidWYrMTApOwotKwkJYnJl YWs7Ci0rCQl9Ci0rCSAgCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYoIXN0cm5j YXNlY21wKGlidWYsIktFWSA9ICIsNikpCi0rCQl7Ci0rCQlha2V5c3o9NjQ7Ci0rCQlsZW4gPSBo ZXgyYmluKChjaGFyKilpYnVmKzYsIGFLZXkpOwotKwkJaWYgKGxlbiA8IDApCi0rCQkgICAgewot KwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOwotKwkJICAgIGVycj0xOwotKwkJICAgIGJy ZWFrOwotKwkJICAgIH0KLSsJCVByaW50VmFsdWUoIktFWSIsIGFLZXksIGxlbik7Ci0rCQkrK3N0 ZXA7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJLRVlzID0gIiw3KSkK LSsJCXsKLSsJCWFrZXlzej02NCozOwotKwkJbGVuPWhleDJiaW4oaWJ1Zis3LGFLZXkpOwotKwkJ aWYobGVuICE9IDgpCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOwot KwkJICAgIGVycj0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCW1lbWNweShhS2V5Kzgs YUtleSw4KTsKLSsJCW1lbWNweShhS2V5KzE2LGFLZXksOCk7Ci0rCQlpYnVmWzRdPSdcMCc7Ci0r CQlQcmludFZhbHVlKCJLRVlzIixhS2V5LGxlbik7Ci0rCQkrK3N0ZXA7Ci0rCQl9Ci0rCSAgICBl bHNlIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJLRVkiLDMpKQotKwkJewotKwkJaW50IG49aWJ1Zlsz XS0nMSc7Ci0rCi0rCQlha2V5c3o9NjQqMzsKLSsJCWxlbj1oZXgyYmluKGlidWYrNyxhS2V5K24q OCk7Ci0rCQlpZihsZW4gIT0gOCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIEtF WVxuIik7Ci0rCQkgICAgZXJyPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJaWJ1Zls0 XT0nXDAnOwotKwkJUHJpbnRWYWx1ZShpYnVmLGFLZXksbGVuKTsKLSsJCWlmKG4gPT0gMikKLSsJ CSAgICArK3N0ZXA7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlwcmludGYoIk1pc3Npbmcg S0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSAzOiAv KiBJViA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZiAoc3RybmNh c2VjbXAoaWJ1ZiwgIklWID0gIiwgNSkgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBJ VlxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJbGVuID0gaGV4 MmJpbigoY2hhciopaWJ1Zis1LCBpVmVjKTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJ CSAgICBwcmludGYoIkludmFsaWQgSVZcbiIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVh azsKLSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJJViIsIGlWZWMsIGxlbik7Ci0rCQlzdGVwID0g KGRpcik/IDQ6IDU7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSA0OiAvKiBQTEFJTlRF WFQgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYgKHN0cm5jYXNl Y21wKGlidWYsICJQTEFJTlRFWFQgPSAiLCAxMikgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlz c2luZyBQTEFJTlRFWFRcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsK LSsJCWludCBubiA9IHN0cmxlbihpYnVmKzEyKTsKLSsJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEi KSkKLSsJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMixubi0xLHBsYWludGV4dCk7Ci0rCQllbHNl Ci0rCQkgICAgbGVuPWhleDJiaW4oaWJ1ZisxMiwgcGxhaW50ZXh0KTsKLSsJCWlmIChsZW4gPCAw KQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgUExBSU5URVhUOiAlcyIsIGlidWYr MTIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlpZiAobGVu ID49IHNpemVvZihwbGFpbnRleHQpKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkJ1ZmZlciBv dmVyZmxvd1xuIik7Ci0rCQkgICAgfQotKwkJUHJpbnRWYWx1ZSgiUExBSU5URVhUIiwgKHVuc2ln bmVkIGNoYXIqKXBsYWludGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYXRlc3QsICJNb250ZSIp ID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCi0rCQkgICAgewotKwkJICAgIGRvX21jdChh bW9kZSxha2V5c3osbnVta2V5cyxhS2V5LGlWZWMsZGlyLHBsYWludGV4dCxsZW4scmZwKTsKLSsJ CSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGFzc2VydChkaXIgPT0gMSk7Ci0rCQkg ICAgcmV0ID0gREVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKLSsJCQkJ ICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBjaXBoZXJ0ZXh0 LCBwbGFpbnRleHQsIGxlbik7Ci0rCQkgICAgT3V0cHV0VmFsdWUoIkNJUEhFUlRFWFQiLGNpcGhl cnRleHQsbGVuLHJmcCwKLSsJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKLSsJCSAgICB9Ci0r CQlzdGVwID0gNjsKLSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwljYXNlIDU6IC8qIENJUEhFUlRF WFQgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYgKHN0cm5jYXNl Y21wKGlidWYsICJDSVBIRVJURVhUID0gIiwgMTMpICE9IDApCi0rCQl7Ci0rCQlwcmludGYoIk1p c3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlp Zighc3RyY21wKGFtb2RlLCJDRkIxIikpCi0rCQkgICAgbGVuPWJpbnQyYmluKGlidWYrMTMsc3Ry bGVuKGlidWYrMTMpLTEsY2lwaGVydGV4dCk7Ci0rCQllbHNlCi0rCQkgICAgbGVuID0gaGV4MmJp bihpYnVmKzEzLGNpcGhlcnRleHQpOwotKwkJaWYgKGxlbiA8IDApCi0rCQkgICAgewotKwkJICAg IHByaW50ZigiSW52YWxpZCBDSVBIRVJURVhUXG4iKTsKLSsJCSAgICBlcnIgPTE7Ci0rCQkgICAg YnJlYWs7Ci0rCQkgICAgfQotKwkJCi0rCQlQcmludFZhbHVlKCJDSVBIRVJURVhUIiwgY2lwaGVy dGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYXRlc3QsICJNb250ZSIpID09IDApICAvKiBNb250 ZSBDYXJsbyBUZXN0ICovCi0rCQkgICAgewotKwkJICAgIGRvX21jdChhbW9kZSwgYWtleXN6LCBu dW1rZXlzLCBhS2V5LCBpVmVjLCAKLSsJCQkgICBkaXIsIGNpcGhlcnRleHQsIGxlbiwgcmZwKTsK LSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGFzc2VydChkaXIgPT0gMCk7Ci0r CQkgICAgcmV0ID0gREVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKLSsJ CQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBwbGFpbnRl eHQsIGNpcGhlcnRleHQsIGxlbik7Ci0rCQkgICAgT3V0cHV0VmFsdWUoIlBMQUlOVEVYVCIsKHVu c2lnbmVkIGNoYXIgKilwbGFpbnRleHQsbGVuLHJmcCwKLSsJCQkJIXN0cmNtcChhbW9kZSwiQ0ZC MSIpKTsKLSsJCSAgICB9Ci0rCQlzdGVwID0gNjsKLSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwlj YXNlIDY6Ci0rCSAgICBpZiAoaWJ1ZlswXSAhPSAnXG4nKQotKwkJewotKwkJZXJyID0gMTsKLSsJ CXByaW50ZigiTWlzc2luZyB0ZXJtaW5hdG9yXG4iKTsKLSsJCX0KLSsJICAgIGVsc2UgaWYgKHN0 cmNtcChhdGVzdCwgIk1DVCIpICE9IDApCi0rCQl7IC8qIE1DVCBhbHJlYWR5IGFkZGVkIHRlcm1p bmF0aW5nIG5sICovCi0rCQlmcHV0cyhpYnVmLCByZnApOwotKwkJfQotKwkgICAgc3RlcCA9IDE7 Ci0rCSAgICBicmVhazsKLSsJICAgIH0KLSsJfQotKyAgICBpZiAocmZwKQotKwlmY2xvc2UocmZw KTsKLSsgICAgaWYgKGFmcCkKLSsJZmNsb3NlKGFmcCk7Ci0rICAgIHJldHVybiBlcnI7Ci0rICAg IH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCi0rICBQcm9jZXNzZXMgZWl0aGVyIGEgc2luZ2xlIGZpbGUgb3IgCi0rICBhIHNldCBvZiBm aWxlcyB3aG9zZSBuYW1lcyBhcmUgcGFzc2VkIGluIGEgZmlsZS4KLSsgIEEgc2luZ2xlIGZpbGUg aXMgc3BlY2lmaWVkIGFzOgotKyAgICBhZXNfdGVzdCAtZiB4eHgucmVxCi0rICBBIHNldCBvZiBm aWxlcyBpcyBzcGVjaWZpZWQgYXM6Ci0rICAgIGFlc190ZXN0IC1kIHh4eHh4Lnh4eAotKyAgVGhl IGRlZmF1bHQgaXM6IC1kIHJlcS50eHQKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSovCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQot KyAgICB7Ci0rICAgIGNoYXIgKnJxbGlzdCA9ICJyZXEudHh0IiwgKnJzcGZpbGUgPSBOVUxMOwot KyAgICBGSUxFICpmcCA9IE5VTEw7Ci0rICAgIGNoYXIgZm5bMjUwXSA9ICIiLCByZm5bMjU2XSA9 ICIiOwotKyAgICBpbnQgZl9vcHQgPSAwLCBkX29wdCA9IDE7Ci0rCi0rI2lmZGVmIE9QRU5TU0xf RklQUwotKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKLSsJewotKwlkb19wcmludF9lcnJvcnMo KTsKLSsJRVhJVCgxKTsKLSsJfQotKyNlbmRpZgotKyAgICBpZiAoYXJnYyA+IDEpCi0rCXsKLSsJ aWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1kIikgPT0gMCkKLSsJICAgIHsKLSsJICAgIGRfb3B0 ID0gMTsKLSsJICAgIH0KLSsJZWxzZSBpZiAoc3RyY2FzZWNtcChhcmd2WzFdLCAiLWYiKSA9PSAw KQotKwkgICAgewotKwkgICAgZl9vcHQgPSAxOwotKwkgICAgZF9vcHQgPSAwOwotKwkgICAgfQot KwllbHNlCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIkludmFsaWQgcGFyYW1ldGVyOiAlc1xuIiwg YXJndlsxXSk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsJaWYgKGFyZ2MgPCAzKQotKwkg ICAgewotKwkgICAgcHJpbnRmKCJNaXNzaW5nIHBhcmFtZXRlclxuIik7Ci0rCSAgICByZXR1cm4g MDsKLSsJICAgIH0KLSsJaWYgKGRfb3B0KQotKwkgICAgcnFsaXN0ID0gYXJndlsyXTsKLSsJZWxz ZQotKwkgICAgewotKwkgICAgc3RyY3B5KGZuLCBhcmd2WzJdKTsKLSsJICAgIHJzcGZpbGUgPSBh cmd2WzNdOwotKwkgICAgfQotKwl9Ci0rICAgIGlmIChkX29wdCkKLSsJeyAvKiBsaXN0IG9mIGZp bGVzIChkaXJlY3RvcnkpICovCi0rCWlmICghKGZwID0gZm9wZW4ocnFsaXN0LCAiciIpKSkKLSsJ ICAgIHsKLSsJICAgIHByaW50ZigiQ2Fubm90IG9wZW4gcmVxIGxpc3QgZmlsZVxuIik7Ci0rCSAg ICByZXR1cm4gLTE7Ci0rCSAgICB9Ci0rCXdoaWxlIChmZ2V0cyhmbiwgc2l6ZW9mKGZuKSwgZnAp KQotKwkgICAgewotKwkgICAgc3RydG9rKGZuLCAiXHJcbiIpOwotKwkgICAgc3RyY3B5KHJmbiwg Zm4pOwotKwkgICAgcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgcmZuKTsKLSsJICAgIGlmIChw cm9jX2ZpbGUocmZuLCByc3BmaWxlKSkKLSsJCXsKLSsJCXByaW50ZigiPj4+IFByb2Nlc3Npbmcg ZmFpbGVkIGZvcjogJXMgPDw8XG4iLCByZm4pOwotKwkJRVhJVCgxKTsKLSsJCX0KLSsJICAgIH0K LSsJZmNsb3NlKGZwKTsKLSsJfQotKyAgICBlbHNlIC8qIHNpbmdsZSBmaWxlICovCi0rCXsKLSsJ aWYgKFZFUkJPU0UpCi0rCQlwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCBmbik7Ci0rCWlmIChw cm9jX2ZpbGUoZm4sIHJzcGZpbGUpKQotKwkgICAgewotKwkgICAgcHJpbnRmKCI+Pj4gUHJvY2Vz c2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIGZuKTsKLSsJICAgIH0KLSsJfQotKyAgICBFWElU KDApOwotKyAgICByZXR1cm4gMDsKLSsgICAgfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGh2cy5jLmZpcHMgb3BlbnNzbC0x LjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGh2cy5jCi0tLS0gb3BlbnNzbC0xLjAu MS1iZXRhMi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGh2cy5jLmZpcHMJMjAxMi0wMi0wNyAxMTow NzowMi41NDAzOTM2OTggKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBz L2NhdnMvZmlwc19kaHZzLmMJMjAxMi0wMi0wNyAxMTowNzowMi41NDAzOTM2OTggKzAxMDAKLUBA IC0wLDAgKzEsMjkyIEBACi0rLyogZmlwcy9kaC9maXBzX2RodnMuYyAqLwotKy8qIFdyaXR0ZW4g YnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNT TAotKyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMp IDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsg 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 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICov Ci0rCi0rCi0rI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVu c3NsY29uZi5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPHN0ZGlvLmg+ Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotK3sKLSsgICAgcHJpbnRmKCJO byBGSVBTIERIIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKyNlbHNlCi0rCi0r I2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9kaC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVk ZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rCi0rI2luY2x1ZGUgImZpcHNfdXRs LmgiCi0rCi0rc3RhdGljIGNvbnN0IEVWUF9NRCAqcGFyc2VfbWQoY2hhciAqbGluZSkKLSsJewot KwljaGFyICpwOwotKwlpZiAobGluZVswXSAhPSAnWycgfHwgbGluZVsxXSAhPSAnRicpCi0rCQly ZXR1cm4gTlVMTDsKLSsJcCA9IHN0cmNocihsaW5lLCAnLScpOwotKwlpZiAoIXApCi0rCQlyZXR1 cm4gTlVMTDsKLSsJbGluZSA9IHAgKyAxOwotKwlwID0gc3RyY2hyKGxpbmUsICddJyk7Ci0rCWlm ICghcCkKLSsJCXJldHVybiBOVUxMOwotKwkqcCA9IDA7Ci0rCXAgPSBsaW5lOwotKwl3aGlsZShp c3NwYWNlKCpwKSkKLSsJCXArKzsKLSsJaWYgKCFzdHJjbXAocCwgIlNIQTEiKSkKLSsJCXJldHVy biBFVlBfc2hhMSgpOwotKwllbHNlIGlmICghc3RyY21wKHAsICJTSEEyMjQiKSkKLSsJCXJldHVy biBFVlBfc2hhMjI0KCk7Ci0rCWVsc2UgaWYgKCFzdHJjbXAocCwgIlNIQTI1NiIpKQotKwkJcmV0 dXJuIEVWUF9zaGEyNTYoKTsKLSsJZWxzZSBpZiAoIXN0cmNtcChwLCAiU0hBMzg0IikpCi0rCQly ZXR1cm4gRVZQX3NoYTM4NCgpOwotKwllbHNlIGlmICghc3RyY21wKHAsICJTSEE1MTIiKSkKLSsJ CXJldHVybiBFVlBfc2hhNTEyKCk7Ci0rCWVsc2UKLSsJCXJldHVybiBOVUxMOwotKwl9Ci0rCi0r c3RhdGljIHZvaWQgb3V0cHV0X1poYXNoKEZJTEUgKm91dCwgaW50IGV4b3V0LAotKwkJCQlESCAq ZGgsIEJJR05VTSAqcGVlcmtleSwgY29uc3QgRVZQX01EICptZCwKLSsJCQkJdW5zaWduZWQgY2hh ciAqcmhhc2gsIHNpemVfdCByaGFzaGxlbikKLSsJewotKwl1bnNpZ25lZCBjaGFyICpaOwotKwl1 bnNpZ25lZCBjaGFyIGNoYXNoW0VWUF9NQVhfTURfU0laRV07Ci0rCWludCBabGVuOwotKwlpZiAo cmhhc2ggPT0gTlVMTCkKLSsJCXsKLSsJCXJoYXNobGVuID0gTV9FVlBfTURfc2l6ZShtZCk7Ci0r CQlpZiAoIURIX2dlbmVyYXRlX2tleShkaCkpCi0rCQkJZXhpdCAoMSk7Ci0rCQlkb19ibl9wcmlu dF9uYW1lKG91dCwgIlllcGhlbUlVVCIsIGRoLT5wdWJfa2V5KTsKLSsJCWlmIChleG91dCkKLSsJ CQlkb19ibl9wcmludF9uYW1lKG91dCwgIlhlcGhlbUlVVCIsIGRoLT5wcml2X2tleSk7Ci0rCQl9 Ci0rCVogPSBPUEVOU1NMX21hbGxvYyhCTl9udW1fYnl0ZXMoZGgtPnApKTsKLSsJaWYgKCFaKQot KwkJZXhpdCgxKTsKLSsJWmxlbiA9IERIX2NvbXB1dGVfa2V5X3BhZGRlZChaLCBwZWVya2V5LCBk aCk7Ci0rCWlmIChleG91dCkKLSsJCU91dHB1dFZhbHVlKCJaIiwgWiwgWmxlbiwgb3V0LCAwKTsK LSsJRklQU19kaWdlc3QoWiwgWmxlbiwgY2hhc2gsIE5VTEwsIG1kKTsKLSsJT3V0cHV0VmFsdWUo cmhhc2ggPyAiSVVUSGFzaFpaIiA6ICJIYXNoWloiLCBjaGFzaCwgcmhhc2hsZW4sIG91dCwgMCk7 Ci0rCWlmIChyaGFzaCkKLSsJCXsKLSsJCWZwcmludGYob3V0LCAiUmVzdWx0ID0gJXNcbiIsCi0r CQkJCW1lbWNtcChjaGFzaCwgcmhhc2gsIHJoYXNobGVuKSA/ICJGIiA6ICJQIik7Ci0rCQl9Ci0r CWVsc2UKLSsJCXsKLSsJCUJOX2NsZWFyX2ZyZWUoZGgtPnByaXZfa2V5KTsKLSsJCUJOX2NsZWFy X2ZyZWUoZGgtPnB1Yl9rZXkpOwotKwkJZGgtPnByaXZfa2V5ID0gTlVMTDsKLSsJCWRoLT5wdWJf a2V5ID0gTlVMTDsKLSsJCX0KLSsJT1BFTlNTTF9jbGVhbnNlKFosIFpsZW4pOwotKwlPUEVOU1NM X2ZyZWUoWik7Ci0rCX0KLSsKLSsjaWZkZWYgRklQU19BTEdWUwotK2ludCBmaXBzX2RodnNfbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rI2Vsc2UKLStpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCi0rI2VuZGlmCi0rCXsKLSsJY2hhciAqKmFyZ3MgPSBhcmd2ICsgMTsKLSsJaW50 IGFyZ24gPSBhcmdjIC0gMTsKLSsJRklMRSAqaW4sICpvdXQ7Ci0rCWNoYXIgYnVmWzIwNDhdLCBs YnVmWzIwNDhdOwotKwl1bnNpZ25lZCBjaGFyICpyaGFzaDsKLSsJbG9uZyByaGFzaGxlbjsKLSsJ REggKmRoID0gTlVMTDsKLSsJY29uc3QgRVZQX01EICptZCA9IE5VTEw7Ci0rCUJJR05VTSAqcGVl cmtleSA9IE5VTEw7Ci0rCWNoYXIgKmtleXdvcmQgPSBOVUxMLCAqdmFsdWUgPSBOVUxMOwotKwlp bnQgZG9fdmVyaWZ5ID0gLTEsIGV4b3V0ID0gMDsKLSsKLSsJZmlwc19hbGd0ZXN0X2luaXQoKTsK LSsKLSsJaWYgKGFyZ24gJiYgIXN0cmNtcCgqYXJncywgImRodmVyIikpCi0rCQl7Ci0rCQlkb192 ZXJpZnkgPSAxOwotKwkJYXJncysrOwotKwkJYXJnbi0tOwotKwkJfQotKwllbHNlIGlmIChhcmdu ICYmICFzdHJjbXAoKmFyZ3MsICJkaGdlbiIpKQotKwkJewotKwkJZG9fdmVyaWZ5ID0gMDsKLSsJ CWFyZ3MrKzsKLSsJCWFyZ24tLTsKLSsJCX0KLSsKLSsJaWYgKGFyZ24gJiYgIXN0cmNtcCgqYXJn cywgIi1leG91dCIpKQotKwkJewotKwkJZXhvdXQgPSAxOwotKwkJYXJncysrOwotKwkJYXJnbi0t OwotKwkJfQotKwotKwlpZiAoZG9fdmVyaWZ5ID09IC0xKQotKwkJewotKwkJZnByaW50ZihzdGRl cnIsIiVzIFtkaHZlcnxkaGdlbnxdIFstZXhvdXRdIChpbmZpbGUgb3V0ZmlsZSlcbiIsYXJndlsw XSk7Ci0rCQlleGl0KDEpOwotKwkJfQotKwotKwlpZiAoYXJnbiA9PSAyKQotKwkJewotKwkJaW4g PSBmb3BlbigqYXJncywgInIiKTsKLSsJCWlmICghaW4pCi0rCQkJewotKwkJCWZwcmludGYoc3Rk ZXJyLCAiRXJyb3Igb3BlbmluZyBpbnB1dCBmaWxlXG4iKTsKLSsJCQlleGl0KDEpOwotKwkJCX0K LSsJCW91dCA9IGZvcGVuKGFyZ3NbMV0sICJ3Iik7Ci0rCQlpZiAoIW91dCkKLSsJCQl7Ci0rCQkJ ZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIG91dHB1dCBmaWxlXG4iKTsKLSsJCQlleGl0 KDEpOwotKwkJCX0KLSsJCX0KLSsJZWxzZSBpZiAoYXJnbiA9PSAwKQotKwkJewotKwkJaW4gPSBz dGRpbjsKLSsJCW91dCA9IHN0ZG91dDsKLSsJCX0KLSsJZWxzZQotKwkJewotKwkJZnByaW50Zihz dGRlcnIsIiVzIFtkaHZlcnxkaGdlbnxdIFstZXhvdXRdIChpbmZpbGUgb3V0ZmlsZSlcbiIsYXJn dlswXSk7Ci0rCQlleGl0KDEpOwotKwkJfQotKwotKwlkaCA9IEZJUFNfZGhfbmV3KCk7Ci0rCi0r CXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBpbikgIT0gTlVMTCkKLSsJCXsKLSsJCWZw dXRzKGJ1Ziwgb3V0KTsKLSsJCWlmIChzdHJsZW4oYnVmKSA+IDYgJiYgIXN0cm5jbXAoYnVmLCAi W0YiLCAyKSkKLSsJCQl7Ci0rCQkJbWQgPSBwYXJzZV9tZChidWYpOwotKwkJCWlmIChtZCA9PSBO VUxMKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCWlmIChkaCkKLSsJCQkJRklQU19kaF9m cmVlKGRoKTsKLSsJCQlkaCA9IEZJUFNfZGhfbmV3KCk7Ci0rCQkJY29udGludWU7Ci0rCQkJfQot KwkJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQkJY29u dGludWU7Ci0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiUCIpKQotKwkJCXsKLSsJCQlpZiAoIWRv X2hleDJibigmZGgtPnAsIHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0r CQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJRIikpCi0rCQkJewotKwkJCWlmICghZG9faGV4 MmJuKCZkaC0+cSwgdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVs c2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIkciKSkKLSsJCQl7Ci0rCQkJaWYgKCFkb19oZXgyYm4o JmRoLT5nLCB2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBp ZiAoIXN0cmNtcChrZXl3b3JkLCAiWGVwaGVtSVVUIikpCi0rCQkJewotKwkJCWlmICghZG9faGV4 MmJuKCZkaC0+cHJpdl9rZXksIHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9 Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJZZXBoZW1JVVQiKSkKLSsJCQl7Ci0rCQkJ aWYgKCFkb19oZXgyYm4oJmRoLT5wdWJfa2V5LCB2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJy b3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWWVwaGVtQ0FWUyIpKQot KwkJCXsKLSsJCQlpZiAoIWRvX2hleDJibigmcGVlcmtleSwgdmFsdWUpKQotKwkJCQlnb3RvIHBh cnNlX2Vycm9yOwotKwkJCWlmIChkb192ZXJpZnkgPT0gMCkKLSsJCQkJb3V0cHV0X1poYXNoKG91 dCwgZXhvdXQsIGRoLCBwZWVya2V5LCBtZCwKLSsJCQkJCQkJTlVMTCwgMCk7Ci0rCQkJfQotKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiQ0FWU0hhc2haWiIpKQotKwkJCXsKLSsJCQlpZiAo IW1kKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCXJoYXNoID0gaGV4MmJpbl9tKHZhbHVl LCAmcmhhc2hsZW4pOwotKwkJCWlmICghcmhhc2ggfHwgcmhhc2hsZW4gIT0gTV9FVlBfTURfc2l6 ZShtZCkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJb3V0cHV0X1poYXNoKG91dCwgZXhv dXQsIGRoLCBwZWVya2V5LCBtZCwKLSsJCQkJCQkJcmhhc2gsIHJoYXNobGVuKTsKLSsJCQl9Ci0r CQl9Ci0rCWlmIChpbiAmJiBpbiAhPSBzdGRpbikKLSsJCWZjbG9zZShpbik7Ci0rCWlmIChvdXQg JiYgb3V0ICE9IHN0ZG91dCkKLSsJCWZjbG9zZShvdXQpOwotKwlyZXR1cm4gMDsKLSsJcGFyc2Vf ZXJyb3I6Ci0rCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgUGFyc2luZyByZXF1ZXN0IGZpbGVcbiIp OwotKwlleGl0KDEpOwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJl dGEyL2NyeXB0by9maXBzL2NhdnMvZmlwc19kcmJndnMuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0 YTIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RyYmd2cy5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRh Mi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHJiZ3ZzLmMuZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAy LjU0MDM5MzY5OCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX2RyYmd2cy5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTQwMzkzNjk4ICswMTAwCi1AQCAt MCwwICsxLDQxNiBAQAotKy8qIGZpcHMvcmFuZC9maXBzX2RyYmd2cy5jICovCi0rLyogV3JpdHRl biBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVu U1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAo YykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgot 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 Ki8KLSsKLSsKLSsjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQotKyNpbmNsdWRlIDxvcGVuc3NsL29w ZW5zc2xjb25mLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8c3RkaW8u aD4KLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rewotKyAgICBwcmludGYo Ik5vIEZJUFMgRFJCRyBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsjZWxzZQot KwotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgot KyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsKLSsjaW5jbHVkZSAi Zmlwc191dGwuaCIKLSsKLStzdGF0aWMgaW50IGRwYXJzZV9tZChjaGFyICpzdHIpCi0rCXsKLSsJ c3dpdGNoKGF0b2koc3RyICsgNSkpCi0rCQl7Ci0rCQljYXNlIDE6Ci0rCQlyZXR1cm4gTklEX3No YTE7Ci0rCi0rCQljYXNlIDIyNDoKLSsJCXJldHVybiBOSURfc2hhMjI0OwotKwotKwkJY2FzZSAy NTY6Ci0rCQlyZXR1cm4gTklEX3NoYTI1NjsKLSsKLSsJCWNhc2UgMzg0OgotKwkJcmV0dXJuIE5J RF9zaGEzODQ7Ci0rCi0rCQljYXNlIDUxMjoKLSsJCXJldHVybiBOSURfc2hhNTEyOwotKwotKwkJ fQotKwotKwlyZXR1cm4gTklEX3VuZGVmOwotKwl9Ci0rCi0rc3RhdGljIGludCBwYXJzZV9lYyhj aGFyICpzdHIpCi0rCXsKLSsJaW50IGN1cnZlX25pZCwgbWRfbmlkOwotKwljaGFyICptZDsKLSsJ bWQgPSBzdHJjaHIoc3RyLCAnICcpOwotKwlpZiAoIW1kKQotKwkJcmV0dXJuIE5JRF91bmRlZjsK LSsJaWYgKCFzdHJuY21wKHN0ciwgIltQLTI1NiIsIDYpKQotKwkJY3VydmVfbmlkID0gTklEX1g5 XzYyX3ByaW1lMjU2djE7Ci0rCWVsc2UgaWYgKCFzdHJuY21wKHN0ciwgIltQLTM4NCIsIDYpKQot KwkJY3VydmVfbmlkID0gTklEX3NlY3AzODRyMTsKLSsJZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAi W1AtNTIxIiwgNikpCi0rCQljdXJ2ZV9uaWQgPSBOSURfc2VjcDUyMXIxOwotKwllbHNlCi0rCQly ZXR1cm4gTklEX3VuZGVmOwotKwltZF9uaWQgPSBkcGFyc2VfbWQobWQpOwotKwlpZiAobWRfbmlk ID09IE5JRF91bmRlZikKLSsJCXJldHVybiBOSURfdW5kZWY7Ci0rCXJldHVybiAoY3VydmVfbmlk IDw8IDE2KSB8IG1kX25pZDsKLSsJfQotKwotK3N0YXRpYyBpbnQgcGFyc2VfYWVzKGNoYXIgKnN0 ciwgaW50ICpwZGYpCi0rCXsKLSsKLSsJaWYgKCFzdHJuY21wKHN0ciArIDksICJubyIsIDIpKQot KwkJKnBkZiA9IDA7Ci0rCWVsc2UKLSsJCSpwZGYgPSBEUkJHX0ZMQUdfQ1RSX1VTRV9ERjsKLSsK LSsJc3dpdGNoKGF0b2koc3RyICsgNSkpCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCXJldHVybiBO SURfYWVzXzEyOF9jdHI7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCXJldHVybiBOSURfYWVzXzE5Ml9j dHI7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCXJldHVybiBOSURfYWVzXzI1Nl9jdHI7Ci0rCi0rCQlk ZWZhdWx0OgotKwkJcmV0dXJuIE5JRF91bmRlZjsKLSsKLSsJCX0KLSsJfQotKwotK3R5cGVkZWYg c3RydWN0IAotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgKmVudDsKLSsJc2l6ZV90IGVudGxlbjsKLSsJ dW5zaWduZWQgY2hhciAqbm9uY2U7Ci0rCXNpemVfdCBub25jZWxlbjsKLSsJfSBURVNUX0VOVDsK LSsKLStzdGF0aWMgc2l6ZV90IHRlc3RfZW50cm9weShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQg Y2hhciAqKnBvdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9w eSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQotKwl7Ci0rCVRFU1RfRU5UICp0ID0g RklQU19kcmJnX2dldF9hcHBfZGF0YShkY3R4KTsKLSsJKnBvdXQgPSAodW5zaWduZWQgY2hhciAq KXQtPmVudDsKLSsJcmV0dXJuIHQtPmVudGxlbjsKLSsJfQotKwotK3N0YXRpYyBzaXplX3QgdGVz dF9ub25jZShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVf dCBtYXhfbGVuKQotKwl7Ci0rCVRFU1RfRU5UICp0ID0gRklQU19kcmJnX2dldF9hcHBfZGF0YShk Y3R4KTsKLSsJKnBvdXQgPSAodW5zaWduZWQgY2hhciAqKXQtPm5vbmNlOwotKwlyZXR1cm4gdC0+ bm9uY2VsZW47Ci0rCX0KLSsKLSsjaWZkZWYgRklQU19BTEdWUwotK2ludCBmaXBzX2RyYmd2c19t YWluKGludCBhcmdjLGNoYXIgKiphcmd2KQotKyNlbHNlCi0raW50IG1haW4oaW50IGFyZ2MsY2hh ciAqKmFyZ3YpCi0rI2VuZGlmCi0rCXsKLSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsK LSsJRFJCR19DVFggKmRjdHggPSBOVUxMOwotKwlURVNUX0VOVCB0OwotKwlpbnQgciwgbmlkID0g MDsKLSsJaW50IHByID0gMDsKLSsJY2hhciBidWZbMjA0OF0sIGxidWZbMjA0OF07Ci0rCXVuc2ln bmVkIGNoYXIgcmFuZG91dFsyMDQ4XTsKLSsJY2hhciAqa2V5d29yZCA9IE5VTEwsICp2YWx1ZSA9 IE5VTEw7Ci0rCi0rCXVuc2lnbmVkIGNoYXIgKmVudCA9IE5VTEwsICpub25jZSA9IE5VTEwsICpw ZXJzID0gTlVMTCwgKmFkaW4gPSBOVUxMOwotKwlsb25nIGVudGxlbiwgbm9uY2VsZW4sIHBlcnNs ZW4sIGFkaW5sZW47Ci0rCWludCBkZiA9IDA7Ci0rCi0rCWVudW0gZHR5cGUgeyBEUkJHX05PTkUs IERSQkdfQ1RSLCBEUkJHX0hBU0gsIERSQkdfSE1BQywgRFJCR19EVUFMX0VDIH0KLSsJCWRyYmdf dHlwZSA9IERSQkdfTk9ORTsKLSsKLSsJaW50IHJhbmRvdXRsZW4gPSAwOwotKwotKwlpbnQgZ2Vu ID0gMDsKLSsKLSsJZmlwc19hbGd0ZXN0X2luaXQoKTsKLSsKLSsJaWYgKGFyZ2MgPT0gMykKLSsJ CXsKLSsJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKLSsJCWlmICghaW4pCi0rCQkJewotKwkJ CWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBpbnB1dCBmaWxlXG4iKTsKLSsJCQlleGl0 KDEpOwotKwkJCX0KLSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7Ci0rCQlpZiAoIW91dCkK LSsJCQl7Ci0rCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIG91dHB1dCBmaWxlXG4i KTsKLSsJCQlleGl0KDEpOwotKwkJCX0KLSsJCX0KLSsJZWxzZSBpZiAoYXJnYyA9PSAxKQotKwkJ ewotKwkJaW4gPSBzdGRpbjsKLSsJCW91dCA9IHN0ZG91dDsKLSsJCX0KLSsJZWxzZQotKwkJewot KwkJZnByaW50ZihzdGRlcnIsIiVzIChpbmZpbGUgb3V0ZmlsZSlcbiIsYXJndlswXSk7Ci0rCQll eGl0KDEpOwotKwkJfQotKwotKwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgaW4pICE9 IE5VTEwpCi0rCQl7Ci0rCQlmcHV0cyhidWYsIG91dCk7Ci0rCQlpZiAoZHJiZ190eXBlID09IERS QkdfTk9ORSkKLSsJCQl7Ci0rCQkJaWYgKHN0cnN0cihidWYsICJDVFJfRFJCRyIpKQotKwkJCQlk cmJnX3R5cGUgPSBEUkJHX0NUUjsKLSsJCQllbHNlIGlmIChzdHJzdHIoYnVmLCAiSGFzaF9EUkJH IikpCi0rCQkJCWRyYmdfdHlwZSA9IERSQkdfSEFTSDsKLSsJCQllbHNlIGlmIChzdHJzdHIoYnVm LCAiSE1BQ19EUkJHIikpCi0rCQkJCWRyYmdfdHlwZSA9IERSQkdfSE1BQzsKLSsJCQllbHNlIGlm IChzdHJzdHIoYnVmLCAiRHVhbF9FQ19EUkJHIikpCi0rCQkJCWRyYmdfdHlwZSA9IERSQkdfRFVB TF9FQzsKLSsJCQllbHNlCi0rCQkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCWlmIChzdHJsZW4oYnVm KSA+IDQgJiYgIXN0cm5jbXAoYnVmLCAiW1NIQS0iLCA1KSkKLSsJCQl7Ci0rCQkJbmlkID0gZHBh cnNlX21kKGJ1Zik7Ci0rCQkJaWYgKG5pZCA9PSBOSURfdW5kZWYpCi0rCQkJCWV4aXQoMSk7Ci0r CQkJaWYgKGRyYmdfdHlwZSA9PSBEUkJHX0hNQUMpCi0rCQkJCXsKLSsJCQkJc3dpdGNoIChuaWQp Ci0rCQkJCQl7Ci0rCQkJCQljYXNlIE5JRF9zaGExOgotKwkJCQkJbmlkID0gTklEX2htYWNXaXRo U0hBMTsKLSsJCQkJCWJyZWFrOwotKwotKwkJCQkJY2FzZSBOSURfc2hhMjI0OgotKwkJCQkJbmlk ID0gTklEX2htYWNXaXRoU0hBMjI0OwotKwkJCQkJYnJlYWs7Ci0rCi0rCQkJCQljYXNlIE5JRF9z aGEyNTY6Ci0rCQkJCQluaWQgPSBOSURfaG1hY1dpdGhTSEEyNTY7Ci0rCQkJCQlicmVhazsKLSsK LSsJCQkJCWNhc2UgTklEX3NoYTM4NDoKLSsJCQkJCW5pZCA9IE5JRF9obWFjV2l0aFNIQTM4NDsK LSsJCQkJCWJyZWFrOwotKwotKwkJCQkJY2FzZSBOSURfc2hhNTEyOgotKwkJCQkJbmlkID0gTklE X2htYWNXaXRoU0hBNTEyOwotKwkJCQkJYnJlYWs7Ci0rCi0rCQkJCQlkZWZhdWx0OgotKwkJCQkJ ZXhpdCgxKTsKLSsJCQkJCX0KLSsJCQkJfQotKwkJCX0KLSsJCWlmIChzdHJsZW4oYnVmKSA+IDEy ICYmICFzdHJuY21wKGJ1ZiwgIltBRVMtIiwgNSkpCi0rCQkJewotKwkJCW5pZCA9IHBhcnNlX2Fl cyhidWYsICZkZik7Ci0rCQkJaWYgKG5pZCA9PSBOSURfdW5kZWYpCi0rCQkJCWV4aXQoMSk7Ci0r CQkJfQotKwkJaWYgKHN0cmxlbihidWYpID4gMTIgJiYgIXN0cm5jbXAoYnVmLCAiW1AtIiwgMykp Ci0rCQkJewotKwkJCW5pZCA9IHBhcnNlX2VjKGJ1Zik7Ci0rCQkJaWYgKG5pZCA9PSBOSURfdW5k ZWYpCi0rCQkJCWV4aXQoMSk7Ci0rCQkJfQotKwkJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAm dmFsdWUsIGxidWYsIGJ1ZikpCi0rCQkJY29udGludWU7Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3 b3JkLCAiW1ByZWRpY3Rpb25SZXNpc3RhbmNlIikpCi0rCQkJewotKwkJCWlmICghc3RyY21wKHZh bHVlLCAiVHJ1ZV0iKSkKLSsJCQkJcHIgPSAxOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUs ICJGYWxzZV0iKSkKLSsJCQkJcHIgPSAwOwotKwkJCWVsc2UKLSsJCQkJZXhpdCgxKTsKLSsJCQl9 Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiRW50cm9weUlucHV0IikpCi0rCQkJewotKwkJ CWVudCA9IGhleDJiaW5fbSh2YWx1ZSwgJmVudGxlbik7Ci0rCQkJdC5lbnQgPSBlbnQ7Ci0rCQkJ dC5lbnRsZW4gPSBlbnRsZW47Ci0rCQkJfQotKwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIk5v bmNlIikpCi0rCQkJewotKwkJCW5vbmNlID0gaGV4MmJpbl9tKHZhbHVlLCAmbm9uY2VsZW4pOwot KwkJCXQubm9uY2UgPSBub25jZTsKLSsJCQl0Lm5vbmNlbGVuID0gbm9uY2VsZW47Ci0rCQkJfQot KwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIlBlcnNvbmFsaXphdGlvblN0cmluZyIpKQotKwkJ CXsKLSsJCQlwZXJzID0gaGV4MmJpbl9tKHZhbHVlLCAmcGVyc2xlbik7Ci0rCQkJaWYgKG5pZCA9 PSAwKQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiRFJCRyB0eXBlIG5vdCByZWNvZ25p c2VkIVxuIik7Ci0rCQkJCWV4aXQgKDEpOwotKwkJCQl9Ci0rCQkJZGN0eCA9IEZJUFNfZHJiZ19u ZXcobmlkLCBkZiB8IERSQkdfRkxBR19URVNUKTsKLSsJCQlpZiAoIWRjdHgpCi0rCQkJCWV4aXQg KDEpOwotKwkJCUZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKGRjdHgsIHRlc3RfZW50cm9weSwgMCwg MCwKLSsJCQkJCQkJdGVzdF9ub25jZSwgMCk7Ci0rCQkJRklQU19kcmJnX3NldF9hcHBfZGF0YShk Y3R4LCAmdCk7Ci0rCQkJcmFuZG91dGxlbiA9IChpbnQpRklQU19kcmJnX2dldF9ibG9ja2xlbmd0 aChkY3R4KTsKLSsJCQlyID0gRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHBlcnMsIHBlcnNs ZW4pOwotKwkJCWlmICghcikKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGlu c3RhbnRpYXRpbmcgRFJCR1xuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQlPUEVOU1NM X2ZyZWUocGVycyk7Ci0rCQkJT1BFTlNTTF9mcmVlKGVudCk7Ci0rCQkJT1BFTlNTTF9mcmVlKG5v bmNlKTsKLSsJCQllbnQgPSBub25jZSA9IHBlcnMgPSBOVUxMOwotKwkJCWdlbiA9IDA7Ci0rCQkJ fQotKwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkFkZGl0aW9uYWxJbnB1dCIpKQotKwkJCXsK LSsJCQlhZGluID0gaGV4MmJpbl9tKHZhbHVlLCAmYWRpbmxlbik7Ci0rCQkJaWYgKHByKQotKwkJ CQljb250aW51ZTsKLSsJCQlyID0gRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHJh bmRvdXRsZW4sIDAsCi0rCQkJCQkJCQlhZGluLCBhZGlubGVuKTsKLSsJCQlpZiAoIXIpCi0rCQkJ CXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBnZW5lcmF0aW5nIERSQkcgYml0c1xuIik7 Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQlpZiAoIXIpCi0rCQkJCWV4aXQoMSk7Ci0rCQkJ T1BFTlNTTF9mcmVlKGFkaW4pOwotKwkJCWFkaW4gPSBOVUxMOwotKwkJCWdlbisrOwotKwkJCX0K LSsKLSsJCWlmIChwcikKLSsJCQl7Ci0rCQkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkVudHJvcHlJ bnB1dFBSIikpCi0rCQkJCXsKLSsJCQkJZW50ID0gaGV4MmJpbl9tKHZhbHVlLCAmZW50bGVuKTsK LSsJCQkJdC5lbnQgPSBlbnQ7Ci0rCQkJCXQuZW50bGVuID0gZW50bGVuOwotKwkJCQlyID0gRklQ U19kcmJnX2dlbmVyYXRlKGRjdHgsCi0rCQkJCQkJCXJhbmRvdXQsIHJhbmRvdXRsZW4sCi0rCQkJ CQkJCTEsIGFkaW4sIGFkaW5sZW4pOwotKwkJCQlpZiAoIXIpCi0rCQkJCQl7Ci0rCQkJCQlmcHJp bnRmKHN0ZGVyciwKLSsJCQkJCQkiRXJyb3IgZ2VuZXJhdGluZyBEUkJHIGJpdHNcbiIpOwotKwkJ CQkJZXhpdCgxKTsKLSsJCQkJCX0KLSsJCQkJT1BFTlNTTF9mcmVlKGFkaW4pOwotKwkJCQlPUEVO U1NMX2ZyZWUoZW50KTsKLSsJCQkJYWRpbiA9IGVudCA9IE5VTEw7Ci0rCQkJCWdlbisrOwotKwkJ CQl9Ci0rCQkJfQotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkVudHJvcHlJbnB1dFJlc2VlZCIp KQotKwkJCXsKLSsJCQllbnQgPSBoZXgyYmluX20odmFsdWUsICZlbnRsZW4pOwotKwkJCXQuZW50 ID0gZW50OwotKwkJCXQuZW50bGVuID0gZW50bGVuOwotKwkJCX0KLSsJCWlmICghc3RyY21wKGtl eXdvcmQsICJBZGRpdGlvbmFsSW5wdXRSZXNlZWQiKSkKLSsJCQl7Ci0rCQkJYWRpbiA9IGhleDJi aW5fbSh2YWx1ZSwgJmFkaW5sZW4pOwotKwkJCUZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgYWRpbiwg YWRpbmxlbik7Ci0rCQkJT1BFTlNTTF9mcmVlKGVudCk7Ci0rCQkJT1BFTlNTTF9mcmVlKGFkaW4p OwotKwkJCWVudCA9IGFkaW4gPSBOVUxMOwotKwkJCX0KLSsJCWlmIChnZW4gPT0gMikKLSsJCQl7 Ci0rCQkJT3V0cHV0VmFsdWUoIlJldHVybmVkQml0cyIsIHJhbmRvdXQsIHJhbmRvdXRsZW4sCi0r CQkJCQkJCQkJb3V0LCAwKTsKLSsJCQlGSVBTX2RyYmdfZnJlZShkY3R4KTsKLSsJCQlkY3R4ID0g TlVMTDsKLSsJCQlnZW4gPSAwOwotKwkJCX0KLSsKLSsJCX0KLSsJaWYgKGluICYmIGluICE9IHN0 ZGluKQotKwkJZmNsb3NlKGluKTsKLSsJaWYgKG91dCAmJiBvdXQgIT0gc3Rkb3V0KQotKwkJZmNs b3NlKG91dCk7Ci0rCXJldHVybiAwOwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlwc19kc3N2cy5jLmZpcHMgb3BlbnNzbC0x LjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMuYwotLS0tIG9wZW5zc2wtMS4w LjEtYmV0YTIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMuZmlwcwkyMDEyLTAyLTA3IDEx OjA3OjAyLjU0MDM5MzY5OCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX2Rzc3ZzLmMJMjAxMi0wMi0wNyAxMTowNzowMi41NDAzOTM2OTggKzAxMDAK LUBAIC0wLDAgKzEsNTM3IEBACi0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsK LSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxzdGRpby5oPgotKwotK2ludCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBEU0Egc3Vw cG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3Bl bnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rCi0rI2lu Y2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rc3RhdGljIHZvaWQgcGJuKGNvbnN0IGNoYXIgKm5hbWUs IEJJR05VTSAqYm4pCi0rCXsKLSsJaW50IGxlbiwgaTsKLSsJdW5zaWduZWQgY2hhciAqdG1wOwot KwlsZW4gPSBCTl9udW1fYnl0ZXMoYm4pOwotKwl0bXAgPSBPUEVOU1NMX21hbGxvYyhsZW4pOwot KwlpZiAoIXRtcCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiTWVtb3J5IGFsbG9jYXRpb24g ZXJyb3JcbiIpOwotKwkJcmV0dXJuOwotKwkJfQotKwlCTl9ibjJiaW4oYm4sIHRtcCk7Ci0rCXBy aW50ZigiJXMgPSAiLCBuYW1lKTsKLSsJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotKwkJcHJp bnRmKCIlMDJYIiwgdG1wW2ldKTsKLSsJZnB1dHMoIlxuIiwgc3Rkb3V0KTsKLSsJT1BFTlNTTF9m cmVlKHRtcCk7Ci0rCXJldHVybjsKLSsJfQotKwotK3ZvaWQgcHJpbWVzKCkKLSsgICAgewotKyAg ICBjaGFyIGJ1ZlsxMDI0MF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0MF07Ci0rICAgIGNoYXIgKmtl eXdvcmQsICp2YWx1ZTsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4p ICE9IE5VTEwpCi0rCXsKLSsJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCWlmICghcGFyc2VfbGluZSgm a2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJY29udGludWU7Ci0rCWlmKCFzdHJjbXAo a2V5d29yZCwiUHJpbWUiKSkKLSsJICAgIHsKLSsJICAgIEJJR05VTSAqcHA7Ci0rCi0rCSAgICBw cD1CTl9uZXcoKTsKLSsJICAgIGRvX2hleDJibigmcHAsdmFsdWUpOwotKwkgICAgcHJpbnRmKCJy ZXN1bHQ9ICVjXG4iLAotKwkJICAgQk5faXNfcHJpbWVfZXgocHAsMjAsTlVMTCxOVUxMKSA/ICdQ JyA6ICdGJyk7Ci0rCSAgICB9CSAgICAKLSsJfQotKyAgICB9Ci0rCi0rdm9pZCBwcWcoKQotKyAg ICB7Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFyIGxidWZbMTAyNF07Ci0rICAgIGNo YXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgaW50IG5tb2Q9MDsKLSsKLSsgICAgd2hpbGUoZmdl dHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0rCXsKLSsJaWYgKCFwYXJzZV9saW5l KCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQl7Ci0rCQlmcHV0cyhidWYsc3Rkb3V0 KTsKLSsJCWNvbnRpbnVlOwotKwkJfQotKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKLSsJ ICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJOIikpCi0r CSAgICB7Ci0rCSAgICBpbnQgbj1hdG9pKHZhbHVlKTsKLSsKLSsJICAgIHByaW50ZigiW21vZCA9 ICVkXVxuXG4iLG5tb2QpOwotKwotKwkgICAgd2hpbGUobi0tKQotKwkJewotKwkJdW5zaWduZWQg Y2hhciBzZWVkWzIwXTsKLSsJCURTQSAqZHNhOwotKwkJaW50IGNvdW50ZXI7Ci0rCQl1bnNpZ25l ZCBsb25nIGg7Ci0rCQlkc2EgPSBGSVBTX2RzYV9uZXcoKTsKLSsKLSsJCWlmICghRFNBX2dlbmVy YXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLHNlZWQsMCwmY291bnRlciwmaCxOVUxMKSkKLSsJ CQl7Ci0rCQkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQkJZXhpdCgxKTsKLSsJCQl9Ci0rCQlwYm4o IlAiLGRzYS0+cCk7Ci0rCQlwYm4oIlEiLGRzYS0+cSk7Ci0rCQlwYm4oIkciLGRzYS0+Zyk7Ci0r CQlwdigiU2VlZCIsc2VlZCwyMCk7Ci0rCQlwcmludGYoImMgPSAlZFxuIixjb3VudGVyKTsKLSsJ CXByaW50ZigiSCA9ICVseFxuIixoKTsKLSsJCXB1dGMoJ1xuJyxzdGRvdXQpOwotKwkJfQotKwkg ICAgfQotKwllbHNlCi0rCSAgICBmcHV0cyhidWYsc3Rkb3V0KTsKLSsJfQotKyAgICB9Ci0rCi0r dm9pZCBwcWd2ZXIoKQotKyAgICB7Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFyIGxi dWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgQklHTlVNICpwID0g TlVMTCwgKnEgPSBOVUxMLCAqZyA9IE5VTEw7Ci0rICAgIGludCBjb3VudGVyLCBjb3VudGVyMjsK LSsgICAgdW5zaWduZWQgbG9uZyBoLCBoMjsKLSsgICAgRFNBICpkc2E9TlVMTDsKLSsgICAgaW50 IG5tb2Q9MDsKLSsgICAgdW5zaWduZWQgY2hhciBzZWVkWzEwMjRdOwotKwotKyAgICB3aGlsZShm Z2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xp bmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRv dXQpOwotKwkJY29udGludWU7Ci0rCQl9Ci0rCWZwdXRzKGJ1Ziwgc3Rkb3V0KTsKLSsJaWYoIXN0 cmNtcChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICBubW9kPWF0b2kodmFsdWUpOwotKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiUCIpKQotKwkgICAgcD1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiUSIpKQotKwkgICAgcT1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiRyIpKQotKwkgICAgZz1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiU2VlZCIpKQotKwkgICAgewotKwkgICAgaW50IHNsZW4gPSBoZXgy YmluKHZhbHVlLCBzZWVkKTsKLSsJICAgIGlmIChzbGVuICE9IDIwKQotKwkJewotKwkJZnByaW50 ZihzdGRlcnIsICJTZWVkIHBhcnNlIGxlbmd0aCBlcnJvclxuIik7Ci0rCQlleGl0ICgxKTsKLSsJ CX0KLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsImMiKSkKLSsJICAgIGNvdW50 ZXIgPWF0b2koYnVmKzQpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiSCIpKQotKwkgICAg ewotKwkgICAgaCA9IGF0b2kodmFsdWUpOwotKwkgICAgaWYgKCFwIHx8ICFxIHx8ICFnKQotKwkJ ewotKwkJZnByaW50ZihzdGRlcnIsICJQYXJzZSBFcnJvclxuIik7Ci0rCQlleGl0ICgxKTsKLSsJ CX0KLSsJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOwotKwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVf cGFyYW1ldGVyc19leChkc2EsIG5tb2Qsc2VlZCwyMCAsJmNvdW50ZXIyLCZoMixOVUxMKSkKLSsJ CQl7Ci0rCQkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQkJZXhpdCgxKTsKLSsJCQl9Ci0rICAgICAg ICAgICAgaWYgKEJOX2NtcChkc2EtPnAsIHApIHx8IEJOX2NtcChkc2EtPnEsIHEpIHx8IEJOX2Nt cChkc2EtPmcsIGcpCi0rCQl8fCAoY291bnRlciAhPSBjb3VudGVyMikgfHwgKGggIT0gaDIpKQot KwkgICAgCXByaW50ZigiUmVzdWx0ID0gRlxuIik7Ci0rCSAgICBlbHNlCi0rCSAgICAJcHJpbnRm KCJSZXN1bHQgPSBQXG4iKTsKLSsJICAgIEJOX2ZyZWUocCk7Ci0rCSAgICBCTl9mcmVlKHEpOwot KwkgICAgQk5fZnJlZShnKTsKLSsJICAgIHAgPSBOVUxMOwotKwkgICAgcSA9IE5VTEw7Ci0rCSAg ICBnID0gTlVMTDsKLSsJICAgIEZJUFNfZHNhX2ZyZWUoZHNhKTsKLSsJICAgIGRzYSA9IE5VTEw7 Ci0rCSAgICB9Ci0rCX0KLSsgICAgfQotKwotKy8qIEtleXBhaXIgdmVyaWZpY2F0aW9uIHJvdXRp bmUuIE5COiB0aGlzIGlzbid0IHBhcnQgb2YgdGhlIHN0YW5kYXJkIEZJUFMxNDAtMgotKyAqIGFs Z29yaXRobSB0ZXN0cy4gSXQgaXMgYW4gYWRkaXRpb25hbCB0ZXN0IHRvIHBlcmZvcm0gc2FuaXR5 IGNoZWNrcyBvbiB0aGUKLSsgKiBvdXRwdXQgb2YgdGhlIEtleVBhaXIgdGVzdC4KLSsgKi8KLSsK LStzdGF0aWMgaW50IGRzc19wYXJhbWNoZWNrKGludCBubW9kLCBCSUdOVU0gKnAsIEJJR05VTSAq cSwgQklHTlVNICpnLAotKwkJCQkJCQlCTl9DVFggKmN0eCkKLSsgICAgewotKyAgICBCSUdOVU0g KnJlbSA9IE5VTEw7Ci0rICAgIGlmIChCTl9udW1fYml0cyhwKSAhPSBubW9kKQotKwlyZXR1cm4g MDsKLSsgICAgaWYgKEJOX251bV9iaXRzKHEpICE9IDE2MCkKLSsJcmV0dXJuIDA7Ci0rICAgIGlm IChCTl9pc19wcmltZV9leChwLCBCTl9wcmltZV9jaGVja3MsIGN0eCwgTlVMTCkgIT0gMSkKLSsJ cmV0dXJuIDA7Ci0rICAgIGlmIChCTl9pc19wcmltZV9leChxLCBCTl9wcmltZV9jaGVja3MsIGN0 eCwgTlVMTCkgIT0gMSkKLSsJcmV0dXJuIDA7Ci0rICAgIHJlbSA9IEJOX25ldygpOwotKyAgICBp ZiAoIUJOX21vZChyZW0sIHAsIHEsIGN0eCkgfHwgIUJOX2lzX29uZShyZW0pCi0rICAgIAl8fCAo Qk5fY21wKGcsIEJOX3ZhbHVlX29uZSgpKSA8PSAwKQotKwl8fCAhQk5fbW9kX2V4cChyZW0sIGcs IHEsIHAsIGN0eCkgfHwgIUJOX2lzX29uZShyZW0pKQotKwl7Ci0rCUJOX2ZyZWUocmVtKTsKLSsJ cmV0dXJuIDA7Ci0rCX0KLSsgICAgLyogVG9kbzogY2hlY2sgZyAqLwotKyAgICBCTl9mcmVlKHJl bSk7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rdm9pZCBrZXl2ZXIoKQotKyAgICB7Ci0r ICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFyIGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtl eXdvcmQsICp2YWx1ZTsKLSsgICAgQklHTlVNICpwID0gTlVMTCwgKnEgPSBOVUxMLCAqZyA9IE5V TEwsICpYID0gTlVMTCwgKlkgPSBOVUxMOwotKyAgICBCSUdOVU0gKlkyOwotKyAgICBCTl9DVFgg KmN0eCA9IE5VTEw7Ci0rICAgIGludCBubW9kPTAsIHBhcmFtY2hlY2sgPSAwOwotKwotKyAgICBj dHggPSBCTl9DVFhfbmV3KCk7Ci0rICAgIFkyID0gQk5fbmV3KCk7Ci0rCi0rICAgIHdoaWxlKGZn ZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGlu ZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91 dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCi0r CSAgICB7Ci0rCSAgICBpZiAocCkKLSsJCUJOX2ZyZWUocCk7Ci0rCSAgICBwID0gTlVMTDsKLSsJ ICAgIGlmIChxKQotKwkJQk5fZnJlZShxKTsKLSsJICAgIHEgPSBOVUxMOwotKwkgICAgaWYgKGcp Ci0rCQlCTl9mcmVlKGcpOwotKwkgICAgZyA9IE5VTEw7Ci0rCSAgICBwYXJhbWNoZWNrID0gMDsK LSsJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3 b3JkLCJQIikpCi0rCSAgICBwPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3 b3JkLCJRIikpCi0rCSAgICBxPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3 b3JkLCJHIikpCi0rCSAgICBnPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3 b3JkLCJYIikpCi0rCSAgICBYPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3 b3JkLCJZIikpCi0rCSAgICB7Ci0rCSAgICBZPWhleDJibih2YWx1ZSk7Ci0rCSAgICBpZiAoIXAg fHwgIXEgfHwgIWcgfHwgIVggfHwgIVkpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIlBhcnNl IEVycm9yXG4iKTsKLSsJCWV4aXQgKDEpOwotKwkJfQotKwkgICAgcGJuKCJQIixwKTsKLSsJICAg IHBibigiUSIscSk7Ci0rCSAgICBwYm4oIkciLGcpOwotKwkgICAgcGJuKCJYIixYKTsKLSsJICAg IHBibigiWSIsWSk7Ci0rCSAgICBpZiAoIXBhcmFtY2hlY2spCi0rCQl7Ci0rCQlpZiAoZHNzX3Bh cmFtY2hlY2sobm1vZCwgcCwgcSwgZywgY3R4KSkKLSsJCQlwYXJhbWNoZWNrID0gMTsKLSsJCWVs c2UKLSsJCQlwYXJhbWNoZWNrID0gLTE7Ci0rCQl9Ci0rCSAgICBpZiAocGFyYW1jaGVjayAhPSAx KQotKwkgICAJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsKLSsJICAgIGVsc2UKLSsJCXsKLSsJCWlm ICghQk5fbW9kX2V4cChZMiwgZywgWCwgcCwgY3R4KSB8fCBCTl9jbXAoWTIsIFkpKQotKwkgICAg CQlwcmludGYoIlJlc3VsdCA9IEZcbiIpOwotKwkgICAgICAgIGVsc2UKLSsJICAgIAkJcHJpbnRm KCJSZXN1bHQgPSBQXG4iKTsKLSsJCX0KLSsJICAgIEJOX2ZyZWUoWCk7Ci0rCSAgICBCTl9mcmVl KFkpOwotKwkgICAgWCA9IE5VTEw7Ci0rCSAgICBZID0gTlVMTDsKLSsJICAgIH0KLSsJfQotKwlp ZiAocCkKLSsJICAgIEJOX2ZyZWUocCk7Ci0rCWlmIChxKQotKwkgICAgQk5fZnJlZShxKTsKLSsJ aWYgKGcpCi0rCSAgICBCTl9mcmVlKGcpOwotKwlpZiAoWTIpCi0rCSAgICBCTl9mcmVlKFkyKTsK LSsgICAgfQotKwotK3ZvaWQga2V5cGFpcigpCi0rICAgIHsKLSsgICAgY2hhciBidWZbMTAyNF07 Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAg ICBpbnQgbm1vZD0wOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikg IT0gTlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1Ziwg YnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJY29udGludWU7Ci0rCQl9Ci0r CWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKLSsJ ZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk4iKSkKLSsJICAgIHsKLSsJICAgIERTQSAqZHNhOwot KwkgICAgaW50IG49YXRvaSh2YWx1ZSk7Ci0rCi0rCSAgICBwcmludGYoIlttb2QgPSAlZF1cblxu IixubW9kKTsKLSsJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOwotKwkgICAgaWYgKCFEU0FfZ2Vu ZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVMTCwwLE5VTEwsTlVMTCxOVUxMKSkKLSsJ CXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZXhpdCgxKTsKLSsJCX0KLSsJICAgIHBibigi UCIsZHNhLT5wKTsKLSsJICAgIHBibigiUSIsZHNhLT5xKTsKLSsJICAgIHBibigiRyIsZHNhLT5n KTsKLSsJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOwotKwotKwkgICAgd2hpbGUobi0tKQotKwkJewot KwkJaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCi0rCQkJewotKwkJCWRvX3ByaW50X2Vycm9y cygpOwotKwkJCWV4aXQoMSk7Ci0rCQkJfQotKwotKwkJcGJuKCJYIixkc2EtPnByaXZfa2V5KTsK LSsJCXBibigiWSIsZHNhLT5wdWJfa2V5KTsKLSsJCXB1dGMoJ1xuJyxzdGRvdXQpOwotKwkJfQot KwkgICAgfQotKwl9Ci0rICAgIH0KLSsKLSt2b2lkIHNpZ2dlbigpCi0rICAgIHsKLSsgICAgY2hh ciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwg KnZhbHVlOwotKyAgICBpbnQgbm1vZD0wOwotKyAgICBEU0EgKmRzYT1OVUxMOwotKwotKyAgICB3 aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlpZiAoIXBh cnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1 ZixzdGRvdXQpOwotKwkJY29udGludWU7Ci0rCQl9Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiW21v ZCIpKQotKwkgICAgewotKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKLSsJICAgIHByaW50ZigiW21v ZCA9ICVkXVxuXG4iLG5tb2QpOwotKwkgICAgaWYgKGRzYSkKLSsJCUZJUFNfZHNhX2ZyZWUoZHNh KTsKLSsJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOwotKwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVf cGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVMTCwwLE5VTEwsTlVMTCxOVUxMKSkKLSsJCXsKLSsJ CWRvX3ByaW50X2Vycm9ycygpOwotKwkJZXhpdCgxKTsKLSsJCX0KLSsJICAgIHBibigiUCIsZHNh LT5wKTsKLSsJICAgIHBibigiUSIsZHNhLT5xKTsKLSsJICAgIHBibigiRyIsZHNhLT5nKTsKLSsJ ICAgIHB1dGMoJ1xuJyxzdGRvdXQpOwotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29y ZCwiTXNnIikpCi0rCSAgICB7Ci0rCSAgICB1bnNpZ25lZCBjaGFyIG1zZ1sxMDI0XTsKLSsJICAg IHVuc2lnbmVkIGNoYXIgc2J1Zls2MF07Ci0rCSAgICB1bnNpZ25lZCBpbnQgc2xlbjsKLSsJICAg IGludCBuOwotKwkgICAgRVZQX1BLRVkgcGs7Ci0rCSAgICBFVlBfTURfQ1RYIG1jdHg7Ci0rCSAg ICBEU0FfU0lHICpzaWc7Ci0rCSAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOwotKwotKwkgICAg bj1oZXgyYmluKHZhbHVlLG1zZyk7Ci0rCSAgICBwdigiTXNnIixtc2csbik7Ci0rCi0rCSAgICBp ZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwot KwkJZXhpdCgxKTsKLSsJCX0KLSsJICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9EU0E7Ci0rCSAgICBw ay5wa2V5LmRzYSA9IGRzYTsKLSsJICAgIHBibigiWSIsZHNhLT5wdWJfa2V5KTsKLSsKLSsJICAg IEVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCk7Ci0rCSAgICBFVlBfU2ln blVwZGF0ZSgmbWN0eCwgbXNnLCBuKTsKLSsJICAgIEVWUF9TaWduRmluYWwoJm1jdHgsIHNidWYs ICZzbGVuLCAmcGspOwotKwotKwkgICAgc2lnID0gRFNBX1NJR19uZXcoKTsKLSsJICAgIEZJUFNf ZHNhX3NpZ19kZWNvZGUoc2lnLCBzYnVmLCBzbGVuKTsKLSsKLSsJICAgIHBibigiUiIsc2lnLT5y KTsKLSsJICAgIHBibigiUyIsc2lnLT5zKTsKLSsJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOwotKwkg ICAgRFNBX1NJR19mcmVlKHNpZyk7Ci0rCSAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwot KwkgICAgfQotKwl9Ci0rCWlmIChkc2EpCi0rCQlGSVBTX2RzYV9mcmVlKGRzYSk7Ci0rICAgIH0K LSsKLSt2b2lkIHNpZ3ZlcigpCi0rICAgIHsKLSsgICAgRFNBICpkc2E9TlVMTDsKLSsgICAgY2hh ciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgdW5zaWduZWQgY2hhciBt c2dbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgaW50IG5tb2Q9MCwg bj0wOwotKyAgICBEU0FfU0lHIHNnLCAqc2lnID0gJnNnOwotKwotKyAgICBzaWctPnIgPSBOVUxM OwotKyAgICBzaWctPnMgPSBOVUxMOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1 ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1 ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJY29udGludWU7 Ci0rCQl9Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkgICAgewotKwkgICAgbm1v ZD1hdG9pKHZhbHVlKTsKLSsJICAgIGlmKGRzYSkKLSsJCUZJUFNfZHNhX2ZyZWUoZHNhKTsKLSsJ ICAgIGRzYT1GSVBTX2RzYV9uZXcoKTsKLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdv cmQsIlAiKSkKLSsJICAgIGRzYS0+cD1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAo a2V5d29yZCwiUSIpKQotKwkgICAgZHNhLT5xPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJHIikpCi0rCSAgICB7Ci0rCSAgICBkc2EtPmc9aGV4MmJuKHZhbHVlKTsK LSsKLSsJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOwotKwkgICAgcGJuKCJQIixk c2EtPnApOwotKwkgICAgcGJuKCJRIixkc2EtPnEpOwotKwkgICAgcGJuKCJHIixkc2EtPmcpOwot KwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3 b3JkLCJNc2ciKSkKLSsJICAgIHsKLSsJICAgIG49aGV4MmJpbih2YWx1ZSxtc2cpOwotKwkgICAg cHYoIk1zZyIsbXNnLG4pOwotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiWSIp KQotKwkgICAgZHNhLT5wdWJfa2V5PWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChr ZXl3b3JkLCJSIikpCi0rCSAgICBzaWctPnI9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3Ry Y21wKGtleXdvcmQsIlMiKSkKLSsJICAgIHsKLSsJICAgIEVWUF9NRF9DVFggbWN0eDsKLSsJICAg IEVWUF9QS0VZIHBrOwotKwkgICAgdW5zaWduZWQgY2hhciBzaWdidWZbNjBdOwotKwkgICAgdW5z aWduZWQgaW50IHNsZW47Ci0rCSAgICBpbnQgcjsKLSsJICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0 eCk7Ci0rCSAgICBway50eXBlID0gRVZQX1BLRVlfRFNBOwotKwkgICAgcGsucGtleS5kc2EgPSBk c2E7Ci0rCSAgICBzaWctPnM9aGV4MmJuKHZhbHVlKTsKLSsJCi0rCSAgICBwYm4oIlkiLGRzYS0+ cHViX2tleSk7Ci0rCSAgICBwYm4oIlIiLHNpZy0+cik7Ci0rCSAgICBwYm4oIlMiLHNpZy0+cyk7 Ci0rCi0rCSAgICBzbGVuID0gRklQU19kc2Ffc2lnX2VuY29kZShzaWdidWYsIHNpZyk7Ci0rCSAg ICBFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCk7Ci0rCSAgICBFVlBf VmVyaWZ5VXBkYXRlKCZtY3R4LCBtc2csIG4pOwotKwkgICAgciA9IEVWUF9WZXJpZnlGaW5hbCgm bWN0eCwgc2lnYnVmLCBzbGVuLCAmcGspOwotKwkgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4 KTsKLSsJCi0rCSAgICBwcmludGYoIlJlc3VsdCA9ICVjXG4iLCByID09IDEgPyAnUCcgOiAnRicp OwotKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCSAgICB9Ci0rCX0KLSsgICAgfQotKwotK2lu dCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQotKyAgICB7Ci0rICAgIGlmKGFyZ2MgIT0gMikK LSsJewotKwlmcHJpbnRmKHN0ZGVyciwiJXMgW3ByaW1lfHBxZ3xwcWd2ZXJ8a2V5cGFpcnxzaWdn ZW58c2lndmVyXVxuIixhcmd2WzBdKTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBpZighRklQU19t b2RlX3NldCgxKSkKLSsJewotKwlkb19wcmludF9lcnJvcnMoKTsKLSsJZXhpdCgxKTsKLSsJfQot KyAgICBpZighc3RyY21wKGFyZ3ZbMV0sInByaW1lIikpCi0rCXByaW1lcygpOwotKyAgICBlbHNl IGlmKCFzdHJjbXAoYXJndlsxXSwicHFnIikpCi0rCXBxZygpOwotKyAgICBlbHNlIGlmKCFzdHJj bXAoYXJndlsxXSwicHFndmVyIikpCi0rCXBxZ3ZlcigpOwotKyAgICBlbHNlIGlmKCFzdHJjbXAo YXJndlsxXSwia2V5cGFpciIpKQotKwlrZXlwYWlyKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChh cmd2WzFdLCJrZXl2ZXIiKSkKLSsJa2V5dmVyKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2 WzFdLCJzaWdnZW4iKSkKLSsJc2lnZ2VuKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFd LCJzaWd2ZXIiKSkKLSsJc2lndmVyKCk7Ci0rICAgIGVsc2UKLSsJewotKwlmcHJpbnRmKHN0ZGVy ciwiRG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3ZbMV0pOwotKwlleGl0KDEpOwotKwl9Ci0r Ci0rICAgIHJldHVybiAwOwotKyAgICB9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4xLWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlwc19nY210ZXN0LmMuZmlwcyBvcGVuc3NsLTEu MC4xLWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlwc19nY210ZXN0LmMKLS0tLSBvcGVuc3NsLTEu MC4xLWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlwc19nY210ZXN0LmMuZmlwcwkyMDEyLTAyLTA3 IDExOjA3OjAyLjU0MTM5MzcwNyArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRv L2ZpcHMvY2F2cy9maXBzX2djbXRlc3QuYwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0MTM5MzcwNyAr MDEwMAotQEAgLTAsMCArMSw1NzEgQEAKLSsvKiBmaXBzL2Flcy9maXBzX2djbXRlc3QuYyAqLwot Ky8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZv ciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBD b3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAq Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz Ci0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwot KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9y Zy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93 bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0r ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0rICovCi0rCi0rCi0rI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKLSsjaW5jbHVkZSA8 b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1 ZGUgPHN0ZGlvLmg+Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotK3sKLSsg ICAgcHJpbnRmKCJObyBGSVBTIEdDTSBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30K LSsjZWxzZQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv ZHNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsj aW5jbHVkZSA8Y3R5cGUuaD4KLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLStzdGF0aWMg dm9pZCBnY210ZXN0KEZJTEUgKmluLCBGSUxFICpvdXQsIGludCBlbmNyeXB0KQotKwl7Ci0rCWNo YXIgYnVmWzIwNDhdOwotKwljaGFyIGxidWZbMjA0OF07Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1 ZTsKLSsJaW50IGtleWxlbiA9IC0xLCBpdmxlbiA9IC0xLCBhYWRsZW4gPSAtMSwgdGFnbGVuID0g LTEsIHB0bGVuID0gLTE7Ci0rCWludCBydjsKLSsJbG9uZyBsOwotKwl1bnNpZ25lZCBjaGFyICpr ZXkgPSBOVUxMLCAqaXYgPSBOVUxMLCAqYWFkID0gTlVMTCwgKnRhZyA9IE5VTEw7Ci0rCXVuc2ln bmVkIGNoYXIgKmN0ID0gTlVMTCwgKnB0ID0gTlVMTDsKLSsJRVZQX0NJUEhFUl9DVFggY3R4Owot Kwljb25zdCBFVlBfQ0lQSEVSICpnY20gPSBOVUxMOwotKwlGSVBTX2NpcGhlcl9jdHhfaW5pdCgm Y3R4KTsKLSsKLSsJd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsaW4pICE9IE5VTEwpCi0rCQl7 Ci0rCQlmcHV0cyhidWYsb3V0KTsKLSsJCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVl LCBsYnVmLCBidWYpKQotKwkJCWNvbnRpbnVlOwotKwkJaWYoIXN0cmNtcChrZXl3b3JkLCJbS2V5 bGVuIikpCi0rCQkJewotKwkJCWtleWxlbiA9IGF0b2kodmFsdWUpOwotKwkJCWlmIChrZXlsZW4g PT0gMTI4KQotKwkJCQlnY20gPSBFVlBfYWVzXzEyOF9nY20oKTsKLSsJCQllbHNlIGlmIChrZXls ZW4gPT0gMTkyKQotKwkJCQlnY20gPSBFVlBfYWVzXzE5Ml9nY20oKTsKLSsJCQllbHNlIGlmIChr ZXlsZW4gPT0gMjU2KQotKwkJCQlnY20gPSBFVlBfYWVzXzI1Nl9nY20oKTsKLSsJCQllbHNlIAot KwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiVW5zdXBwb3J0ZWQga2V5bGVuICVkXG4iLAot KwkJCQkJCQlrZXlsZW4pOwotKwkJCQl9Ci0rCQkJa2V5bGVuID4+PSAzOwotKwkJCX0KLSsJCWVs c2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIltJVmxlbiIpKQotKwkJCWl2bGVuID0gYXRvaSh2YWx1 ZSkgPj4gMzsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIltBQURsZW4iKSkKLSsJCQlh YWRsZW4gPSBhdG9pKHZhbHVlKSA+PiAzOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAi W1RhZ2xlbiIpKQotKwkJCXRhZ2xlbiA9IGF0b2kodmFsdWUpID4+IDM7Ci0rCQllbHNlIGlmICgh c3RyY21wKGtleXdvcmQsICJbUFRsZW4iKSkKLSsJCQlwdGxlbiA9IGF0b2kodmFsdWUpID4+IDM7 Ci0rCQllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCi0rCQkJewotKwkJCWtleSA9IGhl eDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlmIChsICE9IGtleWxlbikKLSsJCQkJewotKwkJCQlm cHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBLZXkgbGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgx KTsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJJViIpKQotKwkJ CXsKLSsJCQlpdiA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlmIChsICE9IGl2bGVuKQot KwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IElWIGxlbmd0aFxuIik7 Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmKCFzdHJjbXAoa2V5d29y ZCwiUFQiKSkKLSsJCQl7Ci0rCQkJcHQgPSBoZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpZiAo bCAhPSBwdGxlbikKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBQ VCBsZW5ndGhcbiIpOwotKwkJCQlleGl0KDEpOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZigh c3RyY21wKGtleXdvcmQsIkNUIikpCi0rCQkJewotKwkJCWN0ID0gaGV4MmJpbl9tKHZhbHVlLCAm bCk7Ci0rCQkJaWYgKGwgIT0gcHRsZW4pCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJ bmNvbnNpc3RlbnQgQ1QgbGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJCX0K LSsJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJBQUQiKSkKLSsJCQl7Ci0rCQkJYWFkID0gaGV4 MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaWYgKGwgIT0gYWFkbGVuKQotKwkJCQl7Ci0rCQkJCWZw cmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IEFBRCBsZW5ndGhcbiIpOwotKwkJCQlleGl0KDEp OwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlRhZyIpKQotKwkJ CXsKLSsJCQl0YWcgPSBoZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpZiAobCAhPSB0YWdsZW4p Ci0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgVGFnIGxlbmd0aFxu Iik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQlpZiAoZW5jcnlwdCAmJiBwdCAm JiBhYWQgJiYgKGl2IHx8IGVuY3J5cHQ9PTEpKQotKwkJCXsKLSsJCQl0YWcgPSBPUEVOU1NMX21h bGxvYyh0YWdsZW4pOwotKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBnY20sIE5VTEwsIE5VTEws IDEpOwotKwkJCS8qIFJlbGF4IEZJUFMgY29uc3RyYWludHMgZm9yIHRlc3RpbmcgKi8KLSsJCQlN X0VWUF9DSVBIRVJfQ1RYX3NldF9mbGFncygmY3R4LCBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FM TE9XKTsKLSsJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX0lW TEVOLCBpdmxlbiwgMCk7Ci0rCQkJaWYgKGVuY3J5cHQgPT0gMSkKLSsJCQkJewotKwkJCQlzdGF0 aWMgdW5zaWduZWQgY2hhciBpdl9maXhlZFs0XSA9IHsxLDIsMyw0fTsKLSsJCQkJaWYgKCFpdikK LSsJCQkJCWl2ID0gT1BFTlNTTF9tYWxsb2MoaXZsZW4pOwotKwkJCQlGSVBTX2NpcGhlcmluaXQo JmN0eCwgTlVMTCwga2V5LCBOVUxMLCAxKTsKLSsJCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0 eCwKLSsJCQkJCQlFVlBfQ1RSTF9HQ01fU0VUX0lWX0ZJWEVELAotKwkJCQkJCTQsIGl2X2ZpeGVk KTsKLSsJCQkJaWYgKCFGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LAotKwkJCQkJRVZQX0NUUkxf R0NNX0lWX0dFTiwgMCwgaXYpKQotKwkJCQkJewotKwkJCQkJZnByaW50ZihzdGRlcnIsICJJViBn ZW4gZXJyb3JcbiIpOwotKwkJCQkJZXhpdCgxKTsKLSsJCQkJCX0KLSsJCQkJT3V0cHV0VmFsdWUo IklWIiwgaXYsIGl2bGVuLCBvdXQsIDApOwotKwkJCQl9Ci0rCQkJZWxzZQotKwkJCQlGSVBTX2Np cGhlcmluaXQoJmN0eCwgTlVMTCwga2V5LCBpdiwgMSk7Ci0rCi0rCi0rCQkJaWYgKGFhZGxlbikK LSsJCQkJRklQU19jaXBoZXIoJmN0eCwgTlVMTCwgYWFkLCBhYWRsZW4pOwotKwkJCWlmIChwdGxl bikKLSsJCQkJewotKwkJCQljdCA9IE9QRU5TU0xfbWFsbG9jKHB0bGVuKTsKLSsJCQkJcnYgPSBG SVBTX2NpcGhlcigmY3R4LCBjdCwgcHQsIHB0bGVuKTsKLSsJCQkJfQotKwkJCUZJUFNfY2lwaGVy KCZjdHgsIE5VTEwsIE5VTEwsIDApOwotKwkJCUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsIEVW UF9DVFJMX0dDTV9HRVRfVEFHLAotKwkJCQkJCQkJdGFnbGVuLCB0YWcpOwkKLSsJCQlPdXRwdXRW YWx1ZSgiQ1QiLCBjdCwgcHRsZW4sIG91dCwgMCk7Ci0rCQkJT3V0cHV0VmFsdWUoIlRhZyIsIHRh ZywgdGFnbGVuLCBvdXQsIDApOwotKwkJCWlmIChpdikKLSsJCQkJT1BFTlNTTF9mcmVlKGl2KTsK LSsJCQlpZiAoYWFkKQotKwkJCQlPUEVOU1NMX2ZyZWUoYWFkKTsKLSsJCQlpZiAoY3QpCi0rCQkJ CU9QRU5TU0xfZnJlZShjdCk7Ci0rCQkJaWYgKHB0KQotKwkJCQlPUEVOU1NMX2ZyZWUocHQpOwot KwkJCWlmIChrZXkpCi0rCQkJCU9QRU5TU0xfZnJlZShrZXkpOwotKwkJCWlmICh0YWcpCi0rCQkJ CU9QRU5TU0xfZnJlZSh0YWcpOwotKwkJCWl2ID0gYWFkID0gY3QgPSBwdCA9IGtleSA9IHRhZyA9 IE5VTEw7Ci0rCQkJfQkKLSsJCWlmICghZW5jcnlwdCAmJiB0YWcpCi0rCQkJewotKwkJCUZJUFNf Y2lwaGVyaW5pdCgmY3R4LCBnY20sIE5VTEwsIE5VTEwsIDApOwotKwkJCS8qIFJlbGF4IEZJUFMg Y29uc3RyYWludHMgZm9yIHRlc3RpbmcgKi8KLSsJCQlNX0VWUF9DSVBIRVJfQ1RYX3NldF9mbGFn cygmY3R4LCBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKLSsJCQlGSVBTX2NpcGhlcl9j dHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX0lWTEVOLCBpdmxlbiwgMCk7Ci0rCQkJRklQ U19jaXBoZXJpbml0KCZjdHgsIE5VTEwsIGtleSwgaXYsIDApOwotKwkJCUZJUFNfY2lwaGVyX2N0 eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9TRVRfVEFHLCB0YWdsZW4sIHRhZyk7Ci0rCQkJaWYg KGFhZGxlbikKLSsJCQkJRklQU19jaXBoZXIoJmN0eCwgTlVMTCwgYWFkLCBhYWRsZW4pOwotKwkJ CWlmIChwdGxlbikKLSsJCQkJewotKwkJCQlwdCA9IE9QRU5TU0xfbWFsbG9jKHB0bGVuKTsKLSsJ CQkJcnYgPSBGSVBTX2NpcGhlcigmY3R4LCBwdCwgY3QsIHB0bGVuKTsKLSsJCQkJfQotKwkJCXJ2 ID0gRklQU19jaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgMCk7Ci0rCQkJaWYgKHJ2IDwgMCkKLSsJ CQkJZnByaW50ZihvdXQsICJGQUlMIiBSRVNQX0VPTCk7Ci0rCQkJZWxzZQotKwkJCQlPdXRwdXRW YWx1ZSgiUFQiLCBwdCwgcHRsZW4sIG91dCwgMCk7Ci0rCQkJaWYgKGl2KQotKwkJCQlPUEVOU1NM X2ZyZWUoaXYpOwotKwkJCWlmIChhYWQpCi0rCQkJCU9QRU5TU0xfZnJlZShhYWQpOwotKwkJCWlm IChjdCkKLSsJCQkJT1BFTlNTTF9mcmVlKGN0KTsKLSsJCQlpZiAocHQpCi0rCQkJCU9QRU5TU0xf ZnJlZShwdCk7Ci0rCQkJaWYgKGtleSkKLSsJCQkJT1BFTlNTTF9mcmVlKGtleSk7Ci0rCQkJaWYg KHRhZykKLSsJCQkJT1BFTlNTTF9mcmVlKHRhZyk7Ci0rCQkJaXYgPSBhYWQgPSBjdCA9IHB0ID0g a2V5ID0gdGFnID0gTlVMTDsKLSsJCQl9Ci0rCQl9Ci0rCUZJUFNfY2lwaGVyX2N0eF9jbGVhbnVw KCZjdHgpOwkKLSsJfQotKwotK3N0YXRpYyB2b2lkIHh0c3Rlc3QoRklMRSAqaW4sIEZJTEUgKm91 dCkKLSsJewotKwljaGFyIGJ1ZlsyMDQ4MDBdOwotKwljaGFyIGxidWZbMjA0ODAwXTsKLSsJY2hh ciAqa2V5d29yZCwgKnZhbHVlOwotKwlpbnQgaW5sZW4gPSAwOwotKwlpbnQgZW5jcnlwdCA9IDA7 Ci0rCWxvbmcgbDsKLSsJdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTCwgKml2ID0gTlVMTDsKLSsJ dW5zaWduZWQgY2hhciAqaW5idWYgPSBOVUxMLCAqb3V0YnVmID0gTlVMTDsKLSsJRVZQX0NJUEhF Ul9DVFggY3R4OwotKwljb25zdCBFVlBfQ0lQSEVSICp4dHMgPSBOVUxMOwotKwlGSVBTX2NpcGhl cl9jdHhfaW5pdCgmY3R4KTsKLSsKLSsJd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsaW4pICE9 IE5VTEwpCi0rCQl7Ci0rCQlmcHV0cyhidWYsb3V0KTsKLSsJCWlmIChidWZbMF0gPT0gJ1snICYm IHN0cmxlbihidWYpID49IDkpCi0rCQkJewotKwkJCWlmKCFzdHJuY21wKGJ1ZiwiW0VOQ1JZUFRd IiwgOSkpCi0rCQkJCWVuY3J5cHQgPSAxOwotKwkJCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbREVD UllQVF0iLCA5KSkKLSsJCQkJZW5jcnlwdCA9IDA7Ci0rCQkJfQotKwkJaWYgICghcGFyc2VfbGlu ZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZSBp Zighc3RyY21wKGtleXdvcmQsIktleSIpKQotKwkJCXsKLSsJCQlrZXkgPSBoZXgyYmluX20odmFs dWUsICZsKTsKLSsJCQlpZiAobCA9PSAzMikKLSsJCQkJeHRzID0gRVZQX2Flc18xMjhfeHRzKCk7 Ci0rCQkJZWxzZSBpZiAobCA9PSA2NCkKLSsJCQkJeHRzID0gRVZQX2Flc18yNTZfeHRzKCk7Ci0r CQkJZWxzZQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IEtleSBs ZW5ndGhcbiIpOwotKwkJCQlleGl0KDEpOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZighc3Ry Y21wKGtleXdvcmQsImkiKSkKLSsJCQl7Ci0rCQkJaXYgPSBoZXgyYmluX20odmFsdWUsICZsKTsK LSsJCQlpZiAobCAhPSAxNikKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lz dGVudCBpIGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNl IGlmKGVuY3J5cHQgJiYgIXN0cmNtcChrZXl3b3JkLCJQVCIpKQotKwkJCXsKLSsJCQlpbmJ1ZiA9 IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlubGVuID0gbDsKLSsJCQl9Ci0rCQllbHNlIGlm KCFlbmNyeXB0ICYmICFzdHJjbXAoa2V5d29yZCwiQ1QiKSkKLSsJCQl7Ci0rCQkJaW5idWYgPSBo ZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpbmxlbiA9IGw7Ci0rCQkJfQotKwkJaWYgKGluYnVm KQotKwkJCXsKLSsJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgeHRzLCBrZXksIGl2LCBlbmNyeXB0 KTsKLSsJCQlvdXRidWYgPSBPUEVOU1NMX21hbGxvYyhpbmxlbik7Ci0rCQkJRklQU19jaXBoZXIo JmN0eCwgb3V0YnVmLCBpbmJ1ZiwgaW5sZW4pOwotKwkJCU91dHB1dFZhbHVlKGVuY3J5cHQgPyAi Q1QiOiJQVCIsIG91dGJ1ZiwgaW5sZW4sIG91dCwgMCk7Ci0rCQkJT1BFTlNTTF9mcmVlKGluYnVm KTsKLSsJCQlPUEVOU1NMX2ZyZWUob3V0YnVmKTsKLSsJCQlPUEVOU1NMX2ZyZWUoa2V5KTsKLSsJ CQlPUEVOU1NMX2ZyZWUoaXYpOwotKwkJCWl2ID0ga2V5ID0gaW5idWYgPSBvdXRidWYgPSBOVUxM OwotKwkJCX0JCi0rCQl9Ci0rCUZJUFNfY2lwaGVyX2N0eF9jbGVhbnVwKCZjdHgpOwkKLSsJfQot KwotK3N0YXRpYyB2b2lkIGNjbXRlc3QoRklMRSAqaW4sIEZJTEUgKm91dCkKLSsJewotKwljaGFy IGJ1ZlsyMDAwNDhdOwotKwljaGFyIGxidWZbMjAwMDQ4XTsKLSsJY2hhciAqa2V5d29yZCwgKnZh bHVlOwotKwlsb25nIGw7Ci0rCXVuc2lnbmVkIGNoYXIgKktleSA9IE5VTEwsICpOb25jZSA9IE5V TEw7Ci0rCXVuc2lnbmVkIGNoYXIgKkFkYXRhID0gTlVMTCwgKlBheWxvYWQgPSBOVUxMOwotKwl1 bnNpZ25lZCBjaGFyICpDVCA9IE5VTEw7Ci0rCWludCBQbGVuID0gLTEsIE5sZW4gPSAtMSwgVGxl biA9IC0xLCBBbGVuID0gLTE7Ci0rCWludCBkZWNyID0gMDsKLSsJRVZQX0NJUEhFUl9DVFggY3R4 OwotKwljb25zdCBFVlBfQ0lQSEVSICpjY20gPSBOVUxMOwotKwlGSVBTX2NpcGhlcl9jdHhfaW5p dCgmY3R4KTsKLSsKLSsJd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsaW4pICE9IE5VTEwpCi0r CQl7Ci0rCQljaGFyICpwOwotKwkJZnB1dHMoYnVmLG91dCk7Ci0rCQlyZWRvOgotKwkJaWYgKCFw YXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQkJY29udGludWU7Ci0r Ci0rCQkvKiBJZiBzdXJyb3VuZGVkIGJ5IHNxdWFyZSBicmFja2V0cyB6YXAgdGhlbSAqLwotKwkJ aWYgKGtleXdvcmRbMF0gPT0gJ1snKQotKwkJCXsKLSsJCQlrZXl3b3JkKys7Ci0rCQkJcCA9IHN0 cmNocih2YWx1ZSwgJ10nKTsKLSsJCQlpZiAocCkKLSsJCQkJKnAgPSAwOwotKwkJCX0KLSsJCS8q IFNlZSBpZiB3ZSBoYXZlIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgcGFyYW1ldGVycwotKwkJ ICogaWYgc28gY29weSByZXN0IG9mIGxpbmUgYmFjayB0byBidWZmZXIgYW5kIHJlZG8gbGF0ZXIu Ci0rCQkgKi8KLSsJCXAgPSBzdHJjaHIodmFsdWUsICcsJyk7Ci0rCQlpZiAocCkKLSsJCQl7Ci0r CQkJKnAgPSAwOwotKwkJCXN0cmNweShidWYsIHAgKyAxKTsKLSsJCQlzdHJjYXQoYnVmLCAiXG4i KTsKLSsJCQlkZWNyID0gMTsKLSsJCQl9Ci0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCJQbGVuIikp Ci0rCQkJUGxlbiA9IGF0b2kodmFsdWUpOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCJO bGVuIikpCi0rCQkJTmxlbiA9IGF0b2kodmFsdWUpOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCJUbGVuIikpCi0rCQkJVGxlbiA9IGF0b2kodmFsdWUpOwotKwkJZWxzZSBpZiAoIXN0cmNt cChrZXl3b3JkLCJBbGVuIikpCi0rCQkJQWxlbiA9IGF0b2kodmFsdWUpOwotKwkJaWYgKHApCi0r CQkJZ290byByZWRvOwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCi0rCQkJewotKwkJ CWlmIChLZXkpCi0rCQkJCU9QRU5TU0xfZnJlZShLZXkpOwotKwkJCUtleSA9IGhleDJiaW5fbSh2 YWx1ZSwgJmwpOwotKwkJCWlmIChsID09IDE2KQotKwkJCQljY20gPSBFVlBfYWVzXzEyOF9jY20o KTsKLSsJCQllbHNlIGlmIChsID09IDI0KQotKwkJCQljY20gPSBFVlBfYWVzXzE5Ml9jY20oKTsK LSsJCQllbHNlIGlmIChsID09IDMyKQotKwkJCQljY20gPSBFVlBfYWVzXzI1Nl9jY20oKTsKLSsJ CQllbHNlCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgS2V5IGxl bmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsIk5vbmNlIikpCi0rCQkJewotKwkJCWlmIChOb25jZSkKLSsJCQkJT1BFTlNT TF9mcmVlKE5vbmNlKTsKLSsJCQlOb25jZSA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlm IChsICE9IE5sZW4pCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQg bm9uY2UgbGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwiUGF5bG9hZCIpICYmICFkZWNyKQotKwkJCXsKLSsJCQlQYXls b2FkID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaWYgKFBsZW4gJiYgbCAhPSBQbGVuKQot KwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IFBheWxvYWQgbGVuZ3Ro XG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwiQWRhdGEiKSkKLSsJCQl7Ci0rCQkJaWYgKEFkYXRhKQotKwkJCQlPUEVOU1NMX2Zy ZWUoQWRhdGEpOwotKwkJCUFkYXRhID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaWYgKEFs ZW4gJiYgbCAhPSBBbGVuKQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0 ZW50IFBheWxvYWQgbGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJCX0KLSsJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwiQ1QiKSAmJiBkZWNyKQotKwkJCXsKLSsJCQlDVCA9 IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlmIChsICE9IChQbGVuICsgVGxlbikpCi0rCQkJ CXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgQ1QgbGVuZ3RoXG4iKTsKLSsJ CQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJCX0KLSsJCWlmIChQYXlsb2FkKQotKwkJCXsKLSsJCQlG SVBTX2NpcGhlcmluaXQoJmN0eCwgY2NtLCBOVUxMLCBOVUxMLCAxKTsKLSsJCQlGSVBTX2NpcGhl cl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX0lWTEVOLCBObGVuLCAwKTsKLSsJCQlG SVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywgVGxlbiwgMCk7 Ci0rCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIE5VTEwsIEtleSwgTm9uY2UsIDEpOwotKwotKwkJ CUZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIFBsZW4pOwotKwkJCUZJUFNfY2lwaGVyKCZj dHgsIE5VTEwsIEFkYXRhLCBBbGVuKTsKLSsJCQlDVCA9IE9QRU5TU0xfbWFsbG9jKFBsZW4gKyBU bGVuKTsKLSsJCQlGSVBTX2NpcGhlcigmY3R4LCBDVCwgUGF5bG9hZCwgUGxlbik7Ci0rCQkJRklQ U19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX0dFVF9UQUcsIFRsZW4sCi0rCQkJ CQkJQ1QgKyBQbGVuKTsKLSsJCQlPdXRwdXRWYWx1ZSgiQ1QiLCBDVCwgUGxlbiArIFRsZW4sIG91 dCwgMCk7Ci0rCQkJT1BFTlNTTF9mcmVlKENUKTsKLSsJCQlPUEVOU1NMX2ZyZWUoUGF5bG9hZCk7 Ci0rCQkJQ1QgPSBQYXlsb2FkID0gTlVMTDsKLSsJCQl9Ci0rCQlpZiAoQ1QpCi0rCQkJewotKwkJ CWludCBydjsKLSsJCQlpbnQgbGVuID0gUGxlbiA9PSAwID8gMTogUGxlbjsKLSsJCQlGSVBTX2Np cGhlcmluaXQoJmN0eCwgY2NtLCBOVUxMLCBOVUxMLCAwKTsKLSsJCQlGSVBTX2NpcGhlcl9jdHhf Y3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX0lWTEVOLCBObGVuLCAwKTsKLSsJCQlGSVBTX2Np cGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywKLSsJCQkJCQlUbGVuLCBD VCArIFBsZW4pOwotKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBOVUxMLCBLZXksIE5vbmNlLCAw KTsKLSsJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCBQbGVuKTsKLSsJCQlGSVBTX2Np cGhlcigmY3R4LCBOVUxMLCBBZGF0YSwgQWxlbik7Ci0rCQkJUGF5bG9hZCA9IE9QRU5TU0xfbWFs bG9jKGxlbik7Ci0rCQkJcnYgPSBGSVBTX2NpcGhlcigmY3R4LCBQYXlsb2FkLCBDVCwgUGxlbik7 Ci0rCQkJaWYgKHJ2ID49IDApCi0rCQkJCXsKLSsJCQkJaWYgKHJ2ID09IDApCi0rCQkJCQlQYXls b2FkWzBdID0gMDsKLSsJCQkJZnB1dHMoIlJlc3VsdCA9IFBhc3MiIFJFU1BfRU9MLCBvdXQpOwot KwkJCQlPdXRwdXRWYWx1ZSgiUGF5bG9hZCIsIFBheWxvYWQsIGxlbiwgb3V0LCAwKTsKLSsJCQkJ fQotKwkJCWVsc2UKLSsJCQkJZnB1dHMoIlJlc3VsdCA9IEZhaWwiIFJFU1BfRU9MLCBvdXQpOwot KwkJCU9QRU5TU0xfZnJlZShDVCk7Ci0rCQkJT1BFTlNTTF9mcmVlKFBheWxvYWQpOwotKwkJCUNU ID0gUGF5bG9hZCA9IE5VTEw7Ci0rCQkJfQotKwkJfQotKwlpZiAoS2V5KQotKwkJT1BFTlNTTF9m cmVlKEtleSk7Ci0rCWlmIChOb25jZSkKLSsJCU9QRU5TU0xfZnJlZShOb25jZSk7Ci0rCWlmIChB ZGF0YSkKLSsJCU9QRU5TU0xfZnJlZShBZGF0YSk7Ci0rCUZJUFNfY2lwaGVyX2N0eF9jbGVhbnVw KCZjdHgpOwotKwl9Ci0rCi0rI2lmZGVmIEZJUFNfQUxHVlMKLStpbnQgZmlwc19nY210ZXN0X21h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKyNlbHNlCi0raW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQotKyNlbmRpZgotKwl7Ci0rCWludCBlbmNyeXB0OwotKwlpbnQgeHRzID0gMCwg Y2NtID0gMDsKLSsJRklMRSAqaW4sICpvdXQ7Ci0rCWlmIChhcmdjID09IDQpCi0rCQl7Ci0rCQlp biA9IGZvcGVuKGFyZ3ZbMl0sICJyIik7Ci0rCQlpZiAoIWluKQotKwkJCXsKLSsJCQlmcHJpbnRm KHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgaW5wdXQgZmlsZVxuIik7Ci0rCQkJZXhpdCgxKTsKLSsJ CQl9Ci0rCQlvdXQgPSBmb3Blbihhcmd2WzNdLCAidyIpOwotKwkJaWYgKCFvdXQpCi0rCQkJewot KwkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBvdXRwdXQgZmlsZVxuIik7Ci0rCQkJ ZXhpdCgxKTsKLSsJCQl9Ci0rCQl9Ci0rCWVsc2UgaWYgKGFyZ2MgPT0gMikKLSsJCXsKLSsJCWlu ID0gc3RkaW47Ci0rCQlvdXQgPSBzdGRvdXQ7Ci0rCQl9Ci0rCWVsc2UKLSsJCXsKLSsJCWZwcmlu dGYoc3RkZXJyLCIlcyBbLWVuY3J5cHR8LWRlY3J5cHRdXG4iLGFyZ3ZbMF0pOwotKwkJZXhpdCgx KTsKLSsJCX0KLSsJZmlwc19hbGd0ZXN0X2luaXQoKTsKLSsJaWYoIXN0cmNtcChhcmd2WzFdLCIt ZW5jcnlwdCIpKQotKwkJZW5jcnlwdCA9IDE7Ci0rCWVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCIt ZW5jcnlwdElWZXh0IikpCi0rCQllbmNyeXB0ID0gMjsKLSsJZWxzZSBpZighc3RyY21wKGFyZ3Zb MV0sIi1kZWNyeXB0IikpCi0rCQllbmNyeXB0ID0gMDsKLSsJZWxzZSBpZighc3RyY21wKGFyZ3Zb MV0sIi1jY20iKSkKLSsJCWNjbSA9IDE7Ci0rCWVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCIteHRz IikpCi0rCQl4dHMgPSAxOwotKwllbHNlCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwiRG9uJ3Qg a25vdyBob3cgdG8gJXMuXG4iLGFyZ3ZbMV0pOwotKwkJZXhpdCgxKTsKLSsJCX0KLSsKLSsJaWYg KGNjbSkKLSsJCWNjbXRlc3QoaW4sIG91dCk7Ci0rCWVsc2UgaWYgKHh0cykKLSsJCXh0c3Rlc3Qo aW4sIG91dCk7Ci0rCWVsc2UKLSsJCWdjbXRlc3QoaW4sIG91dCwgZW5jcnlwdCk7Ci0rCi0rCWlm IChhcmdjID09IDQpCi0rCQl7Ci0rCQlmY2xvc2UoaW4pOwotKwkJZmNsb3NlKG91dCk7Ci0rCQl9 Ci0rCi0rCXJldHVybiAwOwotK30KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEt YmV0YTIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJl dGEyL2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRh Mi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMuYy5maXBzCTIwMTItMDItMDcgMTE6MDc6MDIu NTQxMzkzNzA3ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfcm5ndnMuYwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0MTM5MzcwNyArMDEwMAotQEAgLTAs MCArMSwyMzAgQEAKLSsvKgotKyAqIENydWRlIHRlc3QgZHJpdmVyIGZvciBwcm9jZXNzaW5nIHRo ZSBWU1QgYW5kIE1DVCB0ZXN0dmVjdG9yIGZpbGVzCi0rICogZ2VuZXJhdGVkIGJ5IHRoZSBDTVZQ IFJOR1ZTIHByb2R1Y3QuCi0rICoKLSsgKiBOb3RlIHRoZSBpbnB1dCBmaWxlcyBhcmUgYXNzdW1l ZCB0byBoYXZlIGEgX3ZlcnlfIHNwZWNpZmljIGZvcm1hdAotKyAqIGFzIGRlc2NyaWJlZCBpbiB0 aGUgTklTVCBkb2N1bWVudCAiVGhlIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yCi0rICogVmFsaWRh dGlvbiBTeXN0ZW0gKFJOR1ZTKSIsIE1heSAyNSwgMjAwNC4KLSsgKgotKyAqLwotKyNpbmNsdWRl IDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5j bHVkZSA8c3RkaW8uaD4KLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rewot KyAgICBwcmludGYoIk5vIEZJUFMgUk5HIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4gMDsKLSt9 Ci0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2RzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlw c19yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+Ci0rI2luY2x1ZGUgPHN0cmlu Zy5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwot K3ZvaWQgdnN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyICprZXkgPSBOVUxMOwotKyAg ICB1bnNpZ25lZCBjaGFyICp2ID0gTlVMTDsKLSsgICAgdW5zaWduZWQgY2hhciAqZHQgPSBOVUxM OwotKyAgICB1bnNpZ25lZCBjaGFyIHJldFsxNl07Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAg ICBjaGFyIGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgbG9u ZyBpLCBrZXlsZW47Ci0rCi0rICAgIGtleWxlbiA9IDA7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1 ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWZwdXRzKGJ1ZixzdGRvdXQpOwot KwlpZighc3RybmNtcChidWYsIltBRVMgMTI4LUtleV0iLCAxMykpCi0rCQlrZXlsZW4gPSAxNjsK LSsJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMTkyLUtleV0iLCAxMykpCi0rCQlrZXlsZW4g PSAyNDsKLSsJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMjU2LUtleV0iLCAxMykpCi0rCQlr ZXlsZW4gPSAzMjsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1 ZikpCi0rCQljb250aW51ZTsKLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkKLSsJICAgIHsK LSsJICAgIGtleT1oZXgyYmluX20odmFsdWUsJmkpOwotKwkgICAgaWYgKGkgIT0ga2V5bGVuKQot KwkJewotKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGtleSBsZW5ndGgsIGV4cGVjdGluZyAl bGRcbiIsIGtleWxlbik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJEVCIpKQotKwkgICAgewotKwkgICAgZHQ9aGV4MmJpbl9tKHZhbHVlLCZp KTsKLSsJICAgIGlmIChpICE9IDE2KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlk IERUIGxlbmd0aFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJWIikpCi0rCSAgICB7Ci0rCSAgICB2PWhleDJiaW5fbSh2YWx1ZSwmaSk7 Ci0rCSAgICBpZiAoaSAhPSAxNikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBW IGxlbmd0aFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCi0rCSAgICBpZiAoIWtleSB8fCAhZHQp Ci0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIk1pc3Npbmcga2V5IG9yIERUXG4iKTsKLSsJCXJl dHVybjsKLSsJCX0KLSsKLSsJICAgIEZJUFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVuKTsKLSsJ ICAgIEZJUFNfeDkzMV9zZWVkKHYsMTYpOwotKwkgICAgRklQU194OTMxX3NldF9kdChkdCk7Ci0r CSAgICBpZiAoRklQU194OTMxX2J5dGVzKHJldCwxNikgPD0gMCkKLSsJCXsKLSsJCWZwcmludGYo c3RkZXJyLCAiRXJyb3IgZ2V0dGluZyBQUk5HIHZhbHVlXG4iKTsKLSsJICAgICAgICByZXR1cm47 Ci0rCSAgICAgICAgfQotKwotKwkgICAgcHYoIlIiLHJldCwxNik7Ci0rCSAgICBPUEVOU1NMX2Zy ZWUoa2V5KTsKLSsJICAgIGtleSA9IE5VTEw7Ci0rCSAgICBPUEVOU1NMX2ZyZWUoZHQpOwotKwkg ICAgZHQgPSBOVUxMOwotKwkgICAgT1BFTlNTTF9mcmVlKHYpOwotKwkgICAgdiA9IE5VTEw7Ci0r CSAgICB9Ci0rCX0KLSsgICAgfQotKwotK3ZvaWQgbWN0KCkKLSsgICAgewotKyAgICB1bnNpZ25l ZCBjaGFyICprZXkgPSBOVUxMOwotKyAgICB1bnNpZ25lZCBjaGFyICp2ID0gTlVMTDsKLSsgICAg dW5zaWduZWQgY2hhciAqZHQgPSBOVUxMOwotKyAgICB1bnNpZ25lZCBjaGFyIHJldFsxNl07Ci0r ICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFyIGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtl eXdvcmQsICp2YWx1ZTsKLSsgICAgbG9uZyBpLCBrZXlsZW47Ci0rICAgIGludCBqOwotKwotKyAg ICBrZXlsZW4gPSAwOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikg IT0gTlVMTCkKLSsJewotKwlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJaWYoIXN0cm5jbXAoYnVmLCJb QUVTIDEyOC1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMTY7Ci0rCWVsc2UgaWYoIXN0cm5jbXAo YnVmLCJbQUVTIDE5Mi1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMjQ7Ci0rCWVsc2UgaWYoIXN0 cm5jbXAoYnVmLCJbQUVTIDI1Ni1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMzI7Ci0rCWlmICgh cGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJY29udGludWU7Ci0r CWlmKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCi0rCSAgICB7Ci0rCSAgICBrZXk9aGV4MmJpbl9t KHZhbHVlLCZpKTsKLSsJICAgIGlmIChpICE9IGtleWxlbikKLSsJCXsKLSsJCWZwcmludGYoc3Rk ZXJyLCAiSW52YWxpZCBrZXkgbGVuZ3RoLCBleHBlY3RpbmcgJWxkXG4iLCBrZXlsZW4pOwotKwkJ cmV0dXJuOwotKwkJfQotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRFQiKSkK LSsJICAgIHsKLSsJICAgIGR0PWhleDJiaW5fbSh2YWx1ZSwmaSk7Ci0rCSAgICBpZiAoaSAhPSAx NikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBEVCBsZW5ndGhcbiIpOwotKwkJ cmV0dXJuOwotKwkJfQotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiViIpKQot KwkgICAgewotKwkgICAgdj1oZXgyYmluX20odmFsdWUsJmkpOwotKwkgICAgaWYgKGkgIT0gMTYp Ci0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgViBsZW5ndGhcbiIpOwotKwkJcmV0 dXJuOwotKwkJfQotKwotKwkgICAgaWYgKCFrZXkgfHwgIWR0KQotKwkJewotKwkJZnByaW50Zihz dGRlcnIsICJNaXNzaW5nIGtleSBvciBEVFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCi0rCSAg ICBGSVBTX3g5MzFfc2V0X2tleShrZXksIGtleWxlbik7Ci0rCSAgICBGSVBTX3g5MzFfc2VlZCh2 LDE2KTsKLSsJICAgIGZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKQotKwkJewotKwkJICAgIEZJ UFNfeDkzMV9zZXRfZHQoZHQpOwotKwkJICAgIGlmIChGSVBTX3g5MzFfYnl0ZXMocmV0LDE2KSA8 PSAwKQotKwkJCXsKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGdldHRpbmcgUFJORyB2YWx1 ZVxuIik7Ci0rCQkgICAgICAgIHJldHVybjsKLSsJCSAgICAgICAgfQotKwkJICAgIC8qIEluY3Jl bWVudCBEVCAqLwotKwkJICAgIGZvciAoaiA9IDE1OyBqID49IDA7IGotLSkKLSsJCQl7Ci0rCQkJ ZHRbal0rKzsKLSsJCQlpZiAoZHRbal0pCi0rCQkJCWJyZWFrOwotKwkJCX0KLSsJCX0KLSsKLSsJ ICAgIHB2KCJSIixyZXQsMTYpOwotKwkgICAgT1BFTlNTTF9mcmVlKGtleSk7Ci0rCSAgICBrZXkg PSBOVUxMOwotKwkgICAgT1BFTlNTTF9mcmVlKGR0KTsKLSsJICAgIGR0ID0gTlVMTDsKLSsJICAg IE9QRU5TU0xfZnJlZSh2KTsKLSsJICAgIHYgPSBOVUxMOwotKwkgICAgfQotKwl9Ci0rICAgIH0K LSsKLStpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKLSsgICAgewotKyAgICBpZihhcmdj ICE9IDIpCi0rCXsKLSsJZnByaW50ZihzdGRlcnIsIiVzIFttY3R8dnN0XVxuIixhcmd2WzBdKTsK LSsJZXhpdCgxKTsKLSsJfQotKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKLSsJewotKwlkb19w cmludF9lcnJvcnMoKTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBGSVBTX3g5MzFfcmVzZXQoKTsK LSsgICAgaWYgKCFGSVBTX3g5MzFfdGVzdF9tb2RlKCkpCi0rCXsKLSsJZnByaW50ZihzdGRlcnIs ICJFcnJvciBzZXR0aW5nIFBSTkcgdGVzdCBtb2RlXG4iKTsKLSsJZG9fcHJpbnRfZXJyb3JzKCk7 Ci0rCWV4aXQoMSk7Ci0rCX0KLSsgICAgaWYoIXN0cmNtcChhcmd2WzFdLCJtY3QiKSkKLSsJbWN0 KCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJ2c3QiKSkKLSsJdnN0KCk7Ci0rICAg IGVsc2UKLSsJewotKwlmcHJpbnRmKHN0ZGVyciwiRG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFy Z3ZbMV0pOwotKwlleGl0KDEpOwotKwl9Ci0rCi0rICAgIHJldHVybiAwOwotKyAgICB9Ci0rI2Vu ZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlwc19y c2FndGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNf cnNhZ3Rlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X3JzYWd0ZXN0LmMuZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0MTM5MzcwNyArMDEwMAotKysr IG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMJMjAx Mi0wMi0wNyAxMTowNzowMi41NDEzOTM3MDcgKzAxMDAKLUBAIC0wLDAgKzEsMzkwIEBACi0rLyog Zmlwc19yc2FndGVzdC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChz dGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdCAyMDA1LgotKyAq LwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA1LDIwMDcgVGhlIE9wZW5T U0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu IAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAg ZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50 aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNw bGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcv KSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wg UHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFj dAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAq ICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9y IHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoK LSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFp biB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAot KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NM Lm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNT TCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3Bl blNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICoKLSsgKiBUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcK LSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICoKLSsg Ki8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVk ZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Ju Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJ UFMKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRm KCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsKLSsjZWxz ZQotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotK2ludCByc2FfdGVzdChGSUxFICpvdXQs IEZJTEUgKmluKTsKLStzdGF0aWMgaW50IHJzYV9wcmludGtleTEoRklMRSAqb3V0LCBSU0EgKnJz YSwKLSsJCUJJR05VTSAqWHAxLCBCSUdOVU0gKlhwMiwgQklHTlVNICpYcCwKLSsJCUJJR05VTSAq ZSk7Ci0rc3RhdGljIGludCByc2FfcHJpbnRrZXkyKEZJTEUgKm91dCwgUlNBICpyc2EsCi0rCQlC SUdOVU0gKlhxMSwgQklHTlVNICpYcTIsIEJJR05VTSAqWHEpOwotKwotK2ludCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKLSsJewotKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOwot KwotKwlpbnQgcmV0ID0gMTsKLSsKLSsJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCQl7Ci0rCQlk b19wcmludF9lcnJvcnMoKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoYXJnYyA9PSAx KQotKwkJaW4gPSBzdGRpbjsKLSsJZWxzZQotKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOwot KwotKwlpZiAoYXJnYyA8IDIpCi0rCQlvdXQgPSBzdGRvdXQ7Ci0rCWVsc2UKLSsJCW91dCA9IGZv cGVuKGFyZ3ZbMl0sICJ3Iik7Ci0rCi0rCWlmICghaW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVy ciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwot KwkJfQotKwotKwlpZiAoIW91dCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0 cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlp ZiAoIXJzYV90ZXN0KG91dCwgaW4pKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBS U0FHVEVTVCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0r CWVsc2UKLSsJCXJldCA9IDA7Ci0rCi0rCWVuZDoKLSsKLSsJaWYgKHJldCkKLSsJCWRvX3ByaW50 X2Vycm9ycygpOwotKwotKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKLSsJCWZjbG9zZShpbik7 Ci0rCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQotKwkJZmNsb3NlKG91dCk7Ci0rCi0rCXJl dHVybiByZXQ7Ci0rCi0rCX0KLSsKLSsjZGVmaW5lIFJTQV9URVNUX01BWExJTkVMRU4JMTAyNDAK LSsKLStpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbikKLSsJewotKwljaGFyICpsaW5l YnVmLCAqb2xpbmVidWYsICpwLCAqcTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwlSU0Eg KnJzYSA9IE5VTEw7Ci0rCUJJR05VTSAqWHAxID0gTlVMTCwgKlhwMiA9IE5VTEwsICpYcCA9IE5V TEw7Ci0rCUJJR05VTSAqWHExID0gTlVMTCwgKlhxMiA9IE5VTEwsICpYcSA9IE5VTEw7Ci0rCUJJ R05VTSAqZSA9IE5VTEw7Ci0rCWludCByZXQgPSAwOwotKwlpbnQgbG51bSA9IDA7Ci0rCi0rCW9s aW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7Ci0rCWxpbmVidWYg PSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKLSsKLSsJaWYgKCFsaW5lYnVm IHx8ICFvbGluZWJ1ZikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCXdoaWxlIChmZ2V0cyhvbGluZWJ1 ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwgaW4pKQotKwkJewotKwkJbG51bSsrOwotKwkJc3RyY3B5 KGxpbmVidWYsIG9saW5lYnVmKTsKLSsJCWtleXdvcmQgPSBsaW5lYnVmOwotKwkJLyogU2tpcCBs ZWFkaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29y ZCkpCi0rCQkJa2V5d29yZCsrOwotKwotKwkJLyogTG9vayBmb3IgPSBzaWduICovCi0rCQlwID0g c3RyY2hyKGxpbmVidWYsICc9Jyk7Ci0rCi0rCQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3aXRoIFsg KGZvciBbZm9vID0gYmFyXSBsaW5lKSBqdXN0IGNvcHkgKi8KLSsJCWlmICghcCB8fCAqa2V5d29y ZD09J1snKQotKwkJCXsKLSsJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQotKwkJCQln b3RvIGVycm9yOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsKLSsJCXEgPSBwIC0gMTsKLSsKLSsJ CS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVk IGNoYXIpKnEpKQotKwkJCSpxLS0gPSAwOwotKwotKwkJKnAgPSAwOwotKwkJdmFsdWUgPSBwICsg MTsKLSsKLSsJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXdoaWxl IChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCi0rCQkJdmFsdWUrKzsKLSsKLSsJCS8q IFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCQlwID0gdmFsdWUgKyBzdHJs ZW4odmFsdWUpIC0gMTsKLSsKLSsJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2ln bmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAwOwotKwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwg InhwMSIpKQotKwkJCXsKLSsJCQlpZiAoWHAxIHx8ICFkb19oZXgyYm4oJlhwMSx2YWx1ZSkpCi0r CQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3Jk LCAieHAyIikpCi0rCQkJewotKwkJCWlmIChYcDIgfHwgIWRvX2hleDJibigmWHAyLHZhbHVlKSkK LSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsICJYcCIpKQotKwkJCXsKLSsJCQlpZiAoWHAgfHwgIWRvX2hleDJibigmWHAsdmFsdWUpKQot KwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29y ZCwgInhxMSIpKQotKwkJCXsKLSsJCQlpZiAoWHExIHx8ICFkb19oZXgyYm4oJlhxMSx2YWx1ZSkp Ci0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCAieHEyIikpCi0rCQkJewotKwkJCWlmIChYcTIgfHwgIWRvX2hleDJibigmWHEyLHZhbHVl KSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJYcSIpKQotKwkJCXsKLSsJCQlpZiAoWHEgfHwgIWRvX2hleDJibigmWHEsdmFsdWUp KQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5 d29yZCwgImUiKSkKLSsJCQl7Ci0rCQkJaWYgKGUgfHwgIWRvX2hleDJibigmZSx2YWx1ZSkpCi0r CQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3Jk LCAicDEiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInAy IikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJwIikpCi0r CQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJxMSIpKQotKwkJCWNv bnRpbnVlOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicTIiKSkKLSsJCQljb250aW51 ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInEiKSkKLSsJCQljb250aW51ZTsKLSsJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIm4iKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwgImQiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UKLSsJCQln b3RvIHBhcnNlX2Vycm9yOwotKwotKwkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCi0rCQlpZiAo ZSAmJiBYcDEgJiYgWHAyICYmIFhwKQotKwkJCXsKLSsJCQlyc2EgPSBGSVBTX3JzYV9uZXcoKTsK LSsJCQlpZiAoIXJzYSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlpZiAoIXJzYV9wcmludGtleTEo b3V0LCByc2EsIFhwMSwgWHAyLCBYcCwgZSkpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJQk5fZnJl ZShYcDEpOwotKwkJCVhwMSA9IE5VTEw7Ci0rCQkJQk5fZnJlZShYcDIpOwotKwkJCVhwMiA9IE5V TEw7Ci0rCQkJQk5fZnJlZShYcCk7Ci0rCQkJWHAgPSBOVUxMOwotKwkJCUJOX2ZyZWUoZSk7Ci0r CQkJZSA9IE5VTEw7Ci0rCQkJfQotKwotKwkJaWYgKHJzYSAmJiBYcTEgJiYgWHEyICYmIFhxKQot KwkJCXsKLSsJCQlpZiAoIXJzYV9wcmludGtleTIob3V0LCByc2EsIFhxMSwgWHEyLCBYcSkpCi0r CQkJCWdvdG8gZXJyb3I7Ci0rCQkJQk5fZnJlZShYcTEpOwotKwkJCVhxMSA9IE5VTEw7Ci0rCQkJ Qk5fZnJlZShYcTIpOwotKwkJCVhxMiA9IE5VTEw7Ci0rCQkJQk5fZnJlZShYcSk7Ci0rCQkJWHEg PSBOVUxMOwotKwkJCUZJUFNfcnNhX2ZyZWUocnNhKTsKLSsJCQlyc2EgPSBOVUxMOwotKwkJCX0K LSsJCX0KLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCi0rCWlmIChvbGluZWJ1ZikKLSsJ CU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVmKQotKwkJT1BFTlNTTF9mcmVl KGxpbmVidWYpOwotKwotKwlpZiAoWHAxKQotKwkJQk5fZnJlZShYcDEpOwotKwlpZiAoWHAyKQot KwkJQk5fZnJlZShYcDIpOwotKwlpZiAoWHApCi0rCQlCTl9mcmVlKFhwKTsKLSsJaWYgKFhxMSkK LSsJCUJOX2ZyZWUoWHExKTsKLSsJaWYgKFhxMSkKLSsJCUJOX2ZyZWUoWHExKTsKLSsJaWYgKFhx MikKLSsJCUJOX2ZyZWUoWHEyKTsKLSsJaWYgKFhxKQotKwkJQk5fZnJlZShYcSk7Ci0rCWlmIChl KQotKwkJQk5fZnJlZShlKTsKLSsJaWYgKHJzYSkKLSsJCUZJUFNfcnNhX2ZyZWUocnNhKTsKLSsK LSsJcmV0dXJuIHJldDsKLSsKLSsJcGFyc2VfZXJyb3I6Ci0rCi0rCWZwcmludGYoc3RkZXJyLCAi RkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKLSsKLSsJZ290 byBlcnJvcjsKLSsKLSsJfQotKwotK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MShGSUxFICpvdXQs IFJTQSAqcnNhLAotKwkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLCBCSUdOVU0gKlhwLAotKwkJ QklHTlVNICplKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwlCSUdOVU0gKnAxID0gTlVMTCwgKnAy ID0gTlVMTDsKLSsJcDEgPSBCTl9uZXcoKTsKLSsJcDIgPSBCTl9uZXcoKTsKLSsJaWYgKCFwMSB8 fCAhcDIpCi0rCQlnb3RvIGVycm9yOwotKwotKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9leChyc2Es IHAxLCBwMiwgTlVMTCwgTlVMTCwgWHAxLCBYcDIsIFhwLAotKwkJCQkJCU5VTEwsIE5VTEwsIE5V TEwsIGUsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQs ICJwMSIsIHAxKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwMiIsIHAyKTsKLSsJZG9fYm5f cHJpbnRfbmFtZShvdXQsICJwIiwgcnNhLT5wKTsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6 Ci0rCWlmIChwMSkKLSsJCUJOX2ZyZWUocDEpOwotKwlpZiAocDIpCi0rCQlCTl9mcmVlKHAyKTsK LSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MihGSUxF ICpvdXQsIFJTQSAqcnNhLAotKwkJQklHTlVNICpYcTEsIEJJR05VTSAqWHEyLCBCSUdOVU0gKlhx KQotKwl7Ci0rCWludCByZXQgPSAwOwotKwlCSUdOVU0gKnExID0gTlVMTCwgKnEyID0gTlVMTDsK LSsJcTEgPSBCTl9uZXcoKTsKLSsJcTIgPSBCTl9uZXcoKTsKLSsJaWYgKCFxMSB8fCAhcTIpCi0r CQlnb3RvIGVycm9yOwotKwotKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9leChyc2EsIE5VTEwsIE5V TEwsIHExLCBxMiwgTlVMTCwgTlVMTCwgTlVMTCwKLSsJCQkJCQlYcTEsIFhxMiwgWHEsIE5VTEws IE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJxMSIs IHExKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJxMiIsIHEyKTsKLSsJZG9fYm5fcHJpbnRf bmFtZShvdXQsICJxIiwgcnNhLT5xKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJuIiwgcnNh LT5uKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJkIiwgcnNhLT5kKTsKLSsKLSsJcmV0ID0g MTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChxMSkKLSsJCUJOX2ZyZWUocTEpOwotKwlpZiAocTIpCi0r CQlCTl9mcmVlKHEyKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotKyNlbmRpZgotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhc3Rlc3QuYy5m aXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMK LS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5j LmZpcHMJMjAxMi0wMi0wNyAxMTowNzowMi41NDEzOTM3MDcgKzAxMDAKLSsrKyBvcGVuc3NsLTEu MC4xLWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jCTIwMTItMDItMDcgMTE6 MDc6MDIuNTQxMzkzNzA3ICswMTAwCi1AQCAtMCwwICsxLDM3MCBAQAotKy8qIGZpcHNfcnNhc3Rl c3QuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNz bC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAq IGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0r ICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4g VGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5v dCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5z aW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3Bl blNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAg IHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJp YnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcK LSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJ UycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBB UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IK LSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB TUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICog U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B R0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlw dG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRz b2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0K LSsgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRl IDxzdGRpby5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC94NTA5djMuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1 cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUg ImZpcHNfdXRsLmgiCi0rCi0rc3RhdGljIGludCByc2Ffc3Rlc3QoRklMRSAqb3V0LCBGSUxFICpp biwgaW50IFNhbHRsZW4pOwotK3N0YXRpYyBpbnQgcnNhX3ByaW50c2lnKEZJTEUgKm91dCwgUlNB ICpyc2EsIGNvbnN0IEVWUF9NRCAqZGdzdCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBN c2dsZW4sIGludCBTYWx0bGVuKTsKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp Ci0rCXsKLSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsKLSsJaW50IHJldCA9IDEs IFNhbHRsZW4gPSAtMTsKLSsKLSsJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCQl7Ci0rCQlkb19w cmludF9lcnJvcnMoKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoKGFyZ2MgPiAyKSAm JiAhc3RyY21wKCItc2FsdGxlbiIsIGFyZ3ZbMV0pKQotKwkJewotKwkJU2FsdGxlbiA9IGF0b2ko YXJndlsyXSk7Ci0rCQlpZiAoU2FsdGxlbiA8IDApCi0rCQkJewotKwkJCWZwcmludGYoc3RkZXJy LCAiRkFUQUw6IEludmFsaWQgc2FsdCBsZW5ndGhcbiIpOwotKwkJCWdvdG8gZW5kOwotKwkJCX0K LSsJCWFyZ2MgLT0gMjsKLSsJCWFyZ3YgKz0gMjsKLSsJCX0KLSsJZWxzZSBpZiAoKGFyZ2MgPiAx KSAmJiAhc3RyY21wKCIteDkzMSIsIGFyZ3ZbMV0pKQotKwkJewotKwkJU2FsdGxlbiA9IC0yOwot KwkJYXJnYy0tOwotKwkJYXJndisrOwotKwkJfQotKwotKwlpZiAoYXJnYyA9PSAxKQotKwkJaW4g PSBzdGRpbjsKLSsJZWxzZQotKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOwotKwotKwlpZiAo YXJnYyA8IDIpCi0rCQlvdXQgPSBzdGRvdXQ7Ci0rCWVsc2UKLSsJCW91dCA9IGZvcGVuKGFyZ3Zb Ml0sICJ3Iik7Ci0rCi0rCWlmICghaW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFM IGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwot KwlpZiAoIW91dCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRp YWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIXJzYV9z dGVzdChvdXQsIGluLCBTYWx0bGVuKSkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwg UlNBU1RFU1QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQot KwllbHNlCi0rCQlyZXQgPSAwOwotKwotKwllbmQ6Ci0rCi0rCWlmIChyZXQpCi0rCQlkb19wcmlu dF9lcnJvcnMoKTsKLSsKLSsJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCi0rCQlmY2xvc2UoaW4p OwotKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKLSsJCWZjbG9zZShvdXQpOwotKwotKwly ZXR1cm4gcmV0OwotKwotKwl9Ci0rCi0rI2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQw Ci0rCi0raW50IHJzYV9zdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBpbnQgU2FsdGxlbikKLSsJ ewotKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKLSsJY2hhciAqa2V5d29yZCwg KnZhbHVlOwotKwlSU0EgKnJzYSA9IE5VTEw7Ci0rCWNvbnN0IEVWUF9NRCAqZGdzdCA9IE5VTEw7 Ci0rCXVuc2lnbmVkIGNoYXIgKk1zZyA9IE5VTEw7Ci0rCWxvbmcgTXNnbGVuID0gLTE7Ci0rCWlu dCBrZXlsZW4gPSAtMSwgY3VycmVudF9rZXlsZW4gPSAtMTsKLSsJaW50IHJldCA9IDA7Ci0rCWlu dCBsbnVtID0gMDsKLSsKLSsJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhM SU5FTEVOKTsKLSsJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4p OwotKwotKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQotKwkJZ290byBlcnJvcjsKLSsKLSsJ d2hpbGUgKGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBpbikpCi0rCQl7Ci0r CQlsbnVtKys7Ci0rCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwkJa2V5d29yZCA9IGxp bmVidWY7Ci0rCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1 bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKLSsJCQlrZXl3b3JkKys7Ci0rCi0rCQkvKiBMb29rIGZv ciA9IHNpZ24gKi8KLSsJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJCS8qIElmIG5v ID0ganVzdCBjb3B5ICovCi0rCQlpZiAoIXApCi0rCQkJewotKwkJCWlmIChmcHV0cyhvbGluZWJ1 Ziwgb3V0KSA8IDApCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwot KwkJcSA9IHAgLSAxOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCQl3aGls ZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCi0rCQkJKnEtLSA9IDA7Ci0rCi0rCQkqcCA9 IDA7Ci0rCQl2YWx1ZSA9IHAgKyAxOwotKwotKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJv bSB2YWx1ZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJ CQl2YWx1ZSsrOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8K LSsJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwotKwkJd2hpbGUgKCpwID09ICdc bicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCi0rCQkJKnAtLSA9IDA7Ci0rCi0rCQkv KiBMb29rIGZvciBbbW9kID0gWFhYXSBmb3Iga2V5IGxlbmd0aCAqLwotKwotKwkJaWYgKCFzdHJj bXAoa2V5d29yZCwgIlttb2QiKSkKLSsJCQl7Ci0rCQkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVl KSAtIDE7Ci0rCQkJaWYgKCpwICE9ICddJykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQkq cCA9IDA7Ci0rCQkJa2V5bGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQkJaWYgKGtleWxlbiA8IDApCi0r CQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3Jk LCAiU0hBQWxnIikpCi0rCQkJewotKwkJCWlmICghc3RyY21wKHZhbHVlLCAiU0hBMSIpKQotKwkJ CQlkZ3N0ID0gRVZQX3NoYTEoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMjI0 IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMjI0KCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1 ZSwgIlNIQTI1NiIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTI1NigpOwotKwkJCWVsc2UgaWYgKCFz dHJjbXAodmFsdWUsICJTSEEzODQiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGEzODQoKTsKLSsJCQll bHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBNTEyIikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhNTEy KCk7Ci0rCQkJZWxzZQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLAotKwkJCQkJIkZBVEFM OiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gXCIlc1wiXG4iLAotKwkJCQkJCQkJdmFsdWUpOwotKwkJ CQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChr ZXl3b3JkLCAiTXNnIikpCi0rCQkJewotKwkJCWlmIChNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJy b3I7Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUpID0gJzAnOwot KwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1zZ2xlbik7Ci0rCQkJaWYgKCFNc2cpCi0rCQkJ CWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwotKwkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0r Ci0rCQkvKiBJZiBrZXkgbGVuZ3RoIGhhcyBjaGFuZ2VkLCBnZW5lcmF0ZSBhbmQgb3V0cHV0IHB1 YmxpYwotKwkJICoga2V5IGNvbXBvbmVudHMgb2YgbmV3IFJTQSBwcml2YXRlIGtleS4KLSsJCSAq LwotKwotKwkJaWYgKGtleWxlbiAhPSBjdXJyZW50X2tleWxlbikKLSsJCQl7Ci0rCQkJQklHTlVN ICpibl9lOwotKwkJCWlmIChyc2EpCi0rCQkJCUZJUFNfcnNhX2ZyZWUocnNhKTsKLSsJCQlyc2Eg PSBGSVBTX3JzYV9uZXcoKTsKLSsJCQlpZiAoIXJzYSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQli bl9lID0gQk5fbmV3KCk7Ci0rCQkJaWYgKCFibl9lIHx8ICFCTl9zZXRfd29yZChibl9lLCAweDEw MDEpKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWlmICghUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4 KHJzYSwga2V5bGVuLCBibl9lLCBOVUxMKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlCTl9mcmVl KGJuX2UpOwotKwkJCWZwdXRzKCJuID0gIiwgb3V0KTsKLSsJCQlkb19ibl9wcmludChvdXQsIHJz YS0+bik7Ci0rCQkJZnB1dHMoIlxuZSA9ICIsIG91dCk7Ci0rCQkJZG9fYm5fcHJpbnQob3V0LCBy c2EtPmUpOwotKwkJCWZwdXRzKCJcbiIsIG91dCk7Ci0rCQkJY3VycmVudF9rZXlsZW4gPSBrZXls ZW47Ci0rCQkJfQotKwotKwkJaWYgKE1zZyAmJiBkZ3N0KQotKwkJCXsKLSsJCQlpZiAoIXJzYV9w cmludHNpZyhvdXQsIHJzYSwgZGdzdCwgTXNnLCBNc2dsZW4sCi0rCQkJCQkJCQlTYWx0bGVuKSkK LSsJCQkJZ290byBlcnJvcjsKLSsJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJCQlNc2cgPSBOVUxM OwotKwkJCX0KLSsKLSsJCX0KLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCi0rCWlmIChv bGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVmKQotKwkJ T1BFTlNTTF9mcmVlKGxpbmVidWYpOwotKwlpZiAocnNhKQotKwkJRklQU19yc2FfZnJlZShyc2Ep OwotKwotKwlyZXR1cm4gcmV0OwotKwotKwlwYXJzZV9lcnJvcjoKLSsKLSsJZnByaW50ZihzdGRl cnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOwotKwot Kwlnb3RvIGVycm9yOwotKwotKwl9Ci0rCi0rc3RhdGljIGludCByc2FfcHJpbnRzaWcoRklMRSAq b3V0LCBSU0EgKnJzYSwgY29uc3QgRVZQX01EICpkZ3N0LAotKwkJdW5zaWduZWQgY2hhciAqTXNn LCBsb25nIE1zZ2xlbiwgaW50IFNhbHRsZW4pCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCXVuc2ln bmVkIGNoYXIgKnNpZ2J1ZiA9IE5VTEw7Ci0rCWludCBpLCBzaWdsZW47Ci0rCS8qIEVWUF9QS0VZ IHN0cnVjdHVyZSAqLwotKwlFVlBfUEtFWSBwazsKLSsJRVZQX01EX0NUWCBjdHg7Ci0rCXBrLnR5 cGUgPSBFVlBfUEtFWV9SU0E7Ci0rCXBrLnBrZXkucnNhID0gcnNhOwotKwotKwlzaWdsZW4gPSBS U0Ffc2l6ZShyc2EpOwotKwlzaWdidWYgPSBPUEVOU1NMX21hbGxvYyhzaWdsZW4pOwotKwlpZiAo IXNpZ2J1ZikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKLSsK LSsJaWYgKFNhbHRsZW4gPj0gMCkKLSsJCXsKLSsJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0 eCwKLSsJCQlFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUyB8IChTYWx0bGVuIDw8IDE2KSk7Ci0rCQl9 Ci0rCWVsc2UgaWYgKFNhbHRsZW4gPT0gLTIpCi0rCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZj dHgsIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSk7Ci0rCWlmICghRVZQX1NpZ25Jbml0X2V4KCZj dHgsIGRnc3QsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBfU2lnblVwZGF0ZSgm Y3R4LCBNc2csIE1zZ2xlbikpCi0rCQlnb3RvIGVycm9yOwotKwlpZiAoIUVWUF9TaWduRmluYWwo JmN0eCwgc2lnYnVmLCAodW5zaWduZWQgaW50ICopJnNpZ2xlbiwgJnBrKSkKLSsJCWdvdG8gZXJy b3I7Ci0rCi0rCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKLSsKLSsJZnB1dHMoIlMgPSAiLCBv dXQpOwotKwotKwlmb3IgKGkgPSAwOyBpIDwgc2lnbGVuOyBpKyspCi0rCQlmcHJpbnRmKG91dCwg IiUwMlgiLCBzaWdidWZbaV0pOwotKwotKwlmcHV0cygiXG4iLCBvdXQpOwotKwotKwlyZXQgPSAx OwotKwotKwllcnJvcjoKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKyNlbmRpZgotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhdnRlc3QuYy5maXBz IG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMKLS0t LSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jLmZp cHMJMjAxMi0wMi0wNyAxMTowNzowMi41NDIzOTM3MTYgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4x LWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jCTIwMTItMDItMDcgMTE6MDc6 MDIuNTQyMzkzNzE2ICswMTAwCi1AQCAtMCwwICsxLDM3NyBAQAotKy8qIGZpcHNfcnNhdnRlc3Qu YyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5v cmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFy ZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoK LSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig dXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh Y2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhl IG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBi ZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u IEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5n QE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNT TCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBl cm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0 aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsg KiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycn IEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsg KiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RS SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu Ci0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9n cmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0 LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsg KiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxz dGRpby5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wveDUwOXYzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9yc2EuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGlu dCBhcmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBv cnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgImZp cHNfdXRsLmgiCi0rCi0raW50IHJzYV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBzYWx0 bGVuKTsKLStzdGF0aWMgaW50IHJzYV9wcmludHZlcihGSUxFICpvdXQsCi0rCQlCSUdOVU0gKm4s IEJJR05VTSAqZSwKLSsJCWNvbnN0IEVWUF9NRCAqZGdzdCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1z ZywgbG9uZyBNc2dsZW4sCi0rCQl1bnNpZ25lZCBjaGFyICpTLCBsb25nIFNsZW4sIGludCBTYWx0 bGVuKTsKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rCXsKLSsJRklMRSAq aW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsKLSsJaW50IHJldCA9IDE7Ci0rCWludCBTYWx0bGVu ID0gLTE7Ci0rCi0rCWlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwkJewotKwkJZG9fcHJpbnRfZXJy b3JzKCk7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKChhcmdjID4gMikgJiYgIXN0cmNt cCgiLXNhbHRsZW4iLCBhcmd2WzFdKSkKLSsJCXsKLSsJCVNhbHRsZW4gPSBhdG9pKGFyZ3ZbMl0p OwotKwkJaWYgKFNhbHRsZW4gPCAwKQotKwkJCXsKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFM OiBJbnZhbGlkIHNhbHQgbGVuZ3RoXG4iKTsKLSsJCQlnb3RvIGVuZDsKLSsJCQl9Ci0rCQlhcmdj IC09IDI7Ci0rCQlhcmd2ICs9IDI7Ci0rCQl9Ci0rCWVsc2UgaWYgKChhcmdjID4gMSkgJiYgIXN0 cmNtcCgiLXg5MzEiLCBhcmd2WzFdKSkKLSsJCXsKLSsJCVNhbHRsZW4gPSAtMjsKLSsJCWFyZ2Mt LTsKLSsJCWFyZ3YrKzsKLSsJCX0KLSsKLSsJaWYgKGFyZ2MgPT0gMSkKLSsJCWluID0gc3RkaW47 Ci0rCWVsc2UKLSsJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKLSsKLSsJaWYgKGFyZ2MgPCAy KQotKwkJb3V0ID0gc3Rkb3V0OwotKwllbHNlCi0rCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIp OwotKwotKwlpZiAoIWluKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBp bml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFv dXQpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlv biBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFyc2FfdGVzdChvdXQs IGluLCBTYWx0bGVuKSkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBVlRFU1Qg ZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwllbHNlCi0r CQlyZXQgPSAwOwotKwotKwllbmQ6Ci0rCi0rCWlmIChyZXQpCi0rCQlkb19wcmludF9lcnJvcnMo KTsKLSsKLSsJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCi0rCQlmY2xvc2UoaW4pOwotKwlpZiAo b3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKLSsJCWZjbG9zZShvdXQpOwotKwotKwlyZXR1cm4gcmV0 OwotKwotKwl9Ci0rCi0rI2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCi0rCi0raW50 IHJzYV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBTYWx0bGVuKQotKwl7Ci0rCWNoYXIg KmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOwotKwljaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0r CWNvbnN0IEVWUF9NRCAqZGdzdCA9IE5VTEw7Ci0rCUJJR05VTSAqbiA9IE5VTEwsICplID0gTlVM TDsKLSsJdW5zaWduZWQgY2hhciAqTXNnID0gTlVMTCwgKlMgPSBOVUxMOwotKwlsb25nIE1zZ2xl biwgU2xlbjsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBsbnVtID0gMDsKLSsKLSsJb2xpbmVidWYg PSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKLSsJbGluZWJ1ZiA9IE9QRU5T U0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOwotKwotKwlpZiAoIWxpbmVidWYgfHwgIW9s aW5lYnVmKQotKwkJZ290byBlcnJvcjsKLSsKLSsJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBSU0Ff VEVTVF9NQVhMSU5FTEVOLCBpbikpCi0rCQl7Ci0rCQlsbnVtKys7Ci0rCQlzdHJjcHkobGluZWJ1 Ziwgb2xpbmVidWYpOwotKwkJa2V5d29yZCA9IGxpbmVidWY7Ci0rCQkvKiBTa2lwIGxlYWRpbmcg c3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKLSsJ CQlrZXl3b3JkKys7Ci0rCi0rCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KLSsJCXAgPSBzdHJjaHIo bGluZWJ1ZiwgJz0nKTsKLSsKLSsJCS8qIElmIG5vID0gb3Igc3RhcnRzIHdpdGggWyAoZm9yIFtm b28gPSBiYXJdIGxpbmUpIGp1c3QgY29weSAqLwotKwkJaWYgKCFwIHx8ICprZXl3b3JkPT0nWycp Ci0rCQkJewotKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCi0rCQkJCWdvdG8gZXJy b3I7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwotKwkJcSA9IHAgLSAxOwotKwotKwkJLyogUmVt b3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikq cSkpCi0rCQkJKnEtLSA9IDA7Ci0rCi0rCQkqcCA9IDA7Ci0rCQl2YWx1ZSA9IHAgKyAxOwotKwot KwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJd2hpbGUgKGlzc3Bh Y2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCQl2YWx1ZSsrOwotKwotKwkJLyogUmVtb3Zl IHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1 ZSkgLSAxOwotKwotKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hh cikqcCkpCi0rCQkJKnAtLSA9IDA7Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAibiIpKQot KwkJCXsKLSsJCQlpZiAoIWRvX2hleDJibigmbix2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJy b3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiZSIpKQotKwkJCXsKLSsJ CQlpZiAoIWRvX2hleDJibigmZSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJ fQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiU0hBQWxnIikpCi0rCQkJewotKwkJCWlm ICghc3RyY21wKHZhbHVlLCAiU0hBMSIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTEoKTsKLSsJCQll bHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMjI0IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMjI0 KCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTI1NiIpKQotKwkJCQlkZ3N0ID0g RVZQX3NoYTI1NigpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEzODQiKSkKLSsJ CQkJZGdzdCA9IEVWUF9zaGEzODQoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hB NTEyIikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhNTEyKCk7Ci0rCQkJZWxzZQotKwkJCQl7Ci0rCQkJ CWZwcmludGYoc3RkZXJyLAotKwkJCQkJIkZBVEFMOiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gXCIl c1wiXG4iLAotKwkJCQkJCQkJdmFsdWUpOwotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCQl9 Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNnIikpCi0rCQkJewotKwkJ CWlmIChNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkg JiAxKQotKwkJCQkqKC0tdmFsdWUpID0gJzAnOwotKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwg Jk1zZ2xlbik7Ci0rCQkJaWYgKCFNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQot KwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUyIpKQotKwkJCXsKLSsJCQlpZiAoUykKLSsJ CQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCi0rCQkJCSoo LS12YWx1ZSkgPSAnMCc7Ci0rCQkJUyA9IGhleDJiaW5fbSh2YWx1ZSwgJlNsZW4pOwotKwkJCWlm ICghUykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsICJSZXN1bHQiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UKLSsJCQlnb3RvIHBh cnNlX2Vycm9yOwotKwotKwkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCi0rCQlpZiAobiAmJiBl ICYmIE1zZyAmJiBTICYmIGRnc3QpCi0rCQkJewotKwkJCWlmICghcnNhX3ByaW50dmVyKG91dCwg biwgZSwgZGdzdCwKLSsJCQkJCU1zZywgTXNnbGVuLCBTLCBTbGVuLCBTYWx0bGVuKSkKLSsJCQkJ Z290byBlcnJvcjsKLSsJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJCQlNc2cgPSBOVUxMOwotKwkJ CU9QRU5TU0xfZnJlZShTKTsKLSsJCQlTID0gTlVMTDsKLSsJCQl9Ci0rCi0rCQl9Ci0rCi0rCi0r CXJldCA9IDE7Ci0rCi0rCi0rCWVycm9yOgotKwotKwlpZiAob2xpbmVidWYpCi0rCQlPUEVOU1NM X2ZyZWUob2xpbmVidWYpOwotKwlpZiAobGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShsaW5lYnVm KTsKLSsJaWYgKG4pCi0rCQlCTl9mcmVlKG4pOwotKwlpZiAoZSkKLSsJCUJOX2ZyZWUoZSk7Ci0r Ci0rCXJldHVybiByZXQ7Ci0rCi0rCXBhcnNlX2Vycm9yOgotKwotKwlmcHJpbnRmKHN0ZGVyciwg IkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7Ci0rCi0rCWdv dG8gZXJyb3I7Ci0rCi0rCX0KLSsKLStzdGF0aWMgaW50IHJzYV9wcmludHZlcihGSUxFICpvdXQs Ci0rCQlCSUdOVU0gKm4sIEJJR05VTSAqZSwKLSsJCWNvbnN0IEVWUF9NRCAqZGdzdCwKLSsJCXVu c2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sCi0rCQl1bnNpZ25lZCBjaGFyICpTLCBsb25n IFNsZW4sIGludCBTYWx0bGVuKQotKwl7Ci0rCWludCByZXQgPSAwLCByOwotKwkvKiBTZXR1cCBS U0EgYW5kIEVWUF9QS0VZIHN0cnVjdHVyZXMgKi8KLSsJUlNBICpyc2FfcHVia2V5ID0gTlVMTDsK LSsJRVZQX1BLRVkgcGs7Ci0rCUVWUF9NRF9DVFggY3R4OwotKwl1bnNpZ25lZCBjaGFyICpidWYg PSBOVUxMOwotKwlyc2FfcHVia2V5ID0gRklQU19yc2FfbmV3KCk7Ci0rCWlmICghcnNhX3B1Ymtl eSkKLSsJCWdvdG8gZXJyb3I7Ci0rCXJzYV9wdWJrZXktPm4gPSBCTl9kdXAobik7Ci0rCXJzYV9w dWJrZXktPmUgPSBCTl9kdXAoZSk7Ci0rCWlmICghcnNhX3B1YmtleS0+biB8fCAhcnNhX3B1Ymtl eS0+ZSkKLSsJCWdvdG8gZXJyb3I7Ci0rCXBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7Ci0rCXBrLnBr ZXkucnNhID0gcnNhX3B1YmtleTsKLSsKLSsJRVZQX01EX0NUWF9pbml0KCZjdHgpOwotKwotKwlp ZiAoU2FsdGxlbiA+PSAwKQotKwkJewotKwkJTV9FVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LAot KwkJCUVWUF9NRF9DVFhfRkxBR19QQURfUFNTIHwgKFNhbHRsZW4gPDwgMTYpKTsKLSsJCX0KLSsJ ZWxzZSBpZiAoU2FsdGxlbiA9PSAtMikKLSsJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwg RVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKTsKLSsJaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmY3R4 LCBkZ3N0LCBOVUxMKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCWlmICghRVZQX1ZlcmlmeVVwZGF0ZSgm Y3R4LCBNc2csIE1zZ2xlbikpCi0rCQlnb3RvIGVycm9yOwotKwotKwlyID0gRVZQX1ZlcmlmeUZp bmFsKCZjdHgsIFMsIFNsZW4sICZwayk7Ci0rCi0rCi0rCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4 KTsKLSsKLSsJaWYgKHIgPCAwKQotKwkJZ290byBlcnJvcjsKLSsJRVJSX2NsZWFyX2Vycm9yKCk7 Ci0rCi0rCWlmIChyID09IDApCi0rCQlmcHV0cygiUmVzdWx0ID0gRlxuIiwgb3V0KTsKLSsJZWxz ZQotKwkJZnB1dHMoIlJlc3VsdCA9IFBcbiIsIG91dCk7Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVy cm9yOgotKwlpZiAocnNhX3B1YmtleSkKLSsJCUZJUFNfcnNhX2ZyZWUocnNhX3B1YmtleSk7Ci0r CWlmIChidWYpCi0rCQlPUEVOU1NMX2ZyZWUoYnVmKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQot KyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfc2hhdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfc2hhdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfc2hhdGVzdC5jLmZpcHMJMjAxMi0wMi0wNyAxMTowNzowMi41NDIzOTM3MTYgKzAxMDAKLSsr KyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMJMjAx Mi0wMi0wNyAxMTowNzowMi41NDIzOTM3MTYgKzAxMDAKLUBAIC0wLDAgKzEsMzg4IEBACi0rLyog Zmlwc19zaGF0ZXN0LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0 ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0IDIwMDUuCi0rICov Ci0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJv amVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAq Ci0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJp YnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsg KgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVj dCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAq ICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5v ciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0 ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2 LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUg Zm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8p IgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9K RUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAq IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQ Uk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICoKLSsgKiBUaGlzIHByb2R1Y3QgaW5j bHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKLSsgKiAo ZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0 ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICoKLSsgKi8KLSsK LSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8c3Ry aW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZw Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwot KwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5v IEZJUFMgU0hBWFhYIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNl Ci0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rc3RhdGljIGludCBkZ3N0X3Rlc3QoRklM RSAqb3V0LCBGSUxFICppbik7Ci0rc3RhdGljIGludCBwcmludF9kZ3N0KGNvbnN0IEVWUF9NRCAq bWQsIEZJTEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1zZ2xlbik7Ci0rc3Rh dGljIGludCBwcmludF9tb250ZShjb25zdCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCi0rCQl1bnNp Z25lZCBjaGFyICpTZWVkLCBpbnQgU2VlZExlbik7Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQotKwl7Ci0rCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7Ci0rCi0rCWlu dCByZXQgPSAxOwotKwotKwlpZighRklQU19tb2RlX3NldCgxKSkKLSsJCXsKLSsJCWRvX3ByaW50 X2Vycm9ycygpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmIChhcmdjID09IDEpCi0rCQlp biA9IHN0ZGluOwotKwllbHNlCi0rCQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7Ci0rCi0rCWlm IChhcmdjIDwgMikKLSsJCW91dCA9IHN0ZG91dDsKLSsJZWxzZQotKwkJb3V0ID0gZm9wZW4oYXJn dlsyXSwgInciKTsKLSsKLSsJaWYgKCFpbikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFU QUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0r Ci0rCWlmICghb3V0KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQgaW5p dGlhbGl6YXRpb24gZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghZGdz dF90ZXN0KG91dCwgaW4pKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBkaWdlc3Qg ZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwllbHNlCi0r CQlyZXQgPSAwOwotKwotKwllbmQ6Ci0rCi0rCWlmIChyZXQpCi0rCQlkb19wcmludF9lcnJvcnMo KTsKLSsKLSsJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCi0rCQlmY2xvc2UoaW4pOwotKwlpZiAo b3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKLSsJCWZjbG9zZShvdXQpOwotKwotKwlyZXR1cm4gcmV0 OwotKwotKwl9Ci0rCi0rI2RlZmluZSBTSEFfVEVTVF9NQVhfQklUUwkxMDI0MDAKLSsjZGVmaW5l IFNIQV9URVNUX01BWExJTkVMRU4JKCgoU0hBX1RFU1RfTUFYX0JJVFMgPj4gMykgKiAyKSArIDEw MCkKLSsKLStpbnQgZGdzdF90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pCi0rCXsKLSsJY29uc3Qg RVZQX01EICptZCA9IE5VTEw7Ci0rCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOwot KwljaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rCXVuc2lnbmVkIGNoYXIgKk1zZyA9IE5VTEwsICpT ZWVkID0gTlVMTDsKLSsJbG9uZyBNc2dMZW4gPSAtMSwgTGVuID0gLTEsIFNlZWRMZW4gPSAtMTsK LSsJaW50IHJldCA9IDA7Ci0rCWludCBsbnVtID0gMDsKLSsKLSsJb2xpbmVidWYgPSBPUEVOU1NM X21hbGxvYyhTSEFfVEVTVF9NQVhMSU5FTEVOKTsKLSsJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9j KFNIQV9URVNUX01BWExJTkVMRU4pOwotKwotKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQot KwkJZ290byBlcnJvcjsKLSsKLSsKLSsJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBTSEFfVEVTVF9N QVhMSU5FTEVOLCBpbikpCi0rCQl7Ci0rCQlsbnVtKys7Ci0rCQlzdHJjcHkobGluZWJ1Ziwgb2xp bmVidWYpOwotKwkJa2V5d29yZCA9IGxpbmVidWY7Ci0rCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2Ug Ki8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKLSsJCQlrZXl3 b3JkKys7Ci0rCi0rCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KLSsJCXAgPSBzdHJjaHIobGluZWJ1 ZiwgJz0nKTsKLSsKLSsJCS8qIElmIG5vID0gb3Igc3RhcnRzIHdpdGggWyAoZm9yIFtMPTIwXSBs aW5lKSBqdXN0IGNvcHkgKi8KLSsJCWlmICghcCkKLSsJCQl7Ci0rCQkJZnB1dHMob2xpbmVidWYs IG91dCk7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwotKwkJcSA9IHAgLSAxOwotKwotKwkJLyog UmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hh cikqcSkpCi0rCQkJKnEtLSA9IDA7Ci0rCi0rCQkqcCA9IDA7Ci0rCQl2YWx1ZSA9IHAgKyAxOwot KwotKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJd2hpbGUgKGlz c3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCQl2YWx1ZSsrOwotKwotKwkJLyogUmVt b3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXAgPSB2YWx1ZSArIHN0cmxlbih2 YWx1ZSkgLSAxOwotKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hh cikqcCkpCi0rCQkJKnAtLSA9IDA7Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCJbTCIpICYm ICpwPT0nXScpCi0rCQkJewotKwkJCXN3aXRjaCAoYXRvaSh2YWx1ZSkpCi0rCQkJCXsKLSsJCQkJ Y2FzZSAyMDogbWQ9RVZQX3NoYTEoKTsgICBicmVhazsKLSsJCQkJY2FzZSAyODogbWQ9RVZQX3No YTIyNCgpOyBicmVhazsKLSsJCQkJY2FzZSAzMjogbWQ9RVZQX3NoYTI1NigpOyBicmVhazsKLSsJ CQkJY2FzZSA0ODogbWQ9RVZQX3NoYTM4NCgpOyBicmVhazsKLSsJCQkJY2FzZSA2NDogbWQ9RVZQ X3NoYTUxMigpOyBicmVhazsKLSsJCQkJZGVmYXVsdDogZ290byBwYXJzZV9lcnJvcjsKLSsJCQkJ fQotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIkxlbiIpKQotKwkJCXsKLSsJ CQlpZiAoTGVuICE9IC0xKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCUxlbiA9IGF0b2ko dmFsdWUpOwotKwkJCWlmIChMZW4gPCAwKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCS8q IE9ubHkgaGFuZGxlIG11bHRpcGxlcyBvZiA4IGJpdHMgKi8KLSsJCQlpZiAoTGVuICYgMHg3KQot KwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCWlmIChMZW4gPiBTSEFfVEVTVF9NQVhfQklUUykK LSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlNc2dMZW4gPSBMZW4gPj4gMzsKLSsJCQl9Ci0r Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJNc2ciKSkKLSsJCQl7Ci0rCQkJbG9uZyB0 bXBsZW47Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUpID0gJzAn OwotKwkJCWlmIChNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJTXNnID0gaGV4MmJp bl9tKHZhbHVlLCAmdG1wbGVuKTsKLSsJCQlpZiAoIU1zZykKLSsJCQkJZ290byBwYXJzZV9lcnJv cjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJTZWVkIikpCi0rCQkJewot KwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKLSsJCQkJKigtLXZhbHVlKSA9ICcwJzsKLSsJCQlp ZiAoU2VlZCkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlTZWVkID0gaGV4MmJpbl9tKHZh bHVlLCAmU2VlZExlbik7Ci0rCQkJaWYgKCFTZWVkKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwot KwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1EIikpCi0rCQkJY29udGludWU7 Ci0rCQllbHNlCi0rCQkJZ290byBwYXJzZV9lcnJvcjsKLSsKLSsJCWZwdXRzKG9saW5lYnVmLCBv dXQpOwotKwotKwkJaWYgKG1kICYmIE1zZyAmJiAoTXNnTGVuID49IDApKQotKwkJCXsKLSsJCQlp ZiAoIXByaW50X2Rnc3QobWQsIG91dCwgTXNnLCBNc2dMZW4pKQotKwkJCQlnb3RvIGVycm9yOwot KwkJCU9QRU5TU0xfZnJlZShNc2cpOwotKwkJCU1zZyA9IE5VTEw7Ci0rCQkJTXNnTGVuID0gLTE7 Ci0rCQkJTGVuID0gLTE7Ci0rCQkJfQotKwkJZWxzZSBpZiAobWQgJiYgU2VlZCAmJiAoU2VlZExl biA+IDApKQotKwkJCXsKLSsJCQlpZiAoIXByaW50X21vbnRlKG1kLCBvdXQsIFNlZWQsIFNlZWRM ZW4pKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCU9QRU5TU0xfZnJlZShTZWVkKTsKLSsJCQlTZWVk ID0gTlVMTDsKLSsJCQlTZWVkTGVuID0gLTE7Ci0rCQkJfQotKwkKLSsKLSsJCX0KLSsKLSsKLSsJ cmV0ID0gMTsKLSsKLSsKLSsJZXJyb3I6Ci0rCi0rCWlmIChvbGluZWJ1ZikKLSsJCU9QRU5TU0xf ZnJlZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKGxpbmVidWYp OwotKwlpZiAoTXNnKQotKwkJT1BFTlNTTF9mcmVlKE1zZyk7Ci0rCWlmIChTZWVkKQotKwkJT1BF TlNTTF9mcmVlKFNlZWQpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwlwYXJzZV9lcnJvcjoKLSsK LSsJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRc biIsIGxudW0pOwotKwotKwlnb3RvIGVycm9yOwotKwotKwl9Ci0rCi0rc3RhdGljIGludCBwcmlu dF9kZ3N0KGNvbnN0IEVWUF9NRCAqZW1kLCBGSUxFICpvdXQsCi0rCQl1bnNpZ25lZCBjaGFyICpN c2csIGludCBNc2dsZW4pCi0rCXsKLSsJaW50IGksIG1kbGVuOwotKwl1bnNpZ25lZCBjaGFyIG1k W0VWUF9NQVhfTURfU0laRV07Ci0rCWlmICghRVZQX0RpZ2VzdChNc2csIE1zZ2xlbiwgbWQsICh1 bnNpZ25lZCBpbnQgKikmbWRsZW4sIGVtZCwgTlVMTCkpCi0rCQl7Ci0rCQlmcHV0cygiRXJyb3Ig Y2FsY3VsYXRpbmcgSEFTSFxuIiwgc3RkZXJyKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlmcHV0 cygiTUQgPSAiLCBvdXQpOwotKwlmb3IgKGkgPSAwOyBpIDwgbWRsZW47IGkrKykKLSsJCWZwcmlu dGYob3V0LCAiJTAyeCIsIG1kW2ldKTsKLSsJZnB1dHMoIlxuIiwgb3V0KTsKLSsJcmV0dXJuIDE7 Ci0rCX0KLSsKLStzdGF0aWMgaW50IHByaW50X21vbnRlKGNvbnN0IEVWUF9NRCAqbWQsIEZJTEUg Km91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKlNlZWQsIGludCBTZWVkTGVuKQotKwl7Ci0rCXVuc2ln bmVkIGludCBpLCBqLCBrOwotKwlpbnQgcmV0ID0gMDsKLSsJRVZQX01EX0NUWCBjdHg7Ci0rCXVu c2lnbmVkIGNoYXIgKm0xLCAqbTIsICptMywgKnA7Ci0rCXVuc2lnbmVkIGludCBtbGVuLCBtMWxl biwgbTJsZW4sIG0zbGVuOwotKwotKwlFVlBfTURfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rCWlmIChT ZWVkTGVuID4gRVZQX01BWF9NRF9TSVpFKQotKwkJbWxlbiA9IFNlZWRMZW47Ci0rCWVsc2UKLSsJ CW1sZW4gPSBFVlBfTUFYX01EX1NJWkU7Ci0rCi0rCW0xID0gT1BFTlNTTF9tYWxsb2MobWxlbik7 Ci0rCW0yID0gT1BFTlNTTF9tYWxsb2MobWxlbik7Ci0rCW0zID0gT1BFTlNTTF9tYWxsb2MobWxl bik7Ci0rCi0rCWlmICghbTEgfHwgIW0yIHx8ICFtMykKLSsJCWdvdG8gbWNfZXJyb3I7Ci0rCi0r CW0xbGVuID0gbTJsZW4gPSBtM2xlbiA9IFNlZWRMZW47Ci0rCW1lbWNweShtMSwgU2VlZCwgU2Vl ZExlbik7Ci0rCW1lbWNweShtMiwgU2VlZCwgU2VlZExlbik7Ci0rCW1lbWNweShtMywgU2VlZCwg U2VlZExlbik7Ci0rCi0rCWZwdXRzKCJcbiIsIG91dCk7Ci0rCi0rCWZvciAoaiA9IDA7IGogPCAx MDA7IGorKykKLSsJCXsKLSsJCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspCi0rCQkJewotKwkJ CUVWUF9EaWdlc3RJbml0X2V4KCZjdHgsIG1kLCBOVUxMKTsKLSsJCQlFVlBfRGlnZXN0VXBkYXRl KCZjdHgsIG0xLCBtMWxlbik7Ci0rCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMiwgbTJsZW4p OwotKwkJCUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgbTMsIG0zbGVuKTsKLSsJCQlwID0gbTE7Ci0r CQkJbTEgPSBtMjsKLSsJCQltMWxlbiA9IG0ybGVuOwotKwkJCW0yID0gbTM7Ci0rCQkJbTJsZW4g PSBtM2xlbjsKLSsJCQltMyA9IHA7Ci0rCQkJRVZQX0RpZ2VzdEZpbmFsX2V4KCZjdHgsIG0zLCAm bTNsZW4pOwotKwkJCX0KLSsJCWZwcmludGYob3V0LCAiQ09VTlQgPSAlZFxuIiwgaik7Ci0rCQlm cHV0cygiTUQgPSAiLCBvdXQpOwotKwkJZm9yIChrID0gMDsgayA8IG0zbGVuOyBrKyspCi0rCQkJ ZnByaW50ZihvdXQsICIlMDJ4IiwgbTNba10pOwotKwkJZnB1dHMoIlxuXG4iLCBvdXQpOwotKwkJ bWVtY3B5KG0xLCBtMywgbTNsZW4pOwotKwkJbWVtY3B5KG0yLCBtMywgbTNsZW4pOwotKwkJbTFs ZW4gPSBtMmxlbiA9IG0zbGVuOwotKwkJfQotKwotKwlyZXQgPSAxOwotKwotKwltY19lcnJvcjoK LSsJaWYgKG0xKQotKwkJT1BFTlNTTF9mcmVlKG0xKTsKLSsJaWYgKG0yKQotKwkJT1BFTlNTTF9m cmVlKG0yKTsKLSsJaWYgKG0zKQotKwkJT1BFTlNTTF9mcmVlKG0zKTsKLSsKLSsJRVZQX01EX0NU WF9jbGVhbnVwKCZjdHgpOwotKwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZm IC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwuaC5maXBz IG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3V0bC5oCi0tLS0gb3Bl bnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmguZmlwcwkyMDEyLTAy LTA3IDExOjA3OjAyLjU0MjM5MzcxNiArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX3V0bC5oCTIwMTItMDItMDcgMTE6MDc6MDIuNTQyMzkzNzE2ICsw MTAwCi1AQCAtMCwwICsxLDM0MyBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChj KSAyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0r ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0r ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNv ZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8v d3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtp dCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lv biwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoK LSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNh bGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIg bmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3Bl blNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdo YXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50 OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQg KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJF U1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMg QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK LSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBB TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAot KyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotK3Zv aWQgZG9fcHJpbnRfZXJyb3JzKHZvaWQpCi0rCXsKLSsJY29uc3QgY2hhciAqZmlsZSwgKmRhdGE7 Ci0rCWludCBsaW5lLCBmbGFnczsKLSsJdW5zaWduZWQgbG9uZyBsOwotKwl3aGlsZSAoKGwgPSBF UlJfZ2V0X2Vycm9yX2xpbmVfZGF0YSgmZmlsZSwgJmxpbmUsICZkYXRhLCAmZmxhZ3MpKSkKLSsJ CXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRVJST1I6JWx4OmxpYj0lZCxmdW5jPSVkLHJlYXNvbj0l ZCIKLSsJCQkJIjpmaWxlPSVzOmxpbmU9JWQ6JXNcbiIsCi0rCQkJbCwgRVJSX0dFVF9MSUIobCks IEVSUl9HRVRfRlVOQyhsKSwgRVJSX0dFVF9SRUFTT04obCksCi0rCQkJZmlsZSwgbGluZSwgZmxh Z3MgJiBFUlJfVFhUX1NUUklORyA/IGRhdGEgOiAiIik7Ci0rCQl9Ci0rCX0KLSsKLStpbnQgaGV4 MmJpbihjb25zdCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0KQotKyAgICB7Ci0rICAgIGlu dCBuMSwgbjI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2g7Ci0rCi0rICAgIGZvciAobjE9MCxuMj0w IDsgaW5bbjFdICYmIGluW24xXSAhPSAnXG4nIDsgKQotKwl7IC8qIGZpcnN0IGJ5dGUgKi8KLSsJ aWYgKChpbltuMV0gPj0gJzAnKSAmJiAoaW5bbjFdIDw9ICc5JykpCi0rCSAgICBjaCA9IGluW24x KytdIC0gJzAnOwotKwllbHNlIGlmICgoaW5bbjFdID49ICdBJykgJiYgKGluW24xXSA8PSAnRicp KQotKwkgICAgY2ggPSBpbltuMSsrXSAtICdBJyArIDEwOwotKwllbHNlIGlmICgoaW5bbjFdID49 ICdhJykgJiYgKGluW24xXSA8PSAnZicpKQotKwkgICAgY2ggPSBpbltuMSsrXSAtICdhJyArIDEw OwotKwllbHNlCi0rCSAgICByZXR1cm4gLTE7Ci0rCWlmKCFpbltuMV0pCi0rCSAgICB7Ci0rCSAg ICBvdXRbbjIrK109Y2g7Ci0rCSAgICBicmVhazsKLSsJICAgIH0KLSsJb3V0W24yXSA9IGNoIDw8 IDQ7Ci0rCS8qIHNlY29uZCBieXRlICovCi0rCWlmICgoaW5bbjFdID49ICcwJykgJiYgKGluW24x XSA8PSAnOScpKQotKwkgICAgY2ggPSBpbltuMSsrXSAtICcwJzsKLSsJZWxzZSBpZiAoKGluW24x XSA+PSAnQScpICYmIChpbltuMV0gPD0gJ0YnKSkKLSsJICAgIGNoID0gaW5bbjErK10gLSAnQScg KyAxMDsKLSsJZWxzZSBpZiAoKGluW24xXSA+PSAnYScpICYmIChpbltuMV0gPD0gJ2YnKSkKLSsJ ICAgIGNoID0gaW5bbjErK10gLSAnYScgKyAxMDsKLSsJZWxzZQotKwkgICAgcmV0dXJuIC0xOwot KwlvdXRbbjIrK10gfD0gY2g7Ci0rCX0KLSsgICAgcmV0dXJuIG4yOwotKyAgICB9Ci0rCi0rdW5z aWduZWQgY2hhciAqaGV4MmJpbl9tKGNvbnN0IGNoYXIgKmluLCBsb25nICpwbGVuKQotKwl7Ci0r CXVuc2lnbmVkIGNoYXIgKnA7Ci0rCXAgPSBPUEVOU1NMX21hbGxvYygoc3RybGVuKGluKSArIDEp LzIpOwotKwkqcGxlbiA9IGhleDJiaW4oaW4sIHApOwotKwlyZXR1cm4gcDsKLSsJfQotKwotK2lu dCBkb19oZXgyYm4oQklHTlVNICoqcHIsIGNvbnN0IGNoYXIgKmluKQotKwl7Ci0rCXVuc2lnbmVk IGNoYXIgKnA7Ci0rCWxvbmcgcGxlbjsKLSsJaW50IHIgPSAwOwotKwlwID0gaGV4MmJpbl9tKGlu LCAmcGxlbik7Ci0rCWlmICghcCkKLSsJCXJldHVybiAwOwotKwlpZiAoISpwcikKLSsJCSpwciA9 IEJOX25ldygpOwotKwlpZiAoISpwcikKLSsJCXJldHVybiAwOwotKwlpZiAoQk5fYmluMmJuKHAs IHBsZW4sICpwcikpCi0rCQlyID0gMTsKLSsJT1BFTlNTTF9mcmVlKHApOwotKwlyZXR1cm4gcjsK LSsJfQotKwotK2ludCBkb19ibl9wcmludChGSUxFICpvdXQsIEJJR05VTSAqYm4pCi0rCXsKLSsJ aW50IGxlbiwgaTsKLSsJdW5zaWduZWQgY2hhciAqdG1wOwotKwlsZW4gPSBCTl9udW1fYnl0ZXMo Ym4pOwotKwlpZiAobGVuID09IDApCi0rCQl7Ci0rCQlmcHV0cygiMDAiLCBvdXQpOwotKwkJcmV0 dXJuIDE7Ci0rCQl9Ci0rCi0rCXRtcCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7Ci0rCWlmICghdG1w KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7 Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJQk5fYm4yYmluKGJuLCB0bXApOwotKwlmb3IgKGkgPSAw OyBpIDwgbGVuOyBpKyspCi0rCQlmcHJpbnRmKG91dCwgIiUwMngiLCB0bXBbaV0pOwotKwlPUEVO U1NMX2ZyZWUodG1wKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgZG9fYm5fcHJpbnRfbmFt ZShGSUxFICpvdXQsIGNvbnN0IGNoYXIgKm5hbWUsIEJJR05VTSAqYm4pCi0rCXsKLSsJaW50IHI7 Ci0rCWZwcmludGYob3V0LCAiJXMgPSAiLCBuYW1lKTsKLSsJciA9IGRvX2JuX3ByaW50KG91dCwg Ym4pOwotKwlpZiAoIXIpCi0rCQlyZXR1cm4gMDsKLSsJZnB1dHMoIlxuIiwgb3V0KTsKLSsJcmV0 dXJuIDE7Ci0rCX0KLSsKLStpbnQgcGFyc2VfbGluZShjaGFyICoqcGt3LCBjaGFyICoqcHZhbCwg Y2hhciAqbGluZWJ1ZiwgY2hhciAqb2xpbmVidWYpCi0rCXsKLSsJY2hhciAqa2V5d29yZCwgKnZh bHVlLCAqcCwgKnE7Ci0rCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCWtleXdvcmQgPSBs aW5lYnVmOwotKwkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVu c2lnbmVkIGNoYXIpKmtleXdvcmQpKQotKwkJa2V5d29yZCsrOwotKwotKwkvKiBMb29rIGZvciA9 IHNpZ24gKi8KLSsJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkvKiBJZiBubyAnPScg ZXhpdCAqLwotKwlpZiAoIXApCi0rCQlyZXR1cm4gMDsKLSsKLSsJcSA9IHAgLSAxOwotKwotKwkv KiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNo YXIpKnEpKQotKwkJKnEtLSA9IDA7Ci0rCi0rCSpwID0gMDsKLSsJdmFsdWUgPSBwICsgMTsKLSsK LSsJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwl3aGlsZSAoaXNzcGFj ZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQotKwkJdmFsdWUrKzsKLSsKLSsJLyogUmVtb3ZlIHRy YWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAt IDE7Ci0rCi0rCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnAp KQotKwkJKnAtLSA9IDA7Ci0rCi0rCSpwa3cgPSBrZXl3b3JkOwotKwkqcHZhbCA9IHZhbHVlOwot KwlyZXR1cm4gMTsKLSsJfQotKwotK0JJR05VTSAqaGV4MmJuKGNvbnN0IGNoYXIgKmluKQotKyAg ICB7Ci0rICAgIEJJR05VTSAqcD1OVUxMOwotKwotKyAgICBpZiAoIWRvX2hleDJibigmcCwgaW4p KQotKwlyZXR1cm4gTlVMTDsKLSsKLSsgICAgcmV0dXJuIHA7Ci0rICAgIH0KLSsKLStpbnQgYmlu MmhleChjb25zdCB1bnNpZ25lZCBjaGFyICppbixpbnQgbGVuLGNoYXIgKm91dCkKLSsgICAgewot KyAgICBpbnQgbjEsIG4yOwotKyAgICB1bnNpZ25lZCBjaGFyIGNoOwotKwotKyAgICBmb3IgKG4x PTAsbjI9MCA7IG4xIDwgbGVuIDsgKytuMSkKLSsJewotKwljaD1pbltuMV0gPj4gNDsKLSsJaWYg KGNoIDw9IDB4MDkpCi0rCSAgICBvdXRbbjIrK109Y2grJzAnOwotKwllbHNlCi0rCSAgICBvdXRb bjIrK109Y2gtMTArJ2EnOwotKwljaD1pbltuMV0gJiAweDBmOwotKwlpZihjaCA8PSAweDA5KQot KwkgICAgb3V0W24yKytdPWNoKycwJzsKLSsJZWxzZQotKwkgICAgb3V0W24yKytdPWNoLTEwKydh JzsKLSsJfQotKyAgICBvdXRbbjJdPSdcMCc7Ci0rICAgIHJldHVybiBuMjsKLSsgICAgfQotKwot K3ZvaWQgcHYoY29uc3QgY2hhciAqdGFnLGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZhbCxpbnQgbGVu KQotKyAgICB7Ci0rICAgIGNoYXIgb2J1ZlsyMDQ4XTsKLSsKLSsgICAgYmluMmhleCh2YWwsbGVu LG9idWYpOwotKyAgICBwcmludGYoIiVzID0gJXNcbiIsdGFnLG9idWYpOwotKyAgICB9Ci0rCi0r LyogVG8gYXZvaWQgZXh0ZW5zaXZlIGNoYW5nZXMgdG8gdGVzdCBwcm9ncmFtIGF0IHRoaXMgc3Rh Z2UganVzdCBjb252ZXJ0Ci0rICogdGhlIGlucHV0IGxpbmUgaW50byBhbiBhY2NlcHRhYmxlIGZv cm0uIEtleXdvcmQgbGluZXMgY29udmVydGVkIHRvIGZvcm0KLSsgKiAia2V5d29yZCA9IHZhbHVl XG4iIG5vIG1hdHRlciB3aGF0IHdoaXRlIHNwYWNlIHByZXNlbnQsIGFsbCBvdGhlciBsaW5lcwot KyAqIGp1c3QgaGF2ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZSByZW1vdmVkLgotKyAqLwot KwotK2ludCB0aWR5X2xpbmUoY2hhciAqbGluZWJ1ZiwgY2hhciAqb2xpbmVidWYpCi0rCXsKLSsJ Y2hhciAqa2V5d29yZCwgKnZhbHVlLCAqcCwgKnE7Ci0rCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1 Zik7Ci0rCWtleXdvcmQgPSBsaW5lYnVmOwotKwkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJ d2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQotKwkJa2V5d29yZCsrOwot KwkvKiBMb29rIGZvciA9IHNpZ24gKi8KLSsJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwot KwkvKiBJZiBubyAnPScganVzdCBjaG9wIGxlYWRpbmcsIHRyYWlsaW5nIHdzICovCi0rCWlmICgh cCkKLSsJCXsKLSsJCXAgPSBrZXl3b3JkICsgc3RybGVuKGtleXdvcmQpIC0gMTsKLSsJCXdoaWxl ICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAw OwotKwkJc3RyY3B5KG9saW5lYnVmLCBrZXl3b3JkKTsKLSsJCXN0cmNhdChvbGluZWJ1ZiwgIlxu Iik7Ci0rCQlyZXR1cm4gMTsKLSsJCX0KLSsKLSsJcSA9IHAgLSAxOwotKwotKwkvKiBSZW1vdmUg dHJhaWxpbmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQot KwkJKnEtLSA9IDA7Ci0rCi0rCSpwID0gMDsKLSsJdmFsdWUgPSBwICsgMTsKLSsKLSsJLyogUmVt b3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwl3aGlsZSAoaXNzcGFjZSgodW5zaWdu ZWQgY2hhcikqdmFsdWUpKQotKwkJdmFsdWUrKzsKLSsKLSsJLyogUmVtb3ZlIHRyYWlsaW5nIHNw YWNlIGZyb20gdmFsdWUgKi8KLSsJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCi0r CXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJKnAt LSA9IDA7Ci0rCi0rCXN0cmNweShvbGluZWJ1Ziwga2V5d29yZCk7Ci0rCXN0cmNhdChvbGluZWJ1 ZiwgIiA9ICIpOwotKwlzdHJjYXQob2xpbmVidWYsIHZhbHVlKTsKLSsJc3RyY2F0KG9saW5lYnVm LCAiXG4iKTsKLSsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsvKiBOQjogdGhpcyByZXR1cm4gdGhl IG51bWJlciBvZiBfYml0c18gcmVhZCAqLwotK2ludCBiaW50MmJpbihjb25zdCBjaGFyICppbiwg aW50IGxlbiwgdW5zaWduZWQgY2hhciAqb3V0KQotKyAgICB7Ci0rICAgIGludCBuOwotKwotKyAg ICBtZW1zZXQob3V0LDAsbGVuKTsKLSsgICAgZm9yKG49MCA7IG4gPCBsZW4gOyArK24pCi0rCWlm KGluW25dID09ICcxJykKLSsJICAgIG91dFtuLzhdfD0oMHg4MCA+PiAobiU4KSk7Ci0rICAgIHJl dHVybiBsZW47Ci0rICAgIH0KLSsKLStpbnQgYmluMmJpbnQoY29uc3QgdW5zaWduZWQgY2hhciAq aW4saW50IGxlbixjaGFyICpvdXQpCi0rICAgIHsKLSsgICAgaW50IG47Ci0rCi0rICAgIGZvcihu PTAgOyBuIDwgbGVuIDsgKytuKQotKwlvdXRbbl09KGluW24vOF0mKDB4ODAgPj4gKG4lOCkpKSA/ ICcxJyA6ICcwJzsKLSsgICAgcmV0dXJuIG47Ci0rICAgIH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLSt2b2lkIFByaW50VmFsdWUo Y2hhciAqdGFnLCB1bnNpZ25lZCBjaGFyICp2YWwsIGludCBsZW4pCi0rewotKyNpZiBWRVJCT1NF Ci0rICBjaGFyIG9idWZbMjA0OF07Ci0rICBpbnQgb2xlbjsKLSsgIG9sZW4gPSBiaW4yaGV4KHZh bCwgbGVuLCBvYnVmKTsKLSsgIHByaW50ZigiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4sIG9idWYp OwotKyNlbmRpZgotK30KLSsKLSt2b2lkIE91dHB1dFZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQg Y2hhciAqdmFsLCBpbnQgbGVuLCBGSUxFICpyZnAsaW50IGJpdG1vZGUpCi0rICAgIHsKLSsgICAg Y2hhciBvYnVmWzIwNDhdOwotKyAgICBpbnQgb2xlbjsKLSsKLSsgICAgaWYoYml0bW9kZSkKLSsJ b2xlbj1iaW4yYmludCh2YWwsbGVuLG9idWYpOwotKyAgICBlbHNlCi0rCW9sZW49YmluMmhleCh2 YWwsbGVuLG9idWYpOwotKwotKyAgICBmcHJpbnRmKHJmcCwgIiVzID0gJS4qc1xuIiwgdGFnLCBv bGVuLCBvYnVmKTsKLSsjaWYgVkVSQk9TRQotKyAgICBwcmludGYoIiVzID0gJS4qc1xuIiwgdGFn LCBvbGVuLCBvYnVmKTsKLSsjZW5kaWYKLSsgICAgfQotKwotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAu MS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAu MS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jLmZpcHMJMjAxMi0wMi0wNyAx MTowNzowMi41NDIzOTM3MTYgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9m aXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMJMjAxMi0wMi0wNyAxMTowNzowMi41NDIzOTM3MTYgKzAx MDAKLUBAIC0wLDAgKzEsMzU5IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMp IDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgot KyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2Fs bGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBu YW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVu U1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hh dHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVT U0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAot KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0r ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2lu Y2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUg PG9wZW5zc2wvZXZwLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK3N0YXRpYyBjb25zdCBz dHJ1Y3QKLSsgICAgewotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVsxNl07Ci0rICAgIGNv bnN0IHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzE2XTsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hh ciBjaXBoZXJ0ZXh0WzE2XTsKLSsgICAgfSB0ZXN0c1tdPQotKwl7Ci0rCXsKLSsJeyAweDAwLDB4 MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcsCi0rCSAgMHgwOCwweDA5LDB4MEEsMHgw QiwweDBDLDB4MEQsMHgwRSwweDBGIH0sCi0rCXsgMHgwMCwweDExLDB4MjIsMHgzMywweDQ0LDB4 NTUsMHg2NiwweDc3LAotKwkgIDB4ODgsMHg5OSwweEFBLDB4QkIsMHhDQywweERELDB4RUUsMHhG RiB9LAotKwl7IDB4NjksMHhDNCwweEUwLDB4RDgsMHg2QSwweDdCLDB4MDQsMHgzMCwKLSsJICAw eEQ4LDB4Q0QsMHhCNywweDgwLDB4NzAsMHhCNCwweEM1LDB4NUEgfSwKLSsJfSwKLSsJfTsKLSsK LStzdGF0aWMgaW50IGNvcnJ1cHRfYWVzOwotKwotK3ZvaWQgRklQU19jb3JydXB0X2FlcygpCi0r ICAgIHsKLSsgICAgY29ycnVwdF9hZXMgPSAxOwotKyAgICB9Ci0rCi0raW50IEZJUFNfc2VsZnRl c3RfYWVzKCkKLSsgICAgewotKyAgICBpbnQgbjsKLSsgICAgaW50IHJldCA9IDA7Ci0rICAgIEVW UF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsg ICAgZm9yKG49MCA7IG4gPCAxIDsgKytuKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIga2V5WzE2XTsK LSsKLSsJbWVtY3B5KGtleSwgdGVzdHNbbl0ua2V5LCBzaXplb2Yoa2V5KSk7Ci0rCWlmIChjb3Jy dXB0X2FlcykKLSsJCWtleVswXSsrOwotKwlpZiAoZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBf YWVzXzEyOF9lY2IoKSwKLSsJCQkJa2V5LCBOVUxMLAotKwkJCQl0ZXN0c1tuXS5wbGFpbnRleHQs Ci0rCQkJCXRlc3RzW25dLmNpcGhlcnRleHQsCi0rCQkJCTE2KSA8PSAwKQotKwkJZ290byBlcnI7 Ci0rCX0KLSsgICAgcmV0ID0gMTsKLSsgICAgZXJyOgotKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVh bnVwKCZjdHgpOwotKyAgICBpZiAocmV0ID09IDApCi0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBT X1NFTEZURVNUX0FFUyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgcmV0dXJuIHJldDsK LSsgICAgfQotKwotKy8qIEFFUy1DQ00gdGVzdCBkYXRhIGZyb20gTklTVCBwdWJsaWMgdGVzdCB2 ZWN0b3JzICovCi0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX2tleVtdID0gewot KwkweGNlLDB4YjAsMHgwOSwweGFlLDB4YTQsMHg0NSwweDQ0LDB4NTEsMHhmZSwweGFkLDB4ZjAs MHhlNiwKLSsJMHhiMywweDZmLDB4NDUsMHg1NSwweDVkLDB4ZDAsMHg0NywweDIzLDB4YmEsMHhh NCwweDQ4LDB4ZTgKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV9ub25jZVtd ID0gewotKwkweDc2LDB4NDAsMHg0MywweGM0LDB4OTQsMHg2MCwweGI3Ci0rfTsKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBjY21fYWRhdGFbXSA9IHsKLSsJMHg2ZSwweDgwLDB4ZGQsMHg3 ZiwweDFiLDB4YWQsMHhmMywweGExLDB4YzksMHhhYiwweDI1LDB4YzcsCi0rCTB4NWYsMHgxMCww eGJkLDB4ZTcsMHg4YywweDIzLDB4ZmEsMHgwZSwweGI4LDB4ZjksMHhhYSwweGE1LAotKwkweDNh LDB4ZGUsMHhmYiwweGY0LDB4Y2IsMHhmNywweDhmLDB4ZTQKLSt9OwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGNjbV9wdFtdID0gewotKwkweGM4LDB4ZDIsMHg3NSwweGY5LDB4MTksMHhl MSwweDdkLDB4N2YsMHhlNiwweDljLDB4MmEsMHgxZiwKLSsJMHg1OCwweDkzLDB4OWQsMHhmZSww eDRkLDB4NDAsMHgzNywweDkxLDB4YjUsMHhkZiwweDEzLDB4MTAKLSt9OwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGNjbV9jdFtdID0gewotKwkweDhhLDB4MGYsMHgzZCwweDgyLDB4Mjks MHhlNCwweDhlLDB4NzQsMHg4NywweGZkLDB4OTUsMHhhMiwKLSsJMHg4YSwweGQzLDB4OTIsMHhj OCwweDBiLDB4MzYsMHg4MSwweGQ0LDB4ZmIsMHhjNywweGJiLDB4ZmQKLSt9OwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGNjbV90YWdbXSA9IHsKLSsJMHgyZCwweGQ2LDB4ZWYsMHgxYyww eDQ1LDB4ZDQsMHhjYywweGI3LDB4MjMsMHhkYywweDA3LDB4NDQsCi0rCTB4MTQsMHhkYiwweDUw LDB4NmQKLSt9OwotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc19jY20odm9pZCkKLSsJewotKwlp bnQgcmV0ID0gMDsKLSsJdW5zaWduZWQgY2hhciBvdXRbMTI4XSwgdGFnWzE2XTsKLSsJRVZQX0NJ UEhFUl9DVFggY3R4OwotKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwltZW1zZXQob3V0 LCAwLCBzaXplb2Yob3V0KSk7Ci0rCWlmICghRVZQX0NpcGhlckluaXQoJmN0eCwgRVZQX2Flc18x OTJfY2NtKCksIE5VTEwsIE5VTEwsIDEpKQotKwkJZ290byBlcnI7Ci0rCWlmICghRVZQX0NJUEhF Ul9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX0lWTEVOLAotKwkJCQkJc2l6ZW9mKGNj bV9ub25jZSksIE5VTEwpKQotKwkJZ290byBlcnI7Ci0rCWlmICghRVZQX0NJUEhFUl9DVFhfY3Ry bCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywKLSsJCQkJCXNpemVvZihjY21fdGFnKSwgTlVM TCkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFFVlBfQ2lwaGVySW5pdCgmY3R4LCBOVUxMLCBjY21f a2V5LCBjY21fbm9uY2UsIDEpKQotKwkJZ290byBlcnI7Ci0rCWlmIChFVlBfQ2lwaGVyKCZjdHgs IE5VTEwsIE5VTEwsIHNpemVvZihjY21fcHQpKSAhPSBzaXplb2YoY2NtX3B0KSkKLSsJCWdvdG8g ZXJyOwotKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBjY21fYWRhdGEsIHNpemVvZihjY21f YWRhdGEpKSA8IDApCi0rCQlnb3RvIGVycjsKLSsJaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBj Y21fcHQsIHNpemVvZihjY21fcHQpKSAhPSBzaXplb2YoY2NtX2N0KSkKLSsJCWdvdG8gZXJyOwot KwotKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX0dFVF9UQUcs IDE2LCB0YWcpKQotKwkJZ290byBlcnI7Ci0rCWlmIChtZW1jbXAodGFnLCBjY21fdGFnLCBzaXpl b2YoY2NtX3RhZykpCi0rCQl8fCBtZW1jbXAob3V0LCBjY21fY3QsIHNpemVvZihjY21fY3QpKSkK LSsJCWdvdG8gZXJyOwotKwotKwltZW1zZXQob3V0LCAwLCBzaXplb2Yob3V0KSk7Ci0rCi0rCWlm ICghRVZQX0NpcGhlckluaXQoJmN0eCwgRVZQX2Flc18xOTJfY2NtKCksIE5VTEwsIE5VTEwsIDAp KQotKwkJZ290byBlcnI7Ci0rCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RS TF9DQ01fU0VUX0lWTEVOLAotKwkJCQkJc2l6ZW9mKGNjbV9ub25jZSksIE5VTEwpKQotKwkJZ290 byBlcnI7Ci0rCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VU X1RBRywgMTYsIHRhZykpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFFVlBfQ2lwaGVySW5pdCgmY3R4 LCBOVUxMLCBjY21fa2V5LCBjY21fbm9uY2UsIDApKQotKwkJZ290byBlcnI7Ci0rCWlmIChFVlBf Q2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIHNpemVvZihjY21fY3QpKSAhPSBzaXplb2YoY2NtX2N0 KSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBjY21fYWRhdGEs IHNpemVvZihjY21fYWRhdGEpKSA8IDApCi0rCQlnb3RvIGVycjsKLSsJaWYgKEVWUF9DaXBoZXIo JmN0eCwgb3V0LCBjY21fY3QsIHNpemVvZihjY21fY3QpKSAhPSBzaXplb2YoY2NtX3B0KSkKLSsJ CWdvdG8gZXJyOwotKwotKwlpZiAobWVtY21wKG91dCwgY2NtX3B0LCBzaXplb2YoY2NtX3B0KSkp Ci0rCQlnb3RvIGVycjsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyOgotKwlFVlBfQ0lQSEVSX0NU WF9jbGVhbnVwKCZjdHgpOwotKwotKwlpZiAocmV0ID09IDApCi0rCQl7Ci0rCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX1NFTEZURVNUX0FFU19DQ00sRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQly ZXR1cm4gMDsKLSsJCX0KLSsJZWxzZQotKwkJcmV0dXJuIHJldDsKLSsKLSsJfQotKwotKy8qIEFF Uy1HQ00gdGVzdCBkYXRhIGZyb20gTklTVCBwdWJsaWMgdGVzdCB2ZWN0b3JzICovCi0rCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX2tleVtdID0gewotKwkweGVlLDB4YmMsMHgxZiww eDU3LDB4NDgsMHg3ZiwweDUxLDB4OTIsMHgxYywweDA0LDB4NjUsMHg2NiwKLSsJMHg1ZiwweDhh LDB4ZTYsMHhkMSwweDY1LDB4OGIsMHhiMiwweDZkLDB4ZTYsMHhmOCwweGEwLDB4NjksCi0rCTB4 YTMsMHg1MiwweDAyLDB4OTMsMHhhNSwweDcyLDB4MDcsMHg4ZgotK307Ci0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgZ2NtX2l2W10gPSB7Ci0rCTB4OTksMHhhYSwweDNlLDB4NjgsMHhlZCww eDgxLDB4NzMsMHhhMCwweGVlLDB4ZDAsMHg2NiwweDg0Ci0rfTsKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBnY21fcHRbXSA9IHsKLSsJMHhmNSwweDZlLDB4ODcsMHgwNSwweDViLDB4YzMs MHgyZCwweDBlLDB4ZWIsMHgzMSwweGIyLDB4ZWEsCi0rCTB4Y2MsMHgyYiwweGYyLDB4YTUKLSt9 OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9hYWRbXSA9IHsKLSsJMHg0ZCwweDIz LDB4YzMsMHhjZSwweGMzLDB4MzQsMHhiNCwweDliLDB4ZGIsMHgzNywweDBjLDB4NDMsCi0rCTB4 N2YsMHhlYywweDc4LDB4ZGUKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9j dFtdID0gewotKwkweGY3LDB4MjYsMHg0NCwweDEzLDB4YTgsMHg0YywweDBlLDB4N2MsMHhkNSww eDM2LDB4ODYsMHg3ZSwKLSsJMHhiOSwweGYyLDB4MTcsMHgzNgotK307Ci0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgZ2NtX3RhZ1tdID0gewotKwkweDY3LDB4YmEsMHgwNSwweDEwLDB4MjYs MHgyYSwweGU0LDB4ODcsMHhkNywweDM3LDB4ZWUsMHg2MiwKLSsJMHg5OCwweGY3LDB4N2UsMHgw YwotK307Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfYWVzX2djbSh2b2lkKQotKwl7Ci0rCWludCBy ZXQgPSAwOwotKwl1bnNpZ25lZCBjaGFyIG91dFsxMjhdLCB0YWdbMTZdOwotKwlFVlBfQ0lQSEVS X0NUWCBjdHg7Ci0rCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCW1lbXNldChvdXQsIDAs IHNpemVvZihvdXQpKTsKLSsJbWVtc2V0KHRhZywgMCwgc2l6ZW9mKHRhZykpOwotKwlpZiAoIUVW UF9DaXBoZXJJbml0KCZjdHgsIEVWUF9hZXNfMjU2X2djbSgpLCBOVUxMLCBOVUxMLCAxKSkKLSsJ CWdvdG8gZXJyOwotKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NN X1NFVF9JVkxFTiwKLSsJCQkJCXNpemVvZihnY21faXYpLCBOVUxMKSkKLSsJCWdvdG8gZXJyOwot KwlpZiAoIUVWUF9DaXBoZXJJbml0KCZjdHgsIE5VTEwsIGdjbV9rZXksIGdjbV9pdiwgMSkpCi0r CQlnb3RvIGVycjsKLSsJaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgZ2NtX2FhZCwgc2l6ZW9m KGdjbV9hYWQpKSA8IDApCi0rCQlnb3RvIGVycjsKLSsJaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0 LCBnY21fcHQsIHNpemVvZihnY21fcHQpKSAhPSBzaXplb2YoZ2NtX2N0KSkKLSsJCWdvdG8gZXJy OwotKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCAwKSA8IDApCi0rCQlnb3RvIGVy cjsKLSsKLSsJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9HRVRf VEFHLCAxNiwgdGFnKSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAobWVtY21wKHRhZywgZ2NtX3Rh ZywgMTYpIHx8IG1lbWNtcChvdXQsIGdjbV9jdCwgMTYpKQotKwkJZ290byBlcnI7Ci0rCi0rCW1l bXNldChvdXQsIDAsIHNpemVvZihvdXQpKTsKLSsKLSsJaWYgKCFFVlBfQ2lwaGVySW5pdCgmY3R4 LCBFVlBfYWVzXzI1Nl9nY20oKSwgTlVMTCwgTlVMTCwgMCkpCi0rCQlnb3RvIGVycjsKLSsJaWYg KCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9TRVRfSVZMRU4sCi0rCQkJ CQlzaXplb2YoZ2NtX2l2KSwgTlVMTCkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFFVlBfQ0lQSEVS X0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9TRVRfVEFHLCAxNiwgdGFnKSkKLSsJCWdvdG8g ZXJyOwotKwlpZiAoIUVWUF9DaXBoZXJJbml0KCZjdHgsIE5VTEwsIGdjbV9rZXksIGdjbV9pdiwg MCkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgZ2NtX2FhZCwg c2l6ZW9mKGdjbV9hYWQpKSA8IDApCi0rCQlnb3RvIGVycjsKLSsJaWYgKEVWUF9DaXBoZXIoJmN0 eCwgb3V0LCBnY21fY3QsIHNpemVvZihnY21fY3QpKSAhPSBzaXplb2YoZ2NtX3B0KSkKLSsJCWdv dG8gZXJyOwotKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCAwKSA8IDApCi0rCQln b3RvIGVycjsKLSsKLSsJaWYgKG1lbWNtcChvdXQsIGdjbV9wdCwgMTYpKQotKwkJZ290byBlcnI7 Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycjoKLSsJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4 KTsKLSsKLSsJaWYgKHJldCA9PSAwKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxG VEVTVF9BRVNfR0NNLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9 Ci0rCWVsc2UKLSsJCXJldHVybiByZXQ7Ci0rCi0rCX0KLSsKLSsKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBYVFNfMTI4X2tleVtdID0gewotKwkweGExLDB4YjksMHgwYywweGJhLDB4M2Ys MHgwNiwweGFjLDB4MzUsMHgzYiwweDJjLDB4MzQsMHgzOCwKLSsJMHg3NiwweDA4LDB4MTcsMHg2 MiwweDA5LDB4MDksMHgyMywweDAyLDB4NmUsMHg5MSwweDc3LDB4MTgsCi0rCTB4MTUsMHhmMiww eDlkLDB4YWIsMHgwMSwweDkzLDB4MmYsMHgyZgotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgWFRTXzEyOF9pW10gPSB7Ci0rCTB4NGYsMHhhZSwweGY3LDB4MTEsMHg3YywweGRhLDB4 NTksMHhjNiwweDZlLDB4NGIsMHg5MiwweDAxLAotKwkweDNlLDB4NzYsMHg4YSwweGQ1Ci0rfTsK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMTI4X3B0W10gPSB7Ci0rCTB4ZWIsMHhh YiwweGNlLDB4OTUsMHhiMSwweDRkLDB4M2MsMHg4ZCwweDZmLDB4YjMsMHg1MCwweDM5LAotKwkw eDA3LDB4OTAsMHgzMSwweDFjCi0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNf MTI4X2N0W10gPSB7Ci0rCTB4NzcsMHg4YSwweGU4LDB4YjQsMHgzYywweGI5LDB4OGQsMHg1YSww eDgyLDB4NTAsMHg4MSwweGQ1LAotKwkweGJlLDB4NDcsMHgxYywweDYzCi0rfTsKLSsKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMjU2X2tleVtdID0gewotKwkweDFlLDB4YTYsMHg2 MSwweGM1LDB4OGQsMHg5NCwweDNhLDB4MGUsMHg0OCwweDAxLDB4ZTQsMHgyZiwKLSsJMHg0Yiww eDA5LDB4NDcsMHgxNCwweDllLDB4N2YsMHg5ZiwweDhlLDB4M2UsMHg2OCwweGQwLDB4YzcsCi0r CTB4NTAsMHg1MiwweDEwLDB4YmQsMHgzMSwweDFhLDB4MGUsMHg3YywweGQ2LDB4ZTEsMHgzZiww eGZkLAotKwkweGYyLDB4NDEsMHg4ZCwweDhkLDB4MTksMHgxMSwweGMwLDB4MDQsMHhjZCwweGE1 LDB4OGQsMHhhMywKLSsJMHhkNiwweDE5LDB4YjcsMHhlMiwweGI5LDB4MTQsMHgxZSwweDU4LDB4 MzEsMHg4ZSwweGVhLDB4MzksCi0rCTB4MmMsMHhmNCwweDFiLDB4MDgKLSt9OwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIFhUU18yNTZfaVtdID0gewotKwkweGFkLDB4ZjgsMHhkOSwweDI2 LDB4MjcsMHg0NiwweDRhLDB4ZDIsMHhmMCwweDQyLDB4OGUsMHg4NCwKLSsJMHhhOSwweGY4LDB4 NzUsMHg2NAotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzI1Nl9wdFtdID0g ewotKwkweDJlLDB4ZWQsMHhlYSwweDUyLDB4Y2QsMHg4MiwweDE1LDB4ZTEsMHhhYywweGM2LDB4 NDcsMHhlOCwKLSsJMHgxMCwweGJiLDB4YzMsMHg2NCwweDJlLDB4ODcsMHgyOCwweDdmLDB4OGQs MHgyZSwweDU3LDB4ZTMsCi0rCTB4NmMsMHgwYSwweDI0LDB4ZmIsMHhjMSwweDJhLDB4MjAsMHgy ZQotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzI1Nl9jdFtdID0gewotKwkw eGNiLDB4YWEsMHhkMCwweGUyLDB4ZjYsMHhjZSwweGEzLDB4ZjUsMHgwYiwweDM3LDB4ZjksMHgz NCwKLSsJMHhkNCwweDZhLDB4OWIsMHgxMywweDBiLDB4OWQsMHg1NCwweGYwLDB4N2UsMHgzNCww eGYzLDB4NmEsCi0rCTB4ZjcsMHg5MywweGU4LDB4NmYsMHg3MywweGM2LDB4ZDcsMHhkYgotK307 Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfYWVzX3h0cygpCi0rCXsKLSsJaW50IHJldCA9IDE7Ci0r CUVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsJ aWYgKGZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Flc18xMjhfeHRzKCksCi0rCQkJCVhUU18x Mjhfa2V5LCBYVFNfMTI4X2ksIFhUU18xMjhfcHQsIFhUU18xMjhfY3QsCi0rCQkJCXNpemVvZihY VFNfMTI4X3B0KSkgPD0gMCkKLSsJCXJldCA9IDA7Ci0rCi0rCWlmIChmaXBzX2NpcGhlcl90ZXN0 KCZjdHgsIEVWUF9hZXNfMjU2X3h0cygpLAotKwkJCQlYVFNfMjU2X2tleSwgWFRTXzI1Nl9pLCBY VFNfMjU2X3B0LCBYVFNfMjU2X2N0LAotKwkJCQlzaXplb2YoWFRTXzI1Nl9wdCkpIDw9IDApCi0r CQlyZXQgPSAwOwotKwotKwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOwotKwlpZiAocmV0 ID09IDApCi0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19YVFMsRklQU19SX1NF TEZURVNUX0ZBSUxFRCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLSsjZW5kaWYKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwcy5jLmZpcHMgb3BlbnNzbC0xLjAu MS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0 by9maXBzL2ZpcHMuYy5maXBzCTIwMTItMDItMDcgMTE6MDc6MDIuNTQzMzkzNzI0ICswMTAwCi0r Kysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzLmMJMjAxMi0wMi0wNyAxMTow NzowMi41NDMzOTM3MjQgKzAxMDAKLUBAIC0wLDAgKzEsNDg5IEBACi0rLyogPT09PT09PT09PT09 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 KyAqCi0rICovCi0rCi0rI2RlZmluZSBfR05VX1NPVVJDRQotKwotKyNpbmNsdWRlIDxvcGVuc3Ns L3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5o PgotKyNpbmNsdWRlIDxsaW1pdHMuaD4KLSsjaW5jbHVkZSA8ZGxmY24uaD4KLSsjaW5jbHVkZSA8 c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgot KwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0r Ci0rI2lmbmRlZiBQQVRIX01BWAotKyNkZWZpbmUgUEFUSF9NQVggMTAyNAotKyNlbmRpZgotKwot K3N0YXRpYyBpbnQgZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKLStzdGF0aWMgaW50IGZpcHNfbW9k ZSA9IDA7Ci0rc3RhdGljIGludCBmaXBzX3N0YXJ0ZWQgPSAwOwotKwotK3N0YXRpYyBpbnQgZmlw c19pc19vd25pbmdfdGhyZWFkKHZvaWQpOwotK3N0YXRpYyBpbnQgZmlwc19zZXRfb3duaW5nX3Ro cmVhZCh2b2lkKTsKLStzdGF0aWMgaW50IGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCh2b2lkKTsK LSsKLSsjZGVmaW5lIGZpcHNfd19sb2NrKCkJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBT KQotKyNkZWZpbmUgZmlwc193X3VubG9jaygpCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19G SVBTKQotKyNkZWZpbmUgZmlwc19yX2xvY2soKQlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX0ZJ UFMpCi0rI2RlZmluZSBmaXBzX3JfdW5sb2NrKCkJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NL X0ZJUFMpCi0rCi0rc3RhdGljIHZvaWQgZmlwc19zZXRfbW9kZShpbnQgb25vZmYpCi0rCXsKLSsJ aW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKLSsKLSsJaWYgKGZp cHNfc3RhcnRlZCkKLSsJCXsKLSsJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc193X2xvY2soKTsK LSsJCWZpcHNfbW9kZSA9IG9ub2ZmOwotKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3dfdW5s b2NrKCk7Ci0rCQl9Ci0rCX0KLSsKLStpbnQgRklQU19tb2R1bGVfbW9kZSh2b2lkKQotKwl7Ci0r CWludCByZXQgPSAwOwotKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVh ZCgpOwotKwotKwlpZiAoZmlwc19zdGFydGVkKQotKwkJewotKwkJaWYgKCFvd25pbmdfdGhyZWFk KSBmaXBzX3JfbG9jaygpOwotKwkJcmV0ID0gZmlwc19tb2RlOwotKwkJaWYgKCFvd25pbmdfdGhy ZWFkKSBmaXBzX3JfdW5sb2NrKCk7Ci0rCQl9Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStpbnQg RklQU19zZWxmdGVzdF9mYWlsZWQodm9pZCkKLSsgICAgewotKyAgICBpbnQgcmV0ID0gMDsKLSsg ICAgaWYgKGZpcHNfc3RhcnRlZCkKLSsJewotKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNf b3duaW5nX3RocmVhZCgpOwotKwotKwlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl9sb2NrKCk7 Ci0rCXJldCA9IGZpcHNfc2VsZnRlc3RfZmFpbDsKLSsJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBz X3JfdW5sb2NrKCk7Ci0rCX0KLSsgICAgcmV0dXJuIHJldDsKLSsgICAgfQotKwotKy8qIFNlbGZ0 ZXN0IGZhaWx1cmUgZmF0YWwgZXhpdCByb3V0aW5lLiBUaGlzIHdpbGwgYmUgY2FsbGVkCi0rICog ZHVyaW5nICphbnkqIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uLiBJdCBoYXMgdGhlIG1pbmltdW0K LSsgKiBvdmVyaGVhZCBwb3NzaWJsZSB0byBhdm9pZCB0b28gYmlnIGEgcGVyZm9ybWFuY2UgaGl0 LgotKyAqLwotKwotK3ZvaWQgRklQU19zZWxmdGVzdF9jaGVjayh2b2lkKQotKyAgICB7Ci0rICAg IGlmIChmaXBzX3NlbGZ0ZXN0X2ZhaWwpCi0rCXsKLSsJT3BlblNTTERpZShfX0ZJTEVfXyxfX0xJ TkVfXywgIkZBVEFMIEZJUFMgU0VMRlRFU1QgRkFJTFVSRSIpOwotKwl9Ci0rICAgIH0KLSsKLSt2 b2lkIGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwodm9pZCkKLSsgICAgewotKyAgICBmaXBzX3NlbGZ0 ZXN0X2ZhaWwgPSAxOwotKyAgICB9Ci0rCi0rLyogd2UgaW1wbGVtZW50IHdoYXQgbGliZmlwc2No ZWNrIGRvZXMgb3Vyc2VsdmVzICovCi0rCi0rc3RhdGljIGludAotK2dldF9saWJyYXJ5X3BhdGgo Y29uc3QgY2hhciAqbGlibmFtZSwgY29uc3QgY2hhciAqc3ltYm9sbmFtZSwgY2hhciAqcGF0aCwg c2l6ZV90IHBhdGhsZW4pCi0rewotKwlEbF9pbmZvIGluZm87Ci0rCXZvaWQgKmRsLCAqc3ltOwot KwlpbnQgcnYgPSAtMTsKLSsKLSsgICAgICAgIGRsID0gZGxvcGVuKGxpYm5hbWUsIFJUTERfTEFa WSk7Ci0rICAgICAgICBpZiAoZGwgPT0gTlVMTCkgewotKwkgICAgICAgIHJldHVybiAtMTsKLSsg ICAgICAgIH0gICAgICAgCi0rCi0rCXN5bSA9IGRsc3ltKGRsLCBzeW1ib2xuYW1lKTsKLSsKLSsJ aWYgKHN5bSAhPSBOVUxMICYmIGRsYWRkcihzeW0sICZpbmZvKSkgewotKwkJc3RybmNweShwYXRo LCBpbmZvLmRsaV9mbmFtZSwgcGF0aGxlbi0xKTsKLSsJCXBhdGhbcGF0aGxlbi0xXSA9ICdcMCc7 Ci0rCQlydiA9IDA7Ci0rCX0KLSsKLSsJZGxjbG9zZShkbCk7CQotKwkKLSsJcmV0dXJuIHJ2Owot K30KLSsKLStzdGF0aWMgY29uc3QgY2hhciBjb252W10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7Ci0r Ci0rc3RhdGljIGNoYXIgKgotK2JpbjJoZXgodm9pZCAqYnVmLCBzaXplX3QgbGVuKQotK3sKLSsJ Y2hhciAqaGV4LCAqcDsKLSsJdW5zaWduZWQgY2hhciAqc3JjID0gYnVmOwotKwkKLSsJaGV4ID0g bWFsbG9jKGxlbiAqIDIgKyAxKTsKLSsJaWYgKGhleCA9PSBOVUxMKQotKwkJcmV0dXJuIE5VTEw7 Ci0rCi0rCXAgPSBoZXg7Ci0rCi0rCXdoaWxlIChsZW4gPiAwKSB7Ci0rCQl1bnNpZ25lZCBjOwot KwotKwkJYyA9ICpzcmM7Ci0rCQlzcmMrKzsKLSsKLSsJCSpwID0gY29udltjID4+IDRdOwotKwkJ KytwOwotKwkJKnAgPSBjb252W2MgJiAweDBmXTsKLSsJCSsrcDsKLSsJCS0tbGVuOwotKwl9Ci0r CSpwID0gJ1wwJzsKLSsJcmV0dXJuIGhleDsKLSt9Ci0rCi0rI2RlZmluZSBITUFDX1BSRUZJWCAi LiIgCi0rI2RlZmluZSBITUFDX1NVRkZJWCAiLmhtYWMiIAotKyNkZWZpbmUgUkVBRF9CVUZGRVJf TEVOR1RIIDE2Mzg0Ci0rCi0rc3RhdGljIGNoYXIgKgotK21ha2VfaG1hY19wYXRoKGNvbnN0IGNo YXIgKm9yaWdwYXRoKQotK3sKLSsJY2hhciAqcGF0aCwgKnA7Ci0rCWNvbnN0IGNoYXIgKmZuOwot KwotKwlwYXRoID0gbWFsbG9jKHNpemVvZihITUFDX1BSRUZJWCkgKyBzaXplb2YoSE1BQ19TVUZG SVgpICsgc3RybGVuKG9yaWdwYXRoKSk7Ci0rCWlmKHBhdGggPT0gTlVMTCkgewotKwkJcmV0dXJu IE5VTEw7Ci0rCX0KLSsKLSsJZm4gPSBzdHJyY2hyKG9yaWdwYXRoLCAnLycpOwotKwlpZiAoZm4g PT0gTlVMTCkgewotKwkJZm4gPSBvcmlncGF0aDsKLSsJfSBlbHNlIHsKLSsJCSsrZm47Ci0rCX0K LSsKLSsJc3RybmNweShwYXRoLCBvcmlncGF0aCwgZm4tb3JpZ3BhdGgpOwotKwlwID0gcGF0aCAr IChmbiAtIG9yaWdwYXRoKTsKLSsJcCA9IHN0cGNweShwLCBITUFDX1BSRUZJWCk7Ci0rCXAgPSBz dHBjcHkocCwgZm4pOwotKwlwID0gc3RwY3B5KHAsIEhNQUNfU1VGRklYKTsKLSsKLSsJcmV0dXJu IHBhdGg7Ci0rfQotKwotK3N0YXRpYyBjb25zdCBjaGFyIGhtYWNrZXlbXSA9ICJvcmJvRGVKSVRJ VGVqc2lycEFET05pdmlycFVrdmFyUCI7Ci0rCi0rc3RhdGljIGludAotK2NvbXB1dGVfZmlsZV9o bWFjKGNvbnN0IGNoYXIgKnBhdGgsIHZvaWQgKipidWYsIHNpemVfdCAqaG1hY2xlbikKLSt7Ci0r CUZJTEUgKmYgPSBOVUxMOwotKwlpbnQgcnYgPSAtMTsKLSsJdW5zaWduZWQgY2hhciByYnVmW1JF QURfQlVGRkVSX0xFTkdUSF07Ci0rCXNpemVfdCBsZW47Ci0rCXVuc2lnbmVkIGludCBobGVuOwot KwlITUFDX0NUWCBjOwotKwotKwlITUFDX0NUWF9pbml0KCZjKTsKLSsKLSsJZiA9IGZvcGVuKHBh dGgsICJyIik7Ci0rCi0rCWlmIChmID09IE5VTEwpIHsKLSsJCWdvdG8gZW5kOwotKwl9Ci0rCi0r CUhNQUNfSW5pdCgmYywgaG1hY2tleSwgc2l6ZW9mKGhtYWNrZXkpLTEsIEVWUF9zaGEyNTYoKSk7 Ci0rCi0rCXdoaWxlICgobGVuPWZyZWFkKHJidWYsIDEsIHNpemVvZihyYnVmKSwgZikpICE9IDAp IHsKLSsJCUhNQUNfVXBkYXRlKCZjLCByYnVmLCBsZW4pOwotKwl9Ci0rCi0rCWxlbiA9IHNpemVv ZihyYnVmKTsKLSsJLyogcmV1c2UgcmJ1ZiBmb3IgaG1hYyAqLwotKwlITUFDX0ZpbmFsKCZjLCBy YnVmLCAmaGxlbik7Ci0rCi0rCSpidWYgPSBtYWxsb2MoaGxlbik7Ci0rCWlmICgqYnVmID09IE5V TEwpIHsKLSsJCWdvdG8gZW5kOwotKwl9Ci0rCi0rCSpobWFjbGVuID0gaGxlbjsKLSsKLSsJbWVt Y3B5KCpidWYsIHJidWYsIGhsZW4pOwotKwotKwlydiA9IDA7Ci0rZW5kOgotKwlITUFDX0NUWF9j bGVhbnVwKCZjKTsKLSsKLSsJaWYgKGYpCi0rCQlmY2xvc2UoZik7Ci0rCi0rCXJldHVybiBydjsK LSt9Ci0rCi0rc3RhdGljIGludAotK0ZJUFNDSEVDS192ZXJpZnkoY29uc3QgY2hhciAqbGlibmFt ZSwgY29uc3QgY2hhciAqc3ltYm9sbmFtZSkKLSt7Ci0rCWNoYXIgcGF0aFtQQVRIX01BWCsxXTsK LSsJaW50IHJ2OwotKwlGSUxFICpoZjsKLSsJY2hhciAqaG1hY3BhdGgsICpwOwotKwljaGFyICpo bWFjID0gTlVMTDsKLSsJc2l6ZV90IG47Ci0rCQotKwlydiA9IGdldF9saWJyYXJ5X3BhdGgobGli bmFtZSwgc3ltYm9sbmFtZSwgcGF0aCwgc2l6ZW9mKHBhdGgpKTsKLSsKLSsJaWYgKHJ2IDwgMCkK LSsJCXJldHVybiAwOwotKwotKwlobWFjcGF0aCA9IG1ha2VfaG1hY19wYXRoKHBhdGgpOwotKwlp ZiAoaG1hY3BhdGggPT0gTlVMTCkKLSsJCXJldHVybiAwOwotKwotKwloZiA9IGZvcGVuKGhtYWNw YXRoLCAiciIpOwotKwlpZiAoaGYgPT0gTlVMTCkgewotKwkJZnJlZShobWFjcGF0aCk7Ci0rCQly ZXR1cm4gMDsKLSsJfQotKwotKwlpZiAoZ2V0bGluZSgmaG1hYywgJm4sIGhmKSA+IDApIHsKLSsJ CXZvaWQgKmJ1ZjsKLSsJCXNpemVfdCBobWFjbGVuOwotKwkJY2hhciAqaGV4OwotKwotKwkJaWYg KChwPXN0cmNocihobWFjLCAnXG4nKSkgIT0gTlVMTCkKLSsJCQkqcCA9ICdcMCc7Ci0rCi0rCQlp ZiAoY29tcHV0ZV9maWxlX2htYWMocGF0aCwgJmJ1ZiwgJmhtYWNsZW4pIDwgMCkgewotKwkJCXJ2 ID0gLTQ7Ci0rCQkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCQlpZiAoKGhleD1iaW4yaGV4KGJ1Ziwg aG1hY2xlbikpID09IE5VTEwpIHsKLSsJCQlmcmVlKGJ1Zik7Ci0rCQkJcnYgPSAtNTsKLSsJCQln b3RvIGVuZDsKLSsJCX0KLSsKLSsJCWlmIChzdHJjbXAoaGV4LCBobWFjKSAhPSAwKSB7Ci0rCQkJ cnYgPSAtMTsKLSsJCX0KLSsJCWZyZWUoYnVmKTsKLSsJCWZyZWUoaGV4KTsKLSsJfQotKwotK2Vu ZDoKLSsJZnJlZShobWFjKTsKLSsJZnJlZShobWFjcGF0aCk7Ci0rCWZjbG9zZShoZik7Ci0rCi0r CWlmIChydiA8IDApCi0rCQlyZXR1cm4gMDsKLSsKLSsJLyogY2hlY2sgc3VjY2Vzc2Z1bCAqLwot KwlyZXR1cm4gMTsJCi0rfQotKwotK2ludCBGSVBTX21vZHVsZV9tb2RlX3NldChpbnQgb25vZmYs IGNvbnN0IGNoYXIgKmF1dGgpCi0rICAgIHsKLSsgICAgaW50IHJldCA9IDA7Ci0rCi0rICAgIGZp cHNfd19sb2NrKCk7Ci0rICAgIGZpcHNfc3RhcnRlZCA9IDE7Ci0rICAgIGZpcHNfc2V0X293bmlu Z190aHJlYWQoKTsKLSsKLSsgICAgaWYob25vZmYpCi0rCXsKLSsKLSsJZmlwc19zZWxmdGVzdF9m YWlsID0gMDsKLSsKLSsJLyogRG9uJ3QgZ28gaW50byBGSVBTIG1vZGUgdHdpY2UsIGp1c3Qgc28g d2UgY2FuIGRvIGF1dG9tYWdpYwotKwkgICBzZWVkaW5nICovCi0rCWlmKEZJUFNfbW9kdWxlX21v ZGUoKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VU LEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9TRVQpOwotKwkgICAgZmlwc19zZWxmdGVzdF9mYWls ID0gMTsKLSsJICAgIHJldCA9IDA7Ci0rCSAgICBnb3RvIGVuZDsKLSsJICAgIH0KLSsKLSsjaWZk ZWYgT1BFTlNTTF9JQTMyX1NTRTIKLSsJewotKwlleHRlcm4gdW5zaWduZWQgaW50IE9QRU5TU0xf aWEzMmNhcF9QWzJdOwotKwlpZiAoKE9QRU5TU0xfaWEzMmNhcF9QWzBdICYgKDE8PDI1fDE8PDI2 KSkgIT0gKDE8PDI1fDE8PDI2KSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNf TU9EVUxFX01PREVfU0VULEZJUFNfUl9VTlNVUFBPUlRFRF9QTEFURk9STSk7Ci0rCSAgICBmaXBz X3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKwkgICAgcmV0ID0gMDsKLSsJICAgIGdvdG8gZW5kOwotKwkg ICAgfQotKwlPUEVOU1NMX2lhMzJjYXBfUFswXSB8PSAoMTw8MjgpOwkvKiBzZXQgInNoYXJlZCBj YWNoZSIJKi8KLSsJT1BFTlNTTF9pYTMyY2FwX1BbMV0gJj0gfigxPDwoNjAtMzIpKTsJLyogY2xl YXIgQVZYCQkqLwotKwl9Ci0rI2VuZGlmCi0rCi0rCWlmKCFGSVBTQ0hFQ0tfdmVyaWZ5KCJsaWJj cnlwdG8uc28uIiBTSExJQl9WRVJTSU9OX05VTUJFUiwiRklQU19tb2RlX3NldCIpKQotKwkgICAg ewotKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQsRklQU19SX0ZJTkdF UlBSSU5UX0RPRVNfTk9UX01BVENIKTsKLSsJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0r CSAgICByZXQgPSAwOwotKwkgICAgZ290byBlbmQ7Ci0rCSAgICB9Ci0rCi0rCWlmKCFGSVBTQ0hF Q0tfdmVyaWZ5KCJsaWJzc2wuc28uIiBTSExJQl9WRVJTSU9OX05VTUJFUiwiU1NMX0NUWF9uZXci KSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VULEZJ UFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSCk7Ci0rCSAgICBmaXBzX3NlbGZ0ZXN0X2Zh aWwgPSAxOwotKwkgICAgcmV0ID0gMDsKLSsJICAgIGdvdG8gZW5kOwotKwkgICAgfQotKwotKwlp ZihGSVBTX3NlbGZ0ZXN0KCkpCi0rCSAgICBmaXBzX3NldF9tb2RlKG9ub2ZmKTsKLSsJZWxzZQot KwkgICAgewotKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKLSsJICAgIHJldCA9IDA7Ci0r CSAgICBnb3RvIGVuZDsKLSsJICAgIH0KLSsJcmV0ID0gMTsKLSsJZ290byBlbmQ7Ci0rCX0KLSsg ICAgZmlwc19zZXRfbW9kZSgwKTsKLSsgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKLSsgICAg cmV0ID0gMTsKLStlbmQ6Ci0rICAgIGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCgpOwotKyAgICBm aXBzX3dfdW5sb2NrKCk7Ci0rICAgIHJldHVybiByZXQ7Ci0rICAgIH0KLSsKLStzdGF0aWMgQ1JZ UFRPX1RIUkVBRElEIGZpcHNfdGhyZWFkOwotK3N0YXRpYyBpbnQgZmlwc190aHJlYWRfc2V0ID0g MDsKLSsKLStzdGF0aWMgaW50IGZpcHNfaXNfb3duaW5nX3RocmVhZCh2b2lkKQotKwl7Ci0rCWlu dCByZXQgPSAwOwotKwotKwlpZiAoZmlwc19zdGFydGVkKQotKwkJewotKwkJQ1JZUFRPX3JfbG9j ayhDUllQVE9fTE9DS19GSVBTMik7Ci0rCQlpZiAoZmlwc190aHJlYWRfc2V0KQotKwkJCXsKLSsJ CQlDUllQVE9fVEhSRUFESUQgY3VyOwotKwkJCUNSWVBUT19USFJFQURJRF9jdXJyZW50KCZjdXIp OwotKwkJCWlmICghQ1JZUFRPX1RIUkVBRElEX2NtcCgmY3VyLCAmZmlwc190aHJlYWQpKQotKwkJ CQlyZXQgPSAxOwotKwkJCX0KLSsJCUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7 Ci0rCQl9Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStpbnQgZmlwc19zZXRfb3duaW5nX3RocmVh ZCh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwotKwlpZiAoZmlwc19zdGFydGVkKQotKwkJ ewotKwkJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rCQlpZiAoIWZpcHNfdGhy ZWFkX3NldCkKLSsJCQl7Ci0rCQkJQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQoJmZpcHNfdGhyZWFk KTsKLSsJCQlyZXQgPSAxOwotKwkJCWZpcHNfdGhyZWFkX3NldCA9IDE7Ci0rCQkJfQotKwkJQ1JZ UFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCX0KLSsJcmV0dXJuIHJldDsKLSsJ fQotKwotK2ludCBmaXBzX2NsZWFyX293bmluZ190aHJlYWQodm9pZCkKLSsJewotKwlpbnQgcmV0 ID0gMDsKLSsKLSsJaWYgKGZpcHNfc3RhcnRlZCkKLSsJCXsKLSsJCUNSWVBUT193X2xvY2soQ1JZ UFRPX0xPQ0tfRklQUzIpOwotKwkJaWYgKGZpcHNfdGhyZWFkX3NldCkKLSsJCQl7Ci0rCQkJQ1JZ UFRPX1RIUkVBRElEIGN1cjsKLSsJCQlDUllQVE9fVEhSRUFESURfY3VycmVudCgmY3VyKTsKLSsJ CQlpZiAoIUNSWVBUT19USFJFQURJRF9jbXAoJmN1ciwgJmZpcHNfdGhyZWFkKSkKLSsJCQkJZmlw c190aHJlYWRfc2V0ID0gMDsKLSsJCQl9Ci0rCQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tf RklQUzIpOwotKwkJfQotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rCi0rI2lmIDAKLSsvKiBUaGUg cHVycG9zZSBvZiB0aGlzIGlzIHRvIGVuc3VyZSB0aGUgZXJyb3IgY29kZSBleGlzdHMgYW5kIHRo ZSBmdW5jdGlvbgotKyAqIG5hbWUgaXMgdG8ga2VlcCB0aGUgZXJyb3IgY2hlY2tpbmcgc2NyaXB0 IHF1aWV0Ci0rICovCi0rdm9pZCBoYXNoX2ZpbmFsKHZvaWQpCi0rCXsKLSsJRklQU2VycihGSVBT X0ZfSEFTSF9GSU5BTCxGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJfQotKyNlbmRpZgotKwot KwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBz X2NtYWNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlw c19jbWFjX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2Zp cHNfY21hY19zZWxmdGVzdC5jLmZpcHMJMjAxMi0wMi0wNyAxMTowNzowMi41NDMzOTM3MjQgKzAx MDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfY21hY19zZWxmdGVz dC5jCTIwMTItMDItMDcgMTE6MTE6MDUuNzAxNDE3NTUwICswMTAwCi1AQCAtMCwwICsxLDE2MSBA QAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFBy b2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsg KgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3Ry aWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmlu ZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0r ICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2pl Y3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0 ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsg KiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAg ICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3 cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0r ICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4g dGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wg UFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK LSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5T U0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvY21hYy5oPgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rdHlwZWRlZiBzdHJ1Y3QgewotKwlpbnQgbmlkOwotKwljb25zdCB1 bnNpZ25lZCBjaGFyIGtleVtFVlBfTUFYX0tFWV9MRU5HVEhdOyBzaXplX3Qga2V5c2l6ZTsKLSsJ Y29uc3QgdW5zaWduZWQgY2hhciBtc2dbNjRdOyBzaXplX3QgbXNnc2l6ZTsKLSsJY29uc3QgdW5z aWduZWQgY2hhciBtYWNbMzJdOyBzaXplX3QgbWFjc2l6ZTsKLSt9IENNQUNfS0FUOwotKwotKy8q IGZyb20gaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL25pc3RwdWJzLzgwMC0zOEIv U1BfODAwLTM4Qi5wZGYgKi8KLStzdGF0aWMgY29uc3QgQ01BQ19LQVQgdmVjdG9yW10gPSB7Ci0r ICAgIHsJTklEX2Flc18xMjhfY2JjLAkvKiBDb3VudCA9IDMyIGZyb20gQ01BQ0dlbkFFUzEyOC50 eHQgKi8KLSsJeyAweDc3LDB4YTcsMHg3ZiwweGFmLCAweDI5LDB4MGMsMHgxZiwweGEzLAotKwkg IDB4MGMsMHg2OCwweDNkLDB4ZjEsIDB4NmIsMHhhNywweGE3LDB4N2IsIH0sIDEyOCwKLSsJeyAw eDAyLDB4MDYsMHg4MywweGUxLCAweGYwLDB4MzksMHgyZiwweDRjLAotKwkgIDB4YWMsMHg1NCww eDMxLDB4OGIsIDB4NjAsMHgyOSwweDI1LDB4OWUsCi0rCSAgMHg5YywweDU1LDB4M2QsMHhiYywg MHg0YiwweDZhLDB4ZDksMHg5OCwKLSsJICAweGU2LDB4NGQsMHg1OCwweGU0LCAweGU3LDB4ZGMs MHgyZSwweDEzLCB9LCAyNTYsCi0rCXsgMHhmYiwweGZlLDB4YTQsMHgxYiwgfSwgMzIKLSsgICAg fSwKLSsgICAgewlOSURfYWVzXzE5Ml9jYmMsCS8qIENvdW50ID0gMjMgZnJvbSBDTUFDR2VuQUVT MTkyLnR4dCAqLwotKwl7IDB4N2IsMHgzMiwweDM5LDB4MTMsIDB4NjksMHhhYSwweDRjLDB4YTks Ci0rCSAgMHg3NSwweDU4LDB4MDksMHg1YiwgMHhlMywweGMzLDB4ZWMsMHg4NiwKLSsJICAweDJi LDB4ZDAsMHg1NywweGNlLCAweGYxLDB4ZTMsMHgyZCwweDYyLCB9LCAxOTIsCi0rCXsgMHgwIH0s IDAsCi0rCXsgMHhlNCwweGQ5LDB4MzQsMHgwYiwgMHgwMywweGU2LDB4N2QsMHhlZiwKLSsJICAw eGQ0LDB4OTYsMHg5YywweGMxLCAweGVkLDB4MzcsMHgzNSwweGU2LCB9LCAxMjgsCi0rICAgIH0s Ci0rICAgIHsJTklEX2Flc18yNTZfY2JjLAkvKiBDb3VudCA9IDMzIGZyb20gQ01BQ0dlbkFFUzI1 Ni50eHQgKi8KLSsJeyAweDBiLDB4MTIsMHgyYSwweGM4LCAweGYzLDB4NGUsMHhkMSwweGZlLAot KwkgIDB4MDgsMHgyYSwweDM2LDB4MjUsIDB4ZDEsMHg1NywweDU2LDB4MTQsCi0rCSAgMHg1NCww eDE2LDB4N2EsMHhjMSwgMHg0NSwweGExLDB4MGIsMHhiZiwKLSsJICAweDc3LDB4YzYsMHhhNyww eDA1LCAweDk2LDB4ZDUsMHg3NCwweGYxLCB9LCAyNTYsCi0rCXsgMHg0OSwweDhiLDB4NTMsMHhm ZCwgMHhlYywweDg3LDB4ZWQsMHhjYiwKLSsJICAweGYwLDB4NzAsMHg5NywweGRjLCAweGNkLDB4 ZTksMHgzYSwweDA4LAotKwkgIDB4NGIsMHhhZCwweDc1LDB4MDEsIDB4YTIsMHgyNCwweGUzLDB4 ODgsCi0rCSAgMHhkZiwweDM0LDB4OWMsMHhlMSwgMHg4OSwweDU5LDB4ZmUsMHg4NCwKLSsJICAw eDg1LDB4ZjgsMHhhZCwweDE1LCAweDM3LDB4ZjAsMHhkOCwweDk2LAotKwkgIDB4ZWEsMHg3Myww eGJlLDB4ZGMsIDB4NzIsMHgxNCwweDcxLDB4M2YsIH0sIDM4NCwKLSsJeyAweGY2LDB4MmMsMHg0 NiwweDMyLCAweDliLCB9LCA0MCwKLSsgICAgfSwKLSsgICAgewlOSURfZGVzX2VkZTNfY2JjLAkv KiBDb3VudCA9IDQxIGZyb20gQ01BQ0dlblRERVMzLnJlcSAqLwotKwl7IDB4ODksMHhiYywweGQ5 LDB4NTIsIDB4YTgsMHhjOCwweGFiLDB4MzcsCi0rCSAgMHgxYSwweGY0LDB4OGEsMHhjNywgMHhk MCwweDcwLDB4ODUsMHhkNSwKLSsJICAweGVmLDB4ZjcsMHgwMiwweGU2LCAweGQ2LDB4MmMsMHhk YywweDIzLCB9LCAxOTIsCi0rCXsgMHhmYSwweDYyLDB4MGMsMHgxYiwgMHhiZSwweDk3LDB4MzEs MHg5ZSwKLSsJICAweDlhLDB4MGMsMHhmMCwweDQ5LCAweDIxLDB4MjEsMHhmNywweGEyLAotKwkg IDB4MGUsMHhiMCwweDhhLDB4NmEsIDB4NzAsMHg5ZCwweGNiLDB4ZDAsCi0rCSAgMHgwYSwweGFm LDB4MzgsMHhlNCwgMHhmOSwweDllLDB4NzUsMHg0ZSwgfSwgMjU2LAotKwl7IDB4OGYsMHg0OSww eGExLDB4YjcsIDB4ZDYsMHhhYSwweDIyLDB4NTgsIH0sIDY0LAotKyAgICB9LAotK307Ci0rCi0r aW50IEZJUFNfc2VsZnRlc3RfY21hYygpCi0rCXsKLSsJc2l6ZV90IG4sIG91dGxlbjsKLSsJdW5z aWduZWQgY2hhciAgICBvdXRbMzJdOwotKwljb25zdCBFVlBfQ0lQSEVSICpjaXBoZXI7Ci0rCUNN QUNfQ1RYICpjdHggPSBDTUFDX0NUWF9uZXcoKTsKLSsJY29uc3QgQ01BQ19LQVQgKnQ7Ci0rCWlu dCBydiA9IDE7Ci0rCi0rCWZvcihuPTAsdD12ZWN0b3I7IG48c2l6ZW9mKHZlY3Rvcikvc2l6ZW9m KHZlY3RvclswXSk7IG4rKyx0KyspCi0rCQl7Ci0rCQljaXBoZXIgPSBGSVBTX2dldF9jaXBoZXJi eW5pZCh0LT5uaWQpOwotKwkJaWYgKCFjaXBoZXIpCi0rCQkJewotKwkJCXJ2ID0gLTE7Ci0rCQkJ Z290byBlcnI7Ci0rCQkJfQotKwkJaWYgKCFDTUFDX0luaXQoY3R4LCB0LT5rZXksIHQtPmtleXNp emUvOCwgY2lwaGVyLCAwKSkKLSsJCQl7Ci0rCQkJcnYgPSAtMTsKLSsJCQlnb3RvIGVycjsKLSsJ CQl9Ci0rCQlpZiAoIUNNQUNfVXBkYXRlKGN0eCwgdC0+bXNnLCB0LT5tc2dzaXplLzgpKQotKwkJ CXsKLSsJCQlydiA9IC0xOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsJCQkKLSsJCWlmICghQ01B Q19GaW5hbChjdHgsIG91dCwgJm91dGxlbikpCi0rCQkJewotKwkJCXJ2ID0gLTE7Ci0rCQkJZ290 byBlcnI7Ci0rCQkJfQotKwkJQ01BQ19DVFhfY2xlYW51cChjdHgpOwotKwotKwkJaWYob3V0bGVu IDwgdC0+bWFjc2l6ZS84IHx8IG1lbWNtcChvdXQsdC0+bWFjLHQtPm1hY3NpemUvOCkpCi0rCQkJ ewotKwkJICAgIAlydiA9IDA7Ci0rCQkgICAgCX0KLSsJCX0KLSsKLSsJZXJyOgotKwlDTUFDX0NU WF9mcmVlKGN0eCk7Ci0rCi0rCWlmIChydiA9PSAtMSkKLSsJCXsKLSsJCXJ2ID0gMDsKLSsJCX0K LSsJaWYgKCFydikKLSsJCSAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQ01BQyxGSVBT X1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsKLSsJcmV0dXJuIHJ2OwotKwl9Ci0rI2VuZGlmCi1kaWZm IC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMu ZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMK LS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMu ZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0MzM5MzcyNCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYwkyMDEyLTAyLTA3IDExOjA3 OjAyLjU0MzM5MzcyNCArMDEwMAotQEAgLTAsMCArMSwxNDcgQEAKLSsvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot KyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6 Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9w ZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIg YXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1p c3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9u cyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAg ICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFO RCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJ VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0r ICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsj ZW5kaWYKLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVu c3NsY29uZi5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStzdGF0aWMgY29uc3Qgc3Ry dWN0Ci0rICAgIHsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbMTZdOwotKyAgICBjb25z dCB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBj aXBoZXJ0ZXh0WzhdOwotKyAgICB9IHRlc3RzMltdPQotKwl7Ci0rCXsKLSsJeyAweDdjLDB4NGYs MHg2ZSwweGY3LDB4YTIsMHgwNCwweDE2LDB4ZWMsCi0rCSAgMHgwYiwweDZiLDB4N2MsMHg5ZSww eDVlLDB4MTksMHhhNywweGM0IH0sCi0rCXsgMHgwNiwweGE3LDB4ZDgsMHg3OSwweGFhLDB4Y2Us MHg2OSwweGVmIH0sCi0rCXsgMHg0YywweDExLDB4MTcsMHg1NSwweGJmLDB4YzQsMHg0ZSwweGZk IH0KLSsJfSwKLSsJewotKwl7IDB4NWQsMHg5ZSwweDAxLDB4ZDMsMHgyNSwweGM3LDB4M2UsMHgz NCwKLSsJICAweDAxLDB4MTYsMHg3YywweDg1LDB4MjMsMHhkZiwweGUwLDB4NjggfSwKLSsJeyAw eDljLDB4NTAsMHgwOSwweDBmLDB4NWUsMHg3ZCwweDY5LDB4N2UgfSwKLSsJeyAweGQyLDB4MGIs MHgxOCwweGRmLDB4ZDksMHgwZCwweDllLDB4ZmYgfSwKLSsJfQotKwl9OwotKwotK3N0YXRpYyBj b25zdCBzdHJ1Y3QKLSsgICAgewotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVsyNF07Ci0r ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzhdOwotKyAgICBjb25zdCB1bnNpZ25l ZCBjaGFyIGNpcGhlcnRleHRbOF07Ci0rICAgIH0gdGVzdHMzW109Ci0rCXsKLSsJewotKwl7IDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJICAweEZFLDB4REMsMHhC QSwweDk4LDB4NzYsMHg1NCwweDMyLDB4MTAsCi0rCSAgMHgxMiwweDM0LDB4NTYsMHg3OCwweDlh LDB4YmMsMHhkZSwweGYwIH0sCi0rCXsgMHg4ZiwweDhmLDB4YmYsMHg5YiwweDVkLDB4NDgsMHhi NCwweDFjIH0sCi0rCXsgMHg1OSwweDhjLDB4ZTUsMHhkMywweDZjLDB4YTIsMHhlYSwweDFiIH0s Ci0rCX0sCi0rCXsKLSsJeyAweERDLDB4QkEsMHg5OCwweDc2LDB4NTQsMHgzMiwweDEwLDB4RkUs Ci0rCSAgMHgwMSwweDIzLDB4NDUsMHg2NywweDg5LDB4QUIsMHhDRCwweEVGLAotKwkgIDB4RUQs MHgzOSwweEQ5LDB4NTAsMHhGQSwweDc0LDB4QkMsMHhDNCB9LAotKwl7IDB4MDEsMHgyMywweDQ1 LDB4NjcsMHg4OSwweEFCLDB4Q0QsMHhFRiB9LAotKwl7IDB4MTEsMHgyNSwweGIwLDB4MzUsMHhi ZSwweGEwLDB4ODIsMHg4NiB9LAotKwl9LAotKwl9OwotKwotKwotK3N0YXRpYyBpbnQgY29ycnVw dF9kZXM7Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfZGVzKCkKLSsgICAgewotKyAgICBjb3JydXB0 X2RlcyA9IDE7Ci0rICAgIH0KLSsKLStpbnQgRklQU19zZWxmdGVzdF9kZXMoKQotKyAgICB7Ci0r ICAgIGludCBuLCByZXQgPSAwOwotKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rICAgIEVWUF9D SVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rICAgIC8qIEVuY3J5cHQvZGVjcnlwdCB3aXRoIDIta2V5 IDNERVMgYW5kIGNvbXBhcmUgdG8ga25vd24gYW5zd2VycyAqLwotKyAgICBmb3Iobj0wIDsgbiA8 IDIgOyArK24pCi0rCXsKLSsJdW5zaWduZWQgY2hhciBwbGFpbnRleHRbOF07Ci0rCi0rCW1lbWNw eShwbGFpbnRleHQsIHRlc3RzMltuXS5wbGFpbnRleHQsIHNpemVvZihwbGFpbnRleHQpKTsKLSsJ aWYgKGNvcnJ1cHRfZGVzKQotKwkJcGxhaW50ZXh0WzBdKys7Ci0rCWlmICghZmlwc19jaXBoZXJf dGVzdCgmY3R4LCBFVlBfZGVzX2VkZV9lY2IoKSwKLSsJCQkJdGVzdHMyW25dLmtleSwgTlVMTCwK LSsJCQkJcGxhaW50ZXh0LCB0ZXN0czJbbl0uY2lwaGVydGV4dCwgOCkpCi0rCQlnb3RvIGVycjsK LSsJfQotKwotKyAgICAvKiBFbmNyeXB0L2RlY3J5cHQgd2l0aCAzREVTIGFuZCBjb21wYXJlIHRv IGtub3duIGFuc3dlcnMgKi8KLSsgICAgZm9yKG49MCA7IG4gPCAyIDsgKytuKQotKwl7Ci0rCWlm ICghZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksCi0rCQkJCXRlc3Rz M1tuXS5rZXksIE5VTEwsCi0rCQkJCXRlc3RzM1tuXS5wbGFpbnRleHQsIHRlc3RzM1tuXS5jaXBo ZXJ0ZXh0LCA4KSkKLSsJCWdvdG8gZXJyOwotKwl9Ci0rICAgIHJldCA9IDE7Ci0rICAgIGVycjoK LSsgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKLSsgICAgaWYgKHJldCA9PSAwKQot KwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9ERVMsRklQU19SX1NFTEZURVNUX0ZB SUxFRCk7Ci0rCi0rICAgIHJldHVybiByZXQ7Ci0rICAgIH0KLSsjZW5kaWYKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5jLmZpcHMgb3BlbnNz bC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX2RyYmdfY3RyLmMKLS0tLSBvcGVuc3NsLTEu MC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19jdHIuYy5maXBzCTIwMTItMDItMDcgMTE6 MDc6MDIuNTQzMzkzNzI0ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlw cy9maXBzX2RyYmdfY3RyLmMJMjAxMi0wMi0wNyAxMTowNzowMi41NDMzOTM3MjQgKzAxMDAKLUBA IC0wLDAgKzEsNDM2IEBACi0rLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ19jdHIuYyAqLwotKy8qIFdy aXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUg T3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmln aHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0r ICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVy dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICog ICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0r ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0 dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBU b29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAg IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3 aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsg KgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUg Y2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVp ciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBP cGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0g d2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQ UkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV VAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S IFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE Ci0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wu aCIKLSsKLStzdGF0aWMgdm9pZCBpbmNfMTI4KERSQkdfQ1RSX0NUWCAqY2N0eCkKLSsJewotKwlp bnQgaTsKLSsJdW5zaWduZWQgY2hhciBjOwotKwl1bnNpZ25lZCBjaGFyICpwID0gY2N0eC0+ViAr IDE1OwotKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLSsJCXsKLSsJCWMgPSAqcDsKLSsJCWMr KzsKLSsJCSpwID0gYzsKLSsJCWlmIChjKQotKwkJCXJldHVybjsKLSsJCXAtLTsKLSsJCX0KLSsJ fQotKwotK3N0YXRpYyB2b2lkIGN0cl9YT1IoRFJCR19DVFJfQ1RYICpjY3R4LCBjb25zdCB1bnNp Z25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKQotKwl7Ci0rCXNpemVfdCBpLCBuOwotKwkvKiBB bnkgemVybyBwYWRkaW5nIHdpbGwgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIHJlc3VsdCBhcyB3ZQot KwkgKiBhcmUgWE9SaW5nLiBTbyBqdXN0IHByb2Nlc3MgaG93ZXZlciBtdWNoIGlucHV0IHdlIGhh dmUuCi0rCSAqLwotKwotKwlpZiAoIWluIHx8ICFpbmxlbikKLSsJCXJldHVybjsKLSsKLSsJaWYg KGlubGVuIDwgY2N0eC0+a2V5bGVuKQotKwkJbiA9IGlubGVuOwotKwllbHNlCi0rCQluID0gY2N0 eC0+a2V5bGVuOwotKwotKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQotKwkJY2N0eC0+S1tpXSBe PSBpbltpXTsKLSsJaWYgKGlubGVuIDw9IGNjdHgtPmtleWxlbikKLSsJCXJldHVybjsKLSsKLSsJ biA9IGlubGVuIC0gY2N0eC0+a2V5bGVuOwotKwkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuICovCi0r CWlmIChuID4gMTYpCi0rCQluID0gMTY7Ci0rCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotKwkJ Y2N0eC0+VltpXSBePSBpbltpICsgY2N0eC0+a2V5bGVuXTsKLSsJfQotKwotKy8qIFByb2Nlc3Mg YSBjb21wbGV0ZSBibG9jayB1c2luZyBCQ0MgYWxnb3JpdGhtIG9mIFNQUCA4MDAtOTAgMTAuNC4z ICovCi0rCi0rc3RhdGljIHZvaWQgY3RyX0JDQ19ibG9jayhEUkJHX0NUUl9DVFggKmNjdHgsIHVu c2lnbmVkIGNoYXIgKm91dCwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4pCi0rCXsKLSsJ aW50IGk7Ci0rCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotKwkJb3V0W2ldIF49IGluW2ldOwot KwlBRVNfZW5jcnlwdChvdXQsIG91dCwgJmNjdHgtPmRmX2tzKTsKLSsjaWYgMAotK2ZwcmludGYo c3RkZXJyLCAiQkNDIGluK291dFxuIik7Ci0rQklPX2R1bXBfZnAoc3RkZXJyLCBpbiwgMTYpOwot K0JJT19kdW1wX2ZwKHN0ZGVyciwgb3V0LCAxNik7Ci0rI2VuZGlmCi0rCX0KLSsKLSsvKiBIYW5k bGUgc2V2ZXJhbCBCQ0Mgb3BlcmF0aW9ucyBmb3IgYXMgbXVjaCBkYXRhIGFzIHdlIG5lZWQgZm9y IEsgYW5kIFggKi8KLStzdGF0aWMgdm9pZCBjdHJfQkNDX2Jsb2NrcyhEUkJHX0NUUl9DVFggKmNj dHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluKQotKwl7Ci0rCWN0cl9CQ0NfYmxvY2soY2N0eCwg Y2N0eC0+S1gsIGluKTsKLSsJY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCArIDE2LCBpbik7 Ci0rCWlmIChjY3R4LT5rZXlsZW4gIT0gMTYpCi0rCQljdHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgt PktYICsgMzIsIGluKTsKLSsJfQotKy8qIEluaXRpYWxpc2UgQkNDIGJsb2NrczogdGhlc2UgaGF2 ZSB0aGUgdmFsdWUgMCwxLDIgaW4gbGVmdG1vc3QgcG9zaXRpb25zOgotKyAqIHNlZSAxMC40LjIg c3RhZ2UgNy4KLSsgKi8KLStzdGF0aWMgdm9pZCBjdHJfQkNDX2luaXQoRFJCR19DVFJfQ1RYICpj Y3R4KQotKwl7Ci0rCW1lbXNldChjY3R4LT5LWCwgMCwgNDgpOwotKwltZW1zZXQoY2N0eC0+Ymx0 bXAsIDAsIDE2KTsKLSsJY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCwgY2N0eC0+Ymx0bXAp OwotKwljY3R4LT5ibHRtcFszXSA9IDE7Ci0rCWN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1gg KyAxNiwgY2N0eC0+Ymx0bXApOwotKwlpZiAoY2N0eC0+a2V5bGVuICE9IDE2KQotKwkJewotKwkJ Y2N0eC0+Ymx0bXBbM10gPSAyOwotKwkJY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCArIDMy LCBjY3R4LT5ibHRtcCk7Ci0rCQl9Ci0rCX0KLSsKLSsvKiBQcm9jZXNzIHNldmVyYWwgYmxvY2tz IGludG8gQkNDIGFsZ29yaXRobSwgc29tZSBwb3NzaWJseSBwYXJ0aWFsICovCi0rc3RhdGljIHZv aWQgY3RyX0JDQ191cGRhdGUoRFJCR19DVFJfQ1RYICpjY3R4LAotKwkJCQljb25zdCB1bnNpZ25l ZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKQotKwl7Ci0rCWlmICghaW4gfHwgIWlubGVuKQotKwkJ cmV0dXJuOwotKwkvKiBJZiB3ZSBoYXZlIHBhcnRpYWwgYmxvY2sgaGFuZGxlIGl0IGZpcnN0ICov Ci0rCWlmIChjY3R4LT5ibHRtcF9wb3MpCi0rCQl7Ci0rCQlzaXplX3QgbGVmdCA9IDE2IC0gY2N0 eC0+Ymx0bXBfcG9zOwotKwkJLyogSWYgd2Ugbm93IGhhdmUgYSBjb21wbGV0ZSBibG9jayBwcm9j ZXNzIGl0ICovCi0rCQlpZiAoaW5sZW4gPj0gbGVmdCkKLSsJCQl7Ci0rCQkJbWVtY3B5KGNjdHgt PmJsdG1wICsgY2N0eC0+Ymx0bXBfcG9zLCBpbiwgbGVmdCk7Ci0rCQkJY3RyX0JDQ19ibG9ja3Mo Y2N0eCwgY2N0eC0+Ymx0bXApOwotKwkJCWNjdHgtPmJsdG1wX3BvcyA9IDA7Ci0rCQkJaW5sZW4g LT0gbGVmdDsKLSsJCQlpbiArPSBsZWZ0OwotKwkJCX0KLSsJCX0KLSsJLyogUHJvY2VzcyB6ZXJv IG9yIG1vcmUgY29tcGxldGUgYmxvY2tzICovCi0rCXdoaWxlIChpbmxlbiA+PSAxNikKLSsJCXsK LSsJCWN0cl9CQ0NfYmxvY2tzKGNjdHgsIGluKTsKLSsJCWluICs9IDE2OwotKwkJaW5sZW4gLT0g MTY7Ci0rCQl9Ci0rCS8qIENvcHkgYW55IHJlbWFpbmluZyBwYXJ0aWFsIGJsb2NrIHRvIHRoZSB0 ZW1wb3JhcnkgYnVmZmVyICovCi0rCWlmIChpbmxlbiA+IDApCi0rCQl7Ci0rCQltZW1jcHkoY2N0 eC0+Ymx0bXAgKyBjY3R4LT5ibHRtcF9wb3MsIGluLCBpbmxlbik7Ci0rCQljY3R4LT5ibHRtcF9w b3MgKz0gaW5sZW47Ci0rCQl9Ci0rCX0KLSsKLStzdGF0aWMgdm9pZCBjdHJfQkNDX2ZpbmFsKERS QkdfQ1RSX0NUWCAqY2N0eCkKLSsJewotKwlpZiAoY2N0eC0+Ymx0bXBfcG9zKQotKwkJewotKwkJ bWVtc2V0KGNjdHgtPmJsdG1wICsgY2N0eC0+Ymx0bXBfcG9zLCAwLCAxNiAtIGNjdHgtPmJsdG1w X3Bvcyk7Ci0rCQljdHJfQkNDX2Jsb2NrcyhjY3R4LCBjY3R4LT5ibHRtcCk7Ci0rCQl9Ci0rCX0K LSsKLStzdGF0aWMgdm9pZCBjdHJfZGYoRFJCR19DVFJfQ1RYICpjY3R4LAotKwkJCWNvbnN0IHVu c2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFy ICppbjIsIHNpemVfdCBpbjJsZW4sCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4zLCBzaXpl X3QgaW4zbGVuKQotKwl7Ci0rCXNpemVfdCBpbmxlbjsKLSsJdW5zaWduZWQgY2hhciAqcCA9IGNj dHgtPmJsdG1wOwotKwlzdGF0aWMgdW5zaWduZWQgY2hhciBjODAgPSAweDgwOwotKwotKwljdHJf QkNDX2luaXQoY2N0eCk7Ci0rCWlmICghaW4xKQotKwkJaW4xbGVuID0gMDsKLSsJaWYgKCFpbjIp Ci0rCQlpbjJsZW4gPSAwOwotKwlpZiAoIWluMykKLSsJCWluM2xlbiA9IDA7Ci0rCWlubGVuID0g aW4xbGVuICsgaW4ybGVuICsgaW4zbGVuOwotKwkvKiBJbml0aWFsaXNlIEx8fE4gaW4gdGVtcG9y YXJ5IGJsb2NrICovCi0rCSpwKysgPSAoaW5sZW4gPj4gMjQpICYgMHhmZjsKLSsJKnArKyA9IChp bmxlbiA+PiAxNikgJiAweGZmOwotKwkqcCsrID0gKGlubGVuID4+IDgpICYgMHhmZjsKLSsJKnAr KyA9IGlubGVuICYgMHhmZjsKLSsJLyogTkIga2V5bGVuIGlzIGF0IG1vc3QgMzIgYnl0ZXMgKi8K LSsJKnArKyA9IDA7Ci0rCSpwKysgPSAwOwotKwkqcCsrID0gMDsKLSsJKnAgPSAodW5zaWduZWQg Y2hhcikoKGNjdHgtPmtleWxlbiArIDE2KSAmIDB4ZmYpOwotKwljY3R4LT5ibHRtcF9wb3MgPSA4 OwotKwljdHJfQkNDX3VwZGF0ZShjY3R4LCBpbjEsIGluMWxlbik7Ci0rCWN0cl9CQ0NfdXBkYXRl KGNjdHgsIGluMiwgaW4ybGVuKTsKLSsJY3RyX0JDQ191cGRhdGUoY2N0eCwgaW4zLCBpbjNsZW4p OwotKwljdHJfQkNDX3VwZGF0ZShjY3R4LCAmYzgwLCAxKTsKLSsJY3RyX0JDQ19maW5hbChjY3R4 KTsKLSsJLyogU2V0IHVwIGtleSBLICovCi0rCUFFU19zZXRfZW5jcnlwdF9rZXkoY2N0eC0+S1gs IGNjdHgtPmtleWxlbiAqIDgsICZjY3R4LT5kZl9reGtzKTsKLSsJLyogWCBmb2xsb3dzIGtleSBL ICovCi0rCUFFU19lbmNyeXB0KGNjdHgtPktYICsgY2N0eC0+a2V5bGVuLCBjY3R4LT5LWCwgJmNj dHgtPmRmX2t4a3MpOwotKwlBRVNfZW5jcnlwdChjY3R4LT5LWCwgY2N0eC0+S1ggKyAxNiwgJmNj dHgtPmRmX2t4a3MpOwotKwlpZiAoY2N0eC0+a2V5bGVuICE9IDE2KQotKwkJQUVTX2VuY3J5cHQo Y2N0eC0+S1ggKyAxNiwgY2N0eC0+S1ggKyAzMiwgJmNjdHgtPmRmX2t4a3MpOwotKyNpZiAwCi0r ZnByaW50ZihzdGRlcnIsICJPdXRwdXQgb2YgY3RyX2RmOlxuIik7Ci0rQklPX2R1bXBfZnAoc3Rk ZXJyLCBjY3R4LT5LWCwgY2N0eC0+a2V5bGVuICsgMTYpOwotKyNlbmRpZgotKwl9Ci0rCi0rLyog TkIgdGhlIG5vLWRmICBVcGRhdGUgaW4gU1A4MDAtOTAgc3BlY2lmaWVzIGEgY29uc3RhbnQgaW5w dXQgbGVuZ3RoCi0rICogb2Ygc2VlZGxlbiwgaG93ZXZlciBvdGhlciB1c2VzIG9mIHRoaXMgYWxn b3JpdGhtIHBhZCB0aGUgaW5wdXQgd2l0aAotKyAqIHplcm9lcyBpZiBuZWNlc3NhcnkgYW5kIGhh dmUgdXAgdG8gdHdvIHBhcmFtZXRlcnMgWE9SZWQgdG9nZXRoZXIsCi0rICogaGFuZGxlIGJvdGgg Y2FzZXMgaW4gdGhpcyBmdW5jdGlvbiBpbnN0ZWFkLgotKyAqLwotKwotK3N0YXRpYyB2b2lkIGN0 cl9VcGRhdGUoRFJCR19DVFggKmRjdHgsCi0rCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNp emVfdCBpbjFsZW4sCi0rCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjIsIHNpemVfdCBpbjJsZW4s Ci0rCQljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlbGVuKQotKwl7Ci0r CURSQkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5kLmN0cjsKLSsJLyoga3MgaXMgYWxyZWFkeSBz ZXR1cCBmb3IgY29ycmVjdCBrZXkgKi8KLSsJaW5jXzEyOChjY3R4KTsKLSsJQUVTX2VuY3J5cHQo Y2N0eC0+ViwgY2N0eC0+SywgJmNjdHgtPmtzKTsKLSsJLyogSWYga2V5bGVuIGxvbmdlciB0aGFu IDEyOCBiaXRzIG5lZWQgZXh0cmEgZW5jcnlwdCAqLwotKwlpZiAoY2N0eC0+a2V5bGVuICE9IDE2 KQotKwkJewotKwkJaW5jXzEyOChjY3R4KTsKLSsJCUFFU19lbmNyeXB0KGNjdHgtPlYsIGNjdHgt PksgKyAxNiwgJmNjdHgtPmtzKTsKLSsJCX0KLSsJaW5jXzEyOChjY3R4KTsKLSsJQUVTX2VuY3J5 cHQoY2N0eC0+ViwgY2N0eC0+ViwgJmNjdHgtPmtzKTsKLSsJLyogSWYgMTkyIGJpdCBrZXkgcGFy dCBvZiBWIGlzIG9uIGVuZCBvZiBLICovCi0rCWlmIChjY3R4LT5rZXlsZW4gPT0gMjQpCi0rCQl7 Ci0rCQltZW1jcHkoY2N0eC0+ViArIDgsIGNjdHgtPlYsIDgpOwotKwkJbWVtY3B5KGNjdHgtPlYs IGNjdHgtPksgKyAyNCwgOCk7Ci0rCQl9Ci0rCi0rCWlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZM QUdfQ1RSX1VTRV9ERikKLSsJCXsKLSsJCS8qIElmIG5vIGlucHV0IHJldXNlIGV4aXN0aW5nIGRl cml2ZWQgdmFsdWUgKi8KLSsJCWlmIChpbjEgfHwgbm9uY2UgfHwgaW4yKQotKwkJCWN0cl9kZihj Y3R4LCBpbjEsIGluMWxlbiwgbm9uY2UsIG5vbmNlbGVuLCBpbjIsIGluMmxlbik7Ci0rCQkvKiBJ ZiB0aGlzIGEgcmV1c2UgaW5wdXQgaW4xbGVuICE9IDAgKi8KLSsJCWlmIChpbjFsZW4pCi0rCQkJ Y3RyX1hPUihjY3R4LCBjY3R4LT5LWCwgZGN0eC0+c2VlZGxlbik7Ci0rCQl9Ci0rCWVsc2UKLSsJ CXsKLSsJCWN0cl9YT1IoY2N0eCwgaW4xLCBpbjFsZW4pOwotKwkJY3RyX1hPUihjY3R4LCBpbjIs IGluMmxlbik7Ci0rCQl9Ci0rCi0rCUFFU19zZXRfZW5jcnlwdF9rZXkoY2N0eC0+SywgZGN0eC0+ c3RyZW5ndGgsICZjY3R4LT5rcyk7Ci0rI2lmIDAKLStmcHJpbnRmKHN0ZGVyciwgIksrViBhZnRl ciB1cGRhdGUgaXM6XG4iKTsKLStCSU9fZHVtcF9mcChzdGRlcnIsIGNjdHgtPkssIGNjdHgtPmtl eWxlbik7Ci0rQklPX2R1bXBfZnAoc3RkZXJyLCBjY3R4LT5WLCAxNik7Ci0rI2VuZGlmCi0rCX0K LSsKLStzdGF0aWMgaW50IGRyYmdfY3RyX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAotKwkJ CWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudGxlbiwKLSsJCQljb25zdCB1bnNp Z25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlbGVuLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKnBlcnMsIHNpemVfdCBwZXJzbGVuKQotKwl7Ci0rCURSQkdfQ1RSX0NUWCAqY2N0eCA9ICZk Y3R4LT5kLmN0cjsKLSsJbWVtc2V0KGNjdHgtPkssIDAsIHNpemVvZihjY3R4LT5LKSk7Ci0rCW1l bXNldChjY3R4LT5WLCAwLCBzaXplb2YoY2N0eC0+VikpOwotKwlBRVNfc2V0X2VuY3J5cHRfa2V5 KGNjdHgtPkssIGRjdHgtPnN0cmVuZ3RoLCAmY2N0eC0+a3MpOwotKwljdHJfVXBkYXRlKGRjdHgs IGVudCwgZW50bGVuLCBwZXJzLCBwZXJzbGVuLCBub25jZSwgbm9uY2VsZW4pOwotKwlyZXR1cm4g MTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19jdHJfcmVzZWVkKERSQkdfQ1RYICpkY3R4LCAK LSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRsZW4sCi0rCQkJY29uc3Qg dW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pCi0rCXsKLSsJY3RyX1VwZGF0ZShk Y3R4LCBlbnQsIGVudGxlbiwgYWRpbiwgYWRpbmxlbiwgTlVMTCwgMCk7Ci0rCXJldHVybiAxOwot Kwl9Ci0rCi0rc3RhdGljIGludCBkcmJnX2N0cl9nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwKLSsJ CQl1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCi0rCQkJY29uc3QgdW5zaWduZWQg Y2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pCi0rCXsKLSsJRFJCR19DVFJfQ1RYICpjY3R4ID0g JmRjdHgtPmQuY3RyOwotKwlpZiAoYWRpbiAmJiBhZGlubGVuKQotKwkJewotKwkJY3RyX1VwZGF0 ZShkY3R4LCBhZGluLCBhZGlubGVuLCBOVUxMLCAwLCBOVUxMLCAwKTsKLSsJCS8qIFRoaXMgbWVh bnMgd2UgcmV1c2UgZGVyaXZlZCB2YWx1ZSAqLwotKwkJaWYgKGRjdHgtPnhmbGFncyAmIERSQkdf RkxBR19DVFJfVVNFX0RGKQotKwkJCXsKLSsJCQlhZGluID0gTlVMTDsKLSsJCQlhZGlubGVuID0g MTsKLSsJCQl9Ci0rCQl9Ci0rCWVsc2UKLSsJCWFkaW5sZW4gPSAwOwotKwotKwlmb3IgKDs7KQot KwkJewotKwkJaW5jXzEyOChjY3R4KTsKLSsJCWlmICghKGRjdHgtPnhmbGFncyAmIERSQkdfRkxB R19URVNUKSAmJiAhZGN0eC0+bGJfdmFsaWQpCi0rCQkJewotKwkJCUFFU19lbmNyeXB0KGNjdHgt PlYsIGRjdHgtPmxiLCAmY2N0eC0+a3MpOwotKwkJCWRjdHgtPmxiX3ZhbGlkID0gMTsKLSsJCQlj b250aW51ZTsKLSsJCQl9Ci0rCQlpZiAob3V0bGVuIDwgMTYpCi0rCQkJewotKwkJCS8qIFVzZSBL IGFzIHRlbXAgc3BhY2UgYXMgaXQgd2lsbCBiZSB1cGRhdGVkICovCi0rCQkJQUVTX2VuY3J5cHQo Y2N0eC0+ViwgY2N0eC0+SywgJmNjdHgtPmtzKTsKLSsJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190 ZXN0KGRjdHgsIGNjdHgtPkspKQotKwkJCQlyZXR1cm4gMDsKLSsJCQltZW1jcHkob3V0LCBjY3R4 LT5LLCBvdXRsZW4pOwotKwkJCWJyZWFrOwotKwkJCX0KLSsJCUFFU19lbmNyeXB0KGNjdHgtPlYs IG91dCwgJmNjdHgtPmtzKTsKLSsJCWlmICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgb3V0 KSkKLSsJCQlyZXR1cm4gMDsKLSsJCW91dCArPSAxNjsKLSsJCW91dGxlbiAtPSAxNjsKLSsJCWlm IChvdXRsZW4gPT0gMCkKLSsJCQlicmVhazsKLSsJCX0KLSsKLSsJY3RyX1VwZGF0ZShkY3R4LCBh ZGluLCBhZGlubGVuLCBOVUxMLCAwLCBOVUxMLCAwKTsKLSsKLSsJcmV0dXJuIDE7Ci0rCi0rCX0K LSsKLStzdGF0aWMgaW50IGRyYmdfY3RyX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpCi0r CXsKLSsJbWVtc2V0KCZkY3R4LT5kLmN0ciwgMCwgc2l6ZW9mKERSQkdfQ1RSX0NUWCkpOwotKwly ZXR1cm4gMTsKLSsJfQotKwotK2ludCBmaXBzX2RyYmdfY3RyX2luaXQoRFJCR19DVFggKmRjdHgp Ci0rCXsKLSsJRFJCR19DVFJfQ1RYICpjY3R4ID0gJmRjdHgtPmQuY3RyOwotKwotKwlzaXplX3Qg a2V5bGVuOwotKwotKwlzd2l0Y2ggKGRjdHgtPnR5cGUpCi0rCQl7Ci0rCQljYXNlIE5JRF9hZXNf MTI4X2N0cjoKLSsJCWtleWxlbiA9IDE2OwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIE5JRF9hZXNf MTkyX2N0cjoKLSsJCWtleWxlbiA9IDI0OwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIE5JRF9hZXNf MjU2X2N0cjoKLSsJCWtleWxlbiA9IDMyOwotKwkJYnJlYWs7Ci0rCi0rCQlkZWZhdWx0OgotKwkJ cmV0dXJuIC0yOwotKwkJfQotKwotKwlkY3R4LT5pbnN0YW50aWF0ZSA9IGRyYmdfY3RyX2luc3Rh bnRpYXRlOwotKwlkY3R4LT5yZXNlZWQgPSBkcmJnX2N0cl9yZXNlZWQ7Ci0rCWRjdHgtPmdlbmVy YXRlID0gZHJiZ19jdHJfZ2VuZXJhdGU7Ci0rCWRjdHgtPnVuaW5zdGFudGlhdGUgPSBkcmJnX2N0 cl91bmluc3RhbnRpYXRlOwotKwotKwljY3R4LT5rZXlsZW4gPSBrZXlsZW47Ci0rCWRjdHgtPnN0 cmVuZ3RoID0ga2V5bGVuICogODsKLSsJZGN0eC0+YmxvY2tsZW5ndGggPSAxNjsKLSsJZGN0eC0+ c2VlZGxlbiA9IGtleWxlbiArIDE2OwotKwotKwlpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFH X0NUUl9VU0VfREYpCi0rCQl7Ci0rCQkvKiBkZiBpbml0aWFsaXNhdGlvbiAqLwotKwkJc3RhdGlj IHVuc2lnbmVkIGNoYXIgZGZfa2V5WzMyXSA9Ci0rCQkJewotKwkJCTB4MDAsMHgwMSwweDAyLDB4 MDMsMHgwNCwweDA1LDB4MDYsMHgwNywKLSsJCQkweDA4LDB4MDksMHgwYSwweDBiLDB4MGMsMHgw ZCwweDBlLDB4MGYsCi0rCQkJMHgxMCwweDExLDB4MTIsMHgxMywweDE0LDB4MTUsMHgxNiwweDE3 LAotKwkJCTB4MTgsMHgxOSwweDFhLDB4MWIsMHgxYywweDFkLDB4MWUsMHgxZiAKLSsJCQl9Owot KwkJLyogU2V0IGtleSBzY2hlZHVsZSBmb3IgZGZfa2V5ICovCi0rCQlBRVNfc2V0X2VuY3J5cHRf a2V5KGRmX2tleSwgZGN0eC0+c3RyZW5ndGgsICZjY3R4LT5kZl9rcyk7Ci0rCi0rCQlkY3R4LT5t aW5fZW50cm9weSA9IGNjdHgtPmtleWxlbjsKLSsJCWRjdHgtPm1heF9lbnRyb3B5ID0gRFJCR19N QVhfTEVOR1RIOwotKwkJZGN0eC0+bWluX25vbmNlID0gZGN0eC0+bWluX2VudHJvcHkgLyAyOwot KwkJZGN0eC0+bWF4X25vbmNlID0gRFJCR19NQVhfTEVOR1RIOwotKwkJZGN0eC0+bWF4X3BlcnMg PSBEUkJHX01BWF9MRU5HVEg7Ci0rCQlkY3R4LT5tYXhfYWRpbiA9IERSQkdfTUFYX0xFTkdUSDsK LSsJCX0KLSsJZWxzZQotKwkJewotKwkJZGN0eC0+bWluX2VudHJvcHkgPSBkY3R4LT5zZWVkbGVu OwotKwkJZGN0eC0+bWF4X2VudHJvcHkgPSBkY3R4LT5zZWVkbGVuOwotKwkJLyogTm9uY2Ugbm90 IHVzZWQgKi8KLSsJCWRjdHgtPm1pbl9ub25jZSA9IDA7Ci0rCQlkY3R4LT5tYXhfbm9uY2UgPSAw OwotKwkJZGN0eC0+bWF4X3BlcnMgPSBkY3R4LT5zZWVkbGVuOwotKwkJZGN0eC0+bWF4X2FkaW4g PSBkY3R4LT5zZWVkbGVuOwotKwkJfQotKwotKwlkY3R4LT5tYXhfcmVxdWVzdCA9IDE8PDE2Owot KwlkY3R4LT5yZXNlZWRfaW50ZXJ2YWwgPSAxPDwyNDsKLSsKLSsJcmV0dXJuIDE7Ci0rCX0KLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2guYy5m aXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2guYwotLS0t IG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2guYy5maXBzCTIw MTItMDItMDcgMTE6MDc6MDIuNTQ0MzkzNzMyICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRh Mi9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaGFzaC5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTQ0Mzkz NzMyICswMTAwCi1AQCAtMCwwICsxLDM3OCBAQAotKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdfaGFz aC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3Ns Lm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBt ZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5h bWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1 c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9w ZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIg YXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1p c3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9u cyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAg ICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFO RCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJ VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0r ICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSsjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQotKwotKyNp bmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCi0rCi0rLyogVGhp cyBpcyBIYXNoX2RmIGZyb20gU1AgODAwLTkwIDEwLjQuMSAqLwotKwotK3N0YXRpYyBpbnQgaGFz aF9kZihEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAotKwkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICpp bjIsIHNpemVfdCBpbjJsZW4sCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4zLCBzaXplX3Qg aW4zbGVuLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluNCwgc2l6ZV90IGluNGxlbikKLSsJ ewotKwlFVlBfTURfQ1RYICptY3R4ID0gJmRjdHgtPmQuaGFzaC5tY3R4OwotKwl1bnNpZ25lZCBj aGFyICp2dG1wID0gZGN0eC0+ZC5oYXNoLnZ0bXA7Ci0rCXVuc2lnbmVkIGNoYXIgdG1wWzZdOwot KwkvKiBTdGFuZGFyZCBvbmx5IGV2ZXIgbmVlZHMgc2VlZGxlbiBieXRlcyB3aGljaCBpcyBhbHdh eXMgbGVzcyB0aGFuCi0rCSAqIG1heGltdW0gcGVybWl0dGVkIHNvIG5vIG5lZWQgdG8gY2hlY2sg bGVuZ3RoLgotKwkgKi8KLSsJc2l6ZV90IG91dGxlbiA9IGRjdHgtPnNlZWRsZW47Ci0rCXRtcFsw XSA9IDE7Ci0rCXRtcFsxXSA9ICgob3V0bGVuICogOCkgPj4gMjQpICYgMHhmZjsKLSsJdG1wWzJd ID0gKChvdXRsZW4gKiA4KSA+PiAxNikgJiAweGZmOwotKwl0bXBbM10gPSAoKG91dGxlbiAqIDgp ID4+IDgpICYgMHhmZjsKLSsJdG1wWzRdID0gKG91dGxlbiAqIDgpICYgMHhmZjsKLSsJaWYgKCFp bjEpCi0rCQl7Ci0rCQl0bXBbNV0gPSAodW5zaWduZWQgY2hhcilpbjFsZW47Ci0rCQlpbjEgPSB0 bXAgKyA1OwotKwkJaW4xbGVuID0gMTsKLSsJCX0KLSsJZm9yICg7OykKLSsJCXsKLSsJCWlmICgh RklQU19kaWdlc3Rpbml0KG1jdHgsIGRjdHgtPmQuaGFzaC5tZCkpCi0rCQkJcmV0dXJuIDA7Ci0r CQlpZiAoIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIHRtcCwgNSkpCi0rCQkJcmV0dXJuIDA7Ci0r CQlpZiAoaW4xICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjEsIGluMWxlbikpCi0rCQkJ cmV0dXJuIDA7Ci0rCQlpZiAoaW4yICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjIsIGlu MmxlbikpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoaW4zICYmICFGSVBTX2RpZ2VzdHVwZGF0ZSht Y3R4LCBpbjMsIGluM2xlbikpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoaW40ICYmICFGSVBTX2Rp Z2VzdHVwZGF0ZShtY3R4LCBpbjQsIGluNGxlbikpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAob3V0 bGVuIDwgZGN0eC0+YmxvY2tsZW5ndGgpCi0rCQkJewotKwkJCWlmICghRklQU19kaWdlc3RmaW5h bChtY3R4LCB2dG1wLCBOVUxMKSkKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJbWVtY3B5KG91dCwgdnRt cCwgb3V0bGVuKTsKLSsJCQlPUEVOU1NMX2NsZWFuc2UodnRtcCwgZGN0eC0+YmxvY2tsZW5ndGgp OwotKwkJCXJldHVybiAxOwotKwkJCX0KLSsJCWVsc2UgaWYoIUZJUFNfZGlnZXN0ZmluYWwobWN0 eCwgb3V0LCBOVUxMKSkKLSsJCQlyZXR1cm4gMDsKLSsKLSsJCW91dGxlbiAtPSBkY3R4LT5ibG9j a2xlbmd0aDsKLSsJCWlmIChvdXRsZW4gPT0gMCkKLSsJCQlyZXR1cm4gMTsKLSsJCXRtcFswXSsr OwotKwkJb3V0ICs9IGRjdHgtPmJsb2NrbGVuZ3RoOwotKwkJfQotKwl9Ci0rCi0rCi0rLyogQWRk IGFuIHVuc2lnbmVkIGJ1ZmZlciB0byB0aGUgYnVmIHZhbHVlLCBzdG9yaW5nIHRoZSByZXN1bHQg aW4gYnVmLiBGb3IKLSsgKiB0aGlzIGFsZ29yaXRobSB0aGUgbGVuZ3RoIG9mIGlucHV0IG5ldmVy IGV4Y2VlZHMgdGhlIHNlZWQgbGVuZ3RoLgotKyAqLwotKwotK3N0YXRpYyB2b2lkIGN0eF9hZGRf YnVmKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICpidWYsCi0rCQkJCXVuc2lnbmVkIGNo YXIgKmluLCBzaXplX3QgaW5sZW4pCi0rCXsKLSsJc2l6ZV90IGkgPSBpbmxlbjsKLSsJY29uc3Qg dW5zaWduZWQgY2hhciAqcTsKLSsJdW5zaWduZWQgY2hhciBjLCAqcDsKLSsJcCA9IGJ1ZiArIGRj dHgtPnNlZWRsZW47Ci0rCXEgPSBpbiArIGlubGVuOwotKwotKwlPUEVOU1NMX2Fzc2VydChpIDw9 IGRjdHgtPnNlZWRsZW4pOwotKwotKwkvKiBTcGVjaWFsIGNhc2U6IHplcm8gbGVuZ3RoLCBqdXN0 IGluY3JlbWVudCBidWZmZXIgKi8KLSsJaWYgKGkpCi0rCQljID0gMDsKLSsJZWxzZSAKLSsJCWMg PSAxOwotKwotKwl3aGlsZSAoaSkKLSsJCXsKLSsJCWludCByOwotKwkJcC0tOwotKwkJcS0tOwot KwkJciA9ICpwICsgKnEgKyBjOwotKwkJLyogQ2FycnkgKi8KLSsJCWlmIChyID4gMHhmZikKLSsJ CQljID0gMTsKLSsJCWVsc2UKLSsJCQljID0gMDsKLSsJCSpwID0gciAmIDB4ZmY7Ci0rCQlpLS07 Ci0rCQl9Ci0rCi0rCWkgPSBkY3R4LT5zZWVkbGVuIC0gaW5sZW47Ci0rCi0rCS8qIElmIG5vdCBh ZGRpbmcgd2hvbGUgYnVmZmVyIGhhbmRsZSBmaW5hbCBjYXJyaWVzICovCi0rCWlmIChjICYmIGkp Ci0rCQl7Ci0rCQlkbwotKwkJCXsKLSsJCQlwLS07Ci0rCQkJYyA9ICpwOwotKwkJCWMrKzsKLSsJ CQkqcCA9IGM7Ci0rCQkJaWYoYykKLSsJCQkJcmV0dXJuOwotKwkJCX0gd2hpbGUoaS0tKTsKLSsJ CX0KLSsJfQotKwotKy8qIEZpbmFsaXNlIGFuZCBhZGQgaGFzaCB0byBWICovCi0rCQotK3N0YXRp YyBpbnQgY3R4X2FkZF9tZChEUkJHX0NUWCAqZGN0eCkKLSsJewotKwlpZiAoIUZJUFNfZGlnZXN0 ZmluYWwoJmRjdHgtPmQuaGFzaC5tY3R4LCBkY3R4LT5kLmhhc2gudnRtcCwgTlVMTCkpCi0rCQkJ cmV0dXJuIDA7Ci0rCWN0eF9hZGRfYnVmKGRjdHgsIGRjdHgtPmQuaGFzaC5WLCBkY3R4LT5kLmhh c2gudnRtcCwgZGN0eC0+YmxvY2tsZW5ndGgpOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRp YyBpbnQgaGFzaF9nZW4oRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90 IG91dGxlbikKLSsJewotKwlEUkJHX0hBU0hfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsKLSsJ aWYgKG91dGxlbiA9PSAwKQotKwkJcmV0dXJuIDE7Ci0rCW1lbWNweShoY3R4LT52dG1wLCBoY3R4 LT5WLCBkY3R4LT5zZWVkbGVuKTsKLSsJZm9yKDs7KQotKwkJewotKwkJRklQU19kaWdlc3Rpbml0 KCZoY3R4LT5tY3R4LCBoY3R4LT5tZCk7Ci0rCQlGSVBTX2RpZ2VzdHVwZGF0ZSgmaGN0eC0+bWN0 eCwgaGN0eC0+dnRtcCwgZGN0eC0+c2VlZGxlbik7Ci0rCQlpZiAoIShkY3R4LT54ZmxhZ3MgJiBE UkJHX0ZMQUdfVEVTVCkgJiYgIWRjdHgtPmxiX3ZhbGlkKQotKwkJCXsKLSsJCQlGSVBTX2RpZ2Vz dGZpbmFsKCZoY3R4LT5tY3R4LCBkY3R4LT5sYiwgTlVMTCk7Ci0rCQkJZGN0eC0+bGJfdmFsaWQg PSAxOwotKwkJCX0KLSsJCWVsc2UgaWYgKG91dGxlbiA8IGRjdHgtPmJsb2NrbGVuZ3RoKQotKwkJ CXsKLSsJCQlGSVBTX2RpZ2VzdGZpbmFsKCZoY3R4LT5tY3R4LCBoY3R4LT52dG1wLCBOVUxMKTsK LSsJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIGhjdHgtPnZ0bXApKQotKwkJCQly ZXR1cm4gMDsKLSsJCQltZW1jcHkob3V0LCBoY3R4LT52dG1wLCBvdXRsZW4pOwotKwkJCXJldHVy biAxOwotKwkJCX0KLSsJCWVsc2UKLSsJCQl7Ci0rCQkJRklQU19kaWdlc3RmaW5hbCgmaGN0eC0+ bWN0eCwgb3V0LCBOVUxMKTsKLSsJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIG91 dCkpCi0rCQkJCXJldHVybiAwOwotKwkJCW91dGxlbiAtPSBkY3R4LT5ibG9ja2xlbmd0aDsKLSsJ CQlpZiAob3V0bGVuID09IDApCi0rCQkJCXJldHVybiAxOwotKwkJCW91dCArPSBkY3R4LT5ibG9j a2xlbmd0aDsKLSsJCQl9Ci0rCQljdHhfYWRkX2J1ZihkY3R4LCBoY3R4LT52dG1wLCBOVUxMLCAw KTsKLSsJCX0KLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19oYXNoX2luc3RhbnRpYXRlKERSQkdf Q1RYICpkY3R4LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVu LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlX2xlbiwKLSsJ CQkJY29uc3QgdW5zaWduZWQgY2hhciAqcHN0ciwgc2l6ZV90IHBzdHJfbGVuKQotKwl7Ci0rCURS QkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOwotKwlpZiAoIWhhc2hfZGYoZGN0eCwg aGN0eC0+ViwgCi0rCQkJZW50LCBlbnRfbGVuLCBub25jZSwgbm9uY2VfbGVuLCBwc3RyLCBwc3Ry X2xlbiwKLSsJCQlOVUxMLCAwKSkKLSsJCXJldHVybiAwOwotKwlpZiAoIWhhc2hfZGYoZGN0eCwg aGN0eC0+QywgCi0rCQkJTlVMTCwgMCwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbiwKLSsJCQlOVUxM LCAwLCBOVUxMLCAwKSkKLSsJCXJldHVybiAwOwotKwotKyNpZmRlZiBIQVNIX0RSQkdfVFJBQ0UK LSsJZnByaW50ZihzdGRlcnIsICJWK0MgYWZ0ZXIgaW5zdGFudGlhdGU6XG4iKTsKLSsJaGV4cHJp bnQoc3RkZXJyLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsKLSsJaGV4cHJpbnQoc3RkZXJyLCBo Y3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKLSsjZW5kaWYKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsJ Ci0rc3RhdGljIGludCBkcmJnX2hhc2hfcmVzZWVkKERSQkdfQ1RYICpkY3R4LAotKwkJCQljb25z dCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAotKwkJCQljb25zdCB1bnNpZ25l ZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4pCi0rCXsKLSsJRFJCR19IQVNIX0NUWCAqaGN0 eCA9ICZkY3R4LT5kLmhhc2g7Ci0rCS8qIFYgYWJvdXQgdG8gYmUgdXBkYXRlZCBzbyB1c2UgQyBh cyBvdXRwdXQgaW5zdGVhZCAqLwotKwlpZiAoIWhhc2hfZGYoZGN0eCwgaGN0eC0+QywKLSsJCQlO VUxMLCAxLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuLAotKwkJCWVudCwgZW50X2xlbiwgYWRpbiwg YWRpbl9sZW4pKQotKwkJcmV0dXJuIDA7Ci0rCW1lbWNweShoY3R4LT5WLCBoY3R4LT5DLCBkY3R4 LT5zZWVkbGVuKTsKLSsJaWYgKCFoYXNoX2RmKGRjdHgsIGhjdHgtPkMsIE5VTEwsIDAsCi0rCQkJ aGN0eC0+ViwgZGN0eC0+c2VlZGxlbiwgTlVMTCwgMCwgTlVMTCwgMCkpCi0rCQlyZXR1cm4gMDsK LSsjaWZkZWYgSEFTSF9EUkJHX1RSQUNFCi0rCWZwcmludGYoc3RkZXJyLCAiVitDIGFmdGVyIHJl c2VlZDpcbiIpOwotKwloZXhwcmludChzdGRlcnIsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pOwot KwloZXhwcmludChzdGRlcnIsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOwotKyNlbmRpZgotKwly ZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19oYXNoX2dlbmVyYXRlKERSQkdfQ1RY ICpkY3R4LAotKwkJCQl1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCi0rCQkJCWNv bnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGluX2xlbikKLSsJewotKwlEUkJHX0hB U0hfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsKLSsJRVZQX01EX0NUWCAqbWN0eCA9ICZoY3R4 LT5tY3R4OwotKwl1bnNpZ25lZCBjaGFyIHRtcFs0XTsKLSsJaWYgKGFkaW4gJiYgYWRpbl9sZW4p Ci0rCQl7Ci0rCQl0bXBbMF0gPSAyOwotKwkJaWYgKCFGSVBTX2RpZ2VzdGluaXQobWN0eCwgaGN0 eC0+bWQpKQotKwkJCXJldHVybiAwOwotKwkJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1jdHgsIHRt cCwgMSkpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoIUVWUF9EaWdlc3RVcGRhdGUobWN0eCwgaGN0 eC0+ViwgZGN0eC0+c2VlZGxlbikpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoIUVWUF9EaWdlc3RV cGRhdGUobWN0eCwgYWRpbiwgYWRpbl9sZW4pKQotKwkJCXJldHVybiAwOwotKwkJaWYgKCFjdHhf YWRkX21kKGRjdHgpKQotKwkJCXJldHVybiAwOwotKwkJfQotKwlpZiAoIWhhc2hfZ2VuKGRjdHgs IG91dCwgb3V0bGVuKSkKLSsJCXJldHVybiAwOwotKwotKwl0bXBbMF0gPSAzOwotKwlpZiAoIUZJ UFNfZGlnZXN0aW5pdChtY3R4LCBoY3R4LT5tZCkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFFVlBf RGlnZXN0VXBkYXRlKG1jdHgsIHRtcCwgMSkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFFVlBfRGln ZXN0VXBkYXRlKG1jdHgsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pKQotKwkJcmV0dXJuIDA7Ci0r Ci0rCWlmICghY3R4X2FkZF9tZChkY3R4KSkKLSsJCXJldHVybiAwOwotKwotKwljdHhfYWRkX2J1 ZihkY3R4LCBoY3R4LT5WLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKLSsKLSsJdG1wWzBdID0g KGRjdHgtPnJlc2VlZF9jb3VudGVyID4+IDI0KSAmIDB4ZmY7Ci0rCXRtcFsxXSA9IChkY3R4LT5y ZXNlZWRfY291bnRlciA+PiAxNikgJiAweGZmOwotKwl0bXBbMl0gPSAoZGN0eC0+cmVzZWVkX2Nv dW50ZXIgPj4gOCkgJiAweGZmOwotKwl0bXBbM10gPSBkY3R4LT5yZXNlZWRfY291bnRlciAmIDB4 ZmY7Ci0rCWN0eF9hZGRfYnVmKGRjdHgsIGhjdHgtPlYsIHRtcCwgNCk7Ci0rI2lmZGVmIEhBU0hf RFJCR19UUkFDRQotKwlmcHJpbnRmKHN0ZGVyciwgIlYrQyBhZnRlciBnZW5lcmF0ZTpcbiIpOwot KwloZXhwcmludChzdGRlcnIsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pOwotKwloZXhwcmludChz dGRlcnIsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOwotKyNlbmRpZgotKwlyZXR1cm4gMTsKLSsJ fQotKwotK3N0YXRpYyBpbnQgZHJiZ19oYXNoX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgp Ci0rCXsKLSsJRVZQX01EX0NUWF9jbGVhbnVwKCZkY3R4LT5kLmhhc2gubWN0eCk7Ci0rCU9QRU5T U0xfY2xlYW5zZSgmZGN0eC0+ZC5oYXNoLCBzaXplb2YoRFJCR19IQVNIX0NUWCkpOwotKwlyZXR1 cm4gMTsKLSsJfQotKwotK2ludCBmaXBzX2RyYmdfaGFzaF9pbml0KERSQkdfQ1RYICpkY3R4KQot Kwl7Ci0rCWNvbnN0IEVWUF9NRCAqbWQ7Ci0rCURSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ ZC5oYXNoOwotKwltZCA9IEZJUFNfZ2V0X2RpZ2VzdGJ5bmlkKGRjdHgtPnR5cGUpOwotKwlpZiAo IW1kKQotKwkJcmV0dXJuIC0yOwotKwlzd2l0Y2ggKGRjdHgtPnR5cGUpCi0rCQl7Ci0rCQljYXNl IE5JRF9zaGExOgotKwkJZGN0eC0+c3RyZW5ndGggPSAxMjg7Ci0rCQlicmVhazsKLSsKLSsJCWNh c2UgTklEX3NoYTIyNDoKLSsJCWRjdHgtPnN0cmVuZ3RoID0gMTkyOwotKwkJYnJlYWs7Ci0rCi0r CQlkZWZhdWx0OgotKwkJZGN0eC0+c3RyZW5ndGggPSAyNTY7Ci0rCQlicmVhazsKLSsJCX0KLSsK LSsJZGN0eC0+aW5zdGFudGlhdGUgPSBkcmJnX2hhc2hfaW5zdGFudGlhdGU7Ci0rCWRjdHgtPnJl c2VlZCA9IGRyYmdfaGFzaF9yZXNlZWQ7Ci0rCWRjdHgtPmdlbmVyYXRlID0gZHJiZ19oYXNoX2dl bmVyYXRlOwotKwlkY3R4LT51bmluc3RhbnRpYXRlID0gZHJiZ19oYXNoX3VuaW5zdGFudGlhdGU7 Ci0rCi0rCWRjdHgtPmQuaGFzaC5tZCA9IG1kOwotKwlFVlBfTURfQ1RYX2luaXQoJmhjdHgtPm1j dHgpOwotKwotKwkvKiBUaGVzZSBhcmUgdGFrZW4gZnJvbSBTUCA4MDAtOTAgMTAuMSB0YWJsZSAy ICovCi0rCi0rCWRjdHgtPmJsb2NrbGVuZ3RoID0gTV9FVlBfTURfc2l6ZShtZCk7Ci0rCWlmIChk Y3R4LT5ibG9ja2xlbmd0aCA+IDMyKQotKwkJZGN0eC0+c2VlZGxlbiA9IDExMTsKLSsJZWxzZQot KwkJZGN0eC0+c2VlZGxlbiA9IDU1OwotKwotKwotKwlkY3R4LT5taW5fZW50cm9weSA9IGRjdHgt PnN0cmVuZ3RoIC8gODsKLSsJZGN0eC0+bWF4X2VudHJvcHkgPSBEUkJHX01BWF9MRU5HVEg7Ci0r Ci0rCWRjdHgtPm1pbl9ub25jZSA9IGRjdHgtPm1pbl9lbnRyb3B5IC8gMjsKLSsJZGN0eC0+bWF4 X25vbmNlID0gRFJCR19NQVhfTEVOR1RIOwotKwotKwlkY3R4LT5tYXhfcGVycyA9IERSQkdfTUFY X0xFTkdUSDsKLSsJZGN0eC0+bWF4X2FkaW4gPSBEUkJHX01BWF9MRU5HVEg7Ci0rCi0rCWRjdHgt Pm1heF9yZXF1ZXN0ID0gMTw8MTY7Ci0rCWRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IDE8PDI0Owot KwotKwlyZXR1cm4gMTsKLSsJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8v Zmlwcy9maXBzX2RyYmdfaG1hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlw cy9maXBzX2RyYmdfaG1hYy5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9m aXBzX2RyYmdfaG1hYy5jLmZpcHMJMjAxMi0wMi0wNyAxMTowNzowMi41NDQzOTM3MzIgKzAxMDAK LSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19obWFjLmMJMjAx Mi0wMi0wNyAxMTowNzowMi41NDQzOTM3MzIgKzAxMDAKLUBAIC0wLDAgKzEsMjgxIEBACi0rLyog Zmlwcy9yYW5kL2ZpcHNfZHJiZ19obWFjLmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4g TiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0 LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0r ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAg IGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3Jn LykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAq Ci0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNT TC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqLwotKwotKyNpbmNsdWRl IDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5 cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1h Yy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAiZmlwc19yYW5k X2xjbC5oIgotKwotK3N0YXRpYyBpbnQgZHJiZ19obWFjX3VwZGF0ZShEUkJHX0NUWCAqZGN0eCwK LSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4xLCBzaXplX3QgaW4xbGVuLAotKwkJCQljb25z dCB1bnNpZ25lZCBjaGFyICppbjIsIHNpemVfdCBpbjJsZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmluMywgc2l6ZV90IGluM2xlbgotKwkJCSkKLSsJewotKwlzdGF0aWMgdW5zaWduZWQg Y2hhciBjMCA9IDAsIGMxID0gMTsKLSsJRFJCR19ITUFDX0NUWCAqaG1hYyA9ICZkY3R4LT5kLmht YWM7Ci0rCUhNQUNfQ1RYICpoY3R4ID0gJmhtYWMtPmhjdHg7Ci0rCi0rCWlmICghSE1BQ19Jbml0 X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCi0r CQlyZXR1cm4gMDsKLSsJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBobWFjLT5WLCBkY3R4LT5ibG9j a2xlbmd0aCkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCAmYzAsIDEp KQotKwkJcmV0dXJuIDA7Ci0rCWlmIChpbjFsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMSwg aW4xbGVuKSkKLSsJCXJldHVybiAwOwotKwlpZiAoaW4ybGVuICYmICFITUFDX1VwZGF0ZShoY3R4 LCBpbjIsIGluMmxlbikpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKGluM2xlbiAmJiAhSE1BQ19VcGRh dGUoaGN0eCwgaW4zLCBpbjNsZW4pKQotKwkJcmV0dXJuIDA7Ci0rCi0rCWlmICghSE1BQ19GaW5h bChoY3R4LCBobWFjLT5LLCBOVUxMKSkKLSsJCXJldHVybiAwOwotKwotKwlpZiAoIUhNQUNfSW5p dF9leChoY3R4LCBobWFjLT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQot KwkJcmV0dXJuIDA7Ci0rCWlmICghSE1BQ19VcGRhdGUoaGN0eCwgaG1hYy0+ViwgZGN0eC0+Ymxv Y2tsZW5ndGgpKQotKwkJcmV0dXJuIDA7Ci0rCi0rCWlmICghSE1BQ19GaW5hbChoY3R4LCBobWFj LT5WLCBOVUxMKSkKLSsJCXJldHVybiAwOwotKwotKwlpZiAoIWluMWxlbiAmJiAhaW4ybGVuICYm ICFpbjNsZW4pCi0rCQlyZXR1cm4gMTsKLSsKLSsJaWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1h Yy0+SywgZGN0eC0+YmxvY2tsZW5ndGgsIGhtYWMtPm1kLCBOVUxMKSkKLSsJCXJldHVybiAwOwot KwlpZiAoIUhNQUNfVXBkYXRlKGhjdHgsIGhtYWMtPlYsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKLSsJ CXJldHVybiAwOwotKwlpZiAoIUhNQUNfVXBkYXRlKGhjdHgsICZjMSwgMSkpCi0rCQlyZXR1cm4g MDsKLSsJaWYgKGluMWxlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4xLCBpbjFsZW4pKQotKwkJ cmV0dXJuIDA7Ci0rCWlmIChpbjJsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMiwgaW4ybGVu KSkKLSsJCXJldHVybiAwOwotKwlpZiAoaW4zbGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjMs IGluM2xlbikpCi0rCQlyZXR1cm4gMDsKLSsKLSsJaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMt PkssIE5VTEwpKQotKwkJcmV0dXJuIDA7Ci0rCi0rCWlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGht YWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCi0rCQlyZXR1cm4gMDsK LSsJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBobWFjLT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkpCi0r CQlyZXR1cm4gMDsKLSsKLSsJaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPlYsIE5VTEwpKQot KwkJcmV0dXJuIDA7Ci0rCi0rCXJldHVybiAxOwotKwotKwl9Ci0rCi0rc3RhdGljIGludCBkcmJn X2htYWNfaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgsCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKmVudCwgc2l6ZV90IGVudF9sZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNl LCBzaXplX3Qgbm9uY2VfbGVuLAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpwc3RyLCBzaXpl X3QgcHN0cl9sZW4pCi0rCXsKLSsJRFJCR19ITUFDX0NUWCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7 Ci0rCW1lbXNldChobWFjLT5LLCAwLCBkY3R4LT5ibG9ja2xlbmd0aCk7Ci0rCW1lbXNldChobWFj LT5WLCAxLCBkY3R4LT5ibG9ja2xlbmd0aCk7Ci0rCWlmICghZHJiZ19obWFjX3VwZGF0ZShkY3R4 LAotKwkJCWVudCwgZW50X2xlbiwgbm9uY2UsIG5vbmNlX2xlbiwgcHN0ciwgcHN0cl9sZW4pKQot KwkJcmV0dXJuIDA7Ci0rCi0rI2lmZGVmIEhNQUNfRFJCR19UUkFDRQotKwlmcHJpbnRmKHN0ZGVy ciwgIksrViBhZnRlciBpbnN0YW50aWF0ZTpcbiIpOwotKwloZXhwcmludChzdGRlcnIsIGhtYWMt PkssIGhtYWMtPmJsb2NrbGVuZ3RoKTsKLSsJaGV4cHJpbnQoc3RkZXJyLCBobWFjLT5WLCBobWFj LT5ibG9ja2xlbmd0aCk7Ci0rI2VuZGlmCi0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGlu dCBkcmJnX2htYWNfcmVzZWVkKERSQkdfQ1RYICpkY3R4LAotKwkJCQljb25zdCB1bnNpZ25lZCBj aGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGlu LCBzaXplX3QgYWRpbl9sZW4pCi0rCXsKLSsJaWYgKCFkcmJnX2htYWNfdXBkYXRlKGRjdHgsCi0r CQkJZW50LCBlbnRfbGVuLCBhZGluLCBhZGluX2xlbiwgTlVMTCwgMCkpCi0rCQlyZXR1cm4gMDsK LSsKLSsjaWZkZWYgSE1BQ19EUkJHX1RSQUNFCi0rCXsKLSsJCURSQkdfSE1BQ19DVFggKmhtYWMg PSAmZGN0eC0+ZC5obWFjOwotKwkJZnByaW50ZihzdGRlcnIsICJLK1YgYWZ0ZXIgcmVzZWVkOlxu Iik7Ci0rCQloZXhwcmludChzdGRlcnIsIGhtYWMtPkssIGhtYWMtPmJsb2NrbGVuZ3RoKTsKLSsJ CWhleHByaW50KHN0ZGVyciwgaG1hYy0+ViwgaG1hYy0+YmxvY2tsZW5ndGgpOwotKwl9Ci0rI2Vu ZGlmCi0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBkcmJnX2htYWNfZ2VuZXJhdGUo RFJCR19DVFggKmRjdHgsCi0rCQkJCXVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwK LSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5fbGVuKQotKwl7Ci0r CURSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5obWFjOwotKwlITUFDX0NUWCAqaGN0eCA9 ICZobWFjLT5oY3R4OwotKwljb25zdCB1bnNpZ25lZCBjaGFyICpWdG1wID0gaG1hYy0+VjsKLSsJ aWYgKGFkaW5fbGVuICYmICFkcmJnX2htYWNfdXBkYXRlKGRjdHgsIGFkaW4sIGFkaW5fbGVuLAot KwkJCQkJCU5VTEwsIDAsIE5VTEwsIDApKQotKwkJcmV0dXJuIDA7Ci0rCWZvciAoOzspCi0rCQl7 Ci0rCQlpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwK LSsJCQkJCQkJaG1hYy0+bWQsIE5VTEwpKQotKwkJCXJldHVybiAwOwotKwkJaWYgKCFITUFDX1Vw ZGF0ZShoY3R4LCBWdG1wLCBkY3R4LT5ibG9ja2xlbmd0aCkpCi0rCQkJcmV0dXJuIDA7Ci0rCQlp ZiAoIShkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkgJiYgIWRjdHgtPmxiX3ZhbGlkKQot KwkJCXsKLSsJCQlpZiAoIUhNQUNfRmluYWwoaGN0eCwgZGN0eC0+bGIsIE5VTEwpKQotKwkJCQly ZXR1cm4gMDsKLSsJCQlkY3R4LT5sYl92YWxpZCA9IDE7Ci0rCQkJVnRtcCA9IGRjdHgtPmxiOwot KwkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCWVsc2UgaWYgKG91dGxlbiA+IGRjdHgtPmJsb2NrbGVu Z3RoKQotKwkJCXsKLSsJCQlpZiAoIUhNQUNfRmluYWwoaGN0eCwgb3V0LCBOVUxMKSkKLSsJCQkJ cmV0dXJuIDA7Ci0rCQkJaWYgKCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBvdXQpKQotKwkJ CQlyZXR1cm4gMDsKLSsJCQlWdG1wID0gb3V0OwotKwkJCX0KLSsJCWVsc2UKLSsJCQl7Ci0rCQkJ aWYgKCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPlYsIE5VTEwpKQotKwkJCQlyZXR1cm4gMDsKLSsJ CQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIGhtYWMtPlYpKQotKwkJCQlyZXR1cm4g MDsKLSsJCQltZW1jcHkob3V0LCBobWFjLT5WLCBvdXRsZW4pOwotKwkJCWJyZWFrOwotKwkJCX0K LSsJCW91dCArPSBkY3R4LT5ibG9ja2xlbmd0aDsKLSsJCW91dGxlbiAtPSBkY3R4LT5ibG9ja2xl bmd0aDsKLSsJCX0KLSsJaWYgKCFkcmJnX2htYWNfdXBkYXRlKGRjdHgsIGFkaW4sIGFkaW5fbGVu LCBOVUxMLCAwLCBOVUxMLCAwKSkKLSsJCXJldHVybiAwOwotKwotKwlyZXR1cm4gMTsKLSsJfQot KwotK3N0YXRpYyBpbnQgZHJiZ19obWFjX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpCi0r CXsKLSsJSE1BQ19DVFhfY2xlYW51cCgmZGN0eC0+ZC5obWFjLmhjdHgpOwotKwlPUEVOU1NMX2Ns ZWFuc2UoJmRjdHgtPmQuaG1hYywgc2l6ZW9mKERSQkdfSE1BQ19DVFgpKTsKLSsJcmV0dXJuIDE7 Ci0rCX0KLSsKLStpbnQgZmlwc19kcmJnX2htYWNfaW5pdChEUkJHX0NUWCAqZGN0eCkKLSsJewot Kwljb25zdCBFVlBfTUQgKm1kID0gTlVMTDsKLSsJRFJCR19ITUFDX0NUWCAqaGN0eCA9ICZkY3R4 LT5kLmhtYWM7Ci0rCWRjdHgtPnN0cmVuZ3RoID0gMjU2OwotKwlzd2l0Y2ggKGRjdHgtPnR5cGUp Ci0rCQl7Ci0rCQljYXNlIE5JRF9obWFjV2l0aFNIQTE6Ci0rCQltZCA9IEVWUF9zaGExKCk7Ci0r CQlkY3R4LT5zdHJlbmd0aCA9IDEyODsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSBOSURfaG1hY1dp dGhTSEEyMjQ6Ci0rCQltZCA9IEVWUF9zaGEyMjQoKTsKLSsJCWRjdHgtPnN0cmVuZ3RoID0gMTky OwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIE5JRF9obWFjV2l0aFNIQTI1NjoKLSsJCW1kID0gRVZQ X3NoYTI1NigpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIE5JRF9obWFjV2l0aFNIQTM4NDoKLSsJ CW1kID0gRVZQX3NoYTM4NCgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIE5JRF9obWFjV2l0aFNI QTUxMjoKLSsJCW1kID0gRVZQX3NoYTUxMigpOwotKwkJYnJlYWs7Ci0rCi0rCQlkZWZhdWx0Ogot KwkJZGN0eC0+c3RyZW5ndGggPSAwOwotKwkJcmV0dXJuIC0yOwotKwkJfQotKyAgICAgICAgZGN0 eC0+aW5zdGFudGlhdGUgPSBkcmJnX2htYWNfaW5zdGFudGlhdGU7Ci0rICAgICAgICBkY3R4LT5y ZXNlZWQgPSBkcmJnX2htYWNfcmVzZWVkOwotKyAgICAgICAgZGN0eC0+Z2VuZXJhdGUgPSBkcmJn X2htYWNfZ2VuZXJhdGU7Ci0rICAgICAgICBkY3R4LT51bmluc3RhbnRpYXRlID0gZHJiZ19obWFj X3VuaW5zdGFudGlhdGU7Ci0rCUhNQUNfQ1RYX2luaXQoJmhjdHgtPmhjdHgpOwotKwloY3R4LT5t ZCA9IG1kOwotKwlkY3R4LT5ibG9ja2xlbmd0aCA9IE1fRVZQX01EX3NpemUobWQpOwotKwlkY3R4 LT5zZWVkbGVuID0gTV9FVlBfTURfc2l6ZShtZCk7Ci0rCi0rICAgICAgICBkY3R4LT5taW5fZW50 cm9weSA9IGRjdHgtPnN0cmVuZ3RoIC8gODsKLSsgICAgICAgIGRjdHgtPm1heF9lbnRyb3B5ID0g RFJCR19NQVhfTEVOR1RIOwotKwotKyAgICAgICAgZGN0eC0+bWluX25vbmNlID0gZGN0eC0+bWlu X2VudHJvcHkgLyAyOwotKyAgICAgICAgZGN0eC0+bWF4X25vbmNlID0gRFJCR19NQVhfTEVOR1RI OwotKwotKyAgICAgICAgZGN0eC0+bWF4X3BlcnMgPSBEUkJHX01BWF9MRU5HVEg7Ci0rICAgICAg ICBkY3R4LT5tYXhfYWRpbiA9IERSQkdfTUFYX0xFTkdUSDsKLSsKLSsgICAgICAgIGRjdHgtPm1h eF9yZXF1ZXN0ID0gMTw8MTY7Ci0rICAgICAgICBkY3R4LT5yZXNlZWRfaW50ZXJ2YWwgPSAxPDwy NDsKLSsKLSsJcmV0dXJuIDE7Ci0rCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5 cHRvL2ZpcHMvZmlwc19kcmJnX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8v Zmlwcy9maXBzX2RyYmdfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBz L2ZpcHNfZHJiZ19saWIuYy5maXBzCTIwMTItMDItMDcgMTE6MDc6MDIuNTQ0MzkzNzMyICswMTAw Ci0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGliLmMJMjAx Mi0wMi0wNyAxMTowNzowMi41NDQzOTM3MzIgKzAxMDAKLUBAIC0wLDAgKzEsNTc2IEBACi0rLyog V3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRo ZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHly aWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K LSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsg KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2 ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsg KiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAo aHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NM IFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICog ICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBl cm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgot KyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBi ZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRo ZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhl IE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9y bSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRn bWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBF WFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVU T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICog U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg QlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg T1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcg SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5 cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlw c19yYW5kLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKyNpbmNsdWRlICJmaXBzX3JhbmRf bGNsLmgiCi0rCi0rLyogU3VwcG9ydCBmcmFtZXdvcmsgZm9yIFNQODAwLTkwIERSQkdzICovCi0r Ci0raW50IEZJUFNfZHJiZ19pbml0KERSQkdfQ1RYICpkY3R4LCBpbnQgdHlwZSwgdW5zaWduZWQg aW50IGZsYWdzKQotKwl7Ci0rCWludCBydjsKLSsJbWVtc2V0KGRjdHgsIDAsIHNpemVvZihEUkJH X0NUWCkpOwotKwlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEOwotKwlk Y3R4LT54ZmxhZ3MgPSBmbGFnczsKLSsJZGN0eC0+dHlwZSA9IHR5cGU7Ci0rCi0rCWRjdHgtPmlm bGFncyA9IDA7Ci0rCWRjdHgtPmVudHJvcHlfYmxvY2tsZW4gPSAwOwotKwlkY3R4LT5oZWFsdGhf Y2hlY2tfY250ID0gMDsKLSsJZGN0eC0+aGVhbHRoX2NoZWNrX2ludGVydmFsID0gRFJCR19IRUFM VEhfSU5URVJWQUw7Ci0rCi0rCXJ2ID0gZmlwc19kcmJnX2hhc2hfaW5pdChkY3R4KTsKLSsKLSsJ aWYgKHJ2ID09IC0yKQotKwkJcnYgPSBmaXBzX2RyYmdfY3RyX2luaXQoZGN0eCk7Ci0rCWlmIChy diA9PSAtMikKLSsJCXJ2ID0gZmlwc19kcmJnX2htYWNfaW5pdChkY3R4KTsKLSsKLSsJaWYgKHJ2 IDw9IDApCi0rCQl7Ci0rCQlpZiAocnYgPT0gLTIpCi0rCQkJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0lOSVQsIEZJUFNfUl9VTlNVUFBPUlRFRF9EUkJHX1RZUEUpOwotKwkJZWxzZQotKwkJCUZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTklULCBGSVBTX1JfRVJST1JfSU5JVElBTElTSU5HX0RS QkcpOwotKwkJfQotKwotKwkvKiBJZiBub3QgaW4gdGVzdCBtb2RlIHJ1biBzZWxmdGVzdHMgb24g RFJCRyBvZiB0aGUgc2FtZSB0eXBlICovCi0rCi0rCWlmICghKGRjdHgtPnhmbGFncyAmIERSQkdf RkxBR19URVNUKSkKLSsJCXsKLSsJCWlmICghRklQU19kcmJnX2hlYWx0aF9jaGVjayhkY3R4KSkK LSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOSVQsIEZJUFNfUl9TRUxGVEVT VF9GQUlMVVJFKTsKLSsJCQlyZXR1cm4gMDsKLSsJCQl9Ci0rCQl9Ci0rCi0rCXJldHVybiBydjsK LSsJfQotKwotK0RSQkdfQ1RYICpGSVBTX2RyYmdfbmV3KGludCB0eXBlLCB1bnNpZ25lZCBpbnQg ZmxhZ3MpCi0rCXsKLSsJRFJCR19DVFggKmRjdHg7Ci0rCWRjdHggPSBPUEVOU1NMX21hbGxvYyhz aXplb2YoRFJCR19DVFgpKTsKLSsJaWYgKCFkY3R4KQotKwkJewotKwkJRklQU2VycihGSVBTX0Zf RklQU19EUkJHX05FVywgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotKwkJcmV0dXJuIE5VTEw7Ci0r CQl9Ci0rCi0rCWlmICh0eXBlID09IDApCi0rCQl7Ci0rCQltZW1zZXQoZGN0eCwgMCwgc2l6ZW9m KERSQkdfQ1RYKSk7Ci0rCQlkY3R4LT50eXBlID0gMDsKLSsJCWRjdHgtPnN0YXR1cyA9IERSQkdf U1RBVFVTX1VOSU5JVElBTElTRUQ7Ci0rCQlyZXR1cm4gZGN0eDsKLSsJCX0KLSsKLSsJaWYgKEZJ UFNfZHJiZ19pbml0KGRjdHgsIHR5cGUsIGZsYWdzKSA8PSAwKQotKwkJewotKwkJT1BFTlNTTF9m cmVlKGRjdHgpOwotKwkJcmV0dXJuIE5VTEw7Ci0rCQl9Ci0rCQkKLSsJcmV0dXJuIGRjdHg7Ci0r CX0KLSsKLSt2b2lkIEZJUFNfZHJiZ19mcmVlKERSQkdfQ1RYICpkY3R4KQotKwl7Ci0rCWlmIChk Y3R4LT51bmluc3RhbnRpYXRlKQotKwkJZGN0eC0+dW5pbnN0YW50aWF0ZShkY3R4KTsKLSsJLyog RG9uJ3QgZnJlZSB1cCBkZWZhdWx0IERSQkcgKi8KLSsJaWYgKGRjdHggPT0gRklQU19nZXRfZGVm YXVsdF9kcmJnKCkpCi0rCQl7Ci0rCQltZW1zZXQoZGN0eCwgMCwgc2l6ZW9mKERSQkdfQ1RYKSk7 Ci0rCQlkY3R4LT50eXBlID0gMDsKLSsJCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5J VElBTElTRUQ7Ci0rCQl9Ci0rCWVsc2UKLSsJCXsKLSsJCU9QRU5TU0xfY2xlYW5zZSgmZGN0eC0+ ZCwgc2l6ZW9mKGRjdHgtPmQpKTsKLSsJCU9QRU5TU0xfZnJlZShkY3R4KTsKLSsJCX0KLSsJfQot KwotK3N0YXRpYyBzaXplX3QgZmlwc19nZXRfZW50cm9weShEUkJHX0NUWCAqZGN0eCwgdW5zaWdu ZWQgY2hhciAqKnBvdXQsCi0rCQkJCWludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90 IG1heF9sZW4pCi0rCXsKLSsJdW5zaWduZWQgY2hhciAqdG91dCwgKnA7Ci0rCXNpemVfdCBibCA9 IGRjdHgtPmVudHJvcHlfYmxvY2tsZW4sIHJ2OwotKwlpZiAoIWRjdHgtPmdldF9lbnRyb3B5KQot KwkJcmV0dXJuIDA7Ci0rCWlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCB8fCAhYmwp Ci0rCQlyZXR1cm4gZGN0eC0+Z2V0X2VudHJvcHkoZGN0eCwgcG91dCwgZW50cm9weSwgbWluX2xl biwgbWF4X2xlbik7Ci0rCXJ2ID0gZGN0eC0+Z2V0X2VudHJvcHkoZGN0eCwgJnRvdXQsIGVudHJv cHkgKyBibCwKLSsJCQkJbWluX2xlbiArIGJsLCBtYXhfbGVuICsgYmwpOwotKwkqcG91dCA9IHRv dXQgKyBibDsKLSsJaWYgKHJ2IDwgKG1pbl9sZW4gKyBibCkgfHwgKHJ2ICUgYmwpKQotKwkJcmV0 dXJuIDA7Ci0rCS8qIENvbXBhcmUgY29uc2VjdXRpdmUgYmxvY2tzIGZvciBjb250aW51b3VzIFBS TkcgdGVzdCAqLwotKwlmb3IgKHAgPSB0b3V0OyBwIDwgdG91dCArIHJ2IC0gYmw7IHAgKz0gYmwp Ci0rCQl7Ci0rCQlpZiAoIW1lbWNtcChwLCBwICsgYmwsIGJsKSkKLSsJCQl7Ci0rCQkJRklQU2Vy cihGSVBTX0ZfRklQU19HRVRfRU5UUk9QWSwgRklQU19SX0VOVFJPUFlfU09VUkNFX1NUVUNLKTsK LSsJCQlyZXR1cm4gMDsKLSsJCQl9Ci0rCQl9Ci0rCXJ2IC09IGJsOwotKwlpZiAocnYgPiBtYXhf bGVuKQotKwkJcmV0dXJuIG1heF9sZW47Ci0rCXJldHVybiBydjsKLSsJfQotKwotK3N0YXRpYyB2 b2lkIGZpcHNfY2xlYW51cF9lbnRyb3B5KERSQkdfQ1RYICpkY3R4LAotKwkJCQkJdW5zaWduZWQg Y2hhciAqb3V0LCBzaXplX3Qgb2xlbikKLSsJewotKwlzaXplX3QgYmw7Ci0rCWlmIChkY3R4LT54 ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkKLSsJCWJsID0gMDsKLSsJZWxzZQotKwkJYmwgPSBkY3R4 LT5lbnRyb3B5X2Jsb2NrbGVuOwotKwkvKiBDYWxsIGNsZWFudXAgd2l0aCBvcmlnaW5hbCBhcmd1 bWVudHMgKi8KLSsJZGN0eC0+Y2xlYW51cF9lbnRyb3B5KGRjdHgsIG91dCAtIGJsLCBvbGVuICsg YmwpOwotKwl9Ci0rCi0rCi0raW50IEZJUFNfZHJiZ19pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0 eCwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGVycywgc2l6ZV90IHBlcnNsZW4pCi0rCXsK LSsJc2l6ZV90IGVudGxlbiA9IDAsIG5vbmNlbGVuID0gMDsKLSsJdW5zaWduZWQgY2hhciAqbm9u Y2UgPSBOVUxMLCAqZW50cm9weSA9IE5VTEw7Ci0rCi0rI2lmIDAKLSsJLyogUHV0IGhlcmUgc28g ZXJyb3Igc2NyaXB0IHBpY2tzIHRoZW0gdXAgKi8KLSsJRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0lOU1RBTlRJQVRFLAotKwkJCQlGSVBTX1JfUEVSU09OQUxJU0FUSU9OX1NUUklOR19UT09fTE9O Ryk7Ci0rCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQU19SX0lOX0VS Uk9SX1NUQVRFKTsKLSsJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBT X1JfQUxSRUFEWV9JTlNUQU5USUFURUQpOwotKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5T VEFOVElBVEUsIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VOVFJPUFkpOwotKwlGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX05PTkNF KTsKLSsJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfSU5TVEFO VElBVEVfRVJST1IpOwotKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJ UFNfUl9EUkJHX05PVF9JTklUSUFMSVNFRCk7Ci0rI2VuZGlmCi0rCi0rCWludCByID0gMDsKLSsK LSsJaWYgKHBlcnNsZW4gPiBkY3R4LT5tYXhfcGVycykKLSsJCXsKLSsJCXIgPSBGSVBTX1JfUEVS U09OQUxJU0FUSU9OX1NUUklOR19UT09fTE9ORzsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlp ZiAoIWRjdHgtPmluc3RhbnRpYXRlKQotKwkJewotKwkJciA9IEZJUFNfUl9EUkJHX05PVF9JTklU SUFMSVNFRDsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoZGN0eC0+c3RhdHVzICE9IERS QkdfU1RBVFVTX1VOSU5JVElBTElTRUQpCi0rCQl7Ci0rCQlpZiAoZGN0eC0+c3RhdHVzID09IERS QkdfU1RBVFVTX0VSUk9SKQotKwkJCXIgPSBGSVBTX1JfSU5fRVJST1JfU1RBVEU7Ci0rCQllbHNl Ci0rCQkJciA9IEZJUFNfUl9BTFJFQURZX0lOU1RBTlRJQVRFRDsKLSsJCWdvdG8gZW5kOwotKwkJ fQotKwotKwlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19FUlJPUjsKLSsKLSsJZW50bGVuID0g Zmlwc19nZXRfZW50cm9weShkY3R4LCAmZW50cm9weSwgZGN0eC0+c3RyZW5ndGgsCi0rCQkJCWRj dHgtPm1pbl9lbnRyb3B5LCBkY3R4LT5tYXhfZW50cm9weSk7Ci0rCi0rCWlmIChlbnRsZW4gPCBk Y3R4LT5taW5fZW50cm9weSB8fCBlbnRsZW4gPiBkY3R4LT5tYXhfZW50cm9weSkKLSsJCXsKLSsJ CXIgPSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRST1BZOwotKwkJZ290byBlbmQ7Ci0rCQl9 Ci0rCi0rCWlmIChkY3R4LT5tYXhfbm9uY2UgPiAwICYmIGRjdHgtPmdldF9ub25jZSkKLSsJCXsK LSsJCW5vbmNlbGVuID0gZGN0eC0+Z2V0X25vbmNlKGRjdHgsICZub25jZSwKLSsJCQkJCWRjdHgt PnN0cmVuZ3RoIC8gMiwKLSsJCQkJCWRjdHgtPm1pbl9ub25jZSwgZGN0eC0+bWF4X25vbmNlKTsK LSsKLSsJCWlmIChub25jZWxlbiA8IGRjdHgtPm1pbl9ub25jZSB8fCBub25jZWxlbiA+IGRjdHgt Pm1heF9ub25jZSkKLSsJCQl7Ci0rCQkJciA9IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX05PTkNF OwotKwkJCWdvdG8gZW5kOwotKwkJCX0KLSsKLSsJCX0KLSsKLSsJaWYgKCFkY3R4LT5pbnN0YW50 aWF0ZShkY3R4LCAKLSsJCQkJZW50cm9weSwgZW50bGVuLAotKwkJCQlub25jZSwgbm9uY2VsZW4s Ci0rCQkJCXBlcnMsIHBlcnNsZW4pKQotKwkJewotKwkJciA9IEZJUFNfUl9FUlJPUl9JTlNUQU5U SUFUSU5HX0RSQkc7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsKLSsJZGN0eC0+c3RhdHVzID0g RFJCR19TVEFUVVNfUkVBRFk7Ci0rCWlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfQ1VTVE9NX1JF U0VFRCkpCi0rCQlkY3R4LT5yZXNlZWRfY291bnRlciA9IDE7Ci0rCi0rCWVuZDoKLSsKLSsJaWYg KGVudHJvcHkgJiYgZGN0eC0+Y2xlYW51cF9lbnRyb3B5KQotKwkJZmlwc19jbGVhbnVwX2VudHJv cHkoZGN0eCwgZW50cm9weSwgZW50bGVuKTsKLSsKLSsJaWYgKG5vbmNlICYmIGRjdHgtPmNsZWFu dXBfbm9uY2UpCi0rCQlkY3R4LT5jbGVhbnVwX25vbmNlKGRjdHgsIG5vbmNlLCBub25jZWxlbik7 Ci0rCi0rCWlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfUkVBRFkpCi0rCQlyZXR1cm4g MTsKLSsKLSsJaWYgKHIgJiYgIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0ZMQUdfTk9FUlIpKQotKwkJ RklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCByKTsKLSsKLSsJcmV0dXJuIDA7 Ci0rCi0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdfcmVzZWVkKERSQkdfQ1RYICpkY3R4LAotKwkJ CWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuLCBpbnQgaGNoZWNrKQot Kwl7Ci0rCXVuc2lnbmVkIGNoYXIgKmVudHJvcHkgPSBOVUxMOwotKwlzaXplX3QgZW50bGVuID0g MDsKLSsJaW50IHIgPSAwOwotKwotKyNpZiAwCi0rCUZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVE LCBGSVBTX1JfTk9UX0lOU1RBTlRJQVRFRCk7Ci0rCUZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVE LCBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9ORyk7Ci0rI2VuZGlmCi0rCWlmIChkY3R4 LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfUkVBRFkKLSsJCSYmIGRjdHgtPnN0YXR1cyAhPSBEUkJH X1NUQVRVU19SRVNFRUQpCi0rCQl7Ci0rCQlpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVT X0VSUk9SKQotKwkJCXIgPSBGSVBTX1JfSU5fRVJST1JfU1RBVEU7Ci0rCQllbHNlIGlmKGRjdHgt PnN0YXR1cyA9PSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKQotKwkJCXIgPSBGSVBTX1JfTk9U X0lOU1RBTlRJQVRFRDsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIWFkaW4pCi0rCQlh ZGlubGVuID0gMDsKLSsJZWxzZSBpZiAoYWRpbmxlbiA+IGRjdHgtPm1heF9hZGluKQotKwkJewot KwkJciA9IEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX1RPT19MT05HOwotKwkJZ290byBlbmQ7Ci0r CQl9Ci0rCi0rCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX0VSUk9SOwotKwkvKiBQZWZvcm0g aGVhbHRoIGNoZWNrIG9uIGFsbCByZXNlZWQgb3BlcmF0aW9ucyBpZiBub3QgYSBwcmVkaWN0aW9u Ci0rCSAqIHJlc2lzdGFuY2UgcmVxdWVzdCBhbmQgbm90IGluIHRlc3QgbW9kZS4KLSsJICovCi0r CWlmIChoY2hlY2sgJiYgIShkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkpCi0rCQl7Ci0r CQlpZiAoIUZJUFNfZHJiZ19oZWFsdGhfY2hlY2soZGN0eCkpCi0rCQkJewotKwkJCXIgPSBGSVBT X1JfU0VMRlRFU1RfRkFJTFVSRTsKLSsJCQlnb3RvIGVuZDsKLSsJCQl9Ci0rCQl9Ci0rCi0rCWVu dGxlbiA9IGZpcHNfZ2V0X2VudHJvcHkoZGN0eCwgJmVudHJvcHksIGRjdHgtPnN0cmVuZ3RoLAot KwkJCQlkY3R4LT5taW5fZW50cm9weSwgZGN0eC0+bWF4X2VudHJvcHkpOwotKwotKwlpZiAoZW50 bGVuIDwgZGN0eC0+bWluX2VudHJvcHkgfHwgZW50bGVuID4gZGN0eC0+bWF4X2VudHJvcHkpCi0r CQl7Ci0rCQlyID0gRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWTsKLSsJCWdvdG8gZW5k OwotKwkJfQotKwotKwlpZiAoIWRjdHgtPnJlc2VlZChkY3R4LCBlbnRyb3B5LCBlbnRsZW4sIGFk aW4sIGFkaW5sZW4pKQotKwkJZ290byBlbmQ7Ci0rCi0rCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RB VFVTX1JFQURZOwotKwlpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQpKQot KwkJZGN0eC0+cmVzZWVkX2NvdW50ZXIgPSAxOwotKwllbmQ6Ci0rCi0rCWlmIChlbnRyb3B5ICYm IGRjdHgtPmNsZWFudXBfZW50cm9weSkKLSsJCWZpcHNfY2xlYW51cF9lbnRyb3B5KGRjdHgsIGVu dHJvcHksIGVudGxlbik7Ci0rCi0rCWlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfUkVB RFkpCi0rCQlyZXR1cm4gMTsKLSsKLSsJaWYgKHIgJiYgIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0ZM QUdfTk9FUlIpKQotKwkJRklQU2VycihGSVBTX0ZfRFJCR19SRVNFRUQsIHIpOwotKwotKwlyZXR1 cm4gMDsKLSsJfQotKwotK2ludCBGSVBTX2RyYmdfcmVzZWVkKERSQkdfQ1RYICpkY3R4LAotKwkJ CWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQotKwl7Ci0rCXJldHVy biBkcmJnX3Jlc2VlZChkY3R4LCBhZGluLCBhZGlubGVuLCAxKTsKLSsJfQotKwotK3N0YXRpYyBp bnQgZmlwc19kcmJnX2NoZWNrKERSQkdfQ1RYICpkY3R4KQotKwl7Ci0rCWlmIChkY3R4LT54Zmxh Z3MgJiBEUkJHX0ZMQUdfVEVTVCkKLSsJCXJldHVybiAxOwotKwlkY3R4LT5oZWFsdGhfY2hlY2tf Y250Kys7Ci0rCWlmIChkY3R4LT5oZWFsdGhfY2hlY2tfY250ID49IGRjdHgtPmhlYWx0aF9jaGVj a19pbnRlcnZhbCkKLSsJCXsKLSsJCWlmICghRklQU19kcmJnX2hlYWx0aF9jaGVjayhkY3R4KSkK LSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0NIRUNLLCBGSVBTX1JfU0VMRlRF U1RfRkFJTFVSRSk7Ci0rCQkJcmV0dXJuIDA7Ci0rCQkJfQotKwkJfQotKwlyZXR1cm4gMTsKLSsJ fQotKwotK2ludCBGSVBTX2RyYmdfZ2VuZXJhdGUoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNo YXIgKm91dCwgc2l6ZV90IG91dGxlbiwKLSsJCQlpbnQgcHJlZGljdGlvbl9yZXNpc3RhbmNlLAot KwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQotKwl7Ci0rCWlu dCByID0gMDsKLSsKLSsJaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfR0VORVJBVEUsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwot KwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCi0rCWlmICghZmlwc19kcmJnX2NoZWNrKGRjdHgpKQotKwkJ cmV0dXJuIDA7Ci0rCi0rCWlmIChkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfUkVBRFkKLSsJ CSYmIGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19SRVNFRUQpCi0rCQl7Ci0rCQlpZiAoZGN0 eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX0VSUk9SKQotKwkJCXIgPSBGSVBTX1JfSU5fRVJST1Jf U1RBVEU7Ci0rCQllbHNlIGlmKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19VTklOSVRJQUxJ U0VEKQotKwkJCXIgPSBGSVBTX1JfTk9UX0lOU1RBTlRJQVRFRDsKLSsJCWdvdG8gZW5kOwotKwkJ fQotKwotKwlpZiAob3V0bGVuID4gZGN0eC0+bWF4X3JlcXVlc3QpCi0rCQl7Ci0rCQlyID0gRklQ U19SX1JFUVVFU1RfVE9PX0xBUkdFX0ZPUl9EUkJHOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCi0r CWlmIChhZGlubGVuID4gZGN0eC0+bWF4X2FkaW4pCi0rCQl7Ci0rCQlyID0gRklQU19SX0FERElU SU9OQUxfSU5QVVRfVE9PX0xPTkc7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKGRjdHgt PmlmbGFncyAmIERSQkdfQ1VTVE9NX1JFU0VFRCkKLSsJCWRjdHgtPmdlbmVyYXRlKGRjdHgsIE5V TEwsIG91dGxlbiwgTlVMTCwgMCk7Ci0rCWVsc2UgaWYgKGRjdHgtPnJlc2VlZF9jb3VudGVyID49 IGRjdHgtPnJlc2VlZF9pbnRlcnZhbCkKLSsJCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1JF U0VFRDsKLSsKLSsJaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRVNFRUQgfHwgcHJl ZGljdGlvbl9yZXNpc3RhbmNlKQotKwkJewotKwkJLyogSWYgcHJlZGljdGlvbiByZXNpc3RhbmNl IHJlcXVlc3QgZG9uJ3QgZG8gaGVhbHRoIGNoZWNrICovCi0rCQlpbnQgaGNoZWNrID0gcHJlZGlj dGlvbl9yZXNpc3RhbmNlID8gMCA6IDE7Ci0rCQkKLSsJCWlmICghZHJiZ19yZXNlZWQoZGN0eCwg YWRpbiwgYWRpbmxlbiwgaGNoZWNrKSkKLSsJCQl7Ci0rCQkJciA9IEZJUFNfUl9SRVNFRURfRVJS T1I7Ci0rCQkJZ290byBlbmQ7Ci0rCQkJfQotKwkJYWRpbiA9IE5VTEw7Ci0rCQlhZGlubGVuID0g MDsKLSsJCX0KLSsKLSsJaWYgKCFkY3R4LT5nZW5lcmF0ZShkY3R4LCBvdXQsIG91dGxlbiwgYWRp biwgYWRpbmxlbikpCi0rCQl7Ci0rCQlyID0gRklQU19SX0dFTkVSQVRFX0VSUk9SOwotKwkJZGN0 eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfRVJST1I7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsJaWYg KCEoZGN0eC0+aWZsYWdzICYgRFJCR19DVVNUT01fUkVTRUVEKSkKLSsJCXsKLSsJCWlmIChkY3R4 LT5yZXNlZWRfY291bnRlciA+PSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWwpCi0rCQkJZGN0eC0+c3Rh dHVzID0gRFJCR19TVEFUVVNfUkVTRUVEOwotKwkJZWxzZQotKwkJCWRjdHgtPnJlc2VlZF9jb3Vu dGVyKys7Ci0rCQl9Ci0rCi0rCWVuZDoKLSsJaWYgKHIpCi0rCQl7Ci0rCQlpZiAoIShkY3R4LT5p ZmxhZ3MgJiBEUkJHX0ZMQUdfTk9FUlIpKQotKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19H RU5FUkFURSwgcik7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsK LStpbnQgRklQU19kcmJnX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJaW50 IHJ2OwotKwlpZiAoIWRjdHgtPnVuaW5zdGFudGlhdGUpCi0rCQlydiA9IDE7Ci0rCWVsc2UKLSsJ CXJ2ID0gZGN0eC0+dW5pbnN0YW50aWF0ZShkY3R4KTsKLSsJLyogQWx0aG91Z2ggd2UnZCBsaWtl IHRvIGNsZWFuc2UgaGVyZSB3ZSBjYW4ndCBiZWNhdXNlIHdlIGhhdmUgdG8KLSsJICogdGVzdCB0 aGUgdW5pbnN0YW50aWF0ZSByZWFsbHkgemVyb2VzIHRoZSBkYXRhLgotKwkgKi8KLSsJbWVtc2V0 KCZkY3R4LT5kLCAwLCBzaXplb2YoZGN0eC0+ZCkpOwotKwlkY3R4LT5zdGF0dXMgPSBEUkJHX1NU QVRVU19VTklOSVRJQUxJU0VEOwotKwkvKiBJZiBtZXRob2QgaGFzIHByb2JsZW1zIHVuaW5zdGFu dGlhdGluZywgcmV0dXJuIGVycm9yICovCi0rCXJldHVybiBydjsKLSsJfQotKwotK2ludCBGSVBT X2RyYmdfc2V0X2NhbGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwKLSsJc2l6ZV90ICgqZ2V0X2VudHJv cHkpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKwkJCQlpbnQgZW50cm9w eSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKSwKLSsJdm9pZCAoKmNsZWFudXBfZW50 cm9weSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbiksCi0r CXNpemVfdCBlbnRyb3B5X2Jsb2NrbGVuLAotKwlzaXplX3QgKCpnZXRfbm9uY2UpKERSQkdfQ1RY ICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKwkJCQlpbnQgZW50cm9weSwgc2l6ZV90IG1p bl9sZW4sIHNpemVfdCBtYXhfbGVuKSwKLSsJdm9pZCAoKmNsZWFudXBfbm9uY2UpKERSQkdfQ1RY ICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pKQotKwl7Ci0rCWlmIChkY3R4 LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKLSsJCXJldHVybiAwOwotKwlk Y3R4LT5lbnRyb3B5X2Jsb2NrbGVuID0gZW50cm9weV9ibG9ja2xlbjsKLSsJZGN0eC0+Z2V0X2Vu dHJvcHkgPSBnZXRfZW50cm9weTsKLSsJZGN0eC0+Y2xlYW51cF9lbnRyb3B5ID0gY2xlYW51cF9l bnRyb3B5OwotKwlkY3R4LT5nZXRfbm9uY2UgPSBnZXRfbm9uY2U7Ci0rCWRjdHgtPmNsZWFudXBf bm9uY2UgPSBjbGVhbnVwX25vbmNlOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK2ludCBGSVBTX2Ry Ymdfc2V0X3JhbmRfY2FsbGJhY2tzKERSQkdfQ1RYICpkY3R4LAotKwlzaXplX3QgKCpnZXRfYWRp bikoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQpLAotKwl2b2lkICgqY2xlYW51 cF9hZGluKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKSwK LSsJaW50ICgqcmFuZF9zZWVkX2NiKShEUkJHX0NUWCAqY3R4LCBjb25zdCB2b2lkICpidWYsIGlu dCBudW0pLAotKwlpbnQgKCpyYW5kX2FkZF9jYikoRFJCR19DVFggKmN0eCwKLSsJCQkJY29uc3Qg dm9pZCAqYnVmLCBpbnQgbnVtLCBkb3VibGUgZW50cm9weSkpCi0rCXsKLSsJaWYgKGRjdHgtPnN0 YXR1cyAhPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKQotKwkJcmV0dXJuIDA7Ci0rCWRjdHgt PmdldF9hZGluID0gZ2V0X2FkaW47Ci0rCWRjdHgtPmNsZWFudXBfYWRpbiA9IGNsZWFudXBfYWRp bjsKLSsJZGN0eC0+cmFuZF9zZWVkX2NiID0gcmFuZF9zZWVkX2NiOwotKwlkY3R4LT5yYW5kX2Fk ZF9jYiA9IHJhbmRfYWRkX2NiOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3ZvaWQgKkZJUFNfZHJi Z19nZXRfYXBwX2RhdGEoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJcmV0dXJuIGRjdHgtPmFwcF9k YXRhOwotKwl9Ci0rCi0rdm9pZCBGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKERSQkdfQ1RYICpkY3R4 LCB2b2lkICphcHBfZGF0YSkKLSsJewotKwlkY3R4LT5hcHBfZGF0YSA9IGFwcF9kYXRhOwotKwl9 Ci0rCi0rc2l6ZV90IEZJUFNfZHJiZ19nZXRfYmxvY2tsZW5ndGgoRFJCR19DVFggKmRjdHgpCi0r CXsKLSsJcmV0dXJuIGRjdHgtPmJsb2NrbGVuZ3RoOwotKwl9Ci0rCi0raW50IEZJUFNfZHJiZ19n ZXRfc3RyZW5ndGgoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJcmV0dXJuIGRjdHgtPnN0cmVuZ3Ro OwotKwl9Ci0rCi0rdm9pZCBGSVBTX2RyYmdfc2V0X2NoZWNrX2ludGVydmFsKERSQkdfQ1RYICpk Y3R4LCBpbnQgaW50ZXJ2YWwpCi0rCXsKLSsJZGN0eC0+aGVhbHRoX2NoZWNrX2ludGVydmFsID0g aW50ZXJ2YWw7Ci0rCX0KLSsKLSt2b2lkIEZJUFNfZHJiZ19zZXRfcmVzZWVkX2ludGVydmFsKERS QkdfQ1RYICpkY3R4LCBpbnQgaW50ZXJ2YWwpCi0rCXsKLSsJZGN0eC0+cmVzZWVkX2ludGVydmFs ID0gaW50ZXJ2YWw7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdfc3RpY2sgPSAwOwotKwotK3Zv aWQgRklQU19kcmJnX3N0aWNrKGludCBvbm9mZikKLSsJewotKwlkcmJnX3N0aWNrID0gb25vZmY7 Ci0rCX0KLSsKLSsvKiBDb250aW51b3VzIERSQkcgdXRpbGl0eSBmdW5jdGlvbiAqLwotK2ludCBm aXBzX2RyYmdfY3BybmdfdGVzdChEUkJHX0NUWCAqZGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAq b3V0KQotKwl7Ci0rCS8qIE5vIENQUk5HIGluIHRlc3QgbW9kZSAqLwotKwlpZiAoZGN0eC0+eGZs YWdzICYgRFJCR19GTEFHX1RFU1QpCi0rCQlyZXR1cm4gMTsKLSsJLyogQ2hlY2sgYmxvY2sgaXMg dmFsaWQ6IHNob3VsZCBuZXZlciBoYXBwZW4gKi8KLSsJaWYgKGRjdHgtPmxiX3ZhbGlkID09IDAp Ci0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfQ1BSTkdfVEVTVCwgRklQU19SX0lO VEVSTkFMX0VSUk9SKTsKLSsJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKLSsJCXJldHVybiAw OwotKwkJfQotKwlpZiAoZHJiZ19zdGljaykKLSsJCW1lbWNweShkY3R4LT5sYiwgb3V0LCBkY3R4 LT5ibG9ja2xlbmd0aCk7Ci0rCS8qIENoZWNrIGFnYWluc3QgbGFzdCBibG9jazogZmFpbCBpZiBt YXRjaCAqLwotKwlpZiAoIW1lbWNtcChkY3R4LT5sYiwgb3V0LCBkY3R4LT5ibG9ja2xlbmd0aCkp Ci0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfQ1BSTkdfVEVTVCwgRklQU19SX0RS QkdfU1RVQ0spOwotKwkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOwotKwkJcmV0dXJuIDA7Ci0r CQl9Ci0rCS8qIFNhdmUgbGFzdCBibG9jayBmb3IgbmV4dCBjb21wYXJpc29uICovCi0rCW1lbWNw eShkY3R4LT5sYiwgb3V0LCBkY3R4LT5ibG9ja2xlbmd0aCk7Ci0rCXJldHVybiAxOwotKwl9Ci1k aWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMu ZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMKLS0t LSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMuZmlwcwky MDEyLTAyLTA3IDExOjA3OjAyLjU0NDM5MzczMiArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0 YTIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3JhbmQuYwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0NDM5 MzczMiArMDEwMAotQEAgLTAsMCArMSwxNzIgQEAKLSsvKiBmaXBzL3JhbmQvZmlwc19kcmJnX3Jh bmQuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNz bC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUg bWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0r ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBu YW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUg dXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBG b3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BP cGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wi IGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJt aXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlv bnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICog ICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBB TkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICog SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ REVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT IChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK LSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot KyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5j bHVkZSAiZmlwc19yYW5kX2xjbC5oIgotKwotKy8qIE1hcHBpbmcgb2YgU1A4MDAtOTAgRFJCR3Mg dG8gT3BlblNTTCBSQU5EX01FVEhPRCAqLwotKwotKy8qIFNpbmNlIHdlIG9ubHkgaGF2ZSBvbmUg Z2xvYmFsIFBSTkcgdXNlZCBhdCBhbnkgdGltZSBpbiBPcGVuU1NMIHVzZSBhIGdsb2JhbAotKyAq IHZhcmlhYmxlIHRvIHN0b3JlIGNvbnRleHQuCi0rICovCi0rCi0rc3RhdGljIERSQkdfQ1RYIG9z c2xfZGN0eDsKLSsKLStEUkJHX0NUWCAqRklQU19nZXRfZGVmYXVsdF9kcmJnKHZvaWQpCi0rCXsK LSsJcmV0dXJuICZvc3NsX2RjdHg7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19ieXRl cyh1bnNpZ25lZCBjaGFyICpvdXQsIGludCBjb3VudCkKLSsJewotKwlEUkJHX0NUWCAqZGN0eCA9 ICZvc3NsX2RjdHg7Ci0rCWludCBydiA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgKmFkaW4gPSBOVUxM OwotKwlzaXplX3QgYWRpbmxlbiA9IDA7Ci0rCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFO RCk7Ci0rCWRvIAotKwkJewotKwkJc2l6ZV90IHJjbnQ7Ci0rCQlpZiAoY291bnQgPiAoaW50KWRj dHgtPm1heF9yZXF1ZXN0KQotKwkJCXJjbnQgPSBkY3R4LT5tYXhfcmVxdWVzdDsKLSsJCWVsc2UK LSsJCQlyY250ID0gY291bnQ7Ci0rCQlpZiAoZGN0eC0+Z2V0X2FkaW4pCi0rCQkJewotKwkJCWFk aW5sZW4gPSBkY3R4LT5nZXRfYWRpbihkY3R4LCAmYWRpbik7Ci0rCQkJaWYgKGFkaW5sZW4gJiYg IWFkaW4pCi0rCQkJCXsKLSsJCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0JZVEVTLCBGSVBT X1JfRVJST1JfUkVUUklFVklOR19BRERJVElPTkFMX0lOUFVUKTsKLSsJCQkJZ290byBlcnI7Ci0r CQkJCX0KLSsJCQl9Ci0rCQlydiA9IEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCBvdXQsIHJjbnQs IDAsIGFkaW4sIGFkaW5sZW4pOwotKwkJaWYgKGFkaW4pCi0rCQkJewotKwkJCWlmIChkY3R4LT5j bGVhbnVwX2FkaW4pCi0rCQkJCWRjdHgtPmNsZWFudXBfYWRpbihkY3R4LCBhZGluLCBhZGlubGVu KTsKLSsJCQlhZGluID0gTlVMTDsKLSsJCQl9Ci0rCQlpZiAoIXJ2KQotKwkJCWdvdG8gZXJyOwot KwkJb3V0ICs9IHJjbnQ7Ci0rCQljb3VudCAtPSByY250OwotKwkJfQotKwl3aGlsZSAoY291bnQp OwotKwlydiA9IDE7Ci0rCWVycjoKLSsJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQp OwotKwlyZXR1cm4gcnY7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19wc2V1ZG8odW5z aWduZWQgY2hhciAqb3V0LCBpbnQgY291bnQpCi0rCXsKLSsJaWYgKGZpcHNfZHJiZ19ieXRlcyhv dXQsIGNvdW50KSA8PSAwKQotKwkJcmV0dXJuIC0xOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0 YXRpYyBpbnQgZmlwc19kcmJnX3N0YXR1cyh2b2lkKQotKwl7Ci0rCURSQkdfQ1RYICpkY3R4ID0g Jm9zc2xfZGN0eDsKLSsJaW50IHJ2OwotKwlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX1JBTkQp OwotKwlydiA9IGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRUFEWSA/IDEgOiAwOwotKwlD UllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldHVybiBydjsKLSsJfQotKwot K3N0YXRpYyB2b2lkIGZpcHNfZHJiZ19jbGVhbnVwKHZvaWQpCi0rCXsKLSsJRFJCR19DVFggKmRj dHggPSAmb3NzbF9kY3R4OwotKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlG SVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KTsKLSsJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19M T0NLX1JBTkQpOwotKwl9Ci0rCi0rc3RhdGljIGludCBmaXBzX2RyYmdfc2VlZChjb25zdCB2b2lk ICpzZWVkLCBpbnQgc2VlZGxlbikKLSsJewotKwlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7 Ci0rCWlmIChkY3R4LT5yYW5kX3NlZWRfY2IpCi0rCQlyZXR1cm4gZGN0eC0+cmFuZF9zZWVkX2Ni KGRjdHgsIHNlZWQsIHNlZWRsZW4pOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQg Zmlwc19kcmJnX2FkZChjb25zdCB2b2lkICpzZWVkLCBpbnQgc2VlZGxlbiwKLSsJCQkJCWRvdWJs ZSBhZGRfZW50cm9weSkKLSsJewotKwlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7Ci0rCWlm IChkY3R4LT5yYW5kX2FkZF9jYikKLSsJCXJldHVybiBkY3R4LT5yYW5kX2FkZF9jYihkY3R4LCBz ZWVkLCBzZWVkbGVuLCBhZGRfZW50cm9weSk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGlj IGNvbnN0IFJBTkRfTUVUSE9EIHJhbmRfZHJiZ19tZXRoID0KLSsJewotKwlmaXBzX2RyYmdfc2Vl ZCwKLSsJZmlwc19kcmJnX2J5dGVzLAotKwlmaXBzX2RyYmdfY2xlYW51cCwKLSsJZmlwc19kcmJn X2FkZCwKLSsJZmlwc19kcmJnX3BzZXVkbywKLSsJZmlwc19kcmJnX3N0YXR1cwotKwl9OwotKwot K2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX2RyYmdfbWV0aG9kKHZvaWQpCi0rCXsKLSsJcmV0dXJu ICZyYW5kX2RyYmdfbWV0aDsKLSsJfQotKwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9j cnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIv Y3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEy L2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5jLmZpcHMJMjAxMi0wMi0wNyAxMTowNzow Mi41NDUzOTM3NDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2Zp cHNfZHJiZ19zZWxmdGVzdC5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTQ1MzkzNzQwICswMTAwCi1A QCAtMCwwICsxLDg2MiBAQAotKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdfc2VsZnRlc3QuYyAqLwot Ky8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZv ciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBD b3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAq Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz Ci0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwot KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9y Zy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93 bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0r ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCi0rI2luY2x1ZGUgImZp cHNfbG9jbC5oIgotKwotKyNpbmNsdWRlICJmaXBzX2RyYmdfc2VsZnRlc3QuaCIKLSsKLSt0eXBl ZGVmIHN0cnVjdCB7Ci0rCWludCBwb3N0OwotKwlpbnQgbmlkOwotKwl1bnNpZ25lZCBpbnQgZmxh Z3M7Ci0rCi0rCS8qIEtBVCBkYXRhIGZvciBubyBQUiAqLwotKwljb25zdCB1bnNpZ25lZCBjaGFy ICplbnQ7Ci0rCXNpemVfdCBlbnRsZW47Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlOwot KwlzaXplX3Qgbm9uY2VsZW47Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnM7Ci0rCXNpemVf dCBwZXJzbGVuOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGluOwotKwlzaXplX3QgYWRpbmxl bjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqZW50cmVzZWVkOwotKwlzaXplX3QgZW50cmVzZWVk bGVuOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGlucmVzZWVkOwotKwlzaXplX3QgYWRpbnJl c2VlZGxlbjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbjI7Ci0rCXNpemVfdCBhZGluMmxl bjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0OwotKwlzaXplX3Qga2F0bGVuOwotKwljb25z dCB1bnNpZ25lZCBjaGFyICprYXQyOwotKwlzaXplX3Qga2F0MmxlbjsKLSsKLSsJLyogS0FUIGRh dGEgZm9yIFBSICovCi0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudF9wcjsKLSsJc2l6ZV90IGVu dGxlbl9wcjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2VfcHI7Ci0rCXNpemVfdCBub25j ZWxlbl9wcjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqcGVyc19wcjsKLSsJc2l6ZV90IHBlcnNs ZW5fcHI7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW5fcHI7Ci0rCXNpemVfdCBhZGlubGVu X3ByOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICplbnRwcl9wcjsKLSsJc2l6ZV90IGVudHBybGVu X3ByOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGluZ19wcjsKLSsJc2l6ZV90IGFkaW5nbGVu X3ByOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICplbnRnX3ByOwotKwlzaXplX3QgZW50Z2xlbl9w cjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0X3ByOwotKwlzaXplX3Qga2F0bGVuX3ByOwot Kwljb25zdCB1bnNpZ25lZCBjaGFyICprYXQyX3ByOwotKwlzaXplX3Qga2F0Mmxlbl9wcjsKLSsK LSsJfSBEUkJHX1NFTEZURVNUX0RBVEE7Ci0rCi0rI2RlZmluZSBtYWtlX2RyYmdfdGVzdF9kYXRh KG5pZCwgZmxhZywgcHIsIHApIHtwLCBuaWQsIGZsYWcgfCBEUkJHX0ZMQUdfVEVTVCwgXAotKwlw ciMjX2VudHJvcHlpbnB1dCwgc2l6ZW9mKHByIyNfZW50cm9weWlucHV0KSwgXAotKwlwciMjX25v bmNlLCBzaXplb2YocHIjI19ub25jZSksIFwKLSsJcHIjI19wZXJzb25hbGl6YXRpb25zdHJpbmcs IHNpemVvZihwciMjX3BlcnNvbmFsaXphdGlvbnN0cmluZyksIFwKLSsJcHIjI19hZGRpdGlvbmFs aW5wdXQsIHNpemVvZihwciMjX2FkZGl0aW9uYWxpbnB1dCksIFwKLSsJcHIjI19lbnRyb3B5aW5w dXRyZXNlZWQsIHNpemVvZihwciMjX2VudHJvcHlpbnB1dHJlc2VlZCksIFwKLSsJcHIjI19hZGRp dGlvbmFsaW5wdXRyZXNlZWQsIHNpemVvZihwciMjX2FkZGl0aW9uYWxpbnB1dHJlc2VlZCksIFwK LSsJcHIjI19hZGRpdGlvbmFsaW5wdXQyLCBzaXplb2YocHIjI19hZGRpdGlvbmFsaW5wdXQyKSwg XAotKwlwciMjX2ludF9yZXR1cm5lZGJpdHMsIHNpemVvZihwciMjX2ludF9yZXR1cm5lZGJpdHMp LCBcCi0rCXByIyNfcmV0dXJuZWRiaXRzLCBzaXplb2YocHIjI19yZXR1cm5lZGJpdHMpLCBcCi0r CXByIyNfcHJfZW50cm9weWlucHV0LCBzaXplb2YocHIjI19wcl9lbnRyb3B5aW5wdXQpLCBcCi0r CXByIyNfcHJfbm9uY2UsIHNpemVvZihwciMjX3ByX25vbmNlKSwgXAotKwlwciMjX3ByX3BlcnNv bmFsaXphdGlvbnN0cmluZywgc2l6ZW9mKHByIyNfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nKSwg XAotKwlwciMjX3ByX2FkZGl0aW9uYWxpbnB1dCwgc2l6ZW9mKHByIyNfcHJfYWRkaXRpb25hbGlu cHV0KSwgXAotKwlwciMjX3ByX2VudHJvcHlpbnB1dHByLCBzaXplb2YocHIjI19wcl9lbnRyb3B5 aW5wdXRwciksIFwKLSsJcHIjI19wcl9hZGRpdGlvbmFsaW5wdXQyLCBzaXplb2YocHIjI19wcl9h ZGRpdGlvbmFsaW5wdXQyKSwgXAotKwlwciMjX3ByX2VudHJvcHlpbnB1dHByMiwgc2l6ZW9mKHBy IyNfcHJfZW50cm9weWlucHV0cHIyKSwgXAotKwlwciMjX3ByX2ludF9yZXR1cm5lZGJpdHMsIHNp emVvZihwciMjX3ByX2ludF9yZXR1cm5lZGJpdHMpLCBcCi0rCXByIyNfcHJfcmV0dXJuZWRiaXRz LCBzaXplb2YocHIjI19wcl9yZXR1cm5lZGJpdHMpLCBcCi0rCX0KLSsKLSsjZGVmaW5lIG1ha2Vf ZHJiZ190ZXN0X2RhdGFfZGYobmlkLCBwciwgcCkgXAotKwltYWtlX2RyYmdfdGVzdF9kYXRhKG5p ZCwgRFJCR19GTEFHX0NUUl9VU0VfREYsIHByLCBwKQotKwotKyNkZWZpbmUgbWFrZV9kcmJnX3Rl c3RfZGF0YV9lYyhjdXJ2ZSwgbWQsIHByLCBwKSBcCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEoKGN1 cnZlIDw8IDE2KSB8IG1kICwgMCwgcHIsIHApCi0rCi0rc3RhdGljIERSQkdfU0VMRlRFU1RfREFU QSBkcmJnX3Rlc3RbXSA9IHsKLSsJbWFrZV9kcmJnX3Rlc3RfZGF0YV9kZihOSURfYWVzXzEyOF9j dHIsIGFlc18xMjhfdXNlX2RmLCAwKSwKLSsJbWFrZV9kcmJnX3Rlc3RfZGF0YV9kZihOSURfYWVz XzE5Ml9jdHIsIGFlc18xOTJfdXNlX2RmLCAwKSwKLSsJbWFrZV9kcmJnX3Rlc3RfZGF0YV9kZihO SURfYWVzXzI1Nl9jdHIsIGFlc18yNTZfdXNlX2RmLCAxKSwKLSsJbWFrZV9kcmJnX3Rlc3RfZGF0 YShOSURfYWVzXzEyOF9jdHIsIDAsIGFlc18xMjhfbm9fZGYsIDApLAotKwltYWtlX2RyYmdfdGVz dF9kYXRhKE5JRF9hZXNfMTkyX2N0ciwgMCwgYWVzXzE5Ml9ub19kZiwgMCksCi0rCW1ha2VfZHJi Z190ZXN0X2RhdGEoTklEX2Flc18yNTZfY3RyLCAwLCBhZXNfMjU2X25vX2RmLCAxKSwKLSsJbWFr ZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hhMSwgMCwgc2hhMSwgMCksCi0rCW1ha2VfZHJiZ190ZXN0 X2RhdGEoTklEX3NoYTIyNCwgMCwgc2hhMjI0LCAwKSwKLSsJbWFrZV9kcmJnX3Rlc3RfZGF0YShO SURfc2hhMjU2LCAwLCBzaGEyNTYsIDEpLAotKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGEz ODQsIDAsIHNoYTM4NCwgMCksCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTUxMiwgMCwg c2hhNTEyLCAwKSwKLSsJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEExLCAwLCBo bWFjX3NoYTEsIDApLAotKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNIQTIyNCwg MCwgaG1hY19zaGEyMjQsIDApLAotKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNI QTI1NiwgMCwgaG1hY19zaGEyNTYsIDEpLAotKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFj V2l0aFNIQTM4NCwgMCwgaG1hY19zaGEzODQsIDApLAotKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5J RF9obWFjV2l0aFNIQTUxMiwgMCwgaG1hY19zaGE1MTIsIDApLAotKwl7MCwwLDB9Ci0rCX07Ci0r Ci0rdHlwZWRlZiBzdHJ1Y3QgCi0rCXsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqZW50OwotKwlz aXplX3QgZW50bGVuOwotKwlpbnQgZW50Y250OwotKwljb25zdCB1bnNpZ25lZCBjaGFyICpub25j ZTsKLSsJc2l6ZV90IG5vbmNlbGVuOwotKwlpbnQgbm9uY2VjbnQ7Ci0rCX0gVEVTVF9FTlQ7Ci0r Ci0rc3RhdGljIHNpemVfdCB0ZXN0X2VudHJvcHkoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNo YXIgKipwb3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHks IHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbikKLSsJewotKwlURVNUX0VOVCAqdCA9IEZJ UFNfZHJiZ19nZXRfYXBwX2RhdGEoZGN0eCk7Ci0rCSpwb3V0ID0gKHVuc2lnbmVkIGNoYXIgKil0 LT5lbnQ7Ci0rCXQtPmVudGNudCsrOwotKwlyZXR1cm4gdC0+ZW50bGVuOwotKwl9Ci0rCi0rc3Rh dGljIHNpemVfdCB0ZXN0X25vbmNlKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91 dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRyb3B5LCBzaXplX3Qg bWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCi0rCXsKLSsJVEVTVF9FTlQgKnQgPSBGSVBTX2RyYmdf Z2V0X2FwcF9kYXRhKGRjdHgpOwotKwkqcG91dCA9ICh1bnNpZ25lZCBjaGFyICopdC0+bm9uY2U7 Ci0rCXQtPm5vbmNlY250Kys7Ci0rCXJldHVybiB0LT5ub25jZWxlbjsKLSsJfQotKwotK3N0YXRp YyBpbnQgZmlwc19kcmJnX3NpbmdsZV9rYXQoRFJCR19DVFggKmRjdHgsIERSQkdfU0VMRlRFU1Rf REFUQSAqdGQsCi0rCQkJCQkJCQlpbnQgcXVpY2spCi0rCXsKLSsJVEVTVF9FTlQgdDsKLSsJaW50 IHJ2ID0gMDsKLSsJc2l6ZV90IGFkaW5sZW47Ci0rCXVuc2lnbmVkIGNoYXIgcmFuZG91dFsxMDI0 XTsKLSsKLSsJLyogSW5pdGlhbCB0ZXN0IHdpdGhvdXQgUFIgKi8KLSsKLSsJLyogSW5zdGFudGlh dGUgRFJCRyB3aXRoIHRlc3QgZW50cm9weSwgbm9uY2UgYW5kIHBlcnNvbmFsaXNhdGlvbgotKwkg KiBzdHJpbmcuCi0rCSAqLwotKwotKwlpZiAoIUZJUFNfZHJiZ19pbml0KGRjdHgsIHRkLT5uaWQs IHRkLT5mbGFncykpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFGSVBTX2RyYmdfc2V0X2NhbGxiYWNr cyhkY3R4LCB0ZXN0X2VudHJvcHksIDAsIDAsIHRlc3Rfbm9uY2UsIDApKQotKwkJcmV0dXJuIDA7 Ci0rCi0rCUZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoZGN0eCwgJnQpOwotKwotKwl0LmVudCA9IHRk LT5lbnQ7Ci0rCXQuZW50bGVuID0gdGQtPmVudGxlbjsKLSsJdC5ub25jZSA9IHRkLT5ub25jZTsK LSsJdC5ub25jZWxlbiA9IHRkLT5ub25jZWxlbjsKLSsJdC5lbnRjbnQgPSAwOwotKwl0Lm5vbmNl Y250ID0gMDsKLSsKLSsJaWYgKCFGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMs IHRkLT5wZXJzbGVuKSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBOb3RlIGZvciBDVFIgd2l0aG91 dCBERiBzb21lIGFkZGl0aW9uYWwgaW5wdXQgdmFsdWVzCi0rCSAqIGlnbm9yZSBieXRlcyBhZnRl ciB0aGUga2V5bGVuZ3RoOiBzbyByZWR1Y2UgYWRpbmxlbgotKwkgKiB0byBoYWxmIHRvIGVuc3Vy ZSBpbnZhbGlkIGRhdGEgaXMgZmVkIGluLgotKwkgKi8KLSsJaWYgKCFmaXBzX3Bvc3RfY29ycnVw dChGSVBTX1RFU1RfRFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPmlmbGFncykpCi0rCQlhZGlubGVu ID0gdGQtPmFkaW5sZW4gLyAyOwotKwllbHNlCi0rCQlhZGlubGVuID0gdGQtPmFkaW5sZW47Ci0r Ci0rCS8qIEdlbmVyYXRlIHdpdGggbm8gUFIgYW5kIHZlcmlmeSBvdXRwdXQgbWF0Y2hlcyBleHBl Y3RlZCBkYXRhICovCi0rCWlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRk LT5rYXRsZW4sIDAsCi0rCQkJCXRkLT5hZGluLCBhZGlubGVuKSkKLSsJCWdvdG8gZXJyOwotKwot KwlpZiAobWVtY21wKHJhbmRvdXQsIHRkLT5rYXQsIHRkLT5rYXRsZW4pKQotKwkJewotKwkJRklQ U2VycihGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9OT1BSX1RFU1QxX0ZBSUxV UkUpOwotKwkJZ290byBlcnIyOwotKwkJfQotKwkvKiBJZiBhYmJyZXZpYXRlZCBQT1NUIGVuZCBv ZiB0ZXN0ICovCi0rCWlmIChxdWljaykKLSsJCXsKLSsJCXJ2ID0gMTsKLSsJCWdvdG8gZXJyOwot KwkJfQotKwkvKiBSZXNlZWQgRFJCRyB3aXRoIHRlc3QgZW50cm9weSBhbmQgYWRkaXRpb25hbCBp bnB1dCAqLwotKwl0LmVudCA9IHRkLT5lbnRyZXNlZWQ7Ci0rCXQuZW50bGVuID0gdGQtPmVudHJl c2VlZGxlbjsKLSsKLSsJaWYgKCFGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRkLT5hZGlucmVzZWVk LCB0ZC0+YWRpbnJlc2VlZGxlbikpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyogR2VuZXJhdGUgd2l0 aCBubyBQUiBhbmQgdmVyaWZ5IG91dHB1dCBtYXRjaGVzIGV4cGVjdGVkIGRhdGEgKi8KLSsJaWYg KCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdDJsZW4sIDAsCi0rCQkJ CXRkLT5hZGluMiwgdGQtPmFkaW4ybGVuKSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAobWVtY21w KHJhbmRvdXQsIHRkLT5rYXQyLCB0ZC0+a2F0MmxlbikpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNf Rl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX05PUFJfVEVTVDJfRkFJTFVSRSk7Ci0rCQln b3RvIGVycjI7Ci0rCQl9Ci0rCi0rCUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpOwotKwot KwkvKiBOb3cgdGVzdCB3aXRoIFBSICovCi0rCi0rCS8qIEluc3RhbnRpYXRlIERSQkcgd2l0aCB0 ZXN0IGVudHJvcHksIG5vbmNlIGFuZCBwZXJzb25hbGlzYXRpb24KLSsJICogc3RyaW5nLgotKwkg Ki8KLSsJaWYgKCFGSVBTX2RyYmdfaW5pdChkY3R4LCB0ZC0+bmlkLCB0ZC0+ZmxhZ3MpKQotKwkJ cmV0dXJuIDA7Ci0rCWlmICghRklQU19kcmJnX3NldF9jYWxsYmFja3MoZGN0eCwgdGVzdF9lbnRy b3B5LCAwLCAwLCB0ZXN0X25vbmNlLCAwKSkKLSsJCXJldHVybiAwOwotKwotKwlGSVBTX2RyYmdf c2V0X2FwcF9kYXRhKGRjdHgsICZ0KTsKLSsKLSsJdC5lbnQgPSB0ZC0+ZW50X3ByOwotKwl0LmVu dGxlbiA9IHRkLT5lbnRsZW5fcHI7Ci0rCXQubm9uY2UgPSB0ZC0+bm9uY2VfcHI7Ci0rCXQubm9u Y2VsZW4gPSB0ZC0+bm9uY2VsZW5fcHI7Ci0rCXQuZW50Y250ID0gMDsKLSsJdC5ub25jZWNudCA9 IDA7Ci0rCi0rCWlmICghRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzX3ByLCB0 ZC0+cGVyc2xlbl9wcikpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyogTm93IGdlbmVyYXRlIHdpdGgg UFI6IHdlIG5lZWQgdG8gc3VwcGx5IGVudHJvcHkgYXMgdGhpcyB3aWxsCi0rCSAqIHBlcmZvcm0g YSByZXNlZWQgb3BlcmF0aW9uLiBDaGVjayBvdXRwdXQgbWF0Y2hlcyBleHBlY3RlZCB2YWx1ZS4K LSsJICovCi0rCi0rCXQuZW50ID0gdGQtPmVudHByX3ByOwotKwl0LmVudGxlbiA9IHRkLT5lbnRw cmxlbl9wcjsKLSsKLSsJLyogTm90ZSBmb3IgQ1RSIHdpdGhvdXQgREYgc29tZSBhZGRpdGlvbmFs IGlucHV0IHZhbHVlcwotKwkgKiBpZ25vcmUgYnl0ZXMgYWZ0ZXIgdGhlIGtleWxlbmd0aDogc28g cmVkdWNlIGFkaW5sZW4KLSsJICogdG8gaGFsZiB0byBlbnN1cmUgaW52YWxpZCBkYXRhIGlzIGZl ZCBpbi4KLSsJICovCi0rCWlmICghZmlwc19wb3N0X2NvcnJ1cHQoRklQU19URVNUX0RSQkcsIGRj dHgtPnR5cGUsICZkY3R4LT5pZmxhZ3MpKQotKwkJYWRpbmxlbiA9IHRkLT5hZGlubGVuX3ByIC8g MjsKLSsJZWxzZQotKwkJYWRpbmxlbiA9IHRkLT5hZGlubGVuX3ByOwotKwlpZiAoIUZJUFNfZHJi Z19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuX3ByLCAxLAotKwkJCQl0ZC0+YWRp bl9wciwgYWRpbmxlbikpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKG1lbWNtcChyYW5kb3V0LCB0 ZC0+a2F0X3ByLCB0ZC0+a2F0bGVuX3ByKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNf RFJCR19TSU5HTEVfS0FULCBGSVBTX1JfUFJfVEVTVDFfRkFJTFVSRSk7Ci0rCQlnb3RvIGVycjI7 Ci0rCQl9Ci0rCi0rCS8qIE5vdyBnZW5lcmF0ZSBhZ2FpbiB3aXRoIFBSOiBzdXBwbHkgbmV3IGVu dHJvcHkgYWdhaW4uCi0rCSAqIENoZWNrIG91dHB1dCBtYXRjaGVzIGV4cGVjdGVkIHZhbHVlLgot KwkgKi8KLSsKLSsJdC5lbnQgPSB0ZC0+ZW50Z19wcjsKLSsJdC5lbnRsZW4gPSB0ZC0+ZW50Z2xl bl9wcjsKLSsKLSsJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmth dDJsZW5fcHIsIDEsCi0rCQkJCXRkLT5hZGluZ19wciwgdGQtPmFkaW5nbGVuX3ByKSkKLSsJCWdv dG8gZXJyOwotKwotKwlpZiAobWVtY21wKHJhbmRvdXQsIHRkLT5rYXQyX3ByLCB0ZC0+a2F0Mmxl bl9wcikpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQ U19SX1BSX1RFU1QyX0ZBSUxVUkUpOwotKwkJZ290byBlcnIyOwotKwkJfQotKwkvKiBBbGwgT0ss IHRlc3QgY29tcGxldGUgKi8KLSsJcnYgPSAxOwotKwotKwllcnI6Ci0rCWlmIChydiA9PSAwKQot KwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9TRUxGVEVTVF9G QUlMRUQpOwotKwllcnIyOgotKwlGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KTsKLSsJCi0r CXJldHVybiBydjsKLSsKLSsJfQotKwotKy8qIEluaXRpYWxpc2UgYSBEUkJHIGJhc2VkIG9uIHNl bGZ0ZXN0IGRhdGEgKi8KLSsKLStzdGF0aWMgaW50IGRvX2RyYmdfaW5pdChEUkJHX0NUWCAqZGN0 eCwgRFJCR19TRUxGVEVTVF9EQVRBICp0ZCwgVEVTVF9FTlQgKnQpCi0rCXsKLSsKLSsJaWYgKCFG SVBTX2RyYmdfaW5pdChkY3R4LCB0ZC0+bmlkLCB0ZC0+ZmxhZ3MpKQotKwkJcmV0dXJuIDA7Ci0r Ci0rCWlmICghRklQU19kcmJnX3NldF9jYWxsYmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAw LCB0ZXN0X25vbmNlLCAwKSkKLSsJCXJldHVybiAwOwotKwotKwlGSVBTX2RyYmdfc2V0X2FwcF9k YXRhKGRjdHgsIHQpOwotKwotKwl0LT5lbnQgPSB0ZC0+ZW50OwotKwl0LT5lbnRsZW4gPSB0ZC0+ ZW50bGVuOwotKwl0LT5ub25jZSA9IHRkLT5ub25jZTsKLSsJdC0+bm9uY2VsZW4gPSB0ZC0+bm9u Y2VsZW47Ci0rCXQtPmVudGNudCA9IDA7Ci0rCXQtPm5vbmNlY250ID0gMDsKLSsJcmV0dXJuIDE7 Ci0rCX0KLSsKLSsvKiBJbml0aWFsaXNlIGFuZCBpbnN0YW50aWF0ZSBEUkJHIGJhc2VkIG9uIHNl bGZ0ZXN0IGRhdGEgKi8KLStzdGF0aWMgaW50IGRvX2RyYmdfaW5zdGFudGlhdGUoRFJCR19DVFgg KmRjdHgsIERSQkdfU0VMRlRFU1RfREFUQSAqdGQsCi0rCQkJCQkJCQlURVNUX0VOVCAqdCkKLSsJ ewotKwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgdCkpCi0rCQlyZXR1cm4gMDsKLSsJaWYg KCFGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSkKLSsJ CXJldHVybiAwOwotKwotKwlyZXR1cm4gMTsKLSsJfQotKwotKy8qIFRoaXMgZnVuY3Rpb24gcGVy Zm9ybXMgZXh0ZW5zaXZlIGVycm9yIGNoZWNraW5nIGFzIHJlcXVpcmVkIGJ5IFNQODAwLTkwLgot KyAqIEluZHVjZSBzZXZlcmFsIGZhaWx1cmUgbW9kZXMgYW5kIGNoZWNrIGFuIGVycm9yIGNvbmRp dGlvbiBpcyBzZXQuCi0rICogVGhpcyBmdW5jdGlvbiBhbG9uZyB3aXRoIGZpcHNfZHJiZ19zaW5n bGVfa2F0IHBlZm9ybXMgdGhlIGhlYWx0aCBjaGVja2luZwotKyAqIG9wZXJhdGlvbi4KLSsgKi8K LSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19lcnJvcl9jaGVjayhEUkJHX0NUWCAqZGN0eCwgRFJC R19TRUxGVEVTVF9EQVRBICp0ZCkKLSsJewotKwl1bnNpZ25lZCBjaGFyIHJhbmRvdXRbMTAyNF07 Ci0rCVRFU1RfRU5UIHQ7Ci0rCXNpemVfdCBpOwotKwl1bnNpZ25lZCBpbnQgcmVzZWVkX2NvdW50 ZXJfdG1wOwotKwl1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKilkY3R4OwotKwot KwkvKiBJbml0aWFsaXNlIERSQkcgKi8KLSsKLSsJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQs ICZ0KSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBEb24ndCByZXBvcnQgaW5kdWNlZCBlcnJvcnMg Ki8KLSsJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsJLyogUGVyc29uYWxp c2F0aW9uIHN0cmluZyB0ZXN0cyAqLwotKwotKwkvKiBUZXN0IGRldGVjdGlvbiBvZiB0b28gbGFy Z2UgcGVyc29ubGlzYXRpb24gc3RyaW5nICovCi0rCi0rCWlmIChGSVBTX2RyYmdfaW5zdGFudGlh dGUoZGN0eCwgdGQtPnBlcnMsIGRjdHgtPm1heF9wZXJzICsgMSkgPiAwKQotKwkJewotKwkJRklQ U2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfUEVSU09OQUxJU0FUSU9O X0VSUk9SX1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCS8qIEVudHJvcHkg c291cmNlIHRlc3RzICovCi0rCi0rCS8qIFRlc3QgZW50cm9weSBzb3VyY2UgZmFpbHVyZSBkZXRl Y2lvbjogaS5lLiByZXR1cm5zIG5vIGRhdGEgKi8KLSsKLSsJdC5lbnRsZW4gPSAwOwotKwotKwlp ZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAw KQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1Jf RU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwkvKiBU cnkgdG8gZ2VuZXJhdGUgb3V0cHV0IGZyb20gdW5pbnN0YW50aWF0ZWQgRFJCRyAqLwotKwlpZiAo RklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCi0rCQkJCXRk LT5hZGluLCB0ZC0+YWRpbmxlbikpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdf RVJST1JfQ0hFQ0ssIEZJUFNfUl9HRU5FUkFURV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdvdG8g ZXJyOwotKwkJfQotKwotKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKLSsJaWYg KCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKwkJ Z290byBlcnI7Ci0rCQl9Ci0rCi0rCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCi0r CQlnb3RvIGVycjsKLSsKLSsJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsJ LyogVGVzdCBpbnN1ZmZpY2llbnQgZW50cm9weSAqLwotKwotKwl0LmVudGxlbiA9IGRjdHgtPm1p bl9lbnRyb3B5IC0gMTsKLSsKLSsJaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+ cGVycywgdGQtPnBlcnNsZW4pID4gMCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJC R19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQlnb3Rv IGVycjsKLSsJCX0KLSsKLSsJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7Ci0rCWlm ICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNf Rl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsJ CWdvdG8gZXJyOwotKwkJfQotKwotKwkvKiBUZXN0IHRvbyBtdWNoIGVudHJvcHkgKi8KLSsKLSsJ aWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKLSsJCWdvdG8gZXJyOwotKwotKwlkY3R4 LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwotKwotKwl0LmVudGxlbiA9IGRjdHgtPm1heF9l bnRyb3B5ICsgMTsKLSsKLSsJaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVy cywgdGQtPnBlcnNsZW4pID4gMCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19F UlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQlnb3RvIGVy cjsKLSsJCX0KLSsKLSsJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7Ci0rCWlmICgh RklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9G SVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsJCWdv dG8gZXJyOwotKwkJfQotKwotKwkvKiBOb25jZSB0ZXN0cyAqLwotKwotKwkvKiBUZXN0IHRvbyBz bWFsbCBub25jZSAqLwotKwotKwlpZiAoZGN0eC0+bWluX25vbmNlKQotKwkJewotKwotKwkJaWYg KCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKLSsJCQlnb3RvIGVycjsKLSsKLSsJCWRjdHgt PmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rCQl0Lm5vbmNlbGVuID0gZGN0eC0+bWlu X25vbmNlIC0gMTsKLSsKLSsJCWlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBl cnMsIHRkLT5wZXJzbGVuKSA+IDApCi0rCQkJewotKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJC R19FUlJPUl9DSEVDSywgRklQU19SX05PTkNFX0VSUk9SX1VOREVURUNURUQpOwotKwkJCWdvdG8g ZXJyOwotKwkJCX0KLSsKLSsJCWRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOwotKwkJ aWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJCQl7Ci0rCQkJRklQU2VycihG SVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7 Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwotKwkJfQotKwotKwkvKiBUZXN0IHRvbyBsYXJnZSBu b25jZSAqLwotKwotKwlpZiAoZGN0eC0+bWF4X25vbmNlKQotKwkJewotKwotKwkJaWYgKCFkb19k cmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKLSsJCQlnb3RvIGVycjsKLSsKLSsJCWRjdHgtPmlmbGFn cyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rCQl0Lm5vbmNlbGVuID0gZGN0eC0+bWF4X25vbmNl ICsgMTsKLSsKLSsJCWlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRk LT5wZXJzbGVuKSA+IDApCi0rCQkJewotKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJP Ul9DSEVDSywgRklQU19SX05PTkNFX0VSUk9SX1VOREVURUNURUQpOwotKwkJCWdvdG8gZXJyOwot KwkJCX0KLSsKLSsJCWRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOwotKwkJaWYgKCFG SVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0Zf RklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7Ci0rCQkJ Z290byBlcnI7Ci0rCQkJfQotKwotKwkJfQotKwotKwkvKiBJbnN0YW50aWF0ZSB3aXRoIHZhbGlk IGRhdGEuICovCi0rCWlmICghZG9fZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZCwgJnQpKQotKwkJ CWdvdG8gZXJyOwotKwotKwkvKiBDaGVjayBnZW5lcmF0aW9uIGlzIG5vdyBPSyAqLwotKwlpZiAo IUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAotKwkJCQl0 ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQotKwkJZ290byBlcnI7Ci0rCi0rCWRjdHgtPmlmbGFncyB8 PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rCS8qIFJlcXVlc3QgdG9vIG11Y2ggZGF0YSBmb3Igb25l IHJlcXVlc3QgKi8KLSsJaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCBkY3R4 LT5tYXhfcmVxdWVzdCArIDEsIDAsCi0rCQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCi0rCQl7 Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9SRVFVRVNU X0xFTkdUSF9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwkvKiBU cnkgdG9vIGxhcmdlIGFkZGl0aW9uYWwgaW5wdXQgKi8KLSsJaWYgKEZJUFNfZHJiZ19nZW5lcmF0 ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAotKwkJCQl0ZC0+YWRpbiwgZGN0eC0+bWF4 X2FkaW4gKyAxKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVD SywgRklQU19SX0FERElUSU9OQUxfSU5QVVRfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQlnb3RvIGVy cjsKLSsJCX0KLSsKLSsJLyogQ2hlY2sgcHJlZGljdGlvbiByZXNpc3RhbmNlIHJlcXVlc3QgZmFp bHMgaWYgZW50cm9weSBzb3VyY2UKLSsJICogZmFpbHVyZS4KLSsJICovCi0rCi0rCXQuZW50bGVu ID0gMDsKLSsKLSsJaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0 bGVuLCAxLAotKwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQotKwkJewotKwkJRklQU2VycihG SVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVD VEVEKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwkJCi0rCWRjdHgtPmlmbGFncyAmPSB+RFJCR19G TEFHX05PRVJSOwotKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQotKwkJewot KwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5U SUFURV9FUlJPUik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsKLSsJLyogSW5zdGFudGlhdGUg YWdhaW4gd2l0aCB2YWxpZCBkYXRhICovCi0rCi0rCWlmICghZG9fZHJiZ19pbnN0YW50aWF0ZShk Y3R4LCB0ZCwgJnQpKQotKwkJCWdvdG8gZXJyOwotKwkvKiBUZXN0IHJlc2VlZCBjb3VudGVyIHdv cmtzICovCi0rCS8qIFNhdmUgaW5pdGlhbCByZXNlZWQgY291bnRlciAqLwotKwlyZXNlZWRfY291 bnRlcl90bXAgPSBkY3R4LT5yZXNlZWRfY291bnRlcjsKLSsJLyogU2V0IHJlc2VlZCBjb3VudGVy IHRvIGJleW9uZCBpbnRlcnZhbCAqLwotKwlkY3R4LT5yZXNlZWRfY291bnRlciA9IGRjdHgtPnJl c2VlZF9pbnRlcnZhbDsKLSsKLSsJLyogR2VuZXJhdGUgb3V0cHV0IGFuZCBjaGVjayBlbnRyb3B5 IGhhcyBiZWVuIHJlcXVlc3RlZCBmb3IgcmVzZWVkICovCi0rCXQuZW50Y250ID0gMDsKLSsJaWYg KCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMCwKLSsJCQkJ dGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAodC5lbnRjbnQgIT0g MSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19S X0VOVFJPUFlfTk9UX1JFUVVFU1RFRF9GT1JfUkVTRUVEKTsKLSsJCWdvdG8gZXJyOwotKwkJfQot KwkvKiBDaGVjayByZXNlZWQgY291bnRlciBoYXMgYmVlbiByZXNldCAqLwotKwlpZiAoZGN0eC0+ cmVzZWVkX2NvdW50ZXIgIT0gcmVzZWVkX2NvdW50ZXJfdG1wICsgMSkKLSsJCXsKLSsJCUZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1JFU0VFRF9DT1VOVEVSX0VS Uk9SKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxB R19OT0VSUjsKLSsJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJCXsKLSsJ CUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElB VEVfRVJST1IpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCS8qIENoZWNrIHByZWRpY3Rpb24g cmVzaXN0YW5jZSByZXF1ZXN0IGZhaWxzIGlmIGVudHJvcHkgc291cmNlCi0rCSAqIGZhaWx1cmUu Ci0rCSAqLwotKwotKwl0LmVudGxlbiA9IDA7Ci0rCi0rCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZM QUdfTk9FUlI7Ci0rCWlmIChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmth dGxlbiwgMSwKLSsJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKLSsJCXsKLSsJCUZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRF Q1RFRCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsJCQotKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdf RkxBR19OT0VSUjsKLSsKLSsJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJ CXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5T VEFOVElBVEVfRVJST1IpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCi0rCWlmICghZG9fZHJi Z19pbnN0YW50aWF0ZShkY3R4LCB0ZCwgJnQpKQotKwkJCWdvdG8gZXJyOwotKwkvKiBUZXN0IHJl c2VlZCBjb3VudGVyIHdvcmtzICovCi0rCS8qIFNhdmUgaW5pdGlhbCByZXNlZWQgY291bnRlciAq LwotKwlyZXNlZWRfY291bnRlcl90bXAgPSBkY3R4LT5yZXNlZWRfY291bnRlcjsKLSsJLyogU2V0 IHJlc2VlZCBjb3VudGVyIHRvIGJleW9uZCBpbnRlcnZhbCAqLwotKwlkY3R4LT5yZXNlZWRfY291 bnRlciA9IGRjdHgtPnJlc2VlZF9pbnRlcnZhbDsKLSsKLSsJLyogR2VuZXJhdGUgb3V0cHV0IGFu ZCBjaGVjayBlbnRyb3B5IGhhcyBiZWVuIHJlcXVlc3RlZCBmb3IgcmVzZWVkICovCi0rCXQuZW50 Y250ID0gMDsKLSsJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmth dGxlbiwgMCwKLSsJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKLSsJCWdvdG8gZXJyOwotKwlp ZiAodC5lbnRjbnQgIT0gMSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJP Ul9DSEVDSywgRklQU19SX0VOVFJPUFlfTk9UX1JFUVVFU1RFRF9GT1JfUkVTRUVEKTsKLSsJCWdv dG8gZXJyOwotKwkJfQotKwkvKiBDaGVjayByZXNlZWQgY291bnRlciBoYXMgYmVlbiByZXNldCAq LwotKwlpZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgIT0gcmVzZWVkX2NvdW50ZXJfdG1wICsgMSkK LSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1JF U0VFRF9DT1VOVEVSX0VSUk9SKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwlkY3R4LT5pZmxh Z3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKLSsJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShk Y3R4KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQ U19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCS8qIEV4 cGxpY2l0IHJlc2VlZCB0ZXN0cyAqLwotKwotKwkvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRo IHRvbyBsYXJnZSBhZGRpdGlvbmFsIGlucHV0ICovCi0rCWlmICghZG9fZHJiZ19pbml0KGRjdHgs IHRkLCAmdCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19O T0VSUjsKLSsKLSsJaWYgKEZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW4sIGRjdHgtPm1h eF9hZGluICsgMSkgPiAwKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9S X0NIRUNLLCBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdv dG8gZXJyOwotKwkJfQotKwotKwkvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRoIGVudHJvcHkg c291cmNlIGZhaWx1cmUgKi8KLSsKLSsJdC5lbnRsZW4gPSAwOwotKwotKwlpZiAoRklQU19kcmJn X3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pID4gMCkKLSsJCXsKLSsJCUZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5E RVRFQ1RFRCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJaWYgKCFGSVBTX2RyYmdfdW5pbnN0 YW50aWF0ZShkY3R4KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9D SEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0r Ci0rCS8qIFRlc3QgZXhwbGljaXQgcmVzZWVkIHdpdGggdG9vIG11Y2ggZW50cm9weSAqLwotKwot KwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKwkJZ290byBlcnI7Ci0rCi0rCWRj dHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rCXQuZW50bGVuID0gZGN0eC0+bWF4 X2VudHJvcHkgKyAxOwotKwotKwlpZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwg dGQtPmFkaW5sZW4pID4gMCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJP Ul9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQlnb3RvIGVycjsK LSsJCX0KLSsKLSsJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJCXsKLSsJ CUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElB VEVfRVJST1IpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCS8qIFRlc3QgZXhwbGljaXQgcmVz ZWVkIHdpdGggdG9vIGxpdHRsZSBlbnRyb3B5ICovCi0rCi0rCWlmICghZG9fZHJiZ19pbml0KGRj dHgsIHRkLCAmdCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxB R19OT0VSUjsKLSsKLSsJdC5lbnRsZW4gPSBkY3R4LT5taW5fZW50cm9weSAtIDE7Ci0rCi0rCWlm IChGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikgPiAwKQotKwkJ ewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9Q WV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwlpZiAoIUZJUFNf ZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7Ci0rCQlnb3RvIGVy cjsKLSsJCX0KLSsKLSsJcCA9ICh1bnNpZ25lZCBjaGFyICopJmRjdHgtPmQ7Ci0rCS8qIFN0YW5k YXJkIHNheXMgd2UgaGF2ZSB0byBjaGVjayB1bmluc3RhbnRpYXRlIHJlYWxseSB6ZXJvZXMKLSsJ ICogdGhlIGRhdGEuLi4KLSsJICovCi0rCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZGN0eC0+ZCk7 IGkrKykKLSsJCXsKLSsJCWlmICgqcCAhPSAwKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9G SVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX1pFUk9JU0VfRVJST1Ip OwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsJCXArKzsKLSsJCX0KLSsKLSsJcmV0dXJuIDE7Ci0r Ci0rCWVycjoKLSsJLyogQSByZWFsIGVycm9yIGFzIG9wcG9zZWQgdG8gYW4gaW5kdWNlZCBvbmU6 IHVuZGVybHlpbmcgZnVuY3Rpb24gd2lsbAotKwkgKiBpbmRpY2F0ZSB0aGUgZXJyb3IuCi0rCSAq LwotKwlpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0ZMQUdfTk9FUlIpKQotKwkJRklQU2VycihG SVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRlVOQ1RJT05fRVJST1IpOwotKwlG SVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KTsKLSsJcmV0dXJuIDA7Ci0rCi0rCX0KLSsKLStp bnQgZmlwc19kcmJnX2thdChEUkJHX0NUWCAqZGN0eCwgaW50IG5pZCwgdW5zaWduZWQgaW50IGZs YWdzKQotKwl7Ci0rCURSQkdfU0VMRlRFU1RfREFUQSAqdGQ7Ci0rCWZsYWdzIHw9IERSQkdfRkxB R19URVNUOwotKwlmb3IgKHRkID0gZHJiZ190ZXN0OyB0ZC0+bmlkICE9IDA7IHRkKyspCi0rCQl7 Ci0rCQlpZiAodGQtPm5pZCA9PSBuaWQgJiYgdGQtPmZsYWdzID09IGZsYWdzKQotKwkJCXsKLSsJ CQlpZiAoIWZpcHNfZHJiZ19zaW5nbGVfa2F0KGRjdHgsIHRkLCAwKSkKLSsJCQkJcmV0dXJuIDA7 Ci0rCQkJcmV0dXJuIGZpcHNfZHJiZ19lcnJvcl9jaGVjayhkY3R4LCB0ZCk7Ci0rCQkJfQotKwkJ fQotKwlyZXR1cm4gMDsKLSsJfQotKwotK2ludCBGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKERSQkdf Q1RYICpkY3R4KQotKwl7Ci0rCWludCBydjsKLSsJRFJCR19DVFggKnRjdHggPSBOVUxMOwotKwl0 Y3R4ID0gRklQU19kcmJnX25ldygwLCAwKTsKLSsJZmlwc19wb3N0X3N0YXJ0ZWQoRklQU19URVNU X0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT54ZmxhZ3MpOwotKwlpZiAoIXRjdHgpCi0rCQlyZXR1 cm4gMDsKLSsJcnYgPSBmaXBzX2RyYmdfa2F0KHRjdHgsIGRjdHgtPnR5cGUsIGRjdHgtPnhmbGFn cyk7Ci0rCWlmICh0Y3R4KQotKwkJRklQU19kcmJnX2ZyZWUodGN0eCk7Ci0rCWlmIChydikKLSsJ CWZpcHNfcG9zdF9zdWNjZXNzKEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+eGZs YWdzKTsKLSsJZWxzZQotKwkJZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywgZGN0eC0+ dHlwZSwgJmRjdHgtPnhmbGFncyk7Ci0rCWlmICghcnYpCi0rCQlkY3R4LT5zdGF0dXMgPSBEUkJH X1NUQVRVU19FUlJPUjsKLSsJZWxzZQotKwkJZGN0eC0+aGVhbHRoX2NoZWNrX2NudCA9IDA7Ci0r CXJldHVybiBydjsKLSsJfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2RyYmcodm9pZCkKLSsJewot KwlEUkJHX0NUWCAqZGN0eDsKLSsJRFJCR19TRUxGVEVTVF9EQVRBICp0ZDsKLSsJaW50IHJ2ID0g MTsKLSsJZGN0eCA9IEZJUFNfZHJiZ19uZXcoMCwgMCk7Ci0rCWlmICghZGN0eCkKLSsJCXJldHVy biAwOwotKwlmb3IgKHRkID0gZHJiZ190ZXN0OyB0ZC0+bmlkICE9IDA7IHRkKyspCi0rCQl7Ci0r CQlpZiAodGQtPnBvc3QgIT0gMSkKLSsJCQljb250aW51ZTsKLSsJCWlmICghZmlwc19wb3N0X3N0 YXJ0ZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpKQotKwkJCXJldHVybiAx OwotKwkJaWYgKCFmaXBzX2RyYmdfc2luZ2xlX2thdChkY3R4LCB0ZCwgMSkpCi0rCQkJewotKwkJ CWZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpOwot KwkJCXJ2ID0gMDsKLSsJCQljb250aW51ZTsKLSsJCQl9Ci0rCQlpZiAoIWZpcHNfcG9zdF9zdWNj ZXNzKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKSkKLSsJCQlyZXR1cm4gMDsK LSsJCX0KLSsJRklQU19kcmJnX2ZyZWUoZGN0eCk7Ci0rCXJldHVybiBydjsKLSsJfQotKwotKwot K2ludCBGSVBTX3NlbGZ0ZXN0X2RyYmdfYWxsKHZvaWQpCi0rCXsKLSsJRFJCR19DVFggKmRjdHg7 Ci0rCURSQkdfU0VMRlRFU1RfREFUQSAqdGQ7Ci0rCWludCBydiA9IDE7Ci0rCWRjdHggPSBGSVBT X2RyYmdfbmV3KDAsIDApOwotKwlpZiAoIWRjdHgpCi0rCQlyZXR1cm4gMDsKLSsJZm9yICh0ZCA9 IGRyYmdfdGVzdDsgdGQtPm5pZCAhPSAwOyB0ZCsrKQotKwkJewotKwkJaWYgKCFmaXBzX3Bvc3Rf c3RhcnRlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncykpCi0rCQkJcmV0dXJu IDE7Ci0rCQlpZiAoIWZpcHNfZHJiZ19zaW5nbGVfa2F0KGRjdHgsIHRkLCAwKSkKLSsJCQl7Ci0r CQkJZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncyk7 Ci0rCQkJcnYgPSAwOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCWlmICghZmlwc19kcmJnX2Vy cm9yX2NoZWNrKGRjdHgsIHRkKSkKLSsJCQl7Ci0rCQkJZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RF U1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncyk7Ci0rCQkJcnYgPSAwOwotKwkJCWNvbnRpbnVl OwotKwkJCX0KLSsJCWlmICghZmlwc19wb3N0X3N1Y2Nlc3MoRklQU19URVNUX0RSQkcsIHRkLT5u aWQsICZ0ZC0+ZmxhZ3MpKQotKwkJCXJldHVybiAwOwotKwkJfQotKwlGSVBTX2RyYmdfZnJlZShk Y3R4KTsKLSsJcmV0dXJuIHJ2OwotKwl9Ci0rCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEy L2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5oLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRh Mi9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuaAotLS0tIG9wZW5zc2wtMS4wLjEtYmV0 YTIvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmguZmlwcwkyMDEyLTAyLTA3IDExOjA3 OjAyLjU0NjM5Mzc0OCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMv Zmlwc19kcmJnX3NlbGZ0ZXN0LmgJMjAxMi0wMi0wNyAxMTowNzowMi41NDYzOTM3NDggKzAxMDAK LUBAIC0wLDAgKzEsMjMzNSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAy MDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlz dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0 Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICog ICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBt YXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3 YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIg YW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNl IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAot KyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwg cGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmUub3JnLgotKyAqCi0rICogNS4gUHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5T U0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhv dXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVj dC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11 c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0r ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUg UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsvKiBTZWxmdGVzdCBh bmQgaGVhbHRoIGNoZWNrIGRhdGEgZm9yIHRoZSBTUDgwMC05MCBEUkJHICovCi0rCi0rI2RlZmlu ZSBfX2ZpcHNfY29uc3RzZWcKLSsKLSsvKiBBRVMtMTI4IHVzZSBkZiBQUiAgKi8KLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9l bnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHg2MSwweDUyLDB4N2MsMHhlMywweDIzLDB4N2QsMHgw YSwweDA3LDB4MTAsMHgwYywweDUwLDB4MzMsCi0rCTB4YzgsMHhkYiwweGZmLDB4MTIKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4 X3VzZV9kZl9wcl9ub25jZVtdID0KLSsJewotKwkweDUxLDB4MGQsMHg4NSwweDc3LDB4ZWQsMHgy MiwweDk3LDB4MjgKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0r CXsKLSsJMHg1OSwweDlmLDB4YmIsMHhjZCwweGQ1LDB4MjUsMHg2OSwweGI1LDB4Y2IsMHhiNSww eDAzLDB4ZmUsCi0rCTB4ZDcsMHhkNywweDAxLDB4NjcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9hZGRpdGlv bmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHhlZiwweDg4LDB4NzYsMHgwMSwweGFmLDB4M2MsMHhmZSww eDhiLDB4YWYsMHgyNiwweDA2LDB4OWUsCi0rCTB4OWEsMHg0NywweDA4LDB4NzYKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3Vz ZV9kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweGUyLDB4NzYsMHhmOSwweGY2LDB4 M2EsMHhiYSwweDEwLDB4OWYsMHhiZiwweDQ3LDB4MGUsMHg1MSwKLSsJMHgwOSwweGZiLDB4YTMs MHhiNgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xMjhfdXNlX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhkNCww eDk4LDB4OGEsMHg0NiwweDgwLDB4NGMsMHhkYiwweGEzLDB4NTksMHgwMiwweDU3LDB4NTIsCi0r CTB4NjYsMHgxYywweGVhLDB4NWIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10g PQotKwl7Ci0rCTB4ODgsMHg4YywweDkxLDB4ZDYsMHhiZSwweDU2LDB4NmUsMHgwOCwweDlhLDB4 NjIsMHgyYiwweDExLAotKwkweDNmLDB4NWUsMHgzMSwweDA2Ci0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfZW50 cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4YzAsMHg1YywweDZiLDB4OTgsMHgwMSwweDBkLDB4 NTgsMHgxOCwweDUxLDB4MTgsMHg5NiwweGFlLAotKwkweGE3LDB4ZTMsMHhhOCwweDY3Ci0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEy OF91c2VfZGZfcHJfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4Y2YsMHgwMSwweGFjLDB4MjIs MHgzMSwweDA2LDB4OGUsMHhmYywweGNlLDB4NTYsMHhlYSwweDI0LAotKwkweDBmLDB4MzgsMHg0 MywweGM2Ci0rCX07Ci0rCi0rCi0rLyogQUVTLTEyOCB1c2UgZGYgTm8gUFIgICovCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfZW50 cm9weWlucHV0W10gPQotKwl7Ci0rCTB4MWYsMHg4ZSwweDM0LDB4ODIsMHgwYywweGI3LDB4YmUs MHhjNSwweDAxLDB4M2UsMHhkMCwweGEzLAotKwkweDlkLDB4N2QsMHgxYywweDliCi0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91 c2VfZGZfbm9uY2VbXSA9Ci0rCXsKLSsJMHhkNSwweDRkLDB4YmQsMHg0YSwweDkzLDB4N2YsMHhi OCwweDk2Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzEyOF91c2VfZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4 YWIsMHhkNiwweDNmLDB4MDQsMHhmZSwweDI3LDB4NmIsMHgyZCwweGQ3LDB4YzMsMHgxYywweGYz LAotKwkweDM4LDB4NjYsMHhiYSwweDFiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfYWRkaXRpb25hbGlucHV0W10g PQotKwl7Ci0rCTB4ZmUsMHhmNCwweDA5LDB4YTgsMHhiNywweDczLDB4MjcsMHg5YywweDVmLDB4 YTcsMHhlYSwweDQ2LAotKwkweGI1LDB4ZTIsMHhiMiwweDQxCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfaW50X3Jl dHVybmVkYml0c1tdID0KLSsJewotKwkweDQyLDB4ZTQsMHg0ZSwweDdiLDB4MjcsMHhkZCwweGNi LDB4YmMsMHgwYSwweGNmLDB4YTYsMHg2NywKLSsJMHhlNywweDU3LDB4MTEsMHhiNAotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhf dXNlX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDE0LDB4MjYsMHg2OSwweGQ5 LDB4ZjMsMHg2NSwweDAzLDB4ZDYsMHg2YiwweGI5LDB4NDQsMHgwYiwKLSsJMHhjNywweGM0LDB4 OWUsMHgzOQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xMjhfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkw eDU1LDB4MmUsMHg2MCwweDlhLDB4MDUsMHg3MiwweDhhLDB4YTgsMHhlZiwweDIyLDB4ODEsMHg1 YSwKLSsJMHhjOCwweDkzLDB4ZmEsMHg4NAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dDJb XSA9Ci0rCXsKLSsJMHgzYywweDQwLDB4YzgsMHhjNCwweDE2LDB4MGMsMHgyMSwweGE0LDB4Mzcs MHgyYywweDhmLDB4YTUsCi0rCTB4MDYsMHgwYywweDE1LDB4MmMKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9yZXR1 cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhlMSwweDNlLDB4OTksMHg5OCwweDg2LDB4NjcsMHgwYiww eDYzLDB4N2IsMHhiZSwweDNmLDB4ODgsCi0rCTB4NDYsMHg4MSwweGM3LDB4MTkKLSsJfTsKLSsK LSsKLSsvKiBBRVMtMTkyIHVzZSBkZiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0r CXsKLSsJMHgyYiwweDRlLDB4OGIsMHhlMSwweGYxLDB4MzQsMHg4MCwweDU2LDB4ODEsMHhmOSww eDc0LDB4ZWMsCi0rCTB4MTcsMHg0NCwweDJhLDB4ZjEsMHgxNCwweGIwLDB4YmYsMHg5NywweDM5 LDB4YjcsMHgwNCwweDdkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHhkNiww eDlkLDB4ZWIsMHgxNCwweDRlLDB4NmMsMHgzMCwweDFlLDB4MzksMHg1NSwweDczLDB4ZDAsCi0r CTB4ZDEsMHg4MCwweDc4LDB4ZmEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJp bmdbXSA9Ci0rCXsKLSsJMHhmYywweDQzLDB4NGEsMHhmOCwweDlhLDB4NTUsMHhiMywweDUzLDB4 ODMsMHhlMiwweDE4LDB4MTYsCi0rCTB4MGMsMHhkYywweGNkLDB4NWUsMHg0ZiwweGEwLDB4MDMs MHgwMSwweDJiLDB4OWYsMHhlNCwweGQ1LAotKwkweDdkLDB4NDksMHhmMCwweDQxLDB4OWUsMHgz ZCwweDk5LDB4MDQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJ MHg1ZSwweDlmLDB4NDksMHg2ZiwweDIxLDB4OGIsMHgxZCwweDMyLDB4ZDUsMHg4NCwweDVjLDB4 YWMsCi0rCTB4YWYsMHhkZiwweGU0LDB4NzksMHg5ZSwweGFmLDB4YTksMHg4MiwweGQwLDB4Zjgs MHg0ZiwweGNiLAotKwkweDY5LDB4MTAsMHgwYSwweDdlLDB4ODEsMHg1NywweGI1LDB4MzYKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTkyX3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweGQ0LDB4ODEsMHgwYyww eGQ3LDB4NjYsMHgzOSwweGVjLDB4NDIsMHg1MywweDg3LDB4NDEsMHhhNSwKLSsJMHgxZSwweDdk LDB4ODAsMHg5MSwweDhlLDB4YmIsMHhlZCwweGFjLDB4MTQsMHgwMiwweDFhLDB4ZDUKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTky X3VzZV9kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZGYsMHgxZCwweDM5LDB4 NDUsMHg3YywweDliLDB4YzYsMHgyYiwweDdkLDB4OGMsMHg5MywweGU5LAotKwkweDE5LDB4MzAs MHg2YiwweDY3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkw eDAwLDB4NzEsMHgyNywweDRlLDB4ZDMsMHgxNCwweGYxLDB4MjAsMHg3ZiwweDRhLDB4NDEsMHgz MiwKLSsJMHgyYSwweDk3LDB4MTEsMHg0MywweDhmLDB4NGEsMHgxNSwweDdiLDB4OWIsMHg1MSww eDc5LDB4ZGEsCi0rCTB4NDksMHgzZCwweGRlLDB4ZTgsMHhiYywweDkzLDB4OTEsMHg5OQotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x OTJfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJewotKwkweDkwLDB4ZWUsMHg3Niww eGExLDB4NDUsMHg4ZCwweGI3LDB4NDAsMHhiMCwweDExLDB4YmYsMHhkMCwKLSsJMHg2NSwweGQ3 LDB4M2MsMHg3YywweDRmLDB4MjAsMHgzZiwweDRlLDB4MTEsMHg5ZCwweGIzLDB4NWUKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTky X3VzZV9kZl9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHgyNCwweDNiLDB4MjAsMHhhNCww eDM3LDB4NjYsMHhiYSwweDcyLDB4MzksMHgzZiwweGNmLDB4M2MsCi0rCTB4N2UsMHgxYSwweDJi LDB4ODMKLSsJfTsKLSsKLSsKLSsvKiBBRVMtMTkyIHVzZSBkZiBObyBQUiAgKi8KLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9lbnRy b3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHg4ZCwweDc0LDB4YTQsMHg1MCwweDFhLDB4MDIsMHg2OCww eDBjLDB4MmEsMHg2OSwweGM0LDB4ODIsCi0rCTB4M2IsMHhiYiwweGRhLDB4MGUsMHg3ZiwweDc3 LDB4YTMsMHgxNywweDc4LDB4NTcsMHhiMiwweDdiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfbm9uY2VbXSA9Ci0r CXsKLSsJMHg3NSwweGQ1LDB4MWYsMHhhYywweGE0LDB4OGQsMHg0MiwweDc4LDB4ZDcsMHg2OSww eDg2LDB4OWQsCi0rCTB4NzcsMHhkNywweDQxLDB4MGUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wZXJzb25hbGl6 YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg0ZSwweDMzLDB4NDEsMHgzYywweDljLDB4YzIsMHhk MiwweDUzLDB4YWYsMHg5MCwweGVhLDB4Y2YsCi0rCTB4MTksMHg1MCwweDFlLDB4ZTYsMHg2Ziww eDYzLDB4YzgsMHgzMiwweDIyLDB4ZGMsMHgwNywweDY1LAotKwkweDljLDB4ZDMsMHhmOCwweDMw LDB4OWUsMHhlZCwweDM1LDB4NzAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0r CXsKLSsJMHg1ZCwweDhiLDB4OGMsMHhjMSwweGRmLDB4MGUsMHgwMiwweDc4LDB4ZmIsMHgxOSww eGI4LDB4NjksCi0rCTB4NzgsMHg0ZSwweDljLDB4NTIsMHhiYywweGM3LDB4MjAsMHhjOSwweGU2 LDB4NWUsMHg3NywweDIyLAotKwkweDI4LDB4M2QsMHgwYywweDllLDB4NjgsMHhhOCwweDQ1LDB4 ZDcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTkyX3VzZV9kZl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZDUsMHhlNyww eDA4LDB4YzUsMHgxOSwweDk5LDB4ZDUsMHgzMSwweDAzLDB4MGEsMHg3NCwweGI2LAotKwkweGI3 LDB4ZWQsMHhlOSwweGVhCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7 Ci0rCTB4OWMsMHgyNiwweGRhLDB4ZjEsMHhhYywweGQ5LDB4NWEsMHhkNiwweGE4LDB4NjUsMHhm NSwweDAyLAotKwkweDhmLDB4ZGMsMHhhMiwweDA5LDB4NTQsMHhhNiwweGUyLDB4YTQsMHhkZSww eDMyLDB4ZTAsMHgwMQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJ ewotKwkweDliLDB4OTAsMHhiMCwweDNhLDB4MGUsMHgzYSwweDgwLDB4MDcsMHg0YSwweGY0LDB4 ZGEsMHg3NiwKLSsJMHgyOCwweDMwLDB4M2MsMHhlZSwweDU0LDB4MWIsMHg5NCwweDU5LDB4NTEs MHg0MywweDU2LDB4NzcsCi0rCTB4YWYsMHg4OCwweGRkLDB4NjMsMHg4OSwweDQ3LDB4MDYsMHg2 NQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xOTJfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHgzYywweDExLDB4 NjQsMHg3YSwweDk2LDB4ZjUsMHhkOCwweGI4LDB4YWUsMHhkNiwweDcwLDB4NGUsCi0rCTB4MTYs MHg5NiwweGRlLDB4ZTksMHg2MiwweGJjLDB4ZWUsMHgyOCwweDJmLDB4MjYsMHhhNiwweGYwLAot KwkweDU2LDB4ZWYsMHhhMywweGYxLDB4NmIsMHhhMSwweGIxLDB4NzcKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9y ZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHgwYiwweGUyLDB4NTYsMHgwMywweDFlLDB4ZGIsMHgy YywweDZkLDB4N2YsMHgxYiwweDE1LDB4NTgsCi0rCTB4MWEsMHhmOSwweDEzLDB4MjgKLSsJfTsK LSsKLSsKLSsvKiBBRVMtMjU2IHVzZSBkZiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRbXSA9 Ci0rCXsKLSsJMHg2MSwweDY4LDB4ZmMsMHgxYSwweGYwLDB4YjUsMHg5NSwweDZiLDB4ODUsMHgw OSwweDliLDB4NzQsCi0rCTB4M2YsMHgxMywweDc4LDB4NDksMHgzYiwweDg1LDB4ZWMsMHg5Myww eDEzLDB4M2IsMHhhOSwweDRmLAotKwkweDk2LDB4YWIsMHgyYywweGU0LDB4YzgsMHg4ZiwweGRk LDB4NmEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMjU2X3VzZV9kZl9wcl9ub25jZVtdID0KLSsJewotKwkweGFkLDB4ZDIsMHhiYiww eGJhLDB4YjcsMHg2NSwweDg5LDB4YzMsMHgyMSwweDZjLDB4NTUsMHgzMywKLSsJMHgyYiwweDM2 LDB4ZmYsMHhhNAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJ ewotKwkweDZlLDB4Y2EsMHhlNywweDIwLDB4NzIsMHhkMywweDg0LDB4NWEsMHgzMiwweGQzLDB4 NGIsMHgyNCwKLSsJMHg3MiwweGM0LDB4NjMsMHgyYiwweDlkLDB4MTIsMHgyNCwweDBjLDB4MjMs MHgyNiwweDhlLDB4ODMsCi0rCTB4MTYsMHgzNywweDBiLDB4ZDEsMHgwNiwweDRmLDB4NjgsMHg2 ZAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18yNTZfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDdlLDB4MDgs MHg0YSwweGJiLDB4ZTMsMHgyMSwweDdjLDB4YzksMHgyMywweGQyLDB4ZjgsMHhiMCwKLSsJMHg3 MywweDk4LDB4YmEsMHg4NCwweDc0LDB4MjMsMHhhYiwweDA2LDB4OGEsMHhlMiwweDIyLDB4ZDMs Ci0rCTB4N2IsMHhjZSwweDliLDB4ZDIsMHg0YSwweDc2LDB4YjgsMHhkZQotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2Rm X3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4MGIsMHgyMywweGFmLDB4ZGYsMHhmMSww eDYyLDB4ZDcsMHhkMywweDQzLDB4OTcsMHhmOCwweDc3LAotKwkweDA0LDB4YTgsMHg0MiwweDIw LDB4YmQsMHhmNiwweDBmLDB4YzEsMHgxNywweDJmLDB4OWYsMHg1NCwKLSsJMHhiYiwweDU2LDB4 MTcsMHg4NiwweDY4LDB4MGUsMHhiYSwweGE5Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfaW50X3JldHVybmVk Yml0c1tdID0KLSsJewotKwkweDMxLDB4OGUsMHhhZCwweGFmLDB4NDAsMHhlYiwweDZiLDB4NzQs MHgzMSwweDQ2LDB4ODAsMHhjNywKLSsJMHgxNywweGFiLDB4M2MsMHg3YQotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2Rm X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg5NCwweDZiLDB4YzksMHg5ZiwweGFi LDB4OGQsMHhjNSwweGVjLDB4NzEsMHg4OCwweDFkLDB4MDAsCi0rCTB4OGMsMHg4OSwweDY4LDB4 ZTQsMHhjOCwweDA3LDB4NzcsMHgzNiwweDE3LDB4NmQsMHg3OSwweDc4LAotKwkweGM3LDB4MDYs MHg0ZSwweDk5LDB4MDQsMHgyOCwweDI5LDB4YzMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9lbnRyb3B5aW5w dXRwcjJbXSA9Ci0rCXsKLSsJMHhiZiwweDZjLDB4NTksMHgyYSwweDBkLDB4NDQsMHgwZiwweGFl LDB4OWEsMHg1ZSwweDAzLDB4NzMsCi0rCTB4ZDgsMHhhNiwweGUxLDB4Y2YsMHgyNSwweDYxLDB4 MzgsMHgyNCwweDg2LDB4OWUsMHg1MywweGU4LAotKwkweGE0LDB4ZGYsMHg1NiwweGY0LDB4MDYs MHgwNywweDljLDB4MGYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJ MHgyMiwweDRhLDB4YjQsMHhiOCwweGI2LDB4ZWUsMHg3ZCwweGIxLDB4OWUsMHhjOSwweGY5LDB4 YTAsCi0rCTB4ZDksMHhlMiwweDk3LDB4MDAKLSsJfTsKLSsKLSsKLSsvKiBBRVMtMjU2IHVzZSBk ZiBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMjU2X3VzZV9kZl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHhhNSwweDNlLDB4Mzcs MHgxMCwweDE3LDB4NDMsMHg5MSwweDkzLDB4NTksMHgxZSwweDQ3LDB4NTAsCi0rCTB4ODcsMHhh YSwweGRkLDB4ZDUsMHhjMSwweGMzLDB4ODYsMHhjZCwweGNhLDB4MGQsMHhkYiwweDY4LAotKwkw eGUwLDB4MDIsMHhkOCwweDBmLDB4ZGMsMHg0MCwweDFhLDB4NDcKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9ub25j ZVtdID0KLSsJewotKwkweGE5LDB4NGQsMHhhNSwweDVhLDB4ZmQsMHhjNSwweDBjLDB4ZTUsMHgx YywweDlhLDB4M2IsMHg4YSwKLSsJMHg0YywweDQ0LDB4ODQsMHg0MAotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3Bl cnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDhiLDB4NTIsMHhhMiwweDRhLDB4OTMs MHhjMywweDRlLDB4YTcsMHgxZSwweDFjLDB4YTcsMHgwNSwKLSsJMHhlYiwweDgyLDB4OWIsMHhh NiwweDVkLDB4ZTQsMHhkNCwweGUwLDB4N2YsMHhhMywweGQ4LDB4NmIsCi0rCTB4MzcsMHg4NCww eDVmLDB4ZjEsMHhjNywweGQ1LDB4ZjYsMHhkMgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2FkZGl0aW9uYWxpbnB1 dFtdID0KLSsJewotKwkweDIwLDB4ZjQsMHgyMiwweGVkLDB4ZjgsMHg1YywweGExLDB4NmEsMHgw MSwweGNmLDB4YmUsMHg1ZiwKLSsJMHg4ZCwweDZjLDB4OTQsMHg3ZiwweGFlLDB4MTIsMHhhOCww eDU3LDB4ZGIsMHgyYSwweGE5LDB4YmYsCi0rCTB4YzcsMHhiMywweDY1LDB4ODEsMHg4MCwweDhk LDB4MGQsMHg0NgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg0 ZSwweDQ0LDB4ZmQsMHhmMywweDllLDB4MjksMHhhMiwweGI4LDB4MGYsMHg1ZCwweDZjLDB4ZTEs Ci0rCTB4MjgsMHgwYywweDNiLDB4YzEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9lbnRyb3B5aW5wdXRyZXNlZWRb XSA9Ci0rCXsKLSsJMHhkZCwweDQwLDB4ZTUsMHg5OCwweDdiLDB4MjcsMHgxNiwweDczLDB4MTUs MHg2OCwweGQyLDB4NzYsCi0rCTB4YmYsMHgwYywweDY3LDB4MTUsMHg3NSwweDc5LDB4MDMsMHhk MywweGRlLDB4ZGUsMHg5MSwweDQ2LAotKwkweDQyLDB4ZGQsMHhkNCwweDY3LDB4YzgsMHg3OSww eGM4LDB4MWUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJ MHg3ZiwweGQ4LDB4MWYsMHhiZCwweDJhLDB4YjUsMHgxYywweDExLDB4NWQsMHg4MywweDRlLDB4 OTksCi0rCTB4ZjYsMHg1YywweGE1LDB4NDAsMHgyMCwweGVkLDB4MzgsMHg4ZSwweGQ1LDB4OWUs MHhlMCwweDc1LAotKwkweDkzLDB4ZmUsMHgxMiwweDVlLDB4NWQsMHg3MywweGZiLDB4NzUKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4Y2QsMHgyYywweGZmLDB4 MTQsMHg2OSwweDNlLDB4NGMsMHg5ZSwweGZkLDB4ZmUsMHgyNiwweDBkLAotKwkweGU5LDB4ODYs MHgwMCwweDQ5LDB4MzAsMHhiYSwweGIxLDB4YzYsMHg1MCwweDU3LDB4NzcsMHgyYSwKLSsJMHg2 MiwweDM5LDB4MmMsMHgzYiwweDc0LDB4ZWIsMHhjOSwweDBkCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcmV0dXJu ZWRiaXRzW10gPQotKwl7Ci0rCTB4NGYsMHg3OCwweGJlLDB4YjksMHg0ZCwweDk3LDB4OGMsMHhl OSwweGQwLDB4OTcsMHhmZSwweGFkLAotKwkweGZhLDB4ZmQsMHgzNSwweDVlCi0rCX07Ci0rCi0r Ci0rLyogQUVTLTEyOCBubyBkZiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewot KwkweDlhLDB4MjUsMHg2NSwweDEwLDB4NjcsMHhkNSwweGI2LDB4NmIsMHg3MCwweGExLDB4YjMs MHhhNCwKLSsJMHg0MywweDk1LDB4ODAsMHhjMCwweDg0LDB4MGEsMHg3OSwweGIwLDB4ODgsMHg3 NCwweGYyLDB4YmYsCi0rCTB4MzEsMHg2YywweDMzLDB4MzgsMHgwYiwweDAwLDB4YjIsMHg1YQot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xMjhfbm9fZGZfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHg3OCwweDQ3LDB4NmIsMHhmNywweDkw LDB4OGUsMHg4NywweGYxCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9 Ci0rCXsKLSsJMHhmNywweDIyLDB4MWQsMHgzYSwweGJlLDB4MWQsMHhjYSwweDMyLDB4MWIsMHhi ZCwweDg3LDB4MGMsCi0rCTB4NTEsMHgyNCwweDE5LDB4ZWUsMHhhMywweDIzLDB4MDksMHg2Myww eDMzLDB4M2QsMHhhOCwweDBjLAotKwkweDFjLDB4ZmEsMHg0MiwweDg5LDB4Y2MsMHg2ZiwweGEw LDB4YTgKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMTI4X25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweGM5LDB4 ZTAsMHg4MCwweGJmLDB4OGMsMHg0NSwweDU4LDB4MzksMHhmZiwweDAwLDB4YWIsMHgwMiwKLSsJ MHg0YywweDNlLDB4M2EsMHg5NSwweDliLDB4ODAsMHhhOCwweDIxLDB4MmEsMHhlZSwweGJhLDB4 NzMsCi0rCTB4YjEsMHhkOSwweGNmLDB4MjgsMHhmNiwweDhmLDB4OWIsMHgxMgotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9f ZGZfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHg0YywweGE4LDB4YzUsMHhmMCwweDU5 LDB4OWUsMHhhNiwweDhkLDB4MjYsMHg1MywweGQ3LDB4OGEsCi0rCTB4YTksMHhkOCwweGY3LDB4 ZWQsMHhiMiwweGY5LDB4MTIsMHg0MiwweGUxLDB4ZTUsMHhiZCwweGU3LAotKwkweGU3LDB4MWQs MHg3NCwweDk5LDB4MDAsMHg5ZCwweDMxLDB4M2UKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2ludF9yZXR1cm5l ZGJpdHNbXSA9Ci0rCXsKLSsJMHhlMiwweGFjLDB4MjAsMHhmMCwweDgwLDB4ZTcsMHhiYywweDdl LDB4OWMsMHg3YiwweDY1LDB4NzEsCi0rCTB4YWYsMHgxOSwweDMyLDB4MTYKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2Rm X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHgzMiwweDdmLDB4MzgsMHg4YiwweDcz LDB4MGEsMHg3OCwweDgzLDB4ZGMsMHgzMCwweGJlLDB4OWYsCi0rCTB4MTAsMHgxZiwweGY1LDB4 MWYsMHhjYSwweDAwLDB4YjUsMHgwZCwweGQ2LDB4OWQsMHg2MCwweDgzLAotKwkweDUxLDB4NTQs MHg3ZCwweDM4LDB4MjMsMHgzYSwweDUyLDB4NTAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2VudHJvcHlpbnB1 dHByMltdID0KLSsJewotKwkweDE4LDB4NjEsMHg1MywweDU2LDB4ZWQsMHhlZCwweGQ3LDB4MjAs MHhmYiwweDcxLDB4MDQsMHg3YSwKLSsJMHhiMiwweGFjLDB4YzEsMHgyOCwweGNkLDB4ZjIsMHhj MiwweGZjLDB4YWEsMHhiMSwweDA2LDB4MDcsCi0rCTB4ZTksMHg0NiwweDk1LDB4MDIsMHg0OCww eDAxLDB4NzgsMHhmOQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4 MjksMHhjOCwweDFiLDB4MTUsMHhiMSwweGQxLDB4YzIsMHhmNiwweDcxLDB4ODYsMHg2OCwweDMz LAotKwkweDU3LDB4ODIsMHgzMywweGFmCi0rCX07Ci0rCi0rCi0rLyogQUVTLTEyOCBubyBkZiBO byBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTI4X25vX2RmX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweGM5LDB4YzUsMHg3OSwweGJj LDB4ZTgsMHhjNSwweDE5LDB4ZDgsMHhiYywweDY2LDB4NzMsMHg2NywKLSsJMHhmNiwweGQzLDB4 NzIsMHhhYSwweGE2LDB4MTYsMHhiOCwweDUwLDB4YjcsMHg0NywweDNhLDB4NDIsCi0rCTB4YWIs MHhmNCwweDE2LDB4YjIsMHg5NiwweGQyLDB4YjYsMHg2MAotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfbm9uY2VbXSA9 Ci0rCXsKLSsJMHg1ZiwweGJmLDB4OTcsMHgwYywweDRiLDB4YTQsMHg4NywweDEzCi0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9u b19kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHhjZSwweGZiLDB4N2IsMHgz ZiwweGQ0LDB4NmIsMHgyOSwweDBkLDB4NjksMHgwNiwweGZmLDB4YmIsCi0rCTB4ZjIsMHhlNSww eGM2LDB4NmMsMHgwYSwweDEwLDB4YTAsMHhjZiwweDFhLDB4NDgsMHhjNywweDhiLAotKwkweDNj LDB4MTYsMHg4OCwweGVkLDB4NTAsMHgxMywweDgxLDB4Y2UKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2FkZGl0aW9u YWxpbnB1dFtdID0KLSsJewotKwkweDRiLDB4MjIsMHg0NiwweDE4LDB4MDIsMHg3YiwweGQyLDB4 MWIsMHgyMiwweDQyLDB4N2MsMHgzNywKLSsJMHhkOSwweGY2LDB4ZTgsMHg5YiwweDEyLDB4MzAs MHg1ZiwweGU5LDB4OTAsMHhlOCwweDA4LDB4MjQsCi0rCTB4NGYsMHgwNiwweDY2LDB4ZGIsMHgx OSwweDJiLDB4MTMsMHg5NQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfaW50X3JldHVybmVkYml0c1tdID0KLSsJewot KwkweDJlLDB4OTYsMHg3MCwweDY0LDB4ZmEsMHhkZiwweGRmLDB4NTcsMHhiNSwweDgyLDB4ZWUs MHhkNiwKLSsJMHhlZCwweDNlLDB4NjUsMHhjMgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfZW50cm9weWlucHV0cmVz ZWVkW10gPQotKwl7Ci0rCTB4MjYsMHhjMCwweDcyLDB4MTYsMHgzYSwweDRiLDB4YjcsMHg5OSww eGQ0LDB4MDcsMHhhZiwweDY2LAotKwkweDYyLDB4MzYsMHg5NiwweGE0LDB4NTEsMHgxNywweGZh LDB4MDcsMHg4YiwweDE3LDB4NWUsMHhhMSwKLSsJMHgyZiwweDNjLDB4MTAsMHhlNywweDkwLDB4 ZDAsMHg0NiwweDAwCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsK LSsJMHg4MywweDM5LDB4MzcsMHg3YiwweDAyLDB4MDYsMHhkMiwweDEyLDB4MTMsMHg4ZCwweDhi LDB4ZjIsCi0rCTB4ZjAsMHhmNiwweDI2LDB4ZWIsMHhhNCwweDIyLDB4N2IsMHhjMiwweGU3LDB4 YmEsMHg3OSwweGU0LAotKwkweDNiLDB4NzcsMHg1ZCwweDRkLDB4NDcsMHhiMiwweDJkLDB4YjQK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTI4X25vX2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHgwYiwweGI5LDB4Njcs MHgzNywweGRiLDB4ODMsMHhkZiwweGNhLDB4ODEsMHg4YiwweGY5LDB4M2YsCi0rCTB4ZjEsMHgx MSwweDFiLDB4MmYsMHhmMCwweDYxLDB4YTYsMHhkZiwweGJhLDB4YTMsMHhiMSwweGFjLAotKwkw eGQzLDB4ZTYsMHgwOSwweGI4LDB4MmMsMHg2YSwweDY3LDB4ZDYKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3JldHVy bmVkYml0c1tdID0KLSsJewotKwkweDFlLDB4YTcsMHhhNCwweGU0LDB4ZTEsMHhhNiwweDdjLDB4 NjksMHg5YSwweDQ0LDB4NmMsMHgzNiwKLSsJMHg4MSwweDM3LDB4MTksMHhkNAotKwl9OwotKwot KwotKy8qIEFFUy0xOTIgbm8gZGYgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsK LSsJMHg5ZCwweDJjLDB4ZDIsMHg1NSwweDY2LDB4ZWEsMHhlMCwweGJlLDB4MTgsMHhiNywweDc2 LDB4ZTcsCi0rCTB4NzMsMHgzNSwweGQ4LDB4MWYsMHhhZCwweDNhLDB4ZTMsMHg4MSwweDBlLDB4 OTIsMHhkMCwweDYxLAotKwkweGM5LDB4MTIsMHgyNiwweGY2LDB4MWMsMHhkZiwweGZlLDB4NDcs MHhhYSwweGZlLDB4N2QsMHg1YSwKLSsJMHgxNywweDFmLDB4OGQsMHg5YQotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZf cHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHg0NCwweDgyLDB4ZWQsMHhlOCwweDRjLDB4MjgsMHg1YSww eDE0LDB4ZmYsMHg4OCwweDhkLDB4MTksCi0rCTB4NjEsMHg1YywweGVlLDB4MGYKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25v X2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDQ3LDB4ZDcsMHg5Yiww eDk5LDB4YWEsMHhjYiwweGU3LDB4ZDIsMHg1NywweDY2LDB4MmMsMHhlMSwKLSsJMHg3OCwweGQ2 LDB4MmMsMHhlYSwweGEzLDB4MjMsMHg1ZiwweDJhLDB4YzEsMHgzYSwweGYwLDB4YTQsCi0rCTB4 MjAsMHgzYiwweGZhLDB4MDcsMHhkNSwweDA1LDB4MDIsMHhlNCwweDU3LDB4MDEsMHhiNiwweDEw LAotKwkweDU3LDB4MmUsMHhlNywweDU1Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXRb XSA9Ci0rCXsKLSsJMHg0YiwweDc0LDB4MGIsMHg0MCwweGNlLDB4NmIsMHhjMiwweDZhLDB4MjQs MHhiNCwweGYzLDB4YWQsCi0rCTB4N2EsMHhhNSwweDdhLDB4YTIsMHgxNSwweGUyLDB4YzgsMHg2 MSwweDE1LDB4YzYsMHhiNywweDg1LAotKwkweDY5LDB4MTEsMHhhZCwweDdiLDB4MTQsMHhkMiww eGY2LDB4MTIsMHhhMSwweDk1LDB4NWQsMHgzZiwKLSsJMHhlMiwweGQwLDB4MGMsMHgyZgotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x OTJfbm9fZGZfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHgwYywweDljLDB4YWQsMHgw NSwweGVlLDB4YWUsMHg0OCwweDIzLDB4ODksMHg1OSwweGExLDB4OTQsCi0rCTB4ZDcsMHhkOCww eDc1LDB4ZDUsMHg1NCwweDkzLDB4YzcsMHg0YSwweGQ5LDB4MjYsMHhkZSwweGViLAotKwkweGJh LDB4YjAsMHg3ZSwweDMwLDB4MWQsMHg1ZiwweDY5LDB4NDAsMHg5YywweDNiLDB4MTcsMHg1OCwK LSsJMHgxZCwweDMwLDB4YjMsMHg3OAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfaW50X3JldHVybmVkYml0c1td ID0KLSsJewotKwkweGY3LDB4OTMsMHhiMCwweDZkLDB4NzcsMHg4MywweGQ1LDB4MzgsMHgwMSww eGUxLDB4NTIsMHg0MCwKLSsJMHg3ZSwweDNlLDB4MGMsMHgyNgotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfYWRk aXRpb25hbGlucHV0MltdID0KLSsJewotKwkweGJjLDB4NGIsMHgzNywweDQ0LDB4MWMsMHhjNSww eDQ1LDB4NWYsMHg4ZiwweDUxLDB4NjIsMHg4YSwKLSsJMHg4NSwweDMwLDB4MWQsMHg3YywweGU0 LDB4Y2YsMHhmNywweDQ0LDB4Y2UsMHgzMiwweDNlLDB4NTcsCi0rCTB4OTUsMHhhNCwweDJhLDB4 ZGYsMHhmZCwweDllLDB4MzgsMHg0MSwweGIzLDB4ZjYsMHhjNSwweGVlLAotKwkweDBjLDB4NGIs MHhlZSwweDZlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0rCXsKLSsJMHhl YywweGFmLDB4ZjYsMHg0ZiwweGIxLDB4YTAsMHg1NCwweGI1LDB4NWIsMHhlMywweDQ2LDB4YjAs Ci0rCTB4NzYsMHg1YSwweDdjLDB4M2YsMHg3YiwweDk0LDB4NjksMHgyMSwweDUxLDB4MDIsMHhl NSwweDlmLAotKwkweDA0LDB4NTksMHgwMiwweDk4LDB4YzYsMHg0MywweDJjLDB4Y2MsMHgyNiww eDRjLDB4ODcsMHg2YiwKLSsJMHg4ZSwweDBhLDB4ODMsMHhkZgotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfcmV0 dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4NzQsMHg0NSwweGZiLDB4NTMsMHg4NCwweDk2LDB4YmUs MHhmZiwweDE1LDB4Y2MsMHg0MSwweDkxLAotKwkweGI5LDB4YTEsMHgyMSwweDY4Ci0rCX07Ci0r Ci0rCi0rLyogQUVTLTE5MiBubyBkZiBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2VudHJvcHlpbnB1dFtdID0KLSsJ ewotKwkweDNjLDB4N2QsMHhiNSwweGUwLDB4NTQsMHhkOSwweDZlLDB4OGMsMHhhOSwweDg2LDB4 Y2UsMHg0ZSwKLSsJMHg2YiwweGFmLDB4ZWIsMHgyZiwweGU3LDB4NzUsMHhlMCwweDhiLDB4YTQs MHgzYiwweDA3LDB4ZmUsCi0rCTB4YmUsMHgzMywweDc1LDB4OTMsMHg4MCwweDI3LDB4YjUsMHgy OSwweDQ3LDB4OGIsMHhjNywweDI4LAotKwkweDk0LDB4YzMsMHg1OSwweDYzCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19k Zl9ub25jZVtdID0KLSsJewotKwkweDQzLDB4ZjEsMHg3ZCwweGI4LDB4YzMsMHhmZSwweGQwLDB4 MjMsMHg2YiwweGI0LDB4OTIsMHhkYiwKLSsJMHgyOSwweGZkLDB4NDUsMHg3MQotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9f ZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4OWYsMHgyNCwweDI5LDB4OTks MHg5ZSwweDAxLDB4YWIsMHhlOSwweDE5LDB4ZDgsMHgyMywweDA4LAotKwkweGI3LDB4ZDYsMHg3 ZSwweDhjLDB4YzAsMHg5ZSwweDdmLDB4NmUsMHg1YiwweDMzLDB4MjAsMHg5NiwKLSsJMHgwYiww eDIzLDB4MmMsMHhhNSwweDZhLDB4ZjgsMHgxYiwweDA0LDB4MjYsMHhkYiwweDJlLDB4MmIsCi0r CTB4M2IsMHg4OCwweGNlLDB4MzUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJ ewotKwkweDk0LDB4ZTksMHg3YywweDNkLDB4YTcsMHhkYiwweDYwLDB4ODMsMHgxZiwweDk4LDB4 M2YsMHgwYiwKLSsJMHg4OCwweDU5LDB4NTcsMHg1MSwweDg4LDB4OWYsMHg3NiwweDQ5LDB4OWYs MHhhNiwweGRhLDB4NzEsCi0rCTB4MWQsMHgwZCwweDQ3LDB4MTYsMHg2MywweGM1LDB4NjgsMHhl NCwweDVkLDB4MzksMHg2OSwweGIzLAotKwkweDNlLDB4YmUsMHhkNCwweDhlCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19k Zl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZjksMHhkNywweGFkLDB4NjksMHhhYiww eDhmLDB4MjMsMHg1NiwweDcwLDB4MTcsMHg0ZiwweDJhLAotKwkweDQ1LDB4ZTcsMHg0YSwweGM1 Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzE5Ml9ub19kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHhhNiwweDcxLDB4 NmEsMHgzZCwweGJhLDB4ZDEsMHhlOCwweDY2LDB4YTYsMHhlZiwweGIyLDB4MGUsCi0rCTB4YTgs MHg5YywweGFhLDB4NGUsMHhhZiwweDE3LDB4ODksMHg1MCwweDAwLDB4ZGEsMHhhMSwweGIxLAot KwkweDBiLDB4YTQsMHhkOSwweDM1LDB4ODksMHhjOCwweGU1LDB4YjAsMHhkOSwweGI3LDB4YzQs MHgzMywKLSsJMHg5YiwweGNiLDB4N2UsMHg3NQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfYWRkaXRpb25hbGlucHV0 cmVzZWVkW10gPQotKwl7Ci0rCTB4MjcsMHgyMSwweGZjLDB4YzIsMHhiZCwweGYzLDB4M2MsMHhj ZSwweGMzLDB4Y2EsMHhjMSwweDAxLAotKwkweGUwLDB4ZmYsMHg5MywweDEyLDB4N2QsMHg1NCww eDQyLDB4ZTMsMHg5ZiwweDAzLDB4ZGYsMHgyNywKLSsJMHgwNCwweDA3LDB4M2MsMHg1MywweDdm LDB4YTgsMHg2NiwweGM4LDB4OTcsMHg0YiwweDYxLDB4NDAsCi0rCTB4NWQsMHg3YSwweDI1LDB4 NzkKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTkyX25vX2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHgyZCwweDhlLDB4 MTYsMHg1ZCwweDBiLDB4OWYsMHhlYiwweGFhLDB4ZDYsMHhlYywweDI4LDB4NzEsCi0rCTB4N2Ms MHgwYiwweGMxLDB4MWQsMHhkNCwweDQ0LDB4MTksMHg0NywweGZkLDB4MWQsMHg3YywweGU1LAot KwkweGYzLDB4MjcsMHhlMSwweGI2LDB4NzIsMHgwYSwweGUwLDB4ZWMsMHgwZSwweGNkLDB4ZWYs MHgxYSwKLSsJMHg5MSwweDZhLDB4ZTMsMHg1ZgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcmV0dXJuZWRiaXRzW10g PQotKwl7Ci0rCTB4ZTUsMHhkYSwweGI4LDB4ZTAsMHg2MywweDU5LDB4NWEsMHhjYywweDNkLDB4 ZGMsMHg5ZiwweGU4LAotKwkweDY2LDB4NjcsMHgyYywweDkyCi0rCX07Ci0rCi0rCi0rLyogQUVT LTI1NiBubyBkZiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDE1LDB4 YzcsMHg1ZCwweGNiLDB4NDEsMHg0YiwweDE2LDB4MDEsMHgzYSwweGQxLDB4NDQsMHhlOCwKLSsJ MHgyMiwweDMyLDB4YzYsMHg5YywweDNmLDB4ZTcsMHg0MywweGY1LDB4OWEsMHhkMywweGVhLDB4 ZjIsCi0rCTB4ZDcsMHg0ZSwweDZlLDB4NmEsMHg1NSwweDczLDB4NDAsMHhlZiwweDg5LDB4YWQs MHgwZCwweDAzLAotKwkweDk2LDB4N2UsMHg3OCwweDgxLDB4MmYsMHg5MSwweDFiLDB4NDQsMHhi MCwweDAyLDB4YmEsMHgxYwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHhkYyww eGU0LDB4ZDQsMHgyNywweDdhLDB4OTAsMHhkNywweDk5LDB4NDMsMHhhMSwweDNjLDB4MzAsCi0r CTB4Y2MsMHg0YiwweGVlLDB4MmUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmlu Z1tdID0KLSsJewotKwkweGUzLDB4ZTYsMHhiOSwweDExLDB4ZTQsMHg3YSwweGE0LDB4NDAsMHg2 YiwweGY4LDB4NzMsMHhmNywKLSsJMHg3ZSwweGVjLDB4YzcsMHhiOSwweDk3LDB4YmYsMHhmOCww eDI1LDB4N2IsMHhiZSwweDExLDB4OWIsCi0rCTB4NWIsMHg2YSwweDBjLDB4MmUsMHgyYiwweDAx LDB4NTEsMHhjZCwweDQxLDB4NGIsMHg2YiwweGFjLAotKwkweDMxLDB4YTgsMHgwYiwweGY3LDB4 ZTYsMHg1OSwweDQyLDB4YjgsMHgwMywweDBjLDB4ZjgsMHgwNgotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfYWRk aXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4NmEsMHg5ZiwweDAwLDB4OTEsMHhhZSwweGZlLDB4 Y2YsMHg4NCwweDk5LDB4Y2UsMHhiMSwweDQwLAotKwkweDZkLDB4NWQsMHgzMywweDI4LDB4ODQs MHhmNCwweDhjLDB4NjMsMHg0YywweDdlLDB4YmQsMHgyYywKLSsJMHg4MCwweDc2LDB4ZWUsMHg1 YSwweGFhLDB4MTUsMHgwNywweDMxLDB4ZDgsMHhiYiwweDhjLDB4NjksCi0rCTB4OWQsMHg5ZCww eGJjLDB4N2UsMHg0OSwweGFlLDB4ZWMsMHgzOSwweDZiLDB4ZDEsMHgxZiwweDdlCi0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9u b19kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweGYzLDB4YjksMHg3NSwweDljLDB4 YmQsMHg4OCwweGVhLDB4YTIsMHg1MCwweGFkLDB4ZDYsMHgxNiwKLSsJMHgxYSwweDEyLDB4M2Ms MHg4NiwweDY4LDB4YWYsMHg2ZiwweGJlLDB4MTksMHhmMiwweGVlLDB4Y2MsCi0rCTB4YTUsMHg3 MCwweDg0LDB4NTMsMHg1MCwweGNiLDB4OWYsMHgxNCwweGE5LDB4ZTUsMHhlZSwweGI5LAotKwkw eDQ4LDB4NDUsMHg0MCwweGUyLDB4YzcsMHhjOSwweDlhLDB4NzQsMHhmZiwweDhjLDB4OTksMHgx ZgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18yNTZfbm9fZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDJlLDB4ZjIs MHg0NSwweDRjLDB4NjIsMHgyZSwweDBhLDB4YjksMHg2YiwweGEyLDB4ZmQsMHg1NiwKLSsJMHg3 OSwweDYwLDB4OTMsMHhjZgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJ ewotKwkweGFmLDB4NjksMHgyMCwweGU5LDB4M2IsMHgzNywweDlkLDB4M2YsMHhiNCwweDgwLDB4 MDIsMHg3YSwKLSsJMHgyNSwweDdkLDB4YjgsMHhkZSwweDcxLDB4YzUsMHgwNiwweDBjLDB4YjQs MHhlMiwweDhmLDB4MzUsCi0rCTB4ZDgsMHgxNCwweDBkLDB4N2YsMHg3NiwweDYzLDB4NGUsMHhi NSwweGVlLDB4ZTksMHg2ZiwweDM0LAotKwkweGM3LDB4NWYsMHg1NiwweDE0LDB4NGEsMHhlOCww eDczLDB4OTUsMHg1YiwweDFjLDB4YjksMHhjYgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfZW50cm9weWlucHV0 cHIyW10gPQotKwl7Ci0rCTB4ZTUsMHhiMCwweDJlLDB4N2UsMHg1MiwweDMwLDB4ZTMsMHg2Myww eDgyLDB4YjYsMHg0NCwweGQzLAotKwkweDI1LDB4MTksMHgwNSwweDI0LDB4OWEsMHg5ZiwweDVm LDB4MjcsMHg2YSwweDI5LDB4YWIsMHhmYSwKLSsJMHgwNywweGEyLDB4NDIsMHgwZiwweGM1LDB4 YTgsMHg5NCwweDdjLDB4MTcsMHg3YiwweDg1LDB4ODMsCi0rCTB4MGMsMHgyNSwweDBlLDB4NjMs MHgwYiwweGU5LDB4MTIsMHg2MCwweGNkLDB4ZWYsMHg4MCwweDBmCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9y ZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg1ZSwweGYyLDB4MjYsMHhlZiwweDlmLDB4NTgsMHg1 ZCwweGQ1LDB4NGEsMHgxMCwweGZlLDB4YTcsCi0rCTB4MmQsMHg1ZiwweDRhLDB4NDYKLSsJfTsK LSsKLSsKLSsvKiBBRVMtMjU2IG5vIGRmIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfZW50cm9weWlucHV0W10gPQot Kwl7Ci0rCTB4ZmIsMHhjZiwweDFiLDB4NjEsMHgxNiwweDg5LDB4NzgsMHgyMywweGY1LDB4ZDgs MHg5NiwweGUzLAotKwkweDRlLDB4NjQsMHgwYiwweDI5LDB4OWEsMHgzZiwweGY4LDB4YTUsMHhl ZCwweGYyLDB4ZmUsMHhkYiwKLSsJMHgxNiwweGNhLDB4N2YsMHgxMCwweGZhLDB4NWUsMHgxOCww eDc2LDB4MmMsMHg2MywweDVlLDB4OTYsCi0rCTB4Y2YsMHhiMywweGQ2LDB4ZmMsMHhhZiwweDk5 LDB4MzksMHgyOCwweDljLDB4NjEsMHhlOCwweGIzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9ub25jZVtdID0KLSsJ ewotKwkweDEyLDB4OTYsMHhmMCwweDUyLDB4ZjMsMHg4ZCwweDgxLDB4Y2YsMHhkZSwweDg2LDB4 ZjIsMHg5OSwKLSsJMHg0MywweDk2LDB4YjksMHhmMAotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcGVyc29uYWxpemF0 aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4NjMsMHgwZCwweDc4LDB4ZjUsMHg5MCwweDhlLDB4MzIs MHg0NywweGIwLDB4NGQsMHgzNywweDYwLAotKwkweDA5LDB4OTYsMHhiYywweGJmLDB4OTcsMHg3 YSwweDYyLDB4MTQsMHg0NSwweGJkLDB4OGQsMHhjYywKLSsJMHg2OSwweGZiLDB4MDMsMHhlMSww eDgwLDB4MWMsMHhjNywweGUyLDB4MmEsMHhmOSwweDM3LDB4M2YsCi0rCTB4NjYsMHg0ZCwweDYy LDB4ZDksMHgxMCwweGUwLDB4YWQsMHhjOCwweDlhLDB4ZjAsMHhhOCwweDZkCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19k Zl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHgzNiwweGM2LDB4MTMsMHg2MCwweGJiLDB4 MTQsMHhhZCwweDIyLDB4YjAsMHgzOCwweGFjLDB4YTYsCi0rCTB4MTgsMHgxNiwweDkzLDB4MjUs MHg4NiwweGI3LDB4ZGMsMHhkYywweDM2LDB4OTgsMHgyYiwweGY5LAotKwkweDY4LDB4MzMsMHhk MywweGM2LDB4ZmYsMHhjZSwweDhkLDB4MTUsMHg1OSwweDgyLDB4NzYsMHhlZCwKLSsJMHg2Ziww eDhkLDB4NDksMHg3NCwweDJmLDB4ZGEsMHhkYywweDFmLDB4MTcsMHhkMCwweGRlLDB4MTcKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X25vX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHgxNiwweDJmLDB4OGUsMHgz ZiwweDIxLDB4N2EsMHgxYywweDIwLDB4NTYsMHhkMSwweDkyLDB4ZjYsCi0rCTB4ZDIsMHgyNSww eDc1LDB4MGUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMjU2X25vX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDkx LDB4NzksMHg3NiwweGVlLDB4ZTAsMHhjZiwweDllLDB4YzIsMHhkNSwweGQ0LDB4MjMsMHg5YiwK LSsJMHgxMiwweDhjLDB4N2UsMHgwYSwweGI3LDB4ZDIsMHg4YiwweGQ2LDB4N2MsMHhhMywweGM2 LDB4ZTUsCi0rCTB4MGUsMHhhYSwweGM3LDB4NmIsMHhhZSwweDBkLDB4ZmEsMHg1MywweDA2LDB4 NzksMHhhMSwweGVkLAotKwkweDRkLDB4NmEsMHgwZSwweGQ4LDB4OWQsMHhiZSwweDFiLDB4MzEs MHg5MywweDdiLDB4ZWMsMHhmYgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10g PQotKwl7Ci0rCTB4ZDIsMHg0NiwweDUwLDB4MjIsMHgxMCwweDE0LDB4NjMsMHhmNywweGVhLDB4 MGYsMHhiOSwweDdlLAotKwkweDBkLDB4ZTEsMHg5NCwweDA3LDB4YWYsMHgwOSwweDQ0LDB4MzEs MHhlYSwweDY0LDB4YTQsMHgxOCwKLSsJMHg1YiwweGY5LDB4ZDgsMHhjMiwweGZhLDB4MDMsMHg0 NywweGM1LDB4MzksMHg0MywweGQ1LDB4M2IsCi0rCTB4NjIsMHg4NiwweDY0LDB4ZWEsMHgyYyww eDczLDB4OGMsMHhhZSwweDlkLDB4OTgsMHg5OCwweDI5Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9hZGRpdGlvbmFs aW5wdXQyW10gPQotKwl7Ci0rCTB4OGMsMHhhYiwweDE4LDB4ZjgsMHhjMywweGVjLDB4MTgsMHg1 YywweGIzLDB4MWUsMHg5ZCwweGJlLAotKwkweDNmLDB4MDMsMHhiNCwweDAwLDB4OTgsMHg5ZCww eGFlLDB4ZWIsMHhmNCwweDk0LDB4ZjgsMHg0MiwKLSsJMHg4ZiwweGUzLDB4MzksMHgwNywweGUx LDB4YzksMHhhZCwweDBiLDB4MWYsMHhlZCwweGMwLDB4YmEsCi0rCTB4ZjYsMHhkMSwweGVjLDB4 MjcsMHg4NiwweDdiLDB4ZDYsMHg1NSwweDliLDB4NjAsMHhhNSwweGM2Ci0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9y ZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhlZiwweGQyLDB4ZDgsMHg1YywweGRjLDB4NjIsMHgy NSwweDlmLDB4YWEsMHgxZSwweDJjLDB4NjcsCi0rCTB4ZjYsMHgwMiwweDMyLDB4ZTIKLSsJfTsK LSsKLSsKLSsvKiBTSEEtMSBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGExX3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweGQyLDB4MzYs MHhhNSwweDI3LDB4MzEsMHg3MywweGRkLDB4MTEsMHg0ZiwweDkzLDB4YmQsMHhlMiwKLSsJMHgz MSwweGE1LDB4OTEsMHgxMwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHhiNSwweGIzLDB4NjAs MHhlZiwweGY3LDB4NjMsMHgzMSwweGYzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9 Ci0rCXsKLSsJMHhkNCwweGJiLDB4MDIsMHgxMCwweGIyLDB4NzEsMHhkYiwweDgxLDB4ZDYsMHhm MCwweDQyLDB4NjAsCi0rCTB4ZGEsMHhlYSwweDc3LDB4NTIKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2FkZGl0aW9uYWxpbnB1 dFtdID0KLSsJewotKwkweDRkLDB4ZDIsMHg2YywweDg3LDB4ZmIsMHgyYywweDRmLDB4YTYsMHg4 ZCwweDE2LDB4NjMsMHgyMiwKLSsJMHg2YSwweDUxLDB4ZTMsMHhmOAotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfZW50cm9weWlu cHV0cHJbXSA9Ci0rCXsKLSsJMHhjOSwweDgzLDB4OWUsMHgxNiwweGY2LDB4MWMsMHgwZiwweGIy LDB4ZWMsMHg2MCwweDMxLDB4YTksCi0rCTB4Y2IsMHhhOSwweDM2LDB4N2EKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2ludF9y ZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhhOCwweDEzLDB4NGYsMHhmNCwweDMxLDB4MDIsMHg0 NCwweGUzLDB4ZDMsMHgzZCwweDYxLDB4OWUsCi0rCTB4ZTUsMHhjNiwweDNlLDB4ODksMHhiNSww eDliLDB4MGYsMHgzNQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTFfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweGY5LDB4 ZTgsMHhkMiwweDcyLDB4MTMsMHgzNCwweDk1LDB4NmYsMHgxNSwweDQ5LDB4NDcsMHg5OSwKLSsJ MHgxNiwweDAzLDB4MTksMHg0NwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4 NGUsMHg4YywweDQ5LDB4OWIsMHg0YSwweDVjLDB4OWIsMHg5YywweDNhLDB4ZWUsMHhmYiwweGQy LAotKwkweGFlLDB4Y2QsMHg4YywweGM0Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJ MHg1MCwweGI0LDB4YjQsMHhjZCwweDY4LDB4NTcsMHhmYywweDJlLDB4YzEsMHg1MiwweGNjLDB4 ZjYsCi0rCTB4NjgsMHhhNCwweDgxLDB4ZWQsMHg3ZSwweGU0LDB4MWQsMHg4NwotKwl9OwotKwot KwotKy8qIFNIQS0xIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTFfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4YTksMHg0NywweDFi LDB4MjksMHgyZCwweDFjLDB4MDUsMHhkZiwweDc2LDB4ZDAsMHg2MiwweGY5LAotKwkweGUyLDB4 N2YsMHg0YywweDdiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMV9ub25jZVtdID0KLSsJewotKwkweDUzLDB4MjMsMHgyNCwweGUzLDB4 ZWMsMHgwYywweDU0LDB4MTQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGExX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkw eDdhLDB4ODcsMHhhMSwweGFjLDB4MWMsMHhmZCwweGFiLDB4YWUsMHhmNywweGQ2LDB4ZmIsMHg3 NiwKLSsJMHgyOCwweGVjLDB4NmQsMHhjYQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0r CTB4ZmMsMHg5MiwweDM1LDB4ZDYsMHg3ZSwweGI3LDB4MjQsMHg2NSwweGZkLDB4MTIsMHgyNyww eDM1LAotKwkweGMwLDB4NzIsMHhjYSwweDI4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7 Ci0rCTB4NTcsMHg4OCwweDgyLDB4ZTUsMHgyNSwweGE1LDB4MmMsMHg0YSwweDA2LDB4MjAsMHg2 YywweDcyLAotKwkweDU1LDB4NjEsMHhkZCwweDkwLDB4NzEsMHg5ZiwweDk1LDB4ZWEKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2Vu dHJvcHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDY5LDB4YTUsMHg0MCwweDYyLDB4OTgsMHg0 NywweDU2LDB4NzMsMHg0YSwweDhmLDB4NjAsMHg5NiwKLSsJMHhkNiwweDk5LDB4MjcsMHhlZAot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTFfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4ZTUsMHg0MCwweDRlLDB4YmQs MHg1MCwweDAwLDB4ZjUsMHgxNSwweGE2LDB4ZWUsMHg0NSwweGRhLAotKwkweDg0LDB4M2QsMHhk NCwweGMwCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMV9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4MTEsMHg1MSwweDE0LDB4 ZjAsMHgwOSwweDFiLDB4NGUsMHg1NiwweDBkLDB4ZTksMHhmNiwweDFlLAotKwkweDUyLDB4NjUs MHhjZCwweDk2Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMV9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhhMSwweDljLDB4OTQsMHg2 ZSwweDI5LDB4ZTEsMHgzMywweDBkLDB4MzIsMHhkNiwweGFhLDB4Y2UsCi0rCTB4NzEsMHgzZiww eDUyLDB4NzIsMHg4YiwweDQyLDB4YTgsMHhkNwotKwl9OwotKwotKwotKy8qIFNIQS0yMjQgUFIg ICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0 X3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDEyLDB4NjksMHgzMiwweDRmLDB4ODMsMHhh NiwweGY1LDB4MTQsMHhlMywweDQ5LDB4M2UsMHg3NSwKLSsJMHgzZSwweGRlLDB4YWQsMHhhMSww eDI5LDB4YzMsMHhmMywweDE5LDB4MjAsMHhiNSwweDRjLDB4ZDkKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfbm9uY2VbXSA9 Ci0rCXsKLSsJMHg2YSwweDc4LDB4ZDAsMHhlYiwweGJiLDB4NWEsMHhmMCwweGVlLDB4ZTgsMHhj MywweGJhLDB4NzEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEyMjRfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4 ZDUsMHhiOCwweGI2LDB4YmMsMHhjMSwweDViLDB4NjAsMHgzMSwweDNjLDB4ZjUsMHhlNSwweGMw LAotKwkweDhlLDB4NTIsMHg3YSwweGJkLDB4ZWEsMHg0NywweGE5LDB4NWYsMHg4ZiwweGY5LDB4 OGIsMHhhZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTIyNF9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHgxZiwweDU1LDB4 ZWMsMHhhZSwweDE2LDB4MTIsMHg4NCwweGJhLDB4ODQsMHgxNiwweDE5LDB4ODgsCi0rCTB4OGUs MHhiOCwweDMzLDB4MjUsMHg1NCwweGZmLDB4Y2EsMHg3OSwweGFmLDB4MDcsMHgyNSwweDUwCi0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh MjI0X3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4OTIsMHhhMywweDMyLDB4YTgsMHg5 YSwweDBhLDB4NTgsMHg3YywweDFkLDB4NWEsMHg3ZSwweGUxLAotKwkweGIyLDB4NzMsMHhhYiww eDBlLDB4MTYsMHg3OSwweDIzLDB4ZDMsMHgyOSwweDg5LDB4ODEsMHhlMQotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9pbnRf cmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZjMsMHgzOCwweDkxLDB4NDAsMHgzNywweDdhLDB4 NTEsMHg3MiwweDQyLDB4NzQsMHg3OCwweDBhLAotKwkweDY5LDB4ZmQsMHhhNiwweDQ0LDB4NDMs MHg0NSwweDZjLDB4MGMsMHg1YSwweDE5LDB4ZmYsMHhmMSwKLSsJMHg1NCwweDYwLDB4ZWUsMHg2 YQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTIyNF9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4NzUsMHhmMywweDA0LDB4 MjUsMHhkZCwweDM2LDB4YTgsMHgzNywweDQ2LDB4YWUsMHgwYywweDUyLAotKwkweDA1LDB4Nzks MHg0YywweDI2LDB4ZGIsMHhlOSwweDcxLDB4MTYsMHg0YywweDBhLDB4ZjIsMHg2MAotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9w cl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0rCXsKLSsJMHhlYSwweGM1LDB4MDMsMHgwYSwweDRmLDB4 YjAsMHgzOCwweDhkLDB4MjMsMHhkNCwweGM4LDB4NzcsCi0rCTB4ZTIsMHg2ZCwweDljLDB4MGIs MHg0NCwweGY3LDB4MmQsMHg1YiwweGJmLDB4NWQsMHgyYSwweDExCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX3JldHVybmVk Yml0c1tdID0KLSsJewotKwkweDYwLDB4NTAsMHgyYiwweGU3LDB4ODYsMHhkOCwweDI2LDB4NzMs MHhlMywweDFkLDB4OTUsMHgyMCwKLSsJMHhiMywweDJjLDB4MzIsMHgxYywweGY1LDB4Y2UsMHg1 NywweGE2LDB4NjcsMHgyYiwweGRjLDB4NGUsCi0rCTB4ZGQsMHgxMSwweDRjLDB4YzQKLSsJfTsK LSsKLSsKLSsvKiBTSEEtMjI0IE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHhiMiww eDFjLDB4NzcsMHg0ZCwweGY2LDB4ZDMsMHhiNiwweDQwLDB4YjcsMHgzMCwweDNlLDB4MjksCi0r CTB4YjAsMHg4NSwweDFjLDB4YmUsMHg0YSwweGVhLDB4NmIsMHg1YSwweGI1LDB4OGEsMHg5Nyww eGViCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMjI0X25vbmNlW10gPQotKwl7Ci0rCTB4NDIsMHgwMiwweDBhLDB4MWMsMHg5OCwweDlh LDB4NzcsMHg5ZSwweDlmLDB4ODAsMHhiYSwweGUwCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3BlcnNvbmFsaXphdGlvbnN0cmlu Z1tdID0KLSsJewotKwkweDk4LDB4YjgsMHgwNCwweDQxLDB4ZmMsMHhjMSwweDVkLDB4YzUsMHhl OSwweGI5LDB4MDgsMHhkYSwKLSsJMHhmOSwweGZhLDB4MGQsMHg5MCwweGNlLDB4ZGYsMHgxZCww eDEwLDB4YTksMHg4ZCwweDUwLDB4MGMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0r CTB4OWEsMHg4ZCwweDM5LDB4NDksMHg0MiwweGQ1LDB4MGIsMHhhZSwweGUxLDB4YWYsMHhiNyww eDAwLAotKwkweDAyLDB4ZmEsMHg5NiwweGIxLDB4YTUsMHgxZCwweDJkLDB4MjUsMHg3OCwweGVl LDB4ODMsMHgzZgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTIyNF9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZTQsMHhmNSww eDUzLDB4NzksMHg1YSwweDk3LDB4NTgsMHgwNiwweDA4LDB4YmEsMHg3YiwweGZhLAotKwkweGYw LDB4ODMsMHgwNSwweDhjLDB4MjIsMHhjMCwweGM5LDB4ZGIsMHgxNSwweGU3LDB4ZGUsMHgyMCwK LSsJMHg1NSwweDIyLDB4OWEsMHhhZAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsK LSsJMHg2NywweDA5LDB4NDgsMHhhYSwweDA3LDB4MTYsMHg5OSwweDg5LDB4N2YsMHg2ZCwweGEw LDB4ZTUsCi0rCTB4OGYsMHhkZiwweGJjLDB4ZGIsMHhmZSwweGU1LDB4NmMsMHg3YSwweDk1LDB4 NGEsMHg2NiwweDE3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMjI0X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDBm LDB4NGIsMHgxYywweDZmLDB4YjcsMHhlMywweDQ3LDB4ZTUsMHg1ZCwweDdkLDB4MzgsMHhkNiwK LSsJMHgyOCwweDliLDB4ZWIsMHg1NSwweDYzLDB4MDksMHgzZSwweDdjLDB4NTYsMHhlYSwweGY4 LDB4MTkKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEyMjRfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDJkLDB4MjYsMHg3Yyww eDM3LDB4ZTQsMHg3YSwweDI4LDB4NWUsMHg1YSwweDNjLDB4YWYsMHgzZCwKLSsJMHg1YSwweDhl LDB4NTUsMHhhMiwweDFhLDB4NmUsMHhjMCwweGU1LDB4ZjYsMHgyMSwweGQzLDB4ZjYKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRf cmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4NGQsMHg4MywweDM1LDB4ZGYsMHg2NywweGE5LDB4 ZmMsMHgxNywweGRhLDB4NzAsMHhjYywweDhiLAotKwkweDdmLDB4NzcsMHhhZSwweGEyLDB4NWYs MHhiOSwweDdlLDB4NzQsMHg0YywweDI2LDB4YzEsMHg3YSwKLSsJMHgzYiwweGE3LDB4NWMsMHg5 MwotKwl9OwotKwotKwotKy8qIFNIQS0yNTYgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewot KwkweGNlLDB4NDksMHgwMCwweDdhLDB4NTYsMHhlMywweDY3LDB4OGYsMHhlMSwweGI2LDB4YTcs MHhkNCwKLSsJMHg0ZiwweDA4LDB4N2EsMHgxYiwweDAxLDB4ZjQsMHhmYSwweDZiLDB4ZWYsMHhi NywweGU1LDB4ZWIsCi0rCTB4MDcsMHgzZCwweDExLDB4MGQsMHhjOCwweGVhLDB4MmIsMHhmZQot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTI1Nl9wcl9ub25jZVtdID0KLSsJewotKwkweDczLDB4NDEsMHhjOCwweDkyLDB4OTQsMHhlMiww eGM1LDB4NWYsMHg5MywweGZkLDB4MzksMHg1ZCwKLSsJMHgyYiwweDkxLDB4NGQsMHgzOAotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1 Nl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg1MCwweDZkLDB4MDEsMHgw MSwweDA3LDB4NWEsMHg4MCwweDM1LDB4N2EsMHg1NiwweDFhLDB4NTYsCi0rCTB4MmYsMHg5YSww eDBiLDB4MzUsMHhiMiwweGIxLDB4YzksMHhlNSwweGNhLDB4NjksMHg2MSwweDQ4LAotKwkweGZm LDB4ZmIsMHgwZiwweGQ5LDB4NGIsMHg3OSwweDFkLDB4YmEKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfYWRkaXRpb25hbGlu cHV0W10gPQotKwl7Ci0rCTB4MjAsMHhiOCwweGRmLDB4NDQsMHg3NywweDVhLDB4YjgsMHhkMyww eGJmLDB4ZjYsMHhjZiwweGFjLAotKwkweDVlLDB4YTYsMHg5NiwweDYyLDB4NzMsMHg0NCwweDQw LDB4NGEsMHgzMCwweGZiLDB4MzgsMHhhNSwKLSsJMHg3YiwweDBkLDB4ZTQsMHgwZCwweGM2LDB4 ZTQsMHg5YSwweDFmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMjU2X3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4MDQsMHhj NCwweDY1LDB4ZjQsMHhkMywweGJmLDB4ODMsMHg0YiwweGFiLDB4YzgsMHg0MSwweGE4LAotKwkw eGMyLDB4ZTAsMHg0NCwweDYzLDB4NzcsMHg0YywweDZmLDB4NmMsMHg0OSwweDQ2LDB4ZmYsMHg5 NCwKLSsJMHgxNywweGVhLDB4ZTYsMHgxYSwweDlkLDB4NWUsMHg2NiwweDc4Ci0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2lu dF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHgwNywweDRkLDB4YWMsMHg5YiwweDg2LDB4Y2Es MHg0YSwweGFhLDB4NmUsMHg3YSwweDAzLDB4YTIsCi0rCTB4NWQsMHgxMCwweGVhLDB4MGIsMHhm OSwweDgzLDB4Y2MsMHhkMSwweGZjLDB4ZTIsMHgwNywweGM3LAotKwkweDA2LDB4MzQsMHg2MCww eDZmLDB4ODMsMHg5NCwweDk5LDB4NzYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJ ewotKwkweDg5LDB4NGUsMHg0NSwweDhjLDB4MTEsMHhmOSwweGJjLDB4NWIsMHhhYywweDc0LDB4 OGIsMHg0YiwKLSsJMHg1ZiwweGY3LDB4MTksMHhmMywweGY1LDB4MjQsMHg1NCwweDE0LDB4ZDEs MHgxNSwweGIxLDB4NDMsCi0rCTB4MTIsMHhhNCwweDVmLDB4ZDQsMHhlYywweGZjLDB4Y2QsMHgw OQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTI1Nl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0rCXsKLSsJMHgwZSwweGViLDB4MWYsMHhk NywweGZjLDB4ZDEsMHg5ZCwweGQ0LDB4MDUsMHgzNiwweDhiLDB4YjIsCi0rCTB4ZmIsMHhlNCww eGY0LDB4NTEsMHgwYywweDg3LDB4OWIsMHgwMiwweDQ0LDB4ZDUsMHg5MiwweDRkLAotKwkweDQ0 LDB4ZmUsMHgxYSwweDAzLDB4NDMsMHg1NiwweGJkLDB4ODYKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfcmV0dXJuZWRiaXRz W10gPQotKwl7Ci0rCTB4MDIsMHhhYSwweGI2LDB4MWQsMHg3ZSwweDJhLDB4NDAsMHgwMywweDY5 LDB4MmQsMHg0OSwweGEzLAotKwkweDQxLDB4ZTcsMHg0NCwweDBiLDB4YWYsMHg3YiwweDg1LDB4 ZTQsMHg1ZiwweDUzLDB4M2IsMHg2NCwKLSsJMHhiYywweDg5LDB4YzgsMHg4MiwweGQ0LDB4Nzgs MHgzNywweGEyCi0rCX07Ci0rCi0rCi0rLyogU0hBLTI1NiBObyBQUiAgKi8KLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfZW50cm9weWlucHV0W10g PQotKwl7Ci0rCTB4NWIsMHgxYiwweGVjLDB4NGQsMHhhOSwweDM4LDB4NzQsMHg1YSwweDM0LDB4 MGIsMHg3YiwweGM1LAotKwkweGU1LDB4ZDcsMHg2NiwweDdjLDB4YmMsMHg4MiwweGI5LDB4MGUs MHgyZCwweDFmLDB4OTIsMHhkNywKLSsJMHhjMSwweGJjLDB4NjcsMHg2OSwweGVjLDB4NmIsMHgw MywweDNjCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMjU2X25vbmNlW10gPQotKwl7Ci0rCTB4YTQsMHgwYywweGQ4LDB4OWMsMHg2MSww eGQ4LDB4YzMsMHg1NCwweGZlLDB4NTMsMHhjOSwweGU1LAotKwkweDVkLDB4NmYsMHg2ZCwweDM1 Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMjU2X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDIyLDB4NWUsMHg2Miww eDkzLDB4NDIsMHg4MywweDc4LDB4MjQsMHhkOCwweDQwLDB4OGMsMHhkZSwKLSsJMHg2ZiwweGY5 LDB4YTQsMHg3YSwweGM1LDB4YTcsMHgzYiwweDg4LDB4YTMsMHhlZSwweDQyLDB4MjAsCi0rCTB4 ZmQsMHg2MSwweDU2LDB4YzYsMHg0YywweDEzLDB4NDEsMHg5YwotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9hZGRpdGlvbmFsaW5w dXRbXSA9Ci0rCXsKLSsJMHhiZiwweDc0LDB4NWIsMHhmNiwweGM1LDB4NjQsMHg1ZSwweDk5LDB4 MzQsMHg4ZiwweGJjLDB4YTQsCi0rCTB4ZTIsMHhiZCwweGQ4LDB4ODUsMHgyNiwweDM3LDB4ZWEs MHhiYSwweDRmLDB4ZjIsMHg5YSwweDlhLAotKwkweDY2LDB4ZmMsMHhkZiwweDYzLDB4MjYsMHgy NiwweDE5LDB4ODcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEyNTZfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGIzLDB4YzYs MHgwNywweDA3LDB4ZDYsMHg3NSwweGY2LDB4MmIsMHhkNiwweDIxLDB4OTYsMHhmMSwKLSsJMHhh ZSwweGRiLDB4MmIsMHhhYywweDI1LDB4MmEsMHhhZSwweGFlLDB4NDEsMHg3MiwweDAzLDB4NWUs Ci0rCTB4YmYsMHhkMywweDY0LDB4YmMsMHg1OSwweGY5LDB4YzAsMHg3NgotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9lbnRyb3B5 aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHhiZiwweDIwLDB4MzMsMHg1NiwweDI5LDB4YTgsMHgz NywweDA0LDB4MWYsMHg3OCwweDM0LDB4M2QsCi0rCTB4ODEsMHgyYSwweGM5LDB4ODYsMHhjNiww eDdhLDB4MmYsMHg4OCwweDVlLDB4ZDUsMHhiZSwweDM0LAotKwkweDQ2LDB4MjAsMHhhNCwweDM1 LDB4ZWIsMHhjNywweGUyLDB4OWQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQotKwl7 Ci0rCTB4OWIsMHhhZSwweDJkLDB4MmQsMHg2MSwweGE0LDB4ODksMHhlYiwweDQzLDB4NDYsMHhh NywweGRhLAotKwkweGVmLDB4NDAsMHhjYSwweDRhLDB4OTksMHgxMSwweDQxLDB4ZGMsMHg1Yyww eDk0LDB4ZTksMHhhYywKLSsJMHhkNCwweGQwLDB4ZTYsMHhiZCwweGZiLDB4MDMsMHg5YywweGE4 Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMjU2X2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHgyMywweGFhLDB4MGMsMHhiZCww eDI4LDB4MzMsMHhlMiwweDUxLDB4ZmMsMHg3MSwweGQyLDB4MTUsCi0rCTB4MWYsMHg3NiwweGZk LDB4MGQsMHhlMCwweGI3LDB4YjUsMHg4NCwweDc1LDB4NWIsMHhiZSwweGYzLAotKwkweDVjLDB4 Y2EsMHhjNSwweDMwLDB4ZjIsMHg3NSwweDFmLDB4ZGEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcmV0dXJuZWRiaXRzW10gPQot Kwl7Ci0rCTB4OTAsMHgzYywweGMxLDB4MTAsMHg4YywweDEyLDB4MDEsMHhjNiwweGE2LDB4M2Es MHgwZiwweDRkLAotKwkweGI2LDB4M2EsMHg0ZiwweDQxLDB4OWMsMHg2MSwweDc1LDB4ODQsMHhl OSwweDc0LDB4NzUsMHhmZCwKLSsJMHhmZSwweGYyLDB4MWYsMHg0MywweGQ4LDB4NWUsMHgyNCww eGEzCi0rCX07Ci0rCi0rCi0rLyogU0hBLTM4NCBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfZW50cm9weWlucHV0W10gPQotKwl7 Ci0rCTB4NzEsMHg5ZCwweGIyLDB4NWEsMHg3MSwweDZkLDB4MDQsMHhlOSwweDFlLDB4YzcsMHg5 MiwweDI0LAotKwkweDZlLDB4MTIsMHgzMywweGE5LDB4NTIsMHg2NCwweDMxLDB4ZWYsMHg3MSww eGViLDB4MjIsMHg1NSwKLSsJMHgyOCwweDk3LDB4MDYsMHg2YSwweGMwLDB4MGMsMHhhMCwweDdl Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMzg0X3ByX25vbmNlW10gPQotKwl7Ci0rCTB4ZjUsMHgwZCwweGZhLDB4YjAsMHhlYywweDZh LDB4N2MsMHhkNiwweGJkLDB4OWIsMHgwNSwweGZkLAotKwkweDM4LDB4M2UsMHgyZSwweDU2Ci0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh Mzg0X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDc0LDB4YWMsMHg3ZSww eDZkLDB4YjEsMHhhNCwweGU3LDB4MjEsMHhkMSwweDFlLDB4NmUsMHg5NiwKLSsJMHg2ZCwweDRk LDB4NTMsMHg0NiwweDgyLDB4OTYsMHg2ZSwweGNmLDB4YWEsMHg4MSwweDhkLDB4N2QsCi0rCTB4 OWUsMHhlMSwweDBmLDB4MTUsMHhlYSwweDQxLDB4YmYsMHhlMwotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9hZGRpdGlvbmFs aW5wdXRbXSA9Ci0rCXsKLSsJMHhkYSwweDk1LDB4ZDQsMHhkMCwweGI4LDB4MTEsMHhkMywweDQ5 LDB4MjcsMHg1ZCwweGE5LDB4MzksCi0rCTB4NjgsMHhmMywweGE4LDB4ZTksMHg1ZCwweDE5LDB4 OGEsMHgyYiwweDY2LDB4ZTgsMHg2OSwweDA2LAotKwkweDdjLDB4OWUsMHgwMywweGExLDB4OGIs MHgyNiwweDJkLDB4NmUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEzODRfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHg0OSww eGRmLDB4NDQsMHgwMCwweGU0LDB4MWMsMHg3NSwweDBiLDB4MjYsMHg1YSwweDU5LDB4NjQsCi0r CTB4MWYsMHg0ZSwweGIxLDB4YjIsMHgxMywweGYxLDB4MjIsMHg0ZSwweGI0LDB4NmQsMHg5YSww eGNjLAotKwkweGEwLDB4NDgsMHhlNiwweGNmLDB4MWQsMHhkMSwweDkyLDB4MGQKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJf aW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGM4LDB4NTIsMHhhZSwweGJmLDB4MDQsMHgz YywweDI3LDB4YjcsMHg3OCwweDE4LDB4YWEsMHg4ZiwKLSsJMHhmZiwweGNmLDB4YTQsMHhmMSww eGNjLDB4ZTcsMHg2OCwweGZhLDB4MjIsMHhhMiwweDEzLDB4NDUsCi0rCTB4ZTgsMHhkZCwweDg3 LDB4ZTYsMHhmMiwweDZlLDB4ZGQsMHhjNywweDUyLDB4OTAsMHg5ZiwweDdiLAotKwkweGZhLDB4 NjEsMHgyZCwweDlkLDB4OWUsMHhjZiwweDk4LDB4YWMsMHg1MiwweDQwLDB4Y2UsMHhhZgotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4 NF9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4NjEsMHg3YywweDAzLDB4OWEsMHgz ZSwweDUwLDB4NTcsMHg2MCwweGM1LDB4ODMsMHhjOSwweGIyLAotKwkweGQxLDB4ODcsMHg4NSww eDY2LDB4OTIsMHg1ZCwweDg0LDB4MGUsMHg1MywweGZiLDB4NzAsMHgwMywKLSsJMHg3MiwweGZk LDB4YmEsMHhhZSwweDljLDB4OGYsMHhmOCwweDE4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2VudHJvcHlpbnB1dHByMltd ID0KLSsJewotKwkweGY4LDB4ZWIsMHg4OSwweGIxLDB4OGQsMHg3OCwweGJlLDB4MjEsMHhlMCww eGJiLDB4OWQsMHhiNywKLSsJMHg5NSwweDBlLDB4ZDksMHg0NiwweDBjLDB4OGMsMHhlMiwweDYz LDB4YjcsMHg5ZCwweDY3LDB4OTAsCi0rCTB4YmQsMHhjNywweDBiLDB4YTUsMHhjZSwweGIyLDB4 NjUsMHg4MQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTM4NF9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhlNiwweDlmLDB4ZmUs MHg2OCwweGQ2LDB4YjUsMHg3OSwweGYxLDB4MDYsMHg1ZiwweGEzLDB4YmIsCi0rCTB4MjMsMHg4 NSwweGQ4LDB4ZjAsMHgyOSwweDVhLDB4NjgsMHg5ZSwweGY1LDB4ZjQsMHhhNiwweDEyLAotKwkw eGUwLDB4OWEsMHhlMiwweGFjLDB4MDAsMHgxZCwweDk4LDB4MjYsMHhmYywweDUzLDB4OTUsMHg1 MywKLSsJMHhlNCwweDNlLDB4MTcsMHhkNSwweDA4LDB4MGIsMHg3MCwweDNkLDB4NjcsMHg5OSww eGFjLDB4NjYKLSsJfTsKLSsKLSsKLSsvKiBTSEEtMzg0IE5vIFBSICAqLwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9lbnRyb3B5aW5wdXRbXSA9 Ci0rCXsKLSsJMHgwNywweDE1LDB4MjcsMHgyYSwweGFmLDB4NzQsMHgyNCwweDM3LDB4YmMsMHhk NSwweDE0LDB4NjksCi0rCTB4Y2UsMHgxMSwweGZmLDB4YTIsMHg2YiwweGI4LDB4MDUsMHg2Nyww eDM0LDB4ZjgsMHhiZCwweDZkLAotKwkweDZhLDB4Y2MsMHhjZCwweDYwLDB4YTMsMHg2OCwweGNh LDB4ZjQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEzODRfbm9uY2VbXSA9Ci0rCXsKLSsJMHg3MCwweDE3LDB4YzIsMHg1YiwweDVkLDB4 MjIsMHgwYiwweDA2LDB4MTUsMHg1NCwweDc4LDB4NzcsCi0rCTB4NDQsMHhhZiwweDJmLDB4MDkK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEzODRfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4ODksMHgzOSwweDI4LDB4 YjAsMHg2MCwweGViLDB4M2QsMHhkYywweDU1LDB4NzUsMHg4NiwweGViLAotKwkweGFlLDB4YTIs MHg4ZiwweGJjLDB4MWIsMHg3NSwweGQ0LDB4ZTEsMHgwZiwweGFhLDB4MzgsMHhjYSwKLSsJMHg2 MiwweDhiLDB4Y2IsMHgyYywweDI2LDB4ZjYsMHhiYywweGIxCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2FkZGl0aW9uYWxpbnB1 dFtdID0KLSsJewotKwkweDMwLDB4MmIsMHg0MiwweDM1LDB4ZWYsMHhkYSwweDQwLDB4NTUsMHgy OCwweGM2LDB4OTUsMHhmYiwKLSsJMHg1NCwweDAxLDB4NjIsMHhkNywweDg3LDB4MTQsMHg0OCww eDZkLDB4OTAsMHg0YywweGE5LDB4MDIsCi0rCTB4NTQsMHg0MCwweDIyLDB4YzgsMHg2NiwweGE1 LDB4NDgsMHg0OAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTM4NF9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ODIsMHhjNCww eGExLDB4OWMsMHgyMSwweGQyLDB4ZTcsMHhhNSwweGE2LDB4ZjYsMHg1ZiwweDA0LAotKwkweDVj LDB4YzcsMHgzMSwweDlkLDB4OGQsMHg1OSwweDc0LDB4NTAsMHgxOSwweDg5LDB4MmYsMHg2MywK LSsJMHhkNSwweGI3LDB4N2UsMHhlYiwweDE1LDB4ZTMsMHg3MCwweDgzLDB4YTEsMHgyNCwweDU5 LDB4ZmEsCi0rCTB4MmMsMHg1NiwweGY2LDB4ODgsMHgzYSwweDkyLDB4OTMsMHhhMSwweGZiLDB4 NzksMHhjMSwweDdhCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMzg0X2VudHJvcHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDM5LDB4 YTYsMHhlOCwweDVjLDB4ODIsMHgxNywweDcxLDB4MjYsMHg1NywweDRmLDB4OWYsMHhjMiwKLSsJ MHg1NSwweGZmLDB4NWMsMHg5YiwweDUzLDB4MWEsMHhkMSwweDVmLDB4YmMsMHg2MiwweGU0LDB4 MjcsCi0rCTB4MmQsMHgzMiwweGYwLDB4ZTQsMHg1MiwweDhjLDB4YzUsMHgwYwotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9hZGRp dGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg4ZCwweGNiLDB4OGQsMHhjZSwweDA4LDB4 ZWEsMHg4MCwweGU4LDB4OWIsMHg2MSwweGE4LDB4MGYsCi0rCTB4YWYsMHg0OSwweDIwLDB4OWUs MHg3NCwweGNiLDB4NTcsMHg4MCwweDQyLDB4YjAsMHg4NCwweDVlLAotKwkweDMwLDB4MmEsMHg2 NywweDA4LDB4ZjQsMHhlMywweDQwLDB4MjIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfYWRkaXRpb25hbGlucHV0MltdID0KLSsJ ewotKwkweDdjLDB4OGYsMHhjMiwweGFlLDB4MjIsMHg0YSwweGQ2LDB4ZjYsMHgwNSwweGE0LDB4 N2EsMHhlYSwKLSsJMHhiYiwweDI1LDB4ZDAsMHhiNywweDVhLDB4ZDYsMHhjZiwweDlkLDB4ZjMs MHg2YywweGUyLDB4YjIsCi0rCTB4NGUsMHhiNCwweGJkLDB4ZjQsMHhlNSwweDQwLDB4ODAsMHg5 NAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTM4NF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg5ZSwweDdlLDB4ZmIsMHg1OSwweGJi LDB4YWEsMHgzYywweGY3LDB4ZTEsMHhmOCwweDc2LDB4ZGQsCi0rCTB4NjMsMHg1ZiwweGFmLDB4 MjMsMHhkNiwweDY0LDB4NjEsMHhjMCwweDlhLDB4MDksMHg0NywweGM5LAotKwkweDMzLDB4ZGYs MHg2ZCwweDU1LDB4OTEsMHgzNCwweDc5LDB4NzAsMHhjNCwweDk5LDB4NmUsMHg1NCwKLSsJMHgw OSwweDY0LDB4MjEsMHgxYSwweGJkLDB4MWUsMHg4MCwweDQwLDB4MzQsMHhhZCwweGZhLDB4ZDcK LSsJfTsKLSsKLSsKLSsvKiBTSEEtNTEyIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJ MHgxMywweGY3LDB4NjEsMHg3NSwweDY1LDB4MjgsMHhhMiwweDU5LDB4MTMsMHg1YSwweDRhLDB4 NGYsCi0rCTB4NTYsMHg2MCwweDhjLDB4NTMsMHg3ZCwweGIwLDB4YmQsMHgwNiwweDRmLDB4ZWQs MHhjYywweGQyLAotKwkweGEyLDB4YjUsMHhmZCwweDViLDB4M2EsMHhhYiwweGVjLDB4MjgKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1 MTJfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHhiZSwweGEzLDB4OTEsMHg5MywweDFkLDB4YzMsMHgz MSwweDNhLDB4MjMsMHgzMywweDUwLDB4NjcsCi0rCTB4ODgsMHhjNywweGEyLDB4YzQKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJf cHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4MWYsMHg1OSwweDRkLDB4N2Is MHhlNiwweDQ2LDB4OTEsMHg0OCwweGMxLDB4MjUsMHhmYSwweGZmLAotKwkweDg5LDB4MTIsMHg3 NywweDM1LDB4ZGYsMHgzZSwweGY0LDB4ODAsMHg1ZiwweGQ5LDB4YjAsMHgwNywKLSsJMHgyMiww eDQxLDB4ZGQsMHg0OCwweDc4LDB4NmIsMHg3NywweDJiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1 dFtdID0KLSsJewotKwkweDMwLDB4ZmYsMHg2MywweDZmLDB4YWMsMHhkOSwweDg0LDB4MzksMHg2 ZiwweGU0LDB4OTksMHhjZSwKLSsJMHg5MSwweDdkLDB4N2UsMHhjOCwweDU4LDB4ZjIsMHgxMiww eGMzLDB4YjYsMHhhZCwweGRhLDB4MjIsCi0rCTB4MDQsMHhhMCwweGQyLDB4MjEsMHhmZSwweGYy LDB4OTUsMHgxZAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTUxMl9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweDY0LDB4NTQs MHgxMywweGVjLDB4NGYsMHg3NywweGRhLDB4YjIsMHg5MiwweDJlLDB4NTIsMHg4MCwKLSsJMHgx MSwweDEwLDB4YzIsMHhmOCwweGU2LDB4YTcsMHhjZCwweDRiLDB4ZmMsMHgzMiwweDJlLDB4OWUs Ci0rCTB4ZWIsMHhiYiwweGIxLDB4YmYsMHgxNSwweDVjLDB4NzMsMHgwOAotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9pbnRf cmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZWYsMHgxZSwweGRjLDB4MGEsMHhhNCwweDM2LDB4 OTEsMHg5YywweDNkLDB4MjcsMHg5NywweDUwLAotKwkweDhkLDB4MzYsMHgyOSwweDhkLDB4Y2Us MHg2YSwweDBjLDB4ZjcsMHgyMSwweGMwLDB4OTEsMHhhZSwKLSsJMHgwYywweDk2LDB4NzIsMHhi ZCwweDUyLDB4ODEsMHg1OCwweGZjLDB4NmQsMHhlNSwweGY3LDB4YTUsCi0rCTB4ZmQsMHg1ZCww eGE3LDB4NTgsMHg2OCwweGM4LDB4OTksMHg1OCwweDhlLDB4YzgsMHhjZSwweDk1LAotKwkweDAx LDB4N2QsMHhmZiwweGE0LDB4YzgsMHhmNywweDYzLDB4ZmUsMHg1ZiwweDY5LDB4ODMsMHg1MywK LSsJMHhlMiwweGM2LDB4OGIsMHhjMwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7 Ci0rCTB4ZTYsMHg5YiwweGM0LDB4ODgsMHgzNCwweGNhLDB4ZWEsMHgyOSwweDJmLDB4OTgsMHgw NSwweGE0LAotKwkweGQzLDB4YzAsMHg3YiwweDExLDB4ZTgsMHhiYiwweDc1LDB4ZjIsMHhiZCww eDI5LDB4YjcsMHg0MCwKLSsJMHgyNSwweDdmLDB4YzEsMHhiNywweGIxLDB4ZjEsMHgyNSwweDYx Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhNTEyX3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJewotKwkweDIzLDB4NmQsMHhmZiwweGRl LDB4ZmIsMHhkMSwweGJhLDB4MzMsMHgxOCwweGU2LDB4YmUsMHhiNSwKLSsJMHg0OCwweDc3LDB4 NmQsMHg3ZiwweGE3LDB4ZTEsMHg0ZCwweDQ4LDB4MWUsMHgzYywweGE3LDB4MzQsCi0rCTB4MWEs MHhjOCwweDYwLDB4ZGIsMHg4ZiwweDk5LDB4MTUsMHg5OQotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9yZXR1cm5lZGJpdHNb XSA9Ci0rCXsKLSsJMHg3MCwweDI3LDB4MzEsMHhkYiwweDkyLDB4NzAsMHgyMSwweGZlLDB4MTYs MHhiNiwweGM4LDB4NTEsCi0rCTB4MzQsMHg4NywweDY1LDB4ZDAsMHg0ZSwweGZkLDB4ZmUsMHg2 OCwweGVjLDB4YWMsMHhkYywweDkzLAotKwkweDQxLDB4MzgsMHg5MiwweDkwLDB4YjQsMHg5NCww eGY5LDB4MGQsMHhhNCwweGY3LDB4NGUsMHg4MCwKLSsJMHg5MiwweDY3LDB4NDgsMHg0MCwweGE3 LDB4MDgsMHhjNywweGJjLDB4NjYsMHgwMCwweGZkLDB4ZjcsCi0rCTB4NGMsMHg4YiwweDE3LDB4 NmUsMHhkMSwweDhmLDB4OWIsMHhmMywweDZmLDB4ZjYsMHgzNCwweGRkLAotKwkweDY3LDB4Zjcs MHg2OCwweGRkCi0rCX07Ci0rCi0rCi0rLyogU0hBLTUxMiBObyBQUiAgKi8KLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfZW50cm9weWlucHV0W10g PQotKwl7Ci0rCTB4YjYsMHgwYiwweGI3LDB4YmMsMHg4NCwweDU2LDB4ZjYsMHgxMiwweGFmLDB4 NDUsMHg2NywweDE3LAotKwkweDdjLDB4ZDEsMHhiMiwweDc4LDB4MmIsMHhhMCwweGYyLDB4YmUs MHhiNiwweDZkLDB4OGIsMHg1NiwKLSsJMHhjNiwweGJjLDB4NGQsMHhlMSwweGY3LDB4YmUsMHhj ZSwweGJkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhNTEyX25vbmNlW10gPQotKwl7Ci0rCTB4OWQsMHhlZCwweGMwLDB4ZTUsMHg1YSww eDk4LDB4NmEsMHhjYiwweDUxLDB4N2QsMHg3NiwweDMxLAotKwkweDVhLDB4NjQsMHhmMCwweGY3 Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhNTEyX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweGMyLDB4NmQsMHhhMyww eGMzLDB4MDYsMHg3NCwweGU1LDB4MDEsMHg1YywweDEwLDB4MTcsMHhjNywKLSsJMHhhZiwweDgz LDB4OWQsMHg1OSwweDhkLDB4MmQsMHgyOSwweDM4LDB4YzUsMHg1OSwweDcwLDB4OGIsCi0rCTB4 NDYsMHg0OCwweDJkLDB4Y2YsMHgzNiwweDdkLDB4NTksMHhjMAotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9hZGRpdGlvbmFsaW5w dXRbXSA9Ci0rCXsKLSsJMHhlYywweDhjLDB4ZDQsMHhmNywweDYxLDB4NmUsMHgwZCwweDk1LDB4 NzksMHhiNywweDI4LDB4YWQsCi0rCTB4NWYsMHg2OSwweDc0LDB4NWYsMHgyZCwweDM2LDB4MDYs MHg4YSwweDZiLDB4YWMsMHg1NCwweDk3LAotKwkweGM0LDB4YTEsMHgxMiwweDg1LDB4MGEsMHhk ZiwweDRiLDB4MzQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGE1MTJfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDg0LDB4MmYs MHgxZiwweDY4LDB4NmEsMHhhMywweGFkLDB4MWUsMHhmYiwweGY0LDB4MTUsMHhiZCwKLSsJMHhk ZSwweDM4LDB4ZDQsMHgzMCwweDgwLDB4NTEsMHhlOSwweGQzLDB4YzcsMHgyMCwweDg4LDB4ZTks Ci0rCTB4ZjUsMHhjYywweGRmLDB4NTcsMHg1YywweDQ3LDB4MmYsMHg1NywweDNjLDB4NWYsMHgx MywweDU2LAotKwkweGNjLDB4YzUsMHg0ZiwweDg0LDB4ZjgsMHgxMCwweDQxLDB4ZDUsMHg3ZSww eDU4LDB4NmUsMHgxOSwKLSsJMHgxOSwweDllLDB4YWYsMHhjMiwweDIyLDB4NTgsMHg0MSwweDUw LDB4NzksMHhjMiwweGQ4LDB4MDQsCi0rCTB4MjgsMHhkNCwweDM5LDB4OWEKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfZW50cm9w eWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4ZmEsMHg3ZiwweDQ2LDB4NTEsMHg4MywweDYyLDB4 OTgsMHgxNiwweDlhLDB4MTksMHhhMiwweDQ5LAotKwkweGE5LDB4ZTYsMHg0YSwweGQ4LDB4ODUs MHhlNywweGQ0LDB4M2IsMHgyYywweDgyLDB4YzUsMHg4MiwKLSsJMHhiZiwweDExLDB4ZjksMHg5 ZSwweGJjLDB4ZDAsMHgwMSwweGVlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJ ewotKwkweGI5LDB4MTIsMHhlMCwweDRmLDB4ZjcsMHhhNywweGM0LDB4ZDgsMHhkMCwweDhlLDB4 OTksMHgyOSwKLSsJMHg3YywweDlhLDB4ZTksMHhjZiwweGM0LDB4NmMsMHhmOCwweGMzLDB4YTcs MHg0MSwweDgzLDB4ZDYsCi0rCTB4MmUsMHhmYSwweGI4LDB4NWUsMHg4ZSwweDZiLDB4NzgsMHgy MAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTUxMl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4ZDcsMHgwNywweDUyLDB4Yjks MHg4MywweDJjLDB4MDMsMHg3MSwweGVlLDB4YzksMHhjMCwweDg1LAotKwkweGUxLDB4NTcsMHhi MiwweGNkLDB4M2EsMHhmMCwweGM5LDB4MzQsMHgyNCwweDQxLDB4MWMsMHg0MiwKLSsJMHg5OSww eGIyLDB4ODQsMHhlOSwweDE3LDB4ZDIsMHg3NiwweDkyCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3JldHVybmVkYml0c1tdID0K LSsJewotKwkweDM2LDB4MTcsMHg1ZCwweDk4LDB4MmIsMHg2NSwweDI1LDB4OGUsMHhjOCwweDI5 LDB4ZGYsMHgyNywKLSsJMHgwNSwweDM2LDB4MjYsMHgxMiwweDhhLDB4NjgsMHg3NCwweDI3LDB4 MzcsMHhkNCwweDdmLDB4MzIsCi0rCTB4YjEsMHgxMiwweGQ2LDB4ODUsMHg4MywweGViLDB4MmUs MHhhMCwweGVkLDB4NGIsMHhiNSwweDdiLAotKwkweDZmLDB4MzksMHgzYywweDcxLDB4NzcsMHgw MiwweDEyLDB4Y2MsMHgyYywweDNhLDB4OGUsMHg2MywKLSsJMHhkZiwweDRhLDB4YmQsMHg2Ziww eDZlLDB4MmUsMHhlZCwweDBhLDB4ODUsMHhhNSwweDJmLDB4YTIsCi0rCTB4NjgsMHhkZSwweDQy LDB4YjUKLSsJfTsKLSsKLSsKLSsvKiBITUFDIFNIQS0xIFBSICAqLwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9lbnRyb3B5aW5wdXRb XSA9Ci0rCXsKLSsJMHgyNiwweDVmLDB4MzYsMHgxNCwweGZmLDB4M2QsMHg4MywweGZhLDB4NzMs MHg1ZSwweDc1LDB4ZGMsCi0rCTB4MmMsMHgxOCwweDE3LDB4MWIKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfbm9uY2Vb XSA9Ci0rCXsKLSsJMHhjOCwweGUzLDB4NTcsMHhhNSwweDdiLDB4NzQsMHg4NiwweDZlCi0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGExX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDZlLDB4ZGIsMHgwZCww eGZlLDB4N2QsMHhhYywweDc5LDB4ZDAsMHhhNSwweDNhLDB4NDgsMHg4NSwKLSsJMHg4MCwweGUy LDB4N2YsMHgyYQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMV9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHgzMSww eGNkLDB4NWUsMHg0MywweGRjLDB4ZmIsMHg3YSwweDc5LDB4Y2EsMHg4OCwweGRlLDB4MWYsCi0r CTB4ZDcsMHhiYiwweDQyLDB4MDkKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsK LSsJMHg3YywweDIzLDB4OTUsMHgzOCwweDAwLDB4OTUsMHhjMSwweDc4LDB4MWYsMHg4ZiwweGQ3 LDB4NjMsCi0rCTB4MjMsMHg4NywweDJhLDB4ZWQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfaW50X3JldHVybmVkYml0 c1tdID0KLSsJewotKwkweGJiLDB4MzQsMHhlNywweDkzLDB4YTMsMHgwMiwweDJjLDB4NGEsMHhk MCwweDg5LDB4ZGEsMHg3ZiwKLSsJMHhlZCwweGY0LDB4NGMsMHhkZSwweDE3LDB4ZWMsMHhlNSww eDZjCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGExX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg0OSwweGJjLDB4 MmQsMHgyYywweGI3LDB4MzIsMHhjYiwweDIwLDB4ZGYsMHhmNSwweDc3LDB4NTgsCi0rCTB4YTAs MHg0YiwweDkzLDB4NmUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4 M2MsMHhhYSwweGIwLDB4MjEsMHg0MiwweGIwLDB4ZGQsMHgzNCwweGYwLDB4MTYsMHg3ZiwweDBj LAotKwkweDBmLDB4ZmYsMHgyZSwweGFmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX3JldHVybmVkYml0c1tdID0KLSsJ ewotKwkweDhlLDB4Y2IsMHhhMywweDY0LDB4YjIsMHhiOCwweDMzLDB4NmMsMHg2NCwweDNiLDB4 NzgsMHgxNiwKLSsJMHg5OSwweDM1LDB4YzgsMHgzMCwweGNiLDB4M2UsMHhhMCwweGQ4Ci0rCX07 Ci0rCi0rCi0rLyogSE1BQyBTSEEtMSBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfZW50cm9weWlucHV0W10gPQotKwl7Ci0r CTB4MzIsMHg5YSwweDJhLDB4ODcsMHg3YiwweDg5LDB4N2MsMHhmNiwweGNiLDB4OTUsMHhkNSww eDQwLAotKwkweDE3LDB4ZmUsMHg0NywweDcwCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX25vbmNlW10gPQotKwl7Ci0rCTB4 MTYsMHhkOCwweGUwLDB4YzcsMHg1MiwweGNmLDB4NGEsMHgyNQotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wZXJzb25hbGl6 YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHgzNSwweDM1LDB4YTksMHhhNSwweDQwLDB4YmUsMHg5 YiwweGQxLDB4NTYsMHhkZCwweDQ0LDB4MDAsCi0rCTB4NzIsMHhmNywweGQzLDB4NWUKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTFfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4MWIsMHgyYywweDg0LDB4MmQsMHg0YSww eDg5LDB4OGYsMHg2OSwweDE5LDB4ZjEsMHhmMywweGRiLAotKwkweGJiLDB4ZTMsMHhhYSwweGVh Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGExX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhjZiwweGZhLDB4N2QsMHg3 MiwweDBmLDB4ZTYsMHhjNywweDk2LDB4YTAsMHg2OSwweDMxLDB4MTEsCi0rCTB4OWIsMHgwYiww eDFhLDB4MjAsMHgxZiwweDNmLDB4YWEsMHhkMQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9lbnRyb3B5aW5wdXRyZXNlZWRb XSA9Ci0rCXsKLSsJMHg5MCwweDc1LDB4MTUsMHgwNCwweDk1LDB4ZjEsMHhiYSwweDgxLDB4MGMs MHgzNywweDk0LDB4NmYsCi0rCTB4ODYsMHg1MiwweDZkLDB4OWMKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfYWRkaXRpb25h bGlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4NWIsMHg0MCwweGJhLDB4NWYsMHgxNywweDcwLDB4 ZjAsMHg0YiwweGRmLDB4YzksMHg5NywweDkyLAotKwkweDc5LDB4YzUsMHg4MiwweDI4Ci0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGExX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg5NywweGM4LDB4ODAsMHg5MCwweGIz LDB4YWEsMHg2ZSwweDYwLDB4ZWEsMHg4MywweDdhLDB4ZTMsCi0rCTB4OGEsMHhjYSwweGE0LDB4 N2YKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTFfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4OTAsMHhiZCwweDA1LDB4NTYs MHg2ZCwweGI1LDB4MjIsMHhkNSwweGI5LDB4NWEsMHgyOSwweDJkLAotKwkweGU5LDB4MGIsMHhl MSwweGFjLDB4ZGUsMHgyNywweDBiLDB4YjAKLSsJfTsKLSsKLSsKLSsvKiBITUFDIFNIQS0yMjQg UFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEyMjRfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4MTcsMHgzMiwweDJiLDB4MmUs MHg2ZiwweDFiLDB4OWMsMHg2ZCwweDMxLDB4ZTAsMHgzNCwweDA3LAotKwkweGNmLDB4ZWQsMHhm NiwweGI2LDB4NWEsMHg3NiwweDRjLDB4YmMsMHg2MiwweDg1LDB4MDEsMHg5MAotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0 X3ByX25vbmNlW10gPQotKwl7Ci0rCTB4MzgsMHhiZiwweDVmLDB4MjAsMHhiMywweDY4LDB4MmYs MHg0MywweDYxLDB4MDUsMHg4ZiwweDIzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfcGVyc29uYWxpemF0aW9uc3Ry aW5nW10gPQotKwl7Ci0rCTB4YzAsMHhjOSwweDQ1LDB4YWMsMHg4ZCwweDI3LDB4NzcsMHgwOCww eDBiLDB4MTcsMHg2ZCwweGVkLAotKwkweGMxLDB4N2QsMHhkNSwweDA3LDB4OWQsMHg2ZSwweGY4 LDB4MjMsMHgyYSwweDIyLDB4MTMsMHhiZAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dFtd ID0KLSsJewotKwkweGE0LDB4M2MsMHhlNywweDNiLDB4ZWEsMHgxOSwweDQ1LDB4MzIsMHhjMiww eDgzLDB4NmQsMHgyMSwKLSsJMHg4YSwweGMwLDB4ZWUsMHg2NywweDQ1LDB4ZGUsMHgxMywweDdk LDB4OWQsMHg2MSwweDAwLDB4M2IKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJ ewotKwkweDE1LDB4MDUsMHg3NCwweDRhLDB4N2YsMHg4ZCwweDVjLDB4NjAsMHgxNiwweGU1LDB4 N2IsMHhhZCwKLSsJMHhmNSwweDQxLDB4OGYsMHg1NSwweDYwLDB4YzQsMHgwOSwweGVlLDB4MWUs MHgxMSwweDgxLDB4YWIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0r CTB4NmYsMHhmNSwweDlhLDB4ZTIsMHg1NCwweDUzLDB4MzAsMHgzZCwweDVhLDB4MjcsMHgyOSww eDM4LAotKwkweDI3LDB4ZjIsMHgwZCwweDA1LDB4ZTksMHgyNiwweGNiLDB4MTYsMHhjMywweDUx LDB4NWYsMHgxMywKLSsJMHg0MSwweGZlLDB4OTksMHhmMgotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2FkZGl0aW9u YWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg3MywweDgxLDB4ODgsMHg4NCwweDhmLDB4ZWQsMHg2Ziww eDEwLDB4OWYsMHg5MywweGJmLDB4MTcsCi0rCTB4MzUsMHg3YywweGVmLDB4ZDUsMHg4ZCwweDI2 LDB4YTYsMHg3YSwweGU4LDB4MDksMHgzNiwweDRmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfZW50cm9weWlucHV0 cHIyW10gPQotKwl7Ci0rCTB4ZTYsMHhjZiwweGNmLDB4N2UsMHgxMiwweGU1LDB4NDMsMHhkMiww eDM4LDB4ZDgsMHgyNCwweDZmLAotKwkweDVhLDB4MzcsMHg2OCwweGJmLDB4NGYsMHhhMCwweGZm LDB4ZDUsMHg2MSwweDhhLDB4OTMsMHhlMAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX3JldHVybmVkYml0c1tdID0K LSsJewotKwkweGFmLDB4ZjksMHhkOCwweDE5LDB4OTEsMHgzMCwweDgyLDB4NmYsMHhhOSwweDFl LDB4OWQsMHhkNywKLSsJMHhmMywweDUwLDB4ZTAsMHhjNywweGQ1LDB4NjQsMHg5NiwweDdkLDB4 NGMsMHg0ZCwweDc4LDB4MDMsCi0rCTB4NmQsMHhkOCwweDllLDB4NzIKLSsJfTsKLSsKLSsKLSsv KiBITUFDIFNIQS0yMjQgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4MTEs MHg4MiwweGZkLDB4ZDksMHg0MiwweGY0LDB4ZmEsMHhjOCwweGYyLDB4NDEsMHhlNiwweDU0LAot KwkweDAxLDB4YWUsMHgyMiwweDZlLDB4YzYsMHhhZiwweGFmLDB4ZDAsMHhhNiwweGIyLDB4ZTIs MHg2ZAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMjI0X25vbmNlW10gPQotKwl7Ci0rCTB4YTksMHg0OCwweGQ3LDB4OTIsMHgz OSwweDdlLDB4MmEsMHhkYywweDMwLDB4MWYsMHgwZSwweDJiCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcGVyc29uYWxp emF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4MTEsMHhkNSwweGY0LDB4YmQsMHg2NywweDhjLDB4 MzEsMHhjZiwweGEzLDB4M2YsMHgxZSwweDZiLAotKwkweGE4LDB4MDcsMHgwMiwweDBiLDB4Yzgs MHgyZSwweDZjLDB4NjQsMHg0MSwweDViLDB4YzgsMHgzNwotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2FkZGl0aW9uYWxp bnB1dFtdID0KLSsJewotKwkweDY4LDB4MTgsMHhjMiwweDA2LDB4ZWIsMHgzZSwweDA0LDB4OTUs MHg0NCwweDVlLDB4ZmIsMHhlNiwKLSsJMHg0MSwweGMxLDB4NWMsMHhjYywweDQwLDB4MmYsMHhi NywweGQyLDB4MGYsMHhmMywweDZiLDB4ZTcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9pbnRfcmV0dXJuZWRiaXRzW10g PQotKwl7Ci0rCTB4N2YsMHg0NSwweGM3LDB4NWQsMHgzMiwweGU2LDB4MTcsMHg2MCwweGJhLDB4 ZGMsMHhiOCwweDQyLAotKwkweDFiLDB4OWMsMHhmMSwweGZhLDB4M2IsMHg0ZCwweDI5LDB4NTQs MHhjNiwweDkwLDB4ZmYsMHg1YywKLSsJMHhjZCwweGQ2LDB4YTksMHhjYwotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2Vu dHJvcHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweGM0LDB4OGUsMHgzNywweDk1LDB4NjksMHg1 MywweDI4LDB4ZDcsMHgzNywweGJiLDB4NzAsMHg5NSwKLSsJMHgxYywweDA3LDB4MWQsMHhkOSww eGI3LDB4ZTYsMHgxYiwweGJiLDB4ZmUsMHg0MSwweGViLDB4YzkKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9hZGRpdGlv bmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg1MywweDE3LDB4YTEsMHg2YSwweGZhLDB4Nzcs MHg0NywweGIwLDB4OTUsMHg1NiwweDlhLDB4MjAsCi0rCTB4NTcsMHhkZSwweDVjLDB4ODksMHg5 ZiwweDdmLDB4ZTIsMHhkZSwweDE3LDB4M2EsMHg1MCwweDIzCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfYWRkaXRpb25h bGlucHV0MltdID0KLSsJewotKwkweDNhLDB4MzIsMHhmOSwweDg1LDB4MGMsMHhjMSwweGVkLDB4 NzYsMHgyZCwweGRmLDB4NDAsMHhjMywKLSsJMHgwNiwweDIyLDB4NjYsMHhkNCwweDlhLDB4OWEs MHhmZiwweDVhLDB4N2UsMHg3YSwweGYzLDB4OTYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9yZXR1cm5lZGJpdHNbXSA9 Ci0rCXsKLSsJMHg0MywweGI0LDB4NTcsMHg1YywweDM4LDB4MjUsMHg5ZCwweGFlLDB4ZWMsMHg5 NiwweGQxLDB4ODUsCi0rCTB4M2EsMHg4NCwweDhkLDB4ZmUsMHg2OCwweGQ1LDB4MGUsMHg1Yyww eDhmLDB4NjUsMHhhNSwweDRlLAotKwkweDQ1LDB4ODQsMHhhOCwweDk0Ci0rCX07Ci0rCi0rCi0r LyogSE1BQyBTSEEtMjU2IFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDRk LDB4YjAsMHg0MywweGQ4LDB4MzQsMHg0YiwweDEwLDB4NzAsMHhiMSwweDhiLDB4ZWQsMHhlYSwK LSsJMHgwNywweDkyLDB4OWYsMHg2YywweDc5LDB4MzEsMHhhZiwweDgxLDB4MjksMHhlYiwweDZl LDB4Y2EsCi0rCTB4MzIsMHg0OCwweDI4LDB4ZTcsMHgwMiwweDVkLDB4YTYsMHhhNgotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh MjU2X3ByX25vbmNlW10gPQotKwl7Ci0rCTB4M2EsMHhhZSwweDE1LDB4YTksMHg5OSwweGRjLDB4 ZTQsMHg2NywweDM0LDB4M2IsMHg3MCwweDE1LAotKwkweGFhLDB4ZDMsMHgzMCwweDlhCi0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGEyNTZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4MTMsMHgxZCwweDI0 LDB4MDQsMHhiMCwweDE4LDB4ODEsMHgxNSwweDIxLDB4NTEsMHgyYSwweDI0LAotKwkweDUyLDB4 NjEsMHhiZSwweDY0LDB4ODIsMHg2YiwweDU1LDB4MmYsMHhlMiwweGYxLDB4NDAsMHg3ZCwKLSsJ MHg3MSwweGQ4LDB4MDEsMHg4NiwweDE1LDB4YjcsMHg4YiwweGI1Ci0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfYWRk aXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4OGYsMHhhNiwweDU0LDB4NWYsMHhiMSwweGQwLDB4 ZDgsMHhjMywweGU3LDB4MGMsMHgxNSwweGE5LAotKwkweDIzLDB4NmUsMHhmZSwweGZiLDB4OTMs MHhmNywweDNhLDB4YmQsMHg1OSwweDAxLDB4ZmEsMHgxOCwKLSsJMHg4ZSwweGU5LDB4MWEsMHhh OSwweDc4LDB4ZmMsMHg3OSwweDBiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0r CXsKLSsJMHhjZiwweDI0LDB4YjksMHhlYiwweGIzLDB4ZDQsMHhjZCwweDE3LDB4MzcsMHgzOCww eDc1LDB4NzksCi0rCTB4MTUsMHhjYiwweDJkLDB4NzUsMHg1MSwweGYxLDB4Y2MsMHhhYSwweDMy LDB4YTQsMHhhNywweDM2LAotKwkweDdjLDB4NWMsMHhlNCwweDQ3LDB4ZjEsMHgzZSwweDFkLDB4 ZTUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTI1Nl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4NTIsMHg0Miww eGZhLDB4ZWIsMHg4NSwweGUwLDB4MzAsMHgyMiwweDc5LDB4MDAsMHgxNiwweGIyLAotKwkweDg4 LDB4MmYsMHgxNCwweDZhLDB4YjcsMHhmYywweGI3LDB4NTMsMHhkYywweDRhLDB4MTIsMHhlZiwK LSsJMHg1NCwweGQ2LDB4MzMsMHhlOSwweDIwLDB4ZDYsMHhmZCwweDU2Ci0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJf YWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweGY0LDB4ZjYsMHg0OSwweGExLDB4MmQsMHg2 NCwweDJiLDB4MzAsMHg1OCwweGY4LDB4YmQsMHhiOCwKLSsJMHg3NSwweGViLDB4YmIsMHg1ZSww eDFjLDB4OWIsMHg4MSwweDZhLDB4ZGEsMHgxNCwweDg2LDB4NmUsCi0rCTB4ZDAsMHhkYSwweDE4 LDB4YjcsMHg4OCwweGZiLDB4NTksMHhmMwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2VudHJvcHlpbnB1dHByMltd ID0KLSsJewotKwkweDIxLDB4Y2QsMHg2ZSwweDQ2LDB4YWQsMHg5OSwweDA3LDB4MTcsMHhiNCww eDNkLDB4NzYsMHgwYSwKLSsJMHhmZiwweDViLDB4NTIsMHg1MCwweDc4LDB4ZGYsMHgxZiwweDI0 LDB4MDYsMHgwZCwweDNmLDB4NzQsCi0rCTB4YTksMHhjOSwweDM3LDB4Y2YsMHhkOCwweDI2LDB4 MjUsMHg5MQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMjU2X3ByX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGE3LDB4YWYs MHgyZiwweDI5LDB4ZTAsMHgzYSwweDcyLDB4OTUsMHg5NiwweDFjLDB4YTksMHhmMCwKLSsJMHg0 YSwweDE3LDB4NGQsMHg2NiwweDA2LDB4MTAsMHhiZiwweDM5LDB4ODksMHg4OCwweGI4LDB4OTEs Ci0rCTB4MzcsMHgxOCwweDk5LDB4Y2YsMHg4YywweDUzLDB4M2IsMHg3ZQotKwl9OwotKwotKwot Ky8qIEhNQUMgU0hBLTI1NiBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHg5 NiwweGI3LDB4NTMsMHgyMiwweDFlLDB4NTIsMHgyYSwweDk2LDB4YjEsMHgxNSwweDNjLDB4MzUs Ci0rCTB4NWEsMHg4YiwweGQzLDB4NGEsMHhhNiwweDZjLDB4ODMsMHgwYSwweDdkLDB4YTMsMHgy MywweDNkLAotKwkweDQzLDB4YTEsMHgwNywweDJjLDB4MmQsMHhlMywweDgxLDB4Y2MKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTI1Nl9ub25jZVtdID0KLSsJewotKwkweGYxLDB4YWMsMHg5NywweGNiLDB4NWUsMHgwNiwweDQ4 LDB4ZDIsMHg5NCwweGJlLDB4MTUsMHgyZSwKLSsJMHhjNywweGZjLDB4YzIsMHgwMQotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh MjU2X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDk4LDB4YzUsMHgxZSwweDM1 LDB4NWUsMHg4OSwweDBkLDB4Y2UsMHg2NCwweDZkLDB4MTgsMHhhNywKLSsJMHg1YSwweGM2LDB4 ZjMsMHhlNywweGQ2LDB4OWUsMHhjMCwweGVhLDB4YjcsMHgzYSwweDhkLDB4NjUsCi0rCTB4Yjgs MHhlYiwweDEwLDB4ZDcsMHg1NywweDE4LDB4YTAsMHgzMgotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2FkZGl0aW9uYWxp bnB1dFtdID0KLSsJewotKwkweDFiLDB4MTAsMHhhZiwweGFjLDB4ZDAsMHg2NSwweDk1LDB4YWQs MHgwNCwweGFkLDB4MDMsMHgxYywKLSsJMHhlMCwweDQwLDB4ZDYsMHgzZSwweDFjLDB4NDYsMHg1 MywweDM5LDB4N2MsMHhlMiwweGJjLDB4ZGEsCi0rCTB4OGMsMHhhMiwweDMzLDB4YTcsMHg5YSww eDI2LDB4ZDMsMHgyNwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhi YSwweDYxLDB4MGUsMHg1NSwweGZlLDB4MTEsMHg4YSwweDllLDB4MGYsMHg4MCwweGRmLDB4MWQs Ci0rCTB4MDMsMHgwYSwweGZlLDB4MTUsMHg5NCwweDI4LDB4NGIsMHhiYSwweGY0LDB4OWYsMHg1 MSwweDI1LAotKwkweDg4LDB4ZTUsMHg0ZSwweGZiLDB4YWYsMHhjZSwweDY5LDB4OTAKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTI1Nl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg2MiwweDdmLDB4MWUsMHg2Yiww eGU4LDB4OGUsMHhlMSwweDM1LDB4N2QsMHg5YiwweDRmLDB4YzcsCi0rCTB4ZWMsMHhjOCwweGFj LDB4ZWYsMHg2YiwweDEzLDB4OWUsMHgwNSwweDU2LDB4YzEsMHgwOCwweGY5LAotKwkweDJmLDB4 MGYsMHgyNywweDljLDB4ZDQsMHgxNSwweGVkLDB4MmQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9hZGRpdGlvbmFsaW5w dXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHhjNywweDc2LDB4NmUsMHhhOSwweGQyLDB4YjIsMHg3Niww eDQwLDB4ODIsMHgyNSwweDJjLDB4YjMsCi0rCTB4NmYsMHhhYywweGU5LDB4NzQsMHhlZiwweDhm LDB4M2MsMHg4ZSwweGNkLDB4ZjEsMHhiZiwweGIzLAotKwkweDQ5LDB4NzcsMHgzNCwweDg4LDB4 NTIsMHgzNiwweGU2LDB4MmUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0r CTB4OGQsMHhiOCwweDBjLDB4ZDEsMHhiZiwweDcwLDB4ZjYsMHgxOSwweGMzLDB4NDEsMHg4MCww eDlmLAotKwkweGUxLDB4YTUsMHhhNCwweDFmLDB4MmMsMHgyNiwweGIxLDB4ZTUsMHhkOCwweGVi LDB4YmUsMHhmOCwKLSsJMHhkZiwweDg4LDB4NmEsMHg4OSwweGQ2LDB4MDUsMHhkOCwweDlkCi0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEyNTZfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4NDMsMHgxMiwweDJhLDB4MmMsMHg0 MCwweDUzLDB4MmUsMHg3YywweDY2LDB4MzQsMHhhYywweGMzLAotKwkweDQzLDB4ZTMsMHhlMCww eDZhLDB4ZmMsMHhmYSwweGVhLDB4ODcsMHgyMSwweDFmLDB4ZTIsMHgyNiwKLSsJMHhjNCwweGY5 LDB4MDksMHg5YSwweDBkLDB4NmUsMHg3ZiwweGUwCi0rCX07Ci0rCi0rCi0rLyogSE1BQyBTSEEt Mzg0IFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMzg0X3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDY5LDB4ODEsMHg5OCww eDg4LDB4NDQsMHhmNSwweGQ2LDB4MmUsMHgwMCwweDA4LDB4M2IsMHhjNSwKLSsJMHhmYiwweGQ3 LDB4OGUsMHg2ZiwweDIzLDB4ZjgsMHg2ZCwweDA5LDB4ZDYsMHg4NSwweDQ5LDB4ZDEsCi0rCTB4 ZjgsMHg2ZCwweGE0LDB4NTgsMHg1NCwweGZkLDB4ODgsMHhhOQotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX25vbmNl W10gPQotKwl7Ci0rCTB4NmUsMHgzOCwweDgxLDB4Y2EsMHhiNywweGU4LDB4NmUsMHg2NiwweDQ5 LDB4OGEsMHhiMiwweDU5LAotKwkweGVlLDB4MTYsMHhjOSwweGRlCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfcGVy c29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4ZmUsMHg0YywweGQ5LDB4ZjQsMHg3OCww eDNiLDB4MDgsMHg0MSwweDhkLDB4OGYsMHg1NSwweGM0LAotKwkweDQzLDB4NTYsMHhiNiwweDEy LDB4MzYsMHg2YiwweDMwLDB4YjcsMHg1ZSwweGUxLDB4YjksMHg0NywKLSsJMHgwNCwweGIxLDB4 NGUsMHhhOSwweDAwLDB4YTEsMHg1MiwweGExCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfYWRkaXRpb25hbGlucHV0 W10gPQotKwl7Ci0rCTB4ODksMHhlOSwweGNjLDB4OGYsMHgyNywweDNjLDB4MjYsMHhkMSwweDk1 LDB4YzgsMHg3ZCwweDBmLAotKwkweDViLDB4MWEsMHhmMCwweDc4LDB4MzksMHg1NiwweDZmLDB4 YTQsMHgyMywweGU3LDB4ZDEsMHhkYSwKLSsJMHg3YywweDY2LDB4MzMsMHhhMCwweDkwLDB4Yzks MHg5MiwweDg4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEzODRfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHhiZSww eDNkLDB4N2MsMHgwZCwweGNhLDB4ZGEsMHg3YywweDQ5LDB4YjgsMHgxMiwweDM2LDB4YzAsCi0r CTB4ZGIsMHhhZCwweDM1LDB4YTgsMHhjNywweDBiLDB4MmEsMHgyYywweDY5LDB4NmQsMHgyNSww eDU2LAotKwkweDYzLDB4ODIsMHgxMSwweDNlLDB4YTcsMHgzMywweDcwLDB4NzIKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4 NF9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ODIsMHgzZCwweGU2LDB4NTQsMHg4 MCwweDQyLDB4ZjgsMHhiYSwweDkwLDB4NGYsMHgwNiwweGE2LAotKwkweGQyLDB4N2YsMHhiZiww eDc5LDB4N2MsMHgxMiwweDdkLDB4YTYsMHhhMiwweDY2LDB4ZTgsMHhhNiwKLSsJMHhjMCwweGQ2 LDB4NGEsMHg1NSwweGJmLDB4ZDgsMHgwYSwweGM1LDB4ZjgsMHgwMywweDg4LDB4ZGQsCi0rCTB4 OGUsMHg4NywweGQxLDB4NWEsMHg0OCwweDI2LDB4NzIsMHgyYSwweDhlLDB4Y2YsMHhlZSwweGJh Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGEzODRfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDhmLDB4ZmYsMHhk OSwweDg0LDB4YmIsMHg4NSwweDNhLDB4NjYsMHhhMSwweDIxLDB4Y2UsMHhiMiwKLSsJMHgzYSww eDNhLDB4MTcsMHgyMiwweDE5LDB4YWUsMHhjNywweGI2LDB4NjMsMHg4MSwweGQ1LDB4ZmYsCi0r CTB4MGQsMHhjOCwweGUxLDB4YWYsMHg1NywweGQyLDB4Y2IsMHg2MAotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2Vu dHJvcHlpbnB1dHByMltdID0KLSsJewotKwkweGQ3LDB4ZmIsMHhjOSwweGU4LDB4ZTIsMHhmMiww eGFhLDB4NGMsMHhiOCwweDUxLDB4MmYsMHhlMSwKLSsJMHgyMiwweGJhLDB4ZjMsMHhkYSwweDBh LDB4MTksMHg3NiwweDcxLDB4NTcsMHhiMiwweDFkLDB4OTQsCi0rCTB4MDksMHg2OSwweDZjLDB4 ZDMsMHg5NywweDUxLDB4ODEsMHg4NwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX3JldHVybmVkYml0c1tdID0KLSsJ ewotKwkweGU2LDB4MTksMHgyOCwweGE4LDB4MjEsMHhjZSwweDVlLDB4ZGIsMHgyNCwweDc5LDB4 OGMsMHg3NiwKLSsJMHg1ZCwweDczLDB4YjIsMHhkZiwweGFjLDB4ZWYsMHg4NSwweGE3LDB4M2Is MHgxOSwweDA5LDB4OGIsCi0rCTB4N2YsMHg5OCwweDI4LDB4YTksMHg5MywweGQ4LDB4N2EsMHhh ZCwweDU1LDB4OGIsMHgyNCwweDlkLAotKwkweGU2LDB4OTgsMHhmZSwweDQ3LDB4ZDUsMHg0OCww eGMxLDB4MjMsMHhkOCwweDFkLDB4NjIsMHg3NQotKwl9OwotKwotKwotKy8qIEhNQUMgU0hBLTM4 NCBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTM4NF9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHhjMywweDU2LDB4MmIsMHgx ZCwweGMyLDB4YmIsMHhhOCwweGYwLDB4YWUsMHgxYiwweDBkLDB4ZDMsCi0rCTB4NWEsMHg2Yyww eGRhLDB4NTcsMHg4ZSwweGE1LDB4OGEsMHgwZCwweDZjLDB4NGIsMHgxOCwweGIxLAotKwkweDA0 LDB4M2UsMHhiNCwweDk5LDB4MzUsMHhjNCwweGMwLDB4NWYKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9ub25jZVtdID0K LSsJewotKwkweGM1LDB4NDksMHgxZSwweDY2LDB4MjcsMHg5MiwweGJlLDB4ZWMsMHhiNSwweDFl LDB4NGIsMHhiMSwKLSsJMHgzOCwweGUzLDB4ZWIsMHg2MgotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3BlcnNvbmFsaXph dGlvbnN0cmluZ1tdID0KLSsJewotKwkweGJlLDB4ZTcsMHg2YiwweDU3LDB4ZGUsMHg4OCwweDEx LDB4OTYsMHg5YiwweDZlLDB4ZWEsMHhlNSwKLSsJMHg2MywweDgzLDB4NGMsMHhiNiwweDhkLDB4 NjYsMHhhYSwweDFmLDB4OGIsMHg1NCwweGU3LDB4NjIsCi0rCTB4NmQsMHg1YSwweGZjLDB4YmYs MHg5NywweGJhLDB4Y2QsMHg3NwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewot KwkweGU1LDB4MjgsMHg1ZiwweDQzLDB4ZjUsMHg4MywweDZlLDB4MGEsMHg4MywweDVjLDB4ZTMs MHg4MSwKLSsJMHgwMywweGYyLDB4ZjgsMHg3OCwweDAwLDB4N2MsMHg5NSwweDg3LDB4MTYsMHhk NiwweDZjLDB4NTgsCi0rCTB4MzMsMHg2YywweDUzLDB4MzUsMHgwZCwweDY2LDB4ZTMsMHhjZQot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMzg0X2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhlMiwweDFmLDB4ZjMsMHhk YSwweDBkLDB4MTksMHg5OSwweDg3LDB4YzQsMHg5MCwweGEyLDB4MzEsCi0rCTB4Y2EsMHgyYSww eDg5LDB4NTgsMHg0MywweDQ0LDB4YjgsMHhkZSwweGNmLDB4YTQsMHhiZSwweDNiLAotKwkweDUz LDB4MjYsMHgyMiwweDMxLDB4NzYsMHg0MSwweDIyLDB4YjUsMHhhOCwweDcwLDB4MmYsMHg0YiwK LSsJMHg2NCwweDk1LDB4NGQsMHg0OCwweDk2LDB4MzUsMHhlNiwweGJkLDB4M2MsMHgzNCwweGRi LDB4MWIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTM4NF9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg3NywweDYx LDB4YmEsMHhiYywweGYyLDB4YzEsMHhmMywweDRiLDB4ODYsMHg2NSwweGZkLDB4NDgsCi0rCTB4 MGUsMHgzYywweDAyLDB4NWUsMHhhMiwweDdhLDB4NmIsMHg3YywweGVkLDB4MjEsMHg1ZSwweGY5 LAotKwkweGNkLDB4Y2QsMHg3NywweDA3LDB4MmIsMHhiZSwweGM1LDB4NWMKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9h ZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHgxOCwweDI0LDB4NWYsMHhjNiwweDg0 LDB4ZDEsMHg2NywweGMzLDB4OWEsMHgxMSwweGE1LDB4OGMsCi0rCTB4MDcsMHgzOSwweDIxLDB4 ODMsMHg0ZCwweDA0LDB4YzQsMHg2YSwweDI4LDB4MTksMHhjZiwweDkyLAotKwkweDIxLDB4ZDks MHg5ZSwweDQxLDB4NzIsMHg2YywweDllLDB4NjMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9hZGRpdGlvbmFsaW5wdXQy W10gPQotKwl7Ci0rCTB4OTYsMHg2NywweDQxLDB4MjgsMHg5YiwweGI3LDB4OTIsMHg4ZCwweDY0 LDB4M2IsMHhlNCwweGNmLAotKwkweDdlLDB4YWEsMHgxZSwweGIxLDB4NGIsMHgxZCwweDA5LDB4 NTYsMHg2NywweDljLDB4YzYsMHg2ZCwKLSsJMHgzYiwweGU4LDB4OTEsMHg5ZCwweGUxLDB4OGEs MHhiNywweDMyCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEzODRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZTMsMHg1OSww eDYxLDB4MzgsMHg5MiwweGVjLDB4ZTIsMHgzYywweGZmLDB4YjcsMHhkYiwweDE5LAotKwkweDBm LDB4NWIsMHg5MywweDY4LDB4MGQsMHhhNCwweDk0LDB4NDAsMHg3MiwweDBiLDB4ZTAsMHhlZCwK LSsJMHg0ZCwweGNkLDB4NjgsMHhhMCwweDFlLDB4ZmUsMHg2NywweGIyLDB4ZmEsMHgyMSwweDU2 LDB4NzQsCi0rCTB4YTQsMHhhZCwweGNmLDB4YjcsMHg2MCwweDY2LDB4MmUsMHg0MCwweGRlLDB4 ODIsMHhjYSwweGZiCi0rCX07Ci0rCi0rCi0rLyogSE1BQyBTSEEtNTEyIFBSICAqLwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2Vu dHJvcHlpbnB1dFtdID0KLSsJewotKwkweGFhLDB4OWUsMHg0NSwweDY3LDB4MGUsMHgwMCwweDJh LDB4NjcsMHg5OCwweGQ2LDB4ZGEsMHgwYiwKLSsJMHgwZiwweDE3LDB4N2UsMHhhYywweGZkLDB4 MjcsMHhjNCwweGNhLDB4ODQsMHhkZiwweGRlLDB4YmEsCi0rCTB4ODUsMHhkOSwweGJlLDB4OGYs MHhmMywweGZmLDB4OTEsMHg0ZAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX25vbmNlW10gPQotKwl7Ci0rCTB4OGMs MHg0OSwweDJmLDB4NTgsMHgxZSwweDdhLDB4ZGEsMHg0YiwweDdlLDB4OGEsMHgzMCwweDdiLAot KwkweDg2LDB4ZWEsMHhhZiwweGEyCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5n W10gPQotKwl7Ci0rCTB4NzEsMHhlMSwweGJiLDB4YWQsMHhhNywweDRiLDB4MmUsMHgzMSwweDNi LDB4MGIsMHhlYywweDI0LAotKwkweDk5LDB4MzgsMHhiYywweGFhLDB4MDUsMHg0YywweDQ2LDB4 NDQsMHhmYSwweGFkLDB4OGUsMHgwMiwKLSsJMHhjMSwweDdlLDB4YWQsMHhlYywweDU0LDB4YTYs MHhkMCwweGFkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4M2Qs MHg2ZSwweGE2LDB4YTgsMHgyOSwweDJhLDB4YjIsMHhmNSwweDk4LDB4NDIsMHhlNCwweDkyLAot KwkweDc4LDB4MjIsMHg2NywweGZkLDB4MWIsMHgxNSwweDFlLDB4MjksMHhhYSwweDcxLDB4M2Ms MHgzYywKLSsJMHhlNywweDA1LDB4MjAsMHhhOSwweDI5LDB4YzYsMHg3NSwweDcxCi0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1 MTJfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHhhYiwweGI5LDB4MTYsMHhkOCwweDU1 LDB4MzUsMHg1NCwweGI3LDB4OTcsMHgzZiwweDk0LDB4YmMsCi0rCTB4MmYsMHg3YywweDcwLDB4 YzcsMHhkMCwweGVkLDB4YjcsMHg0YiwweGY3LDB4ZjYsMHg2YywweDAzLAotKwkweDBjLDB4YjAs MHgwMywweGQ4LDB4YmIsMHg3MSwweGQ5LDB4MTAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9pbnRfcmV0dXJuZWRi aXRzW10gPQotKwl7Ci0rCTB4OGUsMHhkMywweGZkLDB4NTIsMHg5ZSwweDgzLDB4MDgsMHg0OSww eDE4LDB4NmUsMHgyMywweDU2LAotKwkweDVjLDB4NDUsMHg5MywweDM0LDB4MDUsMHhlMiwweDk4 LDB4OGYsMHgwYywweGQ0LDB4MzIsMHgwYywKLSsJMHhmZCwweGRhLDB4NWYsMHg5MiwweDNhLDB4 OGMsMHg4MSwweGJkLDB4ZjYsMHg2YywweDU1LDB4ZmQsCi0rCTB4YjgsMHgyMCwweGNlLDB4OGQs MHg5NywweDI3LDB4ZTgsMHhlOCwweGUwLDB4YjMsMHg4NSwweDUwLAotKwkweGEyLDB4YzIsMHhi MiwweDk1LDB4MWQsMHg0OCwweGQzLDB4N2IsMHg0YiwweDc4LDB4MTMsMHgzNSwKLSsJMHgwNSww eDE3LDB4YmUsMHgwZAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJ MHhjMywweGZjLDB4OTUsMHhhYSwweDY5LDB4MDYsMHhhZSwweDU5LDB4NDEsMHhjZSwweDI2LDB4 MDgsCi0rCTB4MjksMHg2ZCwweDQ1LDB4ZGEsMHhlOCwweGIzLDB4NmMsMHg5NSwweDYwLDB4MGYs MHg3MCwweDJjLAotKwkweDEwLDB4YmEsMHgzOCwweDhjLDB4Y2YsMHgyOSwweDk5LDB4YWEKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTUxMl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0rCXsKLSsJMHgzYiwweDlhLDB4MjUsMHhj ZSwweGQ3LDB4ZjksMHg1YywweGQxLDB4M2EsMHgzZSwweGFhLDB4NzEsCi0rCTB4MTQsMHgzZSww eDE5LDB4ZTgsMHhjZSwweGU2LDB4ZmUsMHg1MSwweDg0LDB4ZTksMHgxYiwweGZlLAotKwkweDNm LDB4YTcsMHhmMiwweGZkLDB4NzYsMHg1ZiwweDZhLDB4ZTcKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9yZXR1cm5l ZGJpdHNbXSA9Ci0rCXsKLSsJMHhiNywweDgyLDB4YTksMHg1NywweDgxLDB4NjcsMHg1MywweGI1 LDB4YTEsMHhlOSwweDNkLDB4MzUsCi0rCTB4ZjksMHhlNCwweDk3LDB4YmUsMHhhNiwweGNhLDB4 ZjEsMHgwMSwweDEzLDB4MDksMHhlNywweDIxLAotKwkweGMwLDB4ZWQsMHg5MywweDVkLDB4NGIs MHhmNCwweGViLDB4OGQsMHg1MywweDI1LDB4OGEsMHhjNCwKLSsJMHhiMSwweDZmLDB4NmUsMHgz NywweGNkLDB4MmUsMHhhYywweDM5LDB4YjIsMHhiNiwweDk5LDB4YTMsCi0rCTB4ODIsMHgwMCww eGIwLDB4MjEsMHhmMCwweGM3LDB4MmYsMHg0YywweDczLDB4OTIsMHhmZCwweDAwLAotKwkweGI2 LDB4YWYsMHhiYywweGQzCi0rCX07Ci0rCi0rCi0rLyogSE1BQyBTSEEtNTEyIE5vIFBSICAqLwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEy X2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDZlLDB4ODUsMHhlNiwweDI1LDB4OTYsMHgyOSww eGE3LDB4NTIsMHg1YiwweDYwLDB4YmEsMHhhYSwKLSsJMHhkZSwweGRiLDB4MzYsMHgwYSwweDUx LDB4OWEsMHgxNSwweGFlLDB4NmUsMHgxOCwweGQzLDB4ZmUsCi0rCTB4MzksMHhiOSwweDRhLDB4 OTYsMHhmOCwweDc3LDB4Y2IsMHg5NQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX25vbmNlW10gPQotKwl7Ci0rCTB4ZTAs MHhhNiwweDVkLDB4MDgsMHhjMywweDdjLDB4YWUsMHgyNSwweDJlLDB4ODAsMHhkMSwweDNlLAot KwkweGQ5LDB4YWYsMHg0MywweDNjCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10g PQotKwl7Ci0rCTB4NTMsMHg5OSwweDUyLDB4NWYsMHgxMSwweGE5LDB4NjQsMHg2NiwweDIwLDB4 NWUsMHgxYiwweDVmLAotKwkweDQyLDB4YjMsMHhmNCwweGRhLDB4ZWQsMHhiYiwweDYzLDB4YzEs MHgyMywweGFmLDB4ZDAsMHgwMSwKLSsJMHg5MCwweDNiLDB4ZDAsMHg3OCwweGU0LDB4MGIsMHhh NywweDIwCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGE1MTJfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4ODUsMHg5MCww eDgwLDB4ZDMsMHg5OCwweGYxLDB4NTMsMHg2ZCwweDY4LDB4MTUsMHg4ZiwweGU1LAotKwkweDYw LDB4M2YsMHgxNywweDI5LDB4NTUsMHg4ZCwweDMzLDB4YjEsMHg0NSwweDY0LDB4NjQsMHg4ZCwK LSsJMHg1MCwweDIxLDB4ODksMHhhZSwweGY2LDB4ZmQsMHgzMiwweDczCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfaW50 X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDI4LDB4NTYsMHgzMCwweDZmLDB4ZjQsMHhhMSww eDQ4LDB4ZTAsMHhjOSwweGY1LDB4NzUsMHg5MCwKLSsJMHhjYywweGZiLDB4ZGYsMHhkZiwweDcx LDB4M2QsMHgwYSwweDlhLDB4MDMsMHg2NSwweDNiLDB4MTgsCi0rCTB4NjEsMHhlMywweGQxLDB4 ZGEsMHhjYywweDRhLDB4ZmUsMHg1NSwweDM4LDB4ZjgsMHgyMSwweDZiLAotKwkweGZhLDB4MTgs MHgwMSwweDQyLDB4MzksMHgyZiwweDk5LDB4NTMsMHgzOCwweDE1LDB4ODIsMHgzNCwKLSsJMHhj NSwweDkzLDB4OTIsMHhiYywweDRkLDB4NzUsMHgxYSwweDVmLDB4MjEsMHgyNywweGNjLDB4YTEs Ci0rCTB4YjEsMHg1NywweDY5LDB4ZTgKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9 Ci0rCXsKLSsJMHg4YywweDUyLDB4N2UsMHg3NywweDcyLDB4M2YsMHhhMywweDA0LDB4OTcsMHgx MCwweDliLDB4NDEsCi0rCTB4YmQsMHhlOCwweGZmLDB4ODksMHhlZCwweDgwLDB4ZTMsMHhiZCww eGFhLDB4MTIsMHgyZCwweGNhLAotKwkweDc1LDB4ODIsMHgzNiwweDc3LDB4ODgsMHhjZCwweGE2 LDB4NzMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTUxMl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg3ZSww eDMyLDB4ZTMsMHg2OSwweDY5LDB4MDcsMHgzNCwweGEyLDB4MTYsMHhhMiwweDVkLDB4MWEsCi0r CTB4MTAsMHg5MSwweGQzLDB4ZTIsMHgyMSwweGEyLDB4YTMsMHhkZCwweGNkLDB4MGMsMHgwOSww eDg2LAotKwkweDExLDB4ZTEsMHg1MCwweGZmLDB4NWMsMHhiNywweGViLDB4NWMKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUx Ml9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4N2YsMHg3OCwweDY2LDB4ZDgsMHhmYiww eDY3LDB4Y2YsMHg4ZCwweDhjLDB4MDgsMHgzMCwweGE1LAotKwkweGY4LDB4N2QsMHhjZiwweDQ0 LDB4NTksMHhjZSwweGY4LDB4ZGYsMHg1OCwweGQzLDB4NjAsMHhjYiwKLSsJMHhhOCwweDYwLDB4 YjksMHgwNywweGM0LDB4YjEsMHg5NSwweDQ4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcmV0dXJuZWRiaXRzW10gPQot Kwl7Ci0rCTB4ZGYsMHhhNywweDM2LDB4ZDQsMHhkYywweDVkLDB4NGQsMHgzMSwweGFkLDB4Njks MHg0NiwweDlmLAotKwkweGYxLDB4N2MsMHhkNywweDNiLDB4NGYsMHg1NSwweGYyLDB4ZDcsMHhi OSwweDlkLDB4YWQsMHg3YSwKLSsJMHg3OSwweDA4LDB4NTksMHhhNSwweGRjLDB4NzQsMHhmNSww eDliLDB4NzMsMHhkMiwweDEzLDB4MjUsCi0rCTB4MGIsMHg4MSwweDA4LDB4MDgsMHgyNSwweGZi LDB4MzksMHhmMiwweGYwLDB4YTMsMHhhNCwweDhkLAotKwkweGVmLDB4MDUsMHg5ZSwweGI4LDB4 YzcsMHg1MiwweGU0LDB4MGUsMHg0MiwweGFhLDB4N2MsMHg3OSwKLSsJMHhjMiwweGQ2LDB4ZmQs MHhhNQotKwl9OwotKwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9m aXBzX2RzYV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9m aXBzX2RzYV9zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9m aXBzX2RzYV9zZWxmdGVzdC5jLmZpcHMJMjAxMi0wMi0wNyAxMTowNzowMi41NDYzOTM3NDggKzAx MDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0 LmMJMjAxMi0wMi0wNyAxMzoyMjoxNy4xNzk1MTkwOTggKzAxMDAKLUBAIC0wLDAgKzEsMTkzIEBA Ci0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJv amVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAq Ci0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJp YnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsg KgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVj dCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAq ICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAg IG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdy aXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsg KiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0 aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9y Zy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQ Uk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNT TCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRl ICJmaXBzX2xvY2wuaCIKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0OF9wW10gPSB7Ci0rCTB4YTgsMHg1MywweDc4LDB4 ZDgsMHhmZCwweDNmLDB4OGQsMHg3MiwweGVjLDB4NzQsMHgxOCwweDA4LAotKwkweDBkLDB4YTIs MHgxMywweDE3LDB4ZTQsMHgzZSwweGM0LDB4YjYsMHgyYiwweGE4LDB4YzgsMHg2MiwKLSsJMHgz YiwweDdlLDB4NGQsMHgwNCwweDQ0LDB4MWQsMHhkMSwweGEwLDB4NjUsMHg4NiwweDYyLDB4NTks Ci0rCTB4NjQsMHg5MywweGNhLDB4OGUsMHg5ZSwweDhmLDB4YmIsMHg3ZSwweDM0LDB4YWEsMHhk ZCwweGI2LAotKwkweDJlLDB4NWQsMHg2NywweGI2LDB4ZDAsMHg5YSwweDZlLDB4NjEsMHhiNyww eDY5LDB4ZTcsMHhjMywKLSsJMHg1MiwweGFhLDB4MmIsMHgxMCwweGUyLDB4MGMsMHhhMCwweDYz LDB4NjksMHg2MywweGI1LDB4NTIsCi0rCTB4M2UsMHg4NiwweDQ3LDB4MGQsMHhlYywweGJiLDB4 ZWQsMHhhMCwweDI3LDB4ZTcsMHg5NywweGU3LAotKwkweGI2LDB4NzYsMHgzNSwweGQ0LDB4ZDQs MHg5YywweDMwLDB4NzAsMHgwZSwweDc0LDB4YWYsMHg4YSwKLSsJMHgwZiwweGYxLDB4NTYsMHhh OCwweDAxLDB4YWYsMHg1NywweGEyLDB4NmUsMHg3MCwweDc4LDB4ZjEsCi0rCTB4ZDgsMHgyZiww eDc0LDB4OTAsMHg4ZSwweGNiLDB4NmQsMHgwNywweGU3LDB4MGIsMHgzNSwweDAzLAotKwkweGVl LDB4ZDksMHg0ZiwweGEzLDB4MmMsMHhmMSwweDdhLDB4N2YsMHhjMywweGQ2LDB4Y2YsMHg0MCwK LSsJMHhkYywweDdiLDB4MDAsMHg4MywweDBlLDB4NmEsMHgyNSwweDY2LDB4ZGMsMHgwNywweDNl LDB4MzQsCi0rCTB4MzMsMHgxMiwweDUxLDB4N2MsMHg2YSwweGE1LDB4MTUsMHgyYiwweDRiLDB4 ZmUsMHhjZCwweDJlLAotKwkweDU1LDB4MWYsMHhlZSwweDM0LDB4NjMsMHgxOCwweGExLDB4NTMs MHg0MiwweDNjLDB4OTksMHg2YiwKLSsJMHgwZCwweDVkLDB4Y2IsMHg5MSwweDAyLDB4YWUsMHhk ZCwweDM4LDB4NzksMHg4NiwweDE2LDB4ZjEsCi0rCTB4ZjEsMHhlMCwweGQ2LDB4YzQsMHgwMyww eDUyLDB4NWIsMHgxZiwweDliLDB4M2QsMHg0ZCwweGM3LAotKwkweDY2LDB4ZGUsMHgyZCwweGZj LDB4NGEsMHg1NiwweGQ3LDB4YjgsMHhiYSwweDU5LDB4NjMsMHhkNiwKLSsJMHgwZiwweDNlLDB4 MTYsMHgzMSwweDg4LDB4NzAsMHhhZCwweDQzLDB4NjksMHg1MiwweGU1LDB4NTcsCi0rCTB4NjUs MHgzNywweDRlLDB4YWIsMHg4NSwweGU4LDB4ZWMsMHgxNywweGQ2LDB4YjksMHhhNCwweDU0LAot KwkweDdiLDB4OWIsMHg1ZiwweDI3LDB4NTIsMHhmMywweDEwLDB4NWIsMHhlOCwweDA5LDB4YjIs MHgzYSwKLSsJMHgyYywweDhkLDB4NzQsMHg2OSwweGRiLDB4MDIsMHhlMiwweDRkLDB4NTksMHgy MywweDk0LDB4YTcsCi0rCTB4ZGIsMHhhMCwweDY5LDB4ZTkKLSt9OwotKwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfcVtdID0gewotKwkweGQyLDB4NzcsMHgwNCww eDRlLDB4NTAsMHhmNSwweGE0LDB4ZTMsMHhmNSwweDEwLDB4YTUsMHgwYSwKLSsJMHgwYiwweDg0 LDB4ZmQsMHhmZiwweGJjLDB4YTAsMHg0NywweGVkLDB4MjcsMHg2MCwweDIwLDB4NTYsCi0rCTB4 NzQsMHg0MSwweGEwLDB4YTUKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRz YV90ZXN0XzIwNDhfZ1tdID0gewotKwkweDEzLDB4ZDcsMHg1NCwweGUyLDB4MWYsMHhkMiwweDQx LDB4NjUsMHg1ZCwweGE4LDB4OTEsMHhjNSwKLSsJMHgyMiwweGE2LDB4NWEsMHg3MiwweGE4LDB4 OWIsMHhkYywweDY0LDB4ZWMsMHg5YiwweDU0LDB4YTgsCi0rCTB4MjEsMHhlZCwweDRhLDB4ODks MHg4YiwweDQ5LDB4MGUsMHgwYywweDRmLDB4Y2IsMHg3MiwweDE5LAotKwkweDJhLDB4NGEsMHgy MCwweGY1LDB4NDEsMHhmMywweGYyLDB4OTIsMHg1MywweDk5LDB4ZjAsMHhiYSwKLSsJMHhlYyww eGY5LDB4MjksMHhhYSwweGZiLDB4ZjcsMHg5ZCwweGZlLDB4NDMsMHgzMiwweDM5LDB4M2IsCi0r CTB4MzIsMHhjZCwweDJlLDB4MmYsMHhjZiwweDI3LDB4MmYsMHgzMiwweGE2LDB4MjcsMHg0Myww eDRhLAotKwkweDBkLDB4ZjIsMHg0MiwweGI3LDB4NWIsMHg0MSwweDRkLDB4ZjMsMHg3MiwweDEy LDB4MWUsMHg1MywKLSsJMHhhNSwweDUzLDB4ZjIsMHgyMiwweGY4LDB4MzYsMHhiMCwweDAwLDB4 ZjAsMHgxNiwweDQ4LDB4NWIsCi0rCTB4NmIsMHhkMCwweDg5LDB4ODQsMHg1MSwweDgwLDB4MWQs MHhjZCwweDhkLDB4ZTYsMHg0YywweGQ1LAotKwkweDM2LDB4NTYsMHg5NiwweGZmLDB4YzUsMHgz MiwweGQ1LDB4MjgsMHhjNSwweDA2LDB4NjIsMHgwYSwKLSsJMHg5NCwweDJhLDB4MDMsMHgwNSww eDA0LDB4NmQsMHg4ZiwweDE4LDB4NzYsMHgzNCwweDFmLDB4MWUsCi0rCTB4NTcsMHgwYiwweGMz LDB4OTcsMHg0YiwweGE2LDB4YjksMHhhNCwweDM4LDB4ZTksMHg3MCwweDIzLAotKwkweDAyLDB4 YTIsMHhlNiwweGU2LDB4N2IsMHhmZCwweDA2LDB4ZDMsMHgyYiwweGM2LDB4NzksMHg5NiwKLSsJ MHgyMiwweDcxLDB4ZDcsMHhiNCwweDBjLDB4ZDcsMHgyZiwweDM4LDB4NmUsMHg2NCwweGUwLDB4 ZDcsCi0rCTB4ZWYsMHg4NiwweGNhLDB4OGMsMHhhNSwweGQxLDB4NDIsMHgyOCwweGRjLDB4MmEs MHg0ZiwweDE2LAotKwkweGUzLDB4MTgsMHg5OCwweDg2LDB4YjUsMHg5OSwweDA2LDB4NzQsMHhm NCwweDIwLDB4MGYsMHgzYSwKLSsJMHg0YywweGY2LDB4NWEsMHgzZiwweDBkLDB4ZGIsMHhhMSww eGZhLDB4NjcsMHgyZCwweGZmLDB4MmYsCi0rCTB4NWUsMHgxNCwweDNkLDB4MTAsMHhlNCwweGU5 LDB4N2EsMHhlOCwweDRmLDB4NmQsMHhhMCwweDk1LAotKwkweDM1LDB4ZDUsMHhiOSwweGRmLDB4 MjUsMHg5MSwweDgxLDB4YTcsMHg5YiwweDYzLDB4YjAsMHg2OSwKLSsJMHhlOSwweDQ5LDB4OTcs MHgyYiwweDAyLDB4YmEsMHgzNiwweGIzLDB4NTgsMHg2YSwweGFiLDB4N2UsCi0rCTB4NDUsMHhm MywweDIyLDB4ZjgsMHgyZSwweDRlLDB4ODUsMHhjYSwweDNhLDB4YjgsMHg1NSwweDkxLAotKwkw eGIzLDB4YzIsMHhhOSwweDY2Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBk c2FfdGVzdF8yMDQ4X3B1Yl9rZXlbXSA9IHsKLSsJMHgyNCwweDUyLDB4ZjMsMHhjYywweGJlLDB4 OWUsMHhkNSwweGNhLDB4N2QsMHhjNywweDRjLDB4NjAsCi0rCTB4MmIsMHg5OSwweDIyLDB4NmUs MHg4ZiwweDJmLDB4YWIsMHgzOCwweGU3LDB4ZDcsMHhkZCwweGZiLAotKwkweDc1LDB4NTMsMHg5 YiwweDE3LDB4MTUsMHg1ZSwweDlmLDB4Y2YsMHhkMSwweGFiLDB4YTUsMHg2NCwKLSsJMHhlYiww eDg1LDB4MzUsMHhkOCwweDEyLDB4YzksMHhjMiwweGRjLDB4ZjksMHg3MiwweDg0LDB4NDQsCi0r CTB4MWIsMHhjNCwweDgyLDB4MjQsMHgzNiwweDI0LDB4YzcsMHhmNCwweDU3LDB4NTgsMHgwYyww eDFjLAotKwkweDM4LDB4YTUsMHg3YywweDQ2LDB4YzQsMHg1NywweDM5LDB4MjQsMHg3MCwweGVk LDB4YjUsMHgyYywKLSsJMHhiNSwweGE2LDB4ZTAsMHgzZiwweGU2LDB4MjgsMHg3YiwweGI2LDB4 ZjQsMHg5YSwweDQyLDB4YTIsCi0rCTB4MDYsMHg1YSwweDA1LDB4NGYsMHgwMywweDA4LDB4Mzks MHhkZiwweDFmLDB4ZDMsMHgxNCwweDljLAotKwkweDRjLDB4YTAsMHg1MywweDFkLDB4ZDgsMHhj YSwweDhhLDB4YWEsMHg5YywweGM3LDB4MzMsMHg3MSwKLSsJMHg5MywweDM4LDB4NzMsMHg0OCww eDMzLDB4NjEsMHgxOCwweDIyLDB4NDUsMHg0NSwweGU4LDB4OGMsCi0rCTB4ODAsMHhmZiwweGQ4 LDB4NzYsMHg1ZCwweDc0LDB4MzYsMHgwMywweDMzLDB4Y2MsMHhhYiwweDk5LAotKwkweDcyLDB4 NzcsMHg5YiwweDY1LDB4MjUsMHhhNiwweDViLDB4ZGQsMHgwZCwweDEwLDB4YzYsMHg3NSwKLSsJ MHhjMSwweDA5LDB4YmIsMHhkMywweGU1LDB4YmUsMHg0ZCwweDcyLDB4ZWYsMHg2ZSwweGJhLDB4 NmUsCi0rCTB4NDMsMHg4ZCwweDUyLDB4MjYsMHgyMywweDdkLDB4YjgsMHg4OCwweDM3LDB4OWMs MHg1ZiwweGNjLAotKwkweDQ3LDB4YTMsMHg4NCwweDdmLDB4ZjYsMHgzNywweDExLDB4YmEsMHhl ZCwweDZkLDB4MDMsMHhhZiwKLSsJMHhlOCwweDFlLDB4NjksMHg0YSwweDQxLDB4M2IsMHg2OCww eDBiLDB4ZDMsMHg4YSwweGI0LDB4OTAsCi0rCTB4M2YsMHg4MywweDcwLDB4YTcsMHgwNywweGVm LDB4NTUsMHgxZCwweDQ5LDB4NDEsMHgwMiwweDZkLAotKwkweDk1LDB4NzksMHhkNiwweDkxLDB4 ZGUsMHg4ZSwweGRhLDB4YTEsMHg2MSwweDA1LDB4ZWIsMHg5ZCwKLSsJMHhiYSwweDNjLDB4MmYs MHg0YywweDFiLDB4ZWMsMHg1MCwweDgyLDB4NzUsMHhhYSwweDAyLDB4MDcsCi0rCTB4ZTIsMHg1 MSwweGI1LDB4ZWMsMHhjYiwweDI4LDB4NmEsMHg0YiwweDAxLDB4ZDQsMHg0OSwweGQzLAotKwkw eDBhLDB4Y2IsMHg2NywweDM3LDB4MTcsMHhhMCwweGQyLDB4ZmIsMHgzYiwweDUwLDB4YzgsMHg5 MywKLSsJMHhmNywweGRhLDB4YjEsMHg0ZgotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgZHNhX3Rlc3RfMjA0OF9wcml2X2tleVtdID0gewotKwkweDBjLDB4NGIsMHgzMCwweDg5 LDB4ZDEsMHhiOCwweDYyLDB4Y2IsMHgzYywweDQzLDB4NjQsMHg5MSwKLSsJMHhmMCwweDkxLDB4 NTQsMHg3MCwweGM1LDB4MjcsMHg5NiwweGUzLDB4YWMsMHhiZSwweGU4LDB4MDAsCi0rCTB4ZWMs MHg1NSwweGY2LDB4Y2MKLSt9OwotKwotK3N0YXRpYyBpbnQgY29ycnVwdF9kc2E7Ci0rCi0rdm9p ZCBGSVBTX2NvcnJ1cHRfZHNhKCkKLSsgICAgewotKyAgICBjb3JydXB0X2RzYSA9IDE7Ci0rICAg IH0KLSsKLStpbnQgRklQU19zZWxmdGVzdF9kc2EoKQotKwl7Ci0rCURTQSAqZHNhID0gTlVMTDsK LSsJRVZQX1BLRVkgKnBrID0gTlVMTDsKLSsJaW50IHJldCA9IDA7Ci0rCi0rCWRzYSA9IERTQV9u ZXcoKTsKLSsKLSsJaWYoZHNhID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsKLSsJZmlwc19sb2Fk X2tleV9jb21wb25lbnQoZHNhLCBwLCBkc2FfdGVzdF8yMDQ4KTsKLSsJZmlwc19sb2FkX2tleV9j b21wb25lbnQoZHNhLCBxLCBkc2FfdGVzdF8yMDQ4KTsKLSsJZmlwc19sb2FkX2tleV9jb21wb25l bnQoZHNhLCBnLCBkc2FfdGVzdF8yMDQ4KTsKLSsJZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNh LCBwdWJfa2V5LCBkc2FfdGVzdF8yMDQ4KTsKLSsJZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNh LCBwcml2X2tleSwgZHNhX3Rlc3RfMjA0OCk7Ci0rCi0rCWlmIChjb3JydXB0X2RzYSkKLSsJCUJO X3NldF9iaXQoZHNhLT5wdWJfa2V5LCAyMDQ3KTsKLSsKLSsJaWYgKChwaz1FVlBfUEtFWV9uZXco KSkgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwotKwlFVlBfUEtFWV9hc3NpZ25fRFNBKHBrLCBk c2EpOwotKwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgTlVMTCwgMCwKLSsJ CQkJCU5VTEwsIDAsIEVWUF9zaGEyNTYoKSwgMCwKLSsJCQkJCSJEU0EgU0hBMjU2IikpCi0rCQln b3RvIGVycjsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyOgotKwlpZiAocGspCi0rCQlFVlBfUEtFWV9m cmVlKHBrKTsKLSsJZWxzZSBpZiAoZHNhKQotKwkJRFNBX2ZyZWUoZHNhKTsKLSsJcmV0dXJuIHJl dDsKLSsJfQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlw cy9maXBzX2VuYy5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX2Vu Yy5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX2VuYy5jLmZpcHMJ MjAxMi0wMi0wNyAxMToxNDowMS4wMjk4OTM3NTQgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJl dGEyL2NyeXB0by9maXBzL2ZpcHNfZW5jLmMJMjAxMi0wMi0wNyAxMToyMDoyMC43MjMwNTg3NDEg KzAxMDAKLUBAIC0wLDAgKzEsMTkxIEBACi0rLyogZmlwZS9ldnAvZmlwc19lbmMuYyAqLwotKy8q IENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQot KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NM IGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KLSsgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0 LmNvbSkuCi0rICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZv cm0gd2l0aCBOZXRzY2FwZXMgU1NMLgotKyAqIAotKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZv ciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotKyAqIHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucwotKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBi ZSBpdCB0aGUgUkM0LCBSU0EsCi0rICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3Qg dGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCi0rICogaW5jbHVkZWQgd2l0aCB0 aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwot KyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5j b20pLgotKyAqIAotKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1 Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCi0rICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSBy ZW1vdmVkLgotKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZ b3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KLSsgKiBhcyB0aGUgYXV0aG9yIG9mIHRo ZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgotKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3Jt IG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgotKyAqIGluIGRvY3Vt ZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgot KyAqIAotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQK LSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0rICogICAg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp c3RyaWJ1dGlvbi4KLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSsgKiAgICBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSsgKiAgICAgRXJpYyBZb3VuZyAo ZWF5QGNyeXB0c29mdC5jb20pIgotKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4g YmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQotKyAqICAgIGJlaW5n IHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotKyAqIDQuIElmIHlvdSBp bmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9m KSBmcm9tIAotKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91 IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29t KSIKLSsgKiAKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBB UyBJUycnIEFORAotKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0rICog QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUKLSsgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotKyAqIERBTUFHRVMgKElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT Ci0rICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSsgKiBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB TlkgV0FZCi0rICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKyAqIFNVQ0ggREFNQUdFLgotKyAqIAotKyAqIFRo ZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWls YWJsZSB2ZXJzaW9uIG9yCi0rICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNo YW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0rICogY29waWVkIGFuZCBw dXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQotKyAqIFtpbmNsdWRpbmcgdGhl IEdOVSBQdWJsaWMgTGljZW5jZS5dCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2lu Y2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsKLStjb25zdCBFVlBf Q0lQSEVSICpGSVBTX2dldF9jaXBoZXJieW5pZChpbnQgbmlkKQotKwl7Ci0rCXN3aXRjaCAobmlk KQotKwkJewotKwkJY2FzZSBOSURfYWVzXzEyOF9jYmM6Ci0rCQlyZXR1cm4gRVZQX2Flc18xMjhf Y2JjKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTI4X2NjbToKLSsJCXJldHVybiBFVlBfYWVzXzEy OF9jY20oKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xMjhfY2ZiMToKLSsJCXJldHVybiBFVlBfYWVz XzEyOF9jZmIxKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTI4X2NmYjEyODoKLSsJCXJldHVybiBF VlBfYWVzXzEyOF9jZmIxMjgoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xMjhfY2ZiODoKLSsJCXJl dHVybiBFVlBfYWVzXzEyOF9jZmI4KCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTI4X2N0cjoKLSsJ CXJldHVybiBFVlBfYWVzXzEyOF9jdHIoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xMjhfZWNiOgot KwkJcmV0dXJuIEVWUF9hZXNfMTI4X2VjYigpOwotKwotKwkJY2FzZSBOSURfYWVzXzEyOF9nY206 Ci0rCQlyZXR1cm4gRVZQX2Flc18xMjhfZ2NtKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTI4X29m YjEyODoKLSsJCXJldHVybiBFVlBfYWVzXzEyOF9vZmIoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18x MjhfeHRzOgotKwkJcmV0dXJuIEVWUF9hZXNfMTI4X3h0cygpOwotKwotKwkJY2FzZSBOSURfYWVz XzE5Ml9jYmM6Ci0rCQlyZXR1cm4gRVZQX2Flc18xOTJfY2JjKCk7Ci0rCi0rCQljYXNlIE5JRF9h ZXNfMTkyX2NjbToKLSsJCXJldHVybiBFVlBfYWVzXzE5Ml9jY20oKTsKLSsKLSsJCWNhc2UgTklE X2Flc18xOTJfY2ZiMToKLSsJCXJldHVybiBFVlBfYWVzXzE5Ml9jZmIxKCk7Ci0rCi0rCQljYXNl IE5JRF9hZXNfMTkyX2NmYjEyODoKLSsJCXJldHVybiBFVlBfYWVzXzE5Ml9jZmIxMjgoKTsKLSsK LSsJCWNhc2UgTklEX2Flc18xOTJfY2ZiODoKLSsJCXJldHVybiBFVlBfYWVzXzE5Ml9jZmI4KCk7 Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTkyX2N0cjoKLSsJCXJldHVybiBFVlBfYWVzXzE5Ml9jdHIo KTsKLSsKLSsJCWNhc2UgTklEX2Flc18xOTJfZWNiOgotKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2Vj YigpOwotKwotKwkJY2FzZSBOSURfYWVzXzE5Ml9nY206Ci0rCQlyZXR1cm4gRVZQX2Flc18xOTJf Z2NtKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTkyX29mYjEyODoKLSsJCXJldHVybiBFVlBfYWVz XzE5Ml9vZmIoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18yNTZfY2JjOgotKwkJcmV0dXJuIEVWUF9h ZXNfMjU2X2NiYygpOwotKwotKwkJY2FzZSBOSURfYWVzXzI1Nl9jY206Ci0rCQlyZXR1cm4gRVZQ X2Flc18yNTZfY2NtKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMjU2X2NmYjE6Ci0rCQlyZXR1cm4g RVZQX2Flc18yNTZfY2ZiMSgpOwotKwotKwkJY2FzZSBOSURfYWVzXzI1Nl9jZmIxMjg6Ci0rCQly ZXR1cm4gRVZQX2Flc18yNTZfY2ZiMTI4KCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMjU2X2NmYjg6 Ci0rCQlyZXR1cm4gRVZQX2Flc18yNTZfY2ZiOCgpOwotKwotKwkJY2FzZSBOSURfYWVzXzI1Nl9j dHI6Ci0rCQlyZXR1cm4gRVZQX2Flc18yNTZfY3RyKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMjU2 X2VjYjoKLSsJCXJldHVybiBFVlBfYWVzXzI1Nl9lY2IoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18y NTZfZ2NtOgotKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2djbSgpOwotKwotKwkJY2FzZSBOSURfYWVz XzI1Nl9vZmIxMjg6Ci0rCQlyZXR1cm4gRVZQX2Flc18yNTZfb2ZiKCk7Ci0rCi0rCQljYXNlIE5J RF9hZXNfMjU2X3h0czoKLSsJCXJldHVybiBFVlBfYWVzXzI1Nl94dHMoKTsKLSsKLSsJCWNhc2Ug TklEX2Rlc19lZGVfZWNiOgotKwkJcmV0dXJuIEVWUF9kZXNfZWRlKCk7Ci0rCi0rCQljYXNlIE5J RF9kZXNfZWRlM19lY2I6Ci0rCQlyZXR1cm4gRVZQX2Rlc19lZGUzKCk7Ci0rCi0rCQljYXNlIE5J RF9kZXNfZWRlM19jYmM6Ci0rCQlyZXR1cm4gRVZQX2Rlc19lZGUzX2NiYygpOwotKwotKwkJY2Fz ZSBOSURfZGVzX2VkZTNfY2ZiMToKLSsJCXJldHVybiBFVlBfZGVzX2VkZTNfY2ZiMSgpOwotKwot KwkJY2FzZSBOSURfZGVzX2VkZTNfY2ZiNjQ6Ci0rCQlyZXR1cm4gRVZQX2Rlc19lZGUzX2NmYjY0 KCk7Ci0rCi0rCQljYXNlIE5JRF9kZXNfZWRlM19jZmI4OgotKwkJcmV0dXJuIEVWUF9kZXNfZWRl M19jZmI4KCk7Ci0rCi0rCQljYXNlIE5JRF9kZXNfZWRlM19vZmI2NDoKLSsJCXJldHVybiBFVlBf ZGVzX2VkZTNfb2ZiKCk7Ci0rCi0rCQljYXNlIE5JRF9kZXNfZWRlX2NiYzoKLSsJCXJldHVybiBF VlBfZGVzX2VkZV9jYmMoKTsKLSsKLSsJCWNhc2UgTklEX2Rlc19lZGVfY2ZiNjQ6Ci0rCQlyZXR1 cm4gRVZQX2Rlc19lZGVfY2ZiNjQoKTsKLSsKLSsJCWNhc2UgTklEX2Rlc19lZGVfb2ZiNjQ6Ci0r CQlyZXR1cm4gRVZQX2Rlc19lZGVfb2ZiKCk7Ci0rCi0rCQlkZWZhdWx0OgotKwkJcmV0dXJuIE5V TEw7Ci0rCi0rCQl9Ci0rCX0KLSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRv L2ZpcHMvZmlwcy5oLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzLmgK LS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHMuaC5maXBzCTIwMTItMDIt MDcgMTE6MDc6MDIuNTQ2MzkzNzQ4ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlw dG8vZmlwcy9maXBzLmgJMjAxMi0wMi0wNyAxMToxMDozOC4wNzkxODc2NDYgKzAxMDAKLUBAIC0w LDAgKzEsMjc5IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhl 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 IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPG9w ZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5j bHVkZSA8c3RkYXJnLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjZXJyb3IgRklQUyBp cyBkaXNhYmxlZC4KLSsjZW5kaWYKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rI2lmZGVm ICBfX2NwbHVzcGx1cwotK2V4dGVybiAiQyIgewotKyNlbmRpZgotKwotK3N0cnVjdCBkc2Ffc3Q7 Ci0rc3RydWN0IHJzYV9zdDsKLStzdHJ1Y3QgZXZwX3BrZXlfc3Q7Ci0rc3RydWN0IGVudl9tZF9z dDsKLStzdHJ1Y3QgZW52X21kX2N0eF9zdDsKLStzdHJ1Y3QgZXZwX2NpcGhlcl9zdDsKLStzdHJ1 Y3QgZXZwX2NpcGhlcl9jdHhfc3Q7Ci0rc3RydWN0IGRoX21ldGhvZDsKLStzdHJ1Y3QgQ01BQ19D VFhfc3Q7Ci0rc3RydWN0IGhtYWNfY3R4X3N0OwotKwotK2ludCBGSVBTX21vZHVsZV9tb2RlX3Nl dChpbnQgb25vZmYsIGNvbnN0IGNoYXIgKmF1dGgpOwotK2ludCBGSVBTX21vZHVsZV9tb2RlKHZv aWQpOwotK2NvbnN0IHZvaWQgKkZJUFNfcmFuZF9jaGVjayh2b2lkKTsKLStpbnQgRklQU19zZWxm dGVzdCh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9mYWlsZWQodm9pZCk7Ci0rdm9pZCBGSVBT X2NvcnJ1cHRfc2hhMSh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9zaGExKHZvaWQpOwotK2lu dCBGSVBTX3NlbGZ0ZXN0X3NoYTIodm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfYWVzKHZvaWQp OwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc19jY20odm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3Rf YWVzX2djbSh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9hZXNfeHRzKHZvaWQpOwotK2ludCBG SVBTX3NlbGZ0ZXN0X2Flcyh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9kZXModm9pZCk7Ci0r aW50IEZJUFNfc2VsZnRlc3RfZGVzKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X3JzYSh2b2lk KTsKLSt2b2lkIEZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0 ZXN0X3JzYSh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9kc2Eodm9pZCk7Ci0rdm9pZCBGSVBT X2NvcnJ1cHRfZHNhX2tleWdlbih2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9kc2Eodm9pZCk7 Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfcm5nKHZvaWQpOwotK3ZvaWQgRklQU19ybmdfc3RpY2sodm9p ZCk7Ci0rdm9pZCBGSVBTX3g5MzFfc3RpY2soaW50IG9ub2ZmKTsKLSt2b2lkIEZJUFNfZHJiZ19z dGljayhpbnQgb25vZmYpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X3JuZyh2b2lkKTsKLStpbnQgRklQ U19zZWxmdGVzdF94OTMxKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2htYWModm9pZCk7Ci0r aW50IEZJUFNfc2VsZnRlc3RfZHJiZyh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9kcmJnX2Fs bCh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9jbWFjKHZvaWQpOwotKwotK3ZvaWQgRklQU19n ZXRfdGltZXZlYyh1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgKnBjdHIpOwotKwot KyNkZWZpbmUgRklQU19FUlJPUl9JR05PUkVEKGFsZykgT3BlblNTTERpZShfX0ZJTEVfXywgX19M SU5FX18sIFwKLSsJCWFsZyAiIHByZXZpb3VzIEZJUFMgZm9yYmlkZGVuIGFsZ29yaXRobSBlcnJv ciBpZ25vcmVkIik7Ci0rCi0raW50IGZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChzdHJ1Y3QgZXZw X3BrZXlfc3QgKnBrZXksCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBpbnQgdGJzbGVu LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdCwgdW5zaWduZWQgaW50IGthdGxlbiwKLSsJ CQljb25zdCBzdHJ1Y3QgZW52X21kX3N0ICpkaWdlc3QsIHVuc2lnbmVkIGludCBtZF9mbGFncywK LSsJCQljb25zdCBjaGFyICpmYWlsX3N0cik7Ci0rCi0raW50IGZpcHNfY2lwaGVyX3Rlc3Qoc3Ry dWN0IGV2cF9jaXBoZXJfY3R4X3N0ICpjdHgsCi0rCQkJY29uc3Qgc3RydWN0IGV2cF9jaXBoZXJf c3QgKmNpcGhlciwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICprZXksCi0rCQkJY29uc3QgdW5z aWduZWQgY2hhciAqaXYsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LAotKwkJ CWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsCi0rCQkJaW50IGxlbik7Ci0rCi0rdm9p ZCBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKHZvaWQpOwotKwotK2NvbnN0IHN0cnVjdCBlbnZfbWRf c3QgKkZJUFNfZ2V0X2RpZ2VzdGJ5bmlkKGludCBuaWQpOwotKwotK2NvbnN0IHN0cnVjdCBldnBf Y2lwaGVyX3N0ICpGSVBTX2dldF9jaXBoZXJieW5pZChpbnQgbmlkKTsKLSsKLSsKLSsvKiBCRUdJ TiBFUlJPUiBDT0RFUyAqLwotKy8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGF1dG8gZ2VuZXJh dGVkIGJ5IHRoZSBzY3JpcHQgbWtlcnIucGwuIEFueSBjaGFuZ2VzCi0rICogbWFkZSBhZnRlciB0 aGlzIHBvaW50IG1heSBiZSBvdmVyd3JpdHRlbiB3aGVuIHRoZSBzY3JpcHQgaXMgbmV4dCBydW4u Ci0rICovCi0rdm9pZCBFUlJfbG9hZF9GSVBTX3N0cmluZ3Modm9pZCk7Ci0rCi0rLyogRXJyb3Ig Y29kZXMgZm9yIHRoZSBGSVBTIGZ1bmN0aW9ucy4gKi8KLSsKLSsvKiBGdW5jdGlvbiBjb2Rlcy4g Ki8KLSsjZGVmaW5lIEZJUFNfRl9ESF9CVUlMVElOX0dFTlBBUkFNUwkJCSAxMDAKLSsjZGVmaW5l IEZJUFNfRl9ESF9JTklUCQkJCQkgMTQ4Ci0rI2RlZmluZSBGSVBTX0ZfRFJCR19SRVNFRUQJCQkJ IDE2MgotKyNkZWZpbmUgRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOCQkJIDEwMQotKyNkZWZp bmUgRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOMgkJCSAxMDcKLSsjZGVmaW5lIEZJUFNfRl9E U0FfRE9fU0lHTgkJCQkgMTAyCi0rI2RlZmluZSBGSVBTX0ZfRFNBX0RPX1ZFUklGWQkJCQkgMTAz Ci0rI2RlZmluZSBGSVBTX0ZfRUNESF9DT01QVVRFX0tFWQkJCQkgMTYzCi0rI2RlZmluZSBGSVBT X0ZfRUNEU0FfRE9fU0lHTgkJCQkgMTY0Ci0rI2RlZmluZSBGSVBTX0ZfRUNEU0FfRE9fVkVSSUZZ CQkJCSAxNjUKLSsjZGVmaW5lIEZJUFNfRl9FQ19LRVlfR0VORVJBVEVfS0VZCQkJIDE2NgotKyNk ZWZpbmUgRklQU19GX0VWUF9DSVBIRVJJTklUX0VYCQkJIDEyNAotKyNkZWZpbmUgRklQU19GX0VW UF9ESUdFU1RJTklUX0VYCQkJIDEyNQotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfRFNBCQkJ CSAxMDQKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0RTQV9QUk5HCQkJIDE1MQotKyNkZWZp bmUgRklQU19GX0ZJUFNfQ0hFQ0tfRUMJCQkJIDE0MgotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hF Q0tfRUNfUFJORwkJCSAxNTIKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0lOQ09SRV9GSU5H RVJQUklOVAkJIDEwNQotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfUlNBCQkJCSAxMDYKLSsj ZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX1JTQV9QUk5HCQkJIDE1MAotKyNkZWZpbmUgRklQU19G X0ZJUFNfQ0lQSEVSCQkJCSAxNjAKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0NJUEhFUklOSVQJCQkJ IDE0MwotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0lQSEVSX0NUWF9DVFJMCQkJIDE2MQotKyNkZWZp bmUgRklQU19GX0ZJUFNfRElHRVNURklOQUwJCQkJIDE1OAotKyNkZWZpbmUgRklQU19GX0ZJUFNf RElHRVNUSU5JVAkJCQkgMTI4Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19ESUdFU1RVUERBVEUJCQkg MTU5Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX0JZVEVTCQkJCSAxMzEKLSsjZGVmaW5lIEZJ UFNfRl9GSVBTX0RSQkdfQ0hFQ0sJCQkJIDE0NgotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19D UFJOR19URVNUCQkJIDEzMgotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSwkJ CSAxMzYKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfR0VORVJBVEUJCQkgMTM0Ci0rI2RlZmlu ZSBGSVBTX0ZfRklQU19EUkJHX0lOSVQJCQkJIDEzNQotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJC R19JTlNUQU5USUFURQkJCSAxMzgKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfTkVXCQkJCSAx MzkKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfUkVTRUVECQkJCSAxNDAKLSsjZGVmaW5lIEZJ UFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVAkJCSAxNDEKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RT QV9DSEVDSwkJLyogdW51c2VkICovCSAxMDcKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RTQV9TSUdO X0RJR0VTVAkJCSAxNTQKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RTQV9WRVJJRllfRElHRVNUCQkJ IDE1NQotKyNkZWZpbmUgRklQU19GX0ZJUFNfR0VUX0VOVFJPUFkJCQkJIDE0NwotKyNkZWZpbmUg RklQU19GX0ZJUFNfTU9ERV9TRVQJCS8qIHVudXNlZCAqLwkgMTA4Ci0rI2RlZmluZSBGSVBTX0Zf RklQU19NT0RVTEVfTU9ERV9TRVQJCQkgMTA4Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19QS0VZX1NJ R05BVFVSRV9URVNUCQkJIDEwOQotKyNkZWZpbmUgRklQU19GX0ZJUFNfUkFORF9BREQJCQkJIDEz NwotKyNkZWZpbmUgRklQU19GX0ZJUFNfUkFORF9CWVRFUwkJCQkgMTIyCi0rI2RlZmluZSBGSVBT X0ZfRklQU19SQU5EX1BTRVVET19CWVRFUwkJCSAxNjcKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1JB TkRfU0VFRAkJCQkgMTY4Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19SQU5EX1NFVF9NRVRIT0QJCQkg MTI2Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19SQU5EX1NUQVRVUwkJCQkgMTI3Ci0rI2RlZmluZSBG SVBTX0ZfRklQU19SU0FfU0lHTl9ESUdFU1QJCQkgMTU2Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19S U0FfVkVSSUZZX0RJR0VTVAkJCSAxNTcKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FF UwkJCSAxMTAKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19DQ00JCQkgMTQ1Ci0r I2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfR0NNCQkJIDEyOQotKyNkZWZpbmUgRklQ U19GX0ZJUFNfU0VMRlRFU1RfQUVTX1hUUwkJCSAxNDQKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NF TEZURVNUX0NNQUMJCQkgMTMwCi0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9ERVMJCQkg MTExCi0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9EU0EJCQkgMTEyCi0rI2RlZmluZSBG SVBTX0ZfRklQU19TRUxGVEVTVF9FQ0RTQQkJCSAxMzMKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NF TEZURVNUX0hNQUMJCQkgMTEzCi0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9STkcJLyog dW51c2VkICovCSAxMTQKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEJCQkgMTE1 Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9YOTMxCQkJIDExNAotKyNkZWZpbmUgRklQ U19GX0ZJUFNfU0VUX1BSTkdfS0VZCQkJIDE1MwotKyNkZWZpbmUgRklQU19GX0hBU0hfRklOQUwJ CQkJIDEyMwotKyNkZWZpbmUgRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTgkJCSAxMTYKLSsjZGVm aW5lIEZJUFNfRl9SU0FfRUFZX0lOSVQJCQkJIDE0OQotKyNkZWZpbmUgRklQU19GX1JTQV9FQVlf UFJJVkFURV9ERUNSWVBUCQkJIDExNwotKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFJJVkFURV9F TkNSWVBUCQkJIDExOAotKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQJCQkg MTE5Ci0rI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVAkJCSAxMjAKLSsjZGVm aW5lIEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgJCQkgMTIxCi0rI2RlZmluZSBGSVBT X0ZfU1NMRUFZX1JBTkRfQllURVMJLyogdW51c2VkICovCSAxMjIKLSsKLSsvKiBSZWFzb24gY29k ZXMuICovCi0rI2RlZmluZSBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9FUlJPUl9VTkRFVEVDVEVE CSAxNTAKLSsjZGVmaW5lIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX1RPT19MT05HCQkgMTI1Ci0r I2RlZmluZSBGSVBTX1JfQUxSRUFEWV9JTlNUQU5USUFURUQJCQkgMTM0Ci0rI2RlZmluZSBGSVBT X1JfQVVUSEVOVElDQVRJT05fRkFJTFVSRQkJCSAxNTEKLSsjZGVmaW5lIEZJUFNfUl9DQU5OT1Rf UkVBRF9FWEUJCS8qIHVudXNlZCAqLwkgMTAzCi0rI2RlZmluZSBGSVBTX1JfQ0FOTk9UX1JFQURf RVhFX0RJR0VTVAkvKiB1bnVzZWQgKi8JIDEwNAotKyNkZWZpbmUgRklQU19SX0NPTlRSQURJQ1RJ TkdfRVZJREVOQ0UJCQkgMTE0Ci0rI2RlZmluZSBGSVBTX1JfRFJCR19OT1RfSU5JVElBTElTRUQJ CQkgMTUyCi0rI2RlZmluZSBGSVBTX1JfRFJCR19TVFVDSwkJCQkgMTAzCi0rI2RlZmluZSBGSVBT X1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVECQkJIDEwNAotKyNkZWZpbmUgRklQU19SX0VOVFJP UFlfTk9UX1JFUVVFU1RFRF9GT1JfUkVTRUVECQkgMTA1Ci0rI2RlZmluZSBGSVBTX1JfRU5UUk9Q WV9TT1VSQ0VfU1RVQ0sJCQkgMTQyCi0rI2RlZmluZSBGSVBTX1JfRVJST1JfSU5JVElBTElTSU5H X0RSQkcJCQkgMTE1Ci0rI2RlZmluZSBGSVBTX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHCQkJ IDEyNwotKyNkZWZpbmUgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfQURESVRJT05BTF9JTlBVVAkg MTI0Ci0rI2RlZmluZSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRST1BZCQkJIDEyMgotKyNk ZWZpbmUgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfTk9OQ0UJCQkgMTQwCi0rI2RlZmluZSBGSVBT X1JfRVhFX0RJR0VTVF9ET0VTX05PVF9NQVRDSCAgIC8qIHVudXNlZCAqLwkgMTA1Ci0rI2RlZmlu ZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0gJCSAxMTAKLSsjZGVmaW5lIEZJUFNf Ul9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSF9OT05QSUNfUkVMT0NBVEVEIDExMQotKyNkZWZp bmUgRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX1NFR01FTlRfQUxJQVNJTkcgMTEy Ci0rI2RlZmluZSBGSVBTX1JfRklQU19NT0RFX0FMUkVBRFlfU0VUCQkJIDEwMgotKyNkZWZpbmUg RklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVECQkJIDEwNgotKyNkZWZpbmUgRklQU19SX0ZVTkNU SU9OX0VSUk9SCQkJCSAxMTYKLSsjZGVmaW5lIEZJUFNfUl9HRU5FUkFURV9FUlJPUgkJCQkgMTM3 Ci0rI2RlZmluZSBGSVBTX1JfR0VORVJBVEVfRVJST1JfVU5ERVRFQ1RFRAkJIDExOAotKyNkZWZp bmUgRklQU19SX0lOU1RBTlRJQVRFX0VSUk9SCQkJIDExOQotKyNkZWZpbmUgRklQU19SX0lOU1VG RklDSUVOVF9TRUNVUklUWV9TVFJFTkdUSAkJIDEyMAotKyNkZWZpbmUgRklQU19SX0lOVEVSTkFM X0VSUk9SCQkJCSAxMjEKLSsjZGVmaW5lIEZJUFNfUl9JTlZBTElEX0tFWV9MRU5HVEgJCQkgMTA5 Ci0rI2RlZmluZSBGSVBTX1JfSU5WQUxJRF9QQVJBTUVURVJTCQkJIDE0NAotKyNkZWZpbmUgRklQ U19SX0lOX0VSUk9SX1NUQVRFCQkJCSAxMjMKLSsjZGVmaW5lIEZJUFNfUl9LRVlfVE9PX1NIT1JU CQkJCSAxMDgKLSsjZGVmaW5lIEZJUFNfUl9OT05DRV9FUlJPUl9VTkRFVEVDVEVECQkJIDE0OQot KyNkZWZpbmUgRklQU19SX05PTl9GSVBTX01FVEhPRAkJCQkgMTAwCi0rI2RlZmluZSBGSVBTX1Jf Tk9QUl9URVNUMV9GQUlMVVJFCQkJIDE0NQotKyNkZWZpbmUgRklQU19SX05PUFJfVEVTVDJfRkFJ TFVSRQkJCSAxNDYKLSsjZGVmaW5lIEZJUFNfUl9OT1RfSU5TVEFOVElBVEVECQkJCSAxMjYKLSsj ZGVmaW5lIEZJUFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxFRAkJCSAxMDcKLSsjZGVmaW5lIEZJUFNf Ul9QRVJTT05BTElTQVRJT05fRVJST1JfVU5ERVRFQ1RFRAkJIDEyOAotKyNkZWZpbmUgRklQU19S X1BFUlNPTkFMSVNBVElPTl9TVFJJTkdfVE9PX0xPTkcJCSAxMjkKLSsjZGVmaW5lIEZJUFNfUl9Q Uk5HX1NUUkVOR1RIX1RPT19MT1cJCQkgMTQzCi0rI2RlZmluZSBGSVBTX1JfUFJfVEVTVDFfRkFJ TFVSRQkJCQkgMTQ3Ci0rI2RlZmluZSBGSVBTX1JfUFJfVEVTVDJfRkFJTFVSRQkJCQkgMTQ4Ci0r I2RlZmluZSBGSVBTX1JfUkVRVUVTVF9MRU5HVEhfRVJST1JfVU5ERVRFQ1RFRAkJIDEzMAotKyNk ZWZpbmUgRklQU19SX1JFUVVFU1RfVE9PX0xBUkdFX0ZPUl9EUkJHCQkgMTMxCi0rI2RlZmluZSBG SVBTX1JfUkVTRUVEX0NPVU5URVJfRVJST1IJCQkgMTMyCi0rI2RlZmluZSBGSVBTX1JfUkVTRUVE X0VSUk9SCQkJCSAxMzMKLSsjZGVmaW5lIEZJUFNfUl9SU0FfREVDUllQVF9FUlJPUgkvKiB1bnVz ZWQgKi8JIDExNQotKyNkZWZpbmUgRklQU19SX1JTQV9FTkNSWVBUX0VSUk9SCS8qIHVudXNlZCAq LwkgMTE2Ci0rI2RlZmluZSBGSVBTX1JfU0VMRlRFU1RfRkFJTEVECQkJCSAxMDEKLSsjZGVmaW5l IEZJUFNfUl9TRUxGVEVTVF9GQUlMVVJFCQkJCSAxMzUKLSsjZGVmaW5lIEZJUFNfUl9TVFJFTkdU SF9FUlJPUl9VTkRFVEVDVEVECQkgMTM2Ci0rI2RlZmluZSBGSVBTX1JfVEVTVF9GQUlMVVJFCQkJ CSAxMTcKLSsjZGVmaW5lIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SCQkJIDE0MQotKyNkZWZp bmUgRklQU19SX1VOSU5TVEFOVElBVEVfWkVST0lTRV9FUlJPUgkJIDEzOAotKyNkZWZpbmUgRklQ U19SX1VOU1VQUE9SVEVEX0RSQkdfVFlQRQkJCSAxMzkKLSsjZGVmaW5lIEZJUFNfUl9VTlNVUFBP UlRFRF9QTEFURk9STQkJCSAxMTMKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rfQotKyNlbmRp ZgotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBz X2htYWNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlw c19obWFjX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2Zp cHNfaG1hY19zZWxmdGVzdC5jLmZpcHMJMjAxMi0wMi0wNyAxMTowNzowMi41NDYzOTM3NDggKzAx MDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVz dC5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTQ3MzkzNzU2ICswMTAwCi1AQCAtMCwwICsxLDEzNyBA QAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NMIFBy b2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsg KgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3Ry aWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmlu ZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0r ICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2pl Y3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0 ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsg KiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAg ICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3 cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0r ICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4g dGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wg UFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK LSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5T U0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rdHlwZWRlZiBzdHJ1Y3QgewotKwljb25zdCBFVlBfTUQg KigqYWxnKSh2b2lkKTsKLSsJY29uc3QgY2hhciAqa2V5LCAqaXY7Ci0rCXVuc2lnbmVkIGNoYXIg a2F2YWxbRVZQX01BWF9NRF9TSVpFXTsKLSt9IEhNQUNfS0FUOwotKwotK3N0YXRpYyBjb25zdCBI TUFDX0tBVCB2ZWN0b3JbXSA9IHsKLSsgICAgewlFVlBfc2hhMSwKLSsJLyogZnJvbSBodHRwOi8v Y3NyYy5uaXN0Lmdvdi9wdWJsaWNhdGlvbnMvZmlwcy9maXBzMTk4L2ZpcHMtMTk4YS5wZGYgKi8K LSsJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsJIlNhbXBsZSAjMiIsCi0rCXsgMHgwOSwweDIy LDB4ZDMsMHg0MCwweDVmLDB4YWEsMHgzZCwweDE5LAotKwkgIDB4NGYsMHg4MiwweGE0LDB4NTgs MHgzMCwweDczLDB4N2QsMHg1YywKLSsJICAweGM2LDB4YzcsMHg1ZCwweDI0IH0KLSsgICAgfSwK LSsgICAgewlFVlBfc2hhMjI0LAotKwkvKiBqdXN0IGtlZXAgZXh0ZW5kaW5nIHRoZSBhYm92ZS4u LiAqLwotKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAotKwkiU2FtcGxlICMyIiwKLSsJeyAweGRk LDB4ZWYsMHgwYSwweDQwLDB4Y2IsMHg3ZCwweDUwLDB4ZmIsCi0rCSAgMHg2ZSwweGU2LDB4Y2Us MHhhMSwweDIwLDB4YmEsMHgyNiwweGFhLAotKwkgIDB4MDgsMHhmMywweDA3LDB4NzUsMHg4Nyww eGI4LDB4YWQsMHgxYiwKLSsJICAweDhjLDB4OGQsMHgxMiwweGM3IH0KLSsgICAgfSwKLSsgICAg ewlFVlBfc2hhMjU2LAotKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAotKwkiU2FtcGxlICMyIiwK LSsJeyAweGI4LDB4ZjIsMHgwZCwweGI1LDB4NDEsMHhlYSwweDQzLDB4MDksCi0rCSAgMHhjYSww eDRlLDB4YTksMHgzOCwweDBjLDB4ZDAsMHhlOCwweDM0LAotKwkgIDB4ZjcsMHgxZiwweGJlLDB4 OTEsMHg3NCwweGEyLDB4NjEsMHgzOCwKLSsJICAweDBkLDB4YzEsMHg3ZSwweGFlLDB4NmEsMHgz NCwweDUxLDB4ZDkgfQotKyAgICB9LAotKyAgICB7CUVWUF9zaGEzODQsCi0rCSIwMTIzNDU2Nzg5 Ojs8PT4/QEFCQyIsCi0rCSJTYW1wbGUgIzIiLAotKwl7IDB4MDgsMHhiYywweGIwLDB4ZGEsMHg0 OSwweDFlLDB4ODcsMHhhZCwKLSsJICAweDlhLDB4MWQsMHg2YSwweGNlLDB4MjMsMHhjNSwweDBi LDB4ZjYsCi0rCSAgMHhiNywweDE4LDB4MDYsMHhhNSwweDc3LDB4Y2QsMHg0OSwweDA0LAotKwkg IDB4ODksMHhmMSwweGU2LDB4MjMsMHg0NCwweDUxLDB4NTEsMHg5ZiwKLSsJICAweDg1LDB4NTYs MHg4MCwweDc5LDB4MGMsMHhiZCwweDRkLDB4NTAsCi0rCSAgMHhhNCwweDVmLDB4MjksMHhlMyww eDkzLDB4ZjAsMHhlOCwweDdmIH0KLSsgICAgfSwKLSsgICAgewlFVlBfc2hhNTEyLAotKwkiMDEy MzQ1Njc4OTo7PD0+P0BBQkMiLAotKwkiU2FtcGxlICMyIiwKLSsJeyAweDgwLDB4OWQsMHg0NCww eDA1LDB4N2MsMHg1YiwweDk1LDB4NDEsCi0rCSAgMHgwNSwweGJkLDB4MDQsMHgxMywweDE2LDB4 ZGIsMHgwZiwweGFjLAotKwkgIDB4NDQsMHhkNSwweGE0LDB4ZDUsMHhkMCwweDg5LDB4MmIsMHhk MCwKLSsJICAweDRlLDB4ODYsMHg2NCwweDEyLDB4YzAsMHg5MCwweDc3LDB4NjgsCi0rCSAgMHhm MSwweDg3LDB4YjcsMHg3YywweDRmLDB4YWUsMHgyYywweDJmLAotKwkgIDB4MjEsMHhhNSwweGI1 LDB4NjUsMHg5YSwweDRmLDB4NGIsMHhhNywKLSsJICAweDQ3LDB4MDIsMHhhMywweGRlLDB4OWIs MHg1MSwweGYxLDB4NDUsCi0rCSAgMHhiZCwweDRmLDB4MjUsMHgyNywweDQyLDB4OTgsMHg5OSww eDA1IH0KLSsgICAgfSwKLSt9OwotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2htYWMoKQotKyAgICB7 Ci0rICAgIGludCBuOwotKyAgICB1bnNpZ25lZCBpbnQgICAgb3V0bGVuOwotKyAgICB1bnNpZ25l ZCBjaGFyICAgb3V0W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIGNvbnN0IEVWUF9NRCAgICptZDsK LSsgICAgY29uc3QgSE1BQ19LQVQgKnQ7Ci0rCi0rICAgIGZvcihuPTAsdD12ZWN0b3I7IG48c2l6 ZW9mKHZlY3Rvcikvc2l6ZW9mKHZlY3RvclswXSk7IG4rKyx0KyspCi0rCXsKLSsJbWQgPSAoKnQt PmFsZykoKTsKLSsJSE1BQyhtZCx0LT5rZXksc3RybGVuKHQtPmtleSksCi0rCQkoY29uc3QgdW5z aWduZWQgY2hhciAqKXQtPml2LHN0cmxlbih0LT5pdiksCi0rCQlvdXQsJm91dGxlbik7Ci0rCi0r CWlmKG1lbWNtcChvdXQsdC0+a2F2YWwsb3V0bGVuKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIo RklQU19GX0ZJUFNfU0VMRlRFU1RfSE1BQyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsJICAg IHJldHVybiAwOwotKwkgICAgfQotKwl9Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rI2VuZGlm Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfbG9jbC5oLmZp cHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX2xvY2wuaAotLS0tIG9wZW5z c2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19sb2NsLmguZmlwcwkyMDEyLTAyLTA3IDEx OjA3OjAyLjU0NzM5Mzc1NiArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2Zp cHMvZmlwc19sb2NsLmgJMjAxMi0wMi0wNyAxMTowNzowMi41NDczOTM3NTYgKzAxMDAKLUBAIC0w LDAgKzEsNzEgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUg T3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsg KiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0r ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3Ns Lm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3Bl blNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBj b250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5T U0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhv dXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVj dC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11 c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0r ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUg UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rCi0rI2lmZGVmICBfX2NwbHVzcGx1cwotK2V4dGVybiAiQyIgewotKyNlbmRpZgot KwotKyNkZWZpbmUgRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRQkzMgotKyNkZWZpbmUgZmlwc19s b2FkX2tleV9jb21wb25lbnQoa2V5LCBjb21wLCBwcmUpIFwKLSsJa2V5LT5jb21wID0gQk5fYmlu MmJuKHByZSMjXyMjY29tcCwgc2l6ZW9mKHByZSMjXyMjY29tcCksIGtleS0+Y29tcCk7IFwKLSsJ aWYgKCFrZXktPmNvbXApIFwKLSsJCWdvdG8gZXJyCi0rCi0rI2RlZmluZSBmaXBzX3Bvc3Rfc3Rh cnRlZChpZCwgc3ViaWQsIGV4KSAxCi0rI2RlZmluZSBmaXBzX3Bvc3Rfc3VjY2VzcyhpZCwgc3Vi aWQsIGV4KSAxCi0rI2RlZmluZSBmaXBzX3Bvc3RfZmFpbGVkKGlkLCBzdWJpZCwgZXgpIDEKLSsj ZGVmaW5lIGZpcHNfcG9zdF9jb3JydXB0KGlkLCBzdWJpZCwgZXgpIDEKLSsjZGVmaW5lIGZpcHNf cG9zdF9zdGF0dXMoKSAxCi0rCi0rI2lmZGVmICBfX2NwbHVzcGx1cwotK30KLSsjZW5kaWYKLSsj ZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19tZC5j LmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX21kLmMKLS0tLSBvcGVu c3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfbWQuYy5maXBzCTIwMTItMDItMDcgMTE6 MTQ6MDUuNjE5OTMyMDEyICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlw cy9maXBzX21kLmMJMjAxMi0wMi0wNyAxMToyMDo0MS41MDgyMzE5OTggKzAxMDAKLUBAIC0wLDAg KzEsMTQ1IEBACi0rLyogZmlwcy9ldnAvZmlwc19tZC5jICovCi0rLyogQ29weXJpZ2h0IChDKSAx OTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0rICogQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KLSsgKgotKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24g d3JpdHRlbgotKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KLSsgKiBUaGUg aW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBl cyBTU0wuCi0rICogCi0rICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5k IG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCi0rICogdGhlIGZvbGxvd2luZyBjb25kaXRp b25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXBwbHkg dG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJT QSwKLSsgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBU aGUgU1NMIGRvY3VtZW50YXRpb24KLSsgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9u IGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCi0rICogZXhjZXB0IHRoYXQg dGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICogCi0rICog Q29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0 IG5vdGljZXMgaW4KLSsgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0rICogSWYg dGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBn aXZlbiBhdHRyaWJ1dGlvbgotKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBs aWJyYXJ5IHVzZWQuCi0rICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1l c3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0rICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5l IG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCi0rICogCi0rICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAq IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug b2YgdGhpcyBzb2Z0d2FyZQotKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25v d2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMg c29mdHdhcmUgd3JpdHRlbiBieQotKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNv bSkiCi0rICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0 aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0rICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNy eXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCi0rICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRv d3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0rICogICAg dGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFu IGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgotKyAqIAotKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0rICog QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSsgKiBBUkUgRElTQ0xBSU1FRC4g IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQot KyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMCi0rICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSsgKiBPUiBTRVJWSUNF UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSsgKiBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ QklMSVRZIE9GCi0rICogU1VDSCBEQU1BR0UuCi0rICogCi0rICogVGhlIGxpY2VuY2UgYW5kIGRp c3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IK LSsgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhp cyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKLSsgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVy IGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0rICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNl bmNlLl0KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAx IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0r ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAg dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRl cmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJl IG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9w ZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5k ICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9y IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAq ICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxl YXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1 LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAi T3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMg d2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQ cm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2 ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6 Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK LSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg U0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElB QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBO T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF UzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZ IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqCi0r ICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBi eSBFcmljIFlvdW5nCi0rICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5j b20pLgotKyAqCi0rICovCi0rCi0rLyogTWluaW1hbCBzdGFuZGFsb25lIEZJUFMgdmVyc2lvbnMg b2YgRGlnZXN0IG9wZXJhdGlvbnMgKi8KLSsKLSsjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQotKwot KyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9vYmplY3RzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKwotK2NvbnN0IEVWUF9N RCAqRklQU19nZXRfZGlnZXN0YnluaWQoaW50IG5pZCkKLSsJewotKwlzd2l0Y2ggKG5pZCkKLSsJ CXsKLSsJCWNhc2UgTklEX3NoYTE6Ci0rCQlyZXR1cm4gRVZQX3NoYTEoKTsKLSsKLSsJCWNhc2Ug TklEX3NoYTIyNDoKLSsJCXJldHVybiBFVlBfc2hhMjI0KCk7Ci0rCi0rCQljYXNlIE5JRF9zaGEy NTY6Ci0rCQlyZXR1cm4gRVZQX3NoYTI1NigpOwotKwotKwkJY2FzZSBOSURfc2hhMzg0OgotKwkJ cmV0dXJuIEVWUF9zaGEzODQoKTsKLSsKLSsJCWNhc2UgTklEX3NoYTUxMjoKLSsJCXJldHVybiBF VlBfc2hhNTEyKCk7Ci0rCi0rCQlkZWZhdWx0OgotKwkJcmV0dXJuIE5VTEw7Ci0rCQl9Ci0rCX0K LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMuZmlw cyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jCi0tLS0gb3BlbnNz bC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYy5maXBzCTIwMTItMDItMDcgMTE6 MDc6MDIuNTQ3MzkzNzU2ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlw cy9maXBzX3Bvc3QuYwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0NzM5Mzc1NiArMDEwMAotQEAgLTAs MCArMSwyMDUgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUg T3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsg KiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0r ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3Ns Lm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3Bl blNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBj b250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5T U0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhv dXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVj dC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11 c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0r ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUg UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjZGVmaW5lIE9QRU5T U0xfRklQU0FQSQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxsaW1pdHMuaD4K LSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rLyogUG93ZXIgb24gc2VsZiB0ZXN0IChQT1NU KSBzdXBwb3J0IGZ1bmN0aW9ucyAqLwotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsj aW5jbHVkZSAiZmlwc19sb2NsLmgiCi0rCi0rLyogUnVuIGFsbCBzZWxmdGVzdHMgKi8KLStpbnQg RklQU19zZWxmdGVzdCh2b2lkKQotKwl7Ci0rCWludCBydiA9IDE7Ci0rCWlmICghRklQU19zZWxm dGVzdF9kcmJnKCkpCi0rCQlydiA9IDA7Ci0rCWlmICghRklQU19zZWxmdGVzdF94OTMxKCkpCi0r CQlydiA9IDA7Ci0rICAgIAlpZiAoIUZJUFNfc2VsZnRlc3Rfc2hhMSgpKQotKwkJcnYgPSAwOwot KyAgICAJaWYgKCFGSVBTX3NlbGZ0ZXN0X3NoYTIoKSkKLSsJCXJ2ID0gMDsKLSsJaWYgKCFGSVBT X3NlbGZ0ZXN0X2htYWMoKSkKLSsJCXJ2ID0gMDsKLSsJaWYgKCFGSVBTX3NlbGZ0ZXN0X2NtYWMo KSkKLSsJCXJ2ID0gMDsKLSsJaWYgKCFGSVBTX3NlbGZ0ZXN0X2FlcygpKQotKwkJcnYgPSAwOwot KwlpZiAoIUZJUFNfc2VsZnRlc3RfYWVzX2NjbSgpKQotKwkJcnYgPSAwOwotKwlpZiAoIUZJUFNf c2VsZnRlc3RfYWVzX2djbSgpKQotKwkJcnYgPSAwOwotKwlpZiAoIUZJUFNfc2VsZnRlc3RfYWVz X3h0cygpKQotKwkJcnYgPSAwOwotKwlpZiAoIUZJUFNfc2VsZnRlc3RfZGVzKCkpCi0rCQlydiA9 IDA7Ci0rCWlmICghRklQU19zZWxmdGVzdF9yc2EoKSkKLSsJCXJ2ID0gMDsKLSsJaWYgKCFGSVBT X3NlbGZ0ZXN0X2RzYSgpKQotKwkJcnYgPSAwOwotKwlyZXR1cm4gcnY7Ci0rCX0KLSsKLSsvKiBH ZW5lcmFsaXplZCBwdWJsaWMga2V5IHRlc3Qgcm91dGluZS4gU2lnbnMgYW5kIHZlcmlmaWVzIHRo ZSBkYXRhCi0rICogc3VwcGxpZWQgaW4gdGJzIHVzaW5nIG1lc2FnZSBkaWdlc3QgbWQgYW5kIHNl dHRpbmcgb3B0aW9uIGRpZ2VzdAotKyAqIGZsYWdzIG1kX2ZsYWdzLiBJZiB0aGUgJ2thdCcgcGFy YW1ldGVyIGlzIG5vdCBOVUxMIGl0IHdpbGwKLSsgKiBhZGRpdGlvbmFsbHkgY2hlY2sgdGhlIHNp Z25hdHVyZSBtYXRjaGVzIGl0OiBhIGtub3duIGFuc3dlciB0ZXN0Ci0rICogVGhlIHN0cmluZyAi ZmFpbF9zdHIiIGlzIHVzZWQgZm9yIGlkZW50aWZpY2F0aW9uIHB1cnBvc2VzIGluIGNhc2UKLSsg KiBvZiBmYWlsdXJlLiBJZiAicGtleSIgaXMgTlVMTCBqdXN0IHBlcmZvcm0gYSBtZXNzYWdlIGRp Z2VzdCBjaGVjay4KLSsgKi8KLSsKLStpbnQgZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KEVWUF9Q S0VZICpwa2V5LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRicywgaW50IHRic2xlbiwKLSsJ CQljb25zdCB1bnNpZ25lZCBjaGFyICprYXQsIHVuc2lnbmVkIGludCBrYXRsZW4sCi0rCQkJY29u c3QgRVZQX01EICpkaWdlc3QsIHVuc2lnbmVkIGludCBtZF9mbGFncywKLSsJCQljb25zdCBjaGFy ICpmYWlsX3N0cikKLSsJewkKLSsJaW50IHJldCA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgc2lndG1w WzI1Nl0sICpzaWcgPSBzaWd0bXA7Ci0rCXVuc2lnbmVkIGludCBzaWdsZW47Ci0rCUVWUF9NRF9D VFggbWN0eDsKLSsJRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKLSsKLSsJaWYgKGRpZ2VzdCA9PSBO VUxMKQotKwkJZGlnZXN0ID0gRVZQX3NoYTI1NigpOwotKwotKwlpZiAoKHBrZXktPnR5cGUgPT0g RVZQX1BLRVlfUlNBKQotKwkJJiYgKFJTQV9zaXplKHBrZXktPnBrZXkucnNhKSA+IHNpemVvZihz aWd0bXApKSkKLSsJCXsKLSsJCXNpZyA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHBrZXktPnBr ZXkucnNhKSk7Ci0rCQlpZiAoIXNpZykKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfRklQU19Q S0VZX1NJR05BVFVSRV9URVNULEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLSsJCQlyZXR1cm4gMDsK LSsJCQl9Ci0rCQl9Ci0rCi0rCWlmICh0YnNsZW4gPT0gLTEpCi0rCQl0YnNsZW4gPSBzdHJsZW4o KGNoYXIgKil0YnMpOwotKwotKwlpZiAobWRfZmxhZ3MpCi0rCQlFVlBfTURfQ1RYX3NldF9mbGFn cygmbWN0eCwgbWRfZmxhZ3MpOwotKwotKwlpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgZGln ZXN0LCBOVUxMKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCWlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgs IHRicywgdGJzbGVuKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCWlmICghRVZQX1NpZ25GaW5hbCgmbWN0 eCwgc2lnLCAmc2lnbGVuLCBwa2V5KSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCWlmIChrYXQgJiYg KChzaWdsZW4gIT0ga2F0bGVuKSB8fCBtZW1jbXAoa2F0LCBzaWcsIGthdGxlbikpKQotKwkJZ290 byBlcnJvcjsKLSsKLSsJaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgZGlnZXN0LCBOVUxM KSkKLSsJCWdvdG8gZXJyb3I7Ci0rCWlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgdGJzLCB0 YnNsZW4pKQotKwkJZ290byBlcnJvcjsKLSsJcmV0ID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBz aWcsIHNpZ2xlbiwgcGtleSk7Ci0rCi0rCWVycm9yOgotKwlpZiAoc2lnICE9IHNpZ3RtcCkKLSsJ CU9QRU5TU0xfZnJlZShzaWcpOwotKwlFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwotKwlpZiAo cmV0ICE9IDEpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RF U1QsRklQU19SX1RFU1RfRkFJTFVSRSk7Ci0rCQlpZiAoZmFpbF9zdHIpCi0rCQkJRVJSX2FkZF9l cnJvcl9kYXRhKDIsICJUeXBlPSIsIGZhaWxfc3RyKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwly ZXR1cm4gMTsKLSsJfQotKwotKy8qIEdlbmVyYWxpemVkIHN5bW1ldHJpYyBjaXBoZXIgdGVzdCBy b3V0aW5lLiBFbmNyeXB0IGRhdGEsIHZlcmlmeSByZXN1bHQKLSsgKiBhZ2FpbnN0IGtub3duIGFu c3dlciwgZGVjcnlwdCBhbmQgY29tcGFyZSB3aXRoIG9yaWdpbmFsIHBsYWludGV4dC4KLSsgKi8K LSsKLStpbnQgZmlwc19jaXBoZXJfdGVzdChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCBFVlBf Q0lQSEVSICpjaXBoZXIsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotKwkJCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKml2LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwK LSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0LAotKwkJCWludCBsZW4pCi0rCXsK LSsJdW5zaWduZWQgY2hhciBwbHRtcFtGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFXTsKLSsJdW5z aWduZWQgY2hhciBjaXRtcFtGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFXTsKLSsKLSsJT1BFTlNT TF9hc3NlcnQobGVuIDw9IEZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkUpOwotKwltZW1zZXQocGx0 bXAsIDAsIEZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkUpOwotKwltZW1zZXQoY2l0bXAsIDAsIEZJ UFNfTUFYX0NJUEhFUl9URVNUX1NJWkUpOwotKwotKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4 LCBjaXBoZXIsIE5VTEwsIGtleSwgaXYsIDEpIDw9IDApCi0rCQlyZXR1cm4gMDsKLSsJaWYgKEVW UF9DaXBoZXIoY3R4LCBjaXRtcCwgcGxhaW50ZXh0LCBsZW4pIDw9IDApCi0rCQlyZXR1cm4gMDsK LSsJaWYgKG1lbWNtcChjaXRtcCwgY2lwaGVydGV4dCwgbGVuKSkKLSsJCXJldHVybiAwOwotKwlp ZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGtleSwgaXYsIDApIDw9IDAp Ci0rCQlyZXR1cm4gMDsKLSsJaWYgKEVWUF9DaXBoZXIoY3R4LCBwbHRtcCwgY2l0bXAsIGxlbikg PD0gMCkKLSsJCXJldHVybiAwOwotKwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIGxlbikp Ci0rCQlyZXR1cm4gMDsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMuZmlwcyBvcGVuc3NsLTEuMC4x LWJldGEyL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9j cnlwdG8vZmlwcy9maXBzX3JhbmQuYy5maXBzCTIwMTItMDItMDcgMTE6MDc6MDIuNTQ3MzkzNzU2 ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYwky MDEyLTAyLTA3IDExOjA3OjAyLjU0NzM5Mzc1NiArMDEwMAotQEAgLTAsMCArMSw0NTcgQEAKLSsv KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0 LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRp b24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh dHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZv bGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0r ICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBt dXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAg b3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9y IG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRl bgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYu IFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBm b2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki Ci0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pF Q1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICog UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBS T0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsvKgotKyAqIFRoaXMgaXMgYSBGSVBTIGFwcHJv dmVkIEFFUyBQUk5HIGJhc2VkIG9uIEFOU0kgWDkuMzEgQS4yLjQuCi0rICovCi0rI2luY2x1ZGUg PG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgImVfb3MuaCIKLSsKLSsvKiBJZiB3ZSBkb24n dCBkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCwgc3RydWN0IHRpbWV2YWwgd29uJ3QKLSsg ICBiZSBkZWZpbmVkIGFuZCBnZXR0aW1lb2ZkYXkoKSB3b24ndCBiZSBkZWNsYXJlZCB3aXRoIHN0 cmljdCBjb21waWxlcnMKLSsgICBsaWtlIERFQyBDIGluIEFOU0kgQyBtb2RlLiAgKi8KLSsjaWZu ZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKLSsjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5E RUQgMQotKyNlbmRpZgotKwotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9hZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9maXBzX3JhbmQuaD4KLSsjaWYgIShkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjMyKSB8fCBk ZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpKQotKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSsj ZW5kaWYKLSsjaWYgZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktTKQotKyMgaW5jbHVkZSA8dGlt ZS5oPgotKyNlbmRpZgotKyNpbmNsdWRlIDxhc3NlcnQuaD4KLSsjaWZuZGVmIE9QRU5TU0xfU1lT X1dJTjMyCi0rIyBpZmRlZiBPUEVOU1NMX1VOSVNURAotKyMgIGluY2x1ZGUgT1BFTlNTTF9VTklT VEQKLSsjIGVsc2UKLSsjICBpbmNsdWRlIDx1bmlzdGQuaD4KLSsjIGVuZGlmCi0rI2VuZGlmCi0r I2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVk ZSAiZmlwc19sb2NsLmgiCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3ZvaWQgKk9QRU5T U0xfc3RkZXJyKHZvaWQpOwotKwotKyNkZWZpbmUgQUVTX0JMT0NLX0xFTkdUSAkxNgotKwotKwot Ky8qIEFFUyBGSVBTIFBSTkcgaW1wbGVtZW50YXRpb24gKi8KLSsKLSt0eXBlZGVmIHN0cnVjdCAK LSsJewotKwlpbnQgc2VlZGVkOwotKwlpbnQga2V5ZWQ7Ci0rCWludCB0ZXN0X21vZGU7Ci0rCWlu dCBzZWNvbmQ7Ci0rCWludCBlcnJvcjsKLSsJdW5zaWduZWQgbG9uZyBjb3VudGVyOwotKwlBRVNf S0VZIGtzOwotKwlpbnQgdnBvczsKLSsJLyogVGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGtleSBpZiBp dCBlcXVhbHMgc2VlZCBsZW5ndGggKi8KLSsJdW5zaWduZWQgY2hhciB0bXBfa2V5W0FFU19CTE9D S19MRU5HVEhdOwotKwl1bnNpZ25lZCBjaGFyIFZbQUVTX0JMT0NLX0xFTkdUSF07Ci0rCXVuc2ln bmVkIGNoYXIgRFRbQUVTX0JMT0NLX0xFTkdUSF07Ci0rCXVuc2lnbmVkIGNoYXIgbGFzdFtBRVNf QkxPQ0tfTEVOR1RIXTsKLSsJfSBGSVBTX1BSTkdfQ1RYOwotKwotK3N0YXRpYyBGSVBTX1BSTkdf Q1RYIHNjdHg7Ci0rCi0rc3RhdGljIGludCBmaXBzX3BybmdfZmFpbCA9IDA7Ci0rCi0rdm9pZCBG SVBTX3g5MzFfc3RpY2soaW50IG9ub2ZmKQotKwl7Ci0rCWZpcHNfcHJuZ19mYWlsID0gb25vZmY7 Ci0rCX0KLSsKLSt2b2lkIEZJUFNfcm5nX3N0aWNrKHZvaWQpCi0rCXsKLSsJRklQU194OTMxX3N0 aWNrKDEpOwotKwl9Ci0rCi0rc3RhdGljIHZvaWQgZmlwc19yYW5kX3BybmdfcmVzZXQoRklQU19Q Uk5HX0NUWCAqY3R4KQotKwl7Ci0rCWN0eC0+c2VlZGVkID0gMDsKLSsJY3R4LT5rZXllZCA9IDA7 Ci0rCWN0eC0+dGVzdF9tb2RlID0gMDsKLSsJY3R4LT5jb3VudGVyID0gMDsKLSsJY3R4LT5zZWNv bmQgPSAwOwotKwljdHgtPmVycm9yID0gMDsKLSsJY3R4LT52cG9zID0gMDsKLSsJT1BFTlNTTF9j bGVhbnNlKGN0eC0+ViwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCU9QRU5TU0xfY2xlYW5zZSgmY3R4 LT5rcywgc2l6ZW9mKEFFU19LRVkpKTsKLSsJfQotKwkKLSsKLStzdGF0aWMgaW50IGZpcHNfc2V0 X3Bybmdfa2V5KEZJUFNfUFJOR19DVFggKmN0eCwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICpr ZXksIHVuc2lnbmVkIGludCBrZXlsZW4pCi0rCXsKLSsJaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVk KCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFVF9QUk5HX0tFWSwgRklQU19SX1NF TEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYgKGtleWxlbiAhPSAxNiAm JiBrZXlsZW4gIT0gMjQgJiYga2V5bGVuICE9IDMyKQotKwkJewotKwkJLyogZXJyb3I6IGludmFs aWQga2V5IHNpemUgKi8KLSsJCXJldHVybiAwOwotKwkJfQotKwlBRVNfc2V0X2VuY3J5cHRfa2V5 KGtleSwga2V5bGVuIDw8IDMsICZjdHgtPmtzKTsKLSsJaWYgKGtleWxlbiA9PSAxNikKLSsJCXsK LSsJCW1lbWNweShjdHgtPnRtcF9rZXksIGtleSwgMTYpOwotKwkJY3R4LT5rZXllZCA9IDI7Ci0r CQl9Ci0rCWVsc2UKLSsJCWN0eC0+a2V5ZWQgPSAxOwotKwljdHgtPnNlZWRlZCA9IDA7Ci0rCWN0 eC0+c2Vjb25kID0gMDsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGZpcHNfc2V0 X3Bybmdfc2VlZChGSVBTX1BSTkdfQ1RYICpjdHgsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAq c2VlZCwgdW5zaWduZWQgaW50IHNlZWRsZW4pCi0rCXsKLSsJdW5zaWduZWQgaW50IGk7Ci0rCWlm ICghY3R4LT5rZXllZCkKLSsJCXJldHVybiAwOwotKwkvKiBJbiB0ZXN0IG1vZGUgc2VlZCBpcyBq dXN0IHN1cHBsaWVkIGRhdGEgKi8KLSsJaWYgKGN0eC0+dGVzdF9tb2RlKQotKwkJewotKwkJaWYg KHNlZWRsZW4gIT0gQUVTX0JMT0NLX0xFTkdUSCkKLSsJCQlyZXR1cm4gMDsKLSsJCW1lbWNweShj dHgtPlYsIHNlZWQsIEFFU19CTE9DS19MRU5HVEgpOwotKwkJY3R4LT5zZWVkZWQgPSAxOwotKwkJ cmV0dXJuIDE7Ci0rCQl9Ci0rCS8qIE91dHNpZGUgdGVzdCBtb2RlIFhPUiBzdXBwbGllZCBkYXRh IHdpdGggZXhpc3Rpbmcgc2VlZCAqLwotKwlmb3IgKGkgPSAwOyBpIDwgc2VlZGxlbjsgaSsrKQot KwkJewotKwkJY3R4LT5WW2N0eC0+dnBvcysrXSBePSBzZWVkW2ldOwotKwkJaWYgKGN0eC0+dnBv cyA9PSBBRVNfQkxPQ0tfTEVOR1RIKQotKwkJCXsKLSsJCQljdHgtPnZwb3MgPSAwOwotKwkJCS8q IFNwZWNpYWwgY2FzZSBpZiBmaXJzdCBzZWVkIGFuZCBrZXkgbGVuZ3RoIGVxdWFscwotKyAJCQkg KiBibG9jayBzaXplIGNoZWNrIGtleSBhbmQgc2VlZCBkbyBub3QgbWF0Y2guCi0rIAkJCSAqLyAK LSsJCQlpZiAoY3R4LT5rZXllZCA9PSAyKQotKwkJCQl7Ci0rCQkJCWlmICghbWVtY21wKGN0eC0+ dG1wX2tleSwgY3R4LT5WLCAxNikpCi0rCQkJCQl7Ci0rCQkJCQlSQU5EZXJyKFJBTkRfRl9GSVBT X1NFVF9QUk5HX1NFRUQsCi0rCQkJCQkJUkFORF9SX1BSTkdfU0VFRF9NVVNUX05PVF9NQVRDSF9L RVkpOwotKwkJCQkJcmV0dXJuIDA7Ci0rCQkJCQl9Ci0rCQkJCU9QRU5TU0xfY2xlYW5zZShjdHgt PnRtcF9rZXksIDE2KTsKLSsJCQkJY3R4LT5rZXllZCA9IDE7Ci0rCQkJCX0KLSsJCQljdHgtPnNl ZWRlZCA9IDE7Ci0rCQkJfQotKwkJfQotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQg Zmlwc19zZXRfdGVzdF9tb2RlKEZJUFNfUFJOR19DVFggKmN0eCkKLSsJewotKwlpZiAoY3R4LT5r ZXllZCkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9ERSxSQU5EX1Jf UFJOR19LRVlFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJY3R4LT50ZXN0X21vZGUgPSAxOwot KwlyZXR1cm4gMTsKLSsJfQotKwotK2ludCBGSVBTX3g5MzFfdGVzdF9tb2RlKHZvaWQpCi0rCXsK LSsJcmV0dXJuIGZpcHNfc2V0X3Rlc3RfbW9kZSgmc2N0eCk7Ci0rCX0KLSsKLStpbnQgRklQU19y YW5kX3Rlc3RfbW9kZSh2b2lkKQotKwl7Ci0rCXJldHVybiBmaXBzX3NldF90ZXN0X21vZGUoJnNj dHgpOwotKwl9Ci0rCi0rCi0raW50IEZJUFNfeDkzMV9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQp Ci0rCXsKLSsJaWYgKCFzY3R4LnRlc3RfbW9kZSkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJ UFNfWDkzMV9TRVRfRFQsUkFORF9SX05PVF9JTl9URVNUX01PREUpOwotKwkJcmV0dXJuIDA7Ci0r CQl9Ci0rCW1lbWNweShzY3R4LkRULCBkdCwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCXJldHVybiAx OwotKwl9Ci0rCi0raW50IEZJUFNfcmFuZF9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpCi0rCXsK LSsJaWYgKCFzY3R4LnRlc3RfbW9kZSkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFO RF9TRVRfRFQsUkFORF9SX05PVF9JTl9URVNUX01PREUpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0r CW1lbWNweShzY3R4LkRULCBkdCwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCXJldHVybiAxOwotKwl9 Ci0rCi0rdm9pZCBGSVBTX2dldF90aW1ldmVjKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQg bG9uZyAqcGN0cikKLSsJewotKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgotKwlGSUxFVElNRSBm dDsKLSsjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpCi0rICAgICAgICBzdHJ1Y3Qg dGltZXNwZWMgdHM7Ci0rI2Vsc2UKLSsJc3RydWN0IHRpbWV2YWwgdHY7Ci0rI2VuZGlmCi0rCi0r I2lmbmRlZiBHRVRQSURfSVNfTUVBTklOR0xFU1MKLSsJdW5zaWduZWQgbG9uZyBwaWQ7Ci0rI2Vu ZGlmCi0rCi0rI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rCUdldFN5c3RlbVRpbWVBc0ZpbGVU aW1lKCZmdCk7Ci0rCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAoZnQuZHdIaWdoRGF0ZVRpbWUg JiAweGZmKTsKLSsJYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0ZVRpbWUg Pj4gOCkgJiAweGZmKTsKLSsJYnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0 ZVRpbWUgPj4gMTYpICYgMHhmZik7Ci0rCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3 SGlnaERhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOwotKwlidWZbNF0gPSAodW5zaWduZWQgY2hhcikg KGZ0LmR3TG93RGF0ZVRpbWUgJiAweGZmKTsKLSsJYnVmWzVdID0gKHVuc2lnbmVkIGNoYXIpICgo ZnQuZHdMb3dEYXRlVGltZSA+PiA4KSAmIDB4ZmYpOwotKwlidWZbNl0gPSAodW5zaWduZWQgY2hh cikgKChmdC5kd0xvd0RhdGVUaW1lID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbN10gPSAodW5zaWdu ZWQgY2hhcikgKChmdC5kd0xvd0RhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOwotKyNlbGlmIGRlZmlu ZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykKLSsJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwg JnRzKTsKLSsJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpICh0cy50dl9zZWMgJiAweGZmKTsKLSsJ YnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfc2VjID4+IDgpICYgMHhmZik7Ci0rCWJ1 ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHRzLnR2X3NlYyA+PiAxNikgJiAweGZmKTsKLSsJYnVm WzNdID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfc2VjID4+IDI0KSAmIDB4ZmYpOwotKwlidWZb NF0gPSAodW5zaWduZWQgY2hhcikgKHRzLnR2X25zZWMgJiAweGZmKTsKLSsJYnVmWzVdID0gKHVu c2lnbmVkIGNoYXIpICgodHMudHZfbnNlYyA+PiA4KSAmIDB4ZmYpOwotKwlidWZbNl0gPSAodW5z aWduZWQgY2hhcikgKCh0cy50dl9uc2VjID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbN10gPSAodW5z aWduZWQgY2hhcikgKCh0cy50dl9uc2VjID4+IDI0KSAmIDB4ZmYpOwotKyNlbHNlCi0rCWdldHRp bWVvZmRheSgmdHYsTlVMTCk7Ci0rCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAodHYudHZfc2Vj ICYgMHhmZik7Ci0rCWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiA4KSAm IDB4ZmYpOwotKwlidWZbMl0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl9zZWMgPj4gMTYpICYg MHhmZik7Ci0rCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiAyNCkgJiAw eGZmKTsKLSsJYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpICh0di50dl91c2VjICYgMHhmZik7Ci0r CWJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4gOCkgJiAweGZmKTsKLSsJ YnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+PiAxNikgJiAweGZmKTsKLSsJ YnVmWzddID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+PiAyNCkgJiAweGZmKTsKLSsj ZW5kaWYKLSsJYnVmWzhdID0gKHVuc2lnbmVkIGNoYXIpICgqcGN0ciAmIDB4ZmYpOwotKwlidWZb OV0gPSAodW5zaWduZWQgY2hhcikgKCgqcGN0ciA+PiA4KSAmIDB4ZmYpOwotKwlidWZbMTBdID0g KHVuc2lnbmVkIGNoYXIpICgoKnBjdHIgPj4gMTYpICYgMHhmZik7Ci0rCWJ1ZlsxMV0gPSAodW5z aWduZWQgY2hhcikgKCgqcGN0ciA+PiAyNCkgJiAweGZmKTsKLSsKLSsJKCpwY3RyKSsrOwotKwot KwotKyNpZm5kZWYgR0VUUElEX0lTX01FQU5JTkdMRVNTCi0rCXBpZD0odW5zaWduZWQgbG9uZyln ZXRwaWQoKTsKLSsJYnVmWzEyXSA9ICh1bnNpZ25lZCBjaGFyKSAocGlkICYgMHhmZik7Ci0rCWJ1 ZlsxM10gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4gOCkgJiAweGZmKTsKLSsJYnVmWzE0XSA9 ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiAxNikgJiAweGZmKTsKLSsJYnVmWzE1XSA9ICh1bnNp Z25lZCBjaGFyKSAoKHBpZCA+PiAyNCkgJiAweGZmKTsKLSsjZW5kaWYKLSsgICAgfQotKwotK3N0 YXRpYyBpbnQgZmlwc19yYW5kKEZJUFNfUFJOR19DVFggKmN0eCwKLSsJCQl1bnNpZ25lZCBjaGFy ICpvdXQsIHVuc2lnbmVkIGludCBvdXRsZW4pCi0rCXsKLSsJdW5zaWduZWQgY2hhciBSW0FFU19C TE9DS19MRU5HVEhdLCBJW0FFU19CTE9DS19MRU5HVEhdOwotKwl1bnNpZ25lZCBjaGFyIHRtcFtB RVNfQkxPQ0tfTEVOR1RIXTsKLSsJaW50IGk7Ci0rCWlmIChjdHgtPmVycm9yKQotKwkJewotKwkJ UkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9QUk5HX0VSUk9SKTsKLSsJCXJldHVybiAw OwotKwkJfQotKwlpZiAoIWN0eC0+a2V5ZWQpCi0rCQl7Ci0rCQlSQU5EZXJyKFJBTkRfRl9GSVBT X1JBTkQsUkFORF9SX05PX0tFWV9TRVQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWlmICghY3R4 LT5zZWVkZWQpCi0rCQl7Ci0rCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX1BSTkdf Tk9UX1NFRURFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJZm9yICg7OykKLSsJCXsKLSsJCWlm ICghY3R4LT50ZXN0X21vZGUpCi0rCQkJRklQU19nZXRfdGltZXZlYyhjdHgtPkRULCAmY3R4LT5j b3VudGVyKTsKLSsJCUFFU19lbmNyeXB0KGN0eC0+RFQsIEksICZjdHgtPmtzKTsKLSsJCWZvciAo aSA9IDA7IGkgPCBBRVNfQkxPQ0tfTEVOR1RIOyBpKyspCi0rCQkJdG1wW2ldID0gSVtpXSBeIGN0 eC0+VltpXTsKLSsJCUFFU19lbmNyeXB0KHRtcCwgUiwgJmN0eC0+a3MpOwotKwkJZm9yIChpID0g MDsgaSA8IEFFU19CTE9DS19MRU5HVEg7IGkrKykKLSsJCQl0bXBbaV0gPSBSW2ldIF4gSVtpXTsK LSsJCUFFU19lbmNyeXB0KHRtcCwgY3R4LT5WLCAmY3R4LT5rcyk7Ci0rCQkvKiBDb250aW51b3Vz IFBSTkcgdGVzdCAqLwotKwkJaWYgKGN0eC0+c2Vjb25kKQotKwkJCXsKLSsJCQlpZiAoZmlwc19w cm5nX2ZhaWwpCi0rCQkJCW1lbWNweShjdHgtPmxhc3QsIFIsIEFFU19CTE9DS19MRU5HVEgpOwot KwkJCWlmICghbWVtY21wKFIsIGN0eC0+bGFzdCwgQUVTX0JMT0NLX0xFTkdUSCkpCi0rCQkJCXsK LSsJICAgIAkJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19TVFVDSyk7Ci0r CQkJCWN0eC0+ZXJyb3IgPSAxOwotKwkJCQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7Ci0rCQkJ CXJldHVybiAwOwotKwkJCQl9Ci0rCQkJfQotKwkJbWVtY3B5KGN0eC0+bGFzdCwgUiwgQUVTX0JM T0NLX0xFTkdUSCk7Ci0rCQlpZiAoIWN0eC0+c2Vjb25kKQotKwkJCXsKLSsJCQljdHgtPnNlY29u ZCA9IDE7Ci0rCQkJaWYgKCFjdHgtPnRlc3RfbW9kZSkKLSsJCQkJY29udGludWU7Ci0rCQkJfQot KwotKwkJaWYgKG91dGxlbiA8PSBBRVNfQkxPQ0tfTEVOR1RIKQotKwkJCXsKLSsJCQltZW1jcHko b3V0LCBSLCBvdXRsZW4pOwotKwkJCWJyZWFrOwotKwkJCX0KLSsKLSsJCW1lbWNweShvdXQsIFIs IEFFU19CTE9DS19MRU5HVEgpOwotKwkJb3V0ICs9IEFFU19CTE9DS19MRU5HVEg7Ci0rCQlvdXRs ZW4gLT0gQUVTX0JMT0NLX0xFTkdUSDsKLSsJCX0KLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsKLStp bnQgRklQU194OTMxX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVu KQotKwl7Ci0rCWludCByZXQ7Ci0rCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0r CXJldCA9IGZpcHNfc2V0X3Bybmdfa2V5KCZzY3R4LCBrZXksIGtleWxlbik7Ci0rCUNSWVBUT193 X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK2ludCBG SVBTX3JhbmRfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIEZJUFNfUkFORF9TSVpF X1Qga2V5bGVuKQotKwl7Ci0rCXJldHVybiBGSVBTX3g5MzFfc2V0X2tleShrZXksIGtleWxlbik7 Ci0rCX0KLSsKLStpbnQgRklQU194OTMxX3NlZWQoY29uc3Qgdm9pZCAqc2VlZCwgaW50IHNlZWRs ZW4pCi0rCXsKLSsJaW50IHJldDsKLSsJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsK LSsJcmV0ID0gZmlwc19zZXRfcHJuZ19zZWVkKCZzY3R4LCBzZWVkLCBzZWVkbGVuKTsKLSsJQ1JZ UFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0r Ci0raW50IEZJUFNfeDkzMV9ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIGludCBjb3VudCkKLSsJ ewotKwlpbnQgcmV0OwotKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXQg PSBmaXBzX3JhbmQoJnNjdHgsIG91dCwgY291bnQpOwotKwlDUllQVE9fd191bmxvY2soQ1JZUFRP X0xPQ0tfUkFORCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStpbnQgRklQU194OTMxX3N0YXR1 cyh2b2lkKQotKwl7Ci0rCWludCByZXQ7Ci0rCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfUkFO RCk7Ci0rCXJldCA9IHNjdHguc2VlZGVkOwotKwlDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tf UkFORCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLSt2b2lkIEZJUFNfeDkzMV9yZXNldCh2b2lk KQotKwl7Ci0rCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCWZpcHNfcmFuZF9w cm5nX3Jlc2V0KCZzY3R4KTsKLSsJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwot Kwl9Ci0rCi0rc3RhdGljIGludCBmaXBzX2RvX3JhbmRfc2VlZChjb25zdCB2b2lkICpzZWVkLCBp bnQgc2VlZGxlbikKLSsJewotKwlGSVBTX3g5MzFfc2VlZChzZWVkLCBzZWVkbGVuKTsKLSsJcmV0 dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGZpcHNfZG9fcmFuZF9hZGQoY29uc3Qgdm9pZCAq c2VlZCwgaW50IHNlZWRsZW4sCi0rCQkJCQlkb3VibGUgYWRkX2VudHJvcHkpCi0rCXsKLSsJRklQ U194OTMxX3NlZWQoc2VlZCwgc2VlZGxlbik7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGlj IGNvbnN0IFJBTkRfTUVUSE9EIHJhbmRfeDkzMV9tZXRoPQotKyAgICB7Ci0rICAgIGZpcHNfZG9f cmFuZF9zZWVkLAotKyAgICBGSVBTX3g5MzFfYnl0ZXMsCi0rICAgIEZJUFNfeDkzMV9yZXNldCwK LSsgICAgZmlwc19kb19yYW5kX2FkZCwKLSsgICAgRklQU194OTMxX2J5dGVzLAotKyAgICBGSVBT X3g5MzFfc3RhdHVzCi0rICAgIH07Ci0rCi0rY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfeDkzMV9t ZXRob2Qodm9pZCkKLSt7Ci0rICByZXR1cm4gJnJhbmRfeDkzMV9tZXRoOwotK30KLSsKLSsjZW5k aWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmgu ZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oCi0tLS0gb3Bl bnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaC5maXBzCTIwMTItMDItMDcg MTE6MDc6MDIuNTQ3MzkzNzU2ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8v Zmlwcy9maXBzX3JhbmQuaAkyMDEyLTAyLTA3IDExOjA3OjAyLjU0NzM5Mzc1NiArMDEwMAotQEAg LTAsMCArMSwxNDUgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBU aGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRo ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK LSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJp YWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBt dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAi T3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBw cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAg ICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFz ZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4g UHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9w ZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdp dGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJv amVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVy IG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8v d3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0r ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBU SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaWZuZGVmIEhF QURFUl9GSVBTX1JBTkRfSAotKyNkZWZpbmUgSEVBREVSX0ZJUFNfUkFORF9ICi0rCi0rI2luY2x1 ZGUgPG9wZW5zc2wvYWVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rCi0rI2lmZGVmICBfX2NwbHVzcGx1cwotK2V4dGVybiAiQyIgewotKyNl bmRpZgotKwotK2ludCBGSVBTX3g5MzFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXks IGludCBrZXlsZW4pOwotK2ludCBGSVBTX3g5MzFfc2VlZChjb25zdCB2b2lkICpidWYsIGludCBu dW0pOwotK2ludCBGSVBTX3g5MzFfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBpbnQgb3V0bGVu KTsKLSsKLStpbnQgRklQU194OTMxX3Rlc3RfbW9kZSh2b2lkKTsKLSt2b2lkIEZJUFNfeDkzMV9y ZXNldCh2b2lkKTsKLStpbnQgRklQU194OTMxX3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCk7Ci0r Ci0raW50IEZJUFNfeDkzMV9zdGF0dXModm9pZCk7Ci0rCi0rY29uc3QgUkFORF9NRVRIT0QgKkZJ UFNfeDkzMV9tZXRob2Qodm9pZCk7Ci0rCi0rdHlwZWRlZiBzdHJ1Y3QgZHJiZ19jdHhfc3QgRFJC R19DVFg7Ci0rLyogRFJCRyBleHRlcm5hbCBmbGFncyAqLwotKy8qIEZsYWcgZm9yIENUUiBtb2Rl IG9ubHk6IHVzZSBkZXJpdmF0aW9uIGZ1bmN0aW9uIGN0cl9kZiAqLwotKyNkZWZpbmUJRFJCR19G TEFHX0NUUl9VU0VfREYJCTB4MQotKy8qIFBSTkcgaXMgaW4gdGVzdCBzdGF0ZSAqLwotKyNkZWZp bmUJRFJCR19GTEFHX1RFU1QJCQkweDIKLSsKLStEUkJHX0NUWCAqRklQU19kcmJnX25ldyhpbnQg dHlwZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKLStpbnQgRklQU19kcmJnX2luaXQoRFJCR19DVFgg KmRjdHgsIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwotK2ludCBGSVBTX2RyYmdfaW5z dGFudGlhdGUoRFJCR19DVFggKmRjdHgsCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMs IHNpemVfdCBwZXJzbGVuKTsKLStpbnQgRklQU19kcmJnX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwg Y29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pOwotK2ludCBGSVBTX2Ry YmdfZ2VuZXJhdGUoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91 dGxlbiwKLSsJCQlpbnQgcHJlZGljdGlvbl9yZXNpc3RhbmNlLAotKwkJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKTsKLSsKLStpbnQgRklQU19kcmJnX3VuaW5zdGFu dGlhdGUoRFJCR19DVFggKmRjdHgpOwotK3ZvaWQgRklQU19kcmJnX2ZyZWUoRFJCR19DVFggKmRj dHgpOwotKwotK2ludCBGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwKLSsJ c2l6ZV90ICgqZ2V0X2VudHJvcHkpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0 LAotKwkJCQlpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKSwKLSsJ dm9pZCAoKmNsZWFudXBfZW50cm9weSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0 LCBzaXplX3Qgb2xlbiksCi0rCXNpemVfdCBlbnRyb3B5X2Jsb2NrbGVuLAotKwlzaXplX3QgKCpn ZXRfbm9uY2UpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKwkJCQlpbnQg ZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKSwKLSsJdm9pZCAoKmNsZWFu dXBfbm9uY2UpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4p KTsKLSsKLStpbnQgRklQU19kcmJnX3NldF9yYW5kX2NhbGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwK LSsJc2l6ZV90ICgqZ2V0X2FkaW4pKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0 KSwKLSsJdm9pZCAoKmNsZWFudXBfYWRpbikoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAq b3V0LCBzaXplX3Qgb2xlbiksCi0rCWludCAoKnJhbmRfc2VlZF9jYikoRFJCR19DVFggKmN0eCwg Y29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtKSwKLSsJaW50ICgqcmFuZF9hZGRfY2IpKERSQkdfQ1RY ICpjdHgsCi0rCQkJCWNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSwgZG91YmxlIGVudHJvcHkpKTsK LSsKLSt2b2lkICpGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKERSQkdfQ1RYICpjdHgpOwotK3ZvaWQg RklQU19kcmJnX3NldF9hcHBfZGF0YShEUkJHX0NUWCAqY3R4LCB2b2lkICphcHBfZGF0YSk7Ci0r c2l6ZV90IEZJUFNfZHJiZ19nZXRfYmxvY2tsZW5ndGgoRFJCR19DVFggKmRjdHgpOwotK2ludCBG SVBTX2RyYmdfZ2V0X3N0cmVuZ3RoKERSQkdfQ1RYICpkY3R4KTsKLSt2b2lkIEZJUFNfZHJiZ19z ZXRfY2hlY2tfaW50ZXJ2YWwoRFJCR19DVFggKmRjdHgsIGludCBpbnRlcnZhbCk7Ci0rdm9pZCBG SVBTX2RyYmdfc2V0X3Jlc2VlZF9pbnRlcnZhbChEUkJHX0NUWCAqZGN0eCwgaW50IGludGVydmFs KTsKLSsKLStpbnQgRklQU19kcmJnX2hlYWx0aF9jaGVjayhEUkJHX0NUWCAqZGN0eCk7Ci0rCi0r RFJCR19DVFggKkZJUFNfZ2V0X2RlZmF1bHRfZHJiZyh2b2lkKTsKLStjb25zdCBSQU5EX01FVEhP RCAqRklQU19kcmJnX21ldGhvZCh2b2lkKTsKLSsKLSsKLStpbnQgRklQU19yYW5kX3NldF9tZXRo b2QoY29uc3QgUkFORF9NRVRIT0QgKm1ldGgpOwotK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3Jh bmRfZ2V0X21ldGhvZCh2b2lkKTsKLSsKLSt2b2lkIEZJUFNfcmFuZF9zZXRfYml0cyhpbnQgbmJp dHMpOwotKwotK2ludCBGSVBTX3JhbmRfc3RyZW5ndGgodm9pZCk7Ci0rCi0rLyogMS4wLjAgY29t cGF0IGZ1bmN0aW9ucyAqLwotK2ludCBGSVBTX3JhbmRfc2V0X2tleShjb25zdCB1bnNpZ25lZCBj aGFyICprZXksIEZJUFNfUkFORF9TSVpFX1Qga2V5bGVuKTsKLStpbnQgRklQU19yYW5kX3NlZWQo Y29uc3Qgdm9pZCAqYnVmLCBGSVBTX1JBTkRfU0laRV9UIG51bSk7Ci0raW50IEZJUFNfcmFuZF9i eXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIEZJUFNfUkFORF9TSVpFX1Qgb3V0bGVuKTsKLStpbnQg RklQU19yYW5kX3Rlc3RfbW9kZSh2b2lkKTsKLSt2b2lkIEZJUFNfcmFuZF9yZXNldCh2b2lkKTsK LStpbnQgRklQU19yYW5kX3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCk7Ci0raW50IEZJUFNfcmFu ZF9zdGF0dXModm9pZCk7Ci0rY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9tZXRob2Qodm9p ZCk7Ci0rCi0rI2lmZGVmICBfX2NwbHVzcGx1cwotK30KLSsjZW5kaWYKLSsjZW5kaWYKLSsjZW5k aWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xj bC5oLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNsLmgK LS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9sY2wuaC5maXBz CTIwMTItMDItMDcgMTE6MDc6MDIuNTQ3MzkzNzU2ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1i ZXRhMi9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNsLmgJMjAxMi0wMi0wNyAxMToxMDo1Ny40Nzgz NDkxMDkgKzAxMDAKLUBAIC0wLDAgKzEsMjE5IEBACi0rLyogZmlwcy9yYW5kL2ZpcHNfcmFuZF9s Y2wuaCAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNz bC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUg bWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0r ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBu YW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUg dXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBG b3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BP cGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wi IGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJt aXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlv bnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICog ICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBB TkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICog SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ REVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT IChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK LSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot KyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rdHlwZWRlZiBzdHJ1Y3QgZHJiZ19oYXNoX2N0eF9z dCBEUkJHX0hBU0hfQ1RYOwotK3R5cGVkZWYgc3RydWN0IGRyYmdfaG1hY19jdHhfc3QgRFJCR19I TUFDX0NUWDsKLSt0eXBlZGVmIHN0cnVjdCBkcmJnX2N0cl9jdHhfc3QgRFJCR19DVFJfQ1RYOwot KwotKy8qIDg4OCBiaXRzIGZyb20gMTAuMSB0YWJsZSAyICovCi0rI2RlZmluZSBIQVNIX1BSTkdf TUFYX1NFRURMRU4JMTExCi0rCi0rc3RydWN0IGRyYmdfaGFzaF9jdHhfc3QKLSsJewotKwljb25z dCBFVlBfTUQgKm1kOwotKwlFVlBfTURfQ1RYIG1jdHg7Ci0rCXVuc2lnbmVkIGNoYXIgVltIQVNI X1BSTkdfTUFYX1NFRURMRU5dOwotKwl1bnNpZ25lZCBjaGFyIENbSEFTSF9QUk5HX01BWF9TRUVE TEVOXTsKLSsJLyogVGVtcG9yYXJ5IHZhbHVlIHN0b3JhZ2U6IHNob3VsZCBhbHdheXMgZXhjZWVk IG1heCBkaWdlc3QgbGVuZ3RoICovCi0rCXVuc2lnbmVkIGNoYXIgdnRtcFtIQVNIX1BSTkdfTUFY X1NFRURMRU5dOwotKwl9OwotKwotK3N0cnVjdCBkcmJnX2htYWNfY3R4X3N0Ci0rCXsKLSsJY29u c3QgRVZQX01EICptZDsKLSsJSE1BQ19DVFggaGN0eDsKLSsJdW5zaWduZWQgY2hhciBLW0VWUF9N QVhfTURfU0laRV07Ci0rCXVuc2lnbmVkIGNoYXIgVltFVlBfTUFYX01EX1NJWkVdOwotKwl9Owot KwotK3N0cnVjdCBkcmJnX2N0cl9jdHhfc3QKLSsJewotKwlBRVNfS0VZIGtzOwotKwlzaXplX3Qg a2V5bGVuOwotKwl1bnNpZ25lZCBjaGFyIEtbMzJdOwotKwl1bnNpZ25lZCBjaGFyIFZbMTZdOwot KwkvKiBUZW1wIHZhcmlhYmxlcyB1c2VkIGJ5IGRlcml2YXRpb24gZnVuY3Rpb24gKi8KLSsJQUVT X0tFWSBkZl9rczsKLSsJQUVTX0tFWSBkZl9reGtzOwotKwkvKiBUZW1wb3JhcnkgYmxvY2sgc3Rv cmFnZSB1c2VkIGJ5IGN0cl9kZiAqLwotKwl1bnNpZ25lZCBjaGFyIGJsdG1wWzE2XTsKLSsJc2l6 ZV90IGJsdG1wX3BvczsKLSsJdW5zaWduZWQgY2hhciBLWFs0OF07Ci0rCX07Ci0rCi0rLyogRFJC RyBpbnRlcm5hbCBmbGFncyAqLwotKwotKy8qIEZ1bmN0aW9ucyBzaG91bGRuJ3QgY2FsbCBlcnIg bGlicmFyeSAqLwotKyNkZWZpbmUJRFJCR19GTEFHX05PRVJSCQkJMHgxCi0rLyogQ3VzdG9tIHJl c2VlZCBjaGVja2luZyAqLwotKyNkZWZpbmUJRFJCR19DVVNUT01fUkVTRUVECQkweDIKLSsKLSsv KiBEUkJHIHN0YXR1cyB2YWx1ZXMgKi8KLSsvKiBub3QgaW5pdGlhbGlzZWQgKi8KLSsjZGVmaW5l IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQJMAotKy8qIG9rIGFuZCByZWFkeSB0byBnZW5lcmF0 ZSByYW5kb20gYml0cyAqLwotKyNkZWZpbmUgRFJCR19TVEFUVVNfUkVBRFkJCTEKLSsvKiByZXNl ZWQgcmVxdWlyZWQgKi8KLSsjZGVmaW5lIERSQkdfU1RBVFVTX1JFU0VFRAkJMgotKy8qIGZhdGFs IGVycm9yIGNvbmRpdGlvbiAqLwotKyNkZWZpbmUgRFJCR19TVEFUVVNfRVJST1IJCTMKLSsKLSsv KiBBIGRlZmF1bHQgbWF4aW11bSBsZW5ndGg6IGxhcmdlciB0aGFuIGFueSByZWFzb25hYmxlIHZh bHVlIHVzZWQgaW4gcHJhdGljZSAqLwotKwotKyNkZWZpbmUgRFJCR19NQVhfTEVOR1RICQkJMHg3 ZmZmZmZmMAotKy8qIE1heGltdW0gRFJCRyBibG9jayBsZW5ndGg6IGFsbCBtZCBzaXplcyBhcmUg YmlnZ2VyIHRoYW4gY2lwaGVyIGJsb2NrcyBzaXplcwotKyAqIHNvIHVzZSBtYXggZGlnZXN0IGxl bmd0aC4KLSsgKi8KLSsjZGVmaW5lIERSQkdfTUFYX0JMT0NLCQkJRVZQX01BWF9NRF9TSVpFCi0r Ci0rI2RlZmluZSBEUkJHX0hFQUxUSF9JTlRFUlZBTAkJKDEgPDwgMjQpCi0rCi0rLyogRFJCRyBj b250ZXh0IHN0cnVjdHVyZSAqLwotKwotK3N0cnVjdCBkcmJnX2N0eF9zdAotKwl7Ci0rCS8qIEZp cnN0IHR5cGVzIGNvbW1vbiB0byBhbGwgaW1wbGVtZW50YXRpb25zICovCi0rCS8qIERSQkcgdHlw ZTogYSBOSUQgZm9yIHRoZSB1bmRlcmx5aW5nIGFsZ29yaXRobSAqLwotKwlpbnQgdHlwZTsKLSsJ LyogVmFyaW91cyBleHRlcm5hbCBmbGFncyAqLwotKwl1bnNpZ25lZCBpbnQgeGZsYWdzOwotKwkv KiBWYXJpb3VzIGludGVybmFsIHVzZSBvbmx5IGZsYWdzICovCi0rCXVuc2lnbmVkIGludCBpZmxh Z3M7Ci0rCS8qIFVzZWQgZm9yIHBlcmlvZGljIGhlYWx0aCBjaGVja3MgKi8KLSsJaW50IGhlYWx0 aF9jaGVja19jbnQsIGhlYWx0aF9jaGVja19pbnRlcnZhbDsKLSsKLSsJLyogVGhlIGZvbGxvd2lu ZyBwYXJhbWV0ZXJzIGFyZSBzZXR1cCBieSBtZWNoYW5pc20gZHJiZ19pbml0KCkgY2FsbCAqLwot KwlpbnQgc3RyZW5ndGg7Ci0rCXNpemVfdCBibG9ja2xlbmd0aDsKLSsJc2l6ZV90IG1heF9yZXF1 ZXN0OwotKwotKwlzaXplX3QgbWluX2VudHJvcHksIG1heF9lbnRyb3B5OwotKwlzaXplX3QgbWlu X25vbmNlLCBtYXhfbm9uY2U7Ci0rCXNpemVfdCBtYXhfcGVycywgbWF4X2FkaW47Ci0rCXVuc2ln bmVkIGludCByZXNlZWRfY291bnRlcjsKLSsJdW5zaWduZWQgaW50IHJlc2VlZF9pbnRlcnZhbDsK LSsJc2l6ZV90IHNlZWRsZW47Ci0rCWludCBzdGF0dXM7Ci0rCS8qIEFwcGxpY2F0aW9uIGRhdGE6 IHR5cGljYWxseSB1c2VkIGJ5IHRlc3QgZ2V0X2VudHJvcHkgKi8KLSsJdm9pZCAqYXBwX2RhdGE7 Ci0rCS8qIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIHN0cnVjdHVyZXMgKi8KLSsJdW5pb24gCi0r CQl7Ci0rCQlEUkJHX0hBU0hfQ1RYIGhhc2g7Ci0rCQlEUkJHX0hNQUNfQ1RYIGhtYWM7Ci0rCQlE UkJHX0NUUl9DVFggIGN0cjsKLSsJCX0gZDsKLSsJLyogSW5pdGlhbGlhc2UgUFJORyBhbmQgc2V0 dXAgY2FsbGJhY2tzIGJlbG93ICovCi0rCWludCAoKmluaXQpKERSQkdfQ1RYICpjdHgsIGludCBu aWQsIGludCBzZWN1cml0eSwgdW5zaWduZWQgaW50IGZsYWdzKTsKLSsJLyogSW50YW50aWF0ZSBQ Uk5HICovCi0rCWludCAoKmluc3RhbnRpYXRlKShEUkJHX0NUWCAqY3R4LAotKwkJCQljb25zdCB1 bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRsZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VsZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBl cnMsIHNpemVfdCBwZXJzbGVuKTsKLSsJLyogcmVzZWVkICovCi0rCWludCAoKnJlc2VlZCkoRFJC R19DVFggKmN0eCwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50bGVu LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbik7Ci0rCS8q IGdlbmVyYXQgb3V0cHV0ICovCi0rCWludCAoKmdlbmVyYXRlKShEUkJHX0NUWCAqY3R4LAotKwkJ CQl1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKTsKLSsJLyogdW5pbnN0YW50aWF0ZSAqLwotKwlp bnQgKCp1bmluc3RhbnRpYXRlKShEUkJHX0NUWCAqY3R4KTsKLSsKLSsJLyogRW50cm9weSBzb3Vy Y2UgYmxvY2sgbGVuZ3RoICovCi0rCXNpemVfdCBlbnRyb3B5X2Jsb2NrbGVuOwotKwotKwkvKiBl bnRyb3B5IGdhdGhlcmluZyBmdW5jdGlvbiAqLwotKwlzaXplX3QgKCpnZXRfZW50cm9weSkoRFJC R19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rCQkJCWludCBlbnRyb3B5LCBzaXpl X3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pOwotKwkvKiBJbmRpY2F0ZXMgd2UgaGF2ZSBmaW5p c2hlZCB3aXRoIGVudHJvcHkgYnVmZmVyICovCi0rCXZvaWQgKCpjbGVhbnVwX2VudHJvcHkpKERS QkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pOwotKwotKwkvKiBu b25jZSBnYXRoZXJpbmcgZnVuY3Rpb24gKi8KLSsJc2l6ZV90ICgqZ2V0X25vbmNlKShEUkJHX0NU WCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsJCQkJaW50IGVudHJvcHksIHNpemVfdCBt aW5fbGVuLCBzaXplX3QgbWF4X2xlbik7Ci0rCS8qIEluZGljYXRlcyB3ZSBoYXZlIGZpbmlzaGVk IHdpdGggbm9uY2UgYnVmZmVyICovCi0rCXZvaWQgKCpjbGVhbnVwX25vbmNlKShEUkJHX0NUWCAq Y3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKTsKLSsKLSsJLyogQ29udGludW91 cyByYW5kb20gbnVtYmVyIHRlc3QgdGVtcG9yYXJ5IGFyZWEgKi8KLSsJLyogTGFzdCBibG9jayAq LwkKLSsJdW5zaWduZWQgY2hhciBsYltFVlBfTUFYX01EX1NJWkVdOwotKwkvKiBzZXQgaWYgbGIg aXMgdmFsaWQgKi8KLSsJaW50IGxiX3ZhbGlkOwotKwotKwkvKiBDYWxsYmFja3MgdXNlZCB3aGVu IGNhbGxlZCB0aHJvdWdoIFJBTkQgaW50ZXJmYWNlICovCi0rCS8qIEdldCBhbnkgYWRkaXRpb25h bCBpbnB1dCBmb3IgZ2VuZXJhdGUgKi8KLSsJc2l6ZV90ICgqZ2V0X2FkaW4pKERSQkdfQ1RYICpj dHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0KTsKLSsJdm9pZCAoKmNsZWFudXBfYWRpbikoRFJCR19D VFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbik7Ci0rCS8qIENhbGxiYWNr IGZvciBSQU5EX3NlZWQoKSwgUkFORF9hZGQoKSAqLwotKwlpbnQgKCpyYW5kX3NlZWRfY2IpKERS QkdfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSk7Ci0rCWludCAoKnJhbmRfYWRk X2NiKShEUkJHX0NUWCAqY3R4LAotKwkJCQljb25zdCB2b2lkICpidWYsIGludCBudW0sIGRvdWJs ZSBlbnRyb3B5KTsKLSsJfTsKLSsKLSsKLStpbnQgZmlwc19kcmJnX2N0cl9pbml0KERSQkdfQ1RY ICpkY3R4KTsKLStpbnQgZmlwc19kcmJnX2hhc2hfaW5pdChEUkJHX0NUWCAqZGN0eCk7Ci0raW50 IGZpcHNfZHJiZ19obWFjX2luaXQoRFJCR19DVFggKmRjdHgpOwotK2ludCBmaXBzX2RyYmdfa2F0 KERSQkdfQ1RYICpkY3R4LCBpbnQgbmlkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwotK2ludCBmaXBz X2RyYmdfY3BybmdfdGVzdChEUkJHX0NUWCAqZGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqb3V0 KTsKLSsKLStjb25zdCBzdHJ1Y3QgZW52X21kX3N0ICpGSVBTX2dldF9kaWdlc3RieW5pZChpbnQg bmlkKTsKLSsKLStjb25zdCBzdHJ1Y3QgZXZwX2NpcGhlcl9zdCAqRklQU19nZXRfY2lwaGVyYnlu aWQoaW50IG5pZCk7Ci0rCi0rI2RlZmluZSBGSVBTX2RpZ2VzdGluaXQgRVZQX0RpZ2VzdEluaXQK LSsjZGVmaW5lIEZJUFNfZGlnZXN0dXBkYXRlIEVWUF9EaWdlc3RVcGRhdGUKLSsjZGVmaW5lIEZJ UFNfZGlnZXN0ZmluYWwgRVZQX0RpZ2VzdEZpbmFsCi0rI2RlZmluZSBNX0VWUF9NRF9zaXplIEVW UF9NRF9zaXplCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNf cmFuZF9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19yYW5k X2xpYi5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGli LmMuZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0ODM5Mzc2NCArMDEwMAotKysrIG9wZW5zc2wt MS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xpYi5jCTIwMTItMDItMDcgMTE6MDc6 MDIuNTQ4MzkzNzY0ICswMTAwCi1AQCAtMCwwICsxLDE5MSBAQAotKy8qID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0r ICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJl c2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoK LSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0r ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMu IEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2Yg dGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xl ZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMg Ik9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQg dG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdy aXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3Bl bnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBh cHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlz c2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25z IG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAg IGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5E IEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElU UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1Qg TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0r ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsg KgotKyAqLwotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgImVf b3MuaCIKLSsKLSsvKiBGSVBTIEFQSSBmb3IgUFJORyB1c2UuIFNpbWlsYXIgdG8gUkFORCBmdW5j dGlvbmFsaXR5IGJ1dCB3aXRob3V0Ci0rICogRU5HSU5FIGFuZCBhZGRpdGlvbmFsIGNoZWNraW5n IGZvciBub24tRklQUyByYW5kIG1ldGhvZHMuCi0rICovCi0rCi0rc3RhdGljIGNvbnN0IFJBTkRf TUVUSE9EICpmaXBzX3JhbmRfbWV0aCA9IE5VTEw7Ci0rc3RhdGljIGludCBmaXBzX2FwcHJvdmVk X3JhbmRfbWV0aCA9IDA7Ci0rc3RhdGljIGludCBmaXBzX3JhbmRfYml0cyA9IDA7Ci0rCi0rLyog QWxsb3dzIGFwcGxpY2F0aW9uIHRvIG92ZXJyaWRlIG51bWJlciBvZiBiaXRzIGFuZCB1c2VzIG5v bi1GSVBTIG1ldGhvZHMgKi8KLSt2b2lkIEZJUFNfcmFuZF9zZXRfYml0cyhpbnQgbmJpdHMpCi0r CXsKLSsJZmlwc19yYW5kX2JpdHMgPSBuYml0czsKLSsJfQotKwotK2ludCBGSVBTX3JhbmRfc2V0 X21ldGhvZChjb25zdCBSQU5EX01FVEhPRCAqbWV0aCkKLSsJewotKwlpZiAoIWZpcHNfcmFuZF9i aXRzKQotKwkJewotKwkJaWYgKG1ldGggPT0gRklQU19kcmJnX21ldGhvZCgpKQotKwkJCWZpcHNf YXBwcm92ZWRfcmFuZF9tZXRoID0gMTsKLSsJCWVsc2UgaWYgKG1ldGggPT0gRklQU194OTMxX21l dGhvZCgpKQotKwkJCWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID0gMjsKLSsJCWVsc2UKLSsJCQl7 Ci0rCQkJZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPSAwOwotKwkJCWlmIChGSVBTX21vZHVsZV9t b2RlKCkpCi0rCQkJCXsKLSsJCQkJRklQU2VycihGSVBTX0ZfRklQU19SQU5EX1NFVF9NRVRIT0Qs Ci0rCQkJCQkJRklQU19SX05PTl9GSVBTX01FVEhPRCk7Ci0rCQkJCXJldHVybiAwOwotKwkJCQl9 Ci0rCQkJfQotKwkJfQotKwlmaXBzX3JhbmRfbWV0aCA9IG1ldGg7Ci0rCXJldHVybiAxOwotKwl9 Ci0rCi0rY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9nZXRfbWV0aG9kKHZvaWQpCi0rCXsK LSsJcmV0dXJuIGZpcHNfcmFuZF9tZXRoOwotKwl9Ci0rCi0rY29uc3QgUkFORF9NRVRIT0QgKkZJ UFNfcmFuZF9tZXRob2Qodm9pZCkKLSsJewotKwlyZXR1cm4gRklQU19yYW5kX2dldF9tZXRob2Qo KTsKLSsJfQotKwotK3ZvaWQgRklQU19yYW5kX3Jlc2V0KHZvaWQpCi0rCXsKLSsJaWYgKGZpcHNf cmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5jbGVhbnVwKQotKwkJZmlwc19yYW5kX21ldGgt PmNsZWFudXAoKTsKLSsJfQotKwotK2ludCBGSVBTX3JhbmRfc2VlZChjb25zdCB2b2lkICpidWYs IEZJUFNfUkFORF9TSVpFX1QgbnVtKQotKwl7Ci0rCWlmICghZmlwc19hcHByb3ZlZF9yYW5kX21l dGggJiYgRklQU19tb2R1bGVfbW9kZSgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19S QU5EX1NFRUQsIEZJUFNfUl9OT05fRklQU19NRVRIT0QpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0r CWlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+c2VlZCkKLSsJCWZpcHNfcmFu ZF9tZXRoLT5zZWVkKGJ1ZixudW0pOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3ZvaWQgRklQU19y YW5kX2FkZChjb25zdCB2b2lkICpidWYsIGludCBudW0sIGRvdWJsZSBlbnRyb3B5KQotKwl7Ci0r CWlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgpKQotKwkJ ewotKwkJRklQU2VycihGSVBTX0ZfRklQU19SQU5EX0FERCwgRklQU19SX05PTl9GSVBTX01FVEhP RCk7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCWlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRf bWV0aC0+YWRkKQotKwkJZmlwc19yYW5kX21ldGgtPmFkZChidWYsbnVtLGVudHJvcHkpOwotKwl9 Ci0rCi0raW50IEZJUFNfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaGFyICpidWYsIEZJUFNfUkFORF9T SVpFX1QgbnVtKQotKwl7Ci0rCWlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19t b2R1bGVfbW9kZSgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19SQU5EX0JZVEVTLCBG SVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlpZiAoZmlwc19y YW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgtPmJ5dGVzKQotKwkJcmV0dXJuIGZpcHNfcmFuZF9t ZXRoLT5ieXRlcyhidWYsbnVtKTsKLSsJcmV0dXJuIDA7Ci0rCX0KLSsKLStpbnQgRklQU19yYW5k X3BzZXVkb19ieXRlcyh1bnNpZ25lZCBjaGFyICpidWYsIGludCBudW0pCi0rCXsKLSsJaWYgKCFm aXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21vZHVsZV9tb2RlKCkpCi0rCQl7Ci0rCQlG SVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfUFNFVURPX0JZVEVTLCBGSVBTX1JfTk9OX0ZJUFNfTUVU SE9EKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlpZiAoZmlwc19yYW5kX21ldGggJiYgZmlwc19y YW5kX21ldGgtPnBzZXVkb3JhbmQpCi0rCQlyZXR1cm4gZmlwc19yYW5kX21ldGgtPnBzZXVkb3Jh bmQoYnVmLG51bSk7Ci0rCXJldHVybiAtMTsKLSsJfQotKwotK2ludCBGSVBTX3JhbmRfc3RhdHVz KHZvaWQpCi0rCXsKLSsJaWYgKCFmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21vZHVs ZV9tb2RlKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfU1RBVFVTLCBGSVBT X1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlpZiAoZmlwc19yYW5k X21ldGggJiYgZmlwc19yYW5kX21ldGgtPnN0YXR1cykKLSsJCXJldHVybiBmaXBzX3JhbmRfbWV0 aC0+c3RhdHVzKCk7Ci0rCXJldHVybiAwOwotKwl9Ci0rCi0rLyogUmV0dXJuIGluc3RhbnRpYXRl ZCBzdHJlbmd0aCBvZiBQUk5HLiBGb3IgRFJCRyB0aGlzIGlzIGFuIGludGVybmFsCi0rICogcGFy YW1ldGVyLiBGb3IgWDkuMzEgUFJORyBpdCBpcyA4MCBiaXRzIChmcm9tIFNQODAwLTEzMSkuIEFu eSBvdGhlcgotKyAqIHR5cGUgb2YgUFJORyBpcyBub3QgYXBwcm92ZWQgYW5kIHJldHVybnMgMCBp biBGSVBTIG1vZGUgYW5kIG1heGltdW0KLSsgKiAyNTYgb3V0c2lkZSBGSVBTIG1vZGUuCi0rICov Ci0rCi0raW50IEZJUFNfcmFuZF9zdHJlbmd0aCh2b2lkKQotKwl7Ci0rCWlmIChmaXBzX3JhbmRf Yml0cykKLSsJCXJldHVybiBmaXBzX3JhbmRfYml0czsKLSsJaWYgKGZpcHNfYXBwcm92ZWRfcmFu ZF9tZXRoID09IDEpCi0rCQlyZXR1cm4gRklQU19kcmJnX2dldF9zdHJlbmd0aChGSVBTX2dldF9k ZWZhdWx0X2RyYmcoKSk7Ci0rCWVsc2UgaWYgKGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID09IDIp Ci0rCQlyZXR1cm4gODA7Ci0rCWVsc2UgaWYgKGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID09IDAp Ci0rCQl7Ci0rCQlpZiAoRklQU19tb2R1bGVfbW9kZSgpKQotKwkJCXJldHVybiAwOwotKwkJZWxz ZQotKwkJCXJldHVybiAyNTY7Ci0rCQl9Ci0rCXJldHVybiAwOwotKwl9Ci1kaWZmIC11cCBvcGVu c3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jLmZpcHMgb3Bl bnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYwotLS0tIG9w ZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMuZmlwcwky MDEyLTAyLTA3IDExOjA3OjAyLjU0ODM5Mzc2NCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0 YTIvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMJMjAxMi0wMi0wNyAxMTowNzowMi41 NDgzOTM3NjQgKzAxMDAKLUBAIC0wLDAgKzEsMTgzIEBACi0rLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBD b3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAq Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz Ci0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwot KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3Ns Lm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1h eSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVh ciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9u IG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2Yg YW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNr bm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5Z Ci0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBB UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0r ICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgot KwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsKLSsKLSt0eXBlZGVmIHN0cnVjdAotKwl7Ci0r CXVuc2lnbmVkIGNoYXIgRFRbMTZdOwotKwl1bnNpZ25lZCBjaGFyIFZbMTZdOwotKwl1bnNpZ25l ZCBjaGFyIFJbMTZdOwotKwl9IEFFU19QUk5HX1RWOwotKwotKy8qIFRoZSBmb2xsb3dpbmcgdGVz dCB2ZWN0b3JzIGFyZSB0YWtlbiBkaXJlY3RseSBmcm9tIHRoZSBSR05WUyBzcGVjICovCi0rCi0r c3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9rZXlbMTZdID0KLSsJCXsweGYzLDB4YjEsMHg2 NiwweDZkLDB4MTMsMHg2MCwweDcyLDB4NDIsCi0rCQkgMHhlZCwweDA2LDB4MWMsMHhhYiwweGI4 LDB4ZDQsMHg2MiwweDAyfTsKLSsKLStzdGF0aWMgQUVTX1BSTkdfVFYgYWVzXzEyOF90diA9IAot Kwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4MjMsMHhm YSwweDYyLAotKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4MjIsMHhmOX0sCi0r CQkJCS8qIFYgKi8KLSsJCXsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs Ci0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyog UiAqLwotKwkJezB4NTksMHg1MywweDFlLDB4ZDEsMHgzYiwweGIwLDB4YzAsMHg1NSwKLSsJCSAw eDg0LDB4NzksMHg2NiwweDg1LDB4YzEsMHgyZiwweDc2LDB4NDF9Ci0rCX07Ci0rCi0rc3RhdGlj IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9rZXlbMjRdID0KLSsJCXsweDE1LDB4ZDgsMHg3OCwweDBk LDB4NjIsMHhkMywweDI1LDB4NmUsCi0rCQkgMHg0NCwweDY0LDB4MTAsMHgxMywweDYwLDB4MmIs MHhhOSwweGJjLAotKwkJIDB4NGEsMHhmYiwweGNhLDB4ZWIsMHg0YywweDhiLDB4OTksMHgzYn07 Ci0rCi0rc3RhdGljIEFFU19QUk5HX1RWIGFlc18xOTJfdHYgPSAKLSsJewotKwkJCQkvKiBEVCAq LwotKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKLSsJCSAweGJm LDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4NGJ9LAotKwkJCQkvKiBWICovCi0rCQl7 MHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDE3LDB4 MDcsMHhkNSwweDI4LDB4MTksMHg3OSwweDFlLDB4ZWYsCi0rCQkgMHhhNSwweDBjLDB4YmYsMHgy NSwweGU1LDB4NTYsMHhiNCwweDkzfQotKwl9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFl c18yNTZfa2V5WzMyXSA9Ci0rCQl7MHg2ZCwweDE0LDB4MDYsMHg2YywweGI2LDB4ZDgsMHgyMSww eDJkLAotKwkJIDB4ODIsMHg4ZCwweGZhLDB4ZjIsMHg3YSwweDAzLDB4YjcsMHg5ZiwKLSsJCSAw eDBjLDB4YzcsMHgzZSwweGNkLDB4NzYsMHhlYiwweGVlLDB4YjUsCi0rCQkgMHgyMSwweDA1LDB4 OGMsMHg0ZiwweDMxLDB4N2EsMHg4MCwweGJifTsKLSsKLStzdGF0aWMgQUVTX1BSTkdfVFYgYWVz XzI1Nl90diA9Ci0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4 MWQsMHhhMywweGIwLDB4ZDUsCi0rCQkgMHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5 ZSwweDg4fSwKLSsJCQkJLyogViAqLwotKwkJezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9 LAotKwkJCQkvKiBSICovCi0rCQl7MHgzNSwweGM3LDB4ZWYsMHhhNywweDc4LDB4NGQsMHgyOSww eGJjLAotKwkJIDB4ODIsMHg3OSwweDk5LDB4ZmIsMHhkMCwweGIzLDB4M2IsMHg3Mn0KLSsJfTsK LSsKLSt2b2lkIEZJUFNfY29ycnVwdF9ybmcoKQotKyAgICB7Ci0rICAgIGFlc18xOTJfdHYuVlsw XSsrOwotKyAgICB9Ci0rCi0rI2RlZmluZSBmaXBzX3g5MzFfdGVzdChrZXksIHR2KSBcCi0rCWRv X3g5MzFfdGVzdChrZXksIHNpemVvZiBrZXksICZ0dikKLSsKLStzdGF0aWMgaW50IGRvX3g5MzFf dGVzdCh1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sCi0rCQkJQUVTX1BSTkdfVFYgKnR2 KQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgUlsxNl0sIFZbMTZdOwotKwlpbnQgcnYgPSAxOwotKwlt ZW1jcHkoViwgdHYtPlYsIHNpemVvZihWKSk7Ci0rCWlmICghRklQU194OTMxX3NldF9rZXkoa2V5 LCBrZXlsZW4pKQotKwkJcmV0dXJuIDA7Ci0rCWlmICghZmlwc19wb3N0X3N0YXJ0ZWQoRklQU19U RVNUX1g5MzEsIGtleWxlbiwgTlVMTCkpCi0rCQlyZXR1cm4gMTsKLSsJaWYgKCFmaXBzX3Bvc3Rf Y29ycnVwdChGSVBTX1RFU1RfWDkzMSwga2V5bGVuLCBOVUxMKSkKLSsJCVZbMF0rKzsKLSsJRklQ U194OTMxX3NlZWQoViwgMTYpOwotKwlGSVBTX3g5MzFfc2V0X2R0KHR2LT5EVCk7Ci0rCUZJUFNf eDkzMV9ieXRlcyhSLCAxNik7Ci0rCWlmIChtZW1jbXAoUiwgdHYtPlIsIDE2KSkKLSsJCXsKLSsJ CWZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNUX1g5MzEsIGtleWxlbiwgTlVMTCk7Ci0rCQlydiA9 IDA7Ci0rCQl9Ci0rCWVsc2UgaWYgKCFmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1RfWDkzMSwg a2V5bGVuLCBOVUxMKSkKLSsJCXJldHVybiAwOwotKwlyZXR1cm4gcnY7Ci0rCX0KLSsKLStpbnQg RklQU19zZWxmdGVzdF94OTMxKCkKLSsJewotKwlpbnQgcnYgPSAxOwotKwlGSVBTX3g5MzFfcmVz ZXQoKTsKLSsJaWYgKCFGSVBTX3g5MzFfdGVzdF9tb2RlKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX1NFTEZURVNUX1g5MzEsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1 cm4gMDsKLSsJCX0KLSsJaWYgKCFmaXBzX3g5MzFfdGVzdChhZXNfMTI4X2tleSxhZXNfMTI4X3R2 KSkKLSsJCXJ2ID0gMDsKLSsJaWYgKCFmaXBzX3g5MzFfdGVzdChhZXNfMTkyX2tleSwgYWVzXzE5 Ml90dikpCi0rCQlydiA9IDA7Ci0rCWlmICghZmlwc194OTMxX3Rlc3QoYWVzXzI1Nl9rZXksIGFl c18yNTZfdHYpKQotKwkJcnYgPSAwOwotKwlGSVBTX3g5MzFfcmVzZXQoKTsKLSsJaWYgKCFydikK LSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfWDkzMSxGSVBTX1JfU0VMRlRFU1RfRkFJ TEVEKTsKLSsJcmV0dXJuIHJ2OwotKwl9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3Rfcm5nKHZvaWQp Ci0rCXsKLSsJcmV0dXJuIEZJUFNfc2VsZnRlc3RfeDkzMSgpOwotKwl9Ci0rCi0rI2VuZGlmCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYy5m aXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jCi0tLS0g b3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMuZmlwcwkyMDEy LTAyLTA3IDExOjA3OjAyLjU0ODM5Mzc2NCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIv Y3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTQ4MzkzNzY0 ICswMTAwCi1AQCAtMCwwICsxLDI1MCBAQAotKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVy aWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQotKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0r ICoKLSsgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KLSsg KiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCi0rICogVGhlIGltcGxlbWVudGF0 aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgotKyAq IAotKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVy Y2lhbCB1c2UgYXMgbG9uZyBhcwotKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhl YXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFwcGx5IHRvIGFsbCBjb2Rl IGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCi0rICogbGhh c2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1 bWVudGF0aW9uCi0rICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVk IGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIg aXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqIAotKyAqIENvcHlyaWdodCBy ZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGlu Ci0rICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgotKyAqIElmIHRoaXMgcGFja2Fn ZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmli dXRpb24KLSsgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2Vk LgotKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHBy b2dyYW0gc3RhcnR1cCBvcgotKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFs KSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgotKyAqIAotKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0rICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0rICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSsgKiAzLiBBbGwgYWR2 ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29m dHdhcmUKLSsgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdy aXR0ZW4gYnkKLSsgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgotKyAqICAg IFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMg ZnJvbSB0aGUgbGlicmFyeQotKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGlj IHJlbGF0ZWQgOi0pLgotKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmlj IGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAotKyAqICAgIHRoZSBhcHBzIGRp cmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRn ZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5 IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKLSsgKiAKLSsgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAotKyAqIEFOWSBFWFBSRVNT IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0rICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSsgKiBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTAotKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0rICogT1IgU0VSVklDRVM7IExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULCBTVFJJQ1QKLSsgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0rICogT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgot KyAqIFNVQ0ggREFNQUdFLgotKyAqIAotKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24g dGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCi0rICogZGVyaXZh dGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5u b3Qgc2ltcGx5IGJlCi0rICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRp b24gbGljZW5jZQotKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCi0rICov Ci0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJv amVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAq Ci0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJp YnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsg KgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVj dCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAq ICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAg IG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdy aXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsg KiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0 aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9y Zy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQ Uk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNT TCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2lu Y2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8Y3R5cGUu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19y YW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4u aD4KLSsKLSsjaW5jbHVkZSAiZV9vcy5oIgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0raW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBS QU5EIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2lu Y2x1ZGUgImZpcHNfdXRsLmgiCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKwotK3R5cGVk ZWYgc3RydWN0Ci0rCXsKLSsJdW5zaWduZWQgY2hhciBEVFsxNl07Ci0rCXVuc2lnbmVkIGNoYXIg VlsxNl07Ci0rCXVuc2lnbmVkIGNoYXIgUlsxNl07Ci0rCX0gQUVTX1BSTkdfTUNUOwotKwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbWN0X2tleVsxNl0gPQotKwl7MHg5Ziww eDViLDB4NTEsMHgyMCwweDBiLDB4ZjMsMHgzNCwweGI1LAotKwkgMHhkOCwweDJiLDB4ZTgsMHhj MywweDcyLDB4NTUsMHhjOCwweDQ4fTsKLSsKLStzdGF0aWMgY29uc3QgQUVTX1BSTkdfTUNUIGFl c18xMjhfbWN0X3R2ID0gewotKwkJCS8qIERUICovCi0rCXsweDYzLDB4NzYsMHhiYiwweGU1LDB4 MjksMHgwMiwweGJhLDB4M2IsCi0rCSAweDY3LDB4YzksMHgyNSwweGZhLDB4NzAsMHgxZiwweDEx LDB4YWN9LAotKwkJCS8qIFYgKi8KLSsJezB4NTcsMHgyYywweDhlLDB4NzYsMHg4NywweDI2LDB4 NDcsMHg5NywKLSsJIDB4N2UsMHg3NCwweGZiLDB4ZGQsMHhjNCwweDk1LDB4MDEsMHhkMX0sCi0r CQkJLyogUiAqLwotKwl7MHg0OCwweGU5LDB4YmQsMHgwZCwweDA2LDB4ZWUsMHgxOCwweGZiLAot KwkgMHhlNCwweDU3LDB4OTAsMHhkNSwweGMzLDB4ZmMsMHg5YiwweDczfQotK307Ci0rCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9tY3Rfa2V5WzI0XSA9Ci0rCXsweGI3LDB4 NmMsMHgzNCwweGQxLDB4MDksMHg2NywweGFiLDB4NzMsCi0rCSAweDRkLDB4NWEsMHhkNSwweDM0 LDB4OTgsMHgxNiwweDBiLDB4OTEsCi0rCSAweGJjLDB4MzUsMHg1MSwweDE2LDB4NmIsMHhhZSww eDkzLDB4OGF9OwotKwotK3N0YXRpYyBjb25zdCBBRVNfUFJOR19NQ1QgYWVzXzE5Ml9tY3RfdHYg PSB7Ci0rCQkJLyogRFQgKi8KLSsJezB4ODQsMHhjZSwweDIyLDB4N2QsMHg5MSwweDVhLDB4YTMs MHhjOSwKLSsJIDB4ODQsMHgzYywweDBhLDB4YjMsMHhhOSwweDYzLDB4MTUsMHg1Mn0sCi0rCQkJ LyogViAqLwotKwl7MHhiNiwweGFmLDB4ZTYsMHg4ZiwweDk5LDB4OWUsMHg5MCwweDY0LAotKwkg MHhkZCwweGM3LDB4N2EsMHhjMSwweGJiLDB4OTAsMHgzYSwweDZkfSwKLSsJCQkvKiBSICovCi0r CXsweGZjLDB4ODUsMHg2MCwweDlhLDB4MjksMHg2ZiwweGVmLDB4MjEsCi0rCSAweGRkLDB4ODYs MHgyMCwweDMyLDB4OGEsMHgyOSwweDZmLDB4NDd9Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMjU2X21jdF9rZXlbMzJdID0KLSsJezB4OWIsMHgwNSwweGM4LDB4Njgs MHhmZiwweDQ3LDB4ZjgsMHgzYSwKLSsJIDB4YTYsMHgzYSwweGE4LDB4Y2IsMHg0ZSwweDcxLDB4 YjIsMHhlMCwKLSsJIDB4YjgsMHg3ZSwweGYxLDB4MzcsMHhiNiwweGI0LDB4ZjYsMHg2ZCwKLSsJ IDB4ODYsMHgzMiwweGZjLDB4MWYsMHg1ZSwweDFkLDB4MWUsMHg1MH07Ci0rCi0rc3RhdGljIGNv bnN0IEFFU19QUk5HX01DVCBhZXNfMjU2X21jdF90diA9IHsKLSsJCQkvKiBEVCAqLwotKwl7MHgz MSwweDZlLDB4MzUsMHg5YSwweGIxLDB4NDQsMHhmMCwweGVlLAotKwkgMHg2MiwweDZkLDB4MDQs MHg0NiwweGUwLDB4YTMsMHg5MiwweDRjfSwKLSsJCQkvKiBWICovCi0rCXsweDRmLDB4Y2QsMHhj MSwweDg3LDB4ODIsMHgxZiwweDRkLDB4YTEsCi0rCSAweDNlLDB4MGUsMHg1NiwweDQ0LDB4NTks MHhlOCwweDgzLDB4Y2F9LAotKwkJCS8qIFIgKi8KLSsJezB4YzgsMHg4NywweGMyLDB4NjEsMHg1 YiwweGQwLDB4YjksMHhlMSwKLSsJIDB4ZTcsMHhmMywweDhiLDB4ZDcsMHg1YiwweGQ1LDB4ZjEs MHg4ZH0KLSt9OwotKwotK3N0YXRpYyB2b2lkIGR1bXAoY29uc3QgdW5zaWduZWQgY2hhciAqYixp bnQgbikKLSsgICAgewotKyAgICB3aGlsZShuLS0gPiAwKQotKwl7Ci0rCXByaW50ZigiICUwMngi LCpiKyspOwotKwl9Ci0rICAgIH0KLSsKLStzdGF0aWMgdm9pZCBjb21wYXJlKGNvbnN0IHVuc2ln bmVkIGNoYXIgKnJlc3VsdCxjb25zdCB1bnNpZ25lZCBjaGFyICpleHBlY3RlZCwKLSsJCSAgICBp bnQgbikKLSsgICAgewotKyAgICBpbnQgaTsKLSsKLSsgICAgZm9yKGk9MCA7IGkgPCBuIDsgKytp KQotKwlpZihyZXN1bHRbaV0gIT0gZXhwZWN0ZWRbaV0pCi0rCSAgICB7Ci0rCSAgICBwdXRzKCJS YW5kb20gdGVzdCBmYWlsZWQsIGdvdDoiKTsKLSsJICAgIGR1bXAocmVzdWx0LG4pOwotKwkgICAg cHV0cygiXG4gICAgICAgICAgICAgICBleHBlY3RlZDoiKTsKLSsJICAgIGR1bXAoZXhwZWN0ZWQs bik7Ci0rCSAgICBwdXRjaGFyKCdcbicpOwotKwkgICAgRVhJVCgxKTsKLSsJICAgIH0KLSsgICAg fQotKwotKwotK3N0YXRpYyB2b2lkIHJ1bl90ZXN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwg aW50IGtleWxlbiwKLSsJCQkJCQkJY29uc3QgQUVTX1BSTkdfTUNUICp0dikKLSsgICAgewotKyAg ICB1bnNpZ25lZCBjaGFyIGJ1ZlsxNl0sIGR0WzE2XTsKLSsgICAgaW50IGksIGo7Ci0rICAgIEZJ UFNfeDkzMV9yZXNldCgpOwotKyAgICBGSVBTX3g5MzFfdGVzdF9tb2RlKCk7Ci0rICAgIEZJUFNf eDkzMV9zZXRfa2V5KGtleSwga2V5bGVuKTsKLSsgICAgRklQU194OTMxX3NlZWQodHYtPlYsIDE2 KTsKLSsgICAgbWVtY3B5KGR0LCB0di0+RFQsIDE2KTsKLSsgICAgZm9yIChpID0gMDsgaSA8IDEw MDAwOyBpKyspCi0rCXsKLSsgICAgCUZJUFNfeDkzMV9zZXRfZHQoZHQpOwotKwlGSVBTX3g5MzFf Ynl0ZXMoYnVmLCAxNik7Ci0rCS8qIEluY3JlbWVudCBEVCAqLwotKwlmb3IgKGogPSAxNTsgaiA+ PSAwOyBqLS0pCi0rCQl7Ci0rCQlkdFtqXSsrOwotKwkJaWYgKGR0W2pdKQotKwkJCWJyZWFrOwot KwkJfQotKwl9Ci0rCi0rICAgIGNvbXBhcmUoYnVmLHR2LT5SLCAxNik7Ci0rICAgIH0KLSsKLStp bnQgbWFpbigpCi0rCXsKLSsJcnVuX3Rlc3QoYWVzXzEyOF9tY3Rfa2V5LCAxNiwgJmFlc18xMjhf bWN0X3R2KTsKLSsJcHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAxIGRvbmVcbiIpOwotKwlydW5fdGVz dChhZXNfMTkyX21jdF9rZXksIDI0LCAmYWVzXzE5Ml9tY3RfdHYpOwotKwlwcmludGYoIkZJUFMg UFJORyB0ZXN0IDIgZG9uZVxuIik7Ci0rCXJ1bl90ZXN0KGFlc18yNTZfbWN0X2tleSwgMzIsICZh ZXNfMjU2X21jdF90dik7Ci0rCXByaW50ZigiRklQUyBQUk5HIHRlc3QgMyBkb25lXG4iKTsKLSsJ cmV0dXJuIDA7Ci0rCX0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIv Y3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIv Y3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIv Y3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYy5maXBzCTIwMTItMDItMDcgMTE6MDc6MDIu NTQ4MzkzNzY0ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9maXBz X3JzYV9zZWxmdGVzdC5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTQ4MzkzNzY0ICswMTAwCi1AQCAt MCwwICsxLDQ0NCBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzLTIw MDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK LSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAg ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdh cmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cu b3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBh bmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0r ICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBw bGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAq IDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVk ICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1l cyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NM IFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNv ZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0r ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0 cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VE IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAq IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ Q0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICog T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1 ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgPG9w ZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBuW10gPQotKyJceDAw XHhCQlx4RjhceDJGXHgwOVx4MDZceDgyXHhDRVx4OUNceDIzXHgzOFx4QUNceDJCXHg5RFx4QThc eDcxIgotKyJceEY3XHgzNlx4OERceDA3XHhFRVx4RDRceDEwXHg0M1x4QTRceDQwXHhENlx4QjZc eEYwXHg3NFx4NTRceEY1IgotKyJceDFGXHhCOFx4REZceEJBXHhBRlx4MDNceDVDXHgwMlx4QUJc eDYxXHhFQVx4NDhceENFXHhFQlx4NkZceENEIgotKyJceDQ4XHg3Nlx4RURceDUyXHgwRFx4NjBc eEUxXHhFQ1x4NDZceDE5XHg3MVx4OURceDhBXHg1Qlx4OEJceDgwIgotKyJceDdGXHhBRlx4Qjhc eEUwXHhBM1x4REZceEM3XHgzN1x4NzJceDNFXHhFNlx4QjRceEI3XHhEOVx4M0FceDI1IgotKyJc eDg0XHhFRVx4NkFceDY0XHg5RFx4MDZceDA5XHg1M1x4NzRceDg4XHgzNFx4QjJceDQ1XHg0NVx4 OThceDM5IgotKyJceDRFXHhFMFx4QUFceEIxXHgyRFx4N0JceDYxXHhBNVx4MUZceDUyXHg3QVx4 OUFceDQxXHhGNlx4QzFceDY4IgotKyJceDdGXHhFMlx4NTNceDcyXHg5OFx4Q0FceDJBXHg4Rlx4 NTlceDQ2XHhGOFx4RTVceEZEXHgwOVx4MURceEJEIgotKyJceENCIjsKLSsKLStzdGF0aWMgaW50 IGNvcnJ1cHRfcnNhOwotKwotK3N0YXRpYyBpbnQgc2V0cnNha2V5KFJTQSAqa2V5KQotKyAgICB7 Ci0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVbXSA9ICJceDExIjsKLSsKLSsgICAg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZFtdID0KLSsiXHgwMFx4QTVceERBXHhGQ1x4NTNc eDQxXHhGQVx4RjJceDg5XHhDNFx4QjlceDg4XHhEQlx4MzBceEMxXHhDRCIKLSsiXHhGOFx4M0Zc eDMxXHgyNVx4MUVceDA2XHg2OFx4QjRceDI3XHg4NFx4ODFceDM4XHgwMVx4NTdceDk2XHg0MSIK LSsiXHhCMlx4OTRceDEwXHhCM1x4QzdceDk5XHg4RFx4NkJceEM0XHg2NVx4NzRceDVFXHg1Q1x4 MzlceDI2XHg2OSIKLSsiXHhENlx4ODdceDBEXHhBMlx4QzBceDgyXHhBOVx4MzlceEUzXHg3Rlx4 RENceEI4XHgyRVx4QzlceDNFXHhEQSIKLSsiXHhDOVx4N0ZceEYzXHhBRFx4NTlceDUwXHhBQ1x4 Q0ZceEJDXHgxMVx4MUNceDc2XHhGMVx4QTlceDUyXHg5NCIKLSsiXHg0NFx4RTVceDZBXHhBRlx4 NjhceEM1XHg2Q1x4MDlceDJDXHhEM1x4OERceEMzXHhCRVx4RjVceEQyXHgwQSIKLSsiXHg5M1x4 OTlceDI2XHhFRFx4NEZceDc0XHhBMVx4M0VceEREXHhGQlx4RTFceEExXHhDRVx4Q0NceDQ4XHg5 NCIKLSsiXHhBRlx4OTRceDI4XHhDMlx4QjdceEI4XHg4OFx4M0ZceEU0XHg0Nlx4M0FceDRCXHhD OFx4NUJceDFDXHhCMyIKLSsiXHhDMSI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHBbXSA9Ci0rIlx4MDBceEVFXHhDRlx4QUVceDgxXHhCMVx4QjlceEIzXHhDOVx4MDhceDgx XHgwQlx4MTBceEExXHhCNVx4NjAiCi0rIlx4MDFceDk5XHhFQlx4OUZceDQ0XHhBRVx4RjRceEZE XHhBNFx4OTNceEI4XHgxQVx4OUVceDNEXHg4NFx4RjYiCi0rIlx4MzJceDEyXHg0RVx4RjBceDIz XHg2RVx4NURceDFFXHgzQlx4N0VceDI4XHhGQVx4RTdceEFBXHgwNFx4MEEiCi0rIlx4MkRceDVC XHgyNVx4MjFceDc2XHg0NVx4OURceDFGXHgzOVx4NzVceDQxXHhCQVx4MkFceDU4XHhGQlx4NjUi Ci0rIlx4OTkiOwotKwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBxW10gPQotKyJc eDAwXHhDOVx4N0ZceEIxXHhGMFx4MjdceEY0XHg1M1x4RjZceDM0XHgxMlx4MzNceEVBXHhBQVx4 RDFceEQ5IgotKyJceDM1XHgzRlx4NkNceDQyXHhEMFx4ODhceDY2XHhCMVx4RDBceDVBXHgwRlx4 MjBceDM1XHgwMlx4OEJceDlEIgotKyJceDg2XHg5OFx4NDBceEI0XHgxNlx4NjZceEI0XHgyRVx4 OTJceEVBXHgwRFx4QTNceEI0XHgzMlx4MDRceEI1IgotKyJceENGXHhDRVx4MzNceDUyXHg1Mlx4 NERceDA0XHgxNlx4QTVceEE0XHg0MVx4RTdceDAwXHhBRlx4NDZceDE1IgotKyJceDAzIjsKLSsK LSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZG1wMVtdID0KLSsiXHg1NFx4NDlceDRD XHhBNlx4M0VceEJBXHgwM1x4MzdceEU0XHhFMlx4NDBceDIzXHhGQ1x4RDZceDlBXHg1QSIKLSsi XHhFQlx4MDdceEREXHhEQ1x4MDFceDgzXHhBNFx4RDBceEFDXHg5Qlx4NTRceEIwXHg1MVx4RjJc eEIxXHgzRSIKLSsiXHhEOVx4NDlceDA5XHg3NVx4RUFceEI3XHg3NFx4MTRceEZGXHg1OVx4QzFc eEY3XHg2OVx4MkVceDlBXHgyRSIKLSsiXHgyMFx4MkJceDM4XHhGQ1x4OTFceDBBXHg0N1x4NDFc eDc0XHhBRFx4QzlceDNDXHgxRlx4NjdceEM5XHg4MSI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGRtcTFbXSA9Ci0rIlx4NDdceDFFXHgwMlx4OTBceEZGXHgwQVx4RjBceDc1 XHgwM1x4NTFceEI3XHhGOFx4NzhceDg2XHg0Q1x4QTkiCi0rIlx4NjFceEFEXHhCRFx4M0FceDhB XHg3RVx4OTlceDFDXHg1Q1x4MDVceDU2XHhBOVx4NENceDMxXHg0Nlx4QTciCi0rIlx4RjlceDgw XHgzRlx4OEZceDZGXHg4QVx4RTNceDQyXHhFOVx4MzFceEZEXHg4QVx4RTRceDdBXHgyMlx4MEQi Ci0rIlx4MUJceDk5XHhBNFx4OTVceDg0XHg5OFx4MDdceEZFXHgzOVx4RjlceDI0XHg1QVx4OThc eDM2XHhEQVx4M0QiOwotKyAgICAKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXFt cFtdID0KLSsiXHgwMFx4QjBceDZDXHg0Rlx4REFceEJCXHg2M1x4MDFceDE5XHg4RFx4MjZceDVC XHhEQlx4QUVceDk0XHgyMyIKLSsiXHhCM1x4ODBceEYyXHg3MVx4RjdceDM0XHg1M1x4ODhceDUw XHg5M1x4MDdceDdGXHhDRFx4MzlceEUyXHgxMSIKLSsiXHg5Rlx4QzlceDg2XHgzMlx4MTVceDRG XHg1OFx4ODNceEIxXHg2N1x4QTlceDY3XHhCRlx4NDBceDJCXHg0RSIKLSsiXHg5RVx4MkVceDBG XHg5Nlx4NTZceEU2XHg5OFx4RUFceDM2XHg2Nlx4RURceEZCXHgyNVx4NzlceDgwXHgzOSIKLSsi XHhGNyI7Ci0rCi0rICAgIGtleS0+biA9IEJOX2JpbjJibihuLCBzaXplb2YobiktMSwga2V5LT5u KTsKLSsgICAgaWYgKGNvcnJ1cHRfcnNhKQotKwlCTl9zZXRfYml0KGtleS0+biwgMTAyNCk7Ci0r ICAgIGtleS0+ZSA9IEJOX2JpbjJibihlLCBzaXplb2YoZSktMSwga2V5LT5lKTsKLSsgICAga2V5 LT5kID0gQk5fYmluMmJuKGQsIHNpemVvZihkKS0xLCBrZXktPmQpOwotKyAgICBrZXktPnAgPSBC Tl9iaW4yYm4ocCwgc2l6ZW9mKHApLTEsIGtleS0+cCk7Ci0rICAgIGtleS0+cSA9IEJOX2JpbjJi bihxLCBzaXplb2YocSktMSwga2V5LT5xKTsKLSsgICAga2V5LT5kbXAxID0gQk5fYmluMmJuKGRt cDEsIHNpemVvZihkbXAxKS0xLCBrZXktPmRtcDEpOwotKyAgICBrZXktPmRtcTEgPSBCTl9iaW4y Ym4oZG1xMSwgc2l6ZW9mKGRtcTEpLTEsIGtleS0+ZG1xMSk7Ci0rICAgIGtleS0+aXFtcCA9IEJO X2JpbjJibihpcW1wLCBzaXplb2YoaXFtcCktMSwga2V5LT5pcW1wKTsKLSsgICAgcmV0dXJuIDE7 Ci0rICAgIH0KLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9yc2EoKQotKyAgICB7Ci0rICAgIGNvcnJ1 cHRfcnNhID0gMTsKLSsgICAgfQotKwotKy8qIEtub3duIEFuc3dlciBUZXN0IChLQVQpIGRhdGEg Zm9yIHRoZSBhYm92ZSBSU0EgcHJpdmF0ZSBrZXkgc2lnbmluZwotKyAqIGthdF90YnMuCi0rICov Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X3Ric1tdID0gIk9wZW5TU0wgRklQ UyAxNDAtMiBQdWJsaWMgS2V5IFJTQSBLQVQiOwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGthdF9SU0FfUFNTX1NIQTFbXSA9IHsKLSsgIDB4MkQsIDB4QUYsIDB4NkUsIDB4QzIsIDB4 OTgsIDB4RkIsIDB4OEEsIDB4QTEsIDB4QjksIDB4NDYsIDB4REEsIDB4MEYsCi0rICAweDAxLCAw eDFFLCAweDM3LCAweDkzLCAweEMyLCAweDU1LCAweDI3LCAweEU0LCAweDFELCAweEQyLCAweDkw LCAweEJCLAotKyAgMHhGNCwgMHhCRiwgMHg0QSwgMHg3NCwgMHgzOSwgMHg1MSwgMHhCQiwgMHhF OCwgMHgwQywgMHhCNywgMHhGOCwgMHhEMywKLSsgIDB4RDEsIDB4REYsIDB4RTcsIDB4QkUsIDB4 ODAsIDB4MDUsIDB4QzMsIDB4QjUsIDB4QzcsIDB4ODMsIDB4RDUsIDB4NEMsCi0rICAweDdGLCAw eDQ5LCAweEZCLCAweDNGLCAweDI5LCAweDlCLCAweEUxLCAweDEyLCAweDUxLCAweDYwLCAweEQw LCAweEE3LAotKyAgMHgwRCwgMHhBOSwgMHgyOCwgMHg1NiwgMHg3MywgMHhEOSwgMHgwNywgMHhF MywgMHg1RSwgMHgzRiwgMHg5QiwgMHhGNSwKLSsgIDB4QjYsIDB4RjMsIDB4RjIsIDB4NUUsIDB4 NzQsIDB4QzksIDB4ODMsIDB4ODEsIDB4NDcsIDB4RjAsIDB4QzUsIDB4NDUsCi0rICAweDBBLCAw eEU5LCAweDhFLCAweDM4LCAweEQ3LCAweDE4LCAweEM2LCAweDJBLCAweDBGLCAweEY4LCAweEI3 LCAweDMxLAotKyAgMHhENiwgMHg1NSwgMHhFNCwgMHg2NiwgMHg3OCwgMHg4MSwgMHhENCwgMHhF NiwgMHhEQiwgMHg5RiwgMHhCQSwgMHhFOCwKLSsgIDB4MjMsIDB4QjUsIDB4N0YsIDB4REMsIDB4 MDgsIDB4RUEsIDB4RDUsIDB4MjYsIDB4MUUsIDB4MjAsIDB4MjUsIDB4ODQsCi0rICAweDI2LCAw eEM2LCAweDc5LCAweEM5LCAweDlCLCAweDNELCAweDdFLCAweEE5Ci0rfTsKLSsKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEyMjRbXSA9IHsKLSsgIDB4MzksIDB4 NEEsIDB4NkEsIDB4MjAsIDB4QkMsIDB4RTksIDB4MzMsIDB4RUQsIDB4RUYsIDB4QzUsIDB4NTgs IDB4QTcsCi0rICAweEZFLCAweDgxLCAweEM0LCAweDM2LCAweDUwLCAweDlBLCAweDJDLCAweDgy LCAweDk4LCAweDA4LCAweDk1LCAweEZBLAotKyAgMHhCMSwgMHg5RSwgMHhEMiwgMHg1NSwgMHg2 MSwgMHg4NywgMHgyMSwgMHg1OSwgMHg4NywgMHg3QiwgMHgxRiwgMHg1NywKLSsgIDB4MzAsIDB4 OUQsIDB4MEQsIDB4NEEsIDB4MDYsIDB4RUIsIDB4NTIsIDB4MzcsIDB4NTUsIDB4NTQsIDB4MUMs IDB4ODksCi0rICAweDgzLCAweDc1LCAweDU5LCAweDY1LCAweDY0LCAweDkwLCAweDJFLCAweDE2 LCAweENDLCAweDg2LCAweDA1LCAweEVFLAotKyAgMHhCMSwgMHhFNiwgMHg3QiwgMHhCQSwgMHgx NiwgMHg3NSwgMHgwRCwgMHgwQywgMHg2NCwgMHgwQiwgMHhBQiwgMHgyMiwKLSsgIDB4MTUsIDB4 NzgsIDB4NkIsIDB4NkYsIDB4QTQsIDB4RkIsIDB4NzcsIDB4NDAsIDB4NjQsIDB4NjIsIDB4RDEs IDB4QjUsCi0rICAweDM3LCAweDFFLCAweEUwLCAweDNELCAweEE4LCAweEY5LCAweEQyLCAweEJE LCAweEFBLCAweDM4LCAweDI0LCAweDQ5LAotKyAgMHg1OCwgMHhEMiwgMHg3NCwgMHg4NSwgMHhG NCwgMHhCNSwgMHg5MywgMHg4RSwgMHhGNSwgMHgwMywgMHhFQSwgMHgyRCwKLSsgIDB4QzgsIDB4 NTIsIDB4RkEsIDB4Q0YsIDB4N0UsIDB4MzUsIDB4QjAsIDB4NkEsIDB4QUYsIDB4OTUsIDB4QzAs IDB4MDAsCi0rICAweDU0LCAweDc2LCAweDNELCAweDBDLCAweDlDLCAweEIyLCAweEVFLCAweEMw Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEyNTZb XSA9IHsKLSsgIDB4NkQsIDB4M0QsIDB4QkUsIDB4OEYsIDB4NjAsIDB4NkQsIDB4MjUsIDB4MTQs IDB4RjAsIDB4MzEsIDB4RTMsIDB4ODksCi0rICAweDAwLCAweDk3LCAweEZBLCAweDk5LCAweDcx LCAweDI4LCAweEU1LCAweDEwLCAweDI1LCAweDlBLCAweEYzLCAweDhGLAotKyAgMHg3QiwgMHhD NSwgMHhBOCwgMHg0QSwgMHg3NCwgMHg1MSwgMHgzNiwgMHhFMiwgMHg4RCwgMHg3RCwgMHg3Mywg MHgyOCwKLSsgIDB4QzEsIDB4NzcsIDB4QzYsIDB4MjcsIDB4OTcsIDB4MDAsIDB4OEIsIDB4MDAs IDB4QTMsIDB4OTYsIDB4NzMsIDB4NEUsCi0rICAweDdELCAweDJFLCAweDJDLCAweDM0LCAweDY4 LCAweDhDLCAweDhFLCAweERGLCAweDlELCAweDQ5LCAweDQ3LCAweDA1LAotKyAgMHhBQiwgMHhG NSwgMHgwMSwgMHhENiwgMHg4MSwgMHg0NywgMHg3MCwgMHhGNSwgMHgxRCwgMHg2RCwgMHgyNiwg MHhCQSwKLSsgIDB4MkYsIDB4N0EsIDB4NTQsIDB4NTMsIDB4NEUsIDB4RUQsIDB4NzEsIDB4RDks IDB4NUEsIDB4RjMsIDB4REEsIDB4QjYsCi0rICAweDBCLCAweDQ3LCAweDM0LCAweEFGLCAweDkw LCAweERDLCAweEM4LCAweEQ5LCAweDZGLCAweDU2LCAweENELCAweDlGLAotKyAgMHgyMSwgMHhC NywgMHg3RSwgMHhBRCwgMHg3QywgMHgyRiwgMHg3NSwgMHg1MCwgMHg0NywgMHgxMiwgMHhFNCwg MHg2RCwKLSsgIDB4NUYsIDB4QjcsIDB4MDEsIDB4REYsIDB4QzMsIDB4MTEsIDB4NkMsIDB4QTks IDB4OUUsIDB4NDksIDB4QjksIDB4RjYsCi0rICAweDcyLCAweEY0LCAweEY2LCAweEVGLCAweDg4 LCAweDFFLCAweDJELCAweDFDCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBr YXRfUlNBX1BTU19TSEEzODRbXSA9IHsKLSsgIDB4NDAsIDB4RkIsIDB4QTEsIDB4MjEsIDB4RjQs IDB4QjIsIDB4NDAsIDB4OUEsIDB4QjQsIDB4MzEsIDB4QTgsIDB4RjIsCi0rICAweEVDLCAweDFD LCAweEM0LCAweEM4LCAweDdDLCAweDIyLCAweDY1LCAweDlDLCAweDU3LCAweDQ1LCAweENELCAw eDVFLAotKyAgMHg4NiwgMHgwMCwgMHhGNywgMHgyNSwgMHg3OCwgMHhERSwgMHhEQywgMHg3QSwg MHg3MSwgMHg0NCwgMHg5QSwgMHhDRCwKLSsgIDB4QUEsIDB4MjUsIDB4RjQsIDB4QjIsIDB4RkMs IDB4RjAsIDB4NzUsIDB4RDksIDB4MkYsIDB4NzgsIDB4MjMsIDB4N0YsCi0rICAweDZGLCAweDAy LCAweEVGLCAweEMxLCAweEFGLCAweEE2LCAweDI4LCAweDE2LCAweDMxLCAweERDLCAweDQyLCAw eDZDLAotKyAgMHhCMiwgMHg0NCwgMHhFNSwgMHg0RCwgMHg2NiwgMHhBMiwgMHhFNiwgMHg3MSwg MHhGMywgMHhBQywgMHg0RiwgMHhGQiwKLSsgIDB4OTEsIDB4Q0EsIDB4RjUsIDB4NzAsIDB4RUYs IDB4NkIsIDB4OUQsIDB4QTQsIDB4RUYsIDB4RDksIDB4M0QsIDB4MkYsCi0rICAweDNBLCAweEJF LCAweDg5LCAweDM4LCAweDU5LCAweDAxLCAweEJBLCAweERBLCAweDMyLCAweEFELCAweDQyLCAw eDg5LAotKyAgMHg5OCwgMHg4QiwgMHgzOSwgMHg0NCwgMHhGMCwgMHhGQywgMHgzOCwgMHhBQywg MHg4NywgMHgxRiwgMHhDQSwgMHg2RiwKLSsgIDB4NDgsIDB4RjYsIDB4QUUsIDB4RDcsIDB4NDUs IDB4RUUsIDB4QUUsIDB4ODgsIDB4MEUsIDB4NjAsIDB4RjQsIDB4NTUsCi0rICAweDQ4LCAweDQ0 LCAweEVFLCAweDFGLCAweDkwLCAweDE4LCAweDRCLCAweEYxCi0rfTsKLSsKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEE1MTJbXSA9IHsKLSsgIDB4MDcsIDB4MUUs IDB4RDgsIDB4RDUsIDB4MDUsIDB4RTgsIDB4RTYsIDB4RTYsIDB4NTcsIDB4QUUsIDB4NjMsIDB4 OEMsCi0rICAweEM2LCAweDgzLCAweEI3LCAweEEwLCAweDU5LCAweEJCLCAweEYyLCAweEM2LCAw eDhGLCAweDEyLCAweDUzLCAweDlBLAotKyAgMHg5QiwgMHg1NCwgMHg5RSwgMHhCMywgMHhDMSwg MHgxRCwgMHgyMywgMHg0RCwgMHg1MSwgMHhFRCwgMHg5RSwgMHhERCwKLSsgIDB4NEIsIDB4RjMs IDB4NDYsIDB4OUIsIDB4NkIsIDB4RjYsIDB4N0MsIDB4MjQsIDB4NjAsIDB4NzksIDB4MjMsIDB4 MzksCi0rICAweDAxLCAweDFDLCAweDUxLCAweENCLCAweEQ4LCAweEU5LCAweDlBLCAweDAxLCAw eDY3LCAweDVGLCAweEZFLCAweEQ3LAotKyAgMHg3QywgMHhFMywgMHg3RiwgMHhFRCwgMHhEQiwg MHg4NywgMHhCQiwgMHhGMCwgMHgzRCwgMHg3OCwgMHg1NSwgMHg2MSwKLSsgIDB4NTcsIDB4RTMs IDB4MEYsIDB4RTMsIDB4RDIsIDB4OUQsIDB4MEMsIDB4MkEsIDB4MjAsIDB4QjAsIDB4ODUsIDB4 MTMsCi0rICAweEM1LCAweDQ3LCAweDM0LCAweDBELCAweDMyLCAweDE1LCAweEM4LCAweEFFLCAw eDlBLCAweDZBLCAweDM5LCAweDYzLAotKyAgMHgyRCwgMHg2MCwgMHhGNSwgMHg0QywgMHhERiwg MHg4QSwgMHg0OCwgMHg0QiwgMHhCRiwgMHhGNCwgMHhBOCwgMHhGRSwKLSsgIDB4NzYsIDB4RjIs IDB4MzIsIDB4MUIsIDB4OUMsIDB4N0MsIDB4Q0EsIDB4RkUsIDB4N0YsIDB4ODAsIDB4QzIsIDB4 ODgsCi0rICAweDVDLCAweDk3LCAweDcwLCAweEI0LCAweDI2LCAweEM5LCAweDE0LCAweDhCCi0r fTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTFbXSA9IHsKLSsg IDB4NzEsIDB4RUUsIDB4MUEsIDB4QzAsIDB4RkUsIDB4MDEsIDB4OTMsIDB4NTQsIDB4NzksIDB4 NUMsIDB4RjIsIDB4NEMsCi0rICAweDRBLCAweEZELCAweDFBLCAweDA1LCAweDhGLCAweDY0LCAw eEIxLCAweDZELCAweDYxLCAweDMzLCAweDhELCAweDlCLAotKyAgMHhFNywgMHhGRCwgMHg2MCwg MHhBMywgMHg4MywgMHhCNSwgMHhBMywgMHg1MSwgMHg1NSwgMHg3NywgMHg5MCwgMHhDRiwKLSsg IDB4REMsIDB4MjIsIDB4MzcsIDB4OEUsIDB4RDAsIDB4RTEsIDB4QUUsIDB4MDksIDB4RTMsIDB4 M0QsIDB4MUUsIDB4RjgsCi0rICAweDgwLCAweEQxLCAweDhCLCAweEMyLCAweEVDLCAweDBBLCAw eEQ3LCAweDZCLCAweDg4LCAweDhCLCAweDhCLCAweEExLAotKyAgMHgyMCwgMHgyMiwgMHhCRSwg MHg1OSwgMHg1QiwgMHhFMCwgMHgyMywgMHgyNCwgMHhBMSwgMHg0OSwgMHgzMCwgMHhCQSwKLSsg IDB4QTksIDB4OUUsIDB4RTgsIDB4QjEsIDB4OEEsIDB4NjIsIDB4MTYsIDB4QkYsIDB4NEUsIDB4 Q0EsIDB4MkUsIDB4NEUsCi0rICAweEJDLCAweDI5LCAweEE4LCAweDY3LCAweDEzLCAweEI3LCAw eDlGLCAweDFELCAweDA0LCAweDQ0LCAweEU1LCAweDVGLAotKyAgMHgzNSwgMHgwNywgMHgxMSwg MHhCQywgMHhFRCwgMHgxOSwgMHgzNywgMHgyMSwgMHhDRiwgMHgyMywgMHg0OCwgMHgxRiwKLSsg IDB4NzIsIDB4MDUsIDB4REUsIDB4RTYsIDB4RTgsIDB4N0YsIDB4MzMsIDB4OEEsIDB4NzYsIDB4 NEIsIDB4MkYsIDB4OTUsCi0rICAweERGLCAweEYxLCAweDVGLCAweDg0LCAweDgwLCAweEQ5LCAw eDQ2LCAweEI0Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NI QTIyNFtdID0gewotKyAgMHg2MiwgMHhBQSwgMHg3OSwgMHhBOSwgMHgxOCwgMHgwRSwgMHg1Riwg MHg4QywgMHhCQiwgMHhCNywgMHgxNSwgMHhGOSwKLSsgIDB4MjUsIDB4QkIsIDB4RkEsIDB4RDQs IDB4M0EsIDB4MzQsIDB4RUQsIDB4OUUsIDB4QTAsIDB4QTksIDB4MTgsIDB4OEQsCi0rICAweDVC LCAweDU1LCAweDlBLCAweDdFLCAweDFFLCAweDA4LCAweDA4LCAweDYwLCAweEM1LCAweDFBLCAw eEM1LCAweDg5LAotKyAgMHgwOCwgMHhFMiwgMHgxQiwgMHhCRCwgMHg2MiwgMHg1MCwgMHgxNywg MHg3NiwgMHgzMCwgMHgyQywgMHg5RSwgMHhDRCwKLSsgIDB4QTQsIDB4MDIsIDB4QUQsIDB4QjEs IDB4NkQsIDB4NDQsIDB4NkQsIDB4RDUsIDB4QzYsIDB4NDUsIDB4NDEsIDB4RTUsCi0rICAweEVF LCAweDFGLCAweDhELCAweDdFLCAweDA4LCAweDE2LCAweEE2LCAweEUxLCAweDVFLCAweDBCLCAw eEE5LCAweENDLAotKyAgMHhEQiwgMHg1OSwgMHg1NSwgMHg4NywgMHgwOSwgMHgyNSwgMHg3MCwg MHg4NiwgMHg4NCwgMHgwMiwgMHhDNiwgMHgzQiwKLSsgIDB4MEIsIDB4NDQsIDB4NEMsIDB4NDYs IDB4OTUsIDB4RjQsIDB4RjgsIDB4NUEsIDB4OTEsIDB4MjgsIDB4M0UsIDB4QjIsCi0rICAweDU4 LCAweDJFLCAweDA2LCAweDQ1LCAweDQ5LCAweEUwLCAweDkyLCAweEUyLCAweEMwLCAweDY2LCAw eEU2LCAweDM1LAotKyAgMHhEOSwgMHg3OSwgMHg3RiwgMHgxNywgMHg1RSwgMHgwMiwgMHg3Mywg MHgwNCwgMHg3NywgMHg4MiwgMHhFNiwgMHhEQywKLSsgIDB4NDAsIDB4MjEsIDB4ODksIDB4OEIs IDB4MzcsIDB4M0UsIDB4MUUsIDB4OEQKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGthdF9SU0FfU0hBMjU2W10gPSB7Ci0rICAweDBELCAweDU1LCAweEUyLCAweEFBLCAweDgx LCAweERCLCAweDhFLCAweDgyLCAweDA1LCAweDE3LCAweEE1LCAweDIzLAotKyAgMHhFNywgMHgz QiwgMHgxRCwgMHhBRiwgMHhGQiwgMHg4QywgMHhEMCwgMHg4MSwgMHgyMCwgMHg3QiwgMHhBQSwg MHgyMywKLSsgIDB4OTIsIDB4ODcsIDB4OEMsIDB4RDEsIDB4NTMsIDB4ODUsIDB4MTYsIDB4REMs IDB4QkUsIDB4QUQsIDB4NkYsIDB4MzUsCi0rICAweDk4LCAweDJELCAweDY5LCAweDg0LCAweEJG LCAweEQ5LCAweDhBLCAweDAxLCAweDE3LCAweDU4LCAweEIyLCAweDZFLAotKyAgMHgyQywgMHg0 NCwgMHg5QiwgMHg5MCwgMHhGMSwgMHhGQiwgMHg1MSwgMHhFOCwgMHg2QSwgMHg5MCwgMHgyRCwg MHgxOCwKLSsgIDB4MEUsIDB4QzAsIDB4OTAsIDB4MTAsIDB4MjQsIDB4QTksIDB4MUQsIDB4QjMs IDB4NTgsIDB4N0EsIDB4OTEsIDB4MzAsCi0rICAweEJFLCAweDIyLCAweEM3LCAweEQzLCAweEVD LCAweEMzLCAweDA5LCAweDVELCAweEJGLCAweEUyLCAweDgwLCAweDNBLAotKyAgMHg3QywgMHg4 NSwgMHhCNCwgMHhCQywgMHhEMSwgMHhFOSwgMHhGMCwgMHg1QywgMHhERSwgMHg4MSwgMHhBNiwg MHgzOCwKLSsgIDB4QjgsIDB4NDIsIDB4QkIsIDB4ODYsIDB4QzUsIDB4OUQsIDB4Q0UsIDB4N0Ms IDB4MkMsIDB4RUUsIDB4RDEsIDB4REEsCi0rICAweDI3LCAweDQ4LCAweDJCLCAweEY1LCAweEFC LCAweEI5LCAweEY3LCAweDgwLCAweEQxLCAweDkwLCAweDI3LCAweDkwLAotKyAgMHhCRCwgMHg0 NCwgMHg5NywgMHg2MCwgMHhDRCwgMHg1NywgMHhDMCwgMHg3QQotK307Ci0rCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEzODRbXSA9IHsKLSsgIDB4MUQsIDB4RTMsIDB4 NkEsIDB4REQsIDB4MjcsIDB4NEMsIDB4QzAsIDB4QTUsIDB4MjcsIDB4RUYsIDB4RTYsIDB4MUYs Ci0rICAweEQyLCAweDkxLCAweDY4LCAweDU5LCAweDA0LCAweEFFLCAweEJELCAweDk5LCAweDYz LCAweDU2LCAweDQ3LCAweEM3LAotKyAgMHg2RiwgMHgyMiwgMHgxNiwgMHg0OCwgMHhEMCwgMHhG OSwgMHgxOCwgMHhBOSwgMHhDQSwgMHhGQSwgMHg1RCwgMHg1QywKLSsgIDB4QTcsIDB4NjUsIDB4 NTIsIDB4OEEsIDB4QzgsIDB4NDQsIDB4N0UsIDB4ODYsIDB4NUQsIDB4QTksIDB4QTYsIDB4NTUs Ci0rICAweDY1LCAweDNFLCAweEQ5LCAweDJELCAweDAyLCAweDM4LCAweEE4LCAweDc5LCAweDI4 LCAweDdGLCAweEI2LCAweENGLAotKyAgMHg4MiwgMHhERCwgMHg3RSwgMHg1NSwgMHhFMSwgMHhC MSwgMHhCQywgMHhFMiwgMHgxOSwgMHgyQiwgMHgzMCwgMHhDMiwKLSsgIDB4MUIsIDB4MkIsIDB4 QjAsIDB4ODIsIDB4NDYsIDB4QUMsIDB4NEIsIDB4RDEsIDB4RTIsIDB4N0QsIDB4RUIsIDB4OEMs Ci0rICAweEZGLCAweDk1LCAweEU5LCAweDZBLCAweDFDLCAweDNELCAweDRELCAweEJGLCAweDhG LCAweDhCLCAweDlDLCAweENELAotKyAgMHhFQSwgMHg4NSwgMHhFRSwgMHgwMCwgMHhEQywgMHgx QywgMHhBNywgMHhFQiwgMHhEMCwgMHg4RiwgMHg5OSwgMHhGMSwKLSsgIDB4MTYsIDB4MjgsIDB4 MjQsIDB4NjQsIDB4MDQsIDB4MzksIDB4MkQsIDB4NTgsIDB4MUUsIDB4MzcsIDB4REMsIDB4MDQs Ci0rICAweEJELCAweDMxLCAweEEyLCAweDJGLCAweEIzLCAweDM1LCAweDU2LCAweEJGCi0rfTsK LSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTUxMltdID0gewotKyAg MHg2OSwgMHg1MiwgMHgxQiwgMHg1MSwgMHg1RSwgMHgwNiwgMHhDQSwgMHg5QiwgMHgxNiwgMHg1 MSwgMHg1RCwgMHhDRiwKLSsgIDB4NDksIDB4MjUsIDB4NEEsIDB4QTEsIDB4NkEsIDB4NzcsIDB4 NEMsIDB4MzYsIDB4NDAsIDB4RjgsIDB4QjIsIDB4OUEsCi0rICAweDE1LCAweEVBLCAweDVDLCAw eEU1LCAweEU2LCAweDgyLCAweEUwLCAweDg2LCAweDgyLCAweDZCLCAweDMyLCAweEYxLAotKyAg MHgwNCwgMHhDMSwgMHg1QSwgMHgxQSwgMHhFRCwgMHgxRSwgMHg5QSwgMHhCNiwgMHg0QywgMHg1 NCwgMHg5RiwgMHhEOCwKLSsgIDB4OEQsIDB4Q0MsIDB4QUMsIDB4OEEsIDB4QkIsIDB4OUMsIDB4 ODIsIDB4M0YsIDB4QTYsIDB4NTMsIDB4NjIsIDB4QjUsCi0rICAweDgwLCAweEUyLCAweEJDLCAw eERELCAweDY3LCAweDJCLCAweEQ5LCAweDNGLCAweEU0LCAweDc1LCAweDkyLCAweDZCLAotKyAg MHhBRiwgMHg2MiwgMHg3QywgMHg1MiwgMHhGMCwgMHhFRSwgMHgzMywgMHhERiwgMHgxQiwgMHgx RCwgMHg0NywgMHhFNiwKLSsgIDB4NTksIDB4NTYsIDB4QTUsIDB4QjksIDB4NUMsIDB4RTYsIDB4 NzcsIDB4NzgsIDB4MTYsIDB4NjMsIDB4ODQsIDB4MDUsCi0rICAweDZGLCAweDBFLCAweDJCLCAw eDMxLCAweDlELCAweEY3LCAweDdGLCAweEIyLCAweDY0LCAweDcxLCAweEUwLCAweDJELAotKyAg MHgzRSwgMHg2MiwgMHhDRSwgMHhCNSwgMHgzRiwgMHg4OCwgMHhERiwgMHgyRCwgMHhBQiwgMHg5 OCwgMHg2NSwgMHg5MSwKLSsgIDB4REYsIDB4NzAsIDB4MTQsIDB4QTUsIDB4M0YsIDB4MzYsIDB4 QUIsIDB4ODQKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkz MV9TSEExW10gPSB7Ci0rICAweDg2LCAweEI0LCAweDE4LCAweEJBLCAweEQxLCAweDgwLCAweEI2 LCAweDdDLCAweDQyLCAweDQ1LCAweDRELCAweERGLAotKyAgMHhFOSwgMHgyRCwgMHhFMSwgMHg4 MywgMHg1RiwgMHhCNSwgMHgyRiwgMHhDOSwgMHhDRCwgMHhDNCwgMHhCMiwgMHg3NSwKLSsgIDB4 ODAsIDB4QTQsIDB4RjEsIDB4NEEsIDB4RTcsIDB4ODMsIDB4MTIsIDB4MUUsIDB4MUUsIDB4MTQs IDB4QjgsIDB4QUMsCi0rICAweDM1LCAweEUyLCAweEFBLCAweDBCLCAweDVDLCAweEY4LCAweDM4 LCAweDRELCAweDA0LCAweEVFLCAweEE5LCAweDk3LAotKyAgMHg3MCwgMHhGQiwgMHg1RSwgMHhF NywgMHhCNywgMHhFMywgMHg2MiwgMHgyMywgMHg0QiwgMHgzOCwgMHhCRSwgMHhENiwKLSsgIDB4 NTMsIDB4MTUsIDB4RjcsIDB4REYsIDB4ODcsIDB4QjQsIDB4MEUsIDB4Q0MsIDB4QjEsIDB4MUEs IDB4MTEsIDB4MTksCi0rICAweEVFLCAweDUxLCAweENDLCAweDkyLCAweERELCAweEJDLCAweDYz LCAweDI5LCAweDYzLCAweDBDLCAweDU5LCAweEQ3LAotKyAgMHg2RiwgMHg0QywgMHgzQywgMHgz NywgMHg1QiwgMHgzNywgMHgwMywgMHg2MSwgMHg3RCwgMHgyNCwgMHgxQywgMHg5OSwKLSsgIDB4 NDgsIDB4QUYsIDB4ODIsIDB4RkUsIDB4MzIsIDB4NDEsIDB4OUIsIDB4QjIsIDB4REIsIDB4RUEs IDB4RUQsIDB4NzYsCi0rICAweDhFLCAweDZFLCAweENBLCAweDdFLCAweDRFLCAweDE0LCAweEJB LCAweDMwLCAweDg0LCAweDFDLCAweEIzLCAweDY3LAotKyAgMHhBMywgMHgyOSwgMHg4MCwgMHg3 MCwgMHg1NCwgMHg2OCwgMHg3RCwgMHg0OQotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIga2F0X1JTQV9YOTMxX1NIQTI1NltdID0gewotKyAgMHg3RSwgMHhBMiwgMHg3NywgMHhG RSwgMHhCOCwgMHg1NCwgMHg4QSwgMHhDNywgMHg3RiwgMHg2NCwgMHg1NCwgMHg4OSwKLSsgIDB4 RTUsIDB4NTIsIDB4MTUsIDB4OEUsIDB4NTIsIDB4OTYsIDB4NEUsIDB4QTYsIDB4NTgsIDB4OTIs IDB4MUMsIDB4REQsCi0rICAweEVBLCAweEEyLCAweDJELCAweDVDLCAweEQxLCAweDYyLCAweDAw LCAweDQ5LCAweDA1LCAweDk1LCAweDczLCAweENGLAotKyAgMHgxNiwgMHg3NiwgMHg2OCwgMHhG NiwgMHhDNiwgMHg1RSwgMHg4MCwgMHhCOCwgMHhCOCwgMHg3QiwgMHhDOCwgMHg5QiwKLSsgIDB4 QzYsIDB4NTMsIDB4ODgsIDB4MjYsIDB4MjAsIDB4ODgsIDB4NzMsIDB4QjYsIDB4MTMsIDB4Qjgs IDB4RjAsIDB4NEIsCi0rICAweDAwLCAweDg1LCAweEYzLCAweERELCAweDA3LCAweDUwLCAweEVC LCAweDIwLCAweEM0LCAweDM4LCAweDBFLCAweDk4LAotKyAgMHhBRCwgMHg0RSwgMHg0OSwgMHgy QywgMHhENywgMHg2NSwgMHhBNSwgMHgxOSwgMHgwRSwgMHg1OSwgMHgwMSwgMHhFQywKLSsgIDB4 N0UsIDB4NzUsIDB4ODksIDB4NjksIDB4MkUsIDB4NjMsIDB4NzYsIDB4ODUsIDB4NDYsIDB4OEQs IDB4QTAsIDB4OEMsCi0rICAweDMzLCAweDFELCAweDgyLCAweDhDLCAweDAzLCAweEVBLCAweDY5 LCAweDg4LCAweDM1LCAweEExLCAweDQyLCAweEJELAotKyAgMHgyMSwgMHhFRCwgMHg4RCwgMHhC QywgMHhCQywgMHhEQiwgMHgzMCwgMHhGRiwgMHg4NiwgMHhGMCwgMHg1QiwgMHhEQywKLSsgIDB4 RTMsIDB4RTIsIDB4RTgsIDB4MEEsIDB4MEEsIDB4MjksIDB4OTQsIDB4ODAKLSt9OwotKwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEEzODRbXSA9IHsKLSsgIDB4 NUMsIDB4N0QsIDB4OTYsIDB4MzUsIDB4RUMsIDB4N0UsIDB4MTEsIDB4MzgsIDB4QkIsIDB4N0Is IDB4RUMsIDB4N0IsCi0rICAweEYyLCAweDgyLCAweDhFLCAweDk5LCAweEJELCAweEVGLCAweEQ4 LCAweEFFLCAweEQ3LCAweDM5LCAweDM3LCAweENCLAotKyAgMHhFNiwgMHg0RiwgMHg1RSwgMHgw QSwgMHgxMywgMHhFNCwgMHgyRSwgMHg0MCwgMHhCOSwgMHhCRSwgMHgyRSwgMHhFMywKLSsgIDB4 RUYsIDB4NzgsIDB4ODMsIDB4MTgsIDB4NDQsIDB4MzUsIDB4OUMsIDB4OEUsIDB4RDcsIDB4NEEs IDB4NjMsIDB4RjYsCi0rICAweDU3LCAweEMyLCAweEIwLCAweDA4LCAweDUxLCAweDczLCAweENG LCAweENBLCAweDk5LCAweDY2LCAweEVFLCAweDMxLAotKyAgMHhEOCwgMHg2OSwgMHhFOSwgMHhB QiwgMHgxMywgMHgyNywgMHg3QiwgMHg0MSwgMHgxRSwgMHg2RCwgMHg4RCwgMHhGMSwKLSsgIDB4 M0UsIDB4OUMsIDB4MzUsIDB4OTUsIDB4NTgsIDB4REQsIDB4MkIsIDB4RDUsIDB4QTAsIDB4NjAs IDB4NDEsIDB4NzksCi0rICAweDI0LCAweDIyLCAweEU0LCAweEI3LCAweEJGLCAweDQ3LCAweDUz LCAweEY2LCAweDM0LCAweEQ1LCAweDdDLCAweEZGLAotKyAgMHgwRSwgMHgwOSwgMHhFRSwgMHgy RSwgMHhFMiwgMHgzNywgMHhCOSwgMHhERSwgMHhDNSwgMHgxMiwgMHg0NCwgMHgzNSwKLSsgIDB4 RUYsIDB4MDEsIDB4RTYsIDB4NUUsIDB4MzksIDB4MzEsIDB4MkQsIDB4NzEsIDB4QTUsIDB4REMs IDB4QzYsIDB4NkQsCi0rICAweEUyLCAweENELCAweDg1LCAweERCLCAweDczLCAweDgyLCAweDY1 LCAweDI4Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFf U0hBNTEyW10gPSB7Ci0rICAweEE2LCAweDY1LCAweEEyLCAweDc3LCAweDRGLCAweEIzLCAweDg2 LCAweENCLCAweDY0LCAweDNBLCAweEMxLCAweDYzLAotKyAgMHhGQywgMHhBMSwgMHhBQSwgMHhD QiwgMHg5QiwgMHg3OSwgMHhERCwgMHg0QiwgMHhFMSwgMHhEOSwgMHhEQSwgMHhBQywKLSsgIDB4 RTcsIDB4NDcsIDB4MDksIDB4QjIsIDB4MTEsIDB4NEIsIDB4OEEsIDB4QUEsIDB4MDUsIDB4OUUs IDB4NzcsIDB4RDcsCi0rICAweDNBLCAweEJELCAweDVFLCAweDUzLCAweDA5LCAweDRBLCAweEU2 LCAweDBGLCAweDVFLCAweEY5LCAweDE0LCAweDI4LAotKyAgMHhBMCwgMHg5OSwgMHg3NCwgMHg2 NCwgMHg3MCwgMHg0RSwgMHhGMiwgMHhFMywgMHhGQSwgMHhDNywgMHhGOCwgMHhDNSwKLSsgIDB4 NkUsIDB4MkIsIDB4NzksIDB4OTYsIDB4MEQsIDB4MEMsIDB4QzgsIDB4MTAsIDB4MzQsIDB4NTMs IDB4RDIsIDB4QUYsCi0rICAweDE3LCAweDBFLCAweEUwLCAweEJGLCAweDc5LCAweEY2LCAweDA0 LCAweDcyLCAweDEwLCAweEUwLCAweEY2LCAweEQwLAotKyAgMHhDRSwgMHg4QSwgMHg2RiwgMHhB MSwgMHg5NSwgMHg4OSwgMHhCRiwgMHg1OCwgMHg4RiwgMHg0NiwgMHg1RiwgMHgwOSwKLSsgIDB4 OUYsIDB4MDksIDB4Q0EsIDB4ODQsIDB4MTUsIDB4ODUsIDB4RTAsIDB4RUQsIDB4MDQsIDB4MkQs IDB4RkIsIDB4N0MsCi0rICAweDM2LCAweDM1LCAweDIxLCAweDMxLCAweEMzLCAweEZELCAweDky LCAweDQyLCAweDExLCAweDMwLCAweDcxLCAweDFCLAotKyAgMHg2MCwgMHg4MywgMHgxOCwgMHg4 OCwgMHhBMywgMHhGNSwgMHg1OSwgMHhDMwotK307Ci0rCi0rCi0raW50IEZJUFNfc2VsZnRlc3Rf cnNhKCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsJUlNBICprZXk7Ci0rCUVWUF9QS0VZICpwayA9 IE5VTEw7Ci0rCi0rCWlmICgoa2V5PVJTQV9uZXcoKSkgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwot KwlzZXRyc2FrZXkoa2V5KTsKLSsJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsJ CWdvdG8gZXJyOwotKwotKwlFVlBfUEtFWV9hc3NpZ25fUlNBKHBrLCBrZXkpOwotKwotKwlpZiAo IWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0g MSwKLSsJCQkJa2F0X1JTQV9TSEExLCBzaXplb2Yoa2F0X1JTQV9TSEExKSwKLSsJCQkJRVZQX3No YTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsJCQkJIlJTQSBTSEExIFBLQ1MjMSIp KQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRf dGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1NIQTIyNCwgc2l6ZW9mKGth dF9SU0FfU0hBMjI0KSwKLSsJCQkJRVZQX3NoYTIyNCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BL Q1MxLAotKwkJCQkiUlNBIFNIQTIyNCBQS0NTIzEiKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIWZp cHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwK LSsJCQkJa2F0X1JTQV9TSEEyNTYsIHNpemVvZihrYXRfUlNBX1NIQTI1NiksCi0rCQkJCUVWUF9z aGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsJCQkJIlJTQSBTSEEyNTYgUEtD UyMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGss IGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfU0hBMzg0LCBzaXpl b2Yoa2F0X1JTQV9TSEEzODQpLAotKwkJCQlFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhfRkxBR19Q QURfUEtDUzEsCi0rCQkJCSJSU0EgU0hBMzg0IFBLQ1MjMSIpKQotKwkJZ290byBlcnI7Ci0rCWlm ICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3Ricykg LSAxLAotKwkJCQlrYXRfUlNBX1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfU0hBNTEyKSwKLSsJCQkJ RVZQX3NoYTUxMigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAotKwkJCQkiUlNBIFNIQTUx MiBQS0NTIzEiKSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVf dGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9QU1Nf U0hBMSwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTEpLAotKwkJCQlFVlBfc2hhMSgpLCBFVlBfTURf Q1RYX0ZMQUdfUEFEX1BTUywKLSsJCQkJIlJTQSBTSEExIFBTUyIpKQotKwkJZ290byBlcnI7Ci0r CWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3Ri cykgLSAxLAotKwkJCQlrYXRfUlNBX1BTU19TSEEyMjQsIHNpemVvZihrYXRfUlNBX1BTU19TSEEy MjQpLAotKwkJCQlFVlBfc2hhMjI0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAotKwkJCQki UlNBIFNIQTIyNCBQU1MiKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1 cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9Q U1NfU0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMjU2KSwKLSsJCQkJRVZQX3NoYTI1Nigp LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKLSsJCQkJIlJTQSBTSEEyNTYgUFNTIikpCi0rCQln b3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNp emVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfUFNTX1NIQTM4NCwgc2l6ZW9mKGthdF9S U0FfUFNTX1NIQTM4NCksCi0rCQkJCUVWUF9zaGEzODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9Q U1MsCi0rCQkJCSJSU0EgU0hBMzg0IFBTUyIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19w a2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJ CQlrYXRfUlNBX1BTU19TSEE1MTIsIHNpemVvZihrYXRfUlNBX1BTU19TSEE1MTIpLAotKwkJCQlF VlBfc2hhNTEyKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAotKwkJCQkiUlNBIFNIQTUxMiBQ U1MiKSkKLSsJCWdvdG8gZXJyOwotKwotKwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVz dChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQlrYXRfUlNBX1g5MzFfU0hB MSwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEExKSwKLSsJCQlFVlBfc2hhMSgpLCBFVlBfTURfQ1RY X0ZMQUdfUEFEX1g5MzEsCi0rCQkJIlJTQSBTSEExIFg5MzEiKSkKLSsJCWdvdG8gZXJyOwotKwkv KiBOQjogU0hBMjI0IG5vdCBzdXBwb3J0ZWQgaW4gWDkuMzEgKi8KLSsJaWYgKCFmaXBzX3BrZXlf c2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJa2F0 X1JTQV9YOTMxX1NIQTI1Niwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEEyNTYpLAotKwkJCUVWUF9z aGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAotKwkJCSJSU0EgU0hBMjU2IFg5MzEi KSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0 X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQlrYXRfUlNBX1g5MzFfU0hBMzg0LCBzaXpl b2Yoa2F0X1JTQV9YOTMxX1NIQTM4NCksCi0rCQkJRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZM QUdfUEFEX1g5MzEsCi0rCQkJIlJTQSBTSEEzODQgWDkzMSIpKQotKwkJZ290byBlcnI7Ci0rCWlm ICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3Ricykg LSAxLAotKwkJCWthdF9SU0FfWDkzMV9TSEE1MTIsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBNTEy KSwKLSsJCQlFVlBfc2hhNTEyKCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKLSsJCQkiUlNB IFNIQTUxMiBYOTMxIikpCi0rCQlnb3RvIGVycjsKLSsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJy OgotKwlpZiAocGspCi0rCQlFVlBfUEtFWV9mcmVlKHBrKTsKLSsJZWxzZSBpZiAoa2V5KQotKwkJ UlNBX2ZyZWUoa2V5KTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotKyNlbmRpZiAvKiBkZWYgT1BF TlNTTF9GSVBTICovCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2Zp cHNfcnNhX3g5MzFnLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNf cnNhX3g5MzFnLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfcnNh X3g5MzFnLmMuZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0OTM5Mzc3MyArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYwkyMDEyLTAyLTA3 IDExOjA3OjAyLjU0OTM5Mzc3MyArMDEwMAotQEAgLTAsMCArMSwyODIgQEAKLSsvKiBjcnlwdG8v cnNhL3JzYV9nZW4uYyAqLwotKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcg KGVheUBjcnlwdHNvZnQuY29tKQotKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBU aGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KLSsgKiBieSBFcmlj IFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCi0rICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3 cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgotKyAqIAotKyAqIFRo aXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2Ug YXMgbG9uZyBhcwotKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4g IFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGlu IHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCi0rICogbGhhc2gsIERFUywg ZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9u Ci0rICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBz YW1lIGNvcHlyaWdodCB0ZXJtcwotKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1 ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqIAotKyAqIENvcHlyaWdodCByZW1haW5zIEVy aWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCi0rICogdGhl IGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgotKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2Vk IGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KLSsg KiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgotKyAqIFRo aXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3Rh cnR1cCBvcgotKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRl ZCB3aXRoIHRoZSBwYWNrYWdlLgotKyAqIAotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot KyAqIGFyZSBtZXQ6Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0rICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4gdGhlCi0rICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSsg KiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkK LSsgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgotKyAqICAgIFRoZSB3b3Jk ICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUg bGlicmFyeQotKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQg Oi0pLgotKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9y IGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAotKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAo YXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6Ci0r ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRz b24gKHRqaEBjcnlwdHNvZnQuY29tKSIKLSsgKiAKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAotKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFCi0rICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSsgKiBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TAotKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTCi0rICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT VFJJQ1QKLSsgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0rICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKyAqIFNVQ0gg REFNQUdFLgotKyAqIAotKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9y IGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCi0rICogZGVyaXZhdGl2ZSBvZiB0 aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5 IGJlCi0rICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5j ZQotKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCi0rICovCi0rCi0rI2lu Y2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDx0aW1lLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKwotK2V4dGVybiBpbnQgZmlwc19jaGVja19yc2EoUlNBICpyc2Ep OwotKyNlbmRpZgotKwotKy8qIFg5LjMxIFJTQSBrZXkgZGVyaXZhdGlvbiBhbmQgZ2VuZXJhdGlv biAqLwotKwotK2ludCBSU0FfWDkzMV9kZXJpdmVfZXgoUlNBICpyc2EsIEJJR05VTSAqcDEsIEJJ R05VTSAqcDIsIEJJR05VTSAqcTEsIEJJR05VTSAqcTIsCi0rCQkJY29uc3QgQklHTlVNICpYcDEs IGNvbnN0IEJJR05VTSAqWHAyLCBjb25zdCBCSUdOVU0gKlhwLAotKwkJCWNvbnN0IEJJR05VTSAq WHExLCBjb25zdCBCSUdOVU0gKlhxMiwgY29uc3QgQklHTlVNICpYcSwKLSsJCQljb25zdCBCSUdO VU0gKmUsIEJOX0dFTkNCICpjYikKLSsJewotKwlCSUdOVU0gKnIwPU5VTEwsKnIxPU5VTEwsKnIy PU5VTEwsKnIzPU5VTEw7Ci0rCUJOX0NUWCAqY3R4PU5VTEwsKmN0eDI9TlVMTDsKLSsKLSsJaWYg KCFyc2EpIAotKwkJZ290byBlcnI7Ci0rCi0rCWN0eCA9IEJOX0NUWF9uZXcoKTsKLSsJaWYgKCFj dHgpIAotKwkJZ290byBlcnI7Ci0rCUJOX0NUWF9zdGFydChjdHgpOwotKwotKwlyMCA9IEJOX0NU WF9nZXQoY3R4KTsKLSsJcjEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCXIyID0gQk5fQ1RYX2dldChj dHgpOwotKwlyMyA9IEJOX0NUWF9nZXQoY3R4KTsKLSsKLSsJaWYgKHIzID09IE5VTEwpCi0rCQln b3RvIGVycjsKLSsJaWYgKCFyc2EtPmUpCi0rCQl7Ci0rCQlyc2EtPmUgPSBCTl9kdXAoZSk7Ci0r CQlpZiAoIXJzYS0+ZSkKLSsJCQlnb3RvIGVycjsKLSsJCX0KLSsJZWxzZQotKwkJZSA9IHJzYS0+ ZTsKLSsKLSsJLyogSWYgbm90IGFsbCBwYXJhbWV0ZXJzIHByZXNlbnQgb25seSBjYWxjdWxhdGUg d2hhdCB3ZSBjYW4uCi0rCSAqIFRoaXMgYWxsb3dzIHRlc3QgcHJvZ3JhbXMgdG8gb3V0cHV0IHNl bGVjdGl2ZSBwYXJhbWV0ZXJzLgotKwkgKi8KLSsKLSsJaWYgKFhwICYmICFyc2EtPnApCi0rCQl7 Ci0rCQlyc2EtPnAgPSBCTl9uZXcoKTsKLSsJCWlmICghcnNhLT5wKQotKwkJCWdvdG8gZXJyOwot KwotKwkJaWYgKCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChyc2EtPnAsIHAxLCBwMiwKLSsJCQkJ CVhwLCBYcDEsIFhwMiwgZSwgY3R4LCBjYikpCi0rCQkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCWlm IChYcSAmJiAhcnNhLT5xKQotKwkJewotKwkJcnNhLT5xID0gQk5fbmV3KCk7Ci0rCQlpZiAoIXJz YS0+cSkKLSsJCQlnb3RvIGVycjsKLSsJCWlmICghQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgocnNh LT5xLCBxMSwgcTIsCi0rCQkJCQlYcSwgWHExLCBYcTIsIGUsIGN0eCwgY2IpKQotKwkJCWdvdG8g ZXJyOwotKwkJfQotKwotKwlpZiAoIXJzYS0+cCB8fCAhcnNhLT5xKQotKwkJewotKwkJQk5fQ1RY X2VuZChjdHgpOwotKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKLSsJCXJldHVybiAyOwotKwkJfQotKwot KwkvKiBTaW5jZSBib3RoIHByaW1lcyBhcmUgc2V0IHdlIGNhbiBub3cgY2FsY3VsYXRlIGFsbCBy ZW1haW5pbmcgCi0rCSAqIGNvbXBvbmVudHMuCi0rCSAqLwotKwotKwkvKiBjYWxjdWxhdGUgbiAq LwotKwlyc2EtPm49Qk5fbmV3KCk7Ci0rCWlmIChyc2EtPm4gPT0gTlVMTCkKLSsJCWdvdG8gZXJy OwotKwlpZiAoIUJOX211bChyc2EtPm4scnNhLT5wLHJzYS0+cSxjdHgpKQotKwkJZ290byBlcnI7 Ci0rCi0rCS8qIGNhbGN1bGF0ZSBkICovCi0rCWlmICghQk5fc3ViKHIxLHJzYS0+cCxCTl92YWx1 ZV9vbmUoKSkpCi0rCQlnb3RvIGVycjsJLyogcC0xICovCi0rCWlmICghQk5fc3ViKHIyLHJzYS0+ cSxCTl92YWx1ZV9vbmUoKSkpCi0rCQlnb3RvIGVycjsJLyogcS0xICovCi0rCWlmICghQk5fbXVs KHIwLHIxLHIyLGN0eCkpCi0rCQlnb3RvIGVycjsJLyogKHAtMSkocS0xKSAqLwotKwotKwlpZiAo IUJOX2djZChyMywgcjEsIHIyLCBjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICghQk5fZGl2 KHIwLCBOVUxMLCByMCwgcjMsIGN0eCkpCi0rCQlnb3RvIGVycjsJLyogTENNKChwLTEpKHEtMSkp ICovCi0rCi0rCWN0eDIgPSBCTl9DVFhfbmV3KCk7Ci0rCWlmICghY3R4MikKLSsJCWdvdG8gZXJy OwotKwotKwlyc2EtPmQ9Qk5fbW9kX2ludmVyc2UoTlVMTCxyc2EtPmUscjAsY3R4Mik7CS8qIGQg Ki8KLSsJaWYgKHJzYS0+ZCA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCi0rCS8qIGNhbGN1bGF0 ZSBkIG1vZCAocC0xKSAqLwotKwlyc2EtPmRtcDE9Qk5fbmV3KCk7Ci0rCWlmIChyc2EtPmRtcDEg PT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUJOX21vZChyc2EtPmRtcDEscnNhLT5kLHIx LGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyogY2FsY3VsYXRlIGQgbW9kIChxLTEpICovCi0r CXJzYS0+ZG1xMT1CTl9uZXcoKTsKLSsJaWYgKHJzYS0+ZG1xMSA9PSBOVUxMKQotKwkJZ290byBl cnI7Ci0rCWlmICghQk5fbW9kKHJzYS0+ZG1xMSxyc2EtPmQscjIsY3R4KSkKLSsJCWdvdG8gZXJy OwotKwotKwkvKiBjYWxjdWxhdGUgaW52ZXJzZSBvZiBxIG1vZCBwICovCi0rCXJzYS0+aXFtcD1C Tl9tb2RfaW52ZXJzZShOVUxMLHJzYS0+cSxyc2EtPnAsY3R4Mik7Ci0rCi0rCWVycjoKLSsJaWYg KGN0eCkKLSsJCXsKLSsJCUJOX0NUWF9lbmQoY3R4KTsKLSsJCUJOX0NUWF9mcmVlKGN0eCk7Ci0r CQl9Ci0rCWlmIChjdHgyKQotKwkJQk5fQ1RYX2ZyZWUoY3R4Mik7Ci0rCS8qIElmIHRoaXMgaXMg c2V0IGFsbCBjYWxscyBzdWNjZXNzZnVsICovCi0rCWlmIChyc2EgJiYgcnNhLT5pcW1wICE9IE5V TEwpCi0rCQlyZXR1cm4gMTsKLSsKLSsJcmV0dXJuIDA7Ci0rCi0rCX0KLSsKLStpbnQgUlNBX1g5 MzFfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgY29uc3QgQklHTlVNICplLCBC Tl9HRU5DQiAqY2IpCi0rCXsKLSsJaW50IG9rID0gMDsKLSsJQklHTlVNICpYcCA9IE5VTEwsICpY cSA9IE5VTEw7Ci0rCUJOX0NUWCAqY3R4ID0gTlVMTDsKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rCWlmIChGSVBTX21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19B TExPVykgJiYgCi0rCQkoYml0cyA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykp Ci0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgs RklQU19SX0tFWV9UT09fU0hPUlQpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCi0rCWlm IChiaXRzICYgMHhmZikKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX1JTQV9YOTMxX0dF TkVSQVRFX0tFWV9FWCxGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RIKTsKLSsJICAgIHJldHVybiAw OwotKwkgICAgfQotKwotKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkgICAgewotKwkg ICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYLEZJUFNfUl9GSVBTX1NF TEZURVNUX0ZBSUxFRCk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsjZW5kaWYKLSsKLSsJ Y3R4ID0gQk5fQ1RYX25ldygpOwotKwlpZiAoIWN0eCkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCUJO X0NUWF9zdGFydChjdHgpOwotKwlYcCA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJWHEgPSBCTl9DVFhf Z2V0KGN0eCk7Ci0rCWlmICghQk5fWDkzMV9nZW5lcmF0ZV9YcHEoWHAsIFhxLCBiaXRzLCBjdHgp KQotKwkJZ290byBlcnJvcjsKLSsKLSsJcnNhLT5wID0gQk5fbmV3KCk7Ci0rCXJzYS0+cSA9IEJO X25ldygpOwotKwlpZiAoIXJzYS0+cCB8fCAhcnNhLT5xKQotKwkJZ290byBlcnJvcjsKLSsKLSsJ LyogR2VuZXJhdGUgdHdvIHByaW1lcyBmcm9tIFhwLCBYcSAqLwotKwotKwlpZiAoIUJOX1g5MzFf Z2VuZXJhdGVfcHJpbWVfZXgocnNhLT5wLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBYcCwKLSsJ CQkJCWUsIGN0eCwgY2IpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJaWYgKCFCTl9YOTMxX2dlbmVy YXRlX3ByaW1lX2V4KHJzYS0+cSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgWHEsCi0rCQkJCQll LCBjdHgsIGNiKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCS8qIFNpbmNlIHJzYS0+cCBhbmQgcnNh LT5xIGFyZSB2YWxpZCB0aGlzIGNhbGwgd2lsbCBqdXN0IGRlcml2ZQotKwkgKiByZW1haW5pbmcg UlNBIGNvbXBvbmVudHMuCi0rCSAqLwotKwotKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9leChyc2Es IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0rCQkJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwsIGUsIGNiKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwlpZighZmlwc19jaGVja19yc2EocnNhKSkKLSsJICAgIGdvdG8gZXJyb3I7Ci0rI2VuZGlm Ci0rCi0rCW9rID0gMTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChjdHgpCi0rCQl7Ci0rCQlCTl9DVFhf ZW5kKGN0eCk7Ci0rCQlCTl9DVFhfZnJlZShjdHgpOwotKwkJfQotKwotKwlpZiAob2spCi0rCQly ZXR1cm4gMTsKLSsKLSsJcmV0dXJuIDA7Ci0rCi0rCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEt YmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19zaGFfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjEt YmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19zaGFfc2VsZnRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjEt YmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19zaGFfc2VsZnRlc3QuYy5maXBzCTIwMTItMDItMDcgMTE6 MDc6MDIuNTQ5MzkzNzczICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlw cy9maXBzX3NoYV9zZWxmdGVzdC5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTQ5MzkzNzczICswMTAw Ci1AQCAtMCwwICsxLDE0MCBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 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 IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNs dWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKyNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgotKwotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLStzdGF0aWMgY29uc3QgY2hhciB0ZXN0W11bNjBdPQotKyAgICB7Ci0rICAgICIi LAotKyAgICAiYWJjIiwKLSsgICAgImFiY2RiY2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWpr bGprbG1rbG1ubG1ub21ub3Bub3BxIgotKyAgICB9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHJldFtdW1NIQV9ESUdFU1RfTEVOR1RIXT0KLSsgICAgewotKyAgICB7IDB4ZGEsMHgz OSwweGEzLDB4ZWUsMHg1ZSwweDZiLDB4NGIsMHgwZCwweDMyLDB4NTUsCi0rICAgICAgMHhiZiww eGVmLDB4OTUsMHg2MCwweDE4LDB4OTAsMHhhZiwweGQ4LDB4MDcsMHgwOSB9LAotKyAgICB7IDB4 YTksMHg5OSwweDNlLDB4MzYsMHg0NywweDA2LDB4ODEsMHg2YSwweGJhLDB4M2UsCi0rICAgICAg MHgyNSwweDcxLDB4NzgsMHg1MCwweGMyLDB4NmMsMHg5YywweGQwLDB4ZDgsMHg5ZCB9LAotKyAg ICB7IDB4ODQsMHg5OCwweDNlLDB4NDQsMHgxYywweDNiLDB4ZDIsMHg2ZSwweGJhLDB4YWUsCi0r ICAgICAgMHg0YSwweGExLDB4ZjksMHg1MSwweDI5LDB4ZTUsMHhlNSwweDQ2LDB4NzAsMHhmMSB9 LAotKyAgICB9OwotKwotK3N0YXRpYyBpbnQgY29ycnVwdF9zaGE7Ci0rCi0rdm9pZCBGSVBTX2Nv cnJ1cHRfc2hhMSgpCi0rICAgIHsKLSsgICAgY29ycnVwdF9zaGEgPSAxOwotKyAgICB9Ci0rCi0r aW50IEZJUFNfc2VsZnRlc3Rfc2hhMSgpCi0rICAgIHsKLSsgICAgaW50IG47Ci0rCi0rICAgIGZv cihuPTAgOyBuPHNpemVvZih0ZXN0KS9zaXplb2YodGVzdFswXSkgOyArK24pCi0rCXsKLSsJdW5z aWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xFTkdUSF07Ci0rCi0rCUVWUF9EaWdlc3QodGVzdFtu XSxzdHJsZW4odGVzdFtuXSkrY29ycnVwdF9zaGEsbWQsIE5VTEwsIEVWUF9zaGExKCksIE5VTEwp OwotKwlpZihtZW1jbXAobWQscmV0W25dLHNpemVvZiBtZCkpCi0rCSAgICB7Ci0rCSAgICBGSVBT ZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0r CSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsJfQotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1zZ19zaGEyNTZbXSA9IHsgMHhmYSwgMHg0OCwg MHg1OSwgMHgyYSwgMHhlMSwgMHhhZSwgMHgxZiwgMHgzMCwKLSsJCQkJCSAgICAweGZjIH07Ci0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGlnX3NoYTI1NltdID0geyAweGY3LCAweDI2LCAw eGQ4LCAweDk4LCAweDQ3LCAweDkxLCAweDY4LCAweDViLAotKwkJCQkJICAgIDB4OWUsIDB4Mzks IDB4YjIsIDB4NTgsIDB4YmIsIDB4NzUsIDB4YmYsIDB4MDEsCi0rCQkJCQkgICAgMHgxNywgMHgw YywgMHg4NCwgMHgwMCwgMHgwMSwgMHg3YSwgMHg5NCwgMHg4MywKLSsJCQkJCSAgICAweGYzLCAw eDBiLCAweDE1LCAweDg0LCAweDRiLCAweDY5LCAweDg4LCAweDhhIH07Ci0rCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgbXNnX3NoYTUxMltdID0geyAweDM3LCAweGQxLCAweDM1LCAweDlk LCAweDE4LCAweDQxLCAweGU5LCAweGI3LAotKwkJCQkJICAgIDB4NmQsIDB4OWEsIDB4MTMsIDB4 ZGEsIDB4NWYsIDB4ZjMsIDB4YmQgfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaWdf c2hhNTEyW10gPSB7IDB4MTEsIDB4MTMsIDB4YzQsIDB4MTksIDB4ZWQsIDB4MmIsIDB4MWQsIDB4 MTYsCi0rCQkJCQkgICAgMHgxMSwgMHhlYiwgMHg5YiwgMHhiZSwgMHhmMCwgMHg3ZiwgMHhjZiwg MHg0NCwKLSsJCQkJCSAgICAweDhiLCAweGQ3LCAweDU3LCAweGJkLCAweDhkLCAweGE5LCAweDI1 LCAweGIwLAotKwkJCQkJICAgIDB4NDcsIDB4MjUsIDB4ZDYsIDB4NmMsIDB4OWEsIDB4NTQsIDB4 N2YsIDB4OGYsCi0rCQkJCQkgICAgMHgwYiwgMHg1MywgMHgxYSwgMHgxMCwgMHg2OCwgMHgzMiwg MHgwMywgMHgzOCwKLSsJCQkJCSAgICAweDgyLCAweGM0LCAweDg3LCAweGM0LCAweGVhLCAweDBl LCAweGQxLCAweDA0LAotKwkJCQkJICAgIDB4YTksIDB4OTgsIDB4YzEsIDB4MDUsIDB4YTMsIDB4 ZjMsIDB4ZjgsIDB4YjEsCi0rCQkJCQkgICAgMHhhZiwgMHhiYywgMHhkOSwgMHg3OCwgMHg3ZSwg MHhlZSwgMHgzZCwgMHg0MyB9OwotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTIodm9pZCkKLSsJ ewotKwl1bnNpZ25lZCBjaGFyIG1kW1NIQTUxMl9ESUdFU1RfTEVOR1RIXTsKLSsKLSsJRVZQX0Rp Z2VzdChtc2dfc2hhMjU2LCBzaXplb2YobXNnX3NoYTI1NiksIG1kLCBOVUxMLCBFVlBfc2hhMjU2 KCksIE5VTEwpOwotKwlpZihtZW1jbXAoZGlnX3NoYTI1NiwgbWQsIHNpemVvZihkaWdfc2hhMjU2 KSkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX01PREVfU0VULCBGSVBTX1JfU0VMRlRF U1RfRkFJTEVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwotKwlFVlBfRGlnZXN0KG1zZ19zaGE1 MTIsIHNpemVvZihtc2dfc2hhNTEyKSwgbWQsIE5VTEwsIEVWUF9zaGE1MTIoKSwgTlVMTCk7Ci0r CWlmKG1lbWNtcChkaWdfc2hhNTEyLCBtZCwgc2l6ZW9mKGRpZ19zaGE1MTIpKSkKLSsJCXsKLSsJ CUZJUFNlcnIoRklQU19GX0ZJUFNfTU9ERV9TRVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwot KwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCi0rCXJldHVybiAxOwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZm IC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9obWFj LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9o bWFjLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9u ZV9obWFjLmMuZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0OTM5Mzc3MyArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX2htYWMuYwkyMDEy LTAyLTA3IDExOjA3OjAyLjU0OTM5Mzc3MyArMDEwMAotQEAgLTAsMCArMSwxODAgQEAKLSsvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot KyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24u Ci0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICog NC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0 IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3Bl bnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1h eSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgot KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJl ZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xs b3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0r ICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1Qg YGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pF Q1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs Ci0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8 c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5z c2xjb25mLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv aG1hYy5oPgotKwotKyNpZm5kZWYgRklQU0NBTklTVEVSX08KLStpbnQgRklQU19zZWxmdGVzdF9m YWlsZWQoKSB7IHJldHVybiAwOyB9Ci0rdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKCkge30KLSt2 b2lkIE9QRU5TU0xfY2xlYW5zZSh2b2lkICpwLHNpemVfdCBsZW4pIHt9Ci0rI2VuZGlmCi0rCi0r I2lmCWRlZmluZWQoX19pMzg2KSAgIHx8IGRlZmluZWQoX19pMzg2X18pICAgfHwgZGVmaW5lZChf TV9JWDg2KSB8fCBcCi0rCWRlZmluZWQoX19JTlRFTF9fKSB8fCBcCi0rCWRlZmluZWQoX194ODZf NjQpIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfTV9BTUQ2NCkgfHwgZGVmaW5l ZChfTV9YNjQpCi0rCi0rdW5zaWduZWQgaW50ICBPUEVOU1NMX2lhMzJjYXBfUFsyXTsKLSsjZW5k aWYKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rc3RhdGljIHZvaWQgaG1hY19pbml0KFNI QTI1Nl9DVFggKm1kX2N0eCxTSEEyNTZfQ1RYICpvX2N0eCwKLSsJCSAgICAgIGNvbnN0IGNoYXIg KmtleSkKLSsgICAgewotKyAgICBzaXplX3QgbGVuPXN0cmxlbihrZXkpOwotKyAgICBpbnQgaTsK LSsgICAgdW5zaWduZWQgY2hhciBrZXltZFtITUFDX01BWF9NRF9DQkxPQ0tdOwotKyAgICB1bnNp Z25lZCBjaGFyIHBhZFtITUFDX01BWF9NRF9DQkxPQ0tdOwotKwotKyAgICBpZiAobGVuID4gU0hB X0NCTE9DSykKLSsJewotKwlTSEEyNTZfSW5pdChtZF9jdHgpOwotKwlTSEEyNTZfVXBkYXRlKG1k X2N0eCxrZXksbGVuKTsKLSsJU0hBMjU2X0ZpbmFsKGtleW1kLG1kX2N0eCk7Ci0rCWxlbj1TSEEy NTZfRElHRVNUX0xFTkdUSDsKLSsJfQotKyAgICBlbHNlCi0rCW1lbWNweShrZXltZCxrZXksbGVu KTsKLSsgICAgbWVtc2V0KCZrZXltZFtsZW5dLCdcMCcsSE1BQ19NQVhfTURfQ0JMT0NLLWxlbik7 Ci0rCi0rICAgIGZvcihpPTAgOyBpIDwgSE1BQ19NQVhfTURfQ0JMT0NLIDsgaSsrKQotKwlwYWRb aV09MHgzNl5rZXltZFtpXTsKLSsgICAgU0hBMjU2X0luaXQobWRfY3R4KTsKLSsgICAgU0hBMjU2 X1VwZGF0ZShtZF9jdHgscGFkLFNIQTI1Nl9DQkxPQ0spOwotKwotKyAgICBmb3IoaT0wIDsgaSA8 IEhNQUNfTUFYX01EX0NCTE9DSyA7IGkrKykKLSsJcGFkW2ldPTB4NWNea2V5bWRbaV07Ci0rICAg IFNIQTI1Nl9Jbml0KG9fY3R4KTsKLSsgICAgU0hBMjU2X1VwZGF0ZShvX2N0eCxwYWQsU0hBMjU2 X0NCTE9DSyk7Ci0rICAgIH0KLSsKLStzdGF0aWMgdm9pZCBobWFjX2ZpbmFsKHVuc2lnbmVkIGNo YXIgKm1kLFNIQTI1Nl9DVFggKm1kX2N0eCxTSEEyNTZfQ1RYICpvX2N0eCkKLSsgICAgewotKyAg ICB1bnNpZ25lZCBjaGFyIGJ1ZltTSEEyNTZfRElHRVNUX0xFTkdUSF07Ci0rCi0rICAgIFNIQTI1 Nl9GaW5hbChidWYsbWRfY3R4KTsKLSsgICAgU0hBMjU2X1VwZGF0ZShvX2N0eCxidWYsc2l6ZW9m IGJ1Zik7Ci0rICAgIFNIQTI1Nl9GaW5hbChtZCxvX2N0eCk7Ci0rICAgIH0KLSsKLSsjZW5kaWYK LSsKLStpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKLSsgICAgewotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSsgICAgc3RhdGljIGNoYXIga2V5W109Im9yYm9EZUpJVElUZWpzaXJwQURPTml2 aXJwVWt2YXJQIjsKLSsgICAgaW50IG4sYmluYXJ5PTA7Ci0rCi0rICAgIGlmKGFyZ2MgPCAyKQot Kwl7Ci0rCWZwcmludGYoc3RkZXJyLCIlcyBbPGZpbGU+XStcbiIsYXJndlswXSk7Ci0rCWV4aXQo MSk7Ci0rCX0KLSsKLSsgICAgbj0xOwotKyAgICBpZiAoIXN0cmNtcChhcmd2W25dLCItYmluYXJ5 IikpCi0rCXsKLSsJbisrOwotKwliaW5hcnk9MTsJLyogZW1pdCBiaW5hcnkgZmluZ2VycHJpbnQu Li4gKi8KLSsJfQotKwotKyAgICBmb3IoOyBuIDwgYXJnYyA7ICsrbikKLSsJewotKwlGSUxFICpm PWZvcGVuKGFyZ3Zbbl0sInJiIik7Ci0rCVNIQTI1Nl9DVFggbWRfY3R4LG9fY3R4OwotKwl1bnNp Z25lZCBjaGFyIG1kW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKLSsJaW50IGk7Ci0rCi0rCWlmKCFm KQotKwkgICAgewotKwkgICAgcGVycm9yKGFyZ3Zbbl0pOwotKwkgICAgZXhpdCgyKTsKLSsJICAg IH0KLSsKLSsJaG1hY19pbml0KCZtZF9jdHgsJm9fY3R4LGtleSk7Ci0rCWZvciggOyA7ICkKLSsJ ICAgIHsKLSsJICAgIGNoYXIgYnVmWzEwMjRdOwotKwkgICAgc2l6ZV90IGw9ZnJlYWQoYnVmLDEs c2l6ZW9mIGJ1ZixmKTsKLSsKLSsJICAgIGlmKGwgPT0gMCkKLSsJCXsKLSsJCWlmKGZlcnJvcihm KSkKLSsJCSAgICB7Ci0rCQkgICAgcGVycm9yKGFyZ3Zbbl0pOwotKwkJICAgIGV4aXQoMyk7Ci0r CQkgICAgfQotKwkJZWxzZQotKwkJICAgIGJyZWFrOwotKwkJfQotKwkgICAgU0hBMjU2X1VwZGF0 ZSgmbWRfY3R4LGJ1ZixsKTsKLSsJICAgIH0KLSsJaG1hY19maW5hbChtZCwmbWRfY3R4LCZvX2N0 eCk7Ci0rCi0rCWlmIChiaW5hcnkpCi0rCSAgICB7Ci0rCSAgICBmd3JpdGUobWQsU0hBMjU2X0RJ R0VTVF9MRU5HVEgsMSxzdGRvdXQpOwotKwkgICAgYnJlYWs7CS8qIC4uLiBmb3Igc2luZ2xlKCEp IGZpbGUgKi8KLSsJICAgIH0KLSsKLSsvKglwcmludGYoIkhNQUMtU0hBMSglcyk9ICIsYXJndltu XSk7ICovCi0rCWZvcihpPTAgOyBpIDwgU0hBMjU2X0RJR0VTVF9MRU5HVEggOyArK2kpCi0rCSAg ICBwcmludGYoIiUwMngiLG1kW2ldKTsKLSsJcHJpbnRmKCJcbiIpOwotKwl9Ci0rI2VuZGlmCi0r ICAgIHJldHVybiAwOwotKyAgICB9Ci0rCi0rCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEy L2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9j cnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5 cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMuZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAyLjU0OTM5 Mzc3MyArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvZmlwc190ZXN0 X3N1aXRlLmMJMjAxMi0wMi0wNyAxMTowNzowMi41NDkzOTM3NzMgKzAxMDAKLUBAIC0wLDAgKzEs NTg4IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5T U0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKgotKyAqIFRoaXMgY29t bWFuZCBpcyBpbnRlbmRlZCBhcyBhIHRlc3QgZHJpdmVyIGZvciB0aGUgRklQUy0xNDAgdGVzdGlu ZwotKyAqIGxhYiBwZXJmb3JtaW5nIEZJUFMtMTQwIHZhbGlkYXRpb24uICBJdCBkZW1vbnN0cmF0 ZXMgdGhlIHVzZSBvZiB0aGUKLSsgKiBPcGVuU1NMIGxpYnJhcnkgaXRvIHBlcmZvcm0gYSB2YXJp ZXR5IG9mIGNvbW1vbiBjcnlwdG9ncmFwaGljCi0rICogZnVuY3Rpb25zLiAgQSBwb3dlci11cCBz ZWxmIHRlc3QgaXMgZGVtb25zdHJhdGVkIGJ5IGRlbGliZXJhdGVseQotKyAqIHBvaW50aW5nIHRv IGFuIGludmFsaWQgZXhlY3V0YWJsZSBoYXNoCi0rICoKLSsgKiBDb250cmlidXRlZCBieSBTdGV2 ZSBNYXJxdWVzcy4KLSsgKgotKyAqLwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxh c3NlcnQuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2lu Y2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2Rlcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2RzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv aG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKwotKyNpbmNsdWRlIDxvcGVuc3Ns L2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3No YS5oPgotKwotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0raW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKLSsgICAgewotKyAgICBwcmludGYoIk5vIEZJUFMgc3VwcG9ydFxuIik7Ci0r ICAgIHJldHVybigwKTsKLSsgICAgfQotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotKy8qIEFFUzogZW5jcnlwdCBhbmQgZGVj cnlwdCBrbm93biBwbGFpbnRleHQsIHZlcmlmeSByZXN1bHQgbWF0Y2hlcyBvcmlnaW5hbCBwbGFp bnRleHQKLSsqLwotK3N0YXRpYyBpbnQgRklQU19hZXNfdGVzdCh2b2lkKQotKwl7Ci0rCWludCBy ZXQgPSAwOwotKwl1bnNpZ25lZCBjaGFyIHBsdG1wWzE2XTsKLSsJdW5zaWduZWQgY2hhciBjaXRt cFsxNl07Ci0rCXVuc2lnbmVkIGNoYXIga2V5WzE2XSA9IHsgMSwyLDMsNCw1LDYsNyw4LDksMTAs MTEsMTIsMTMsMTQsMTUsMTZ9OwotKwl1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsxNl0gPSAiZXRh b25yaXNoZGxjdSI7Ci0rCUVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsJRVZQX0NJUEhFUl9DVFhfaW5p dCgmY3R4KTsKLSsJaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigp LE5VTEwsIGtleSwgTlVMTCwgMSkgPD0gMCkKLSsJCWdvdG8gZXJyOwotKwlFVlBfQ2lwaGVyKCZj dHgsIGNpdG1wLCBwbGFpbnRleHQsIDE2KTsKLSsJaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgs IEVWUF9hZXNfMTI4X2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMCkgPD0gMCkKLSsJCWdvdG8gZXJy OwotKwlFVlBfQ2lwaGVyKCZjdHgsIHBsdG1wLCBjaXRtcCwgMTYpOwotKwlpZiAobWVtY21wKHBs dG1wLCBwbGFpbnRleHQsIDE2KSkKLSsJCWdvdG8gZXJyOwotKwlyZXQgPSAxOwotKwllcnI6Ci0r CUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStz dGF0aWMgaW50IEZJUFNfZGVzM190ZXN0KHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCXVu c2lnbmVkIGNoYXIgcGx0bXBbOF07Ci0rCXVuc2lnbmVkIGNoYXIgY2l0bXBbOF07Ci0rICAgIAl1 bnNpZ25lZCBjaGFyIGtleVtdID0geyAxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwx NSwxNiwxNywxOCwKLSsJCSAgICAgICAgICAgICAgMTksMjAsMjEsMjIsMjMsMjR9OwotKyAgICAJ dW5zaWduZWQgY2hhciBwbGFpbnRleHRbXSA9IHsgJ2UnLCAndCcsICdhJywgJ28nLCAnbicsICdy JywgJ2knLCAncycgfTsKLSsJRVZQX0NJUEhFUl9DVFggY3R4OwotKwlFVlBfQ0lQSEVSX0NUWF9p bml0KCZjdHgpOwotKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Rlc19lZGUzX2Vj YigpLE5VTEwsIGtleSwgTlVMTCwgMSkgPD0gMCkKLSsJCWdvdG8gZXJyOwotKwlFVlBfQ2lwaGVy KCZjdHgsIGNpdG1wLCBwbGFpbnRleHQsIDgpOwotKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0 eCwgRVZQX2Rlc19lZGUzX2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMCkgPD0gMCkKLSsJCWdvdG8g ZXJyOwotKwlFVlBfQ2lwaGVyKCZjdHgsIHBsdG1wLCBjaXRtcCwgOCk7Ci0rCWlmIChtZW1jbXAo cGx0bXAsIHBsYWludGV4dCwgOCkpCi0rCQlnb3RvIGVycjsKLSsJcmV0ID0gMTsKLSsJZXJyOgot KwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0r LyoKLSsgKiBEU0E6IGdlbmVyYXRlIGtleXMgYW5kIHNpZ24sIHZlcmlmeSBpbnB1dCBwbGFpbnRl eHQuCi0rICovCi0rc3RhdGljIGludCBGSVBTX2RzYV90ZXN0KGludCBiYWQpCi0rICAgIHsKLSsg ICAgRFNBICpkc2EgPSBOVUxMOwotKyAgICBFVlBfUEtFWSBwazsKLSsgICAgdW5zaWduZWQgY2hh ciBkZ3N0W10gPSAiZXRhb25yaXNoZGxjIjsKLSsgICAgdW5zaWduZWQgY2hhciBidWZbNjBdOwot KyAgICB1bnNpZ25lZCBpbnQgc2xlbjsKLSsgICAgaW50IHIgPSAwOwotKyAgICBFVlBfTURfQ1RY IG1jdHg7Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBFVlBfTURfQ1RYX2luaXQo Jm1jdHgpOwotKyAgICBkc2EgPSBEU0FfbmV3KCk7Ci0rICAgIGlmICghZHNhKQotKwlnb3RvIGVu ZDsKLSsgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIDEwMjQsTlVMTCww LE5VTEwsTlVMTCxOVUxMKSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmICghRFNBX2dlbmVyYXRlX2tl eShkc2EpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKGJhZCkKLSsJICAgIEJOX2FkZF93b3JkKGRz YS0+cHViX2tleSwgMSk7Ci0rCi0rICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9EU0E7Ci0rICAgIHBr LnBrZXkuZHNhID0gZHNhOwotKwotKyAgICBpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQ X2RzczEoKSwgTlVMTCkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZt Y3R4LCBkZ3N0LCBzaXplb2YoZGdzdCkgLSAxKSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmICghRVZQ X1NpZ25GaW5hbCgmbWN0eCwgYnVmLCAmc2xlbiwgJnBrKSkKLSsJZ290byBlbmQ7Ci0rCi0rICAg IGlmICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpKQotKwlnb3Rv IGVuZDsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBkZ3N0LCBzaXplb2YoZGdz dCkgLSAxKSkKLSsJZ290byBlbmQ7Ci0rICAgIHIgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIGJ1 Ziwgc2xlbiwgJnBrKTsKLSsgICAgZW5kOgotKyAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgp OwotKyAgICBpZiAoZHNhKQotKyAgCSAgRFNBX2ZyZWUoZHNhKTsKLSsgICAgaWYgKHIgIT0gMSkK LSsJcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyoKLSsgKiBSU0E6IGdl bmVyYXRlIGtleXMgYW5kIHNpZ24sIHZlcmlmeSBpbnB1dCBwbGFpbnRleHQuCi0rICovCi0rc3Rh dGljIGludCBGSVBTX3JzYV90ZXN0KGludCBiYWQpCi0rICAgIHsKLSsgICAgUlNBICprZXk7Ci0r ICAgIHVuc2lnbmVkIGNoYXIgaW5wdXRfcHRleHRbXSA9ICJldGFvbnJpc2hkbGMiOwotKyAgICB1 bnNpZ25lZCBjaGFyIGJ1ZlsyNTZdOwotKyAgICB1bnNpZ25lZCBpbnQgc2xlbjsKLSsgICAgQklH TlVNICpibjsKLSsgICAgRVZQX01EX0NUWCBtY3R4OwotKyAgICBFVlBfUEtFWSBwazsKLSsgICAg aW50IHIgPSAwOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgRVZQX01EX0NUWF9p bml0KCZtY3R4KTsKLSsgICAga2V5ID0gUlNBX25ldygpOwotKyAgICBibiA9IEJOX25ldygpOwot KyAgICBpZiAoIWtleSB8fCAhYm4pCi0rCXJldHVybiAwOwotKyAgICBCTl9zZXRfd29yZChibiwg NjU1MzcpOwotKyAgICBpZiAoIVJTQV9nZW5lcmF0ZV9rZXlfZXgoa2V5LCAxMDI0LGJuLE5VTEwp KQotKwlyZXR1cm4gMDsKLSsgICAgQk5fZnJlZShibik7Ci0rICAgIGlmIChiYWQpCi0rCSAgICBC Tl9hZGRfd29yZChrZXktPm4sIDEpOwotKwotKyAgICBway50eXBlID0gRVZQX1BLRVlfUlNBOwot KyAgICBway5wa2V5LnJzYSA9IGtleTsKLSsKLSsgICAgaWYgKCFFVlBfU2lnbkluaXRfZXgoJm1j dHgsIEVWUF9zaGExKCksIE5VTEwpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFFVlBfU2lnblVw ZGF0ZSgmbWN0eCwgaW5wdXRfcHRleHQsIHNpemVvZihpbnB1dF9wdGV4dCkgLSAxKSkKLSsJZ290 byBlbmQ7Ci0rICAgIGlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgYnVmLCAmc2xlbiwgJnBrKSkK LSsJZ290byBlbmQ7Ci0rCi0rICAgIGlmICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9z aGExKCksIE5VTEwpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZt Y3R4LCBpbnB1dF9wdGV4dCwgc2l6ZW9mKGlucHV0X3B0ZXh0KSAtIDEpKQotKwlnb3RvIGVuZDsK LSsgICAgciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgYnVmLCBzbGVuLCAmcGspOwotKyAgICBl bmQ6Ci0rICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0rICAgIGlmIChrZXkpCi0rICAJ ICAgIFJTQV9mcmVlKGtleSk7Ci0rICAgIGlmIChyICE9IDEpCi0rCXJldHVybiAwOwotKyAgICBy ZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIFNIQTE6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGln ZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBo YXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfc2hhMV90ZXN0KCkKLSsgICAgewotKyAgICB1bnNp Z25lZCBjaGFyIGRpZ2VzdFtTSEFfRElHRVNUX0xFTkdUSF0gPQotKyAgICAgICAgeyAweDExLCAw eGYxLCAweDlhLCAweDNhLCAweGVjLCAweDFhLCAweDFlLCAweDhlLCAweDY1LCAweGQ0LCAweDlh LCAweDM4LCAweDBjLCAweDhiLCAweDFlLCAweDJjLCAweGU4LCAweGIzLCAweGM1LCAweDE4IH07 Ci0rICAgIHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNoZCI7Ci0rCi0rICAgIHVuc2ln bmVkIGNoYXIgbWRbU0hBX0RJR0VTVF9MRU5HVEhdOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3Io KTsKLSsgICAgaWYgKCFFVlBfRGlnZXN0KHN0cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5VTEwsIEVW UF9zaGExKCksIE5VTEwpKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6 ZW9mKG1kKSkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsK LSsvKiBTSEEyNTY6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21w YXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMg aW50IEZJUFNfc2hhMjU2X3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0 W1NIQTI1Nl9ESUdFU1RfTEVOR1RIXSA9Ci0rCXsweGY1LCAweDUzLCAweGNkLCAweGI4LCAweGNm LCAweDEsIDB4ZWUsIDB4MTcsIDB4OWIsIDB4OTMsIDB4YzksIDB4NjgsIDB4YzAsIDB4ZWEsIDB4 NDAsIDB4OTEsCi0rCSAweDYsIDB4ZWMsIDB4OGUsIDB4MTEsIDB4OTYsIDB4YzgsIDB4NWQsIDB4 MWMsIDB4YWYsIDB4NjQsIDB4MjIsIDB4ZTYsIDB4NTAsIDB4NGYsIDB4NDcsIDB4NTd9OwotKyAg ICB1bnNpZ25lZCBjaGFyIHN0cltdID0gImV0YW9ucmlzaGQiOwotKwotKyAgICB1bnNpZ25lZCBj aGFyIG1kW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7 Ci0rICAgIGlmICghRVZQX0RpZ2VzdChzdHIsc2l6ZW9mKHN0cikgLSAxLG1kLCBOVUxMLCBFVlBf c2hhMjU2KCksIE5VTEwpKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6 ZW9mKG1kKSkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsK LSsvKiBTSEE1MTI6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21w YXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMg aW50IEZJUFNfc2hhNTEyX3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0 W1NIQTUxMl9ESUdFU1RfTEVOR1RIXSA9Ci0rCXsweDk5LCAweGM5LCAweGU5LCAweDViLCAweDg4 LCAweGQ0LCAweDc4LCAweDg4LCAweGRmLCAweDg4LCAweDVmLCAweDk0LCAweDcxLCAweDY0LCAw eDI4LCAweGNhLAotKwkgMHgxNiwgMHgxZiwgMHgzZCwgMHhmNCwgMHgxZiwgMHhmMywgMHgwZiwg MHhjNSwgMHgwMywgMHg5OSwgMHhiMiwgMHhkMCwgMHhlNywgMHgwYiwgMHg5NCwgMHg0YSwKLSsJ IDB4NDUsIDB4ZDIsIDB4NmMsIDB4NGYsIDB4MjAsIDB4MDYsIDB4ZWYsIDB4NzEsIDB4YTksIDB4 MjUsIDB4N2YsIDB4MjQsIDB4YjEsIDB4ZDksIDB4NDAsIDB4MjIsCi0rCSAweDQ5LCAweDU0LCAw eDEwLCAweGMyLCAweDIyLCAweDlkLCAweDI3LCAweGZlLCAweGJkLCAweGQ2LCAweGQ2LCAweGVi LCAweDJkLCAweDQyLCAweDFkLCAweGEzfTsKLSsgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJl dGFvbnJpc2hkIjsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBtZFtTSEE1MTJfRElHRVNUX0xFTkdU SF07Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3Ry LHNpemVvZihzdHIpIC0gMSxtZCwgTlVMTCwgRVZQX3NoYTUxMigpLCBOVUxMKSkgcmV0dXJuIDA7 Ci0rICAgIGlmIChtZW1jbXAobWQsZGlnZXN0LHNpemVvZihtZCkpKQotKyAgICAgICAgcmV0dXJu IDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogSE1BQy1TSEExOiBnZW5lcmF0ZSBo YXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNv bXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBGSVBTX2htYWNfc2hhMV90ZXN0 KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOwotKyAg ICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25lZCBjaGFy IGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQotKwl7MHg3MywgMHhmNywgMHhhMCwgMHg0OCwgMHhm OCwgMHg5NCwgMHhlZCwgMHhkZCwgMHgwYSwgMHhlYSwgMHhlYSwgMHg1NiwgMHgxYiwgMHg2MSwg MHgyZSwgMHg3MCwKLSsJIDB4YjIsIDB4ZmIsIDB4ZWMsIDB4YzZ9OwotKwotKyAgICB1bnNpZ25l ZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOwotKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOwot KwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgaWYgKCFITUFDKEVWUF9zaGExKCksa2V5 LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7Ci0r ICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCi0rICAgICAgICByZXR1cm4gMDsKLSsg ICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBITUFDLVNIQTIyNDogZ2VuZXJhdGUgaGFzaCBv ZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRl ZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTIyNF90ZXN0KCkK LSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOwotKyAgICB1 bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGth dmFsW0VWUF9NQVhfTURfU0laRV0gPQotKwl7MHg3NSwgMHg1OCwgMHhkNSwgMHhiZCwgMHg1NSwg MHg2ZCwgMHg4NywgMHgwZiwgMHg3NSwgMHhmZiwgMHhiZSwgMHgxYywgMHhiMiwgMHhmMCwgMHgy MCwgMHgzNSwKLSsJIDB4ZTUsIDB4NjIsIDB4NDksIDB4YjYsIDB4OTQsIDB4YjksIDB4ZmMsIDB4 NjUsIDB4MzQsIDB4MzMsIDB4M2EsIDB4MTl9OwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtF VlBfTUFYX01EX1NJWkVdOwotKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJf Y2xlYXJfZXJyb3IoKTsKLSsgICAgaWYgKCFITUFDKEVWUF9zaGEyMjQoKSxrZXksc2l6ZW9mKGtl eSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKLSsgICAgaWYgKG1l bWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4g MTsKLSsgICAgfQotKwotKy8qIEhNQUMtU0hBMjU2OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRp Z2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3Qg aGFzaAotKyovCi0rc3RhdGljIGludCBGSVBTX2htYWNfc2hhMjU2X3Rlc3QoKQotKyAgICB7Ci0r ICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNo YXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01B WF9NRF9TSVpFXSA9Ci0rCXsweGU5LCAweDE3LCAweGMxLCAweDdiLCAweDRjLCAweDZiLCAweDc3 LCAweGRhLCAweGQyLCAweDMwLCAweDM2LCAweDAyLCAweGY1LCAweDcyLCAweDMzLCAweDg3LAot KwkgMHg5ZiwgMHhjNiwgMHg2ZSwgMHg3YiwgMHg3ZSwgMHhhOCwgMHhlYSwgMHhhYSwgMHg5Ziwg MHhiYSwgMHhlZSwgMHg1MSwgMHhmZiwgMHhkYSwgMHgyNCwgMHhmNH07Ci0rCi0rICAgIHVuc2ln bmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47 Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTI1Nigp LGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAw OwotKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7 Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogSE1BQy1TSEEzODQ6IGdlbmVyYXRlIGhh c2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29t cHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfaG1hY19zaGEzODRfdGVz dCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKLSsg ICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKLSsgICAgdW5zaWduZWQgY2hh ciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KLSsJezB4YjIsIDB4OWQsIDB4NDAsIDB4NTgsIDB4 MzIsIDB4YzQsIDB4ZTMsIDB4MzEsIDB4YjYsIDB4NjMsIDB4MDgsIDB4MjYsIDB4OTksIDB4ZWYs IDB4M2IsIDB4MTAsCi0rCSAweGUyLCAweGRmLCAweGY4LCAweGZmLCAweGM2LCAweGUxLCAweDAz LCAweDI5LCAweDgxLCAweDJhLCAweDFiLCAweGFjLCAweGIwLCAweDA3LCAweDM5LCAweDA4LAot KwkgMHhmMywgMHg5MSwgMHgzNSwgMHgxMSwgMHg3NiwgMHhkNiwgMHg0YywgMHgyMCwgMHhmYiwg MHg0ZCwgMHhjMywgMHhmMywgMHhiOCwgMHg5YiwgMHg4OCwgMHgxY307Ci0rCi0rICAgIHVuc2ln bmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47 Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTM4NCgp LGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAw OwotKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7 Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogSE1BQy1TSEE1MTI6IGdlbmVyYXRlIGhh c2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29t cHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfaG1hY19zaGE1MTJfdGVz dCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKLSsg ICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKLSsgICAgdW5zaWduZWQgY2hh ciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KLSsJezB4Y2QsIDB4M2UsIDB4YjksIDB4NTEsIDB4 YjgsIDB4YmMsIDB4N2YsIDB4OWEsIDB4MjMsIDB4YWYsIDB4ZjMsIDB4NzcsIDB4NTksIDB4ODUs IDB4YTksIDB4ZTYsCi0rCSAweGY3LCAweGQxLCAweDUxLCAweDk2LCAweDE3LCAweGUwLCAweDky LCAweGQ4LCAweGE2LCAweDNiLCAweGMxLCAweGFkLCAweDdlLCAweDI0LCAweGNhLCAweGIxLAot KwkgMHhkNywgMHg3OSwgMHgwYSwgMHhhNSwgMHhlYSwgMHgyYywgMHgwMiwgMHg1OCwgMHgwYiwg MHhhNiwgMHg1MiwgMHg2YiwgMHg2MSwgMHg3ZiwgMHhlYiwgMHg5YywKLSsJIDB4NDcsIDB4ODYs IDB4NWQsIDB4NzQsIDB4MmIsIDB4ODgsIDB4ZGYsIDB4ZWUsIDB4NDYsIDB4NjksIDB4OTYsIDB4 M2QsIDB4YTYsIDB4ZDksIDB4MmEsIDB4NTN9OwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtF VlBfTUFYX01EX1NJWkVdOwotKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJf Y2xlYXJfZXJyb3IoKTsKLSsgICAgaWYgKCFITUFDKEVWUF9zaGE1MTIoKSxrZXksc2l6ZW9mKGtl eSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKLSsgICAgaWYgKG1l bWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4g MTsKLSsgICAgfQotKwotKwotKy8qIERIOiBnZW5lcmF0ZSBzaGFyZWQgcGFyYW1ldGVycwotKyov Ci0rc3RhdGljIGludCBkaF90ZXN0KCkKLSsgICAgewotKyAgICBESCAqZGg7Ci0rICAgIEVSUl9j bGVhcl9lcnJvcigpOwotKyAgICBkaCA9IEZJUFNfZGhfbmV3KCk7Ci0rICAgIGlmICghZGgpCi0r CXJldHVybiAwOwotKyAgICBpZiAoIURIX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZGgsIDEwMjQs IDIsIE5VTEwpKQotKwlyZXR1cm4gMDsKLSsgICAgRklQU19kaF9mcmVlKGRoKTsKLSsgICAgcmV0 dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBaZXJvaXplCi0rKi8KLStzdGF0aWMgaW50IFplcm9pemUo KQotKyAgICB7Ci0rICAgIFJTQSAqa2V5OwotKyAgICBCSUdOVU0gKmJuOwotKyAgICB1bnNpZ25l ZCBjaGFyIHVzZXJrZXlbMTZdID0gCi0rCXsgMHg0OCwgMHg1MCwgMHhmMCwgMHhhMywgMHgzYSwg MHhlZCwgMHhkMywgMHhhZiwgMHg2ZSwgMHg0NywgMHg3ZiwgMHg4MywgMHgwMiwgMHhiMSwgMHgw OSwgMHg2OCB9OwotKyAgICBpbnQgaSwgbjsKLSsKLSsgICAga2V5ID0gRklQU19yc2FfbmV3KCk7 Ci0rICAgIGJuID0gQk5fbmV3KCk7Ci0rICAgIGlmICgha2V5IHx8ICFibikKLSsJcmV0dXJuIDA7 Ci0rICAgIEJOX3NldF93b3JkKGJuLCA2NTUzNyk7Ci0rICAgIGlmICghUlNBX2dlbmVyYXRlX2tl eV9leChrZXksIDEwMjQsYm4sTlVMTCkpCi0rCXJldHVybiAwOwotKyAgICBCTl9mcmVlKGJuKTsK LSsgICAgCi0rICAgIG4gPSBCTl9udW1fYnl0ZXMoa2V5LT5kKTsKLSsgICAgcHJpbnRmKCIgR2Vu ZXJhdGVkICVkIGJ5dGUgUlNBIHByaXZhdGUga2V5XG4iLCBuKTsKLSsgICAgcHJpbnRmKCJcdEJO IGtleSBiZWZvcmUgb3ZlcndyaXRpbmc6XG4iKTsKLSsgICAgZG9fYm5fcHJpbnQoc3Rkb3V0LCBr ZXktPmQpOwotKyAgICBCTl9yYW5kKGtleS0+ZCxuKjgsLTEsMCk7Ci0rICAgIHByaW50ZigiXHRC TiBrZXkgYWZ0ZXIgb3ZlcndyaXRpbmc6XG4iKTsKLSsgICAgZG9fYm5fcHJpbnQoc3Rkb3V0LCBr ZXktPmQpOwotKwotKyAgICBwcmludGYoIlx0Y2hhciBidWZmZXIga2V5IGJlZm9yZSBvdmVyd3Jp dGluZzogXG5cdFx0Iik7Ci0rICAgIGZvcihpID0gMDsgaSA8IHNpemVvZih1c2Vya2V5KTsgaSsr KSBwcmludGYoIiUwMngiLCB1c2Vya2V5W2ldKTsKLSsgICAgICAgIHByaW50ZigiXG4iKTsKLSsg ICAgUkFORF9ieXRlcyh1c2Vya2V5LCBzaXplb2YgdXNlcmtleSk7Ci0rICAgIHByaW50ZigiXHRj aGFyIGJ1ZmZlciBrZXkgYWZ0ZXIgb3ZlcndyaXRpbmc6IFxuXHRcdCIpOwotKyAgICBmb3IoaSA9 IDA7IGkgPCBzaXplb2YodXNlcmtleSk7IGkrKykgcHJpbnRmKCIlMDJ4IiwgdXNlcmtleVtpXSk7 Ci0rICAgICAgICBwcmludGYoIlxuIik7Ci0rCi0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0r c3RhdGljIGludCBFcnJvcjsKLStjb25zdCBjaGFyICogRmFpbChjb25zdCBjaGFyICptc2cpCi0r ICAgIHsKLSsgICAgZG9fcHJpbnRfZXJyb3JzKCk7Ci0rICAgIEVycm9yKys7Ci0rICAgIHJldHVy biBtc2c7IAotKyAgICB9Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCi0rICAg IHsKLSsKLSsgICAgaW50IGRvX2NvcnJ1cHRfcnNhX2tleWdlbiA9IDAsIGRvX2NvcnJ1cHRfZHNh X2tleWdlbiA9IDA7Ci0rICAgIGludCBiYWRfcnNhID0gMCwgYmFkX2RzYSA9IDA7Ci0rICAgIGlu dCBkb19ybmdfc3RpY2sgPSAwOwotKyAgICBpbnQgbm9fZXhpdCA9IDA7Ci0rCi0rICAgIHByaW50 ZigiXHRGSVBTLW1vZGUgdGVzdCBhcHBsaWNhdGlvblxuXG4iKTsKLSsKLSsgICAgLyogTG9hZCBl bnRyb3B5IGZyb20gZXh0ZXJuYWwgZmlsZSwgaWYgYW55ICovCi0rICAgIFJBTkRfbG9hZF9maWxl KCIucm5kIiwgMTAyNCk7Ci0rCi0rICAgIGlmIChhcmd2WzFdKSB7Ci0rICAgICAgICAvKiBDb3Jy dXB0ZWQgS0FUIHRlc3RzICovCi0rICAgICAgICBpZiAoIXN0cmNtcChhcmd2WzFdLCAiYWVzIikp IHsKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfYWVzKCk7Ci0rICAgICAgICAgICAgcHJpbnRm KCJBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7Ci0r ICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRlcyIpKSB7Ci0rICAgICAgICAg ICAgRklQU19jb3JydXB0X2RlcygpOwotKyAgICAgICAgICAgIHByaW50ZigiREVTMy1FQ0IgZW5j cnlwdGlvbi9kZWNyeXB0aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7Ci0rICAgICAgICB9 IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRzYSIpKSB7Ci0rICAgICAgICAgICAgRklQU19j b3JydXB0X2RzYSgpOwotKyAgICAgICAgICAgIHByaW50ZigiRFNBIGtleSBnZW5lcmF0aW9uIGFu ZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOwotKyAgICAg ICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJyc2EiKSkgewotKyAgICAgICAgICAgIEZJ UFNfY29ycnVwdF9yc2EoKTsKLSsgICAgICAgICAgICBwcmludGYoIlJTQSBrZXkgZ2VuZXJhdGlv biBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsg ICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicnNha2V5IikpIHsKLSsgICAgICAg ICAgICBwcmludGYoIlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24g d2l0aCBjb3JydXB0ZWQga2V5Li4uXG4iKTsKLSsJICAgIGJhZF9yc2EgPSAxOwotKwkgICAgbm9f ZXhpdCA9IDE7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJzYWtleWdl biIpKSB7Ci0rCSAgICBkb19jb3JydXB0X3JzYV9rZXlnZW4gPSAxOwotKwkgICAgbm9fZXhpdCA9 IDE7Ci0rICAgICAgICAgICAgcHJpbnRmKCJSU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVy ZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleWdlbi4uLlxuIik7Ci0rICAgICAgICB9IGVs c2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRzYWtleSIpKSB7Ci0rICAgICAgICAgICAgcHJpbnRm KCJEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVw dGVkIGtleS4uLlxuIik7Ci0rCSAgICBiYWRfZHNhID0gMTsKLSsJICAgIG5vX2V4aXQgPSAxOwot KyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJkc2FrZXlnZW4iKSkgewotKwkg ICAgZG9fY29ycnVwdF9kc2Ffa2V5Z2VuID0gMTsKLSsJICAgIG5vX2V4aXQgPSAxOwotKyAgICAg ICAgICAgIHByaW50ZigiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlv biB3aXRoIGNvcnJ1cHRlZCBrZXlnZW4uLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3Ry Y21wKGFyZ3ZbMV0sICJzaGExIikpIHsKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfc2hhMSgp OwotKyAgICAgICAgICAgIHByaW50ZigiU0hBLTEgaGFzaCB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5c biIpOwotKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJuZyIpKSB7Ci0rCSAgICBGSVBT X2NvcnJ1cHRfcm5nKCk7Ci0rCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicm5nc3RpY2si KSkgewotKwkgICAgZG9fcm5nX3N0aWNrID0gMTsKLSsJICAgIG5vX2V4aXQgPSAxOwotKwkgICAg cHJpbnRmKCJSTkcgdGVzdCB3aXRoIHN0dWNrIGNvbnRpbnVvdXMgdGVzdC4uLlxuIik7Ci0rICAg ICAgICB9IGVsc2UgewotKyAgICAgICAgICAgIHByaW50ZigiQmFkIGFyZ3VtZW50IFwiJXNcIlxu IiwgYXJndlsxXSk7Ci0rICAgICAgICAgICAgZXhpdCgxKTsKLSsgICAgICAgIH0KLSsJaWYgKCFu b19leGl0KSB7Ci0rICAgICAgICAJaWYgKCFGSVBTX21vZGVfc2V0KDEpKSB7Ci0rIAkJICAgIGRv X3ByaW50X2Vycm9ycygpOwotKyAgICAgICAgCSAgICBwcmludGYoIlBvd2VyLXVwIHNlbGYgdGVz dCBmYWlsZWRcbiIpOwotKwkJICAgIGV4aXQoMSk7Ci0rCQl9Ci0rICAgICAgICAJcHJpbnRmKCJQ b3dlci11cCBzZWxmIHRlc3Qgc3VjY2Vzc2Z1bFxuIik7Ci0rICAgICAgICAJZXhpdCgwKTsKLSsJ fQotKyAgICB9Ci0rCi0rICAgIC8qIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlv bgotKyAgICAqLwotKyAgICBwcmludGYoIjEuIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9w ZXJhdGlvbiB0ZXN0Li4uXG4iKTsKLSsgICAgcHJpbnRmKCJcdGEuIEluY2x1ZGVkIGFsZ29yaXRo bSAoRC1IKS4uLiIpOwotKyAgICBwcmludGYoIGRoX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDog IEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIFBvd2VyLXVwIHNlbGYgdGVzdAotKyAg ICAqLwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgcHJpbnRmKCIyLiBBdXRvbWF0aWMg cG93ZXItdXAgc2VsZiB0ZXN0Li4uIik7Ci0rICAgIGlmICghRklQU19tb2RlX3NldCgxKSkKLSsJ ewotKwlkb19wcmludF9lcnJvcnMoKTsKLSsgICAgICAgIHByaW50ZihGYWlsKCJGQUlMRUQhXG4i KSk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsgICAgcHJpbnRmKCJzdWNjZXNzZnVsXG4iKTsKLSsgICAg aWYgKGRvX2NvcnJ1cHRfZHNhX2tleWdlbikKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZHNh X2tleWdlbigpOwotKyAgICBpZiAoZG9fY29ycnVwdF9yc2Ffa2V5Z2VuKQotKyAgICAgICAgICAg IEZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuKCk7Ci0rICAgIGlmIChkb19ybmdfc3RpY2spCi0rICAg ICAgICAgICAgRklQU19ybmdfc3RpY2soKTsKLSsKLSsgICAgLyogQUVTIGVuY3J5cHRpb24vZGVj cnlwdGlvbgotKyAgICAqLwotKyAgICBwcmludGYoIjMuIEFFUyBlbmNyeXB0aW9uL2RlY3J5cHRp b24uLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2Flc190ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6 ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBSU0Ega2V5IGdlbmVyYXRpb24gYW5k IGVuY3J5cHRpb24vZGVjcnlwdGlvbgotKyAgICAqLwotKyAgICBwcmludGYoIjQuIFJTQSBrZXkg Z2VuZXJhdGlvbiBhbmQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLi4uIik7Ci0rICAgIHByaW50Zigg RklQU19yc2FfdGVzdChiYWRfcnNhKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFc biIpICk7Ci0rCi0rICAgIC8qIERFUy1DQkMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCi0rICAgICov Ci0rICAgIHByaW50ZigiNS4gREVTLUVDQiBlbmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKLSsg ICAgcHJpbnRmKCBGSVBTX2RlczNfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJ TEVEIVxuIikgKTsKLSsKLSsgICAgLyogRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUg dmFsaWRhdGlvbgotKyAgICAqLwotKyAgICBwcmludGYoIjYuIERTQSBrZXkgZ2VuZXJhdGlvbiBh bmQgc2lnbmF0dXJlIHZhbGlkYXRpb24uLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2RzYV90ZXN0 KGJhZF9kc2EpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsg ICAgLyogU0hBLTEgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdhLiBTSEEtMSBoYXNoLi4u Iik7Ci0rICAgIHByaW50ZiggRklQU19zaGExX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZh aWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIFNIQS0yNTYgaGFzaAotKyAgICAqLwotKyAg ICBwcmludGYoIjdiLiBTSEEtMjU2IGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX3NoYTI1 Nl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAg ICAvKiBTSEEtNTEyIGhhc2gKLSsgICAgKi8KLSsgICAgcHJpbnRmKCI3Yy4gU0hBLTUxMiBoYXNo Li4uIik7Ci0rICAgIHByaW50ZiggRklQU19zaGE1MTJfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIg OiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogSE1BQy1TSEEtMSBoYXNoCi0rICAg ICovCi0rICAgIHByaW50ZigiN2QuIEhNQUMtU0hBLTEgaGFzaC4uLiIpOwotKyAgICBwcmludGYo IEZJUFNfaG1hY19zaGExX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFc biIpICk7Ci0rCi0rICAgIC8qIEhNQUMtU0hBLTIyNCBoYXNoCi0rICAgICovCi0rICAgIHByaW50 ZigiN2UuIEhNQUMtU0hBLTIyNCBoYXNoLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19obWFjX3No YTIyNF90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwot KyAgICAvKiBITUFDLVNIQS0yNTYgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdmLiBITUFD LVNIQS0yNTYgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGEyNTZfdGVzdCgp ID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogSE1B Qy1TSEEtMzg0IGhhc2gKLSsgICAgKi8KLSsgICAgcHJpbnRmKCI3Zy4gSE1BQy1TSEEtMzg0IGhh c2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMzg0X3Rlc3QoKSA/ICJzdWNjZXNz ZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIEhNQUMtU0hBLTUxMiBo YXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2guIEhNQUMtU0hBLTUxMiBoYXNoLi4uIik7Ci0r ICAgIHByaW50ZiggRklQU19obWFjX3NoYTUxMl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBG YWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBOb24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhp YyBvcGVyYXRpb24KLSsgICAgKi8KLSsgICAgcHJpbnRmKCI4LiBOb24tQXBwcm92ZWQgY3J5cHRv Z3JhcGhpYyBvcGVyYXRpb24gdGVzdC4uLlxuIik7Ci0rICAgIHByaW50ZigiXHRhLiBJbmNsdWRl ZCBhbGdvcml0aG0gKEQtSCkuLi4iKTsKLSsgICAgcHJpbnRmKCBkaF90ZXN0KCkgPyAic3VjY2Vz c2Z1bCBhcyBleHBlY3RlZFxuIgotKwkgICAgOiBGYWlsKCJmYWlsZWQgSU5DT1JSRUNUTFkhXG4i KSApOwotKwotKyAgICAvKiBaZXJvaXphdGlvbgotKyAgICAqLwotKyAgICBwcmludGYoIjkuIFpl cm8taXphdGlvbi4uLlxuIik7Ci0rICAgIHByaW50ZiggWmVyb2l6ZSgpID8gIlx0c3VjY2Vzc2Z1 bCBhcyBleHBlY3RlZFxuIgotKwkgICAgOiBGYWlsKCJcdGZhaWxlZCBJTkNPUlJFQ1RMWSFcbiIp ICk7Ci0rCi0rICAgIHByaW50ZigiXG5BbGwgdGVzdHMgY29tcGxldGVkIHdpdGggJWQgZXJyb3Jz XG4iLCBFcnJvcik7Ci0rICAgIHJldHVybiBFcnJvciA/IDEgOiAwOwotKyAgICB9Ci0rCi0rI2Vu ZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9maXBzL01ha2VmaWxlLmZp cHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vZmlwcy9NYWtlZmlsZQotLS0tIG9wZW5zc2wt MS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvTWFrZWZpbGUuZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAy LjU1MDM5Mzc4MiArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL2ZpcHMvTWFr ZWZpbGUJMjAxMi0wMi0wNyAxMToxNjo0NS4zODAyNjM3MTcgKzAxMDAKLUBAIC0wLDAgKzEsMzQw IEBACi0rIwotKyMgT3BlblNTTC9jcnlwdG8vZmlwcy9NYWtlZmlsZQotKyMKLSsKLStESVI9CWZp cHMKLStUT1A9CS4uLy4uCi0rQ0M9CWNjCi0rSU5DTFVERVM9Ci0rQ0ZMQUc9LWcKLStNQUtFRklM RT0JTWFrZWZpbGUKLStBUj0JCWFyIHIKLSsKLStDRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcp Ci0rCi0rR0VORVJBTD1NYWtlZmlsZQotK1RFU1Q9Zmlwc190ZXN0X3N1aXRlLmMgZmlwc19yYW5k dGVzdC5jCi0rQVBQUz0KLSsKLStQUk9HUkFNPSBmaXBzX3N0YW5kYWxvbmVfaG1hYwotK0VYRT0g JChQUk9HUkFNKSQoRVhFX0VYVCkKLSsKLStMSUI9JChUT1ApL2xpYmNyeXB0by5hCi0rTElCU1JD PWZpcHNfYWVzX3NlbGZ0ZXN0LmMgZmlwc19kZXNfc2VsZnRlc3QuYyBmaXBzX2htYWNfc2VsZnRl c3QuYyBmaXBzX3JhbmRfc2VsZnRlc3QuYyBcCi0rICAgIGZpcHNfcnNhX3NlbGZ0ZXN0LmMgZmlw c19zaGFfc2VsZnRlc3QuYyBmaXBzLmMgZmlwc19kc2Ffc2VsZnRlc3QuYyAgZmlwc19yYW5kLmMg XAotKyAgICBmaXBzX3JzYV94OTMxZy5jIGZpcHNfcG9zdC5jIGZpcHNfZHJiZ19jdHIuYyBmaXBz X2RyYmdfaGFzaC5jIGZpcHNfZHJiZ19obWFjLmMgXAotKyAgICBmaXBzX2RyYmdfbGliLmMgZmlw c19kcmJnX3JhbmQuYyBmaXBzX2RyYmdfc2VsZnRlc3QuYyBmaXBzX3JhbmRfbGliLmMgXAotKyAg ICBmaXBzX2NtYWNfc2VsZnRlc3QuYyBmaXBzX2VuYy5jIGZpcHNfbWQuYwotKwotK0xJQk9CSj1m aXBzX2Flc19zZWxmdGVzdC5vIGZpcHNfZGVzX3NlbGZ0ZXN0Lm8gZmlwc19obWFjX3NlbGZ0ZXN0 Lm8gZmlwc19yYW5kX3NlbGZ0ZXN0Lm8gXAotKyAgICBmaXBzX3JzYV9zZWxmdGVzdC5vIGZpcHNf c2hhX3NlbGZ0ZXN0Lm8gZmlwcy5vIGZpcHNfZHNhX3NlbGZ0ZXN0Lm8gIGZpcHNfcmFuZC5vIFwK LSsgICAgZmlwc19yc2FfeDkzMWcubyBmaXBzX3Bvc3QubyBmaXBzX2RyYmdfY3RyLm8gZmlwc19k cmJnX2hhc2gubyBmaXBzX2RyYmdfaG1hYy5vIFwKLSsgICAgZmlwc19kcmJnX2xpYi5vIGZpcHNf ZHJiZ19yYW5kLm8gZmlwc19kcmJnX3NlbGZ0ZXN0Lm8gZmlwc19yYW5kX2xpYi5vIFwKLSsgICAg Zmlwc19jbWFjX3NlbGZ0ZXN0Lm8gZmlwc19lbmMubyBmaXBzX21kLm8KLSsKLStMSUJDUllQVE89 LUwuLiAtbGNyeXB0bwotKwotK1NSQz0gJChMSUJTUkMpIGZpcHNfc3RhbmRhbG9uZV9obWFjLmMK LSsKLStFWEhFQURFUj0gZmlwcy5oIGZpcHNfcmFuZC5oCi0rSEVBREVSPQkkKEVYSEVBREVSKQot KwotK0FMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChIRUFERVIpCi0rCi0rdG9wOgotKwkoY2Qg Li4vLi47ICQoTUFLRSkgRElSUz1jcnlwdG8gU0RJUlM9JChESVIpIHN1Yl9hbGwpCi0rCi0rYWxs OglsaWIgZXhlCi0rCi0rbGliOgkkKExJQk9CSikKLSsJJChBUikgJChMSUIpICQoTElCT0JKKQot KwkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KLSsJQHRvdWNoIGxpYgotKwot K2V4ZToJJChFWEUpCi0rCi0rZmlsZXM6Ci0rCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwg TWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCi0rCi0rbGlua3M6Ci0rCUAkKFBFUkwpICQoVE9QKS91 dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKLSsJQCQoUEVS TCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL3Rlc3QgJChURVNUKQotKwlAJChQRVJMKSAk KFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCi0rCi0raW5zdGFsbDoKLSsJ QFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4u LgotKwlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRlcmxpc3QgOyBc Ci0rCWRvICBcCi0rCShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1 ZGUvb3BlbnNzbC8kJGk7IFwKLSsJY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxM VE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKLSsJZG9uZTsKLSsKLSt0YWdzOgotKwljdGFn cyAkKFNSQykKLSsKLSt0ZXN0czoKLSsKLStsaW50OgotKwlsaW50IC1ETElOVCAkKElOQ0xVREVT KSAkKFNSQyk+Zmx1ZmYKLSsKLStkZXBlbmQ6Ci0rCUBbIC1uICIkKE1BS0VERVBFTkQpIiBdICMg c2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmlsZS4uLgotKwkkKE1BS0VERVBFTkQpIC0tICQo Q0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChMSUJTUkMpCi0rCi0r ZGNsZWFuOgotKwkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElORS8p IHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3Ci0rCW12IC1mIE1h a2VmaWxlLm5ldyAkKE1BS0VGSUxFKQotKwotK2NsZWFuOgotKwlybSAtZiAqLm8gKi5vYmogbGli IHRhZ3MgY29yZSAucHVyZSAubmZzKiAqLm9sZCAqLmJhayBmbHVmZgotKwotKyQoRVhFKTogJChQ Uk9HUkFNKS5vCi0rCUZJUFNfU0hBX0FTTT0iIjsgZm9yIGkgaW4gJChTSEExX0FTTV9PQkopIHNo YTI1Ni5vOyBkbyBGSVBTX1NIQV9BU009IiQkRklQU19TSEFfQVNNIC4uL3NoYS8kJGkiIDsgZG9u ZTsgXAotKwkkKENDKSAtbyAkQCAkKENGTEFHUykgJChQUk9HUkFNKS5vICQkRklQU19TSEFfQVNN Ci0rCi0rIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9u IGl0LgotKwotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9hc24xLmgKLStmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK2ZpcHMubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBz Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvaG1hYy5oCi0rZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwcy5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Nz bF90eXAuaAotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvcnNhLmgKLStmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3Rh Y2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHMubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwcy5jIGZpcHNfbG9jbC5oCi0rZmlwc19hZXNfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YmlvLmgKLStmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRv LmgKLStmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNf YWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19hZXNf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfYWVzX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX2Flc19zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfYWVzX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19hZXNfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLStmaXBzX2Flc19zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX2Flc19zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfYWVzX3NlbGZ0ZXN0LmMK LStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK2ZpcHNfZGVzX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZmlwcy5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xo YXNoLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21h Yy5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMu aAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29u Zi5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2 LmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAu aAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2su aAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0r Zmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlw c19kZXNfc2VsZnRlc3QuYwotK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLStmaXBzX2RyYmdfY3RyLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgK LStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9ldnAuaAotK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKLStmaXBzX2RyYmdf Y3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29ial9tYWMuaAotK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVj dHMuaAotK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25m LmgKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0r Zmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvcmFuZC5oCi0rZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi0rZmlwc19kcmJnX2N0 ci5vOiBmaXBzX2RyYmdfY3RyLmMgZmlwc19yYW5kX2xjbC5oCi0rZmlwc19kcmJnX2hhc2gubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgK LStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rZmlwc19kcmJnX2hh c2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAot K2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBz X2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNf ZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19kcmJn X2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3JhbmQuaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z YWZlc3RhY2suaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFj ay5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgg Zmlwc19kcmJnX2hhc2guYwotK2ZpcHNfZHJiZ19oYXNoLm86IGZpcHNfcmFuZF9sY2wuaAotK2Zp cHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYXNuMS5oCi0rZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfZHJiZ19obWFjLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAu aAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBz X2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKLStmaXBzX2Ry YmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmpfbWFjLmgKLStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqZWN0cy5oCi0rZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5z c2xjb25mLmgKLStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bHYuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zeW1oYWNrcy5oIGZpcHNfZHJiZ19obWFjLmMKLStmaXBzX2RyYmdfaG1hYy5vOiBmaXBz X3JhbmRfbGNsLmgKLStmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlw c19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXJyLmgKLStmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l dnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMu aAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2xjb25mLmgKLStmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3Nsdi5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Nz bF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi0rZmlwc19kcmJnX2xpYi5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX2RyYmdfbGliLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5o Ci0rZmlwc19kcmJnX2xpYi5vOiBmaXBzX2RyYmdfbGliLmMgZmlwc19sb2NsLmggZmlwc19yYW5k X2xjbC5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19k cmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2 cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlw c19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfZHJi Z19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX2RyYmdfcmFu ZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfZHJiZ19yYW5k Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19kcmJnX3JhbmQubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Jh bmQuaAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2su aAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlw c19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kcmJn X3JhbmQuYwotK2ZpcHNfZHJiZ19yYW5kLm86IGZpcHNfcmFuZF9sY2wuaAotK2ZpcHNfZHJiZ19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2FzbjEuaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YmlvLmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0 by5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2Zp cHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKLStm aXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAotK2ZpcHNf ZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfZHJi Z19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19kcmJn X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX2RyYmdf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX2Ry Ymdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX2Ry Ymdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLStmaXBzX2Ry Ymdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotK2ZpcHNfZHJiZ19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX2RyYmdf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX2RyYmdfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kcmJnX3NlbGZ0 ZXN0LmMKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogZmlwc19kcmJnX3NlbGZ0ZXN0LmggZmlwc19s b2NsLmggZmlwc19yYW5kX2xjbC5oCi0rZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLStmaXBzX2RzYV9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvY3J5cHRvLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5o Ci0rZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc3ltaGFja3MuaCBmaXBzX2RzYV9zZWxmdGVzdC5jCi0rZmlwc19kc2Ffc2VsZnRlc3Qu bzogZmlwc19sb2NsLmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLStmaXBzX2htYWNfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l cnIuaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3NzbF90eXAuaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19obWFjX3NlbGZ0ZXN0LmMKLStmaXBzX3Bvc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgK LStmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNh LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLStmaXBzX3Bvc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK2ZpcHNfcG9z dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9m aXBzX3JhbmQuaAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNf cG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfcG9zdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3NzbF90eXAuaAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX3Bv c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19sb2NsLmggZmlwc19w b3N0LmMKLStmaXBzX3JhbmQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h ZXMuaAotK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Y3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLStmaXBzX3JhbmQubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK2Zp cHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9maXBzX3JhbmQuaAotK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1h Yy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAot K2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNf cmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3NzbF90eXAuaAotK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFu ZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfcmFuZC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3Mu aAotK2ZpcHNfcmFuZC5vOiBmaXBzX2xvY2wuaCBmaXBzX3JhbmQuYwotK2ZpcHNfcmFuZF9saWIu bzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaAotK2ZpcHNfcmFuZF9s aWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YmlvLmgKLStmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK2ZpcHNfcmFu ZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZmlwc19yYW5kLmgKLStmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9o bWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX3JhbmRfbGliLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX3JhbmRfbGliLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotK2ZpcHNfcmFuZF9saWIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19yYW5kX2xpYi5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFj a3MuaAotK2ZpcHNfcmFuZF9saWIubzogZmlwc19yYW5kX2xpYi5jCi0rZmlwc19yYW5kX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YXNuMS5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8u aAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgK LStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwc19y YW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAotK2ZpcHNf cmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCi0rZmlwc19yYW5k X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19yYW5kX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX3JhbmRfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfcmFuZF9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfcmFuZF9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfcmFuZF9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotK2ZpcHNfcmFuZF9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi0rZmlwc19yYW5kX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfcmFuZF9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNfcmFuZF9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2xvY2wuaAotK2ZpcHNf cmFuZF9zZWxmdGVzdC5vOiBmaXBzX3JhbmRfc2VsZnRlc3QuYwotK2ZpcHNfcnNhX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jp by5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlw c19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvbGhhc2guaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmpfbWFjLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqZWN0cy5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2xjb25mLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbHYuaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v c3NsX3R5cC5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Jz YS5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFj ay5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgK LStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBm aXBzX3JzYV9zZWxmdGVzdC5jCi0rZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLStmaXBzX3JzYV94OTMxZy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRv LmgKLStmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19yc2Ff eDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX3JzYV94 OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfcnNhX3g5MzFn Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9yc2EuaAotK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3Rh Y2suaAotK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0r Zmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19y c2FfeDkzMWcuYwotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h c24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlwc19zaGFfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0r Zmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvbGhhc2guaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmpfbWFjLmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2xjb25mLmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbHYuaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vc3NsX3R5cC5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3NhZmVzdGFjay5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19zaGFfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19zaGFfc2VsZnRlc3QuYwot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vaG1hYy9obWFjLmMuZmlwcyBvcGVu c3NsLTEuMC4xLWJldGEyL2NyeXB0by9obWFjL2htYWMuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0 YTIvY3J5cHRvL2htYWMvaG1hYy5jLmZpcHMJMjAxMS0wNi0xMiAxNzowNzoyNi4wMDAwMDAwMDAg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9obWFjL2htYWMuYwkyMDEyLTAy LTA3IDExOjA3OjAyLjU1MDM5Mzc4MiArMDEwMAotQEAgLTgxLDExICs4MSw2IEBAIGludCBITUFD X0luaXRfZXgoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm8KLSAJCQlFVlBlcnIoRVZQX0ZfSE1BQ19J TklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7Ci0gCQkJcmV0dXJuIDA7Ci0gCQkJfQot LQkJLyogT3RoZXIgYWxnb3JpdGhtIGJsb2NraW5nIHdpbGwgYmUgZG9uZSBpbiBGSVBTX2NtYWNf aW5pdCwKLS0JCSAqIHZpYSBGSVBTX2htYWNfaW5pdF9leCgpLgotLQkJICovCi0tCQlpZiAoIWlt cGwgJiYgIWN0eC0+aV9jdHguZW5naW5lKQotLQkJCXJldHVybiBGSVBTX2htYWNfaW5pdF9leChj dHgsIGtleSwgbGVuLCBtZCwgTlVMTCk7Ci0gCQl9Ci0gI2VuZGlmCi0gCi1AQCAtOTksNiArOTQs MTMgQEAgaW50IEhNQUNfSW5pdF9leChITUFDX0NUWCAqY3R4LCBjb25zdCB2bwotIAotIAlpZiAo a2V5ICE9IE5VTEwpCi0gCQl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJaWYgKEZJUFNfbW9k ZSgpICYmICEobWQtPmZsYWdzICYgRVZQX01EX0ZMQUdfRklQUykKLSsJCSYmICghKGN0eC0+bWRf Y3R4LmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKQotKwkJIHx8ICEoY3R4 LT5pX2N0eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykKLSsJCSB8fCAh KGN0eC0+b19jdHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKSkKLSsJ CQlnb3RvIGVycjsKLSsjZW5kaWYKLSAJCXJlc2V0PTE7Ci0gCQlqPUVWUF9NRF9ibG9ja19zaXpl KG1kKTsKLSAJCU9QRU5TU0xfYXNzZXJ0KGogPD0gKGludClzaXplb2YoY3R4LT5rZXkpKTsKLUBA IC0xNTUsMTAgKzE1Nyw2IEBAIGludCBITUFDX0luaXQoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm9p ZAotIAotIGludCBITUFDX1VwZGF0ZShITUFDX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFy ICpkYXRhLCBzaXplX3QgbGVuKQotIAl7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQlpZiAoRklQ U19tb2RlKCkgJiYgIWN0eC0+aV9jdHguZW5naW5lKQotLQkJcmV0dXJuIEZJUFNfaG1hY191cGRh dGUoY3R4LCBkYXRhLCBsZW4pOwotLSNlbmRpZgotIAlyZXR1cm4gRVZQX0RpZ2VzdFVwZGF0ZSgm Y3R4LT5tZF9jdHgsZGF0YSxsZW4pOwotIAl9Ci0gCi1AQCAtMTY2LDEwICsxNjQsNiBAQCBpbnQg SE1BQ19GaW5hbChITUFDX0NUWCAqY3R4LCB1bnNpZ25lZCBjCi0gCXsKLSAJdW5zaWduZWQgaW50 IGk7Ci0gCXVuc2lnbmVkIGNoYXIgYnVmW0VWUF9NQVhfTURfU0laRV07Ci0tI2lmZGVmIE9QRU5T U0xfRklQUwotLQlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+aV9jdHguZW5naW5lKQotLQkJcmV0 dXJuIEZJUFNfaG1hY19maW5hbChjdHgsIG1kLCBsZW4pOwotLSNlbmRpZgotIAotIAlpZiAoIUVW UF9EaWdlc3RGaW5hbF9leCgmY3R4LT5tZF9jdHgsYnVmLCZpKSkKLSAJCWdvdG8gZXJyOwotQEAg LTIwOSwxMyArMjAzLDYgQEAgaW50IEhNQUNfQ1RYX2NvcHkoSE1BQ19DVFggKmRjdHgsIEhNQUNf QwotIAotIHZvaWQgSE1BQ19DVFhfY2xlYW51cChITUFDX0NUWCAqY3R4KQotIAl7Ci0tI2lmZGVm IE9QRU5TU0xfRklQUwotLQlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+aV9jdHguZW5naW5lKQot LQkJewotLQkJRklQU19obWFjX2N0eF9jbGVhbnVwKGN0eCk7Ci0tCQlyZXR1cm47Ci0tCQl9Ci0t I2VuZGlmCi0gCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4LT5pX2N0eCk7Ci0gCUVWUF9NRF9DVFhf Y2xlYW51cCgmY3R4LT5vX2N0eCk7Ci0gCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4LT5tZF9jdHgp OwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vbWQyL21kMl9kZ3N0LmMuZmlw cyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9tZDIvbWQyX2Rnc3QuYwotLS0tIG9wZW5zc2wt MS4wLjEtYmV0YTIvY3J5cHRvL21kMi9tZDJfZGdzdC5jLmZpcHMJMjAxMS0wNi0wMSAxNTozOTo0 My4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9tZDIvbWQy X2Rnc3QuYwkyMDEyLTAyLTA3IDExOjA3OjAyLjU1MDM5Mzc4MiArMDEwMAotQEAgLTYyLDYgKzYy LDExIEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvbWQyLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvb3Bl bnNzbHYuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgotIAotIGNvbnN0IGNoYXIgTUQyX3ZlcnNpb25bXT0iTUQyIiBPUEVOU1NM X1ZFUlNJT05fUFRFWFQ7Ci0gCi1AQCAtMTE2LDcgKzEyMSw3IEBAIGNvbnN0IGNoYXIgKk1EMl9v cHRpb25zKHZvaWQpCi0gCQlyZXR1cm4oIm1kMihpbnQpIik7Ci0gCX0KLSAKLS1maXBzX21kX2lu aXQoTUQyKQotK25vbmZpcHNfbWRfaW5pdChNRDIpCi0gCXsKLSAJYy0+bnVtPTA7Ci0gCW1lbXNl dChjLT5zdGF0ZSwwLHNpemVvZiBjLT5zdGF0ZSk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJl dGEyL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRv L21kNC9tZDRfZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vbWQ0L21kNF9k Z3N0LmMuZmlwcwkyMDExLTA2LTAxIDE1OjM5OjQzLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5z c2wtMS4wLjEtYmV0YTIvY3J5cHRvL21kNC9tZDRfZGdzdC5jCTIwMTItMDItMDcgMTE6MDc6MDIu NTUwMzkzNzgyICswMTAwCi1AQCAtNzEsNyArNzEsNyBAQCBjb25zdCBjaGFyIE1ENF92ZXJzaW9u W109Ik1ENCIgT1BFTlNTTF9WCi0gI2RlZmluZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9uZykw eDk4YmFkY2ZlTAotICNkZWZpbmUgSU5JVF9EQVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3 NkwKLSAKLS1maXBzX21kX2luaXQoTUQ0KQotK25vbmZpcHNfbWRfaW5pdChNRDQpCi0gCXsKLSAJ bWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCWMtPkE9SU5JVF9EQVRBX0E7Ci1kaWZmIC11cCBv cGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4w LjEtYmV0YTIvY3J5cHRvL21kNS9tZDVfZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9j cnlwdG8vbWQ1L21kNV9kZ3N0LmMuZmlwcwkyMDExLTA2LTAxIDE1OjM5OjQzLjAwMDAwMDAwMCAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL21kNS9tZDVfZGdzdC5jCTIwMTIt MDItMDcgMTE6MDc6MDIuNTUwMzkzNzgyICswMTAwCi1AQCAtNzEsNyArNzEsNyBAQCBjb25zdCBj aGFyIE1ENV92ZXJzaW9uW109Ik1ENSIgT1BFTlNTTF9WCi0gI2RlZmluZSBJTklUX0RBVEFfQyAo dW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAotICNkZWZpbmUgSU5JVF9EQVRBX0QgKHVuc2lnbmVk IGxvbmcpMHgxMDMyNTQ3NkwKLSAKLS1maXBzX21kX2luaXQoTUQ1KQotK25vbmZpcHNfbWRfaW5p dChNRDUpCi0gCXsKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCWMtPkE9SU5JVF9EQVRB X0E7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMu ZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMKLS0tLSBvcGVu c3NsLTEuMC4xLWJldGEyL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMuZmlwcwkyMDExLTA2LTAxIDE1 OjM5OjQ0LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL21k YzIvbWRjMmRnc3QuYwkyMDEyLTAyLTA3IDExOjA3OjAyLjU1MDM5Mzc4MiArMDEwMAotQEAgLTc2 LDcgKzc2LDcgQEAKLSAJCQkqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKT4+MjRMKSYweGZm KSkKLSAKLSBzdGF0aWMgdm9pZCBtZGMyX2JvZHkoTURDMl9DVFggKmMsIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmluLCBzaXplX3QgbGVuKTsKLS1maXBzX21kX2luaXQoTURDMikKLStub25maXBzX21k X2luaXQoTURDMikKLSAJewotIAljLT5udW09MDsKLSAJYy0+cGFkX3R5cGU9MTsKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL29faW5pdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1i ZXRhMi9jcnlwdG8vb19pbml0LmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9vX2lu aXQuYy5maXBzCTIwMTEtMDUtMjYgMTY6MTk6MTkuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNz bC0xLjAuMS1iZXRhMi9jcnlwdG8vb19pbml0LmMJMjAxMi0wMi0wNyAxMTowNzowMi41NTEzOTM3 OTEgKzAxMDAKLUBAIC01NSwyOCArNTUsNjMgQEAKLSAjaW5jbHVkZSA8ZV9vcy5oPgotICNpbmNs dWRlIDxvcGVuc3NsL2Vyci5oPgotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8c3lz L3R5cGVzLmg+Ci0rI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0rI2luY2x1ZGUgPGZjbnRsLmg+Ci0r I2luY2x1ZGUgPHVuaXN0ZC5oPgotKyNpbmNsdWRlIDxlcnJuby5oPgotKyNpbmNsdWRlIDxzdGRs aWIuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmFu ZC5oPgotKwotKyNkZWZpbmUgRklQU19NT0RFX1NXSVRDSF9GSUxFICIvcHJvYy9zeXMvY3J5cHRv L2ZpcHNfZW5hYmxlZCIKLSsKLStzdGF0aWMgdm9pZCBpbml0X2ZpcHNfbW9kZSh2b2lkKQotKwl7 Ci0rCWNoYXIgYnVmWzJdID0gIjAiOwotKwlpbnQgZmQ7Ci0rCQotKwlpZiAoZ2V0ZW52KCJPUEVO U1NMX0ZPUkNFX0ZJUFNfTU9ERSIpICE9IE5VTEwpCi0rCQl7Ci0rCQlidWZbMF0gPSAnMSc7Ci0r CQl9Ci0rCWVsc2UgaWYgKChmZCA9IG9wZW4oRklQU19NT0RFX1NXSVRDSF9GSUxFLCBPX1JET05M WSkpID49IDApCi0rCQl7Ci0rCQl3aGlsZSAocmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkgPCAw ICYmIGVycm5vID09IEVJTlRSKTsKLSsJCWNsb3NlKGZkKTsKLSsJCX0KLSsJLyogRmFpbHVyZSBy ZWFkaW5nIHRoZSBmaXBzIG1vZGUgc3dpdGNoIGZpbGUgbWVhbnMganVzdCBub3QKLSsJICogc3dp dGNoaW5nIGludG8gRklQUyBtb2RlLiBXZSB3b3VsZCBicmVhayB0b28gbWFueSB0aGluZ3MKLSsJ ICogb3RoZXJ3aXNlLiAKLSsJICovCi0rCQotKwlpZiAoYnVmWzBdID09ICcxJykKLSsJCXsKLSsJ CUZJUFNfbW9kZV9zZXQoMSk7Ci0rCQl9Ci0rCX0KLSAjZW5kaWYKLSAKLSAvKiBQZXJmb3JtIGFu eSBlc3NlbnRpYWwgT3BlblNTTCBpbml0aWFsaXphdGlvbiBvcGVyYXRpb25zLgotICAqIEN1cnJl bnRseSBvbmx5IHNldHMgRklQUyBjYWxsYmFja3MKLSAgKi8KLSAKLS12b2lkIE9QRU5TU0xfaW5p dCh2b2lkKQotK3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCkKLSAJewotIAlzdGF0aWMg aW50IGRvbmUgPSAwOwotIAlpZiAoZG9uZSkKLSAJCXJldHVybjsKLSAJZG9uZSA9IDE7Ci0gI2lm ZGVmIE9QRU5TU0xfRklQUwotLQlGSVBTX3NldF9sb2NraW5nX2NhbGxiYWNrcyhDUllQVE9fbG9j aywgQ1JZUFRPX2FkZF9sb2NrKTsKLS0JRklQU19zZXRfZXJyb3JfY2FsbGJhY2tzKEVSUl9wdXRf ZXJyb3IsIEVSUl9hZGRfZXJyb3JfdmRhdGEpOwotLQlGSVBTX3NldF9tYWxsb2NfY2FsbGJhY2tz KENSWVBUT19tYWxsb2MsIENSWVBUT19mcmVlKTsKLSAJUkFORF9pbml0X2ZpcHMoKTsKLSsJaW5p dF9maXBzX21vZGUoKTsKLSAjZW5kaWYKLSAjaWYgMAotIAlmcHJpbnRmKHN0ZGVyciwgIkNhbGxl ZCBPUEVOU1NMX2luaXRcbiIpOwotICNlbmRpZgotIAl9Ci0gCi0rdm9pZCBPUEVOU1NMX2luaXQo dm9pZCkKLSsJewotKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOwotKwl9Ci1kaWZmIC11cCBvcGVu c3NsLTEuMC4xLWJldGEyL2NyeXB0by9vcGVuc3NsY29uZi5oLmluLmZpcHMgb3BlbnNzbC0xLjAu MS1iZXRhMi9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbgotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIv Y3J5cHRvL29wZW5zc2xjb25mLmguaW4uZmlwcwkyMDA1LTEyLTE2IDExOjM3OjIzLjAwMDAwMDAw MCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL29wZW5zc2xjb25mLmguaW4J MjAxMi0wMi0wNyAxMTowNzowMi41NTEzOTM3OTEgKzAxMDAKLUBAIC0xLDUgKzEsMjAgQEAKLSAv KiBjcnlwdG8vb3BlbnNzbGNvbmYuaC5pbiAqLwotIAotKyNpZmRlZiBPUEVOU1NMX0RPSU5HX01B S0VERVBFTkQKLSsKLSsvKiBJbmNsdWRlIGFueSBzeW1ib2xzIGhlcmUgdGhhdCBoYXZlIHRvIGJl IGV4cGxpY2l0bHkgc2V0IHRvIGVuYWJsZSBhIGZlYXR1cmUKLSsgKiB0aGF0IHNob3VsZCBiZSB2 aXNpYmxlIHRvIG1ha2VkZXBlbmQuCi0rICoKLSsgKiBbT3VyICJtYWtlIGRlcGVuZCIgZG9lc24n dCBhY3R1YWxseSBsb29rIGF0IHRoaXMsIHdlIHVzZSBhY3R1YWwgYnVpbGQgc2V0dGluZ3MKLSsg KiBpbnN0ZWFkOyB3ZSB3YW50IHRvIG1ha2UgaXQgZWFzeSB0byByZW1vdmUgc3ViZGlyZWN0b3Jp ZXMgd2l0aCBkaXNhYmxlZCBhbGdvcml0aG1zLl0KLSsgKi8KLSsKLSsjaWZuZGVmIE9QRU5TU0xf RklQUwotKyNkZWZpbmUgT1BFTlNTTF9GSVBTCi0rI2VuZGlmCi0rCi0rI2VuZGlmCi0rCi0gLyog R2VuZXJhdGUgODAzODYgY29kZT8gKi8KLSAjdW5kZWYgSTM4Nl9PTkxZCi0gCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9wa2NzMTIvcDEyX2NydC5jLmZpcHMgb3BlbnNzbC0x LjAuMS1iZXRhMi9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0 YTIvY3J5cHRvL3BrY3MxMi9wMTJfY3J0LmMuZmlwcwkyMDA5LTAzLTA5IDE0OjA4OjA0LjAwMDAw MDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3BrY3MxMi9wMTJfY3J0 LmMJMjAxMi0wMi0wNyAxMTowNzowMi41NTEzOTM3OTEgKzAxMDAKLUBAIC01OSw2ICs1OSwxMCBA QAotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlICJjcnlwdGxpYi5oIgotICNpbmNsdWRl IDxvcGVuc3NsL3BrY3MxMi5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gCi0gCi0gc3RhdGljIGludCBwa2NzMTJfYWRkX2Jh ZyhTVEFDS19PRihQS0NTMTJfU0FGRUJBRykgKipwYmFncywgUEtDUzEyX1NBRkVCQUcgKmJhZyk7 Ci1AQCAtOTAsNyArOTQsMTQgQEAgUEtDUzEyICpQS0NTMTJfY3JlYXRlKGNoYXIgKnBhc3MsIGNo YXIgKgotIAotIAkvKiBTZXQgZGVmYXVsdHMgKi8KLSAJaWYgKCFuaWRfY2VydCkKLSsJCXsKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rCQlpZiAoRklQU19tb2RlKCkpCi0rCQkJbmlkX2NlcnQgPSBO SURfcGJlX1dpdGhTSEExQW5kM19LZXlfVHJpcGxlREVTX0NCQzsKLSsJCWVsc2UKLSsjZW5kaWYK LSAJCW5pZF9jZXJ0ID0gTklEX3BiZV9XaXRoU0hBMUFuZDQwQml0UkMyX0NCQzsKLSsJCX0KLSAJ aWYgKCFuaWRfa2V5KQotIAkJbmlkX2tleSA9IE5JRF9wYmVfV2l0aFNIQTFBbmQzX0tleV9Ucmlw bGVERVNfQ0JDOwotIAlpZiAoIWl0ZXIpCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2Ny eXB0by9yYW5kL21kX3JhbmQuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3JhbmQv bWRfcmFuZC5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vcmFuZC9tZF9yYW5kLmMu ZmlwcwkyMDExLTAxLTI2IDE1OjU1OjIzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjEtYmV0YTIvY3J5cHRvL3JhbmQvbWRfcmFuZC5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTUxMzkz NzkxICswMTAwCi1AQCAtMzg5LDcgKzM4OSwxMCBAQCBzdGF0aWMgaW50IHNzbGVheV9yYW5kX2J5 dGVzKHVuc2lnbmVkIGNoCi0gCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EMik7Ci0g CWNyeXB0b19sb2NrX3JhbmQgPSAxOwotIAotLQlpZiAoIWluaXRpYWxpemVkKQotKwkvKiBhbHdh eXMgcG9sbCBmb3IgZXh0ZXJuYWwgZW50cm9weSBpbiBGSVBTIG1vZGUsIGRyYmcgcHJvdmlkZXMg dGhlIAotKwkgKiBleHBhbnNpb24KLSsJICovCi0rCWlmICghaW5pdGlhbGl6ZWQgfHwgRklQU19t b2R1bGVfbW9kZSgpKSAKLSAJCXsKLSAJCVJBTkRfcG9sbCgpOwotIAkJaW5pdGlhbGl6ZWQgPSAx OwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vcmFuZC9yYW5kLmguZmlwcyBv cGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9yYW5kL3JhbmQuaAotLS0tIG9wZW5zc2wtMS4wLjEt YmV0YTIvY3J5cHRvL3JhbmQvcmFuZC5oLmZpcHMJMjAxMi0wMi0wNyAxMTowNzowMS45OTQzODkx NTUgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9yYW5kL3JhbmQuaAkyMDEy LTAyLTA3IDExOjA3OjAyLjU1MTM5Mzc5MSArMDEwMAotQEAgLTEzMywxNSArMTMzLDMzIEBAIHZv aWQgRVJSX2xvYWRfUkFORF9zdHJpbmdzKHZvaWQpOwotIC8qIEVycm9yIGNvZGVzIGZvciB0aGUg UkFORCBmdW5jdGlvbnMuICovCi0gCi0gLyogRnVuY3Rpb24gY29kZXMuICovCi0rI2RlZmluZSBS QU5EX0ZfRU5HX1JBTkRfR0VUX1JBTkRfTUVUSE9ECQkJIDEwOAotKyNkZWZpbmUgUkFORF9GX0ZJ UFNfUkFORAkJCQkgMTAzCi0rI2RlZmluZSBSQU5EX0ZfRklQU19SQU5EX0JZVEVTCQkJCSAxMDIK LSsjZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkRfU0VUX0RUCQkJCSAxMDYKLSsjZGVmaW5lIFJBTkRf Rl9GSVBTX1g5MzFfU0VUX0RUCQkJCSAxMDYKLSsjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9EVAkJ CQkgMTA0Ci0rI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVECQkJIDEwNwotKyNkZWZp bmUgUkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9ERQkJCSAxMDUKLSAjZGVmaW5lIFJBTkRfRl9SQU5E X0dFVF9SQU5EX01FVEhPRAkJCSAxMDEKLS0jZGVmaW5lIFJBTkRfRl9SQU5EX0lOSVRfRklQUwkJ CQkgMTAyCi0rI2RlZmluZSBSQU5EX0ZfUkFORF9JTklUX0ZJUFMJCQkJIDEwOQotICNkZWZpbmUg UkFORF9GX1NTTEVBWV9SQU5EX0JZVEVTCQkJIDEwMAotIAotIC8qIFJlYXNvbiBjb2Rlcy4gKi8K LS0jZGVmaW5lIFJBTkRfUl9FUlJPUl9JTklUSUFMSVNJTkdfRFJCRwkJCSAxMDIKLS0jZGVmaW5l IFJBTkRfUl9FUlJPUl9JTlNUQU5USUFUSU5HX0RSQkcJCQkgMTAzCi0tI2RlZmluZSBSQU5EX1Jf Tk9fRklQU19SQU5ET01fTUVUSE9EX1NFVAkJIDEwMQotKyNkZWZpbmUgUkFORF9SX0VSUk9SX0lO SVRJQUxJU0lOR19EUkJHCQkJIDExMgotKyNkZWZpbmUgUkFORF9SX0VSUk9SX0lOU1RBTlRJQVRJ TkdfRFJCRwkJCSAxMTMKLSsjZGVmaW5lIFJBTkRfUl9OT05fRklQU19NRVRIT0QJCQkJIDEwNQot KyNkZWZpbmUgUkFORF9SX05PVF9JTl9URVNUX01PREUJCQkJIDEwNgotKyNkZWZpbmUgUkFORF9S X05PX0ZJUFNfUkFORE9NX01FVEhPRF9TRVQJCSAxMTEKLSsjZGVmaW5lIFJBTkRfUl9OT19LRVlf U0VUCQkJCSAxMDcKLSsjZGVmaW5lIFJBTkRfUl9QUk5HX0FTS0lOR19GT1JfVE9PX01VQ0gJCQkg MTAxCi0rI2RlZmluZSBSQU5EX1JfUFJOR19FUlJPUgkJCQkgMTA4Ci0rI2RlZmluZSBSQU5EX1Jf UFJOR19LRVlFRAkJCQkgMTA5Ci0rI2RlZmluZSBSQU5EX1JfUFJOR19OT1RfUkVLRVlFRAkJCQkg MTAyCi0rI2RlZmluZSBSQU5EX1JfUFJOR19OT1RfUkVTRUVERUQJCQkgMTAzCi0gI2RlZmluZSBS QU5EX1JfUFJOR19OT1RfU0VFREVECQkJCSAxMDAKLSsjZGVmaW5lIFJBTkRfUl9QUk5HX1NFRURf TVVTVF9OT1RfTUFUQ0hfS0VZCQkgMTEwCi0rI2RlZmluZSBSQU5EX1JfUFJOR19TVFVDSwkJCQkg MTA0Ci0gCi0gI2lmZGVmICBfX2NwbHVzcGx1cwotIH0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEt YmV0YTIvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMi9j cnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9y aXBlbWQvcm1kX2Rnc3QuYy5maXBzCTIwMTEtMDYtMDEgMTU6Mzk6NDQuMDAwMDAwMDAwICswMjAw Ci0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMJMjAxMi0w Mi0wNyAxMTowNzowMi41NTIzOTM3OTkgKzAxMDAKLUBAIC03MCw3ICs3MCw3IEBAIGNvbnN0IGNo YXIgUk1EMTYwX3ZlcnNpb25bXT0iUklQRS1NRDE2MCIKLSAgICAgIHZvaWQgcmlwZW1kMTYwX2Js b2NrKFJJUEVNRDE2MF9DVFggKmMsIHVuc2lnbmVkIGxvbmcgKnAsc2l6ZV90IG51bSk7Ci0gIyAg ZW5kaWYKLSAKLS1maXBzX21kX2luaXQoUklQRU1EMTYwKQotK25vbmZpcHNfbWRfaW5pdChSSVBF TUQxNjApCi0gCXsKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCWMtPkE9UklQRU1EMTYw X0E7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9yc2EvcnNhX2NycHQuYy5m aXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3JzYS9yc2FfY3JwdC5jCi0tLS0gb3BlbnNz bC0xLjAuMS1iZXRhMi9jcnlwdG8vcnNhL3JzYV9jcnB0LmMuZmlwcwkyMDExLTA2LTAyIDIwOjIy OjQyLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3JzYS9y c2FfY3JwdC5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTUyMzkzNzk5ICswMTAwCi1AQCAtOTAsMTAg KzkwLDkgQEAgaW50IFJTQV9wcml2YXRlX2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0Ci0gCSAgICAg UlNBICpyc2EsIGludCBwYWRkaW5nKQotIAl7Ci0gI2lmZGVmIE9QRU5TU0xfRklQUwotLQlpZiAo RklQU19tb2RlKCkgJiYgIShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0Qp Ci0tCQkJJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQotKwlpZihG SVBTX21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCi0g CQl7Ci0tCQlSU0FlcnIoUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCwgUlNBX1JfTk9OX0ZJUFNf UlNBX01FVEhPRCk7Ci0rCQlSU0FlcnIoUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCwgUlNBX1Jf T1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0gCQlyZXR1cm4gLTE7Ci0gCQl9 Ci0gI2VuZGlmCi1AQCAtMTE4LDEwICsxMTcsOSBAQCBpbnQgUlNBX3B1YmxpY19kZWNyeXB0KGlu dCBmbGVuLCBjb25zdCB1Ci0gCSAgICAgUlNBICpyc2EsIGludCBwYWRkaW5nKQotIAl7Ci0gI2lm ZGVmIE9QRU5TU0xfRklQUwotLQlpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPm1ldGgtPmZsYWdz ICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpCi0tCQkJJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdf Tk9OX0ZJUFNfQUxMT1cpKQotKwlpZihGSVBTX21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0Ff RkxBR19OT05fRklQU19BTExPVykpCi0gCQl7Ci0tCQlSU0FlcnIoUlNBX0ZfUlNBX1BVQkxJQ19E RUNSWVBULCBSU0FfUl9OT05fRklQU19SU0FfTUVUSE9EKTsKLSsJCVJTQWVycihSU0FfRl9SU0Ff UFVCTElDX0RFQ1JZUFQsIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUp OwotIAkJcmV0dXJuIC0xOwotIAkJfQotICNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1i ZXRhMi9jcnlwdG8vcnNhL3JzYV9lYXkuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRv L3JzYS9yc2FfZWF5LmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9yc2EvcnNhX2Vh eS5jLmZpcHMJMjAxMS0xMC0xOSAxNjo1ODo1OS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4xLWJldGEyL2NyeXB0by9yc2EvcnNhX2VheS5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTUy MzkzNzk5ICswMTAwCi1AQCAtMTE0LDYgKzExNCwxMCBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2Ju Lmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0gCi0gI2lmbmRlZiBSU0FfTlVMTAotIAot QEAgLTEzOCw3ICsxNDIsNyBAQCBzdGF0aWMgUlNBX01FVEhPRCByc2FfcGtjczFfZWF5X21ldGg9 ewotIAlCTl9tb2RfZXhwX21vbnQsIC8qIFhYWCBwcm9iYWJseSB3ZSBzaG91bGQgbm90IHVzZSBN b250Z29tZXJ5IGlmICBlID09IDMgKi8KLSAJUlNBX2VheV9pbml0LAotIAlSU0FfZWF5X2Zpbmlz aCwKLS0JMCwgLyogZmxhZ3MgKi8KLSsJUlNBX0ZMQUdfRklQU19NRVRIT0QsIC8qIGZsYWdzICov Ci0gCU5VTEwsCi0gCTAsIC8qIHJzYV9zaWduICovCi0gCTAsIC8qIHJzYV92ZXJpZnkgKi8KLUBA IC0xNTgsNiArMTYyLDI0IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZW5jcnlwdChpbnQg ZmwKLSAJdW5zaWduZWQgY2hhciAqYnVmPU5VTEw7Ci0gCUJOX0NUWCAqY3R4PU5VTEw7Ci0gCi0r I2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihGSVBTX21vZGUoKSkKLSsJCXsKLSsJCWlmIChGSVBT X3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BV QkxJQ19FTkNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQkJZ290byBlcnI7 Ci0rCQkJfQotKwotKwkJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9X KQotKwkJCSYmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9E VUxVU19CSVRTKSkKLSsJCQl7Ci0rCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0VOQ1JZ UFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0KLSsJ CX0KLSsjZW5kaWYKLSsKLSAJaWYgKEJOX251bV9iaXRzKHJzYS0+bikgPiBPUEVOU1NMX1JTQV9N QVhfTU9EVUxVU19CSVRTKQotIAkJewotIAkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0VO Q1JZUFQsIFJTQV9SX01PRFVMVVNfVE9PX0xBUkdFKTsKLUBAIC0zNjEsNiArMzgzLDI0IEBAIHN0 YXRpYyBpbnQgUlNBX2VheV9wcml2YXRlX2VuY3J5cHQoaW50IGYKLSAJQklHTlVNICp1bmJsaW5k ID0gTlVMTDsKLSAJQk5fQkxJTkRJTkcgKmJsaW5kaW5nID0gTlVMTDsKLSAKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSkKLSsJCXsKLSsJCWlmKEZJUFNfc2VsZnRlc3Rf ZmFpbGVkKCkpCi0rCQkJewotKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFJJVkFURV9FTkNS WVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0K LSsKLSsJCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykKLSsJCQkm JiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklU UykpCi0rCQkJewotKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVCwgUlNB X1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCQlyZXR1cm4gLTE7Ci0rCQkJfQotKwkJfQotKyNl bmRpZgotKwotIAlpZiAoKGN0eD1CTl9DVFhfbmV3KCkpID09IE5VTEwpIGdvdG8gZXJyOwotIAlC Tl9DVFhfc3RhcnQoY3R4KTsKLSAJZiAgID0gQk5fQ1RYX2dldChjdHgpOwotQEAgLTUwNCw2ICs1 NDQsMjQgQEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZGVjcnlwdChpbnQgZgotIAlCSUdO VU0gKnVuYmxpbmQgPSBOVUxMOwotIAlCTl9CTElORElORyAqYmxpbmRpbmcgPSBOVUxMOwotIAot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJewotKwkJaWYoRklQ U19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9Q UklWQVRFX0RFQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCQlyZXR1cm4g LTE7Ci0rCQkJfQotKwotKwkJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FM TE9XKQotKwkJCSYmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5f TU9EVUxVU19CSVRTKSkKLSsJCQl7Ci0rCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFJJVkFURV9E RUNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJCXJldHVybiAtMTsKLSsJCQl9 Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmKChjdHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwpIGdv dG8gZXJyOwotIAlCTl9DVFhfc3RhcnQoY3R4KTsKLSAJZiAgID0gQk5fQ1RYX2dldChjdHgpOwot QEAgLTYzOSw2ICs2OTcsMjQgQEAgc3RhdGljIGludCBSU0FfZWF5X3B1YmxpY19kZWNyeXB0KGlu dCBmbAotIAl1bnNpZ25lZCBjaGFyICpidWY9TlVMTDsKLSAJQk5fQ1RYICpjdHg9TlVMTDsKLSAK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSkKLSsJCXsKLSsJCWlmKEZJ UFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQkJewotKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlf UFVCTElDX0RFQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCQlnb3RvIGVy cjsKLSsJCQl9Ci0rCi0rCQlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxM T1cpCi0rCQkJJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9N T0RVTFVTX0JJVFMpKQotKwkJCXsKLSsJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfREVD UllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCQlyZXR1cm4gLTE7Ci0rCQkJfQot KwkJfQotKyNlbmRpZgotKwotIAlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5TU0xfUlNB X01BWF9NT0RVTFVTX0JJVFMpCi0gCQl7Ci0gCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNf REVDUllQVCwgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UpOwotQEAgLTg0NywxMiArOTIzLDEyIEBA IHN0YXRpYyBpbnQgUlNBX2VheV9tb2RfZXhwKEJJR05VTSAqcjAsIGMKLSAJaWYgKCFCTl9tb2Qo cjAscHIxLHJzYS0+cCxjdHgpKSBnb3RvIGVycjsKLSAKLSAJLyogSWYgcCA8IHEgaXQgaXMgb2Nj YXNpb25hbGx5IHBvc3NpYmxlIGZvciB0aGUgY29ycmVjdGlvbiBvZgotLSAgICAgICAgICogYWRk aW5nICdwJyBpZiByMCBpcyBuZWdhdGl2ZSBhYm92ZSB0byBsZWF2ZSB0aGUgcmVzdWx0IHN0aWxs Ci0rCSAqIGFkZGluZyAncCcgaWYgcjAgaXMgbmVnYXRpdmUgYWJvdmUgdG8gbGVhdmUgdGhlIHJl c3VsdCBzdGlsbAotIAkgKiBuZWdhdGl2ZS4gVGhpcyBjYW4gYnJlYWsgdGhlIHByaXZhdGUga2V5 IG9wZXJhdGlvbnM6IHRoZSBmb2xsb3dpbmcKLSAJICogc2Vjb25kIGNvcnJlY3Rpb24gc2hvdWxk ICphbHdheXMqIGNvcnJlY3QgdGhpcyByYXJlIG9jY3VycmVuY2UuCi0gCSAqIFRoaXMgd2lsbCAq bmV2ZXIqIGhhcHBlbiB3aXRoIE9wZW5TU0wgZ2VuZXJhdGVkIGtleXMgYmVjYXVzZQotLSAgICAg ICAgICogdGhleSBlbnN1cmUgcCA+IHEgW3N0ZXZlXQotLSAgICAgICAgICovCi0rCSAqIHRoZXkg ZW5zdXJlIHAgPiBxIFtzdGV2ZV0KLSsJICovCi0gCWlmIChCTl9pc19uZWdhdGl2ZShyMCkpCi0g CQlpZiAoIUJOX2FkZChyMCxyMCxyc2EtPnApKSBnb3RvIGVycjsKLSAJaWYgKCFCTl9tdWwocjEs cjAscnNhLT5xLGN0eCkpIGdvdG8gZXJyOwotQEAgLTg5Nyw2ICs5NzMsOSBAQCBlcnI6Ci0gCi0g c3RhdGljIGludCBSU0FfZWF5X2luaXQoUlNBICpyc2EpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJcnNhLT5mbGFnc3w9UlNB X0ZMQUdfQ0FDSEVfUFVCTElDfFJTQV9GTEFHX0NBQ0hFX1BSSVZBVEU7Ci0gCXJldHVybigxKTsK LSAJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vcnNhL3JzYV9lcnIuYy5m aXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3JzYS9yc2FfZXJyLmMKLS0tLSBvcGVuc3Ns LTEuMC4xLWJldGEyL2NyeXB0by9yc2EvcnNhX2Vyci5jLmZpcHMJMjAxMS0xMC0xMCAwMToxMzo1 MC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9yc2EvcnNh X2Vyci5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTUyMzkzNzk5ICswMTAwCi1AQCAtMTIxLDYgKzEy MSw4IEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgUlNBX3N0cl9mdW5jdHNbXT0KLSB7RVJSX0ZV TkMoUlNBX0ZfUlNBX1BVQkxJQ19FTkNSWVBUKSwJIlJTQV9wdWJsaWNfZW5jcnlwdCJ9LAotIHtF UlJfRlVOQyhSU0FfRl9SU0FfUFVCX0RFQ09ERSksCSJSU0FfUFVCX0RFQ09ERSJ9LAotIHtFUlJf RlVOQyhSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcpLAkiUlNBX3NldHVwX2JsaW5kaW5nIn0sCi0r e0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QpLAkiUlNBX3NldF9kZWZhdWx0 X21ldGhvZCJ9LAotK3tFUlJfRlVOQyhSU0FfRl9SU0FfU0VUX01FVEhPRCksCSJSU0Ffc2V0X21l dGhvZCJ9LAotIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0lHTiksCSJSU0Ffc2lnbiJ9LAotIHtFUlJf RlVOQyhSU0FfRl9SU0FfU0lHTl9BU04xX09DVEVUX1NUUklORyksCSJSU0Ffc2lnbl9BU04xX09D VEVUX1NUUklORyJ9LAotIHtFUlJfRlVOQyhSU0FfRl9SU0FfVkVSSUZZKSwJIlJTQV92ZXJpZnki fSwKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3JzYS9yc2FfZ2VuLmMuZmlw cyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9yc2EvcnNhX2dlbi5jCi0tLS0gb3BlbnNzbC0x LjAuMS1iZXRhMi9jcnlwdG8vcnNhL3JzYV9nZW4uYy5maXBzCTIwMTEtMDYtMDkgMTU6MTg6MDcu MDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vcnNhL3JzYV9n ZW4uYwkyMDEyLTAyLTA3IDExOjA3OjAyLjU1MzM5MzgwNyArMDEwMAotQEAgLTY5LDYgKzY5LDc4 IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gI2lmZGVmIE9QRU5TU0xfRklQUwotICNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsKLStzdGF0aWMgaW50IGZpcHNfcnNhX3BhaXJ3aXNlX2Zh aWwgPSAwOwotKwotK3ZvaWQgRklQU19jb3JydXB0X3JzYV9rZXlnZW4odm9pZCkKLSsJewotKwlm aXBzX3JzYV9wYWlyd2lzZV9mYWlsID0gMTsKLSsJfQotKwotK2ludCBmaXBzX2NoZWNrX3JzYShS U0EgKnJzYSkKLSsJewotKwljb25zdCB1bnNpZ25lZCBjaGFyIHRic1tdID0gIlJTQSBQYWlyd2lz ZSBDaGVjayBEYXRhIjsKLSsJdW5zaWduZWQgY2hhciAqY3RidWYgPSBOVUxMLCAqcHRidWYgPSBO VUxMOwotKwlpbnQgbGVuLCByZXQgPSAwOwotKwlFVlBfUEtFWSAqcGs7Ci0rCi0rCWlmICgocGs9 RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsKLSsJRVZQX1BLRVlfc2V0 MV9SU0EocGssIHJzYSk7Ci0rCi0rCS8qIFBlcmZvcm0gcGFpcndpc2UgY29uc2lzdGVuY3kgc2ln bmF0dXJlIHRlc3QgKi8KLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywg LTEsCi0rCQkJTlVMTCwgMCwgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwg TlVMTCkKLSsJCXx8ICFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsCi0rCQkJ TlVMTCwgMCwgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLCBOVUxMKQotKwkJ fHwgIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwKLSsJCQlOVUxMLCAwLCBF VlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywgTlVMTCkpCi0rCQlnb3RvIGVycjsK LSsJLyogTm93IHBlcmZvcm0gcGFpcndpc2UgY29uc2lzdGVuY3kgZW5jcnlwdC9kZWNyeXB0IHRl c3QgKi8KLSsJY3RidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShyc2EpKTsKLSsJaWYgKCFj dGJ1ZikKLSsJCWdvdG8gZXJyOwotKwotKwlsZW4gPSBSU0FfcHVibGljX2VuY3J5cHQoc2l6ZW9m KHRicykgLSAxLCB0YnMsIGN0YnVmLCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsKLSsJaWYgKGxl biA8PSAwKQotKwkJZ290byBlcnI7Ci0rCS8qIENoZWNrIGNpcGhlcnRleHQgZG9lc24ndCBtYXRj aCBwbGFpbnRleHQgKi8KLSsJaWYgKChsZW4gPT0gKHNpemVvZih0YnMpIC0gMSkpICYmICFtZW1j bXAodGJzLCBjdGJ1ZiwgbGVuKSkKLSsJCWdvdG8gZXJyOwotKwlwdGJ1ZiA9IE9QRU5TU0xfbWFs bG9jKFJTQV9zaXplKHJzYSkpOwotKwotKwlpZiAoIXB0YnVmKQotKwkJZ290byBlcnI7Ci0rCWxl biA9IFJTQV9wcml2YXRlX2RlY3J5cHQobGVuLCBjdGJ1ZiwgcHRidWYsIHJzYSwgUlNBX1BLQ1Mx X1BBRERJTkcpOwotKwlpZiAobGVuICE9IChzaXplb2YodGJzKSAtIDEpKQotKwkJZ290byBlcnI7 Ci0rCWlmIChtZW1jbXAocHRidWYsIHRicywgbGVuKSkKLSsJCWdvdG8gZXJyOwotKwotKwlyZXQg PSAxOwotKwotKwlpZiAoIXB0YnVmKQotKwkJZ290byBlcnI7Ci0rCQotKwllcnI6Ci0rCWlmIChy ZXQgPT0gMCkKLSsJCXsKLSsJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKLSsJCUZJUFNlcnIo RklQU19GX0ZJUFNfQ0hFQ0tfUlNBLEZJUFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxFRCk7Ci0rCQl9 Ci0rCi0rCWlmIChjdGJ1ZikKLSsJCU9QRU5TU0xfZnJlZShjdGJ1Zik7Ci0rCWlmIChwdGJ1ZikK LSsJCU9QRU5TU0xfZnJlZShwdGJ1Zik7Ci0rCWlmIChwaykKLSsJCUVWUF9QS0VZX2ZyZWUocGsp OwotKwotKwlyZXR1cm4gcmV0OwotKwl9Ci0gI2VuZGlmCi0gCi0gc3RhdGljIGludCByc2FfYnVp bHRpbl9rZXlnZW4oUlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmVfdmFsdWUsIEJOX0dFTkNC ICpjYik7Ci1AQCAtODEsNyArMTUzLDcgQEAgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4o UlNBICpyc2EsCi0gaW50IFJTQV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBC SUdOVU0gKmVfdmFsdWUsIEJOX0dFTkNCICpjYikKLSAJewotICNpZmRlZiBPUEVOU1NMX0ZJUFMK LS0JaWYgKEZJUFNfbW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNf TUVUSE9EKQotKwlpZiAoRklQU19tb2R1bGVfbW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAm IFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQotIAkJCSYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05P Tl9GSVBTX0FMTE9XKSkKLSAJCXsKLSAJCVJTQWVycihSU0FfRl9SU0FfR0VORVJBVEVfS0VZX0VY LCBSU0FfUl9OT05fRklQU19SU0FfTUVUSE9EKTsKLUBAIC05MCwxMCArMTYyLDYgQEAgaW50IFJT QV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaQotICNlbmRpZgotIAlpZihyc2EtPm1l dGgtPnJzYV9rZXlnZW4pCi0gCQlyZXR1cm4gcnNhLT5tZXRoLT5yc2Ffa2V5Z2VuKHJzYSwgYml0 cywgZV92YWx1ZSwgY2IpOwotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JaWYgKEZJUFNfbW9kZSgp KQotLQkJcmV0dXJuIEZJUFNfcnNhX2dlbmVyYXRlX2tleV9leChyc2EsIGJpdHMsIGVfdmFsdWUs IGNiKTsKLS0jZW5kaWYKLSAJcmV0dXJuIHJzYV9idWlsdGluX2tleWdlbihyc2EsIGJpdHMsIGVf dmFsdWUsIGNiKTsKLSAJfQotIAotQEAgLTEwNSw2ICsxNzMsMjMgQEAgc3RhdGljIGludCByc2Ff YnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsCi0gCWludCBiaXRzcCxiaXRzcSxvaz0gLTEsbj0wOwot IAlCTl9DVFggKmN0eD1OVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNf bW9kdWxlX21vZGUoKSkKLSsJCXsKLSsJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCSAg ICAJewotKwkJICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTixGSVBTX1JfRklQ U19TRUxGVEVTVF9GQUlMRUQpOwotKwkgICAgCXJldHVybiAwOwotKwkgICAgCX0KLSsKLSsJCWlm IChiaXRzIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQotKwkJICAgIHsKLSsJ CSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4sRklQU19SX0tFWV9UT09fU0hP UlQpOwotKwkJICAgIHJldHVybiAwOwotKwkJICAgIH0KLSsJCX0KLSsjZW5kaWYKLSsKLSAJY3R4 PUJOX0NUWF9uZXcoKTsKLSAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKLSAJQk5fQ1RYX3N0 YXJ0KGN0eCk7Ci1AQCAtMjE2LDYgKzMwMSwxNyBAQCBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tl eWdlbihSU0EgKnJzYSwKLSAJCXAgPSByc2EtPnA7Ci0gCWlmICghQk5fbW9kX2ludmVyc2UocnNh LT5pcW1wLHJzYS0+cSxwLGN0eCkpIGdvdG8gZXJyOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSkKLSsJCXsKLSsJCWlmIChmaXBzX3JzYV9wYWlyd2lz ZV9mYWlsKQotKwkJCUJOX2FkZF93b3JkKHJzYS0+biwgMSk7Ci0rCi0rCQlpZighZmlwc19jaGVj a19yc2EocnNhKSkKLSsJCSAgICBnb3RvIGVycjsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJb2s9MTsK LSBlcnI6Ci0gCWlmIChvayA9PSAtMSkKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5 cHRvL3JzYS9yc2EuaC5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3JzYS9yc2EuaAot LS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3JzYS9yc2EuaC5maXBzCTIwMTItMDItMDcg MTE6MDc6MDIuMjk4MzkxNjg1ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8v cnNhL3JzYS5oCTIwMTItMDItMDcgMTE6MDc6MDIuNTUzMzkzODA3ICswMTAwCi1AQCAtMTY0LDYg KzE2NCw4IEBAIHN0cnVjdCByc2Ffc3QKLSAjIGRlZmluZSBPUEVOU1NMX1JTQV9NQVhfTU9EVUxV U19CSVRTCTE2Mzg0Ci0gI2VuZGlmCi0gCi0rI2RlZmluZSBPUEVOU1NMX1JTQV9GSVBTX01JTl9N T0RVTFVTX0JJVFMgMTAyNAotKwotICNpZm5kZWYgT1BFTlNTTF9SU0FfU01BTExfTU9EVUxVU19C SVRTCi0gIyBkZWZpbmUgT1BFTlNTTF9SU0FfU01BTExfTU9EVUxVU19CSVRTCTMwNzIKLSAjZW5k aWYKLUBAIC0yOTAsNiArMjkyLDExIEBAIFJTQSAqCVJTQV9nZW5lcmF0ZV9rZXkoaW50IGJpdHMs IHVuc2lnbmUKLSAKLSAvKiBOZXcgdmVyc2lvbiAqLwotIGludAlSU0FfZ2VuZXJhdGVfa2V5X2V4 KFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOwotK2ludCBSU0Ff WDkzMV9kZXJpdmVfZXgoUlNBICpyc2EsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsIEJJR05VTSAq cTEsIEJJR05VTSAqcTIsCi0rCQkJY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAy LCBjb25zdCBCSUdOVU0gKlhwLAotKwkJCWNvbnN0IEJJR05VTSAqWHExLCBjb25zdCBCSUdOVU0g KlhxMiwgY29uc3QgQklHTlVNICpYcSwKLSsJCQljb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpj Yik7Ci0raW50IFJTQV9YOTMxX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIGNv bnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsKLSAKLSBpbnQJUlNBX2NoZWNrX2tleShjb25z dCBSU0EgKik7Ci0gCS8qIG5leHQgNCByZXR1cm4gLTEgb24gZXJyb3IgKi8KLUBAIC00ODcsNyAr NDk0LDcgQEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5lIFJTQV9G X1JTQV9QQURESU5HX0FERF9OT05FCQkJIDEwNwotICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdf QUREX1BLQ1MxX09BRVAJCSAxMjEKLSAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NT MV9QU1MJCQkgMTI1Ci0tI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfUFNTX01H RjEJCSAxNDgKLSsjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9QU1NfTUdGMQkJ IDE1OAotICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1RZUEVfMQkJIDEwOAot ICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1RZUEVfMgkJIDEwOQotICNkZWZp bmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1NTTFYyMwkJCSAxMTAKLUBAIC01MDAsMjAgKzUwNywy MiBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOwotICNkZWZpbmUgUlNBX0ZfUlNB X1BBRERJTkdfQ0hFQ0tfWDkzMQkJCSAxMjgKLSAjZGVmaW5lIFJTQV9GX1JTQV9QUklOVAkJCQkJ IDExNQotICNkZWZpbmUgUlNBX0ZfUlNBX1BSSU5UX0ZQCQkJCSAxMTYKLS0jZGVmaW5lIFJTQV9G X1JTQV9QUklWQVRFX0RFQ1JZUFQJCQkgMTUwCi0tI2RlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9F TkNSWVBUCQkJIDE1MQotKyNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfREVDUllQVAkJCSAxNTcK LSsjZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQJCQkgMTQ4Ci0gI2RlZmluZSBSU0Ff Rl9SU0FfUFJJVl9ERUNPREUJCQkJIDEzNwotICNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZfRU5DT0RF CQkJCSAxMzgKLS0jZGVmaW5lIFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVAkJCSAxNTIKLSsjZGVm aW5lIFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVAkJCSAxNDkKLSAjZGVmaW5lIFJTQV9GX1JTQV9Q VUJMSUNfRU5DUllQVAkJCSAxNTMKLSAjZGVmaW5lIFJTQV9GX1JTQV9QVUJfREVDT0RFCQkJCSAx MzkKLSAjZGVmaW5lIFJTQV9GX1JTQV9TRVRVUF9CTElORElORwkJCSAxMzYKLSsjZGVmaW5lIFJT QV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QJCQkgMTUwCi0rI2RlZmluZSBSU0FfRl9SU0FfU0VU X01FVEhPRAkJCQkgMTUxCi0gI2RlZmluZSBSU0FfRl9SU0FfU0lHTgkJCQkJIDExNwotICNkZWZp bmUgUlNBX0ZfUlNBX1NJR05fQVNOMV9PQ1RFVF9TVFJJTkcJCSAxMTgKLSAjZGVmaW5lIFJTQV9G X1JTQV9WRVJJRlkJCQkJIDExOQotICNkZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWV9BU04xX09DVEVU X1NUUklORwkJIDEyMAotICNkZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWV9QS0NTMV9QU1MJCQkgMTI2 Ci0tI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZX1BLQ1MxX1BTU19NR0YxCQkJIDE0OQotKyNkZWZp bmUgUlNBX0ZfUlNBX1ZFUklGWV9QS0NTMV9QU1NfTUdGMQkJCSAxNTIKLSAKLSAvKiBSZWFzb24g Y29kZXMuICovCi0gI2RlZmluZSBSU0FfUl9BTEdPUklUSE1fTUlTTUFUQ0gJCQkgMTAwCi1AQCAt NTQyLDIxICs1NTEsMjIgQEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKLSAjZGVm aW5lIFJTQV9SX0lOVkFMSURfTUdGMV9NRAkJCQkgMTU2Ci0gI2RlZmluZSBSU0FfUl9JTlZBTElE X1BBRERJTkcJCQkJIDEzOAotICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9QQURESU5HX01PREUJCQkg MTQxCi0tI2RlZmluZSBSU0FfUl9JTlZBTElEX1BTU19QQVJBTUVURVJTCQkJIDE0OQotKyNkZWZp bmUgUlNBX1JfSU5WQUxJRF9QU1NfUEFSQU1FVEVSUwkJCSAxNTcKLSAjZGVmaW5lIFJTQV9SX0lO VkFMSURfUFNTX1NBTFRMRU4JCQkgMTQ2Ci0tI2RlZmluZSBSU0FfUl9JTlZBTElEX1NBTFRfTEVO R1RICQkJIDE1MAotKyNkZWZpbmUgUlNBX1JfSU5WQUxJRF9TQUxUX0xFTkdUSAkJCSAxNTgKLSAj ZGVmaW5lIFJTQV9SX0lOVkFMSURfVFJBSUxFUgkJCQkgMTM5Ci0gI2RlZmluZSBSU0FfUl9JTlZB TElEX1g5MzFfRElHRVNUCQkJIDE0MgotICNkZWZpbmUgUlNBX1JfSVFNUF9OT1RfSU5WRVJTRV9P Rl9RCQkJIDEyNgotICNkZWZpbmUgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMCQkJIDEyMAotICNk ZWZpbmUgUlNBX1JfTEFTVF9PQ1RFVF9JTlZBTElECQkJIDEzNAotICNkZWZpbmUgUlNBX1JfTU9E VUxVU19UT09fTEFSR0UJCQkJIDEwNQotLSNkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhP RAkJCSAxNTcKLSsjZGVmaW5lIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QJCQkgMTQ5Ci0rI2Rl ZmluZSBSU0FfUl9OT05fRklQU19NRVRIT0QJCQkJIDE0OQotICNkZWZpbmUgUlNBX1JfTk9fUFVC TElDX0VYUE9ORU5UCQkJIDE0MAotICNkZWZpbmUgUlNBX1JfTlVMTF9CRUZPUkVfQkxPQ0tfTUlT U0lORwkJCSAxMTMKLSAjZGVmaW5lIFJTQV9SX05fRE9FU19OT1RfRVFVQUxfUF9RCQkJIDEyNwot ICNkZWZpbmUgUlNBX1JfT0FFUF9ERUNPRElOR19FUlJPUgkJCSAxMjEKLS0jZGVmaW5lIFJTQV9S X09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUJIDE1OAotKyNkZWZpbmUgUlNBX1Jf T1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERQkgMTUwCi0gI2RlZmluZSBSU0FfUl9P UEVSQVRJT05fTk9UX1NVUFBPUlRFRF9GT1JfVEhJU19LRVlUWVBFCSAxNDgKLSAjZGVmaW5lIFJT QV9SX1BBRERJTkdfQ0hFQ0tfRkFJTEVECQkJIDExNAotICNkZWZpbmUgUlNBX1JfUF9OT1RfUFJJ TUUJCQkJIDEyOAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vcnNhL3JzYV9s aWIuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3JzYS9yc2FfbGliLmMKLS0tLSBv cGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9yc2EvcnNhX2xpYi5jLmZpcHMJMjAxMS0wNi0yMCAy MTo0MToxMy4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9y c2EvcnNhX2xpYi5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTUzMzkzODA3ICswMTAwCi1AQCAtODQs NiArODQsMTMgQEAgUlNBICpSU0FfbmV3KHZvaWQpCi0gCi0gdm9pZCBSU0Ffc2V0X2RlZmF1bHRf bWV0aG9kKGNvbnN0IFJTQV9NRVRIT0QgKm1ldGgpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rCWlmIChGSVBTX21vZGUoKSAmJiAhKG1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRI T0QpKQotKwkJewotKwkJUlNBZXJyKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QsIFJTQV9S X05PTl9GSVBTX01FVEhPRCk7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rI2VuZGlmCi0gCWRlZmF1bHRf UlNBX21ldGggPSBtZXRoOwotIAl9Ci0gCi1AQCAtOTEsMTggKzk4LDExIEBAIGNvbnN0IFJTQV9N RVRIT0QgKlJTQV9nZXRfZGVmYXVsdF9tZXRob2QKLSAJewotIAlpZiAoZGVmYXVsdF9SU0FfbWV0 aCA9PSBOVUxMKQotIAkJewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JCWlmIChGSVBTX21vZGUo KSkKLS0JCQlyZXR1cm4gRklQU19yc2FfcGtjczFfc3NsZWF5KCk7Ci0tCQllbHNlCi0tCQkJcmV0 dXJuIFJTQV9QS0NTMV9TU0xlYXkoKTsKLS0jZWxzZQotICNpZmRlZiBSU0FfTlVMTAotIAkJZGVm YXVsdF9SU0FfbWV0aD1SU0FfbnVsbF9tZXRob2QoKTsKLSAjZWxzZQotIAkJZGVmYXVsdF9SU0Ff bWV0aD1SU0FfUEtDUzFfU1NMZWF5KCk7Ci0gI2VuZGlmCi0tI2VuZGlmCi0gCQl9Ci0gCi0gCXJl dHVybiBkZWZhdWx0X1JTQV9tZXRoOwotQEAgLTExOCw2ICsxMTgsMTMgQEAgaW50IFJTQV9zZXRf bWV0aG9kKFJTQSAqcnNhLCBjb25zdCBSU0FfTQotIAkvKiBOQjogVGhlIGNhbGxlciBpcyBzcGVj aWZpY2FsbHkgc2V0dGluZyBhIG1ldGhvZCwgc28gaXQncyBub3QgdXAgdG8gdXMKLSAJICogdG8g ZGVhbCB3aXRoIHdoaWNoIEVOR0lORSBpdCBjb21lcyBmcm9tLiAqLwotIAljb25zdCBSU0FfTUVU SE9EICptdG1wOwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmICEo bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCi0rCQl7Ci0rCQlSU0FlcnIoUlNB X0ZfUlNBX1NFVF9NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7Ci0rCQlyZXR1cm4gMDsK LSsJCX0KLSsjZW5kaWYKLSAJbXRtcCA9IHJzYS0+bWV0aDsKLSAJaWYgKG10bXAtPmZpbmlzaCkg bXRtcC0+ZmluaXNoKHJzYSk7Ci0gI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotQEAgLTE3MCw2 ICsxNzcsMTggQEAgUlNBICpSU0FfbmV3X21ldGhvZChFTkdJTkUgKmVuZ2luZSkKLSAJCQl9Ci0g CQl9Ci0gI2VuZGlmCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkgJiYg IShyZXQtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQotKwkJewotKwkJUlNB ZXJyKFJTQV9GX1JTQV9ORVdfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0QpOwotKyNpZm5k ZWYgT1BFTlNTTF9OT19FTkdJTkUKLSsJCWlmIChyZXQtPmVuZ2luZSkKLSsJCQlFTkdJTkVfZmlu aXNoKHJldC0+ZW5naW5lKTsKLSsjZW5kaWYKLSsJCU9QRU5TU0xfZnJlZShyZXQpOwotKwkJcmV0 dXJuIE5VTEw7Ci0rCQl9Ci0rI2VuZGlmCi0gCi0gCXJldC0+cGFkPTA7Ci0gCXJldC0+dmVyc2lv bj0wOwotQEAgLTE4OCw3ICsyMDcsNyBAQCBSU0EgKlJTQV9uZXdfbWV0aG9kKEVOR0lORSAqZW5n aW5lKQotIAlyZXQtPmJsaW5kaW5nPU5VTEw7Ci0gCXJldC0+bXRfYmxpbmRpbmc9TlVMTDsKLSAJ cmV0LT5iaWdudW1fZGF0YT1OVUxMOwotLQlyZXQtPmZsYWdzPXJldC0+bWV0aC0+ZmxhZ3MgJiB+ UlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1c7Ci0rCXJldC0+ZmxhZ3M9cmV0LT5tZXRoLT5mbGFnczsK LSAJaWYgKCFDUllQVE9fbmV3X2V4X2RhdGEoQ1JZUFRPX0VYX0lOREVYX1JTQSwgcmV0LCAmcmV0 LT5leF9kYXRhKSkKLSAJCXsKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9yc2EvcnNhX3BtZXRoLmMuZmlwcyBvcGVuc3NsLTEu MC4xLWJldGEyL2NyeXB0by9yc2EvcnNhX3BtZXRoLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEy L2NyeXB0by9yc2EvcnNhX3BtZXRoLmMuZmlwcwkyMDEyLTAxLTAyIDE5OjE2OjM5LjAwMDAwMDAw MCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3JzYS9yc2FfcG1ldGguYwky MDEyLTAyLTA3IDExOjA3OjAyLjU1MzM5MzgwNyArMDEwMAotQEAgLTIwNiwyMiArMjA2LDYgQEAg c3RhdGljIGludCBwa2V5X3JzYV9zaWduKEVWUF9QS0VZX0NUWCAqYwotIAkJCQkJUlNBX1JfSU5W QUxJRF9ESUdFU1RfTEVOR1RIKTsKLSAJCQlyZXR1cm4gLTE7Ci0gCQkJfQotLSNpZmRlZiBPUEVO U1NMX0ZJUFMKLS0JCWlmIChyZXQgPiAwKQotLQkJCXsKLS0JCQl1bnNpZ25lZCBpbnQgc2xlbjsK LS0JCQlyZXQgPSBGSVBTX3JzYV9zaWduX2RpZ2VzdChyc2EsIHRicywgdGJzbGVuLCByY3R4LT5t ZCwKLS0JCQkJCQkJcmN0eC0+cGFkX21vZGUsCi0tCQkJCQkJCXJjdHgtPnNhbHRsZW4sCi0tCQkJ CQkJCXJjdHgtPm1nZjFtZCwKLS0JCQkJCQkJc2lnLCAmc2xlbik7Ci0tCQkJaWYgKHJldCA+IDAp Ci0tCQkJCSpzaWdsZW4gPSBzbGVuOwotLQkJCWVsc2UKLS0JCQkJKnNpZ2xlbiA9IDA7Ci0tCQkJ cmV0dXJuIHJldDsKLS0JCQl9Ci0tI2VuZGlmCi0gCQlpZiAocmN0eC0+cGFkX21vZGUgPT0gUlNB X1g5MzFfUEFERElORykKLSAJCQl7Ci0gCQkJaWYgKCFzZXR1cF90YnVmKHJjdHgsIGN0eCkpCi1A QCAtMzQxLDE5ICszMjUsNiBAQCBzdGF0aWMgaW50IHBrZXlfcnNhX3ZlcmlmeShFVlBfUEtFWV9D VFgKLSAjZW5kaWYKLSAJaWYgKHJjdHgtPm1kKQotIAkJewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMK LS0JCWlmIChydiA+IDApCi0tCQkJewotLQkJCXJldHVybiBGSVBTX3JzYV92ZXJpZnlfZGlnZXN0 KHJzYSwKLS0JCQkJCQkJdGJzLCB0YnNsZW4sCi0tCQkJCQkJCXJjdHgtPm1kLAotLQkJCQkJCQly Y3R4LT5wYWRfbW9kZSwKLS0JCQkJCQkJcmN0eC0+c2FsdGxlbiwKLS0JCQkJCQkJcmN0eC0+bWdm MW1kLAotLQkJCQkJCQlzaWcsIHNpZ2xlbik7Ci0tCQkJCQkJCQotLQkJCX0KLS0jZW5kaWYKLSAJ CWlmIChyY3R4LT5wYWRfbW9kZSA9PSBSU0FfUEtDUzFfUEFERElORykKLSAJCQlyZXR1cm4gUlNB X3ZlcmlmeShFVlBfTURfdHlwZShyY3R4LT5tZCksIHRicywgdGJzbGVuLAotIAkJCQkJc2lnLCBz aWdsZW4sIHJzYSk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9yc2EvcnNh X3NpZ24uYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jCi0t LS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vcnNhL3JzYV9zaWduLmMuZmlwcwkyMDExLTA2 LTAyIDIwOjIyOjQyLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5 cHRvL3JzYS9yc2Ffc2lnbi5jCTIwMTItMDItMDcgMTE6MDc6MDIuNTU0MzkzODE1ICswMTAwCi1A QCAtMTM4LDcgKzEzOCw4IEBAIGludCBSU0Ffc2lnbihpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQg Y2gKLSAJCWkyZF9YNTA5X1NJRygmc2lnLCZwKTsKLSAJCXM9dG1wczsKLSAJfQotLQlpPVJTQV9w cml2YXRlX2VuY3J5cHQoaSxzLHNpZ3JldCxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOwotKwkvKiBO QjogY2FsbCB1bmRlcmx5aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9pZCBGSVBTIGJsb2NraW5n ICovCi0rCWkgPSByc2EtPm1ldGgtPnJzYV9wcml2X2VuYyA/IHJzYS0+bWV0aC0+cnNhX3ByaXZf ZW5jKGkscyxzaWdyZXQscnNhLFJTQV9QS0NTMV9QQURESU5HKSA6IDA7Ci0gCWlmIChpIDw9IDAp Ci0gCQlyZXQ9MDsKLSAJZWxzZQotQEAgLTE3OCw4ICsxNzksOCBAQCBpbnQgaW50X3JzYV92ZXJp ZnkoaW50IGR0eXBlLCBjb25zdCB1bnNpCi0gCi0gCWlmKChkdHlwZSA9PSBOSURfbWQ1X3NoYTEp ICYmIHJtKQotIAkJewotLQkJaSA9IFJTQV9wdWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbiwKLS0J CQkJCXNpZ2J1ZixybSxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOwotKwkJaSA9IHJzYS0+bWV0aC0+ cnNhX3B1Yl9kZWMgPyByc2EtPm1ldGgtPnJzYV9wdWJfZGVjKChpbnQpc2lnbGVuLAotKwkJCQkJ c2lnYnVmLHJtLHJzYSxSU0FfUEtDUzFfUEFERElORykgOiAwOwotIAkJaWYgKGkgPD0gMCkKLSAJ CQlyZXR1cm4gMDsKLSAJCSpwcm1fbGVuID0gaTsKLUBAIC0xOTYsNyArMTk3LDggQEAgaW50IGlu dF9yc2FfdmVyaWZ5KGludCBkdHlwZSwgY29uc3QgdW5zaQotIAkJCVJTQWVycihSU0FfRl9JTlRf UlNBX1ZFUklGWSxSU0FfUl9JTlZBTElEX01FU1NBR0VfTEVOR1RIKTsKLSAJCQlnb3RvIGVycjsK LSAJfQotLQlpPVJTQV9wdWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNB X1BLQ1MxX1BBRERJTkcpOwotKwkvKiBOQjogY2FsbCB1bmRlcmx5aW5nIG1ldGhvZCBkaXJlY3Rs eSB0byBhdm9pZCBGSVBTIGJsb2NraW5nICovCi0rCWkgPSByc2EtPm1ldGgtPnJzYV9wdWJfZGVj ID8gcnNhLT5tZXRoLT5yc2FfcHViX2RlYygoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BL Q1MxX1BBRERJTkcpIDogMDsKLSAKLSAJaWYgKGkgPD0gMCkgZ290byBlcnI7Ci0gCi1kaWZmIC11 cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9zaGEvc2hhMjU2LmMuZmlwcyBvcGVuc3NsLTEu MC4xLWJldGEyL2NyeXB0by9zaGEvc2hhMjU2LmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEyL2Ny eXB0by9zaGEvc2hhMjU2LmMuZmlwcwkyMDExLTA2LTAxIDE1OjM5OjQ0LjAwMDAwMDAwMCArMDIw MAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3NoYS9zaGEyNTYuYwkyMDEyLTAyLTA3 IDExOjA3OjAyLjU1NDM5MzgxNSArMDEwMAotQEAgLTEyLDEyICsxMiwxOSBAQAotIAotICNpbmNs dWRlIDxvcGVuc3NsL2NyeXB0by5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0g I2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSAKLSBjb25zdCBjaGFyIFNIQTI1Nl92ZXJz aW9uW109IlNIQS0yNTYiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLSBmaXBzX21kX2luaXRf Y3R4KFNIQTIyNCwgU0hBMjU2KQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3Nl bGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCW1lbXNldCAoYywwLHNpemVvZigqYykpOwotIAlj LT5oWzBdPTB4YzEwNTllZDhVTDsJYy0+aFsxXT0weDM2N2NkNTA3VUw7Ci0gCWMtPmhbMl09MHgz MDcwZGQxN1VMOwljLT5oWzNdPTB4ZjcwZTU5MzlVTDsKLUBAIC0yOSw2ICszNiw5IEBAIGZpcHNf bWRfaW5pdF9jdHgoU0hBMjI0LCBTSEEyNTYpCi0gCi0gZmlwc19tZF9pbml0KFNIQTI1NikKLSAJ ewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRp ZgotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKLSAJYy0+aFswXT0weDZhMDllNjY3VUw7CWMt PmhbMV09MHhiYjY3YWU4NVVMOwotIAljLT5oWzJdPTB4M2M2ZWYzNzJVTDsJYy0+aFszXT0weGE1 NGZmNTNhVUw7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9zaGEvc2hhNTEy LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9zaGEvc2hhNTEyLmMKLS0tLSBvcGVu c3NsLTEuMC4xLWJldGEyL2NyeXB0by9zaGEvc2hhNTEyLmMuZmlwcwkyMDExLTExLTE0IDIxOjU4 OjAxLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3NoYS9z aGE1MTIuYwkyMDEyLTAyLTA3IDExOjA3OjAyLjU1NDM5MzgxNSArMDEwMAotQEAgLTUsNiArNSwx MCBAQAotICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0gICovCi0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNv bmYuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgot KyNlbmRpZgotKwotICNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BF TlNTTF9OT19TSEE1MTIpCi0gLyoKLSAgKiBJTVBMRU1FTlRBVElPTiBOT1RFUy4KLUBAIC02MSw2 ICs2NSw5IEBAIGNvbnN0IGNoYXIgU0hBNTEyX3ZlcnNpb25bXT0iU0hBLTUxMiIgT1AKLSAKLSBm aXBzX21kX2luaXRfY3R4KFNIQTM4NCwgU0hBNTEyKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCWMtPmhbMF09VTY0KDB4Y2Ji YjlkNWRjMTA1OWVkOCk7Ci0gCWMtPmhbMV09VTY0KDB4NjI5YTI5MmEzNjdjZDUwNyk7Ci0gCWMt PmhbMl09VTY0KDB4OTE1OTAxNWEzMDcwZGQxNyk7Ci1AQCAtNzcsNiArODQsOSBAQCBmaXBzX21k X2luaXRfY3R4KFNIQTM4NCwgU0hBNTEyKQotIAotIGZpcHNfbWRfaW5pdChTSEE1MTIpCi0gCXsK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYK LSAJYy0+aFswXT1VNjQoMHg2YTA5ZTY2N2YzYmNjOTA4KTsKLSAJYy0+aFsxXT1VNjQoMHhiYjY3 YWU4NTg0Y2FhNzNiKTsKLSAJYy0+aFsyXT1VNjQoMHgzYzZlZjM3MmZlOTRmODJiKTsKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3NoYS9zaGEuaC5maXBzIG9wZW5zc2wtMS4w LjEtYmV0YTIvY3J5cHRvL3NoYS9zaGEuaAotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRv L3NoYS9zaGEuaC5maXBzCTIwMTItMDItMDcgMTE6MDc6MDEuODE5Mzg3Njk3ICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vc2hhL3NoYS5oCTIwMTItMDItMDcgMTE6MDc6MDIu NTU0MzkzODE1ICswMTAwCi1AQCAtMTE2LDkgKzExNiw2IEBAIHVuc2lnbmVkIGNoYXIgKlNIQShj b25zdCB1bnNpZ25lZCBjaGFyICoKLSB2b2lkIFNIQV9UcmFuc2Zvcm0oU0hBX0NUWCAqYywgY29u c3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Ci0gI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX1NI QTEKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0taW50IHByaXZhdGVfU0hBMV9Jbml0KFNIQV9DVFgg KmMpOwotLSNlbmRpZgotIGludCBTSEExX0luaXQoU0hBX0NUWCAqYyk7Ci0gaW50IFNIQTFfVXBk YXRlKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwotIGludCBTSEEx X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEFfQ1RYICpjKTsKLUBAIC0xNDEsMTAgKzEzOCw2 IEBAIHR5cGVkZWYgc3RydWN0IFNIQTI1NnN0YXRlX3N0Ci0gCX0gU0hBMjU2X0NUWDsKLSAKLSAj aWZuZGVmIE9QRU5TU0xfTk9fU0hBMjU2Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLWludCBwcml2 YXRlX1NIQTIyNF9Jbml0KFNIQTI1Nl9DVFggKmMpOwotLWludCBwcml2YXRlX1NIQTI1Nl9Jbml0 KFNIQTI1Nl9DVFggKmMpOwotLSNlbmRpZgotIGludCBTSEEyMjRfSW5pdChTSEEyNTZfQ1RYICpj KTsKLSBpbnQgU0hBMjI0X1VwZGF0ZShTSEEyNTZfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBz aXplX3QgbGVuKTsKLSBpbnQgU0hBMjI0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEEyNTZf Q1RYICpjKTsKLUBAIC0xOTIsMTAgKzE4NSw2IEBAIHR5cGVkZWYgc3RydWN0IFNIQTUxMnN0YXRl X3N0Ci0gI2VuZGlmCi0gCi0gI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgotLSNpZmRlZiBPUEVO U1NMX0ZJUFMKLS1pbnQgcHJpdmF0ZV9TSEEzODRfSW5pdChTSEE1MTJfQ1RYICpjKTsKLS1pbnQg cHJpdmF0ZV9TSEE1MTJfSW5pdChTSEE1MTJfQ1RYICpjKTsKLS0jZW5kaWYKLSBpbnQgU0hBMzg0 X0luaXQoU0hBNTEyX0NUWCAqYyk7Ci0gaW50IFNIQTM4NF9VcGRhdGUoU0hBNTEyX0NUWCAqYywg Y29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7Ci0gaW50IFNIQTM4NF9GaW5hbCh1bnNpZ25l ZCBjaGFyICptZCwgU0hBNTEyX0NUWCAqYyk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEy L2NyeXB0by9zaGEvc2hhX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL3No YS9zaGFfbG9jbC5oCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vc2hhL3NoYV9sb2Ns LmguZmlwcwkyMDEyLTAyLTA3IDExOjA3OjAxLjgyNDM4NzczOSArMDEwMAotKysrIG9wZW5zc2wt MS4wLjEtYmV0YTIvY3J5cHRvL3NoYS9zaGFfbG9jbC5oCTIwMTItMDItMDcgMTE6MDc6MDIuNTU0 MzkzODE1ICswMTAwCi1AQCAtMTIzLDExICsxMjMsMTQgQEAgdm9pZCBzaGExX2Jsb2NrX2RhdGFf b3JkZXIgKFNIQV9DVFggKmMsCi0gI2RlZmluZSBJTklUX0RBVEFfaDQgMHhjM2QyZTFmMFVMCi0g Ci0gI2lmZGVmIFNIQV8wCi0tZmlwc19tZF9pbml0KFNIQSkKLStub25maXBzX21kX2luaXQoU0hB KQotICNlbHNlCi0gZmlwc19tZF9pbml0X2N0eChTSEExLCBTSEEpCi0gI2VuZGlmCi0gCXsKLSsj aWYgZGVmaW5lZChTSEFfMSkgJiYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCi0rCUZJUFNfc2VsZnRl c3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCWMtPmgw PUlOSVRfREFUQV9oMDsKLSAJYy0+aDE9SU5JVF9EQVRBX2gxOwotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMS1iZXRhMi9jcnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1i ZXRhMi9jcnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9j cnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jLmZpcHMJMjAxMS0wNi0wMSAxNTozOTo0NS4wMDAwMDAw MDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by93aHJscG9vbC93cF9kZ3N0 LmMJMjAxMi0wMi0wNyAxMTowNzowMi41NTUzOTM4MjMgKzAxMDAKLUBAIC01NSw3ICs1NSw3IEBA Ci0gI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotIAot LWZpcHNfbWRfaW5pdChXSElSTFBPT0wpCi0rbm9uZmlwc19tZF9pbml0KFdISVJMUE9PTCkKLSAJ ewotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKLSAJcmV0dXJuKDEpOwotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMS1iZXRhMi9NYWtlZmlsZS5vcmcuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL01h a2VmaWxlLm9yZwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvTWFrZWZpbGUub3JnLmZpcHMJMjAx Mi0wMi0wNyAxMTowNzowMi40ODMzOTMyMjMgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEy L01ha2VmaWxlLm9yZwkyMDEyLTAyLTA3IDExOjA3OjAyLjU1NTM5MzgyMyArMDEwMAotQEAgLTEz Niw2ICsxMzYsOSBAQCBGSVBTQ0FOTElCPQotIAotIEJBU0VBRERSPQotIAotKyMgTm9uLWVtcHR5 IGlmIEZJUFMgZW5hYmxlZAotK0ZJUFM9Ci0rCi0gRElSUz0gICBjcnlwdG8gc3NsIGVuZ2luZXMg YXBwcyB0ZXN0IHRvb2xzCi0gRU5HRElSUz0gY2Nnb3N0Ci0gU0hMSUJESVJTPSBjcnlwdG8gc3Ns Ci1AQCAtMTQ4LDcgKzE1MSw3IEBAIFNESVJTPSAgXAotIAlibiBlYyByc2EgZHNhIGVjZHNhIGRo IGVjZGggZHNvIGVuZ2luZSBcCi0gCWJ1ZmZlciBiaW8gc3RhY2sgbGhhc2ggcmFuZCBlcnIgXAot IAlldnAgYXNuMSBwZW0geDUwOSB4NTA5djMgY29uZiB0eHRfZGIgcGtjczcgcGtjczEyIGNvbXAg b2NzcCB1aSBrcmI1IFwKLS0JY21zIHBxdWV1ZSB0cyBqcGFrZSBzcnAgc3RvcmUgY21hYwotKwlj bXMgcHF1ZXVlIHRzIGpwYWtlIHNycCBzdG9yZSBjbWFjIGZpcHMKLSAjIGtlZXAgaW4gbWluZCB0 aGF0IHRoZSBhYm92ZSBsaXN0IGlzIGFkanVzdGVkIGJ5IC4vQ29uZmlndXJlCi0gIyBhY2NvcmRp bmcgdG8gbm8teHh4IGFyZ3VtZW50cy4uLgotIAotQEAgLTIzNyw2ICsyNDAsNyBAQCBCVUlMREVO Vj0JUExBVEZPUk09JyQoUExBVEZPUk0pJyBQUk9DRVNTCi0gCQlGSVBTTElCRElSPScke0ZJUFNM SUJESVJ9JwkJCVwKLSAJCUZJUFNESVI9JyR7RklQU0RJUn0nCQkJCVwKLSAJCUZJUFNDQU5MSUI9 IiQke0ZJUFNDQU5MSUI6LSQoRklQU0NBTkxJQil9IglcCi0rCQlGSVBTPSIkJHtGSVBTOi0kKEZJ UFMpfSIJXAotIAkJVEhJUz0kJHtUSElTOi0kQH0gTUFLRUZJTEU9TWFrZWZpbGUgTUFLRU9WRVJS SURFUz0KLSAjIE1BS0VPVkVSUklERVM9IGVmZmVjdGl2ZWx5ICJlcXVhbGl6ZXMiIEdOVS1pc2gg YW5kIFN5c1YtaXNoIG1ha2UgZmxhdm9ycywKLSAjIHdoaWNoIGluIHR1cm4gZWxpbWluYXRlcyBh bWJpZ3VpdGllcyBpbiB2YXJpYWJsZSB0cmVhdG1lbnQgd2l0aCAtZS4KLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjEtYmV0YTIvc3NsL3NzbF9hbGdzLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEyL3Nz bC9zc2xfYWxncy5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9zc2wvc3NsX2FsZ3MuYy5maXBz CTIwMTItMDEtMTUgMTQ6NDI6NTAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1i ZXRhMi9zc2wvc3NsX2FsZ3MuYwkyMDEyLTAyLTA3IDExOjA3OjAyLjU1NTM5MzgyMyArMDEwMAot QEAgLTY0LDYgKzY0LDEyIEBACi0gaW50IFNTTF9saWJyYXJ5X2luaXQodm9pZCkKLSAJewotIAot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKLSsJaWYgKCFG SVBTX21vZGUoKSkKLSsJCXsKLSsjZW5kaWYKLSsKLSAjaWZuZGVmIE9QRU5TU0xfTk9fREVTCi0g CUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfY2JjKCkpOwotIAlFVlBfYWRkX2NpcGhlcihFVlBfZGVz X2VkZTNfY2JjKCkpOwotQEAgLTEzNiw2ICsxNDIsNTAgQEAgaW50IFNTTF9saWJyYXJ5X2luaXQo dm9pZCkKLSAJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYSgpKTsKLSAJRVZQX2FkZF9kaWdlc3QoRVZQ X2RzcygpKTsKLSAjZW5kaWYKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQl9Ci0rCWVsc2UKLSsJ CXsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fREVTCi0rCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRl M19jYmMoKSk7Ci0rI2VuZGlmCi0rI2lmbmRlZiBPUEVOU1NMX05PX0FFUwotKwlFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzEyOF9jYmMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2Ni YygpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2JjKCkpOwotKwlFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzEyOF9nY20oKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2dj bSgpKTsKLSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fTUQ1Ci0rCS8qIG5lZWRlZCBldmVu IGluIHRoZSBGSVBTIG1vZGUgZm9yIFRMUyBNQUMgKi8KLSsJRVZQX2FkZF9kaWdlc3QoRVZQX21k NSgpKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCJzc2wyLW1kNSIpOwotKwlFVlBf YWRkX2RpZ2VzdF9hbGlhcyhTTl9tZDUsInNzbDMtbWQ1Iik7Ci0rI2VuZGlmCi0rI2lmbmRlZiBP UEVOU1NMX05PX1NIQQotKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMSgpKTsgLyogUlNBIHdpdGgg c2hhMSAqLwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExLCJzc2wzLXNoYTEiKTsKLSsJ RVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMVdpdGhSU0FFbmNyeXB0aW9uLFNOX3NoYTFXaXRo UlNBKTsKLSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMjU2Ci0rCUVWUF9hZGRfZGln ZXN0KEVWUF9zaGEyMjQoKSk7Ci0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyNTYoKSk7Ci0rI2Vu ZGlmCi0rI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgotKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hh Mzg0KCkpOwotKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhNTEyKCkpOwotKyNlbmRpZgotKyNpZiAh ZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19EU0EpCi0rCUVW UF9hZGRfZGlnZXN0KEVWUF9kc3MxKCkpOyAvKiBEU0Egd2l0aCBzaGExICovCi0rCUVWUF9hZGRf ZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLFNOX2RzYVdpdGhTSEExXzIpOwotKwlFVlBfYWRk X2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwiRFNTMSIpOwotKwlFVlBfYWRkX2RpZ2VzdF9h bGlhcyhTTl9kc2FXaXRoU0hBMSwiZHNzMSIpOwotKyNlbmRpZgotKyNpZm5kZWYgT1BFTlNTTF9O T19FQ0RTQQotKwlFVlBfYWRkX2RpZ2VzdChFVlBfZWNkc2EoKSk7Ci0rI2VuZGlmCi0rCQl9Ci0r I2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0NPTVAKLSAJLyogVGhpcyB3aWxsIGluaXRpYWxp c2UgdGhlIGJ1aWx0LWluIGNvbXByZXNzaW9uIGFsZ29yaXRobXMuCi0gCSAgIFRoZSB2YWx1ZSBy ZXR1cm5lZCBpcyBhIFNUQUNLX09GKFNTTF9DT01QKSwgYnV0IHRoYXQgY2FuCgpkaWZmIC0tZ2l0 IGEvb3BlbnNzbC0xLjAuMS1iZXRhMi1uby1zcnAucGF0Y2ggYi9vcGVuc3NsLTEuMC4xLWJldGEy LW5vLXNycC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZiNDYxNC4uMDAw MDAwMAotLS0gYS9vcGVuc3NsLTEuMC4xLWJldGEyLW5vLXNycC5wYXRjaAorKysgL2Rldi9udWxs CkBAIC0xLDgwICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTIvYXBwcy9wcm9n cy5wbC5uby1zcnAgb3BlbnNzbC0xLjAuMS1iZXRhMi9hcHBzL3Byb2dzLnBsCi0tLS0gb3BlbnNz bC0xLjAuMS1iZXRhMi9hcHBzL3Byb2dzLnBsLm5vLXNycAkyMDA5LTA2LTMwIDE3OjA4OjM4LjAw MDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTIvYXBwcy9wcm9ncy5wbAkyMDEy LTAyLTA3IDAxOjE0OjA4Ljk3OTc1ODMwNyArMDEwMAotQEAgLTUxLDYgKzUxLDggQEAgZm9yZWFj aCAoQEFSR1YpCi0gCQl7IHByaW50ICIjaWZuZGVmIE9QRU5TU0xfTk9fQ01TXG4ke3N0cn0jZW5k aWZcbiI7IH0KLSAJZWxzaWYgKCAoJF8gPX4gL15vY3NwJC8pKQotIAkJeyBwcmludCAiI2lmbmRl ZiBPUEVOU1NMX05PX09DU1BcbiR7c3RyfSNlbmRpZlxuIjsgfQotKwllbHNpZiAoICgkXyA9fiAv XnNycCQvKSkKLSsJCXsgcHJpbnQgIiNpZm5kZWYgT1BFTlNTTF9OT19TUlBcbiR7c3RyfSNlbmRp ZlxuIjsgfQotIAllbHNlCi0gCQl7IHByaW50ICRzdHI7IH0KLSAJfQotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMS1iZXRhMi9hcHBzL3Nfc2VydmVyLmMubm8tc3JwIG9wZW5zc2wtMS4wLjEtYmV0YTIv YXBwcy9zX3NlcnZlci5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9hcHBzL3Nfc2VydmVyLmMu bm8tc3JwCTIwMTItMDItMDcgMDE6MDQ6MTIuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0x LjAuMS1iZXRhMi9hcHBzL3Nfc2VydmVyLmMJMjAxMi0wMi0wNyAwMToxMzoyMS41NzMzNjIzMTAg KzAxMDAKLUBAIC0yMjQ4LDYgKzIyNDgsNyBAQCBzdGF0aWMgaW50IHN2X2JvZHkoY2hhciAqaG9z dG5hbWUsIGludCBzCi0geyBzdGF0aWMgY291bnQ9MDsgaWYgKCsrY291bnQgPT0gMTAwKSB7IGNv dW50PTA7IFNTTF9yZW5lZ290aWF0ZShjb24pOyB9IH0KLSAjZW5kaWYKLSAJCQkJaz1TU0xfd3Jp dGUoY29uLCYoYnVmW2xdKSwodW5zaWduZWQgaW50KWkpOwotKyNpZm5kZWYgT1BFTlNTTF9OT19T UlAKLSAJCQkJd2hpbGUgKFNTTF9nZXRfZXJyb3IoY29uLGspID09IFNTTF9FUlJPUl9XQU5UX1g1 MDlfTE9PS1VQKQotIAkJCQkJewotIAkJCQkJQklPX3ByaW50ZihiaW9fc19vdXQsIkxPT0tVUCBy ZW5lZ28gZHVyaW5nIHdyaXRlXG4iKTsKLUBAIC0yMjU4LDYgKzIyNTksNyBAQCBzdGF0aWMgaW50 IHN2X2JvZHkoY2hhciAqaG9zdG5hbWUsIGludCBzCi0gCQkJCQkJQklPX3ByaW50ZihiaW9fc19v dXQsIkxPT0tVUCBub3Qgc3VjY2Vzc2Z1bFxuIik7Ci0gCQkJCQkJaz1TU0xfd3JpdGUoY29uLCYo YnVmW2xdKSwodW5zaWduZWQgaW50KWkpOwotIAkJCQkJfQotKyNlbmRpZgotIAkJCQlzd2l0Y2gg KFNTTF9nZXRfZXJyb3IoY29uLGspKQotIAkJCQkJewotIAkJCQljYXNlIFNTTF9FUlJPUl9OT05F OgotQEAgLTIzMDUsNiArMjMwNyw3IEBAIHN0YXRpYyBpbnQgc3ZfYm9keShjaGFyICpob3N0bmFt ZSwgaW50IHMKLSAJCQkJewotIGFnYWluOgkKLSAJCQkJaT1TU0xfcmVhZChjb24sKGNoYXIgKili dWYsYnVmc2l6ZSk7Ci0rI2lmbmRlZiBPUEVOU1NMX05PX1NSUAotIAkJCQl3aGlsZSAoU1NMX2dl dF9lcnJvcihjb24saSkgPT0gU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVApCi0gCQkJCQl7Ci0g CQkJCQlCSU9fcHJpbnRmKGJpb19zX291dCwiTE9PS1VQIHJlbmVnbyBkdXJpbmcgcmVhZFxuIik7 Ci1AQCAtMjMxNSw2ICsyMzE4LDcgQEAgYWdhaW46Ci0gCQkJCQkJQklPX3ByaW50ZihiaW9fc19v dXQsIkxPT0tVUCBub3Qgc3VjY2Vzc2Z1bFxuIik7Ci0gCQkJCQlpPVNTTF9yZWFkKGNvbiwoY2hh ciAqKWJ1ZixidWZzaXplKTsKLSAJCQkJCX0KLSsjZW5kaWYKLSAJCQkJc3dpdGNoIChTU0xfZ2V0 X2Vycm9yKGNvbixpKSkKLSAJCQkJCXsKLSAJCQkJY2FzZSBTU0xfRVJST1JfTk9ORToKLUBAIC0y MzkyLDYgKzIzOTYsNyBAQCBzdGF0aWMgaW50IGluaXRfc3NsX2Nvbm5lY3Rpb24oU1NMICpjb24p Ci0gCi0gCi0gCWk9U1NMX2FjY2VwdChjb24pOwotKyNpZm5kZWYgT1BFTlNTTF9OT19TUlAKLSAJ d2hpbGUgKGkgPD0gMCAmJiAgU1NMX2dldF9lcnJvcihjb24saSkgPT0gU1NMX0VSUk9SX1dBTlRf WDUwOV9MT09LVVApIAotIAkJewotIAkJCUJJT19wcmludGYoYmlvX3Nfb3V0LCJMT09LVVAgZHVy aW5nIGFjY2VwdCAlc1xuIixzcnBfY2FsbGJhY2tfcGFybS5sb2dpbik7Ci1AQCAtMjQwMiw2ICsy NDA3LDcgQEAgc3RhdGljIGludCBpbml0X3NzbF9jb25uZWN0aW9uKFNTTCAqY29uKQotIAkJCQlC SU9fcHJpbnRmKGJpb19zX291dCwiTE9PS1VQIG5vdCBzdWNjZXNzZnVsXG4iKTsKLSAJCQlpPVNT TF9hY2NlcHQoY29uKTsKLSAJCX0KLSsjZW5kaWYKLSAJaWYgKGkgPD0gMCkKLSAJCXsKLSAJCWlm IChCSU9fc29ja19zaG91bGRfcmV0cnkoaSkpCi1AQCAtMjYyNiw2ICsyNjMyLDcgQEAgc3RhdGlj IGludCB3d3dfYm9keShjaGFyICpob3N0bmFtZSwgaW50Ci0gCQlpZiAoaGFjaykKLSAJCQl7Ci0g CQkJaT1TU0xfYWNjZXB0KGNvbik7Ci0rI2lmbmRlZiBPUEVOU1NMX05PX1NSUAotIAkJCXdoaWxl IChpIDw9IDAgJiYgIFNTTF9nZXRfZXJyb3IoY29uLGkpID09IFNTTF9FUlJPUl9XQU5UX1g1MDlf TE9PS1VQKSAKLSAJCXsKLSAJCQlCSU9fcHJpbnRmKGJpb19zX291dCwiTE9PS1VQIGR1cmluZyBh Y2NlcHQgJXNcbiIsc3JwX2NhbGxiYWNrX3Bhcm0ubG9naW4pOwotQEAgLTI2MzYsNyArMjY0Myw3 IEBAIHN0YXRpYyBpbnQgd3d3X2JvZHkoY2hhciAqaG9zdG5hbWUsIGludAotIAkJCQlCSU9fcHJp bnRmKGJpb19zX291dCwiTE9PS1VQIG5vdCBzdWNjZXNzZnVsXG4iKTsKLSAJCQlpPVNTTF9hY2Nl cHQoY29uKTsKLSAJCX0KLS0KLSsjZW5kaWYKLSAJCQlzd2l0Y2ggKFNTTF9nZXRfZXJyb3IoY29u LGkpKQotIAkJCQl7Ci0gCQkJY2FzZSBTU0xfRVJST1JfTk9ORToKCmRpZmYgLS1naXQgYS9vcGVu c3NsLTEuMC4xLWJldGEyLXZlcnNpb24ucGF0Y2ggYi9vcGVuc3NsLTEuMC4xLWJldGEyLXZlcnNp b24ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMmQxNDUuLjAwMDAwMDAK LS0tIGEvb3BlbnNzbC0xLjAuMS1iZXRhMi12ZXJzaW9uLnBhdGNoCisrKyAvZGV2L251bGwKQEAg LTEsMjEgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9jcnlwdG8vb3BlbnNz bHYuaC52ZXJzaW9uIG9wZW5zc2wtMS4wLjEtYmV0YTIvY3J5cHRvL29wZW5zc2x2LmgKLS0tLSBv cGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9vcGVuc3Nsdi5oLnZlcnNpb24JMjAxMi0wMi0wNiAx NzoxNjo1NS41Mjk5NDQ0ODUgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEyL2NyeXB0by9v cGVuc3Nsdi5oCTIwMTItMDItMDYgMTc6MTY6NTMuMTYxOTI0NzMzICswMTAwCi1AQCAtMjUsNyAr MjUsNyBAQAotICAqIChQcmlvciB0byAwLjkuNWEgYmV0YTEsIGEgZGlmZmVyZW50IHNjaGVtZSB3 YXMgdXNlZDogTU1OTkZGUkJCIGZvcgotICAqICBtYWpvciBtaW5vciBmaXggZmluYWwgcGF0Y2gv YmV0YSkKLSAgKi8KLS0jZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIJMHgxMDAwMTAwMkwK LSsjZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIJMHgxMDAwMDAwM0wKLSAjaWZkZWYgT1BF TlNTTF9GSVBTCi0gI2RlZmluZSBPUEVOU1NMX1ZFUlNJT05fVEVYVAkiT3BlblNTTCAxLjAuMS1m aXBzLWJldGEyIDE5IEphbiAyMDEyIgotICNlbHNlCi1AQCAtODMsNyArODMsNyBAQAotICAqIHNo b3VsZCBvbmx5IGtlZXAgdGhlIHZlcnNpb25zIHRoYXQgYXJlIGJpbmFyeSBjb21wYXRpYmxlIHdp dGggdGhlIGN1cnJlbnQuCi0gICovCi0gI2RlZmluZSBTSExJQl9WRVJTSU9OX0hJU1RPUlkgIiIK LS0jZGVmaW5lIFNITElCX1ZFUlNJT05fTlVNQkVSICIxLjAuMCIKLSsjZGVmaW5lIFNITElCX1ZF UlNJT05fTlVNQkVSICIxLjAuMSIKLSAKLSAKLSAjZW5kaWYgLyogSEVBREVSX09QRU5TU0xWX0gg Ki8KCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4xLWJldGEzLWZpcHMucGF0Y2ggYi9vcGVuc3Ns LTEuMC4xLWJldGEzLWZpcHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uNTMwOGMwNAotLS0gL2Rldi9udWxsCisrKyBiL29wZW5zc2wtMS4wLjEtYmV0YTMtZmlwcy5w YXRjaApAQCAtMCwwICsxLDIxMTQzIEBACitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2Fw cHMvcGtjczEyLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2FwcHMvcGtjczEyLmMKKy0tLSBv cGVuc3NsLTEuMC4xLWJldGEzL2FwcHMvcGtjczEyLmMuZmlwcwkyMDExLTAzLTEzIDE5OjIwOjIz LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvYXBwcy9wa2NzMTIuYwky MDEyLTAyLTI5IDEwOjMzOjAyLjc3MzI5NDcxNiArMDEwMAorQEAgLTY3LDYgKzY3LDkgQEAKKyAj aW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9wZW0uaD4KKyAjaW5j bHVkZSA8b3BlbnNzbC9wa2NzMTIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorICNkZWZpbmUgUFJPRyBwa2NzMTJfbWFpbgor IAorQEAgLTEzMCw2ICsxMzMsMTEgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQor IAorICAgICBhcHBzX3N0YXJ0dXAoKTsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlm IChGSVBTX21vZGUoKSkKKysJY2VydF9wYmUgPSBrZXlfcGJlOyAvKiBjYW5ub3QgdXNlIFJDMiBp biB0aGUgRklQUyBtb2RlICovCisrI2VuZGlmCisrCisgICAgIGVuYyA9IEVWUF9kZXNfZWRlM19j YmMoKTsKKyAgICAgaWYgKGJpb19lcnIgPT0gTlVMTCApIGJpb19lcnIgPSBCSU9fbmV3X2ZwIChz dGRlcnIsIEJJT19OT0NMT1NFKTsKKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvYXBw cy9zcGVlZC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9hcHBzL3NwZWVkLmMKKy0tLSBvcGVu c3NsLTEuMC4xLWJldGEzL2FwcHMvc3BlZWQuYy5maXBzCTIwMTItMDEtMTEgMjI6NDk6MTYuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9hcHBzL3NwZWVkLmMJMjAxMi0w Mi0yOSAxMDozMzowMi43NzQyOTQ3MjQgKzAxMDAKK0BAIC0xOTUsNyArMTk1LDYgQEAKKyAjaWZk ZWYgT1BFTlNTTF9ET0lOR19NQUtFREVQRU5ECisgI3VuZGVmIEFFU19zZXRfZW5jcnlwdF9rZXkK KyAjdW5kZWYgQUVTX3NldF9kZWNyeXB0X2tleQorLSN1bmRlZiBERVNfc2V0X2tleV91bmNoZWNr ZWQKKyAjZW5kaWYKKyAjZGVmaW5lIEJGX3NldF9rZXkJcHJpdmF0ZV9CRl9zZXRfa2V5CisgI2Rl ZmluZSBDQVNUX3NldF9rZXkJcHJpdmF0ZV9DQVNUX3NldF9rZXkKK0BAIC0yMDMsNyArMjAyLDYg QEAKKyAjZGVmaW5lIFNFRURfc2V0X2tleQlwcml2YXRlX1NFRURfc2V0X2tleQorICNkZWZpbmUg UkMyX3NldF9rZXkJcHJpdmF0ZV9SQzJfc2V0X2tleQorICNkZWZpbmUgUkM0X3NldF9rZXkJcHJp dmF0ZV9SQzRfc2V0X2tleQorLSNkZWZpbmUgREVTX3NldF9rZXlfdW5jaGVja2VkCXByaXZhdGVf REVTX3NldF9rZXlfdW5jaGVja2VkCisgI2RlZmluZSBBRVNfc2V0X2VuY3J5cHRfa2V5CXByaXZh dGVfQUVTX3NldF9lbmNyeXB0X2tleQorICNkZWZpbmUgQUVTX3NldF9kZWNyeXB0X2tleQlwcml2 YXRlX0FFU19zZXRfZGVjcnlwdF9rZXkKKyAjZGVmaW5lIENhbWVsbGlhX3NldF9rZXkJcHJpdmF0 ZV9DYW1lbGxpYV9zZXRfa2V5CitAQCAtOTQxLDcgKzkzOSwxMiBAQCBpbnQgTUFJTihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCisgI2lmbmRlZiBPUEVOU1NMX05PX1JTQQorIAkJCWlmIChzdHJjbXAo KmFyZ3YsInJzYSIpID09IDApCisgCQkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCQkJaWYg KCFGSVBTX21vZGUoKSkKKysjZW5kaWYKKysJCQkJeworIAkJCXJzYV9kb2l0W1JfUlNBXzUxMl09 MTsKKysJCQkJfQorIAkJCXJzYV9kb2l0W1JfUlNBXzEwMjRdPTE7CisgCQkJcnNhX2RvaXRbUl9S U0FfMjA0OF09MTsKKyAJCQlyc2FfZG9pdFtSX1JTQV80MDk2XT0xOworQEAgLTk1MSw3ICs5NTQs MTIgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICNpZm5kZWYgT1BFTlNTTF9O T19EU0EKKyAJCQlpZiAoc3RyY21wKCphcmd2LCJkc2EiKSA9PSAwKQorIAkJCXsKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCQkJCWlmICghRklQU19tb2RlKCkpCisrI2VuZGlmCisrCQkJCXsKKyAJ CQlkc2FfZG9pdFtSX0RTQV81MTJdPTE7CisrCQkJCX0KKyAJCQlkc2FfZG9pdFtSX0RTQV8xMDI0 XT0xOworIAkJCWRzYV9kb2l0W1JfRFNBXzIwNDhdPTE7CisgCQkJfQorQEAgLTEyMjYsMzAgKzEy MzQsNTQgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlBRVNfc2V0X2VuY3J5 cHRfa2V5KGtleTMyLDI1NiwmYWVzX2tzMyk7CisgI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05P X0NBTUVMTElBCisrCWlmIChkb2l0W0RfQ0JDXzEyOF9DTUxdIHx8IGRvaXRbRF9DQkNfMTkyX0NN TF0gfHwgZG9pdFtEX0NCQ18yNTZfQ01MXSkKKysJICAgIHsKKyAJQ2FtZWxsaWFfc2V0X2tleShr ZXkxNiwxMjgsJmNhbWVsbGlhX2tzMSk7CisgCUNhbWVsbGlhX3NldF9rZXkoY2tleTI0LDE5Miwm Y2FtZWxsaWFfa3MyKTsKKyAJQ2FtZWxsaWFfc2V0X2tleShja2V5MzIsMjU2LCZjYW1lbGxpYV9r czMpOworKwkgICAgfQorICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19JREVBCisrCWlmIChk b2l0W0RfQ0JDX0lERUFdKQorKwkgICAgeworIAlpZGVhX3NldF9lbmNyeXB0X2tleShrZXkxNiwm aWRlYV9rcyk7CisrCSAgICB9CisgI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX1NFRUQKKysJ aWYgKGRvaXRbRF9DQkNfU0VFRF0pCisrCSAgICB7CisgCVNFRURfc2V0X2tleShrZXkxNiwmc2Vl ZF9rcyk7CisrCSAgICB9CisgI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX1JDNAorKwlpZiAo ZG9pdFtEX1JDNF0pCisrCSAgICB7CisgCVJDNF9zZXRfa2V5KCZyYzRfa3MsMTYsa2V5MTYpOwor KwkgICAgfQorICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19SQzIKKysJaWYgKGRvaXRbRF9D QkNfUkMyXSkKKysJICAgIHsKKyAJUkMyX3NldF9rZXkoJnJjMl9rcywxNixrZXkxNiwxMjgpOwor KwkgICAgfQorICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19SQzUKKysJaWYgKGRvaXRbRF9D QkNfUkM1XSkKKysJICAgIHsKKyAJUkM1XzMyX3NldF9rZXkoJnJjNV9rcywxNixrZXkxNiwxMik7 CisrCSAgICB9CisgI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0JGCisrCWlmIChkb2l0W0Rf Q0JDX0JGXSkKKysJICAgIHsKKyAJQkZfc2V0X2tleSgmYmZfa3MsMTYsa2V5MTYpOworKwkgICAg fQorICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19DQVNUCisrCWlmIChkb2l0W0RfQ0JDX0NB U1RdKQorKwkgICAgeworIAlDQVNUX3NldF9rZXkoJmNhc3Rfa3MsMTYsa2V5MTYpOworKwkgICAg fQorICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKKyAJbWVtc2V0KHJzYV9jLDAsc2l6 ZW9mKHJzYV9jKSk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL0NvbmZpZ3VyZS5maXBz IG9wZW5zc2wtMS4wLjEtYmV0YTMvQ29uZmlndXJlCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9D b25maWd1cmUuZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAyLjczODI5NDQxNiArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjEtYmV0YTMvQ29uZmlndXJlCTIwMTItMDItMjkgMTA6MzM6MDIuNzc1Mjk0NzMy ICswMTAwCitAQCAtOTkzLDExICs5OTMsNiBAQCBpZiAoZGVmaW5lZCgkZGlzYWJsZWR7Im1kNSJ9 KSB8fCBkZWZpbmVkCisgCSRkaXNhYmxlZHsic3NsMiJ9ID0gImZvcmNlZCI7CisgCX0KKyAKKy1p ZiAoJGZpcHMgJiYgJGZpcHNsaWJkaXIgZXEgIiIpCistCXsKKy0JJGZpcHNsaWJkaXIgPSAkZmlw c2RpciAuICIvbGliLyI7CistCX0KKy0KKyAjIFJTQVggRU5HSU5FIHNldHMgZGVmYXVsdCBub24t RklQUyBSU0EgbWV0aG9kLgorIGlmICgkZmlwcykKKyAJeworQEAgLTE0NzgsNyArMTQ3Myw2IEBA ICRjZmxhZ3MuPSIgLURPUEVOU1NMX0JOX0FTTV9HRjJtIiBpZiAoJGIKKyBpZiAoJGZpcHMpCisg CXsKKyAJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9GSVBTXG4iOwor LQkkY2ZsYWdzIC49ICIgLUlcJChGSVBTRElSKS9pbmNsdWRlIjsKKyAJfQorIAorICRjcHVpZF9v Ymo9Im1lbV9jbHIubyIJdW5sZXNzICgkY3B1aWRfb2JqID1+IC9cLm8kLyk7CitAQCAtMTY2NSw5 ICsxNjU5LDEyIEBAIHdoaWxlICg8SU4+KQorIAorIAlzL15GSVBTRElSPS4qL0ZJUFNESVI9JGZp cHNkaXIvOworIAlzL15GSVBTTElCRElSPS4qL0ZJUFNMSUJESVI9JGZpcHNsaWJkaXIvOworLQlz L15GSVBTQ0FOTElCPS4qL0ZJUFNDQU5MSUI9bGliY3J5cHRvLyBpZiAkZmlwczsKKyAJcy9eQkFT RUFERFI9LiovQkFTRUFERFI9JGJhc2VhZGRyLzsKKyAKKysJaWYgKCRmaXBzKQorKwkJeworKwkJ cy9eRklQUz0uKi9GSVBTPXllcy87CisrCQl9CisgCXMvXlNITElCX1RBUkdFVD0uKi9TSExJQl9U QVJHRVQ9JHNoYXJlZF90YXJnZXQvOworIAlzL15TSExJQl9NQVJLPS4qL1NITElCX01BUks9JHNo YXJlZF9tYXJrLzsKKyAJcy9eU0hBUkVEX0xJQlM9LiovU0hBUkVEX0xJQlM9XCQoU0hBUkVEX0NS WVBUTykgXCQoU0hBUkVEX1NTTCkvIGlmICghJG5vX3NoYXJlZCk7CitkaWZmIC11cCBvcGVuc3Ns LTEuMC4xLWJldGEzL2NyeXB0by9hZXMvYWVzX21pc2MuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0 YTMvY3J5cHRvL2Flcy9hZXNfbWlzYy5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8v YWVzL2Flc19taXNjLmMuZmlwcwkyMDExLTA2LTA1IDE5OjM2OjMzLjAwMDAwMDAwMCArMDIwMAor KysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2Flcy9hZXNfbWlzYy5jCTIwMTItMDItMjkg MTA6MzM6MDIuNzc2Mjk0NzQxICswMTAwCitAQCAtNjksMTcgKzY5LDExIEBAIGNvbnN0IGNoYXIg KkFFU19vcHRpb25zKHZvaWQpIHsKKyBpbnQgQUVTX3NldF9lbmNyeXB0X2tleShjb25zdCB1bnNp Z25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKKyAJCQlBRVNfS0VZICprZXkpCisg CXsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWZpcHNfY2lwaGVyX2Fib3J0KEFFUyk7CistI2Vu ZGlmCisgCXJldHVybiBwcml2YXRlX0FFU19zZXRfZW5jcnlwdF9rZXkodXNlcktleSwgYml0cywg a2V5KTsKKyAJfQorIAorIGludCBBRVNfc2V0X2RlY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNo YXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorIAkJCUFFU19LRVkgKmtleSkKKyAJeworLSNp ZmRlZiBPUEVOU1NMX0ZJUFMKKy0JZmlwc19jaXBoZXJfYWJvcnQoQUVTKTsKKy0jZW5kaWYKKyAJ cmV0dXJuIHByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleSh1c2VyS2V5LCBiaXRzLCBrZXkpOwor IAl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9jbWFjL2NtYWMuYy5maXBz IG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2NtYWMvY21hYy5jCistLS0gb3BlbnNzbC0xLjAu MS1iZXRhMy9jcnlwdG8vY21hYy9jbWFjLmMuZmlwcwkyMDExLTA2LTEyIDE3OjA3OjI1LjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2NtYWMvY21hYy5jCTIw MTItMDItMjkgMTA6MzM6MDIuNzc2Mjk0NzQxICswMTAwCitAQCAtMTA3LDEzICsxMDcsNiBAQCBD TUFDX0NUWCAqQ01BQ19DVFhfbmV3KHZvaWQpCisgCisgdm9pZCBDTUFDX0NUWF9jbGVhbnVwKENN QUNfQ1RYICpjdHgpCisgCXsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWlmIChGSVBTX21vZGUo KSAmJiAhY3R4LT5jY3R4LmVuZ2luZSkKKy0JCXsKKy0JCUZJUFNfY21hY19jdHhfY2xlYW51cChj dHgpOworLQkJcmV0dXJuOworLQkJfQorLSNlbmRpZgorIAlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVw KCZjdHgtPmNjdHgpOworIAlPUEVOU1NMX2NsZWFuc2UoY3R4LT50YmwsIEVWUF9NQVhfQkxPQ0tf TEVOR1RIKTsKKyAJT1BFTlNTTF9jbGVhbnNlKGN0eC0+azEsIEVWUF9NQVhfQkxPQ0tfTEVOR1RI KTsKK0BAIC0xNjQsMTEgKzE1Nyw2IEBAIGludCBDTUFDX0luaXQoQ01BQ19DVFggKmN0eCwgY29u c3Qgdm9pZAorIAkJCUVWUGVycihFVlBfRl9DTUFDX0lOSVQsIEVWUF9SX0RJU0FCTEVEX0ZPUl9G SVBTKTsKKyAJCQlyZXR1cm4gMDsKKyAJCQl9CistCQkvKiBPdGhlciBhbGdvcml0aG0gYmxvY2tp bmcgd2lsbCBiZSBkb25lIGluIEZJUFNfY21hY19pbml0LAorLQkJICogdmlhIEZJUFNfY2lwaGVy aW5pdCgpLgorLQkJICovCistCQlpZiAoIWltcGwgJiYgIWN0eC0+Y2N0eC5lbmdpbmUpCistCQkJ cmV0dXJuIEZJUFNfY21hY19pbml0KGN0eCwga2V5LCBrZXlsZW4sIGNpcGhlciwgTlVMTCk7Cisg CQl9CisgI2VuZGlmCisgCS8qIEFsbCB6ZXJvcyBtZWFucyByZXN0YXJ0ICovCitAQCAtMjE0LDEw ICsyMDIsNiBAQCBpbnQgQ01BQ19VcGRhdGUoQ01BQ19DVFggKmN0eCwgY29uc3Qgdm9pCisgCXsK KyAJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSA9IGluOworIAlzaXplX3QgYmw7CistI2lmZGVm IE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+Y2N0eC5lbmdpbmUpCist CQlyZXR1cm4gRklQU19jbWFjX3VwZGF0ZShjdHgsIGluLCBkbGVuKTsKKy0jZW5kaWYKKyAJaWYg KGN0eC0+bmxhc3RfYmxvY2sgPT0gLTEpCisgCQlyZXR1cm4gMDsKKyAJaWYgKGRsZW4gPT0gMCkK K0BAIC0yNTksMTAgKzI0Myw2IEBAIGludCBDTUFDX1VwZGF0ZShDTUFDX0NUWCAqY3R4LCBjb25z dCB2b2kKKyBpbnQgQ01BQ19GaW5hbChDTUFDX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQs IHNpemVfdCAqcG91dGxlbikKKyAJeworIAlpbnQgaSwgYmwsIGxiOworLSNpZmRlZiBPUEVOU1NM X0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmNjdHguZW5naW5lKQorLQkJcmV0dXJu IEZJUFNfY21hY19maW5hbChjdHgsIG91dCwgcG91dGxlbik7CistI2VuZGlmCisgCWlmIChjdHgt Pm5sYXN0X2Jsb2NrID09IC0xKQorIAkJcmV0dXJuIDA7CisgCWJsID0gRVZQX0NJUEhFUl9DVFhf YmxvY2tfc2l6ZSgmY3R4LT5jY3R4KTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5 cHRvL2NyeXB0by5oLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vY3J5cHRvLmgKKy0t LSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9jcnlwdG8uaC5maXBzCTIwMTItMDItMjkgMTA6 MzM6MDIuNTM4MjkyNjk2ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vY3J5 cHRvLmgJMjAxMi0wMi0yOSAxMDozMzowMi43NzcyOTQ3NTAgKzAxMDAKK0BAIC01NTMsMjQgKzU1 MywyOSBAQCBpbnQgRklQU19tb2RlX3NldChpbnQgcik7Cisgdm9pZCBPUEVOU1NMX2luaXQodm9p ZCk7CisgCisgI2RlZmluZSBmaXBzX21kX2luaXQoYWxnKSBmaXBzX21kX2luaXRfY3R4KGFsZywg YWxnKQorKyNkZWZpbmUgbm9uZmlwc19tZF9pbml0KGFsZykgbm9uZmlwc19tZF9pbml0X2N0eChh bGcsIGFsZykKKysjZGVmaW5lIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkgXAorKwlpbnQgYWxn IyNfSW5pdChjeCMjX0NUWCAqYykKKyAKKyAjaWZkZWYgT1BFTlNTTF9GSVBTCistI2RlZmluZSBm aXBzX21kX2luaXRfY3R4KGFsZywgY3gpIFwKKysjZGVmaW5lIG5vbmZpcHNfbWRfaW5pdF9jdHgo YWxnLCBjeCkgXAorIAlpbnQgYWxnIyNfSW5pdChjeCMjX0NUWCAqYykgXAorIAl7IFwKKyAJaWYg KEZJUFNfbW9kZSgpKSBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAorLQkJIkxvdyBs ZXZlbCBBUEkgY2FsbCB0byBkaWdlc3QgIiAjYWxnICIgZm9yYmlkZGVuIGluIEZJUFMgbW9kZSEi KTsgXAorKwkJIkRpZ2VzdCAiICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQUyBtb2RlISIpOyBcCisg CXJldHVybiBwcml2YXRlXyMjYWxnIyNfSW5pdChjKTsgXAorIAl9IFwKKyAJaW50IHByaXZhdGVf IyNhbGcjI19Jbml0KGN4IyNfQ1RYICpjKQorIAorICNkZWZpbmUgZmlwc19jaXBoZXJfYWJvcnQo YWxnKSBcCisgCWlmIChGSVBTX21vZGUoKSkgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18s IFwKKy0JCSJMb3cgbGV2ZWwgQVBJIGNhbGwgdG8gY2lwaGVyICIgI2FsZyAiIGZvcmJpZGRlbiBp biBGSVBTIG1vZGUhIikKKysJCSJDaXBoZXIgIiAjYWxnICIgZm9yYmlkZGVuIGluIEZJUFMgbW9k ZSEiKQorKworKy8qIGRpZSBpZiBGSVBTIHNlbGZ0ZXN0IGZhaWxlZCAqLworK3ZvaWQgRklQU19z ZWxmdGVzdF9jaGVjayh2b2lkKTsKKyAKKyAjZWxzZQorLSNkZWZpbmUgZmlwc19tZF9pbml0X2N0 eChhbGcsIGN4KSBcCistCWludCBhbGcjI19Jbml0KGN4IyNfQ1RYICpjKQorKyNkZWZpbmUgbm9u Zmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBmaXBzX21kX2luaXRfY3R4KGFsZywgY3gpCisgI2Rl ZmluZSBmaXBzX2NpcGhlcl9hYm9ydChhbGcpIHdoaWxlKDApCisgI2VuZGlmCisgCitAQCAtNTgw LDYgKzU4NSw5IEBAIHZvaWQgT1BFTlNTTF9pbml0KHZvaWQpOworICAqLworIHZvaWQgRVJSX2xv YWRfQ1JZUFRPX3N0cmluZ3Modm9pZCk7CisgCisrI2RlZmluZSBPUEVOU1NMX0hBVkVfSU5JVAkx Cisrdm9pZCBPUEVOU1NMX2luaXRfbGlicmFyeSh2b2lkKTsKKysKKyAvKiBFcnJvciBjb2RlcyBm b3IgdGhlIENSWVBUTyBmdW5jdGlvbnMuICovCisgCisgLyogRnVuY3Rpb24gY29kZXMuICovCitk aWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9kZXMvZGVzLmguZmlwcyBvcGVuc3Ns LTEuMC4xLWJldGEzL2NyeXB0by9kZXMvZGVzLmgKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2Ny eXB0by9kZXMvZGVzLmguZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAyLjYwNTI5MzI3MiArMDEwMAor KysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2Rlcy9kZXMuaAkyMDEyLTAyLTI5IDEwOjMz OjAyLjc3NzI5NDc1MCArMDEwMAorQEAgLTIyNCw5ICsyMjQsNiBAQCBpbnQgREVTX3NldF9rZXko Y29uc3RfREVTX2NibG9jayAqa2V5LERFCisgaW50IERFU19rZXlfc2NoZWQoY29uc3RfREVTX2Ni bG9jayAqa2V5LERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKKyBpbnQgREVTX3NldF9rZXlf Y2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUp OworIHZvaWQgREVTX3NldF9rZXlfdW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSxERVNf a2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7CistI2lmZGVmIE9QRU5TU0xfRklQUworLXZvaWQgcHJp dmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LERFU19rZXlf c2NoZWR1bGUgKnNjaGVkdWxlKTsKKy0jZW5kaWYKKyB2b2lkIERFU19zdHJpbmdfdG9fa2V5KGNv bnN0IGNoYXIgKnN0cixERVNfY2Jsb2NrICprZXkpOworIHZvaWQgREVTX3N0cmluZ190b18ya2V5 cyhjb25zdCBjaGFyICpzdHIsREVTX2NibG9jayAqa2V5MSxERVNfY2Jsb2NrICprZXkyKTsKKyB2 b2lkIERFU19jZmI2NF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVkIGNo YXIgKm91dCxsb25nIGxlbmd0aCwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRv L2Rlcy9zZXRfa2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9kZXMvc2V0X2tl eS5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZGVzL3NldF9rZXkuYy5maXBzCTIw MTEtMDYtMDEgMTg6NTQ6MDQuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRh My9jcnlwdG8vZGVzL3NldF9rZXkuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc3NzI5NDc1MCArMDEw MAorQEAgLTMzNywxMyArMzM3LDYgQEAgaW50IERFU19zZXRfa2V5X2NoZWNrZWQoY29uc3RfREVT X2NibG9jaworIAl9CisgCisgdm9pZCBERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2Ni bG9jayAqa2V5LCBERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSkKKy0jaWZkZWYgT1BFTlNTTF9G SVBTCistCXsKKy0JZmlwc19jaXBoZXJfYWJvcnQoREVTKTsKKy0JcHJpdmF0ZV9ERVNfc2V0X2tl eV91bmNoZWNrZWQoa2V5LCBzY2hlZHVsZSk7CistCX0KKy12b2lkIHByaXZhdGVfREVTX3NldF9r ZXlfdW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSwgREVTX2tleV9zY2hlZHVsZSAqc2No ZWR1bGUpCistI2VuZGlmCisgCXsKKyAJc3RhdGljIGNvbnN0IGludCBzaGlmdHMyWzE2XT17MCww LDEsMSwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMH07CisgCXJlZ2lzdGVyIERFU19MT05HIGMsZCx0 LHMsdDI7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9kaC9kaF9nZW4uYy5m aXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2RoL2RoX2dlbi5jCistLS0gb3BlbnNzbC0x LjAuMS1iZXRhMy9jcnlwdG8vZGgvZGhfZ2VuLmMuZmlwcwkyMDExLTA2LTA5IDE3OjIxOjQ2LjAw MDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2RoL2RoX2dlbi5j CTIwMTItMDItMjkgMTA6MzM6MDIuNzc4Mjk0NzU5ICswMTAwCitAQCAtODQsMTEgKzg0LDYgQEAg aW50IERIX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoREggKnJldCwgaQorICNlbmRpZgorIAlpZihy ZXQtPm1ldGgtPmdlbmVyYXRlX3BhcmFtcykKKyAJCXJldHVybiByZXQtPm1ldGgtPmdlbmVyYXRl X3BhcmFtcyhyZXQsIHByaW1lX2xlbiwgZ2VuZXJhdG9yLCBjYik7CistI2lmZGVmIE9QRU5TU0xf RklQUworLQlpZiAoRklQU19tb2RlKCkpCistCQlyZXR1cm4gRklQU19kaF9nZW5lcmF0ZV9wYXJh bWV0ZXJzX2V4KHJldCwgcHJpbWVfbGVuLAorLQkJCQkJCQlnZW5lcmF0b3IsIGNiKTsKKy0jZW5k aWYKKyAJcmV0dXJuIGRoX2J1aWx0aW5fZ2VucGFyYW1zKHJldCwgcHJpbWVfbGVuLCBnZW5lcmF0 b3IsIGNiKTsKKyAJfQorIAorQEAgLTEyMyw2ICsxMTgsMjAgQEAgc3RhdGljIGludCBkaF9idWls dGluX2dlbnBhcmFtcyhESCAqcmV0LAorIAlpbnQgZyxvaz0gLTE7CisgCUJOX0NUWCAqY3R4PU5V TEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgp KQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMsRklQU19SX0ZJ UFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCXJldHVybiAwOworKwkJfQorKworKwlpZiAoRklQU19t b2RlKCkgJiYgKHByaW1lX2xlbiA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTKSkK KysJCXsKKysJCURIZXJyKERIX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMsIERIX1JfS0VZX1NJWkVf VE9PX1NNQUxMKTsKKysJCWdvdG8gZXJyOworKwkJfQorKyNlbmRpZgorKworIAljdHg9Qk5fQ1RY X25ldygpOworIAlpZiAoY3R4ID09IE5VTEwpIGdvdG8gZXJyOworIAlCTl9DVFhfc3RhcnQoY3R4 KTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2RoL2RoLmguZmlwcyBvcGVu c3NsLTEuMC4xLWJldGEzL2NyeXB0by9kaC9kaC5oCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9j cnlwdG8vZGgvZGguaC5maXBzCTIwMTItMDItMjkgMTA6MzM6MDIuNDgzMjkyMjIzICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZGgvZGguaAkyMDEyLTAyLTI5IDEwOjMzOjAy Ljc3ODI5NDc1OSArMDEwMAorQEAgLTc3LDYgKzc3LDggQEAKKyAjIGRlZmluZSBPUEVOU1NMX0RI X01BWF9NT0RVTFVTX0JJVFMJMTAwMDAKKyAjZW5kaWYKKyAKKysjZGVmaW5lIE9QRU5TU0xfREhf RklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKKysKKyAjZGVmaW5lIERIX0ZMQUdfQ0FDSEVfTU9O VF9QICAgICAweDAxCisgI2RlZmluZSBESF9GTEFHX05PX0VYUF9DT05TVFRJTUUgMHgwMiAvKiBu ZXcgd2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBESAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICogaW1wbGVtZW50YXRpb24gbm93IHVzZXMgY29uc3RhbnQgdGltZQor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZGgvZGhfa2V5LmMuZmlwcyBvcGVu c3NsLTEuMC4xLWJldGEzL2NyeXB0by9kaC9kaF9rZXkuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0 YTMvY3J5cHRvL2RoL2RoX2tleS5jLmZpcHMJMjAxMS0xMS0xNCAxNToxNjowOS4wMDAwMDAwMDAg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9kaC9kaF9rZXkuYwkyMDEyLTAy LTI5IDEwOjMzOjAyLjc3OTI5NDc2OCArMDEwMAorQEAgLTYxLDYgKzYxLDkgQEAKKyAjaW5jbHVk ZSA8b3BlbnNzbC9ibi5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKyAjaW5jbHVkZSA8 b3BlbnNzbC9kaC5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+CisrI2VuZGlmCisgCisgc3RhdGljIGludCBnZW5lcmF0ZV9rZXkoREggKmRoKTsKKyBz dGF0aWMgaW50IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIgKmtleSwgY29uc3QgQklHTlVNICpw dWJfa2V5LCBESCAqZGgpOworQEAgLTEwNCw3ICsxMDcsNyBAQCBjb21wdXRlX2tleSwKKyBkaF9i bl9tb2RfZXhwLAorIGRoX2luaXQsCisgZGhfZmluaXNoLAorLTAsCisrREhfRkxBR19GSVBTX01F VEhPRCwKKyBOVUxMLAorIE5VTEwKKyB9OworQEAgLTEyMyw2ICsxMjYsMTQgQEAgc3RhdGljIGlu dCBnZW5lcmF0ZV9rZXkoREggKmRoKQorIAlCTl9NT05UX0NUWCAqbW9udD1OVUxMOworIAlCSUdO VU0gKnB1Yl9rZXk9TlVMTCwqcHJpdl9rZXk9TlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZGgtPnApIDwgT1BFTlNTTF9ESF9G SVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJREhlcnIoREhfRl9HRU5FUkFURV9LRVks IERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCXJldHVybiAwOworKwkJfQorKyNlbmRpZgor KworIAljdHggPSBCTl9DVFhfbmV3KCk7CisgCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7Cisg CitAQCAtMjEzLDYgKzIyNCwxMyBAQCBzdGF0aWMgaW50IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNo YXIgKmtlCisgCQlESGVycihESF9GX0NPTVBVVEVfS0VZLERIX1JfTU9EVUxVU19UT09fTEFSR0Up OworIAkJZ290byBlcnI7CisgCQl9CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19t b2RlKCkgJiYgKEJOX251bV9iaXRzKGRoLT5wKSA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxV U19CSVRTKSkKKysJCXsKKysJCURIZXJyKERIX0ZfQ09NUFVURV9LRVksIERIX1JfS0VZX1NJWkVf VE9PX1NNQUxMKTsKKysJCWdvdG8gZXJyOworKwkJfQorKyNlbmRpZgorIAorIAljdHggPSBCTl9D VFhfbmV3KCk7CisgCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7CitAQCAtMjgwLDYgKzI5OCw5 IEBAIHN0YXRpYyBpbnQgZGhfYm5fbW9kX2V4cChjb25zdCBESCAqZGgsIEIKKyAKKyBzdGF0aWMg aW50IGRoX2luaXQoREggKmRoKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3Nl bGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCWRoLT5mbGFncyB8PSBESF9GTEFHX0NBQ0hFX01P TlRfUDsKKyAJcmV0dXJuKDEpOworIAl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2Ny eXB0by9kaC9kaF9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2RoL2RoX2xp Yi5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZGgvZGhfbGliLmMuZmlwcwkyMDEx LTA2LTIwIDIxOjQxOjExLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMv Y3J5cHRvL2RoL2RoX2xpYi5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzc5Mjk0NzY4ICswMTAwCitA QCAtODEsMTQgKzgxLDcgQEAgY29uc3QgREhfTUVUSE9EICpESF9nZXRfZGVmYXVsdF9tZXRob2Qo dgorIAl7CisgCWlmKCFkZWZhdWx0X0RIX21ldGhvZCkKKyAJCXsKKy0jaWZkZWYgT1BFTlNTTF9G SVBTCistCQlpZiAoRklQU19tb2RlKCkpCistCQkJcmV0dXJuIEZJUFNfZGhfb3BlbnNzbCgpOwor LQkJZWxzZQorLQkJCXJldHVybiBESF9PcGVuU1NMKCk7CistI2Vsc2UKKyAJCWRlZmF1bHRfREhf bWV0aG9kID0gREhfT3BlblNTTCgpOworLSNlbmRpZgorIAkJfQorIAlyZXR1cm4gZGVmYXVsdF9E SF9tZXRob2Q7CisgCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2RzYS9k c2FfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9kc2EvZHNhX2Vyci5jCist LS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZHNhL2RzYV9lcnIuYy5maXBzCTIwMTEtMTAt MTAgMDE6MTM6NDkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlw dG8vZHNhL2RzYV9lcnIuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc3OTI5NDc2OCArMDEwMAorQEAg LTc0LDYgKzc0LDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBEU0Ffc3RyX2Z1bmN0c1tdPQor IHtFUlJfRlVOQyhEU0FfRl9ET19EU0FfUFJJTlQpLAkiRE9fRFNBX1BSSU5UIn0sCisge0VSUl9G VU5DKERTQV9GX0RTQVBBUkFNU19QUklOVCksCSJEU0FwYXJhbXNfcHJpbnQifSwKKyB7RVJSX0ZV TkMoRFNBX0ZfRFNBUEFSQU1TX1BSSU5UX0ZQKSwJIkRTQXBhcmFtc19wcmludF9mcCJ9LAorK3tF UlJfRlVOQyhEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4pLAkiZHNhX2J1aWx0aW5fa2V5Z2VuIn0s Cisre0VSUl9GVU5DKERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOKSwJImRzYV9idWlsdGluX3Bh cmFtZ2VuIn0sCisge0VSUl9GVU5DKERTQV9GX0RTQV9ET19TSUdOKSwJIkRTQV9kb19zaWduIn0s Cisge0VSUl9GVU5DKERTQV9GX0RTQV9ET19WRVJJRlkpLAkiRFNBX2RvX3ZlcmlmeSJ9LAorIHtF UlJfRlVOQyhEU0FfRl9EU0FfR0VORVJBVEVfS0VZKSwJIkRTQV9nZW5lcmF0ZV9rZXkifSwKK0BA IC0xMDYsNiArMTA4LDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBEU0Ffc3RyX3JlYXNvbnNb XQorIHtFUlJfUkVBU09OKERTQV9SX0RBVEFfVE9PX0xBUkdFX0ZPUl9LRVlfU0laRSksImRhdGEg dG9vIGxhcmdlIGZvciBrZXkgc2l6ZSJ9LAorIHtFUlJfUkVBU09OKERTQV9SX0RFQ09ERV9FUlJP UikgICAgICAgICAgLCJkZWNvZGUgZXJyb3IifSwKKyB7RVJSX1JFQVNPTihEU0FfUl9JTlZBTElE X0RJR0VTVF9UWVBFKSAgICwiaW52YWxpZCBkaWdlc3QgdHlwZSJ9LAorK3tFUlJfUkVBU09OKERT QV9SX0tFWV9TSVpFX0lOVkFMSUQpICAgICAgLCJrZXkgc2l6ZSBpbnZhbGlkIn0sCisre0VSUl9S RUFTT04oRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKSAgICAsImtleSBzaXplIHRvbyBzbWFsbCJ9 LAorIHtFUlJfUkVBU09OKERTQV9SX01JU1NJTkdfUEFSQU1FVEVSUykgICAgLCJtaXNzaW5nIHBh cmFtZXRlcnMifSwKKyB7RVJSX1JFQVNPTihEU0FfUl9NT0RVTFVTX1RPT19MQVJHRSkgICAgICwi bW9kdWx1cyB0b28gbGFyZ2UifSwKKyB7RVJSX1JFQVNPTihEU0FfUl9ORUVEX05FV19TRVRVUF9W QUxVRVMpICwibmVlZCBuZXcgc2V0dXAgdmFsdWVzIn0sCitkaWZmIC11cCBvcGVuc3NsLTEuMC4x LWJldGEzL2NyeXB0by9kc2EvZHNhX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlw dG8vZHNhL2RzYV9nZW4uYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2RzYS9kc2Ff Z2VuLmMuZmlwcwkyMDExLTA2LTA5IDE3OjIxOjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5z c2wtMS4wLjEtYmV0YTMvY3J5cHRvL2RzYS9kc2FfZ2VuLmMJMjAxMi0wMi0yOSAxMDozMzowMi43 ODAyOTQ3NzcgKzAxMDAKK0BAIC04NSw2ICs4NSwxNCBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KKyAjZW5kaWYKKyAKKysjaWZuZGVmIE9QRU5TU0xfRklQUworK3N0YXRpYyBpbnQgRklQ U19kc2FfZ2VuZXJhdGVfcHEoQk5fQ1RYICpjdHgsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMs CisrCQljb25zdCBFVlBfTUQgKmV2cG1kLCB1bnNpZ25lZCBjaGFyICpzZWVkLCBpbnQgc2VlZF9s ZW4sCisrCQlCSUdOVU0gKipwX3JldCwgQklHTlVNICoqcV9yZXQsIGludCAqY291bnRlcl9yZXQs IEJOX0dFTkNCICpjYik7Cisrc3RhdGljIGludCBGSVBTX2RzYV9nZW5lcmF0ZV9nKEJOX0NUWCAq Y3R4LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwKKysJCUJJR05VTSAqKmdfcmV0LCB1bnNpZ25lZCBs b25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKTsKKysjZW5kaWYKKysKKyBpbnQgRFNBX2dlbmVyYXRl X3BhcmFtZXRlcnNfZXgoRFNBICpyZXQsIGludCBiaXRzLAorIAkJY29uc3QgdW5zaWduZWQgY2hh ciAqc2VlZF9pbiwgaW50IHNlZWRfbGVuLAorIAkJaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQg bG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYikKK0BAIC0xMDAsMTQgKzEwOCw2IEBAIGludCBEU0Ff Z2VuZXJhdGVfcGFyYW1ldGVyc19leChEU0EgKnJldCwKKyAJaWYocmV0LT5tZXRoLT5kc2FfcGFy YW1nZW4pCisgCQlyZXR1cm4gcmV0LT5tZXRoLT5kc2FfcGFyYW1nZW4ocmV0LCBiaXRzLCBzZWVk X2luLCBzZWVkX2xlbiwKKyAJCQkJY291bnRlcl9yZXQsIGhfcmV0LCBjYik7CistI2lmZGVmIE9Q RU5TU0xfRklQUworLQllbHNlIGlmIChGSVBTX21vZGUoKSkKKy0JCXsKKy0JCXJldHVybiBGSVBT X2RzYV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KHJldCwgYml0cywgCistCQkJCQkJCXNlZWRfaW4s IHNlZWRfbGVuLAorLQkJCQkJCQljb3VudGVyX3JldCwgaF9yZXQsIGNiKTsKKy0JCX0KKy0jZW5k aWYKKyAJZWxzZQorIAkJeworIAkJY29uc3QgRVZQX01EICpldnBtZDsKK0BAIC0xMjUsMjcgKzEy NSwxMTkgQEAgaW50IERTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KERTQSAqcmV0LAorIAkJCX0K KyAKKyAJCXJldHVybiBkc2FfYnVpbHRpbl9wYXJhbWdlbihyZXQsIGJpdHMsIHFiaXRzLCBldnBt ZCwKKy0JCQlzZWVkX2luLCBzZWVkX2xlbiwgTlVMTCwgY291bnRlcl9yZXQsIGhfcmV0LCBjYik7 CisrCQkJCXNlZWRfaW4sIHNlZWRfbGVuLCBjb3VudGVyX3JldCwgaF9yZXQsIGNiKTsKKyAJCX0K KyAJfQorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgRklQU19kc2FfYnVpbHRpbl9wYXJh bWdlbihEU0EgKnJldCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKKysJY29uc3QgRVZQX01E ICpldnBtZCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwgc2l6ZV90IHNlZWRfbGVuLAor KwlpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKQor Kwl7CisrCXJldHVybiBkc2FfYnVpbHRpbl9wYXJhbWdlbihyZXQsIGJpdHMsIHFiaXRzLAorKwkJ ZXZwbWQsIHNlZWRfaW4sIHNlZWRfbGVuLAorKwkJY291bnRlcl9yZXQsIGhfcmV0LCBjYik7Cisr CX0KKysjZW5kaWYKKysKKyBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVf dCBiaXRzLCBzaXplX3QgcWJpdHMsCisgCWNvbnN0IEVWUF9NRCAqZXZwbWQsIGNvbnN0IHVuc2ln bmVkIGNoYXIgKnNlZWRfaW4sIHNpemVfdCBzZWVkX2xlbiwKKy0JdW5zaWduZWQgY2hhciAqc2Vl ZF9vdXQsCisgCWludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5D QiAqY2IpCisgCXsKKyAJaW50IG9rPTA7CisgCXVuc2lnbmVkIGNoYXIgc2VlZFtTSEEyNTZfRElH RVNUX0xFTkdUSF07CisrCUJJR05VTSAqZz1OVUxMLCpxPU5VTEwsKnA9TlVMTDsKKysJc2l6ZV90 IHFzaXplID0gcWJpdHMgPj4gMzsKKysJQk5fQ1RYICpjdHg9TlVMTDsKKysKKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCSAgICB7CisrCSAgICBG SVBTZXJyKEZJUFNfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTiwKKysJCSAgICBGSVBTX1JfRklQU19T RUxGVEVTVF9GQUlMRUQpOworKwkgICAgZ290byBlcnI7CisrCSAgICB9CisrCisrCWlmIChGSVBT X21vZHVsZV9tb2RlKCkgJiYKKysJICAgIChiaXRzICE9IDEwMjQgfHwgcWJpdHMgIT0gMTYwKSAm JgorKwkgICAgKGJpdHMgIT0gMjA0OCB8fCBxYml0cyAhPSAyMjQpICYmCisrCSAgICAoYml0cyAh PSAyMDQ4IHx8IHFiaXRzICE9IDI1NikgJiYKKysJICAgIChiaXRzICE9IDMwNzIgfHwgcWJpdHMg IT0gMjU2KSkKKysJCXsKKysJCURTQWVycihEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTiwgRFNB X1JfS0VZX1NJWkVfSU5WQUxJRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysjZW5kaWYKKysJaWYg KHNlZWRfbGVuICYmIChzZWVkX2xlbiA8IChzaXplX3QpcXNpemUpKQorKwkJc2VlZF9pbiA9IE5V TEw7CQkvKiBzZWVkIGJ1ZmZlciB0b28gc21hbGwgLS0gaWdub3JlICovCisrCWlmIChzZWVkX2xl biA+IHNpemVvZihzZWVkKSkgCisrCQlzZWVkX2xlbiA9IHNpemVvZihzZWVkKTsJLyogQXBwLiAy LjIgb2YgRklQUyBQVUIgMTg2IGFsbG93cyBsYXJnZXIgU0VFRCwKKysJCQkJCQkgKiBidXQgb3Vy IGludGVybmFsIGJ1ZmZlcnMgYXJlIHJlc3RyaWN0ZWQgdG8gMjU2IGJpdHMqLworKwlpZiAoc2Vl ZF9pbiAhPSBOVUxMKQorKwkJbWVtY3B5KHNlZWQsIHNlZWRfaW4sIHNlZWRfbGVuKTsKKysJZWxz ZQorKwkJc2VlZF9sZW4gPSAwOworKworKwlpZiAoKGN0eD1CTl9DVFhfbmV3KCkpID09IE5VTEwp CisrCQlnb3RvIGVycjsKKysKKysJQk5fQ1RYX3N0YXJ0KGN0eCk7CisrCisrCWlmICghRklQU19k c2FfZ2VuZXJhdGVfcHEoY3R4LCBiaXRzLCBxYml0cywgZXZwbWQsCisrCQlzZWVkLCBzZWVkX2xl biwgJnAsICZxLCBjb3VudGVyX3JldCwgY2IpKQorKwkJZ290byBlcnI7CisrCisrCWlmICghRklQ U19kc2FfZ2VuZXJhdGVfZyhjdHgsIHAsIHEsICZnLCBoX3JldCwgY2IpKQorKwkJZ290byBlcnI7 CisrCisrCW9rPTE7CisrZXJyOgorKwlpZiAob2spCisrCQl7CisrCQlpZihyZXQtPnApCisrCQkJ eworKwkJCUJOX2ZyZWUocmV0LT5wKTsKKysJCQlyZXQtPnAgPSBOVUxMOworKwkJCX0KKysJCWlm KHJldC0+cSkKKysJCQl7CisrCQkJQk5fZnJlZShyZXQtPnEpOworKwkJCXJldC0+cSA9IE5VTEw7 CisrCQkJfQorKwkJaWYocmV0LT5nKQorKwkJCXsKKysJCQlCTl9mcmVlKHJldC0+Zyk7CisrCQkJ cmV0LT5nID0gTlVMTDsKKysJCQl9CisrCQlyZXQtPnA9Qk5fZHVwKHApOworKwkJcmV0LT5xPUJO X2R1cChxKTsKKysJCXJldC0+Zz1CTl9kdXAoZyk7CisrCQlpZiAocmV0LT5wID09IE5VTEwgfHwg cmV0LT5xID09IE5VTEwgfHwgcmV0LT5nID09IE5VTEwpCisrCQkJb2s9MDsKKysJCX0KKysJaWYo Y3R4KQorKwkJeworKwkJQk5fQ1RYX2VuZChjdHgpOworKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKKysJ CX0KKysJcmV0dXJuIG9rOworKwl9CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKytzdGF0aWMK KysjZW5kaWYKKytpbnQgRklQU19kc2FfZ2VuZXJhdGVfcHEoQk5fQ1RYICpjdHgsIHNpemVfdCBi aXRzLCBzaXplX3QgcWJpdHMsCisrCQljb25zdCBFVlBfTUQgKmV2cG1kLCB1bnNpZ25lZCBjaGFy ICpzZWVkLCBpbnQgc2VlZF9sZW4sCisrCQlCSUdOVU0gKipwX3JldCwgQklHTlVNICoqcV9yZXQs IGludCAqY291bnRlcl9yZXQsIEJOX0dFTkNCICpjYikKKysJeworKwlpbnQgb2s9MDsKKyAJdW5z aWduZWQgY2hhciBtZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07CistCXVuc2lnbmVkIGNoYXIgYnVm W1NIQTI1Nl9ESUdFU1RfTEVOR1RIXSxidWYyW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKKysJdW5z aWduZWQgY2hhciBidWZbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOworIAlCSUdOVU0gKnIwLCpXLCpY LCpjLCp0ZXN0OworLQlCSUdOVU0gKmc9TlVMTCwqcT1OVUxMLCpwPU5VTEw7CistCUJOX01PTlRf Q1RYICptb250PU5VTEw7CistCWludCBpLCBrLCBuPTAsIG09MCwgcXNpemUgPSBxYml0cyA+PiAz OworKwlCSUdOVU0gKnE9TlVMTCwqcD1OVUxMOworKwlpbnQgaSwgaywgYiwgbj0wLCBtPTAsIHFz aXplID0gcWJpdHMgPj4gMzsKKyAJaW50IGNvdW50ZXI9MDsKKyAJaW50IHI9MDsKKy0JQk5fQ1RY ICpjdHg9TlVMTDsKKy0JdW5zaWduZWQgaW50IGg9MjsKKyAKKyAJaWYgKHFzaXplICE9IFNIQV9E SUdFU1RfTEVOR1RIICYmIHFzaXplICE9IFNIQTIyNF9ESUdFU1RfTEVOR1RIICYmCisgCSAgICBx c2l6ZSAhPSBTSEEyNTZfRElHRVNUX0xFTkdUSCkKK0BAIC0xNTMsNTEgKzI0NSw0MyBAQCBpbnQg ZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCisgCQlyZXR1cm4gMDsKKyAKKyAJ aWYgKGV2cG1kID09IE5VTEwpCistCQkvKiB1c2UgU0hBMSBhcyBkZWZhdWx0ICovCistCQlldnBt ZCA9IEVWUF9zaGExKCk7CisrCSAgICB7CisrCQlpZiAocWJpdHMgPD0gMTYwKQorKwkJCWV2cG1k ID0gRVZQX3NoYTEoKTsKKysJCWVsc2UgaWYgKHFiaXRzIDw9IDIyNCkKKysJCQlldnBtZCA9IEVW UF9zaGEyMjQoKTsKKysJCWVsc2UKKysJCQlldnBtZCA9IEVWUF9zaGEyNTYoKTsKKysJICAgIH0K KyAKKyAJaWYgKGJpdHMgPCA1MTIpCisgCQliaXRzID0gNTEyOworIAorIAliaXRzID0gKGJpdHMr NjMpLzY0KjY0OworIAorLQkvKiBOQjogc2VlZF9sZW4gPT0gMCBpcyBzcGVjaWFsIGNhc2U6IGNv cHkgZ2VuZXJhdGVkIHNlZWQgdG8KKy0gCSAqIHNlZWRfaW4gaWYgaXQgaXMgbm90IE5VTEwuCist IAkgKi8KKy0JaWYgKHNlZWRfbGVuICYmIChzZWVkX2xlbiA8IChzaXplX3QpcXNpemUpKQorLQkJ c2VlZF9pbiA9IE5VTEw7CQkvKiBzZWVkIGJ1ZmZlciB0b28gc21hbGwgLS0gaWdub3JlICovCist CWlmIChzZWVkX2xlbiA+IChzaXplX3QpcXNpemUpIAorLQkJc2VlZF9sZW4gPSBxc2l6ZTsJLyog QXBwLiAyLjIgb2YgRklQUyBQVUIgMTg2IGFsbG93cyBsYXJnZXIgU0VFRCwKKy0JCQkJCSAqIGJ1 dCBvdXIgaW50ZXJuYWwgYnVmZmVycyBhcmUgcmVzdHJpY3RlZCB0byAxNjAgYml0cyovCistCWlm IChzZWVkX2luICE9IE5VTEwpCistCQltZW1jcHkoc2VlZCwgc2VlZF9pbiwgc2VlZF9sZW4pOwor LQorLQlpZiAoKGN0eD1CTl9DVFhfbmV3KCkpID09IE5VTEwpCistCQlnb3RvIGVycjsKKy0KKy0J aWYgKChtb250PUJOX01PTlRfQ1RYX25ldygpKSA9PSBOVUxMKQorLQkJZ290byBlcnI7CistCist CUJOX0NUWF9zdGFydChjdHgpOworIAlyMCA9IEJOX0NUWF9nZXQoY3R4KTsKKy0JZyA9IEJOX0NU WF9nZXQoY3R4KTsKKyAJVyA9IEJOX0NUWF9nZXQoY3R4KTsKKy0JcSA9IEJOX0NUWF9nZXQoY3R4 KTsKKysJKnFfcmV0ID0gcSA9IEJOX0NUWF9nZXQoY3R4KTsKKyAJWCA9IEJOX0NUWF9nZXQoY3R4 KTsKKyAJYyA9IEJOX0NUWF9nZXQoY3R4KTsKKy0JcCA9IEJOX0NUWF9nZXQoY3R4KTsKKysJKnBf cmV0ID0gcCA9IEJOX0NUWF9nZXQoY3R4KTsKKyAJdGVzdCA9IEJOX0NUWF9nZXQoY3R4KTsKKyAK KyAJaWYgKCFCTl9sc2hpZnQodGVzdCxCTl92YWx1ZV9vbmUoKSxiaXRzLTEpKQorIAkJZ290byBl cnI7CisgCisrCS8qIHN0ZXAgMyBuID0gXGxjZWlsIGJpdHMgLyBxYml0cyBccmNlaWwgLSAxICov CisrCW4gPSAoYml0cytxYml0cy0xKS9xYml0cyAtIDE7CisrCS8qIHN0ZXAgNCBiID0gYml0cyAt IDEgLSBuICogcWJpdHMgKi8KKysJYiA9IGJpdHMgLSAxIC0gbipxYml0czsKKysKKyAJZm9yICg7 OykKKyAJCXsKKyAJCWZvciAoOzspIC8qIGZpbmQgcSAqLworIAkJCXsKKyAJCQlpbnQgc2VlZF9p c19yYW5kb207CisgCistCQkJLyogc3RlcCAxICovCisrCQkJLyogc3RlcCA1IGdlbmVyYXRlIHNl ZWQgKi8KKyAJCQlpZighQk5fR0VOQ0JfY2FsbChjYiwgMCwgbSsrKSkKKyAJCQkJZ290byBlcnI7 CisgCitAQCAtMjEyLDMwICsyOTYsMTggQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAq cmV0LCBzaXplXworIAkJCQlzZWVkX2xlbj0wOyAvKiB1c2UgcmFuZG9tIHNlZWQgaWYgJ3NlZWRf aW4nIHR1cm5zIG91dCB0byBiZSBiYWQqLworIAkJCQl9CisgCQkJbWVtY3B5KGJ1ZiAsIHNlZWQs IHFzaXplKTsKKy0JCQltZW1jcHkoYnVmMiwgc2VlZCwgcXNpemUpOworLQkJCS8qIHByZWNvbXB1 dGUgIlNFRUQgKyAxIiBmb3Igc3RlcCA3OiAqLworLQkJCWZvciAoaSA9IHFzaXplLTE7IGkgPj0g MDsgaS0tKQorLQkJCQl7CistCQkJCWJ1ZltpXSsrOworLQkJCQlpZiAoYnVmW2ldICE9IDApCist CQkJCQlicmVhazsKKy0JCQkJfQorIAorLQkJCS8qIHN0ZXAgMiAqLworKwkJCS8qIHN0ZXAgNiBV ID0gaGFzaChzZWVkKSAqLworIAkJCWlmICghRVZQX0RpZ2VzdChzZWVkLCBxc2l6ZSwgbWQsICAg TlVMTCwgZXZwbWQsIE5VTEwpKQorIAkJCQlnb3RvIGVycjsKKy0JCQlpZiAoIUVWUF9EaWdlc3Qo YnVmLCAgcXNpemUsIGJ1ZjIsIE5VTEwsIGV2cG1kLCBOVUxMKSkKKy0JCQkJZ290byBlcnI7Cist CQkJZm9yIChpID0gMDsgaSA8IHFzaXplOyBpKyspCistCQkJCW1kW2ldXj1idWYyW2ldOworIAor LQkJCS8qIHN0ZXAgMyAqLworKwkJCS8qIHN0ZXAgNyBxID0gMl4ocWJpdHMtMSkgKyBVICsgMSAt IChVIG1vZCAyKSAqLworIAkJCW1kWzBdIHw9IDB4ODA7CisgCQkJbWRbcXNpemUtMV0gfD0gMHgw MTsKKyAJCQlpZiAoIUJOX2JpbjJibihtZCwgcXNpemUsIHEpKQorIAkJCQlnb3RvIGVycjsKKyAK Ky0JCQkvKiBzdGVwIDQgKi8KKysJCQkvKiBzdGVwIDggdGVzdCBmb3IgcHJpbWUgKDY0IHJvdW5k IG9mIFJhYmluLU1pbGxlcikgKi8KKyAJCQlyID0gQk5faXNfcHJpbWVfZmFzdHRlc3RfZXgocSwg RFNTX3ByaW1lX2NoZWNrcywgY3R4LAorIAkJCQkJc2VlZF9pc19yYW5kb20sIGNiKTsKKyAJCQlp ZiAociA+IDApCitAQCAtMjQzLDI3ICszMTUsMjIgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2Vu KERTQSAqcmV0LCBzaXplXworIAkJCWlmIChyICE9IDApCisgCQkJCWdvdG8gZXJyOworIAorLQkJ CS8qIGRvIGEgY2FsbGJhY2sgY2FsbCAqLworLQkJCS8qIHN0ZXAgNSAqLworIAkJCX0KKyAKKyAJ CWlmKCFCTl9HRU5DQl9jYWxsKGNiLCAyLCAwKSkgZ290byBlcnI7CisgCQlpZighQk5fR0VOQ0Jf Y2FsbChjYiwgMywgMCkpIGdvdG8gZXJyOworIAorLQkJLyogc3RlcCA2ICovCisrCQkvKiBzdGVw IDExICovCisgCQljb3VudGVyPTA7CistCQkvKiAib2Zmc2V0ID0gMiIgKi8KKy0KKy0JCW49KGJp dHMtMSkvMTYwOworKwkJLyogIm9mZnNldCA9IDEiICovCisgCisgCQlmb3IgKDs7KQorIAkJCXsK KyAJCQlpZiAoKGNvdW50ZXIgIT0gMCkgJiYgIUJOX0dFTkNCX2NhbGwoY2IsIDAsIGNvdW50ZXIp KQorIAkJCQlnb3RvIGVycjsKKyAKKy0JCQkvKiBzdGVwIDcgKi8KKysJCQkvKiBzdGVwIDExLjEs IDExLjIgb2J0YWluIFcgKi8KKyAJCQlCTl96ZXJvKFcpOworLQkJCS8qIG5vdyAnYnVmJyBjb250 YWlucyAiU0VFRCArIG9mZnNldCAtIDEiICovCisgCQkJZm9yIChrPTA7IGs8PW47IGsrKykKKyAJ CQkJeworIAkJCQkvKiBvYnRhaW4gIlNFRUQgKyBvZmZzZXQgKyBrIiBieSBpbmNyZW1lbnRpbmc6 ICovCitAQCAtMjc4LDI4ICszNDUsMzAgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAq cmV0LCBzaXplXworIAkJCQkJCQkJCU5VTEwpKQorIAkJCQkJZ290byBlcnI7CisgCistCQkJCS8q IHN0ZXAgOCAqLworIAkJCQlpZiAoIUJOX2JpbjJibihtZCwgcXNpemUsIHIwKSkKKyAJCQkJCWdv dG8gZXJyOworLQkJCQlpZiAoIUJOX2xzaGlmdChyMCxyMCwocXNpemUgPDwgMykqaykpIGdvdG8g ZXJyOworKwkJCQlpZiAoayA9PSBuKQorKwkJCQkJQk5fbWFza19iaXRzKHIwLGIpOworKwkJCQlp ZiAoIUJOX2xzaGlmdChyMCxyMCxxYml0cyprKSkgZ290byBlcnI7CisgCQkJCWlmICghQk5fYWRk KFcsVyxyMCkpIGdvdG8gZXJyOworIAkJCQl9CisgCistCQkJLyogbW9yZSBvZiBzdGVwIDggKi8K Ky0JCQlpZiAoIUJOX21hc2tfYml0cyhXLGJpdHMtMSkpIGdvdG8gZXJyOworKwkJCS8qIHN0ZXAg MTEuMyBYID0gVyArIDJeKEwtMSkgKi8KKyAJCQlpZiAoIUJOX2NvcHkoWCxXKSkgZ290byBlcnI7 CisgCQkJaWYgKCFCTl9hZGQoWCxYLHRlc3QpKSBnb3RvIGVycjsKKyAKKy0JCQkvKiBzdGVwIDkg Ki8KKysJCQkvKiBzdGVwIDExLjQgYyA9IFggbW9kIDIqcSAqLworIAkJCWlmICghQk5fbHNoaWZ0 MShyMCxxKSkgZ290byBlcnI7CisgCQkJaWYgKCFCTl9tb2QoYyxYLHIwLGN0eCkpIGdvdG8gZXJy OworKworKwkJCS8qIHN0ZXAgMTEuNSBwID0gWCAtIChjIC0gMSkgKi8KKyAJCQlpZiAoIUJOX3N1 YihyMCxjLEJOX3ZhbHVlX29uZSgpKSkgZ290byBlcnI7CisgCQkJaWYgKCFCTl9zdWIocCxYLHIw KSkgZ290byBlcnI7CisgCistCQkJLyogc3RlcCAxMCAqLworKwkJCS8qIHN0ZXAgMTEuNiAqLwor IAkJCWlmIChCTl9jbXAocCx0ZXN0KSA+PSAwKQorIAkJCQl7CistCQkJCS8qIHN0ZXAgMTEgKi8K KysJCQkJLyogc3RlcCAxMS43ICovCisgCQkJCXIgPSBCTl9pc19wcmltZV9mYXN0dGVzdF9leChw LCBEU1NfcHJpbWVfY2hlY2tzLAorIAkJCQkJCWN0eCwgMSwgY2IpOworIAkJCQlpZiAociA+IDAp CitAQCAtMzA4LDE5ICszNzcsNDUgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0 LCBzaXplXworIAkJCQkJZ290byBlcnI7CisgCQkJCX0KKyAKKy0JCQkvKiBzdGVwIDEzICovCisr CQkJLyogc3RlcCAxMS45ICovCisgCQkJY291bnRlcisrOworIAkJCS8qICJvZmZzZXQgPSBvZmZz ZXQgKyBuICsgMSIgKi8KKyAKKy0JCQkvKiBzdGVwIDE0ICovCistCQkJaWYgKGNvdW50ZXIgPj0g NDA5NikgYnJlYWs7CisrCQkJLyogc3RlcCAxMiAqLworKwkJCWlmIChjb3VudGVyID49IDQqYml0 cykgYnJlYWs7CisgCQkJfQorIAkJfQorIGVuZDoKKyAJaWYoIUJOX0dFTkNCX2NhbGwoY2IsIDIs IDEpKQorIAkJZ290byBlcnI7CisgCistCS8qIFdlIG5vdyBuZWVkIHRvIGdlbmVyYXRlIGcgKi8K KysJb2s9MTsKKytlcnI6CisrCWlmIChvaykKKysJCXsKKysJCWlmIChjb3VudGVyX3JldCAhPSBO VUxMKSAqY291bnRlcl9yZXQ9Y291bnRlcjsKKysJCX0KKysJcmV0dXJuIG9rOworKwl9CisrCisr I2lmbmRlZiBPUEVOU1NMX0ZJUFMKKytzdGF0aWMKKysjZW5kaWYKKytpbnQgRklQU19kc2FfZ2Vu ZXJhdGVfZyhCTl9DVFggKmN0eCwgQklHTlVNICpwLCBCSUdOVU0gKnEsCisrCQlCSUdOVU0gKipn X3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYikKKysJeworKwlpbnQgb2s9 MDsKKysJQklHTlVNICpyMCwgKnRlc3QsICpnID0gTlVMTDsKKysJQk5fTU9OVF9DVFggKm1vbnQ7 CisrCXVuc2lnbmVkIGludCBoPTI7CisrCisrCWlmICgobW9udD1CTl9NT05UX0NUWF9uZXcoKSkg PT0gTlVMTCkKKysJCWdvdG8gZXJyOworKworKwlyMCA9IEJOX0NUWF9nZXQoY3R4KTsKKysJKmdf cmV0ID0gZyA9IEJOX0NUWF9nZXQoY3R4KTsKKysJdGVzdCA9IEJOX0NUWF9nZXQoY3R4KTsKKysK KyAJLyogU2V0IHIwPShwLTEpL3EgKi8KKyAJaWYgKCFCTl9zdWIodGVzdCxwLEJOX3ZhbHVlX29u ZSgpKSkgZ290byBlcnI7CisgCWlmICghQk5fZGl2KHIwLE5VTEwsdGVzdCxxLGN0eCkpIGdvdG8g ZXJyOworQEAgLTM0NCwyNiArNDM5LDcgQEAgZW5kOgorIGVycjoKKyAJaWYgKG9rKQorIAkJewor LQkJaWYocmV0LT5wKSBCTl9mcmVlKHJldC0+cCk7CistCQlpZihyZXQtPnEpIEJOX2ZyZWUocmV0 LT5xKTsKKy0JCWlmKHJldC0+ZykgQk5fZnJlZShyZXQtPmcpOworLQkJcmV0LT5wPUJOX2R1cChw KTsKKy0JCXJldC0+cT1CTl9kdXAocSk7CistCQlyZXQtPmc9Qk5fZHVwKGcpOworLQkJaWYgKHJl dC0+cCA9PSBOVUxMIHx8IHJldC0+cSA9PSBOVUxMIHx8IHJldC0+ZyA9PSBOVUxMKQorLQkJCXsK Ky0JCQlvaz0wOworLQkJCWdvdG8gZXJyOworLQkJCX0KKy0JCWlmIChjb3VudGVyX3JldCAhPSBO VUxMKSAqY291bnRlcl9yZXQ9Y291bnRlcjsKKyAJCWlmIChoX3JldCAhPSBOVUxMKSAqaF9yZXQ9 aDsKKy0JCWlmIChzZWVkX291dCkKKy0JCQltZW1jcHkoc2VlZF9vdXQsIHNlZWQsIHFzaXplKTsK Ky0JCX0KKy0JaWYoY3R4KQorLQkJeworLQkJQk5fQ1RYX2VuZChjdHgpOworLQkJQk5fQ1RYX2Zy ZWUoY3R4KTsKKyAJCX0KKyAJaWYgKG1vbnQgIT0gTlVMTCkgQk5fTU9OVF9DVFhfZnJlZShtb250 KTsKKyAJcmV0dXJuIG9rOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZHNh L2RzYS5oLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZHNhL2RzYS5oCistLS0gb3Bl bnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZHNhL2RzYS5oLmZpcHMJMjAxMi0wMi0yOSAxMDozMzow Mi4zMTAyOTA3MzUgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9kc2EvZHNh LmgJMjAxMi0wMi0yOSAxMDozMzowMi43ODAyOTQ3NzcgKzAxMDAKK0BAIC04OCw2ICs4OCw4IEBA CisgIyBkZWZpbmUgT1BFTlNTTF9EU0FfTUFYX01PRFVMVVNfQklUUwkxMDAwMAorICNlbmRpZgor IAorKyNkZWZpbmUgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKKysKKyAj ZGVmaW5lIERTQV9GTEFHX0NBQ0hFX01PTlRfUAkweDAxCisgI2RlZmluZSBEU0FfRkxBR19OT19F WFBfQ09OU1RUSU1FICAgICAgIDB4MDIgLyogbmV3IHdpdGggMC45LjdoOyB0aGUgYnVpbHQtaW4g RFNBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW1w bGVtZW50YXRpb24gbm93IHVzZXMgY29uc3RhbnQgdGltZQorQEAgLTI2NCw2ICsyNjYsMTcgQEAg aW50CURTQV9wcmludF9mcChGSUxFICpicCwgY29uc3QgRFNBICp4LAorIERIICpEU0FfZHVwX0RI KGNvbnN0IERTQSAqcik7CisgI2VuZGlmCisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworK2ludCBG SVBTX2RzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFi aXRzLAorKwljb25zdCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2lu LCBzaXplX3Qgc2VlZF9sZW4sCisrCWludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxvbmcgKmhf cmV0LCBCTl9HRU5DQiAqY2IpOworK2ludCBGSVBTX2RzYV9nZW5lcmF0ZV9wcShCTl9DVFggKmN0 eCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKKysJCWNvbnN0IEVWUF9NRCAqZXZwbWQsIHVu c2lnbmVkIGNoYXIgKnNlZWQsIGludCBzZWVkX2xlbiwKKysJCUJJR05VTSAqKnBfcmV0LCBCSUdO VU0gKipxX3JldCwgaW50ICpjb3VudGVyX3JldCwgQk5fR0VOQ0IgKmNiKTsKKytpbnQgRklQU19k c2FfZ2VuZXJhdGVfZyhCTl9DVFggKmN0eCwgQklHTlVNICpwLCBCSUdOVU0gKnEsCisrCQlCSUdO VU0gKipnX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYik7CisrI2VuZGlm CisrCisgI2RlZmluZSBFVlBfUEtFWV9DVFhfc2V0X2RzYV9wYXJhbWdlbl9iaXRzKGN0eCwgbmJp dHMpIFwKKyAJRVZQX1BLRVlfQ1RYX2N0cmwoY3R4LCBFVlBfUEtFWV9EU0EsIEVWUF9QS0VZX09Q X1BBUkFNR0VOLCBcCisgCQkJCUVWUF9QS0VZX0NUUkxfRFNBX1BBUkFNR0VOX0JJVFMsIG5iaXRz LCBOVUxMKQorQEAgLTI4NSwxMCArMjk4LDEzIEBAIHZvaWQgRVJSX2xvYWRfRFNBX3N0cmluZ3Mo dm9pZCk7CisgI2RlZmluZSBEU0FfRl9ET19EU0FfUFJJTlQJCQkJIDEwNAorICNkZWZpbmUgRFNB X0ZfRFNBUEFSQU1TX1BSSU5UCQkJCSAxMDAKKyAjZGVmaW5lIERTQV9GX0RTQVBBUkFNU19QUklO VF9GUAkJCSAxMDEKKysjZGVmaW5lIERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTgkJCSAxMjQKKysj ZGVmaW5lIERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOCQkJIDEyMworICNkZWZpbmUgRFNBX0Zf RFNBX0RPX1NJR04JCQkJIDExMgorICNkZWZpbmUgRFNBX0ZfRFNBX0RPX1ZFUklGWQkJCQkgMTEz CistI2RlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVfS0VZCQkJCSAxMjQKKy0jZGVmaW5lIERTQV9G X0RTQV9HRU5FUkFURV9QQVJBTUVURVJTX0VYCQkgMTIzCisrI2RlZmluZSBEU0FfRl9EU0FfR0VO RVJBVEVfS0VZCQkJCSAxMjYKKysjZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9QQVJBTUVURVJT X0VYCQkgMTI3CisrI2RlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVfUEFSQU1FVEVSUwkvKiB1bnVz ZWQgKi8JIDEyNQorICNkZWZpbmUgRFNBX0ZfRFNBX05FV19NRVRIT0QJCQkJIDEwMworICNkZWZp bmUgRFNBX0ZfRFNBX1BBUkFNX0RFQ09ERQkJCQkgMTE5CisgI2RlZmluZSBEU0FfRl9EU0FfUFJJ TlRfRlAJCQkJIDEwNQorQEAgLTMxNCwxMSArMzMwLDE1IEBAIHZvaWQgRVJSX2xvYWRfRFNBX3N0 cmluZ3Modm9pZCk7CisgI2RlZmluZSBEU0FfUl9EQVRBX1RPT19MQVJHRV9GT1JfS0VZX1NJWkUJ CSAxMDAKKyAjZGVmaW5lIERTQV9SX0RFQ09ERV9FUlJPUgkJCQkgMTA0CisgI2RlZmluZSBEU0Ff Ul9JTlZBTElEX0RJR0VTVF9UWVBFCQkJIDEwNgorKyNkZWZpbmUgRFNBX1JfS0VZX1NJWkVfSU5W QUxJRAkJCQkgMTEzCisrI2RlZmluZSBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwJCQkgMTEwCisg I2RlZmluZSBEU0FfUl9NSVNTSU5HX1BBUkFNRVRFUlMJCQkgMTAxCisgI2RlZmluZSBEU0FfUl9N T0RVTFVTX1RPT19MQVJHRQkJCQkgMTAzCistI2RlZmluZSBEU0FfUl9ORUVEX05FV19TRVRVUF9W QUxVRVMJCQkgMTEwCisrI2RlZmluZSBEU0FfUl9ORUVEX05FV19TRVRVUF9WQUxVRVMJCQkgMTEy CisgI2RlZmluZSBEU0FfUl9OT05fRklQU19EU0FfTUVUSE9ECQkJIDExMQorKyNkZWZpbmUgRFNB X1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMTEKKyAjZGVmaW5lIERTQV9SX05PX1BBUkFNRVRFUlNf U0VUCQkJCSAxMDcKKysjZGVmaW5lIERTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBT X01PREUgLyogdW51c2VkICovIDExMgorICNkZWZpbmUgRFNBX1JfUEFSQU1FVEVSX0VOQ09ESU5H X0VSUk9SCQkJIDEwNQorIAorICNpZmRlZiAgX19jcGx1c3BsdXMKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjEtYmV0YTMvY3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEz L2NyeXB0by9kc2EvZHNhX2tleS5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZHNh L2RzYV9rZXkuYy5maXBzCTIwMTEtMDYtMDkgMTc6MjE6NDYuMDAwMDAwMDAwICswMjAwCisrKysg b3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZHNhL2RzYV9rZXkuYwkyMDEyLTAyLTI5IDEwOjMz OjAyLjc4MTI5NDc4NiArMDEwMAorQEAgLTY2LDYgKzY2LDI0IEBACisgCisgI2lmZGVmIE9QRU5T U0xfRklQUworICNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KKysKKytzdGF0aWMgaW50IGZpcHNfY2hlY2tfZHNhKERTQSAqZHNhKQorKwl7CisrCUVW UF9QS0VZIHBrOworKwl1bnNpZ25lZCBjaGFyIHRic1tdID0gIkRTQSBQYWlyd2lzZSBDaGVjayBE YXRhIjsKKysgICAgCXBrLnR5cGUgPSBFVlBfUEtFWV9EU0E7CisrICAgIAlway5wa2V5LmRzYSA9 IGRzYTsKKysKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QoJnBrLCB0YnMsIDAsIE5V TEwsIDAsIE5VTEwsIDAsIE5VTEwpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19DSEVD S19EU0EsRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVEKTsKKysJCWZpcHNfc2V0X3NlbGZ0ZXN0 X2ZhaWwoKTsKKysJCXJldHVybiAwOworKwkJfQorKwlyZXR1cm4gMTsKKysJfQorKworICNlbmRp ZgorIAorIHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKTsKK0BAIC04Miwx MCArMTAwLDYgQEAgaW50IERTQV9nZW5lcmF0ZV9rZXkoRFNBICpkc2EpCisgI2VuZGlmCisgCWlm KGRzYS0+bWV0aC0+ZHNhX2tleWdlbikKKyAJCXJldHVybiBkc2EtPm1ldGgtPmRzYV9rZXlnZW4o ZHNhKTsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWlmIChGSVBTX21vZGUoKSkKKy0JCXJldHVy biBGSVBTX2RzYV9nZW5lcmF0ZV9rZXkoZHNhKTsKKy0jZW5kaWYKKyAJcmV0dXJuIGRzYV9idWls dGluX2tleWdlbihkc2EpOworIAl9CisgCitAQCAtOTUsNiArMTA5LDE1IEBAIHN0YXRpYyBpbnQg ZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKQorIAlCTl9DVFggKmN0eD1OVUxMOworIAlCSUdO VU0gKnB1Yl9rZXk9TlVMTCwqcHJpdl9rZXk9TlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrCWlmIChGSVBTX21vZGUoKSAmJiAhKGRzYS0+ZmxhZ3MgJiBEU0FfRkxBR19OT05fRklQU19B TExPVykKKysJCSYmIChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5f TU9EVUxVU19CSVRTKSkKKysJCXsKKysJCURTQWVycihEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4s IERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysjZW5kaWYK KysKKyAJaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKKyAKKyAJaWYg KGRzYS0+cHJpdl9rZXkgPT0gTlVMTCkKK0BAIC0xMzMsNiArMTU2LDE0IEBAIHN0YXRpYyBpbnQg ZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKQorIAorIAlkc2EtPnByaXZfa2V5PXByaXZfa2V5 OworIAlkc2EtPnB1Yl9rZXk9cHViX2tleTsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJ UFNfbW9kZSgpICYmICFmaXBzX2NoZWNrX2RzYShkc2EpKQorKwkJeworKwkJZHNhLT5wdWJfa2V5 ID0gTlVMTDsKKysJCWRzYS0+cHJpdl9rZXkgPSBOVUxMOworKwkgICAgCWdvdG8gZXJyOworKwkJ fQorKyNlbmRpZgorIAlvaz0xOworIAorIGVycjoKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0 YTMvY3J5cHRvL2RzYS9kc2FfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9k c2EvZHNhX2xpYi5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZHNhL2RzYV9saWIu Yy5maXBzCTIwMTEtMTEtMTQgMTU6MTY6MDkuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0x LjAuMS1iZXRhMy9jcnlwdG8vZHNhL2RzYV9saWIuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc4MTI5 NDc4NiArMDEwMAorQEAgLTg3LDE0ICs4Nyw3IEBAIGNvbnN0IERTQV9NRVRIT0QgKkRTQV9nZXRf ZGVmYXVsdF9tZXRob2QKKyAJeworIAlpZighZGVmYXVsdF9EU0FfbWV0aG9kKQorIAkJeworLSNp ZmRlZiBPUEVOU1NMX0ZJUFMKKy0JCWlmIChGSVBTX21vZGUoKSkKKy0JCQlyZXR1cm4gRklQU19k c2Ffb3BlbnNzbCgpOworLQkJZWxzZQorLQkJCXJldHVybiBEU0FfT3BlblNTTCgpOworLSNlbHNl CisgCQlkZWZhdWx0X0RTQV9tZXRob2QgPSBEU0FfT3BlblNTTCgpOworLSNlbmRpZgorIAkJfQor IAlyZXR1cm4gZGVmYXVsdF9EU0FfbWV0aG9kOworIAl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4x LWJldGEzL2NyeXB0by9kc2EvZHNhX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5 cHRvL2RzYS9kc2FfbG9jbC5oCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZHNhL2Rz YV9sb2NsLmguZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAyLjMxMzI5MDc2MiArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2RzYS9kc2FfbG9jbC5oCTIwMTItMDItMjkgMTA6MzM6 MDIuNzgxMjk0Nzg2ICswMTAwCitAQCAtNTYsNSArNTYsNCBAQAorIAorIGludCBkc2FfYnVpbHRp bl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKKyAJY29uc3Qg RVZQX01EICpldnBtZCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwgc2l6ZV90IHNlZWRf bGVuLAorLQl1bnNpZ25lZCBjaGFyICpzZWVkX291dCwKKyAJaW50ICpjb3VudGVyX3JldCwgdW5z aWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYik7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4x LWJldGEzL2NyeXB0by9kc2EvZHNhX29zc2wuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5 cHRvL2RzYS9kc2Ffb3NzbC5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZHNhL2Rz YV9vc3NsLmMuZmlwcwkyMDExLTAyLTAxIDEzOjUzOjQ3LjAwMDAwMDAwMCArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jCTIwMTItMDItMjkgMTA6MzM6 MDIuNzgyMjk0Nzk1ICswMTAwCitAQCAtNjUsNiArNjUsOSBAQAorICNpbmNsdWRlIDxvcGVuc3Ns L2RzYS5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9h c24xLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K KysjZW5kaWYKKyAKKyBzdGF0aWMgRFNBX1NJRyAqZHNhX2RvX3NpZ24oY29uc3QgdW5zaWduZWQg Y2hhciAqZGdzdCwgaW50IGRsZW4sIERTQSAqZHNhKTsKKyBzdGF0aWMgaW50IGRzYV9zaWduX3Nl dHVwKERTQSAqZHNhLCBCTl9DVFggKmN0eF9pbiwgQklHTlVNICoqa2ludnAsIEJJR05VTSAqKnJw KTsKK0BAIC04Miw3ICs4NSw3IEBAIE5VTEwsIC8qIGRzYV9tb2RfZXhwLCAqLworIE5VTEwsIC8q IGRzYV9ibl9tb2RfZXhwLCAqLworIGRzYV9pbml0LAorIGRzYV9maW5pc2gsCistMCwKKytEU0Ff RkxBR19GSVBTX01FVEhPRCwKKyBOVUxMLAorIE5VTEwsCisgTlVMTAorQEAgLTEzOCw2ICsxNDEs MjEgQEAgc3RhdGljIERTQV9TSUcgKmRzYV9kb19zaWduKGNvbnN0IHVuc2lnbgorIAlEU0FfU0lH ICpyZXQ9TlVMTDsKKyAJaW50IG5vcmVkbyA9IDA7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUwor KwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBT X0ZfRFNBX0RPX1NJR04sRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAgIHJldHVy biBOVUxMOworKwkgICAgfQorKworKwlpZiAoRklQU19tb2RlKCkgJiYgIShkc2EtPmZsYWdzICYg RFNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpIAorKwkJJiYgKEJOX251bV9iaXRzKGRzYS0+cCkgPCBP UEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJRFNBZXJyKERTQV9G X0RTQV9ET19TSUdOLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJcmV0dXJuIE5VTEw7 CisrCQl9CisrI2VuZGlmCisrCisgCUJOX2luaXQoJm0pOworIAlCTl9pbml0KCZ4cik7CisgCitA QCAtMzI1LDYgKzM0MywyMSBAQCBzdGF0aWMgaW50IGRzYV9kb192ZXJpZnkoY29uc3QgdW5zaWdu ZWQKKyAJCXJldHVybiAtMTsKKyAJCX0KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJ UFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9EU0Ff RE9fVkVSSUZZLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICByZXR1cm4gLTE7 CisrCSAgICB9CisrCisrCWlmIChGSVBTX21vZGUoKSAmJiAhKGRzYS0+ZmxhZ3MgJiBEU0FfRkxB R19OT05fRklQU19BTExPVykgCisrCQkmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xf RFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQl7CisrCQlEU0FlcnIoRFNBX0ZfRFNBX0RP X1ZFUklGWSwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCXJldHVybiAtMTsKKysJCX0K KysjZW5kaWYKKysKKyAJaWYgKEJOX251bV9iaXRzKGRzYS0+cCkgPiBPUEVOU1NMX0RTQV9NQVhf TU9EVUxVU19CSVRTKQorIAkJeworIAkJRFNBZXJyKERTQV9GX0RTQV9ET19WRVJJRlksRFNBX1Jf TU9EVUxVU19UT09fTEFSR0UpOworQEAgLTM5OSw2ICs0MzIsOSBAQCBzdGF0aWMgaW50IGRzYV9k b192ZXJpZnkoY29uc3QgdW5zaWduZWQKKyAKKyBzdGF0aWMgaW50IGRzYV9pbml0KERTQSAqZHNh KQorIHsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysj ZW5kaWYKKyAJZHNhLT5mbGFnc3w9RFNBX0ZMQUdfQ0FDSEVfTU9OVF9QOworIAlyZXR1cm4oMSk7 CisgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZHNhL2RzYV9wbWV0aC5j LmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZHNhL2RzYV9wbWV0aC5jCistLS0gb3Bl bnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZHNhL2RzYV9wbWV0aC5jLmZpcHMJMjAxMS0wNi0yMCAy MjowNToxMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9k c2EvZHNhX3BtZXRoLmMJMjAxMi0wMi0yOSAxMDozMzowMi43ODIyOTQ3OTUgKzAxMDAKK0BAIC0y NTUsNyArMjU1LDcgQEAgc3RhdGljIGludCBwa2V5X2RzYV9wYXJhbWdlbihFVlBfUEtFWV9DVAor IAlpZiAoIWRzYSkKKyAJCXJldHVybiAwOworIAlyZXQgPSBkc2FfYnVpbHRpbl9wYXJhbWdlbihk c2EsIGRjdHgtPm5iaXRzLCBkY3R4LT5xYml0cywgZGN0eC0+cG1kLAorLQkgICAgICAgICAgICAg ICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBwY2IpOworKwkgICAgICAg ICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCBOVUxMLCBwY2IpOworIAlpZiAocmV0 KQorIAkJRVZQX1BLRVlfYXNzaWduX0RTQShwa2V5LCBkc2EpOworIAllbHNlCitkaWZmIC11cCBv cGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9kc2EvZHNhdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAu MS1iZXRhMy9jcnlwdG8vZHNhL2RzYXRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5 cHRvL2RzYS9kc2F0ZXN0LmMuZmlwcwkyMDA4LTA4LTA2IDE3OjU0OjExLjAwMDAwMDAwMCArMDIw MAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2RzYS9kc2F0ZXN0LmMJMjAxMi0wMi0y OSAxMDozMzowMi43ODIyOTQ3OTUgKzAxMDAKK0BAIC05NiwzNiArOTYsNDEgQEAgc3RhdGljIGlu dCBNU19DQUxMQkFDSyBkc2FfY2IoaW50IHAsIGludAorIC8qIHNlZWQsIG91dF9wLCBvdXRfcSwg b3V0X2cgYXJlIHRha2VuIGZyb20gdGhlIHVwZGF0ZWQgQXBwZW5kaXggNSB0bworICAqIEZJUFMg UFVCIDE4NiBhbmQgYWxzbyBhcHBlYXIgaW4gQXBwZW5kaXggNSB0byBGSVBTIFBJQiAxODYtMSAq LworIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNlZWRbMjBdPXsKKy0JMHhkNSwweDAxLDB4NGUsMHg0 YiwweDYwLDB4ZWYsMHgyYiwweGE4LDB4YjYsMHgyMSwweDFiLDB4NDAsCistCTB4NjIsMHhiYSww eDMyLDB4MjQsMHhlMCwweDQyLDB4N2QsMHhkMywKKysJMHgwMiwweDQ3LDB4MTEsMHg5MiwweDEx LDB4ODgsMHhDOCwweEZCLDB4QUYsMHg0OCwweDRDLDB4NjIsCisrCTB4REYsMHhBNSwweEJFLDB4 QTAsMHhBNCwweDNDLDB4NTYsMHhFMywKKyAJfTsKKyAKKyBzdGF0aWMgdW5zaWduZWQgY2hhciBv dXRfcFtdPXsKKy0JMHg4ZCwweGYyLDB4YTQsMHg5NCwweDQ5LDB4MjIsMHg3NiwweGFhLAorLQkw eDNkLDB4MjUsMHg3NSwweDliLDB4YjAsMHg2OCwweDY5LDB4Y2IsCistCTB4ZWEsMHhjMCwweGQ4 LDB4M2EsMHhmYiwweDhkLDB4MGMsMHhmNywKKy0JMHhjYiwweGI4LDB4MzIsMHg0ZiwweDBkLDB4 NzgsMHg4MiwweGU1LAorLQkweGQwLDB4NzYsMHgyZiwweGM1LDB4YjcsMHgyMSwweDBlLDB4YWYs CistCTB4YzIsMHhlOSwweGFkLDB4YWMsMHgzMiwweGFiLDB4N2EsMHhhYywKKy0JMHg0OSwweDY5 LDB4M2QsMHhmYiwweGY4LDB4MzcsMHgyNCwweGMyLAorLQkweGVjLDB4MDcsMHgzNiwweGVlLDB4 MzEsMHhjOCwweDAyLDB4OTEsCisrCTB4QUMsMHhDQiwweDFFLDB4NjMsMHg2MCwweDY5LDB4MEMs MHhGQiwweDA2LDB4MTksMHg2OCwweDNFLAorKwkweEE1LDB4MDEsMHg1QSwweEEyLDB4MTUsMHg1 QywweEUyLDB4OTksMHgyRCwweEQ1LDB4MzAsMHg5OSwKKysJMHg3RSwweDVGLDB4OEQsMHhFMiww eEY3LDB4QzYsMHgyRSwweDhELDB4QTMsMHg5RiwweDU4LDB4QUQsCisrCTB4RDYsMHhBOSwweDdE LDB4MEUsMHgwRCwweDk1LDB4NTMsMHhBNiwweDcxLDB4M0EsMHhERSwweEFCLAorKwkweEFDLDB4 RTksMHhGNCwweDM2LDB4NTUsMHg5RSwweEI5LDB4RDYsMHg5MywweEJGLDB4RjMsMHgxOCwKKysJ MHgxQywweDE0LDB4N0IsMHhBNSwweDQyLDB4MkUsMHhDRCwweDAwLDB4RUIsMHgzNSwweDNCLDB4 MUIsCisrCTB4QTgsMHg1MSwweEJCLDB4RTEsMHg1OCwweDQyLDB4ODUsMHg4NCwweDIyLDB4QTcs MHg5NywweDVFLAorKwkweDk5LDB4NkYsMHgzOCwweDIwLDB4QkQsMHg5RCwweEI2LDB4RDksMHgz MywweDM3LDB4MkEsMHhGRCwKKysJMHhCQiwweEQ0LDB4QkMsMHgwQywweDJBLDB4NjcsMHhDQiww eDlGLDB4QkIsMHhERiwweEY5LDB4OTMsCisrCTB4QUEsMHhENiwweEYwLDB4RDYsMHg5NSwweDBC LDB4NUQsMHg2NSwweDE0LDB4RDAsMHgxOCwweDlELAorKwkweEM2LDB4QUYsMHhGMCwweEM2LDB4 MzcsMHg3QywweEYzLDB4NUYsCisgCX07CisgCisgc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X3Fb XT17CistCTB4YzcsMHg3MywweDIxLDB4OGMsMHg3MywweDdlLDB4YzgsMHhlZSwKKy0JMHg5OSww eDNiLDB4NGYsMHgyZCwweGVkLDB4MzAsMHhmNCwweDhlLAorLQkweGRhLDB4Y2UsMHg5MSwweDVm LAorKwkweEUzLDB4OEUsMHg1RSwweDZELDB4QkYsMHgyQiwweDc5LDB4RjgsMHhDNSwweDRCLDB4 ODksMHg4QiwKKysJMHhCQSwweDJELDB4OTEsMHhDMywweDZDLDB4ODAsMHhBQywweDg3LAorIAl9 OworIAorIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9nW109eworLQkweDYyLDB4NmQsMHgwMiww eDc4LDB4MzksMHhlYSwweDBhLDB4MTMsCistCTB4NDEsMHgzMSwweDYzLDB4YTUsMHg1YiwweDRj LDB4YjUsMHgwMCwKKy0JMHgyOSwweDlkLDB4NTUsMHgyMiwweDk1LDB4NmMsMHhlZiwweGNiLAor LQkweDNiLDB4ZmYsMHgxMCwweGYzLDB4OTksMHhjZSwweDJjLDB4MmUsCistCTB4NzEsMHhjYiww eDlkLDB4ZTUsMHhmYSwweDI0LDB4YmEsMHhiZiwKKy0JMHg1OCwweGU1LDB4YjcsMHg5NSwweDIx LDB4OTIsMHg1YywweDljLAorLQkweGM0LDB4MmUsMHg5ZiwweDZmLDB4NDYsMHg0YiwweDA4LDB4 OGMsCistCTB4YzUsMHg3MiwweGFmLDB4NTMsMHhlNiwweGQ3LDB4ODgsMHgwMiwKKysJMHg0Miww eDRBLDB4MDQsMHg0RSwweDc5LDB4QjQsMHg5OSwweDdGLDB4RkQsMHg1OCwweDM2LDB4MkMsCisr CTB4MUIsMHg1RiwweDE4LDB4N0UsMHgwRCwweENDLDB4QUIsMHg4MSwweEM5LDB4NUQsMHgxMCww eENFLAorKwkweDRFLDB4ODAsMHg3RSwweDU4LDB4QjQsMHgzNCwweDNGLDB4QTcsMHg0NSwweEM3 LDB4QUEsMHgzNiwKKysJMHgyNCwweDQyLDB4QTksMHgzQiwweEU4LDB4MEUsMHgwNCwweDAyLDB4 MkQsMHhGQiwweEE2LDB4MTMsCisrCTB4QjksMHhCNSwweDE1LDB4QTUsMHg1NiwweDA3LDB4MzUs MHhFNCwweDAzLDB4QjYsMHg3OSwweDdDLAorKwkweDYyLDB4REQsMHhERiwweDNGLDB4NzEsMHgz QSwweDlELDB4OEIsMHhDNCwweEY2LDB4RTcsMHgxRCwKKysJMHg1MiwweEE4LDB4QTksMHg0Myww eDFELDB4MzMsMHg1MSwweDg4LDB4MzksMHhCRCwweDczLDB4RTksCisrCTB4NUYsMHhCRSwweDgy LDB4NDksMHgyNywweEU2LDB4QjUsMHg1MywweEMxLDB4MzgsMHhBQywweDJGLAorKwkweDZELDB4 OTcsMHg2QywweEVCLDB4NjcsMHhDMSwweDVGLDB4NjcsMHhGOCwweDM1LDB4MDUsMHg1RSwKKysJ MHhENSwweDY4LDB4ODAsMHhBQSwweDk2LDB4Q0EsMHgwQiwweDhBLDB4RTYsMHhGMSwweEIxLDB4 NDEsCisrCTB4QzYsMHg3NSwweDk0LDB4MEEsMHgwQSwweDJBLDB4RkEsMHgyOSwKKyAJfTsKKyAK KyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzdHIxW109IjEyMzQ1Njc4OTAxMjM0NTY3ODkw IjsKK0BAIC0xNTcsNyArMTYyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQor IAlCSU9fcHJpbnRmKGJpb19lcnIsInRlc3QgZ2VuZXJhdGlvbiBvZiBEU0EgcGFyYW1ldGVyc1xu Iik7CisgCisgCUJOX0dFTkNCX3NldCgmY2IsIGRzYV9jYiwgYmlvX2Vycik7CistCWlmKCgoZHNh ID0gRFNBX25ldygpKSA9PSBOVUxMKSB8fCAhRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNh LCA1MTIsCisrCWlmKCgoZHNhID0gRFNBX25ldygpKSA9PSBOVUxMKSB8fCAhRFNBX2dlbmVyYXRl X3BhcmFtZXRlcnNfZXgoZHNhLCAxMDI0LAorIAkJCQlzZWVkLCAyMCwgJmNvdW50ZXIsICZoLCAm Y2IpKQorIAkJZ290byBlbmQ7CisgCitAQCAtMTcwLDkgKzE3NSw5IEBAIGludCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKKyAJQklPX3ByaW50ZihiaW9fZXJyLCJcbmNvdW50ZXI9JWQgaD0l bGRcbiIsY291bnRlcixoKTsKKyAJCQorIAlEU0FfcHJpbnQoYmlvX2Vycixkc2EsMCk7CistCWlm IChjb3VudGVyICE9IDEwNSkgCisrCWlmIChjb3VudGVyICE9IDIzOSkgCisgCQl7CistCQlCSU9f cHJpbnRmKGJpb19lcnIsImNvdW50ZXIgc2hvdWxkIGJlIDEwNVxuIik7CisrCQlCSU9fcHJpbnRm KGJpb19lcnIsImNvdW50ZXIgc2hvdWxkIGJlIDIzOVxuIik7CisgCQlnb3RvIGVuZDsKKyAJCX0K KyAJaWYgKGggIT0gMikKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2VuZ2lu ZS9lbmdfYWxsLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9lbmdpbmUvZW5nX2Fs bC5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYy5maXBz CTIwMTEtMDgtMTAgMjA6NTM6MTMuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMS1i ZXRhMy9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc4MzI5NDgw MyArMDEwMAorQEAgLTU4LDExICs1OCwyNSBAQAorIAorICNpbmNsdWRlICJjcnlwdGxpYi5oIgor ICNpbmNsdWRlICJlbmdfaW50LmgiCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKyAKKyB2b2lkIEVOR0lORV9sb2FkX2J1aWx0aW5fZW5n aW5lcyh2b2lkKQorIAl7CisgCS8qIFNvbWUgRU5HSU5FcyBuZWVkIHRoaXMgKi8KKyAJT1BFTlNT TF9jcHVpZF9zZXR1cCgpOworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJT1BFTlNTTF9pbml0X2xp YnJhcnkoKTsKKysJaWYgKEZJUFNfbW9kZSgpKSB7CisrCQkvKiBXZSBhbGxvdyBsb2FkaW5nIGR5 bmFtaWMgZW5naW5lIGFzIGEgdGhpcmQgcGFydHkKKysJCSAgIGVuZ2luZSBtaWdodCBiZSBGSVBT IHZhbGlkYXRlZC4KKysJCSAgIFVzZXIgaXMgZGlzYWxsb3dlZCB0byBsb2FkIG5vbi12YWxpZGF0 ZWQgZW5naW5lcworKwkJICAgYnkgc2VjdXJpdHkgcG9saWN5LiAqLworKwkJRU5HSU5FX2xvYWRf ZHluYW1pYygpOworKwkJcmV0dXJuOworKwl9CisrI2VuZGlmCisgI2lmIDAKKyAJLyogVGhlcmUn cyBubyBsb25nZXIgYW55IG5lZWQgZm9yIGFuICJvcGVuc3NsIiBFTkdJTkUgdW5sZXNzLCBvbmUg ZGF5LAorIAkgKiBpdCBpcyB0aGUgKm9ubHkqIHdheSBmb3Igc3RhbmRhcmQgYnVpbHRpbiBpbXBs ZW1lbnRhdGlvbnMgdG8gYmUgYmUKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRv L2Vyci9lcnJfYWxsLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9lcnIvZXJyX2Fs bC5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXJyL2Vycl9hbGwuYy5maXBzCTIw MTEtMDYtMjEgMTg6NTg6MTAuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRh My9jcnlwdG8vZXJyL2Vycl9hbGwuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc4MzI5NDgwMyArMDEw MAorQEAgLTk2LDYgKzk2LDkgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9vY3NwLmg+CisgI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvdHMuaD4KKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorICNpZm5kZWYg T1BFTlNTTF9OT19DTVMKKyAjaW5jbHVkZSA8b3BlbnNzbC9jbXMuaD4KKyAjZW5kaWYKK0BAIC0x NTMsNiArMTU2LDkgQEAgdm9pZCBFUlJfbG9hZF9jcnlwdG9fc3RyaW5ncyh2b2lkKQorICNlbmRp ZgorIAlFUlJfbG9hZF9PQ1NQX3N0cmluZ3MoKTsKKyAJRVJSX2xvYWRfVUlfc3RyaW5ncygpOwor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRVJSX2xvYWRfRklQU19zdHJpbmdzKCk7CisrI2VuZGlm CisgI2lmbmRlZiBPUEVOU1NMX05PX0NNUworIAlFUlJfbG9hZF9DTVNfc3RyaW5ncygpOworICNl bmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZwL2NfYWxsYy5jLmZp cHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZwL2NfYWxsYy5jCistLS0gb3BlbnNzbC0x LjAuMS1iZXRhMy9jcnlwdG8vZXZwL2NfYWxsYy5jLmZpcHMJMjAxMS0xMS0xNCAyMjoxMzozNS4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvY19hbGxj LmMJMjAxMi0wMi0yOSAxMDozMzowMi43ODMyOTQ4MDMgKzAxMDAKK0BAIC02NSw2ICs2NSwxMSBA QAorIHZvaWQgT3BlblNTTF9hZGRfYWxsX2NpcGhlcnModm9pZCkKKyAJeworIAorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKKysJaWYoIUZJUFNfbW9kZSgp KSAKKysJCXsKKysjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fREVTCisgCUVWUF9hZGRfY2lw aGVyKEVWUF9kZXNfY2ZiKCkpOworIAlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2NmYjEoKSk7CitA QCAtMjI3LDQgKzIzMiw2MCBAQCB2b2lkIE9wZW5TU0xfYWRkX2FsbF9jaXBoZXJzKHZvaWQpCisg CUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2NhbWVsbGlhXzI1Nl9jYmMsIkNBTUVMTElBMjU2Iik7 CisgCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2NhbWVsbGlhXzI1Nl9jYmMsImNhbWVsbGlhMjU2 Iik7CisgI2VuZGlmCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJfQorKwllbHNlCisrCQl7Cisr I2lmbmRlZiBPUEVOU1NMX05PX0RFUworKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZV9jZmIo KSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jZmIoKSk7CisrCisrCUVWUF9hZGRf Y2lwaGVyKEVWUF9kZXNfZWRlX29mYigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUz X29mYigpKTsKKysKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGVfY2JjKCkpOworKwlFVlBf YWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfY2JjKCkpOworKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhT Tl9kZXNfZWRlM19jYmMsIkRFUzMiKTsKKysJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fZGVzX2Vk ZTNfY2JjLCJkZXMzIik7CisrCisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlKCkpOworKwlF VlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTMoKSk7CisrI2VuZGlmCisrCisrI2lmbmRlZiBPUEVO U1NMX05PX0FFUworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9lY2IoKSk7CisrCUVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NiYygpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18x MjhfY2ZiKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jZmIxKCkpOworKwlFVlBf YWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jZmI4KCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzEyOF9vZmIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2N0cigpKTsKKysJRVZQ X2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfZ2NtKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzEyOF94dHMoKSk7CisrCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xMjhfY2JjLCJBRVMx MjgiKTsKKysJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzEyOF9jYmMsImFlczEyOCIpOwor KwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9lY2IoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMTkyX2NiYygpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2ZiKCkpOwor KwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jZmIxKCkpOworKwlFVlBfYWRkX2NpcGhlcihF VlBfYWVzXzE5Ml9jZmI4KCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9vZmIoKSk7 CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2N0cigpKTsKKysJRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18xOTJfZ2NtKCkpOworKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTkyX2Ni YywiQUVTMTkyIik7CisrCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xOTJfY2JjLCJhZXMx OTIiKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfZWNiKCkpOworKwlFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzI1Nl9jYmMoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2Nm YigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2ZiMSgpKTsKKysJRVZQX2FkZF9j aXBoZXIoRVZQX2Flc18yNTZfY2ZiOCgpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZf b2ZiKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jdHIoKSk7CisrCUVWUF9hZGRf Y2lwaGVyKEVWUF9hZXNfMjU2X2djbSgpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZf eHRzKCkpOworKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMjU2X2NiYywiQUVTMjU2Iik7 CisrCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18yNTZfY2JjLCJhZXMyNTYiKTsKKysjZW5k aWYKKysJCX0KKysjZW5kaWYKKyAJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlw dG8vZXZwL2NfYWxsZC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZwL2NfYWxs ZC5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZwL2NfYWxsZC5jLmZpcHMJMjAw OS0wNy0wOCAxMDo1MDo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEz L2NyeXB0by9ldnAvY19hbGxkLmMJMjAxMi0wMi0yOSAxMDozMzowMi43ODQyOTQ4MTEgKzAxMDAK K0BAIC02NCw2ICs2NCwxMSBAQAorIAorIHZvaWQgT3BlblNTTF9hZGRfYWxsX2RpZ2VzdHModm9p ZCkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsK KysJaWYgKCFGSVBTX21vZGUoKSkKKysJCXsKKysjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9f TUQ0CisgCUVWUF9hZGRfZGlnZXN0KEVWUF9tZDQoKSk7CisgI2VuZGlmCitAQCAtMTExLDQgKzEx NiwzMiBAQCB2b2lkIE9wZW5TU0xfYWRkX2FsbF9kaWdlc3RzKHZvaWQpCisgI2lmbmRlZiBPUEVO U1NMX05PX1dISVJMUE9PTAorIAlFVlBfYWRkX2RpZ2VzdChFVlBfd2hpcmxwb29sKCkpOworICNl bmRpZgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCX0KKysJZWxzZQorKwkJeworKyNpZiAhZGVm aW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEExKQorKwlFVlBf YWRkX2RpZ2VzdChFVlBfc2hhMSgpKTsKKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMSwi c3NsMy1zaGExIik7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTFXaXRoUlNBRW5jcnlw dGlvbixTTl9zaGExV2l0aFJTQSk7CisrI2lmbmRlZiBPUEVOU1NMX05PX0RTQQorKwlFVlBfYWRk X2RpZ2VzdChFVlBfZHNzMSgpKTsKKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNI QTEsU05fZHNhV2l0aFNIQTFfMik7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhT SEExLCJEU1MxIik7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLCJkc3Mx Iik7CisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX0VDRFNBCisrCUVWUF9hZGRfZGlnZXN0 KEVWUF9lY2RzYSgpKTsKKysjZW5kaWYKKysjZW5kaWYKKysjaWZuZGVmIE9QRU5TU0xfTk9fU0hB MjU2CisrCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyMjQoKSk7CisrCUVWUF9hZGRfZGlnZXN0KEVW UF9zaGEyNTYoKSk7CisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgorKwlFVlBf YWRkX2RpZ2VzdChFVlBfc2hhMzg0KCkpOworKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhNTEyKCkp OworKyNlbmRpZgorKwkJfQorKyNlbmRpZgorIAl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJl dGEzL2NyeXB0by9ldnAvZGlnZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9l dnAvZGlnZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvZGlnZXN0LmMu ZmlwcwkyMDExLTA1LTI5IDE3OjU1OjEzLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4w LjEtYmV0YTMvY3J5cHRvL2V2cC9kaWdlc3QuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc4NDI5NDgx MSArMDEwMAorQEAgLTE0Miw5ICsxNDIsNTAgQEAgaW50IEVWUF9EaWdlc3RJbml0KEVWUF9NRF9D VFggKmN0eCwgY29ucworIAlyZXR1cm4gRVZQX0RpZ2VzdEluaXRfZXgoY3R4LCB0eXBlLCBOVUxM KTsKKyAJfQorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysvKiBUaGUgcHVycG9zZSBvZiB0 aGVzZSBpcyB0byB0cmFwIHByb2dyYW1zIHRoYXQgYXR0ZW1wdCB0byB1c2Ugbm9uIEZJUFMKKysg KiBhbGdvcml0aG1zIGluIEZJUFMgbW9kZSBhbmQgaWdub3JlIHRoZSBlcnJvcnMuCisrICovCisr Cisrc3RhdGljIGludCBiYWRfaW5pdChFVlBfTURfQ1RYICpjdHgpCisrCXsgRklQU19FUlJPUl9J R05PUkVEKCJEaWdlc3QgaW5pdCIpOyByZXR1cm4gMDt9CisrCisrc3RhdGljIGludCBiYWRfdXBk YXRlKEVWUF9NRF9DVFggKmN0eCxjb25zdCB2b2lkICpkYXRhLHNpemVfdCBjb3VudCkKKysJeyBG SVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCB1cGRhdGUiKTsgcmV0dXJuIDA7fQorKworK3N0YXRp YyBpbnQgYmFkX2ZpbmFsKEVWUF9NRF9DVFggKmN0eCx1bnNpZ25lZCBjaGFyICptZCkKKysJeyBG SVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCBGaW5hbCIpOyByZXR1cm4gMDt9CisrCisrc3RhdGlj IGNvbnN0IEVWUF9NRCBiYWRfbWQgPQorKwl7CisrCTAsCisrCTAsCisrCTAsCisrCTAsCisrCWJh ZF9pbml0LAorKwliYWRfdXBkYXRlLAorKwliYWRfZmluYWwsCisrCU5VTEwsCisrCU5VTEwsCisr CU5VTEwsCisrCTAsCisrCXswLDAsMCwwfSwKKysJfTsKKysKKysjZW5kaWYKKysKKyBpbnQgRVZQ X0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjb25zdCBFVlBfTUQgKnR5cGUsIEVOR0lO RSAqaW1wbCkKKyAJeworIAlFVlBfTURfQ1RYX2NsZWFyX2ZsYWdzKGN0eCxFVlBfTURfQ1RYX0ZM QUdfQ0xFQU5FRCk7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX3NlbGZ0ZXN0X2Zh aWxlZCgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRVZQX0RJR0VTVElOSVRfRVgsRklQU19S X0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCWN0eC0+ZGlnZXN0ID0gJmJhZF9tZDsKKysJCXJl dHVybiAwOworKwkJfQorKyNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyAJLyog V2hldGhlciBpdCdzIG5pY2Ugb3Igbm90LCAiSW5pdHMiIGNhbiBiZSB1c2VkIG9uICJGaW5hbCIn ZCBjb250ZXh0cworIAkgKiBzbyB0aGlzIGNvbnRleHQgbWF5IGFscmVhZHkgaGF2ZSBhbiBFTkdJ TkUhIFRyeSB0byBhdm9pZCByZWxlYXNpbmcKK0BAIC0yMDEsNiArMjQyLDE4IEBAIGludCBFVlBf RGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgsIGMKKyAjZW5kaWYKKyAJaWYgKGN0eC0+ZGln ZXN0ICE9IHR5cGUpCisgCQl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJaWYgKEZJUFNfbW9k ZSgpKQorKwkJCXsKKysJCQlpZiAoISh0eXBlLT5mbGFncyAmIEVWUF9NRF9GTEFHX0ZJUFMpIAor KwkJCSAmJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQor KwkJCQl7CisrCQkJCUVWUGVycihFVlBfRl9FVlBfRElHRVNUSU5JVF9FWCwgRVZQX1JfRElTQUJM RURfRk9SX0ZJUFMpOworKwkJCQljdHgtPmRpZ2VzdCA9ICZiYWRfbWQ7CisrCQkJCXJldHVybiAw OworKwkJCQl9CisrCQkJfQorKyNlbmRpZgorIAkJaWYgKGN0eC0+ZGlnZXN0ICYmIGN0eC0+ZGln ZXN0LT5jdHhfc2l6ZSkKKyAJCQlPUEVOU1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsKKyAJCWN0eC0+ ZGlnZXN0PXR5cGU7CitAQCAtMjI5LDI2ICsyODIsMTUgQEAgc2tpcF90b19pbml0OgorIAkJfQor IAlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT19JTklUKQorIAkJcmV0dXJuIDE7 CistI2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2RlKCkpCistCQl7CistCQlpZiAo RklQU19kaWdlc3Rpbml0KGN0eCwgdHlwZSkpCistCQkJcmV0dXJuIDE7CistCQlPUEVOU1NMX2Zy ZWUoY3R4LT5tZF9kYXRhKTsKKy0JCWN0eC0+bWRfZGF0YSA9IE5VTEw7CistCQlyZXR1cm4gMDsK Ky0JCX0KKy0jZW5kaWYKKyAJcmV0dXJuIGN0eC0+ZGlnZXN0LT5pbml0KGN0eCk7CisgCX0KKyAK KyBpbnQgRVZQX0RpZ2VzdFVwZGF0ZShFVlBfTURfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEs IHNpemVfdCBjb3VudCkKKyAJeworICNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JcmV0dXJuIEZJUFNf ZGlnZXN0dXBkYXRlKGN0eCwgZGF0YSwgY291bnQpOworLSNlbHNlCistCXJldHVybiBjdHgtPnVw ZGF0ZShjdHgsZGF0YSxjb3VudCk7CisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKyAjZW5kaWYK KysJcmV0dXJuIGN0eC0+dXBkYXRlKGN0eCxkYXRhLGNvdW50KTsKKyAJfQorIAorIC8qIFRoZSBj YWxsZXIgY2FuIGFzc3VtZSB0aGF0IHRoaXMgcmVtb3ZlcyBhbnkgc2VjcmV0IGRhdGEgZnJvbSB0 aGUgY29udGV4dCAqLworQEAgLTI2MywxMCArMzA1LDExIEBAIGludCBFVlBfRGlnZXN0RmluYWwo RVZQX01EX0NUWCAqY3R4LCB1bnMKKyAvKiBUaGUgY2FsbGVyIGNhbiBhc3N1bWUgdGhhdCB0aGlz IHJlbW92ZXMgYW55IHNlY3JldCBkYXRhIGZyb20gdGhlIGNvbnRleHQgKi8KKyBpbnQgRVZQX0Rp Z2VzdEZpbmFsX2V4KEVWUF9NRF9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqbWQsIHVuc2lnbmVk IGludCAqc2l6ZSkKKyAJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JcmV0dXJuIEZJUFNfZGln ZXN0ZmluYWwoY3R4LCBtZCwgc2l6ZSk7CistI2Vsc2UKKyAJaW50IHJldDsKKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKysKKyAJT1BFTlNT TF9hc3NlcnQoY3R4LT5kaWdlc3QtPm1kX3NpemUgPD0gRVZQX01BWF9NRF9TSVpFKTsKKyAJcmV0 PWN0eC0+ZGlnZXN0LT5maW5hbChjdHgsbWQpOworIAlpZiAoc2l6ZSAhPSBOVUxMKQorQEAgLTI3 OCw3ICszMjEsNiBAQCBpbnQgRVZQX0RpZ2VzdEZpbmFsX2V4KEVWUF9NRF9DVFggKmN0eCwKKyAJ CX0KKyAJbWVtc2V0KGN0eC0+bWRfZGF0YSwwLGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSk7CisgCXJl dHVybiByZXQ7CistI2VuZGlmCisgCX0KKyAKKyBpbnQgRVZQX01EX0NUWF9jb3B5KEVWUF9NRF9D VFggKm91dCwgY29uc3QgRVZQX01EX0NUWCAqaW4pCitAQCAtMzcyLDcgKzQxNCw2IEBAIHZvaWQg RVZQX01EX0NUWF9kZXN0cm95KEVWUF9NRF9DVFggKmN0eCkKKyAvKiBUaGlzIGNhbGwgZnJlZXMg cmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29udGV4dCAqLworIGludCBFVlBfTURfQ1RY X2NsZWFudXAoRVZQX01EX0NUWCAqY3R4KQorIAl7CistI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKyAJ LyogRG9uJ3QgYXNzdW1lIGN0eC0+bWRfZGF0YSB3YXMgY2xlYW5lZCBpbiBFVlBfRGlnZXN0X0Zp bmFsLAorIAkgKiBiZWNhdXNlIHNvbWV0aW1lcyBvbmx5IGNvcGllcyBvZiB0aGUgY29udGV4dCBh cmUgZXZlciBmaW5hbGlzZWQuCisgCSAqLworQEAgLTM4NSw3ICs0MjYsNiBAQCBpbnQgRVZQX01E X0NUWF9jbGVhbnVwKEVWUF9NRF9DVFggKmN0eCkKKyAJCU9QRU5TU0xfY2xlYW5zZShjdHgtPm1k X2RhdGEsY3R4LT5kaWdlc3QtPmN0eF9zaXplKTsKKyAJCU9QRU5TU0xfZnJlZShjdHgtPm1kX2Rh dGEpOworIAkJfQorLSNlbmRpZgorIAlpZiAoY3R4LT5wY3R4KQorIAkJRVZQX1BLRVlfQ1RYX2Zy ZWUoY3R4LT5wY3R4KTsKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCitAQCAtMzk0LDkgKzQz NCw2IEBAIGludCBFVlBfTURfQ1RYX2NsZWFudXAoRVZQX01EX0NUWCAqY3R4KQorIAkJICogZnVu Y3Rpb25hbCByZWZlcmVuY2Ugd2UgaGVsZCBmb3IgdGhpcyByZWFzb24uICovCisgCQlFTkdJTkVf ZmluaXNoKGN0eC0+ZW5naW5lKTsKKyAjZW5kaWYKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCUZJ UFNfbWRfY3R4X2NsZWFudXAoY3R4KTsKKy0jZW5kaWYKKyAJbWVtc2V0KGN0eCwnXDAnLHNpemVv ZiAqY3R4KTsKKyAKKyAJcmV0dXJuIDE7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2Ny eXB0by9ldnAvZV9hZXMuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9lX2Fl cy5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZwL2VfYWVzLmMuZmlwcwkyMDEx LTExLTE1IDEzOjE5OjU2LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMv Y3J5cHRvL2V2cC9lX2Flcy5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzg1Mjk0ODE5ICswMTAwCitA QCAtNTYsNyArNTYsNiBAQAorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8b3BlbnNz bC9hZXMuaD4KKyAjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKy0jaWZuZGVmIE9QRU5TU0xfRklQUwor ICNpbmNsdWRlICJtb2Rlc19sY2wuaCIKKyAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisgCitA QCAtNzE2LDcgKzcxNSw3IEBAIHN0YXRpYyBpbnQgYWVzX2djbV9jdHJsKEVWUF9DSVBIRVJfQ1RY ICoKKyAJCWlmIChhcmcgPD0gMCkKKyAJCQlyZXR1cm4gMDsKKyAjaWZkZWYgT1BFTlNTTF9GSVBT CistCQlpZiAoRklQU19tb2R1bGVfbW9kZSgpICYmICEoYy0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFH X05PTl9GSVBTX0FMTE9XKQorKwkJaWYgKEZJUFNfbW9kZSgpICYmICEoYy0+ZmxhZ3MgJiBFVlBf Q0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKQorIAkJCQkJCSAmJiBhcmcgPCAxMikKKyAJCQlyZXR1 cm4gMDsKKyAjZW5kaWYKK0BAIC0xMTI4LDcgKzExMjcsNyBAQCBzdGF0aWMgaW50IGFlc194dHNf Y2lwaGVyKEVWUF9DSVBIRVJfQ1RYCisgCQlyZXR1cm4gMDsKKyAjaWZkZWYgT1BFTlNTTF9GSVBT CisgCS8qIFJlcXVpcmVtZW50IG9mIFNQODAwLTM4RSAqLworLQlpZiAoRklQU19tb2R1bGVfbW9k ZSgpICYmICEoY3R4LT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpICYmCisr CWlmIChGSVBTX21vZGUoKSAmJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBT X0FMTE9XKSAmJgorIAkJCShsZW4gPiAoMVVMPDwyMCkqMTYpKQorIAkJeworIAkJRVZQZXJyKEVW UF9GX0FFU19YVFNfQ0lQSEVSLCBFVlBfUl9UT09fTEFSR0UpOworQEAgLTEzMTAsNCArMTMwOSwz IEBAIEJMT0NLX0NJUEhFUl9jdXN0b20oTklEX2FlcywxOTIsMSwxMixjY20KKyBCTE9DS19DSVBI RVJfY3VzdG9tKE5JRF9hZXMsMjU2LDEsMTIsY2NtLENDTSxFVlBfQ0lQSF9GTEFHX0ZJUFN8Q1VT VE9NX0ZMQUdTKQorIAorICNlbmRpZgorLSNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1i ZXRhMy9jcnlwdG8vZXZwL2VfZGVzMy5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8v ZXZwL2VfZGVzMy5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZwL2VfZGVzMy5j LmZpcHMJMjAxMS0wNS0yOSAwMTowMToyNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEu MC4xLWJldGEzL2NyeXB0by9ldnAvZV9kZXMzLmMJMjAxMi0wMi0yOSAxMDozMzowMi43ODUyOTQ4 MTkgKzAxMDAKK0BAIC02NSw4ICs2NSw2IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+Cisg I2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorIAorLSNpZm5kZWYgT1BFTlNTTF9GSVBTCistCisg c3RhdGljIGludCBkZXNfZWRlX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmtleSwKKyAJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsaW50IGVu Yyk7CisgCitAQCAtMjA4LDkgKzIwNiw5IEBAIHN0YXRpYyBpbnQgZGVzX2VkZTNfY2ZiOF9jaXBo ZXIoRVZQX0NJUEgKKyAgICAgfQorIAorIEJMT0NLX0NJUEhFUl9kZWZzKGRlc19lZGUsIERFU19F REVfS0VZLCBOSURfZGVzX2VkZSwgOCwgMTYsIDgsIDY0LAorLQkJCUVWUF9DSVBIX1JBTkRfS0VZ LCBkZXNfZWRlX2luaXRfa2V5LCBOVUxMLCAKKy0JCQlFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAor LQkJCUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisrCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQ SF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkJZGVzX2VkZV9pbml0 X2tleSwKKysJCQlOVUxMLCBOVUxMLCBOVUxMLAorIAkJCWRlczNfY3RybCkKKyAKKyAjZGVmaW5l IGRlc19lZGUzX2NmYjY0X2NpcGhlciBkZXNfZWRlX2NmYjY0X2NpcGhlcgorQEAgLTIxOSwyMSAr MjE3LDIxIEBAIEJMT0NLX0NJUEhFUl9kZWZzKGRlc19lZGUsIERFU19FREVfS0VZLAorICNkZWZp bmUgZGVzX2VkZTNfZWNiX2NpcGhlciBkZXNfZWRlX2VjYl9jaXBoZXIKKyAKKyBCTE9DS19DSVBI RVJfZGVmcyhkZXNfZWRlMywgREVTX0VERV9LRVksIE5JRF9kZXNfZWRlMywgOCwgMjQsIDgsIDY0 LAorLQkJCUVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0X2tleSwgTlVMTCwgCistCQkJ RVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKy0JCQlFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAorKwkJ RVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVM VF9BU04xLAorKwkJCWRlc19lZGUzX2luaXRfa2V5LAorKwkJCU5VTEwsIE5VTEwsIE5VTEwsCisg CQkJZGVzM19jdHJsKQorIAorIEJMT0NLX0NJUEhFUl9kZWZfY2ZiKGRlc19lZGUzLERFU19FREVf S0VZLE5JRF9kZXNfZWRlMywyNCw4LDEsCistCQkgICAgIEVWUF9DSVBIX1JBTkRfS0VZLCBkZXNf ZWRlM19pbml0X2tleSxOVUxMLAorLQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAorLQkJ ICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAorKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJ UEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAorKwkJICAgICBkZXNfZWRl M19pbml0X2tleSwKKysJCSAgICAgTlVMTCwgTlVMTCwgTlVMTCwKKyAJCSAgICAgZGVzM19jdHJs KQorIAorIEJMT0NLX0NJUEhFUl9kZWZfY2ZiKGRlc19lZGUzLERFU19FREVfS0VZLE5JRF9kZXNf ZWRlMywyNCw4LDgsCistCQkgICAgIEVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0X2tl eSxOVUxMLAorLQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAorLQkJICAgICBFVlBfQ0lQ SEVSX2dldF9hc24xX2l2LAorKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBT fEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAorKwkJICAgICBkZXNfZWRlM19pbml0X2tleSwK KysJCSAgICAgTlVMTCwgTlVMTCwgTlVMTCwKKyAJCSAgICAgZGVzM19jdHJsKQorIAorIHN0YXRp YyBpbnQgZGVzX2VkZV9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25l ZCBjaGFyICprZXksCitAQCAtMzEzLDQgKzMxMSwzIEBAIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9k ZXNfZWRlMyh2b2lkKQorIAlyZXR1cm4gJmRlc19lZGUzX2VjYjsKKyB9CisgI2VuZGlmCistI2Vu ZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvZV9udWxsLmMuZmlw cyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvZV9udWxsLmMKKy0tLSBvcGVuc3NsLTEu MC4xLWJldGEzL2NyeXB0by9ldnAvZV9udWxsLmMuZmlwcwkyMDExLTA2LTIwIDIyOjAwOjEwLjAw MDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9lX251bGwu YwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc4NTI5NDgxOSArMDEwMAorQEAgLTYxLDggKzYxLDYgQEAK KyAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+ CisgCistI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKy0KKyBzdGF0aWMgaW50IG51bGxfaW5pdF9rZXko RVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorIAljb25zdCB1 bnNpZ25lZCBjaGFyICppdixpbnQgZW5jKTsKKyBzdGF0aWMgaW50IG51bGxfY2lwaGVyKEVWUF9D SVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKK0BAIC03MSw3ICs2OSw3IEBAIHN0 YXRpYyBjb25zdCBFVlBfQ0lQSEVSIG5fY2lwaGVyPQorIAl7CisgCU5JRF91bmRlZiwKKyAJMSww LDAsCistCTAsCisrCUVWUF9DSVBIX0ZMQUdfRklQUywKKyAJbnVsbF9pbml0X2tleSwKKyAJbnVs bF9jaXBoZXIsCisgCU5VTEwsCitAQCAtMTAxLDQgKzk5LDMgQEAgc3RhdGljIGludCBudWxsX2Np cGhlcihFVlBfQ0lQSEVSX0NUWCAqYworIAkJbWVtY3B5KChjaGFyICopb3V0LChjb25zdCBjaGFy ICopaW4saW5sKTsKKyAJcmV0dXJuIDE7CisgCX0KKy0jZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9ldnBfZW5jLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEz L2NyeXB0by9ldnAvZXZwX2VuYy5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZw L2V2cF9lbmMuYy5maXBzCTIwMTItMDItMTAgMTc6NTQ6NTYuMDAwMDAwMDAwICswMTAwCisrKysg b3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZwL2V2cF9lbmMuYwkyMDEyLTAyLTI5IDEwOjMz OjAyLjc4NjI5NDgyNyArMDEwMAorQEAgLTY5LDE3ICs2OSw1OCBAQAorICNlbmRpZgorICNpbmNs dWRlICJldnBfbG9jbC5oIgorIAorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0jZGVmaW5lIE1fZG9f Y2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKSBGSVBTX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCkK Ky0jZWxzZQorICNkZWZpbmUgTV9kb19jaXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpIGN0eC0+Y2lw aGVyLT5kb19jaXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpCistI2VuZGlmCisgCisgCisgY29uc3Qg Y2hhciBFVlBfdmVyc2lvbltdPSJFVlAiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKKyAKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrCisrLyogVGhlIHB1cnBvc2Ugb2YgdGhlc2UgaXMgdG8gdHJhcCBw cm9ncmFtcyB0aGF0IGF0dGVtcHQgdG8gdXNlIG5vbiBGSVBTCisrICogYWxnb3JpdGhtcyBpbiBG SVBTIG1vZGUgYW5kIGlnbm9yZSB0aGUgZXJyb3JzLgorKyAqLworKworK3N0YXRpYyBpbnQgYmFk X2luaXQoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorKwkJ ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBpbnQgZW5jKQorKwl7IEZJUFNfRVJST1JfSUdO T1JFRCgiQ2lwaGVyIGluaXQiKTsgcmV0dXJuIDA7fQorKworK3N0YXRpYyBpbnQgYmFkX2RvX2Np cGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCisrCQkJIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQorKwl7IEZJUFNfRVJST1JfSUdO T1JFRCgiQ2lwaGVyIHVwZGF0ZSIpOyByZXR1cm4gMDt9CisrCisrLyogTkI6IG5vIGNsZWFudXAg YmVjYXVzZSBpdCBpcyBhbGxvd2VkIGFmdGVyIGZhaWxlZCBpbml0ICovCisrCisrc3RhdGljIGlu dCBiYWRfc2V0X2FzbjEoRVZQX0NJUEhFUl9DVFggKmN0eCwgQVNOMV9UWVBFICp0eXApCisrCXsg RklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgc2V0X2FzbjEiKTsgcmV0dXJuIDA7fQorK3N0YXRp YyBpbnQgYmFkX2dldF9hc24xKEVWUF9DSVBIRVJfQ1RYICpjdHgsIEFTTjFfVFlQRSAqdHlwKQor Kwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIGdldF9hc24xIik7IHJldHVybiAwO30KKytz dGF0aWMgaW50IGJhZF9jdHJsKEVWUF9DSVBIRVJfQ1RYICpjdHgsIGludCB0eXBlLCBpbnQgYXJn LCB2b2lkICpwdHIpCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgY3RybCIpOyByZXR1 cm4gMDt9CisrCisrc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgYmFkX2NpcGhlciA9CisrCXsKKysJ MCwKKysJMCwKKysJMCwKKysJMCwKKysJMCwKKysJYmFkX2luaXQsCisrCWJhZF9kb19jaXBoZXIs CisrCU5VTEwsCisrCTAsCisrCWJhZF9zZXRfYXNuMSwKKysJYmFkX2dldF9hc24xLAorKwliYWRf Y3RybCwKKysJTlVMTAorKwl9OworKworKyNlbmRpZgorKworIHZvaWQgRVZQX0NJUEhFUl9DVFhf aW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4KQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlG SVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCW1lbXNldChjdHgsMCxzaXplb2YoRVZQ X0NJUEhFUl9DVFgpKTsKKyAJLyogY3R4LT5jaXBoZXI9TlVMTDsgKi8KKyAJfQorQEAgLTExMSw2 ICsxNTIsMTQgQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpjdAorIAkJ CWVuYyA9IDE7CisgCQljdHgtPmVuY3J5cHQgPSBlbmM7CisgCQl9CisrI2lmZGVmIE9QRU5TU0xf RklQUworKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJeworKwkJRklQU2VycihGSVBT X0ZfRVZQX0NJUEhFUklOSVRfRVgsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCWN0 eC0+Y2lwaGVyID0gJmJhZF9jaXBoZXI7CisrCQlyZXR1cm4gMDsKKysJCX0KKysjZW5kaWYKKyAj aWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisgCS8qIFdoZXRoZXIgaXQncyBuaWNlIG9yIG5vdCwg IkluaXRzIiBjYW4gYmUgdXNlZCBvbiAiRmluYWwiJ2QgY29udGV4dHMKKyAJICogc28gdGhpcyBj b250ZXh0IG1heSBhbHJlYWR5IGhhdmUgYW4gRU5HSU5FISBUcnkgdG8gYXZvaWQgcmVsZWFzaW5n CitAQCAtMTY5LDkgKzIxOCw2IEBAIGludCBFVlBfQ2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NU WCAqY3QKKyAJCQljdHgtPmVuZ2luZSA9IE5VTEw7CisgI2VuZGlmCisgCistI2lmZGVmIE9QRU5T U0xfRklQUworLQkJcmV0dXJuIEZJUFNfY2lwaGVyaW5pdChjdHgsIGNpcGhlciwga2V5LCBpdiwg ZW5jKTsKKy0jZWxzZQorIAkJY3R4LT5jaXBoZXI9Y2lwaGVyOworIAkJaWYgKGN0eC0+Y2lwaGVy LT5jdHhfc2l6ZSkKKyAJCQl7CitAQCAtMTk2LDcgKzI0Miw2IEBAIGludCBFVlBfQ2lwaGVySW5p dF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKKyAJCQkJcmV0dXJuIDA7CisgCQkJCX0KKyAJCQl9Cist I2VuZGlmCisgCQl9CisgCWVsc2UgaWYoIWN0eC0+Y2lwaGVyKQorIAkJeworQEAgLTIwNiw5ICsy NTEsNiBAQCBpbnQgRVZQX0NpcGhlckluaXRfZXgoRVZQX0NJUEhFUl9DVFggKmN0CisgI2lmbmRl ZiBPUEVOU1NMX05PX0VOR0lORQorIHNraXBfdG9faW5pdDoKKyAjZW5kaWYKKy0jaWZkZWYgT1BF TlNTTF9GSVBTCistCXJldHVybiBGSVBTX2NpcGhlcmluaXQoY3R4LCBjaXBoZXIsIGtleSwgaXYs IGVuYyk7CistI2Vsc2UKKyAJLyogd2UgYXNzdW1lIGJsb2NrIHNpemUgaXMgYSBwb3dlciBvZiAy IGluICpjcnlwdFVwZGF0ZSAqLworIAlPUEVOU1NMX2Fzc2VydChjdHgtPmNpcGhlci0+YmxvY2tf c2l6ZSA9PSAxCisgCSAgICB8fCBjdHgtPmNpcGhlci0+YmxvY2tfc2l6ZSA9PSA4CitAQCAtMjQ4 LDYgKzI5MCwyMiBAQCBza2lwX3RvX2luaXQ6CisgCQl9CisgCX0KKyAKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrCS8qIEFmdGVyICdrZXknIGlzIHNldCBubyBmdXJ0aGVyIHBhcmFtZXRlcnMgY2hh bmdlcyBhcmUgcGVybWlzc2libGUuCisrCSAqIFNvIG9ubHkgY2hlY2sgZm9yIG5vbiBGSVBTIGVu YWJsaW5nIGF0IHRoaXMgcG9pbnQuCisrCSAqLworKwlpZiAoa2V5ICYmIEZJUFNfbW9kZSgpKQor KwkJeworKwkJaWYgKCEoY3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfRkxBR19GSVBTKQor KwkJCSYgIShjdHgtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykpCisrCQkJ eworKwkJCUVWUGVycihFVlBfRl9FVlBfQ0lQSEVSSU5JVF9FWCwgRVZQX1JfRElTQUJMRURfRk9S X0ZJUFMpOworKwkJCWN0eC0+Y2lwaGVyID0gJmJhZF9jaXBoZXI7CisrCQkJcmV0dXJuIDA7Cisr CQkJfQorKwkJfQorKyNlbmRpZgorKworIAlpZihrZXkgfHwgKGN0eC0+Y2lwaGVyLT5mbGFncyAm IEVWUF9DSVBIX0FMV0FZU19DQUxMX0lOSVQpKSB7CisgCQlpZighY3R4LT5jaXBoZXItPmluaXQo Y3R4LGtleSxpdixlbmMpKSByZXR1cm4gMDsKKyAJfQorQEAgLTI1NSw3ICszMTMsNiBAQCBza2lw X3RvX2luaXQ6CisgCWN0eC0+ZmluYWxfdXNlZD0wOworIAljdHgtPmJsb2NrX21hc2s9Y3R4LT5j aXBoZXItPmJsb2NrX3NpemUtMTsKKyAJcmV0dXJuIDE7CistI2VuZGlmCisgCX0KKyAKKyBpbnQg RVZQX0NpcGhlclVwZGF0ZShFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQs IGludCAqb3V0bCwKK0BAIC01NjgsNyArNjI1LDYgQEAgdm9pZCBFVlBfQ0lQSEVSX0NUWF9mcmVl KEVWUF9DSVBIRVJfQ1RYCisgCisgaW50IEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoRVZQX0NJUEhF Ul9DVFggKmMpCisgCXsKKy0jaWZuZGVmIE9QRU5TU0xfRklQUworIAlpZiAoYy0+Y2lwaGVyICE9 IE5VTEwpCisgCQl7CisgCQlpZihjLT5jaXBoZXItPmNsZWFudXAgJiYgIWMtPmNpcGhlci0+Y2xl YW51cChjKSkKK0BAIC01NzksMTYgKzYzNSwxMiBAQCBpbnQgRVZQX0NJUEhFUl9DVFhfY2xlYW51 cChFVlBfQ0lQSEVSX0NUCisgCQl9CisgCWlmIChjLT5jaXBoZXJfZGF0YSkKKyAJCU9QRU5TU0xf ZnJlZShjLT5jaXBoZXJfZGF0YSk7CistI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lO RQorIAlpZiAoYy0+ZW5naW5lKQorIAkJLyogVGhlIEVWUF9DSVBIRVIgd2UgdXNlZCBiZWxvbmdz IHRvIGFuIEVOR0lORSwgcmVsZWFzZSB0aGUKKyAJCSAqIGZ1bmN0aW9uYWwgcmVmZXJlbmNlIHdl IGhlbGQgZm9yIHRoaXMgcmVhc29uLiAqLworIAkJRU5HSU5FX2ZpbmlzaChjLT5lbmdpbmUpOwor ICNlbmRpZgorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JRklQU19jaXBoZXJfY3R4X2NsZWFudXAo Yyk7CistI2VuZGlmCisgCW1lbXNldChjLDAsc2l6ZW9mKEVWUF9DSVBIRVJfQ1RYKSk7CisgCXJl dHVybiAxOworIAl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvZXZw LmguZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvZXZwLmgKKy0tLSBvcGVuc3Ns LTEuMC4xLWJldGEzL2NyeXB0by9ldnAvZXZwLmguZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAyLjU2 NzI5Mjk0NCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9ldnAuaAky MDEyLTAyLTI5IDEwOjMzOjAyLjc4NzI5NDgzNSArMDEwMAorQEAgLTc1LDYgKzc1LDEwIEBACisg I2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisgI2VuZGlmCisgCisrI2lmZGVmIE9QRU5TU0xfRklQ UworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAvKgorICNkZWZpbmUg RVZQX1JDMl9LRVlfU0laRQkJMTYKKyAjZGVmaW5lIEVWUF9SQzRfS0VZX1NJWkUJCTE2CitAQCAt MjcyLDEwICsyNzYsNiBAQCBzdHJ1Y3QgZW52X21kX2N0eF9zdAorIAkJCQkJCSogY2xlYW5lZCAq LworICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1JFVVNFCQkweDAwMDQgLyogRG9uJ3QgZnJlZSB1 cCBjdHgtPm1kX2RhdGEKKyAJCQkJCQkqIGluIEVWUF9NRF9DVFhfY2xlYW51cCAqLworLS8qIEZJ UFMgYW5kIHBhZCBvcHRpb25zIGFyZSBpZ25vcmVkIGluIDEuMC4wLCBkZWZpbml0aW9ucyBhcmUg aGVyZQorLSAqIHNvIHdlIGRvbid0IGFjY2lkZW50YWxseSByZXVzZSB0aGUgdmFsdWVzIGZvciBv dGhlciBwdXJwb3Nlcy4KKy0gKi8KKy0KKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19OT05fRklQ U19BTExPVwkweDAwMDgJLyogQWxsb3cgdXNlIG9mIG5vbiBGSVBTIGRpZ2VzdAorIAkJCQkJCSAq IGluIEZJUFMgbW9kZSAqLworIAorQEAgLTI4Nyw2ICsyODcsMTAgQEAgc3RydWN0IGVudl9tZF9j dHhfc3QKKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEJMHgwMAkvKiBQS0NTIzEg djEuNSBtb2RlICovCisgI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEJMHgxMAkvKiBY OS4zMSBtb2RlICovCisgI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUwkJMHgyMAkvKiBQ U1MgbW9kZSAqLworKyNkZWZpbmUgTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NBTFQoY3R4KSBcCisr CQkoKGN0eC0+ZmxhZ3M+PjE2KSAmMHhGRkZGKSAvKiBzZWVkIGxlbmd0aCAqLworKyNkZWZpbmUg RVZQX01EX0NUWF9GTEFHX1BTU19NRExFTgkweEZGRkYJLyogc2FsdCBsZW4gc2FtZSBhcyBkaWdl c3QgKi8KKysjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQwkweEZGRkUJLyogc2FsdCBt YXggb3IgYXV0byByZWNvdmVyZWQgKi8KKyAKKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19OT19J TklUCQkweDAxMDAgLyogRG9uJ3QgaW5pdGlhbGl6ZSBtZF9kYXRhICovCisgCitAQCAtMzM4LDE1 ICszNDIsMTUgQEAgc3RydWN0IGV2cF9jaXBoZXJfc3QKKyAvKiBjaXBoZXIgaGFuZGxlcyByYW5k b20ga2V5IGdlbmVyYXRpb24gKi8KKyAjZGVmaW5lIAlFVlBfQ0lQSF9SQU5EX0tFWQkJMHgyMDAK KyAvKiBjaXBoZXIgaGFzIGl0cyBvd24gYWRkaXRpb25hbCBjb3B5aW5nIGxvZ2ljICovCistI2Rl ZmluZSAJRVZQX0NJUEhfQ1VTVE9NX0NPUFkJCTB4NDAwCisrI2RlZmluZSAJRVZQX0NJUEhfQ1VT VE9NX0NPUFkJCTB4NDAwMAorIC8qIEFsbG93IHVzZSBkZWZhdWx0IEFTTjEgZ2V0L3NldCBpdiAq LworICNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xCTB4MTAwMAorIC8qIEJ1ZmZl ciBsZW5ndGggaW4gYml0cyBub3QgYnl0ZXM6IENGQjEgbW9kZSBvbmx5ICovCisgI2RlZmluZQkJ RVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUwkweDIwMDAKKyAvKiBOb3RlIGlmIHN1aXRhYmxlIGZv ciB1c2UgaW4gRklQUyBtb2RlICovCistI2RlZmluZQkJRVZQX0NJUEhfRkxBR19GSVBTCQkweDQw MDAKKysjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0ZJUFMJCTB4NDAwCisgLyogQWxsb3cgbm9uIEZJ UFMgY2lwaGVyIGluIEZJUFMgbW9kZSAqLworLSNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfTk9OX0ZJ UFNfQUxMT1cJMHg4MDAwCisrI2RlZmluZQkJRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVwkw eDgwMAorIC8qIENpcGhlciBoYW5kbGVzIGFueSBhbmQgYWxsIHBhZGRpbmcgbG9naWMgYXMgd2Vs bAorICAqIGFzIGZpbmFsaXNhdGlvbi4KKyAgKi8KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0 YTMvY3J5cHRvL2V2cC9ldnBfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9l dnAvZXZwX2xpYi5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZwL2V2cF9saWIu Yy5maXBzCTIwMTEtMDUtMjkgMDQ6MzI6MDUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0x LjAuMS1iZXRhMy9jcnlwdG8vZXZwL2V2cF9saWIuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc4NzI5 NDgzNSArMDEwMAorQEAgLTE5MCw2ICsxOTAsOSBAQCBpbnQgRVZQX0NJUEhFUl9DVFhfYmxvY2tf c2l6ZShjb25zdCBFVlBfCisgCisgaW50IEVWUF9DaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwg dW5zaWduZWQgY2hhciAqb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50 IGlubCkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygp OworKyNlbmRpZgorIAlyZXR1cm4gY3R4LT5jaXBoZXItPmRvX2NpcGhlcihjdHgsb3V0LGluLGlu bCk7CisgCX0KKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9ldnBf bG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZwL2V2cF9sb2NsLmgKKy0t LSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvZXZwX2xvY2wuaC5maXBzCTIwMTItMDIt MjkgMTA6MzM6MDIuNTU4MjkyODY3ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlw dG8vZXZwL2V2cF9sb2NsLmgJMjAxMi0wMi0yOSAxMDozMzowMi43ODcyOTQ4MzUgKzAxMDAKK0BA IC0yNTgsMTAgKzI1OCw5IEBAIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF8jI2NuYW1lIyNfZWNiKHZv aWQKKyAJQkxPQ0tfQ0lQSEVSX2Z1bmNfY2ZiKGNpcGhlciMjXyMja2V5c2l6ZSxjcHJlZml4LGNi aXRzLGtzdHJ1Y3Qsa3NjaGVkKSBcCisgCUJMT0NLX0NJUEhFUl9kZWZfY2ZiKGNpcGhlciMjXyMj a2V5c2l6ZSxrc3RydWN0LCBcCisgCQkJICAgICBOSURfIyNjaXBoZXIjI18jI2tleXNpemUsIGtl eXNpemUvOCwgaXZfbGVuLCBjYml0cywgXAorLQkJCSAgICAgMCwgY2lwaGVyIyNfaW5pdF9rZXks IE5VTEwsIFwKKy0JCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsIFwKKy0JCQkgICAgIEVW UF9DSVBIRVJfZ2V0X2FzbjFfaXYsIFwKKy0JCQkgICAgIE5VTEwpCisrCQkJICAgICBFVlBfQ0lQ SF9GTEFHX0RFRkFVTFRfQVNOMSwgXAorKwkJCSAgICAgY2lwaGVyIyNfaW5pdF9rZXksIE5VTEws IE5VTEwsIE5VTEwsIE5VTEwpCisrCisgCisgc3RydWN0IGV2cF9wa2V5X2N0eF9zdAorIAl7CitA QCAtMzY3LDExICszNjYsNiBAQCBpbnQgUEtDUzVfdjJfUEJLREYyX2tleWl2Z2VuKEVWUF9DSVBI RVJfCisgI2RlZmluZSBNRDJfSW5pdAlwcml2YXRlX01EMl9Jbml0CisgI2RlZmluZSBNREMyX0lu aXQJcHJpdmF0ZV9NREMyX0luaXQKKyAjZGVmaW5lIFNIQV9Jbml0CXByaXZhdGVfU0hBX0luaXQK Ky0jZGVmaW5lIFNIQTFfSW5pdAlwcml2YXRlX1NIQTFfSW5pdAorLSNkZWZpbmUgU0hBMjI0X0lu aXQJcHJpdmF0ZV9TSEEyMjRfSW5pdAorLSNkZWZpbmUgU0hBMjU2X0luaXQJcHJpdmF0ZV9TSEEy NTZfSW5pdAorLSNkZWZpbmUgU0hBMzg0X0luaXQJcHJpdmF0ZV9TSEEzODRfSW5pdAorLSNkZWZp bmUgU0hBNTEyX0luaXQJcHJpdmF0ZV9TSEE1MTJfSW5pdAorIAorICNkZWZpbmUgQkZfc2V0X2tl eQlwcml2YXRlX0JGX3NldF9rZXkKKyAjZGVmaW5lIENBU1Rfc2V0X2tleQlwcml2YXRlX0NBU1Rf c2V0X2tleQorQEAgLTM3OSw3ICszNzMsNiBAQCBpbnQgUEtDUzVfdjJfUEJLREYyX2tleWl2Z2Vu KEVWUF9DSVBIRVJfCisgI2RlZmluZSBTRUVEX3NldF9rZXkJcHJpdmF0ZV9TRUVEX3NldF9rZXkK KyAjZGVmaW5lIFJDMl9zZXRfa2V5CXByaXZhdGVfUkMyX3NldF9rZXkKKyAjZGVmaW5lIFJDNF9z ZXRfa2V5CXByaXZhdGVfUkM0X3NldF9rZXkKKy0jZGVmaW5lIERFU19zZXRfa2V5X3VuY2hlY2tl ZAlwcml2YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tlZAorICNkZWZpbmUgQ2FtZWxsaWFfc2V0X2tl eQlwcml2YXRlX0NhbWVsbGlhX3NldF9rZXkKKyAKKyAjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMv Y3J5cHRvL2V2cC9NYWtlZmlsZQorLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9N YWtlZmlsZS5maXBzCTIwMTEtMTItMjcgMTU6Mzg6MjcuMDAwMDAwMDAwICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZwL01ha2VmaWxlCTIwMTItMDItMjkgMTA6MzM6MDIu Nzg4Mjk0ODQ0ICswMTAwCitAQCAtMjgsNyArMjgsNyBAQCBMSUJTUkM9IGVuY29kZS5jIGRpZ2Vz dC5jIGV2cF9lbmMuYyBldnBfCisgCWJpb19tZC5jIGJpb19iNjQuYyBiaW9fZW5jLmMgZXZwX2Vy ci5jIGVfbnVsbC5jIFwKKyAJY19hbGwuYyBjX2FsbGMuYyBjX2FsbGQuYyBldnBfbGliLmMgYmlv X29rLmMgXAorIAlldnBfcGtleS5jIGV2cF9wYmUuYyBwNV9jcnB0LmMgcDVfY3JwdDIuYyBcCist CWVfb2xkLmMgcG1ldGhfbGliLmMgcG1ldGhfZm4uYyBwbWV0aF9nbi5jIG1fc2lndmVyLmMgZXZw X2ZpcHMuYwlcCisrCWVfb2xkLmMgcG1ldGhfbGliLmMgcG1ldGhfZm4uYyBwbWV0aF9nbi5jIG1f c2lndmVyLmMgXAorIAllX2Flc19jYmNfaG1hY19zaGExLmMgZV9yYzRfaG1hY19tZDUuYworIAor IExJQk9CSj0JZW5jb2RlLm8gZGlnZXN0Lm8gZXZwX2VuYy5vIGV2cF9rZXkubyBldnBfYWNuZi5v IFwKK0BAIC00MSw3ICs0MSw3IEBAIExJQk9CSj0JZW5jb2RlLm8gZGlnZXN0Lm8gZXZwX2VuYy5v IGV2cF8KKyAJYmlvX21kLm8gYmlvX2I2NC5vIGJpb19lbmMubyBldnBfZXJyLm8gZV9udWxsLm8g XAorIAljX2FsbC5vIGNfYWxsYy5vIGNfYWxsZC5vIGV2cF9saWIubyBiaW9fb2subyBcCisgCWV2 cF9wa2V5Lm8gZXZwX3BiZS5vIHA1X2NycHQubyBwNV9jcnB0Mi5vIFwKKy0JZV9vbGQubyBwbWV0 aF9saWIubyBwbWV0aF9mbi5vIHBtZXRoX2duLm8gbV9zaWd2ZXIubyBldnBfZmlwcy5vIFwKKysJ ZV9vbGQubyBwbWV0aF9saWIubyBwbWV0aF9mbi5vIHBtZXRoX2duLm8gbV9zaWd2ZXIubyBcCisg CWVfYWVzX2NiY19obWFjX3NoYTEubyBlX3JjNF9obWFjX21kNS5vCisgCisgU1JDPSAkKExJQlNS QykKK0BAIC0xMDMsNDQgKzEwMyw0NiBAQCBiaW9fYjY0Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9p bmNsdWRlL29wCisgYmlvX2I2NC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCisgYmlvX2I2NC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKyBiaW9fYjY0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKy1i aW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmpfbWFjLmgKKy1iaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3Rz LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKy1iaW9fYjY0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5 cC5oCistYmlvX2I2NC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKy1iaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggYmlvX2I2NC5jCisrYmlvX2I2NC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrYmlv X2I2NC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmplY3RzLmgKKytiaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns Y29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrYmlvX2I2NC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0 YWNrLmgKKytiaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCisrYmlvX2I2NC5vOiAuLi9jcnlwdGxpYi5oIGJpb19i NjQuYworIGJpb19lbmMubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24x LmgKKyBiaW9fZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYnVmZmVyLmgKKyBiaW9fZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlw dG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorIGJpb19lbmMubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorLWJpb19lbmMu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i al9tYWMuaAorLWJpb19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorLWJpb19lbmMubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKy1i aW9fZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc3RhY2suaAorLWJpb19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhh Y2tzLmggLi4vY3J5cHRsaWIuaCBiaW9fZW5jLmMKKytiaW9fZW5jLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytiaW9fZW5jLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaAorK2Jpb19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytiaW9fZW5jLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAor K2Jpb19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3N5bWhhY2tzLmgKKytiaW9fZW5jLm86IC4uL2NyeXB0bGliLmggYmlvX2VuYy5jCisg YmlvX21kLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorIGJpb19tZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisgYmlvX21kLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorLWJp b19tZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2xoYXNoLmgKKy1iaW9fbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCistYmlvX21kLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCistYmlv X21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zYWZlc3RhY2suaAorLWJpb19tZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2su aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorLWJpb19tZC5vOiAuLi9jcnlwdGxp Yi5oIGJpb19tZC5jCisrYmlvX21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrYmlvX21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytiaW9fbWQubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bGNvbmYuaAorK2Jpb19tZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2Jpb19tZC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytiaW9fbWQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBiaW9fbWQu YworIGJpb19vay5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKyBiaW9fb2subzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorIGJpb19vay5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgK Ky1iaW9fb2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9saGFzaC5oCistYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorLWJpb19vay5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAor LWJpb19vay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvcmFuZC5oCistYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3Rh Y2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorLWJpb19vay5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGJpb19vay5jCisrYmlvX29rLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5o CisrYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmpfbWFjLmgKKytiaW9fb2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVj dHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2Jpb19vay5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90 eXAuaAorK2Jpb19vay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2Jpb19vay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorK2Jpb19vay5vOiAuLi9j cnlwdGxpYi5oIGJpb19vay5jCisgY19hbGwubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgY19hbGwubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8u aAorLWNfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lYy5oCistY19hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAorLWNfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lbmdpbmUuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKy1jX2FsbC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytjX2Fs bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZW5naW5lLmgKKytjX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2V2cC5oCisrY19hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorIGNfYWxsLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorIGNfYWxs Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3Nsdi5oCisgY19hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlw LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKK0BAIC0xNTAsOSArMTUyLDggQEAgY19h bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLgorIGNfYWxsLm86IC4uL2NyeXB0 bGliLmggY19hbGwuYworIGNfYWxsYy5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKyBjX2FsbGMubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAor LWNfYWxsYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZWMuaAorLWNfYWxsYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCistY19hbGxjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytjX2FsbGMubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrY19hbGxj Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlw cy5oCisgY19hbGxjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKyBjX2FsbGMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorIGNfYWxsYy5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Nz bF90eXAuaAorQEAgLTE2Myw5ICsxNjQsOCBAQCBjX2FsbGMubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3g1MDkuaCAuCisgY19hbGxjLm86IC4uL2NyeXB0bGliLmggY19hbGxjLmMKKyBjX2FsbGQu bzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Jpby5oCisgY19hbGxkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKy1jX2FsbGQubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKKy1jX2FsbGQubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2Eu aAorLWNfYWxsZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2V2cC5oCisrY19hbGxkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2NfYWxsZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorIGNfYWxsZC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisg Y19hbGxkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2xjb25mLmgKKyBjX2FsbGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKK0BAIC0xNzYsMTAgKzE3 Niw5IEBAIGNfYWxsZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4KKyBjX2FsbGQu bzogLi4vY3J5cHRsaWIuaCBjX2FsbGQuYworIGRpZ2VzdC5vOiAuLi8uLi9lX29zLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKyBkaWdl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9jcnlwdG8uaAorLWRpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZWMuaAorLWRpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCistZGlnZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lbmdpbmUuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKy1kaWdl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9s aGFzaC5oCisrZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAorK2RpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrZGlnZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKyBkaWdlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqZWN0cy5oCisgZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisgZGlnZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCitAQCAt MTkwLDE4ICsxODksMTkgQEAgZGlnZXN0Lm86IC4uL2NyeXB0bGliLmggZGlnZXN0LmMKKyBlX2Fl cy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Fz bjEuaAorIGVfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvY3J5cHRvLmgKKyBlX2Flcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKy1lX2Flcy5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKy1lX2Flcy5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvbW9kZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5o CistZV9hZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbGNvbmYuaAorLWVfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCistZV9hZXMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNr LmgKKy1lX2Flcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc3ltaGFja3MuaAorLWVfYWVzLm86IC4uL21vZGVzL21vZGVzX2xjbC5oIGVfYWVz LmMgZXZwX2xvY2wuaAorK2VfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZV9hZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL21vZGVzLmgKKytlX2Flcy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgK KytlX2Flcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2VfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v c3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKKytlX2Flcy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgK KytlX2Flcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9tb2Rlcy9tb2Rl c19sY2wuaCBlX2Flcy5jCisrZV9hZXMubzogZXZwX2xvY2wuaAorIGVfYWVzX2NiY19obWFjX3No YTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h c24xLmgKKyBlX2Flc19jYmNfaG1hY19zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8u aAorIGVfYWVzX2NiY19obWFjX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5o CisgZV9hZXNfY2JjX2htYWNfc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAor LWVfYWVzX2NiY19obWFjX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrZV9h ZXNfY2JjX2htYWNfc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2ZpcHMuaAorIGVfYWVzX2NiY19obWFjX3NoYTEubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29ial9tYWMuaAorIGVfYWVzX2NiY19obWFjX3NoYTEubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29iamVjdHMuaAorIGVfYWVzX2NiY19obWFjX3NoYTEubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKK0BAIC0yMTEsMjAgKzIxMSwyMyBAQCBlX2Flc19jYmNf aG1hY19zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlCisgZV9hZXNfY2JjX2htYWNfc2hhMS5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKKyBlX2Flc19jYmNfaG1hY19zaGExLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisgZV9hZXNfY2JjX2htYWNfc2hhMS5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBlX2Flc19jYmNfaG1hY19zaGExLmMKKytlX2Flc19j YmNfaG1hY19zaGExLm86IGV2cF9sb2NsLmgKKyBlX2JmLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorIGVfYmYu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jsb3dmaXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2J1ZmZlci5oCisgZV9iZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKyBlX2JmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l cnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKy1lX2JmLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKy1lX2JmLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2xjb25mLmgKKy1lX2JmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCistZV9iZi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKy1lX2JmLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggZV9iZi5jIGV2 cF9sb2NsLmgKKytlX2JmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2xoYXNoLmgKKytlX2JmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpf bWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2VfYmYubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2 LmgKKytlX2JmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2VfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0 YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKKytlX2JmLm86IC4uL2NyeXB0 bGliLmggZV9iZi5jIGV2cF9sb2NsLmgKKyBlX2NhbWVsbGlhLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgZV9jYW1lbGxpYS5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvY2FtZWxsaWEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5 cHRvLmgKKyBlX2NhbWVsbGlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorLWVfY2FtZWxsaWEubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCistZV9jYW1lbGxpYS5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpl Y3RzLmgKKytlX2NhbWVsbGlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZV9jYW1lbGxpYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZV9jYW1lbGxpYS5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisgZV9jYW1lbGxpYS5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorIGVfY2FtZWxsaWEubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKyBl X2NhbWVsbGlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3RhY2suaAorQEAgLTIzMyw3NCArMjM2LDgwIEBAIGVfY2FzdC5vOiAuLi8u Li9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGUKKyBlX2Nhc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jYXN0LmgKKyBlX2Nhc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5o CisgZV9jYXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXZwLmgKKy1lX2Nhc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorLWVfY2FzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCistZV9j YXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vc3NsX3R5cC5oCistZV9jYXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3Rh Y2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorLWVfY2FzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGVfY2FzdC5jIGV2cF9sb2NsLmgK KytlX2Nhc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvbGhhc2guaAorK2VfY2FzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytlX2Nhc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgK KytlX2Nhc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZV9jYXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z dGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCisrZV9jYXN0Lm86IC4uL2Ny eXB0bGliLmggZV9jYXN0LmMgZXZwX2xvY2wuaAorIGVfZGVzLm86IC4uLy4uL2Vfb3MuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorIGVf ZGVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvY3J5cHRvLmgKKyBlX2Rlcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Rlc19vbGQuaAorIGVfZGVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorLWVfZGVzLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorLWVfZGVz Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29iamVjdHMuaAorLWVfZGVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCistZV9kZXMubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorLWVfZGVz Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc3RhY2suaAorLWVfZGVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC91aS5oCistZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3VpX2NvbXBhdC5oIC4uL2NyeXB0bGliLmggZV9kZXMuYyBldnBfbG9jbC5oCisrZV9kZXMubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgK KytlX2Rlcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqX21hYy5oCisrZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2VfZGVzLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5o CisrZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc2FmZXN0YWNrLmgKKytlX2Rlcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2su aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorK2VfZGVzLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC91aS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aV9jb21wYXQuaAorK2VfZGVz Lm86IC4uL2NyeXB0bGliLmggZV9kZXMuYyBldnBfbG9jbC5oCisgZV9kZXMzLm86IC4uLy4uL2Vf b3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9i aW8uaAorIGVfZGVzMy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2NyeXB0by5oCisgZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9k ZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzX29sZC5oCisgZV9kZXMzLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorLWVfZGVz My5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xo YXNoLmgKKy1lX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCistZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCistZV9kZXMz Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9yYW5kLmgKKy1lX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCistZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aS5oCistZV9kZXMzLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC91aV9jb21wYXQuaCAuLi9jcnlwdGxpYi5oIGVfZGVzMy5jIGV2 cF9sb2NsLmgKKytlX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzLmgKKytlX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xo YXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2VfZGVzMy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29u Zi5oCisrZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZV9kZXMzLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNr cy5oCisrZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aS5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC91aV9jb21wYXQuaAorK2VfZGVzMy5vOiAuLi9jcnlwdGxpYi5oIGVfZGVzMy5jIGV2 cF9sb2NsLmgKKyBlX2lkZWEubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h c24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgZV9pZGVhLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKyBlX2lk ZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vyci5oCistZV9pZGVhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvaWRlYS5oCistZV9pZGVhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFz aC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKy1lX2lkZWEubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYu aAorLWVfaWRlYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3NzbF90eXAuaAorLWVfaWRlYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKy1lX2lkZWEubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBlX2lkZWEuYyBldnBf bG9jbC5oCisrZV9pZGVhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZmlwcy5oCisrZV9pZGVhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9pZGVh LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytlX2lkZWEubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZV9p ZGVhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3Nsdi5oCisrZV9pZGVhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3Ns X3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2VfaWRlYS5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3Mu aAorK2VfaWRlYS5vOiAuLi9jcnlwdGxpYi5oIGVfaWRlYS5jIGV2cF9sb2NsLmgKKyBlX251bGwu bzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Jpby5oCisgZV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKyBlX251bGwubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCistZV9udWxsLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2gu aAorLWVfbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmplY3RzLmgKKy1lX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKy1lX251bGwubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Nh ZmVzdGFjay5oCistZV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCistZV9udWxsLm86IC4uL2NyeXB0bGliLmggZV9u dWxsLmMKKytlX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9maXBzLmgKKytlX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNo LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2VfbnVsbC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5o CisrZV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z YWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2VfbnVsbC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGVfbnVsbC5jCisgZV9v bGQubzogZV9vbGQuYworIGVfcmMyLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorIGVfcmMyLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKyBl X3JjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXJyLmgKKy1lX3JjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2xoYXNoLmgKKy1lX3JjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq X21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKy1lX3JjMi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bHYuaAorLWVfcmMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9yYzIuaAorLWVfcmMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZl c3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorLWVfcmMyLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggZV9yYzIuYyBldnBfbG9jbC5o CisrZV9yYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9maXBzLmgKKytlX3JjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZV9yYzIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2VfcmMy Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vc3NsX3R5cC5oCisrZV9yYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JjMi5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2VfcmMyLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCisrZV9yYzIubzog Li4vY3J5cHRsaWIuaCBlX3JjMi5jIGV2cF9sb2NsLmgKKyBlX3JjNC5vOiAuLi8uLi9lX29zLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgK KyBlX3JjNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2NyeXB0by5oCisgZV9yYzQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCistZV9yYzQubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCistZV9yYzQubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5o CistZV9yYzQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKy1lX3JjNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmM0LmgKKy1lX3JjNC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgK Ky1lX3JjNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5o IGVfcmM0LmMgZXZwX2xvY2wuaAorK2VfcmM0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZV9yYzQubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2VfcmM0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2xjb25mLmgKKytlX3JjNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2VfcmM0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9yYzQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytlX3JjNC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3lt aGFja3MuaAorK2VfcmM0Lm86IC4uL2NyeXB0bGliLmggZV9yYzQuYyBldnBfbG9jbC5oCisgZV9y YzRfaG1hY19tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYmlvLmgKKyBlX3JjNF9obWFjX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Y3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKy1lX3JjNF9obWFjX21kNS5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL21kNS5o CistZV9yYzRfaG1hY19tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2Vf cmM0X2htYWNfbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZmlwcy5oCisrZV9yYzRfaG1hY19tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L21kNS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKyBlX3JjNF9obWFjX21kNS5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisgZV9yYzRfaG1hY19tZDUubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKyBlX3JjNF9obWFjX21kNS5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorQEAgLTMwOCwyOSArMzE3LDI0IEBAIGVfcmM0 X2htYWNfbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC8KKyBlX3JjNF9obWFjX21kNS5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKyBlX3JjNF9obWFjX21kNS5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorIGVfcmM0X2htYWNfbWQ1Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGVfcmM0X2htYWNfbWQ1LmMKKy1lX3JjNS5vOiAuLi8uLi9l X29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCistZV9yYzUubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorLWVfcmM1 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l cnIuaAorLWVfcmM1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCistZV9yYzUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKy1lX3JjNS5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0 YWNrLmgKKy1lX3JjNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlw dGxpYi5oIGVfcmM1LmMKKytlX3JjNS5vOiBlX3JjNS5jCisgZV9zZWVkLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgZV9zZWVkLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9v czIuaAorIGVfc2VlZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2V2cC5oCistZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKy1lX3NlZWQubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAor LWVfc2VlZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3NzbF90eXAuaAorLWVfc2VlZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2Fm ZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NlZWQuaAorLWVfc2VlZC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAor LWVfc2VlZC5vOiBlX3NlZWQuYyBldnBfbG9jbC5oCisrZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytlX3NlZWQubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq ZWN0cy5oCisrZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2Vf c2VlZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2VlZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zdGFjay5oCisrZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGVf c2VlZC5jIGV2cF9sb2NsLmgKKyBlX3hjYmNfZC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2FzbjEuaAorIGVfeGNiY19kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8u aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKKyBlX3hjYmNfZC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlcy5oCisgZV94Y2Jj X2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rlc19vbGQuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZV9vczIuaAorIGVfeGNiY19kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKy1lX3hjYmNfZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCistZV94Y2JjX2Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbGNvbmYuaAorK2VfeGNiY19kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytlX3hjYmNfZC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytlX3hjYmNf ZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorIGVfeGNiY19kLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3Ns X3R5cC5oCisgZV94Y2JjX2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisgZV94Y2JjX2QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpLmgKK0BAIC0zMzksMjgg KzM0MywyNyBAQCBlX3hjYmNfZC5vOiBldnBfbG9jbC5oCisgZW5jb2RlLm86IC4uLy4uL2Vfb3Mu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8u aAorIGVuY29kZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2NyeXB0by5oCisgZW5jb2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29z Mi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorLWVuY29kZS5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKy1lbmNvZGUubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq ZWN0cy5oCistZW5jb2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCistZW5jb2RlLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorLWVu Y29kZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc3ltaGFja3MuaAorLWVuY29kZS5vOiAuLi9jcnlwdGxpYi5oIGVuY29kZS5jCisrZW5jb2Rl Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlw cy5oCisrZW5jb2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytlbmNvZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2VuY29kZS5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Nz bF90eXAuaAorK2VuY29kZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytlbmNvZGUubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBlbmNvZGUuYworIGV2cF9hY25mLm86IC4uLy4u L2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisgZXZwX2FjbmYubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAorIGV2 cF9hY25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jb25mLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2NyeXB0by5oCisgZXZwX2FjbmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCistZXZwX2FjbmYubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCistZXZwX2FjbmYubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq ZWN0cy5oCistZXZwX2FjbmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgK KytldnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2ZpcHMuaAorK2V2cF9hY25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytldnBfYWNuZi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5o CisgZXZwX2FjbmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKyBldnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKyBldnBfYWNuZi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGV2cF9hY25m LmMKKyBldnBfZW5jLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5o CisgZXZwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2J1ZmZlci5oCisgZXZwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRv LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKy1ldnBfZW5jLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKKy1ldnBfZW5jLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdp bmUuaAorLWV2cF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9ldnAuaAorK2V2cF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2lu ZS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2V2cF9lbmMubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKyBldnBfZW5jLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpf bWFjLmgKKyBldnBfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKyBldnBfZW5jLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCitAQCAt MzcyLDI0ICszNzUsMTcgQEAgZXZwX2VuYy5vOiAuLi9jcnlwdGxpYi5oIGV2cF9lbmMuYyBldnBf bAorIGV2cF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYmlvLmgKKyBldnBfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8u aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorIGV2cF9lcnIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorLWV2cF9lcnIubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9t YWMuaAorLWV2cF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorLWV2cF9lcnIubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKy1ldnBf ZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc3RhY2suaAorLWV2cF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tz LmggZXZwX2Vyci5jCistZXZwX2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKy1ldnBfZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKy1ldnBfZmlwcy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9t YWMuaAorLWV2cF9maXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKy1ldnBfZmlwcy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorLWV2 cF9maXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc3RhY2suaAorLWV2cF9maXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1o YWNrcy5oIGV2cF9maXBzLmMKKytldnBfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBz LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytldnBfZXJyLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2V2 cF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2x2LmgKKytldnBfZXJyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v c3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2V2cF9lcnIubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhh Y2tzLmgKKytldnBfZXJyLm86IGV2cF9lcnIuYworIGV2cF9rZXkubzogLi4vLi4vZV9vcy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKyBldnBfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKKyBldnBfa2V5Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIu aAorLWV2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2VjZGguaAorLWV2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCistZXZwX2tleS5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytldnBfa2V5Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytl dnBfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2xoYXNoLmgKKyBldnBfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorIGV2cF9rZXkubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgK KyBldnBfa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9wa2NzNy5oCitAQCAtNDAxLDE3ICszOTcsMTcgQEAgZXZwX2xpYi5vOiAuLi8u Li9lX29zLmggLi4vLi4vaW5jbHVkZS9vcAorIGV2cF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAorIGV2cF9saWIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5o CisgZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2V2cC5oCistZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCistZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCist ZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3NzbF90eXAuaAorLWV2cF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Nh ZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCistZXZwX2xpYi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGV2cF9saWIuYworK2V2 cF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvbGhhc2guaAorK2V2cF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAor K2V2cF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorK2V2cF9saWIubzogLi4v Y3J5cHRsaWIuaCBldnBfbGliLmMKKyBldnBfcGJlLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYXNuMS5oCisgZXZwX3BiZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlv LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCisgZXZwX3BiZS5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKy1ldnBf cGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l Y2RoLmgKKy1ldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lcnIuaAorLWV2cF9wYmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2 cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZXZwX3BiZS5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrZXZwX3BiZS5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFz aC5oCisgZXZwX3BiZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKyBldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisgZXZwX3Bi ZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvcGtjczEyLmgKK0BAIC00MjIsOSArNDE4LDggQEAgZXZwX3BiZS5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wveDUwOV92ZgorIGV2cF9wa2V5Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYXNuMS5oCisgZXZwX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAorIGV2cF9wa2V5Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorLWV2cF9w a2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l Y2RoLmgKKy1ldnBfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXJyLmgKKy1ldnBfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytldnBfcGtleS5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrZXZwX3Br ZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv bGhhc2guaAorIGV2cF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorIGV2cF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3NsY29uZi5oCisgZXZwX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKK0BAIC00MzYsOSAr NDMxLDggQEAgZXZwX3BrZXkubzogLi4vYXNuMS9hc24xX2xvY2wuaCAuLi9jcnlwdAorIG1fZHNz Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9iaW8uaAorIG1fZHNzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKyBtX2Rzcy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKy1tX2Rzcy5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCist bV9kc3MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Vyci5oCistbV9kc3MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrbV9kc3MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vy ci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK21fZHNzLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKyBtX2Rzcy5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpl Y3RzLmgKKyBtX2Rzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorIG1fZHNzLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCitAQCAtNDQ5LDkg KzQ0Myw4IEBAIG1fZHNzLm86IC4uL2NyeXB0bGliLmggbV9kc3MuYworIG1fZHNzMS5vOiAuLi8u Li9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYmlvLmgKKyBtX2RzczEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorIG1fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKy1tX2RzczEubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAorLW1fZHNz MS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXJyLmgKKy1tX2RzczEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9saGFzaC5oCisrbV9kc3MxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKyttX2RzczEubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorIG1fZHNzMS5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpl Y3RzLmgKKyBtX2RzczEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKyBtX2RzczEubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKK0BAIC00NTks MzEgKzQ1MiwyMyBAQCBtX2RzczEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjCisg bV9kc3MxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zeW1oYWNrcy5oCisgbV9kc3MxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5Lmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKKyBtX2RzczEubzogLi4vY3J5cHRsaWIu aCBtX2RzczEuYworLW1fZWNkc2EubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9hc24xLmgKKy1tX2VjZHNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKKy1tX2VjZHNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorLW1fZWNkc2EubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAorLW1f ZWNkc2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Vyci5oCistbV9lY2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKy1tX2VjZHNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorLW1fZWNkc2Eubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2x2LmgKKy1tX2VjZHNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCistbV9lY2RzYS5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCistbV9lY2Rz YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3ltaGFja3MuaAorLW1fZWNkc2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAorLW1fZWNkc2EubzogLi4vY3J5cHRsaWIuaCBt X2VjZHNhLmMKKy1tX21kMi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jp by5oCisrbV9lY2RzYS5vOiBtX2VjZHNhLmMKKyttX21kMi5vOiAuLi8uLi9lX29zLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKyBtX21k Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2NyeXB0by5oCisgbV9tZDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vyci5oCistbV9tZDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xo YXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKy1tX21kMi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90 eXAuaAorLW1fbWQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3RhY2suaAorLW1fbWQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z eW1oYWNrcy5oIC4uL2NyeXB0bGliLmggbV9tZDIuYworK21fbWQyLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrbV9tZDIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL21kMi5oCisr bV9tZDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqZWN0cy5oCisrbV9tZDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xj b25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKyttX21kMi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAor K21fbWQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc2FmZXN0YWNrLmgKKyttX21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKyttX21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCisrbV9tZDIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCBldnBfbG9jbC5oIG1f bWQyLmMKKyBtX21kNC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKyBtX21kNC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCistbV9tZDQubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgK Ky1tX21kNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lY2RzYS5oCistbV9tZDQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK21fbWQ0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l X29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK21fbWQ0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisgbV9tZDQubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL21kNC5o CisgbV9tZDQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb2JqZWN0cy5oCisgbV9tZDQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5z c2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKK0BAIC00OTQsOSArNDc5 LDggQEAgbV9tZDQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLgorIG1fbWQ0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggZXZwX2xvY2wu aCBtX21kNC5jCisgbV9tZDUubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h c24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgbV9tZDUubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorLW1fbWQ1 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l Yy5oCistbV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZWNkc2EuaAorLW1fbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKyttX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKyttX21kNS5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorIG1fbWQ1 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9t ZDUuaAorIG1fbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29iamVjdHMuaAorIG1fbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCitAQCAtNTA1LDI2 ICs0ODksMTcgQEAgbV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oIC4uLworIG1f bWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3RhY2suaAorIG1fbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKKyBtX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv eDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIGV2cF9sb2NsLmggbV9tZDUuYworLW1fbWRjMi5vOiAu Li8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYmlvLmgKKyttX21kYzIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9iaW8uaAorIG1fbWRjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCistbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9kZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzX29sZC5oCistbV9tZGMyLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCistbV9t ZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2VjZHNhLmgKKy1tX21kYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9ldnAuaAorLW1fbWRjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhh c2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbWRjMi5oCistbV9tZGMyLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorLW1f bWRjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbHYuaAorLW1fbWRjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Nz bF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAorLW1fbWRjMi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvcnNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCist bV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc3RhY2suaAorLW1fbWRjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvdWkuaAorLW1fbWRjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvdWlfY29tcGF0LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAorLW1fbWRjMi5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIGV2cF9sb2NsLmgg bV9tZGMyLmMKKyttX21kYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9s aGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrbV9tZGMyLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3Ns X3R5cC5oCisrbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK21fbWRjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIG1fbWRjMi5jCisgbV9udWxsLm86IC4uLy4uL2Vf b3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9i aW8uaAorIG1fbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2NyeXB0by5oCistbV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l X29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCistbV9udWxsLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKKy1tX251bGwu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAu aAorK21fbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXJyLmgKKyttX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKyBtX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorIG1fbnVsbC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3NsY29uZi5oCisgbV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCitAQCAtNTM1LDkgKzUxMCw4IEBAIG1fbnVs bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkKKyBtX3JpcGVtZC5vOiAuLi8uLi9l X29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorIG1fcmlwZW1kLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKKyBtX3Jp cGVtZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Vfb3MyLmgKKy1tX3JpcGVtZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCistbV9yaXBlbWQubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCistbV9yaXBlbWQubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisr bV9yaXBlbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9ldnAuaAorK21fcmlwZW1kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKyBtX3JpcGVtZC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKyBtX3JpcGVt ZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorIG1fcmlwZW1kLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3Ns X3R5cC5oCitAQCAtNTQ5LDkgKzUyMyw4IEBAIG1fcmlwZW1kLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC94NTA5X3YKKyBtX3JpcGVtZC5vOiBtX3JpcGVtZC5jCisgbV9zaGEubzogLi4vLi4vZV9v cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jp by5oCisgbV9zaGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9jcnlwdG8uaAorLW1fc2hhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29z Mi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCistbV9zaGEubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAorLW1fc2hhLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytt X3NoYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXJyLmgKKyttX3NoYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2ZpcHMuaAorIG1fc2hhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFz aC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKyBtX3NoYS5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5o CisgbV9zaGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29zc2xfdHlwLmgKK0BAIC01NjIsOSArNTM1LDggQEAgbV9zaGEubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLgorIG1fc2hhLm86IC4uL2NyeXB0bGliLmggZXZwX2xv Y2wuaCBtX3NoYS5jCisgbV9zaGExLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorIG1fc2hhMS5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCist bV9zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lYy5oCistbV9zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKKy1tX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK21fc2hhMS5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKyttX3NoYTEu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBz LmgKKyBtX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29ial9tYWMuaAorIG1fc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq ZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisgbV9zaGExLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3Ns X3R5cC5oCitAQCAtNTc2LDkgKzU0OCw4IEBAIG1fc2hhMS5vOiAuLi9jcnlwdGxpYi5oIG1fc2hh MS5jCisgbV9zaWd2ZXIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24x LmgKKyBtX3NpZ3Zlci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2J1ZmZlci5oCisgbV9zaWd2ZXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Ny eXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCistbV9zaWd2ZXIubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAorLW1fc2ln dmVyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lcnIuaAorLW1fc2lndmVyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvbGhhc2guaAorK21fc2lndmVyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKyttX3NpZ3Zlci5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisgbV9z aWd2ZXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqZWN0cy5oCisgbV9zaWd2ZXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5z c2xjb25mLmgKKyBtX3NpZ3Zlci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorQEAgLTU4OSw5ICs1NjAsOCBAQCBtX3Np Z3Zlci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92CisgbV9zaWd2ZXIubzogbV9zaWd2 ZXIuYworIG1fd3AubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgbV93cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCistbV93cC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAorLW1f d3AubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZWNkc2EuaAorLW1fd3AubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9ldnAuaAorK21fd3AubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrbV93cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorIG1fd3AubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorIG1f d3AubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbGNvbmYuaAorIG1fd3AubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2 LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKK0BAIC02MDIsOSArNTcyLDggQEAg bV93cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uLworIG1fd3AubzogLi4vY3J5 cHRsaWIuaCBldnBfbG9jbC5oIG1fd3AuYworIG5hbWVzLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorIG5hbWVz Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Y3J5cHRvLmgKKy1uYW1lcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZWMuaAorLW5hbWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2Ro LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKKy1uYW1lcy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrbmFtZXMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisr bmFtZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9maXBzLmgKKyBuYW1lcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisgbmFtZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorIG5hbWVzLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v c3NsX3R5cC5oCitAQCAtNjE1LDkgKzU4NCw4IEBAIG5hbWVzLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC94NTA5X3ZmeS4KKyBwNV9jcnB0Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYXNuMS5oCisgcDVfY3JwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCisgcDVfY3JwdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKy1wNV9jcnB0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgK Ky1wNV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lcnIuaAorLXA1X2NycHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrcDVfY3JwdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrcDVfY3JwdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisg cDVfY3JwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmplY3RzLmgKKyBwNV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisgcDVfY3JwdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtj czcuaAorQEAgLTYyOCw5ICs1OTYsOCBAQCBwNV9jcnB0Lm86IC4uL2NyeXB0bGliLmggcDVfY3Jw dC5jCisgcDVfY3JwdDIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24x LmgKKyBwNV9jcnB0Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2J1ZmZlci5oCisgcDVfY3JwdDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Ny eXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCistcDVfY3JwdDIubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAorLXA1X2Ny cHQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lcnIuaAorLXA1X2NycHQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvaG1hYy5oCisrcDVfY3JwdDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK3A1X2NycHQyLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorIHA1X2Ny cHQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmpfbWFjLmgKKyBwNV9jcnB0Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisgcDVfY3JwdDIubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlw LmgKK0BAIC02NDEsOSArNjA4LDggQEAgcDVfY3JwdDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3g1MDlfdgorIHA1X2NycHQyLm86IHA1X2NycHQyLmMKKyBwX2RlYy5vOiAuLi8uLi9lX29zLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgK KyBwX2RlYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2NyeXB0by5oCistcF9kZWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKKy1wX2RlYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCistcF9kZWMubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK3BfZGVj Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l cnIuaAorK3BfZGVjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZmlwcy5oCisgcF9kZWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorIHBfZGVjLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKyBw X2RlYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3NzbF90eXAuaAorQEAgLTY1NCw5ICs2MjAsOCBAQCBwX2RlYy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3ltaGFja3MuCisgcF9kZWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1 MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCBwX2RlYy5jCisgcF9lbmMubzogLi4vLi4vZV9vcy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisg cF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9jcnlwdG8uaAorLXBfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCistcF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAorLXBfZW5jLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytwX2VuYy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJy LmgKKytwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2ZpcHMuaAorIHBfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKyBwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisgcF9l bmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29zc2xfdHlwLmgKK0BAIC02NzAsOSArNjM1LDggQEAgcF9saWIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2FzbjFfbWFjLgorIHBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAorIHBfbGliLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGguaAorIHBfbGliLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAor LXBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lY2RoLmgKKy1wX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZW5naW5lLmgKKy1wX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrcF9saWIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2VuZ2luZS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK3BfbGliLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5o CisgcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29ial9tYWMuaAorIHBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3Rz LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKyBwX2xpYi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAu aAorQEAgLTY4Myw5ICs2NDcsOCBAQCBwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUw OS5oIC4uCisgcF9saWIubzogLi4vYXNuMS9hc24xX2xvY2wuaCAuLi9jcnlwdGxpYi5oIHBfbGli LmMKKyBwX29wZW4ubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgcF9vcGVuLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKy1wX29wZW4ubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgK Ky1wX29wZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZWNkc2EuaAorLXBfb3Blbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrcF9vcGVuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK3Bfb3Blbi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorIHBfb3Bl bi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqX21hYy5oCisgcF9vcGVuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKyBwX29wZW4ubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKK0BA IC02OTYsOSArNjU5LDggQEAgcF9vcGVuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5Lmgg LgorIHBfb3Blbi5vOiAuLi9jcnlwdGxpYi5oIHBfb3Blbi5jCisgcF9zZWFsLm86IC4uLy4uL2Vf b3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9i aW8uaAorIHBfc2VhbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2NyeXB0by5oCistcF9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l X29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCistcF9zZWFsLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKKy1wX3NlYWwu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAu aAorK3Bfc2VhbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXJyLmgKKytwX3NlYWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKyBwX3NlYWwubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorIHBfc2VhbC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3NsY29uZi5oCisgcF9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCitAQCAtNzA5LDM1ICs2NzEsMzYgQEAgcF9z ZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcworIHBfc2VhbC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIHBfc2VhbC5jCisgcF9zaWdu Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9iaW8uaAorIHBfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVy LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCistcF9zaWduLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCistcF9zaWduLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNh LmgKKy1wX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9ldnAuaAorK3Bfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytwX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKyBwX3NpZ24ubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAor IHBfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3NsY29uZi5oCisgcF9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCistcF9zaWduLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3Rh Y2suaAorLXBfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3N0YWNrLmgKKy1wX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhh Y2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAorLXBfc2lnbi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIHBfc2lnbi5jCisrcF9zaWduLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2Eu aAorK3Bfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3NoYS5oCisrcF9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFj ay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCisrcF9zaWduLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgKKytw X3NpZ24ubzogLi4vY3J5cHRsaWIuaCBwX3NpZ24uYworIHBfdmVyaWZ5Lm86IC4uLy4uL2Vfb3Mu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisgcF92ZXJpZnkubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAorIHBfdmVyaWZ5 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZV9vczIuaAorLXBfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lY2RoLmgKKy1wX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKy1wX3ZlcmlmeS5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytwX3Zl cmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2V2cC5oCisrcF92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvbGhhc2guaAorIHBfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorIHBfdmVyaWZ5Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisgcF92ZXJpZnkubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlw LmgKKy1wX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKy1wX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKy1wX3ZlcmlmeS5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5o CistcF92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRs aWIuaCBwX3ZlcmlmeS5jCisrcF92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3 LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCisrcF92ZXJpZnkubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAorK3BfdmVy aWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zeW1oYWNrcy5oCisrcF92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAorK3BfdmVyaWZ5Lm86IC4uL2NyeXB0bGli LmggcF92ZXJpZnkuYworIHBtZXRoX2ZuLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYXNuMS5oCisgcG1ldGhfZm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAorIHBtZXRoX2ZuLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorIHBtZXRoX2Zu Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZw LmgKKy1wbWV0aF9mbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqX21hYy5oCistcG1ldGhfZm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK3BtZXRoX2Zu Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xo YXNoLmgKKytwbWV0aF9mbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytwbWV0aF9mbi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbGNvbmYuaAorIHBtZXRoX2ZuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisgcG1ldGhfZm4ubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z dGFjay5oCisgcG1ldGhfZm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4v Y3J5cHRsaWIuaCBldnBfbG9jbC5oCitAQCAtNzQ2LDkgKzcwOSw5IEBAIHBtZXRoX2duLm86IC4u Ly4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL28KKyBwbWV0aF9nbi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgKKyBwbWV0aF9nbi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5o CisgcG1ldGhfZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vyci5oCistcG1ldGhfZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCistcG1ldGhfZ24ubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCistcG1l dGhfZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytwbWV0aF9nbi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMu aAorK3BtZXRoX2duLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytwbWV0aF9nbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisgcG1ldGhfZ24u bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29zc2xfdHlwLmgKKyBwbWV0aF9nbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNr LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKyBwbWV0aF9nbi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGV2cF9sb2NsLmgKK0BAIC03NTYs OSArNzE5LDggQEAgcG1ldGhfZ24ubzogcG1ldGhfZ24uYworIHBtZXRoX2xpYi5vOiAuLi8uLi9l X29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorIHBtZXRoX2xpYi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCisgcG1l dGhfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZV9vczIuaAorLXBtZXRoX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCistcG1ldGhfbGliLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAorLXBtZXRoX2xp Yi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2 cC5oCisrcG1ldGhfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXJyLmgKKytwbWV0aF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKyBwbWV0aF9saWIubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAor IHBtZXRoX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisgcG1ldGhfbGli Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4xLWJldGEzL2NyeXB0by9ldnAvbV9kc3MxLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEz L2NyeXB0by9ldnAvbV9kc3MxLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAv bV9kc3MxLmMuZmlwcwkyMDExLTA2LTAxIDE3OjExOjAwLjAwMDAwMDAwMCArMDIwMAorKysrIG9w ZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9tX2RzczEuYwkyMDEyLTAyLTI5IDEwOjMzOjAy Ljc4ODI5NDg0NCArMDEwMAorQEAgLTY4LDggKzY4LDYgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9k c2EuaD4KKyAjZW5kaWYKKyAKKy0jaWZuZGVmIE9QRU5TU0xfRklQUyAKKy0KKyBzdGF0aWMgaW50 IGluaXQoRVZQX01EX0NUWCAqY3R4KQorIAl7IHJldHVybiBTSEExX0luaXQoY3R4LT5tZF9kYXRh KTsgfQorIAorQEAgLTg0LDcgKzgyLDcgQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBkc3MxX21kPQor IAlOSURfZHNhLAorIAlOSURfZHNhV2l0aFNIQTEsCisgCVNIQV9ESUdFU1RfTEVOR1RILAorLQlF VlBfTURfRkxBR19QS0VZX0RJR0VTVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1R8RVZQX01E X0ZMQUdfRklQUywKKyAJaW5pdCwKKyAJdXBkYXRlLAorIAlmaW5hbCwKK0BAIC0xMDAsNCArOTgs MyBAQCBjb25zdCBFVlBfTUQgKkVWUF9kc3MxKHZvaWQpCisgCXJldHVybigmZHNzMV9tZCk7Cisg CX0KKyAjZW5kaWYKKy0jZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRv L2V2cC9tX2Rzcy5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZwL21fZHNzLmMK Ky0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvbV9kc3MuYy5maXBzCTIwMTEtMDYt MDEgMTc6MTE6MDAuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlw dG8vZXZwL21fZHNzLmMJMjAxMi0wMi0yOSAxMDozMzowMi43ODgyOTQ4NDQgKzAxMDAKK0BAIC02 Niw3ICs2Niw2IEBACisgI2VuZGlmCisgCisgI2lmbmRlZiBPUEVOU1NMX05PX1NIQQorLSNpZm5k ZWYgT1BFTlNTTF9GSVBTCisgCisgc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKKyAJ eyByZXR1cm4gU0hBMV9Jbml0KGN0eC0+bWRfZGF0YSk7IH0KK0BAIC04Miw3ICs4MSw3IEBAIHN0 YXRpYyBjb25zdCBFVlBfTUQgZHNhX21kPQorIAlOSURfZHNhV2l0aFNIQSwKKyAJTklEX2RzYVdp dGhTSEEsCisgCVNIQV9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX0RJR0VTVCwK KysJRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1R8RVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdCwKKyAJ dXBkYXRlLAorIAlmaW5hbCwKK0BAIC05OCw0ICs5NywzIEBAIGNvbnN0IEVWUF9NRCAqRVZQX2Rz cyh2b2lkKQorIAlyZXR1cm4oJmRzYV9tZCk7CisgCX0KKyAjZW5kaWYKKy0jZW5kaWYKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9tX21kMi5jLmZpcHMgb3BlbnNzbC0x LjAuMS1iZXRhMy9jcnlwdG8vZXZwL21fbWQyLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2Ny eXB0by9ldnAvbV9tZDIuYy5maXBzCTIwMDUtMDctMTYgMTQ6Mzc6MzIuMDAwMDAwMDAwICswMjAw CisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZwL21fbWQyLmMJMjAxMi0wMi0yOSAx MDozMzowMi43ODkyOTQ4NTMgKzAxMDAKK0BAIC02OCw2ICs2OCw3IEBACisgI2lmbmRlZiBPUEVO U1NMX05PX1JTQQorICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorICNlbmRpZgorKyNpbmNsdWRl ICJldnBfbG9jbC5oIgorIAorIHN0YXRpYyBpbnQgaW5pdChFVlBfTURfQ1RYICpjdHgpCisgCXsg cmV0dXJuIE1EMl9Jbml0KGN0eC0+bWRfZGF0YSk7IH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEt YmV0YTMvY3J5cHRvL2V2cC9tX3NoYTEuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRv L2V2cC9tX3NoYTEuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9tX3NoYTEu Yy5maXBzCTIwMTEtMDUtMjkgMDE6MDE6MjYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0x LjAuMS1iZXRhMy9jcnlwdG8vZXZwL21fc2hhMS5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzg5Mjk0 ODUzICswMTAwCitAQCAtNTksOCArNTksNiBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNs dWRlICJjcnlwdGxpYi5oIgorIAorLSNpZm5kZWYgT1BFTlNTTF9GSVBTCistCisgI2lmbmRlZiBP UEVOU1NMX05PX1NIQQorIAorICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorQEAgLTg1LDcgKzgz LDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGExX21kPQorIAlOSURfc2hhMSwKKyAJTklEX3No YTFXaXRoUlNBRW5jcnlwdGlvbiwKKyAJU0hBX0RJR0VTVF9MRU5HVEgsCistCUVWUF9NRF9GTEFH X1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCisrCUVW UF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNF TlR8CisrCQlFVlBfTURfRkxBR19GSVBTLAorIAlpbml0LAorIAl1cGRhdGUsCisgCWZpbmFsLAor QEAgLTEyMiw3ICsxMjEsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTIyNF9tZD0KKyAJTklE X3NoYTIyNCwKKyAJTklEX3NoYTIyNFdpdGhSU0FFbmNyeXB0aW9uLAorIAlTSEEyMjRfRElHRVNU X0xFTkdUSCwKKy0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFH X0RJR0FMR0lEX0FCU0VOVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVW UF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKKysJCUVWUF9NRF9GTEFHX0ZJUFMsCisgCWluaXQy MjQsCisgCXVwZGF0ZTI1NiwKKyAJZmluYWwyNTYsCitAQCAtMTQxLDcgKzE0MSw4IEBAIHN0YXRp YyBjb25zdCBFVlBfTUQgc2hhMjU2X21kPQorIAlOSURfc2hhMjU2LAorIAlOSURfc2hhMjU2V2l0 aFJTQUVuY3J5cHRpb24sCisgCVNIQTI1Nl9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19Q S0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAorKwlFVlBf TURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5U fAorKwkJRVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdDI1NiwKKyAJdXBkYXRlMjU2LAorIAlmaW5h bDI1NiwKK0BAIC0xNzIsNyArMTczLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEzODRfbWQ9 CisgCU5JRF9zaGEzODQsCisgCU5JRF9zaGEzODRXaXRoUlNBRW5jcnlwdGlvbiwKKyAJU0hBMzg0 X0RJR0VTVF9MRU5HVEgsCistCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBf TURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCisrCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05B VFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8CisrCQlFVlBfTURfRkxBR19GSVBTLAor IAlpbml0Mzg0LAorIAl1cGRhdGU1MTIsCisgCWZpbmFsNTEyLAorQEAgLTE5MSw3ICsxOTMsOCBA QCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTUxMl9tZD0KKyAJTklEX3NoYTUxMiwKKyAJTklEX3No YTUxMldpdGhSU0FFbmNyeXB0aW9uLAorIAlTSEE1MTJfRElHRVNUX0xFTkdUSCwKKy0JRVZQX01E X0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwK KysJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lE X0FCU0VOVHwKKysJCUVWUF9NRF9GTEFHX0ZJUFMsCisgCWluaXQ1MTIsCisgCXVwZGF0ZTUxMiwK KyAJZmluYWw1MTIsCitAQCAtMjA2LDQgKzIwOSwzIEBAIGNvbnN0IEVWUF9NRCAqRVZQX3NoYTUx Mih2b2lkKQorIAl7IHJldHVybigmc2hhNTEyX21kKTsgfQorICNlbmRpZgkvKiBpZm5kZWYgT1BF TlNTTF9OT19TSEE1MTIgKi8KKyAKKy0jZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0 YTMvY3J5cHRvL2V2cC9wX3NpZ24uYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2 cC9wX3NpZ24uYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9wX3NpZ24uYy5m aXBzCTIwMTEtMDYtMDkgMTg6MDI6MzkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAu MS1iZXRhMy9jcnlwdG8vZXZwL3Bfc2lnbi5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzg5Mjk0ODUz ICswMTAwCitAQCAtNjEsNiArNjEsNyBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorICNp bmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisgCisgI2lmZGVmIHVuZGVmCisgdm9pZCBFVlBfU2ln bkluaXQoRVZQX01EX0NUWCAqY3R4LCBFVlBfTUQgKnR5cGUpCitAQCAtMTAzLDYgKzEwNCwyMiBA QCBpbnQgRVZQX1NpZ25GaW5hbChFVlBfTURfQ1RYICpjdHgsIHVuc2lnCisgCQkJZ290byBlcnI7 CisgCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9zaWduYXR1cmVfbWQocGtjdHgsIGN0eC0+ZGlnZXN0 KSA8PSAwKQorIAkJCWdvdG8gZXJyOworKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZM QUdfUEFEX1g5MzEpCisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgs IFJTQV9YOTMxX1BBRERJTkcpIDw9IDApCisrCQkJCWdvdG8gZXJyOworKwkJaWYgKGN0eC0+Zmxh Z3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUykKKysJCQl7CisrCQkJaW50IHNhbHRsZW47Cisr CQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9QS0NTMV9QU1Nf UEFERElORykgPD0gMCkKKysJCQkJZ290byBlcnI7CisrCQkJc2FsdGxlbiA9IE1fRVZQX01EX0NU WF9GTEFHX1BTU19TQUxUKGN0eCk7CisrCQkJaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFH X1BTU19NRExFTikKKysJCQkJc2FsdGxlbiA9IC0xOworKwkJCWVsc2UgaWYgKHNhbHRsZW4gPT0g RVZQX01EX0NUWF9GTEFHX1BTU19NUkVDKQorKwkJCQlzYWx0bGVuID0gLTI7CisrCQkJaWYgKEVW UF9QS0VZX0NUWF9zZXRfcnNhX3Bzc19zYWx0bGVuKHBrY3R4LCBzYWx0bGVuKSA8PSAwKQorKwkJ CQlnb3RvIGVycjsKKysJCQl9CisgCQlpZiAoRVZQX1BLRVlfc2lnbihwa2N0eCwgc2lncmV0LCAm c2x0bXAsIG0sIG1fbGVuKSA8PSAwKQorIAkJCWdvdG8gZXJyOworIAkJKnNpZ2xlbiA9IHNsdG1w OworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMuZmlw cyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvcF92ZXJpZnkuYworLS0tIG9wZW5zc2wt MS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jLmZpcHMJMjAxMS0wNi0wOSAxODowMjoz OS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvcF92 ZXJpZnkuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc4OTI5NDg1MyArMDEwMAorQEAgLTYxLDYgKzYx LDcgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9vYmpl Y3RzLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3Jz YS5oPgorIAorIGludCBFVlBfVmVyaWZ5RmluYWwoRVZQX01EX0NUWCAqY3R4LCBjb25zdCB1bnNp Z25lZCBjaGFyICpzaWdidWYsCisgCSAgICAgdW5zaWduZWQgaW50IHNpZ2xlbiwgRVZQX1BLRVkg KnBrZXkpCitAQCAtODgsNiArODksMjIgQEAgaW50IEVWUF9WZXJpZnlGaW5hbChFVlBfTURfQ1RY ICpjdHgsIGNvbgorIAkJCWdvdG8gZXJyOworIAkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfc2lnbmF0 dXJlX21kKHBrY3R4LCBjdHgtPmRpZ2VzdCkgPD0gMCkKKyAJCQlnb3RvIGVycjsKKysJCWlmIChj dHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKQorKwkJCWlmIChFVlBfUEtFWV9D VFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfWDkzMV9QQURESU5HKSA8PSAwKQorKwkJCQln b3RvIGVycjsKKysJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MpCisr CQkJeworKwkJCWludCBzYWx0bGVuOworKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRk aW5nKHBrY3R4LCBSU0FfUEtDUzFfUFNTX1BBRERJTkcpIDw9IDApCisrCQkJCWdvdG8gZXJyOwor KwkJCXNhbHRsZW4gPSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpOworKwkJCWlmIChz YWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4pCisrCQkJCXNhbHRsZW4gPSAtMTsK KysJCQllbHNlIGlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQykKKysJCQkJ c2FsdGxlbiA9IC0yOworKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxlbihw a2N0eCwgc2FsdGxlbikgPD0gMCkKKysJCQkJZ290byBlcnI7CisrCQkJfQorIAkJaSA9IEVWUF9Q S0VZX3ZlcmlmeShwa2N0eCwgc2lnYnVmLCBzaWdsZW4sIG0sIG1fbGVuKTsKKyAJCWVycjoKKyAJ CUVWUF9QS0VZX0NUWF9mcmVlKHBrY3R4KTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2Ny eXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYy5maXBzCTIwMTItMDItMjkgMTA6MzM6MDIuNzg5 Mjk0ODUzICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfYWVzYXZzLmMJMjAxMi0wMi0yOSAxMDozMzowMi43ODkyOTQ4NTMgKzAxMDAKK0BAIC0wLDAg KzEsOTM5IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVGhlIE9w ZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK KysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICog ICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBk aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5T U0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29u dGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NM IgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0 IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3Qu CisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0 IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg T3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p CisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgIE5JU1QgQUVTIEFsZ29yaXRobSBWYWxp ZGF0aW9uIFN1aXRlCisrICBUZXN0IFByb2dyYW0KKysKKysgIERvbmF0ZWQgdG8gT3BlblNTTCBi eToKKysgIFYtT05FIENvcnBvcmF0aW9uCisrICAyMDI1MCBDZW50dXJ5IEJsdmQsIFN1aXRlIDMw MAorKyAgR2VybWFudG93biwgTUQgMjA4NzQKKysgIFUuUy5BLgorKyAgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+ CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8 ZXJybm8uaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvYWVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvYm4uaD4KKysKKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVk ZSAiZV9vcy5oIgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrCisraW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBBRVMgc3VwcG9ydFxu Iik7CisrICAgIHJldHVybigwKTsKKyt9CisrCisrI2Vsc2UKKysKKysjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+CisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrI2RlZmluZSBBRVNfQkxPQ0tf U0laRSAxNgorKworKyNkZWZpbmUgVkVSQk9TRSAwCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisraW50IEFFU1Rlc3QoRVZQX0NJUEhF Ul9DVFggKmN0eCwKKysJICAgIGNoYXIgKmFtb2RlLCBpbnQgYWtleXN6LCB1bnNpZ25lZCBjaGFy ICphS2V5LCAKKysJICAgIHVuc2lnbmVkIGNoYXIgKmlWZWMsIAorKwkgICAgaW50IGRpciwgIC8q IDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkgICAgdW5zaWduZWQgY2hhciAqcGxhaW50 ZXh0LCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0LCBpbnQgbGVuKQorKyAgICB7CisrICAgIGNv bnN0IEVWUF9DSVBIRVIgKmNpcGhlciA9IE5VTEw7CisrCisrICAgIGlmIChzdHJjYXNlY21wKGFt b2RlLCAiQ0JDIikgPT0gMCkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2Ug MTI4OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2JjKCk7CisrCQlicmVhazsKKysKKysJCWNh c2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2JjKCk7CisrCQlicmVhazsKKysKKysJ CWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2JjKCk7CisrCQlicmVhazsKKysJ CX0KKysKKysJfQorKyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiRUNCIikgPT0gMCkK KysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4OgorKwkJY2lwaGVyID0g RVZQX2Flc18xMjhfZWNiKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVy ID0gRVZQX2Flc18xOTJfZWNiKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJY2lw aGVyID0gRVZQX2Flc18yNTZfZWNiKCk7CisrCQlicmVhazsKKysJCX0KKysJfQorKyAgICBlbHNl IGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0ZCMTI4IikgPT0gMCkKKysJeworKwlzd2l0Y2ggKGFr ZXlzeikKKysJCXsKKysJCWNhc2UgMTI4OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2ZiMTI4 KCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJf Y2ZiMTI4KCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Fl c18yNTZfY2ZiMTI4KCk7CisrCQlicmVhazsKKysJCX0KKysKKysJfQorKyAgICBlbHNlIGlmIChz dHJuY2FzZWNtcChhbW9kZSwgIk9GQiIsIDMpID09IDApCisrCXsKKysJc3dpdGNoIChha2V5c3op CisrCQl7CisrCQljYXNlIDEyODoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTI4X29mYigpOworKwkJ YnJlYWs7CisrCisrCQljYXNlIDE5MjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTkyX29mYigpOwor KwkJYnJlYWs7CisrCisrCQljYXNlIDI1NjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMjU2X29mYigp OworKwkJYnJlYWs7CisrCQl9CisrCX0KKysgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwi Q0ZCMSIpKQorKwl7CisrCXN3aXRjaCAoYWtleXN6KQorKwkJeworKwkJY2FzZSAxMjg6CisrCQlj aXBoZXIgPSBFVlBfYWVzXzEyOF9jZmIxKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMTkyOgor KwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2ZiMSgpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDI1 NjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2NmYjEoKTsKKysJCWJyZWFrOworKwkJfQorKwl9 CisrICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjgiKSkKKysJeworKwlzd2l0Y2gg KGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2Zi OCgpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDE5MjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTky X2NmYjgoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAyNTY6CisrCQljaXBoZXIgPSBFVlBfYWVz XzI1Nl9jZmI4KCk7CisrCQlicmVhazsKKysJCX0KKysJfQorKyAgICBlbHNlCisrCXsKKysJcHJp bnRmKCJVbmtub3duIG1vZGU6ICVzXG4iLCBhbW9kZSk7CisrCXJldHVybiAwOworKwl9CisrICAg IGlmICghY2lwaGVyKQorKwl7CisrCXByaW50ZigiSW52YWxpZCBrZXkgc2l6ZTogJWRcbiIsIGFr ZXlzeik7CisrCXJldHVybiAwOyAKKysJfQorKyAgICBpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4 LCBjaXBoZXIsIE5VTEwsIGFLZXksIGlWZWMsIGRpcikgPD0gMCkKKysJcmV0dXJuIDA7CisrICAg IGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikpCisrCU1fRVZQX0NJUEhFUl9DVFhfc2V0X2Zs YWdzKGN0eCwgRVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUyk7CisrICAgIGlmIChkaXIpCisrCQlF VlBfQ2lwaGVyKGN0eCwgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBsZW4pOworKwllbHNlCisrCQlF VlBfQ2lwaGVyKGN0eCwgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOworKyAgICByZXR1cm4g MTsKKysgICAgfQorKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0qLworK2NoYXIgKnRfdGFnWzJdID0geyJQTEFJTlRFWFQiLCAiQ0lQSEVSVEVYVCJ9 OworK2NoYXIgKnRfbW9kZVs2XSA9IHsiQ0JDIiwiRUNCIiwiT0ZCIiwiQ0ZCMSIsIkNGQjgiLCJD RkIxMjgifTsKKytlbnVtIE1vZGUge0NCQywgRUNCLCBPRkIsIENGQjEsIENGQjgsIENGQjEyOH07 CisrZW51bSBYQ3J5cHQge1hERUNSWVBULCBYRU5DUllQVH07CisrCisrLyo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PSovCisrLyogIE1vbnRlIENhcmxvIFRlc3RzICAgICAgICAgICovCisr LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrLyojZGVmaW5lIGdiKGEsYikg KCgoYSlbKGIpLzhdID4+ICgoYiklOCkpJjEpKi8KKysvKiNkZWZpbmUgc2IoYSxiLHYpICgoYSlb KGIpLzhdPSgoYSlbKGIpLzhdJn4oMSA8PCAoKGIpJTgpKSl8KCEhKHYpIDw8ICgoYiklOCkpKSov CisrCisrI2RlZmluZSBnYihhLGIpICgoKGEpWyhiKS84XSA+PiAoNy0oYiklOCkpJjEpCisrI2Rl ZmluZSBzYihhLGIsdikgKChhKVsoYikvOF09KChhKVsoYikvOF0mfigxIDw8ICg3LShiKSU4KSkp fCghISh2KSA8PCAoNy0oYiklOCkpKQorKworK2ludCBkb19tY3QoY2hhciAqYW1vZGUsIAorKwkg ICBpbnQgYWtleXN6LCB1bnNpZ25lZCBjaGFyICphS2V5LHVuc2lnbmVkIGNoYXIgKmlWZWMsCisr CSAgIGludCBkaXIsIHVuc2lnbmVkIGNoYXIgKnRleHQsIGludCBsZW4sCisrCSAgIEZJTEUgKnJm cCkKKysgICAgeworKyAgICBpbnQgcmV0ID0gMDsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbMTAx XVszMl07CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbMTAxXVtBRVNfQkxPQ0tfU0laRV07CisrICAg IHVuc2lnbmVkIGNoYXIgcHRleHRbMTAwMV1bMzJdOworKyAgICB1bnNpZ25lZCBjaGFyIGN0ZXh0 WzEwMDFdWzMyXTsKKysgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzY0KzRdOworKyAgICBp bnQgaSwgaiwgbiwgbjEsIG4yOworKyAgICBpbnQgaW1vZGUgPSAwLCBua2V5c3ogPSBha2V5c3ov ODsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZj dHgpOworKworKyAgICBpZiAobGVuID4gMzIpCisrCXsKKysJcHJpbnRmKCJcbj4+Pj4gTGVuZ3Ro IGV4Y2VlZHMgMzIgZm9yICVzICVkIDw8PDxcblxuIiwgCisrCSAgICAgICBhbW9kZSwgYWtleXN6 KTsKKysJcmV0dXJuIC0xOworKwl9CisrICAgIGZvciAoaW1vZGUgPSAwOyBpbW9kZSA8IDY7ICsr aW1vZGUpCisrCWlmIChzdHJjbXAoYW1vZGUsIHRfbW9kZVtpbW9kZV0pID09IDApCisrCSAgICBi cmVhazsKKysgICAgaWYgKGltb2RlID09IDYpCisrCXsgCisrCXByaW50ZigiVW5yZWNvZ25pemVk IG1vZGU6ICVzXG4iLCBhbW9kZSk7CisrCXJldHVybiAtMTsKKysJfQorKworKyAgICBtZW1jcHko a2V5WzBdLCBhS2V5LCBua2V5c3opOworKyAgICBpZiAoaVZlYykKKysJbWVtY3B5KGl2WzBdLCBp VmVjLCBBRVNfQkxPQ0tfU0laRSk7CisrICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCW1lbWNw eShwdGV4dFswXSwgdGV4dCwgbGVuKTsKKysgICAgZWxzZQorKwltZW1jcHkoY3RleHRbMF0sIHRl eHQsIGxlbik7CisrICAgIGZvciAoaSA9IDA7IGkgPCAxMDA7ICsraSkKKysJeworKwkvKiBwcmlu dGYoIkl0ZXJhdGlvbiAlZFxuIiwgaSk7ICovCisrCWlmIChpID4gMCkKKysJICAgIHsKKysJICAg IGZwcmludGYocmZwLCJDT1VOVCA9ICVkXG4iLGkpOworKwkgICAgT3V0cHV0VmFsdWUoIktFWSIs a2V5W2ldLG5rZXlzeixyZnAsMCk7CisrCSAgICBpZiAoaW1vZGUgIT0gRUNCKSAgLyogRUNCICov CisrCQlPdXRwdXRWYWx1ZSgiSVYiLGl2W2ldLEFFU19CTE9DS19TSVpFLHJmcCwwKTsKKysJICAg IC8qIE91dHB1dCBDaXBoZXJ0ZXh0IHwgUGxhaW50ZXh0ICovCisrCSAgICBPdXRwdXRWYWx1ZSh0 X3RhZ1tkaXJeMV0sZGlyID8gcHRleHRbMF0gOiBjdGV4dFswXSxsZW4scmZwLAorKwkJCWltb2Rl ID09IENGQjEpOworKwkgICAgfQorKwlmb3IgKGogPSAwOyBqIDwgMTAwMDsgKytqKQorKwkgICAg eworKwkgICAgc3dpdGNoIChpbW9kZSkKKysJCXsKKysJICAgIGNhc2UgRUNCOgorKwkJaWYgKGog PT0gMCkKKysJCSAgICB7IC8qIHNldCB1cCBlbmNyeXB0aW9uICovCisrCQkgICAgcmV0ID0gQUVT VGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBrZXlbaV0sIE5VTEwsIAorKwkJCQkgIGRpciwgIC8q IDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkJCQkgIHB0ZXh0W2pdLCBjdGV4dFtqXSwg bGVuKTsKKysJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQorKwkJCW1lbWNweShwdGV4dFtqKzFd LCBjdGV4dFtqXSwgbGVuKTsKKysJCSAgICBlbHNlCisrCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0 ZXh0W2pdLCBsZW4pOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgaWYgKGRp ciA9PSBYRU5DUllQVCkKKysJCQl7CisrCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRl eHRbal0sIGxlbik7CisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2pdLCBsZW4pOworKwkJ CX0KKysJCSAgICBlbHNlCisrCQkJeworKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0 ZXh0W2pdLCBsZW4pOworKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtqXSwgbGVuKTsKKysJ CQl9CisrCQkgICAgfQorKwkJYnJlYWs7CisrCisrCSAgICBjYXNlIENCQzoKKysJICAgIGNhc2Ug T0ZCOiAgCisrCSAgICBjYXNlIENGQjEyODoKKysJCWlmIChqID09IDApCisrCQkgICAgeworKwkJ ICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwga2V5W2ldLCBpdltpXSwgCisr CQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJCSAgcHRleHRb al0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJbWVt Y3B5KHB0ZXh0W2orMV0sIGl2W2ldLCBsZW4pOworKwkJICAgIGVsc2UKKysJCQltZW1jcHkoY3Rl eHRbaisxXSwgaXZbaV0sIGxlbik7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAg ICBpZiAoZGlyID09IFhFTkNSWVBUKQorKwkJCXsKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0 W2pdLCBwdGV4dFtqXSwgbGVuKTsKKysJCQltZW1jcHkocHRleHRbaisxXSwgY3RleHRbai0xXSwg bGVuKTsKKysJCQl9CisrCQkgICAgZWxzZQorKwkJCXsKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0 ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbai0x XSwgbGVuKTsKKysJCQl9CisrCQkgICAgfQorKwkJYnJlYWs7CisrCisrCSAgICBjYXNlIENGQjg6 CisrCQlpZiAoaiA9PSAwKQorKwkJICAgIHsKKysJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFt b2RlLCBha2V5c3osIGtleVtpXSwgaXZbaV0sIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0 LCAxID0gZW5jcnlwdCAqLworKwkJCQkgIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJCSAg ICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJ RVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7CisrCQkgICAgZWxzZQor KwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIH0K KysJCWlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkgICAgeworKwkJICAgIGlmIChqIDwgMTYpCisr CQkJbWVtY3B5KHB0ZXh0W2orMV0sICZpdltpXVtqXSwgbGVuKTsKKysJCSAgICBlbHNlCisrCQkJ bWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2otMTZdLCBsZW4pOworKwkJICAgIH0KKysJCWVsc2UK KysJCSAgICB7CisrCQkgICAgaWYgKGogPCAxNikKKysJCQltZW1jcHkoY3RleHRbaisxXSwgJml2 W2ldW2pdLCBsZW4pOworKwkJICAgIGVsc2UKKysJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRb ai0xNl0sIGxlbik7CisrCQkgICAgfQorKwkJYnJlYWs7CisrCisrCSAgICBjYXNlIENGQjE6Cisr CQlpZihqID09IDApCisrCQkgICAgeworKyNpZiAwCisrCQkgICAgLyogY29tcGVuc2F0ZSBmb3Ig d3JvbmcgZW5kaWFubmVzcyBvZiBpbnB1dCBmaWxlICovCisrCQkgICAgaWYoaSA9PSAwKQorKwkJ CXB0ZXh0WzBdWzBdPDw9NzsKKysjZW5kaWYKKysJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsYW1v ZGUsYWtleXN6LGtleVtpXSxpdltpXSxkaXIsCisrCQkJCXB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVu KTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZ UFQpCisrCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7CisrCQkg ICAgZWxzZQorKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOwor KworKwkJICAgIH0KKysJCWlmKGRpciA9PSBYRU5DUllQVCkKKysJCSAgICB7CisrCQkgICAgaWYo aiA8IDEyOCkKKysJCQlzYihwdGV4dFtqKzFdLDAsZ2IoaXZbaV0saikpOworKwkJICAgIGVsc2UK KysJCQlzYihwdGV4dFtqKzFdLDAsZ2IoY3RleHRbai0xMjhdLDApKTsKKysJCSAgICB9CisrCQll bHNlCisrCQkgICAgeworKwkJICAgIGlmKGogPCAxMjgpCisrCQkJc2IoY3RleHRbaisxXSwwLGdi KGl2W2ldLGopKTsKKysJCSAgICBlbHNlCisrCQkJc2IoY3RleHRbaisxXSwwLGdiKHB0ZXh0W2ot MTI4XSwwKSk7CisrCQkgICAgfQorKwkJYnJlYWs7CisrCQl9CisrCSAgICB9CisrCS0tajsgLyog cmVzZXQgdG8gbGFzdCBvZiByYW5nZSAqLworKwkvKiBPdXRwdXQgQ2lwaGVydGV4dCB8IFBsYWlu dGV4dCAqLworKwlPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJdLGRpciA/IGN0ZXh0W2pdIDogcHRleHRb al0sbGVuLHJmcCwKKysJCSAgICBpbW9kZSA9PSBDRkIxKTsKKysJZnByaW50ZihyZnAsICJcbiIp OyAgLyogYWRkIHNlcGFyYXRvciAqLworKworKwkvKiBDb21wdXRlIG5leHQgS0VZICovCisrCWlm IChkaXIgPT0gWEVOQ1JZUFQpCisrCSAgICB7CisrCSAgICBpZiAoaW1vZGUgPT0gQ0ZCOCkKKysJ CXsgLyogY3QgPSBDVFtqLTE1XSB8fCBDVFtqLTE0XSB8fCAuLi4gfHwgQ1Rbal0gKi8KKysJCWZv ciAobjEgPSAwLCBuMiA9IG5rZXlzei0xOyBuMSA8IG5rZXlzejsgKytuMSwgLS1uMikKKysJCSAg ICBjaXBoZXJ0ZXh0W24xXSA9IGN0ZXh0W2otbjJdWzBdOworKwkJfQorKwkgICAgZWxzZSBpZihp bW9kZSA9PSBDRkIxKQorKwkJeworKwkJZm9yKG4xPTAsbjI9YWtleXN6LTEgOyBuMSA8IGFrZXlz eiA7ICsrbjEsLS1uMikKKysJCSAgICBzYihjaXBoZXJ0ZXh0LG4xLGdiKGN0ZXh0W2otbjJdLDAp KTsKKysJCX0KKysJICAgIGVsc2UKKysJCXN3aXRjaCAoYWtleXN6KQorKwkJICAgIHsKKysJCWNh c2UgMTI4OgorKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBjdGV4dFtqXSwgMTYpOworKwkJICAg IGJyZWFrOworKwkJY2FzZSAxOTI6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIGN0ZXh0W2ot MV0rOCwgOCk7CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrOCwgY3RleHRbal0sIDE2KTsKKysJ CSAgICBicmVhazsKKysJCWNhc2UgMjU2OgorKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBjdGV4 dFtqLTFdLCAxNik7CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrMTYsIGN0ZXh0W2pdLCAxNik7 CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkgICAgfQorKwllbHNlCisrCSAgICB7CisrCSAg ICBpZiAoaW1vZGUgPT0gQ0ZCOCkKKysJCXsgLyogY3QgPSBDVFtqLTE1XSB8fCBDVFtqLTE0XSB8 fCAuLi4gfHwgQ1Rbal0gKi8KKysJCWZvciAobjEgPSAwLCBuMiA9IG5rZXlzei0xOyBuMSA8IG5r ZXlzejsgKytuMSwgLS1uMikKKysJCSAgICBjaXBoZXJ0ZXh0W24xXSA9IHB0ZXh0W2otbjJdWzBd OworKwkJfQorKwkgICAgZWxzZSBpZihpbW9kZSA9PSBDRkIxKQorKwkJeworKwkJZm9yKG4xPTAs bjI9YWtleXN6LTEgOyBuMSA8IGFrZXlzeiA7ICsrbjEsLS1uMikKKysJCSAgICBzYihjaXBoZXJ0 ZXh0LG4xLGdiKHB0ZXh0W2otbjJdLDApKTsKKysJCX0KKysJICAgIGVsc2UKKysJCXN3aXRjaCAo YWtleXN6KQorKwkJICAgIHsKKysJCWNhc2UgMTI4OgorKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0 LCBwdGV4dFtqXSwgMTYpOworKwkJICAgIGJyZWFrOworKwkJY2FzZSAxOTI6CisrCQkgICAgbWVt Y3B5KGNpcGhlcnRleHQsIHB0ZXh0W2otMV0rOCwgOCk7CisrCQkgICAgbWVtY3B5KGNpcGhlcnRl eHQrOCwgcHRleHRbal0sIDE2KTsKKysJCSAgICBicmVhazsKKysJCWNhc2UgMjU2OgorKwkJICAg IG1lbWNweShjaXBoZXJ0ZXh0LCBwdGV4dFtqLTFdLCAxNik7CisrCQkgICAgbWVtY3B5KGNpcGhl cnRleHQrMTYsIHB0ZXh0W2pdLCAxNik7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkgICAg fQorKwkvKiBDb21wdXRlIG5leHQga2V5OiBLZXlbaSsxXSA9IEtleVtpXSB4b3IgY3QgKi8KKysJ Zm9yIChuID0gMDsgbiA8IG5rZXlzejsgKytuKQorKwkgICAga2V5W2krMV1bbl0gPSBrZXlbaV1b bl0gXiBjaXBoZXJ0ZXh0W25dOworKwkKKysJLyogQ29tcHV0ZSBuZXh0IElWIGFuZCB0ZXh0ICov CisrCWlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCSAgICB7CisrCSAgICBzd2l0Y2ggKGltb2RlKQor KwkJeworKwkgICAgY2FzZSBFQ0I6CisrCQltZW1jcHkocHRleHRbMF0sIGN0ZXh0W2pdLCBBRVNf QkxPQ0tfU0laRSk7CisrCQlicmVhazsKKysJICAgIGNhc2UgQ0JDOgorKwkgICAgY2FzZSBPRkI6 CisrCSAgICBjYXNlIENGQjEyODoKKysJCW1lbWNweShpdltpKzFdLCBjdGV4dFtqXSwgQUVTX0JM T0NLX1NJWkUpOworKwkJbWVtY3B5KHB0ZXh0WzBdLCBjdGV4dFtqLTFdLCBBRVNfQkxPQ0tfU0la RSk7CisrCQlicmVhazsKKysJICAgIGNhc2UgQ0ZCODoKKysJCS8qIElWW2krMV0gPSBjdCAqLwor KwkJZm9yIChuMSA9IDAsIG4yID0gMTU7IG4xIDwgMTY7ICsrbjEsIC0tbjIpCisrCQkgICAgaXZb aSsxXVtuMV0gPSBjdGV4dFtqLW4yXVswXTsKKysJCXB0ZXh0WzBdWzBdID0gY3RleHRbai0xNl1b MF07CisrCQlicmVhazsKKysJICAgIGNhc2UgQ0ZCMToKKysJCWZvcihuMT0wLG4yPTEyNyA7IG4x IDwgMTI4IDsgKytuMSwtLW4yKQorKwkJICAgIHNiKGl2W2krMV0sbjEsZ2IoY3RleHRbai1uMl0s MCkpOworKwkJcHRleHRbMF1bMF09Y3RleHRbai0xMjhdWzBdJjB4ODA7CisrCQlicmVhazsKKysJ CX0KKysJICAgIH0KKysJZWxzZQorKwkgICAgeworKwkgICAgc3dpdGNoIChpbW9kZSkKKysJCXsK KysJICAgIGNhc2UgRUNCOgorKwkJbWVtY3B5KGN0ZXh0WzBdLCBwdGV4dFtqXSwgQUVTX0JMT0NL X1NJWkUpOworKwkJYnJlYWs7CisrCSAgICBjYXNlIENCQzoKKysJICAgIGNhc2UgT0ZCOgorKwkg ICAgY2FzZSBDRkIxMjg6CisrCQltZW1jcHkoaXZbaSsxXSwgcHRleHRbal0sIEFFU19CTE9DS19T SVpFKTsKKysJCW1lbWNweShjdGV4dFswXSwgcHRleHRbai0xXSwgQUVTX0JMT0NLX1NJWkUpOwor KwkJYnJlYWs7CisrCSAgICBjYXNlIENGQjg6CisrCQlmb3IgKG4xID0gMCwgbjIgPSAxNTsgbjEg PCAxNjsgKytuMSwgLS1uMikKKysJCSAgICBpdltpKzFdW24xXSA9IHB0ZXh0W2otbjJdWzBdOwor KwkJY3RleHRbMF1bMF0gPSBwdGV4dFtqLTE2XVswXTsKKysJCWJyZWFrOworKwkgICAgY2FzZSBD RkIxOgorKwkJZm9yKG4xPTAsbjI9MTI3IDsgbjEgPCAxMjggOyArK24xLC0tbjIpCisrCQkgICAg c2IoaXZbaSsxXSxuMSxnYihwdGV4dFtqLW4yXSwwKSk7CisrCQljdGV4dFswXVswXT1wdGV4dFtq LTEyOF1bMF0mMHg4MDsKKysJCWJyZWFrOworKwkJfQorKwkgICAgfQorKwl9CisrICAgIAorKyAg ICByZXR1cm4gcmV0OworKyAgICB9CisrCisrLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0qLworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor KyAgIyBDb25maWcgaW5mbyBmb3Igdi1vbmUKKysgICMgQUVTVlMgTU1UIHRlc3QgZGF0YSBmb3Ig RUNCCisrICAjIFN0YXRlIDogRW5jcnlwdCBhbmQgRGVjcnlwdAorKyAgIyBLZXkgTGVuZ3RoIDog MjU2CisrICAjIEZyaSBBdWcgMzAgMDQ6MDc6MjIgUE0KKysgIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0qLworKworK2ludCBwcm9jX2ZpbGUoY2hhciAqcnFmaWxlLCBjaGFyICpyc3BmaWxl KQorKyAgICB7CisrICAgIGNoYXIgYWZuWzI1Nl0sIHJmblsyNTZdOworKyAgICBGSUxFICphZnAg PSBOVUxMLCAqcmZwID0gTlVMTDsKKysgICAgY2hhciBpYnVmWzIwNDhdOworKyAgICBjaGFyIHRi dWZbMjA0OF07CisrICAgIGludCBpbGVuLCBsZW4sIHJldCA9IDA7CisrICAgIGNoYXIgYWxnb1s4 XSA9ICIiOworKyAgICBjaGFyIGFtb2RlWzhdID0gIiI7CisrICAgIGNoYXIgYXRlc3RbOF0gPSAi IjsKKysgICAgaW50IGFrZXlzeiA9IDA7CisrICAgIHVuc2lnbmVkIGNoYXIgaVZlY1syMF0sIGFL ZXlbNDBdOworKyAgICBpbnQgZGlyID0gLTEsIGVyciA9IDAsIHN0ZXAgPSAwOworKyAgICB1bnNp Z25lZCBjaGFyIHBsYWludGV4dFsyMDQ4XTsKKysgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0 WzIwNDhdOworKyAgICBjaGFyICpycDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBF VlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKyAgICBpZiAoIXJxZmlsZSB8fCAhKCpycWZp bGUpKQorKwl7CisrCXByaW50ZigiTm8gcmVxIGZpbGVcbiIpOworKwlyZXR1cm4gLTE7CisrCX0K KysgICAgc3RyY3B5KGFmbiwgcnFmaWxlKTsKKysKKysgICAgaWYgKChhZnAgPSBmb3BlbihhZm4s ICJyIikpID09IE5VTEwpCisrCXsKKysJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNc biIsIAorKwkgICAgICAgYWZuLCBzdHJlcnJvcihlcnJubykpOworKwlyZXR1cm4gLTE7CisrCX0K KysgICAgaWYgKCFyc3BmaWxlKQorKwl7CisrCXN0cmNweShyZm4sYWZuKTsKKysJcnA9c3Ryc3Ry KHJmbiwicmVxLyIpOworKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgorKwlpZiAoIXJwKQorKwkg ICAgcnA9c3Ryc3RyKHJmbiwicmVxXFwiKTsKKysjZW5kaWYKKysJYXNzZXJ0KHJwKTsKKysJbWVt Y3B5KHJwLCJyc3AiLDMpOworKwlycCA9IHN0cnN0cihyZm4sICIucmVxIik7CisrCW1lbWNweShy cCwgIi5yc3AiLCA0KTsKKysJcnNwZmlsZSA9IHJmbjsKKysJfQorKyAgICBpZiAoKHJmcCA9IGZv cGVuKHJzcGZpbGUsICJ3IikpID09IE5VTEwpCisrCXsKKysJcHJpbnRmKCJDYW5ub3Qgb3BlbiBm aWxlOiAlcywgJXNcbiIsIAorKwkgICAgICAgcmZuLCBzdHJlcnJvcihlcnJubykpOworKwlmY2xv c2UoYWZwKTsKKysJYWZwID0gTlVMTDsKKysJcmV0dXJuIC0xOworKwl9CisrICAgIHdoaWxlICgh ZXJyICYmIChmZ2V0cyhpYnVmLCBzaXplb2YoaWJ1ZiksIGFmcCkpICE9IE5VTEwpCisrCXsKKysJ dGlkeV9saW5lKHRidWYsIGlidWYpOworKwlpbGVuID0gc3RybGVuKGlidWYpOworKwkvKiAgICAg IHByaW50Zigic3RlcD0lZCBpYnVmPSVzIixzdGVwLGlidWYpOyAqLworKwlzd2l0Y2ggKHN0ZXAp CisrCSAgICB7CisrCWNhc2UgMDogIC8qIHJlYWQgcHJlYW1ibGUgKi8KKysJICAgIGlmIChpYnVm WzBdID09ICdcbicpCisrCQl7IC8qIGVuZCBvZiBwcmVhbWJsZSAqLworKwkJaWYgKCgqYWxnbyA9 PSAnXDAnKSB8fAorKwkJICAgICgqYW1vZGUgPT0gJ1wwJykgfHwKKysJCSAgICAoYWtleXN6ID09 IDApKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIk1pc3NpbmcgQWxnb3JpdGhtLCBNb2RlIG9y IEtleVNpemUgKCVzLyVzLyVkKVxuIiwKKysJCQkgICBhbGdvLGFtb2RlLGFrZXlzeik7CisrCQkg ICAgZXJyID0gMTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGZwdXRzKGli dWYsIHJmcCk7CisrCQkgICAgKysgc3RlcDsKKysJCSAgICB9CisrCQl9CisrCSAgICBlbHNlIGlm IChpYnVmWzBdICE9ICcjJykKKysJCXsKKysJCXByaW50ZigiSW52YWxpZCBwcmVhbWJsZSBpdGVt OiAlc1xuIiwgaWJ1Zik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeyAvKiBw cm9jZXNzIHByZWFtYmxlICovCisrCQljaGFyICp4cCwgKnBwID0gaWJ1ZisyOworKwkJaW50IG47 CisrCQlpZiAoYWtleXN6KQorKwkJICAgIHsgLyogaW5zZXJ0IGN1cnJlbnQgdGltZSAmIGRhdGUg Ki8KKysJCSAgICB0aW1lX3QgcnRpbSA9IHRpbWUoMCk7CisrCQkgICAgZnByaW50ZihyZnAsICIj ICVzIiwgY3RpbWUoJnJ0aW0pKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAg IGZwdXRzKGlidWYsIHJmcCk7CisrCQkgICAgaWYgKHN0cm5jbXAocHAsICJBRVNWUyAiLCA2KSA9 PSAwKQorKwkJCXsKKysJCQlzdHJjcHkoYWxnbywgIkFFUyIpOworKwkJCS8qIGdldCB0ZXN0IHR5 cGUgKi8KKysJCQlwcCArPSA2OworKwkJCXhwID0gc3RyY2hyKHBwLCAnICcpOworKwkJCW4gPSB4 cC1wcDsKKysJCQlzdHJuY3B5KGF0ZXN0LCBwcCwgbik7CisrCQkJYXRlc3Rbbl0gPSAnXDAnOwor KwkJCS8qIGdldCBtb2RlICovCisrCQkJeHAgPSBzdHJyY2hyKHBwLCAnICcpOyAvKiBnZXQgbW9k ZSIgKi8KKysJCQluID0gc3RybGVuKHhwKzEpLTE7CisrCQkJc3RybmNweShhbW9kZSwgeHArMSwg bik7CisrCQkJYW1vZGVbbl0gPSAnXDAnOworKwkJCS8qIGFtb2RlWzNdID0gJ1wwJzsgKi8KKysJ CQlpZiAoVkVSQk9TRSkKKysJCQkJcHJpbnRmKCJUZXN0ID0gJXMsIE1vZGUgPSAlc1xuIiwgYXRl c3QsIGFtb2RlKTsKKysJCQl9CisrCQkgICAgZWxzZSBpZiAoc3RybmNhc2VjbXAocHAsICJLZXkg TGVuZ3RoIDogIiwgMTMpID09IDApCisrCQkJeworKwkJCWFrZXlzeiA9IGF0b2kocHArMTMpOwor KwkJCWlmIChWRVJCT1NFKQorKwkJCQlwcmludGYoIktleSBzaXplID0gJWRcbiIsIGFrZXlzeik7 CisrCQkJfQorKwkJICAgIH0KKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDE6ICAvKiBb RU5DUllQVF0gfCBbREVDUllQVF0gKi8KKysJICAgIGlmIChpYnVmWzBdID09ICdbJykKKysJCXsK KysJCWZwdXRzKGlidWYsIHJmcCk7CisrCQkrK3N0ZXA7CisrCQlpZiAoc3RybmNhc2VjbXAoaWJ1 ZiwgIltFTkNSWVBUXSIsIDkpID09IDApCisrCQkgICAgZGlyID0gMTsKKysJCWVsc2UgaWYgKHN0 cm5jYXNlY21wKGlidWYsICJbREVDUllQVF0iLCA5KSA9PSAwKQorKwkJICAgIGRpciA9IDA7Cisr CQllbHNlCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBrZXl3b3JkOiAlc1xuIiwg aWJ1Zik7CisrCQkgICAgZXJyID0gMTsKKysJCSAgICB9CisrCQlicmVhazsKKysJCX0KKysJICAg IGVsc2UgaWYgKGRpciA9PSAtMSkKKysJCXsKKysJCWVyciA9IDE7CisrCQlwcmludGYoIk1pc3Np bmcgRU5DUllQVC9ERUNSWVBUIGtleXdvcmRcbiIpOworKwkJYnJlYWs7CisrCQl9CisrCSAgICBl bHNlIAorKwkJc3RlcCA9IDI7CisrCisrCWNhc2UgMjogLyogS0VZID0geHh4eCAqLworKwkgICAg ZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmKCppYnVmID09ICdcbicpCisrCQlicmVhazsKKysJ ICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJDT1VOVCA9ICIsOCkpCisrCQlicmVhazsKKysKKysJ ICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiS0VZID0gIiwgNikgIT0gMCkKKysJCXsKKysJCXBy aW50ZigiTWlzc2luZyBLRVlcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVsc2UKKysJ CXsKKysJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNiwgYUtleSk7CisrCQlpZiAobGVuIDwg MCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7CisrCQkgICAgZXJy ID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCVByaW50VmFsdWUoIktFWSIsIGFLZXks IGxlbik7CisrCQlpZiAoc3RyY21wKGFtb2RlLCAiRUNCIikgPT0gMCkKKysJCSAgICB7CisrCQkg ICAgbWVtc2V0KGlWZWMsIDAsIHNpemVvZihpVmVjKSk7CisrCQkgICAgc3RlcCA9IChkaXIpPyA0 OiA1OyAgLyogbm8gaXZlYyBmb3IgRUNCICovCisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgICsr c3RlcDsKKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDM6IC8qIElWID0geHh4eCAqLwor KwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiSVYg PSAiLCA1KSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIElWXG4iKTsKKysJCWVyciA9 IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVm KzUsIGlWZWMpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52 YWxpZCBJVlxuIik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJ CVByaW50VmFsdWUoIklWIiwgaVZlYywgbGVuKTsKKysJCXN0ZXAgPSAoZGlyKT8gNDogNTsKKysJ CX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDQ6IC8qIFBMQUlOVEVYVCA9IHh4eHggKi8KKysJ ICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIlBMQUlO VEVYVCA9ICIsIDEyKSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIFBMQUlOVEVYVFxu Iik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJaW50IG5uID0gc3Ry bGVuKGlidWYrMTIpOworKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQorKwkJICAgIGxlbj1i aW50MmJpbihpYnVmKzEyLG5uLTEscGxhaW50ZXh0KTsKKysJCWVsc2UKKysJCSAgICBsZW49aGV4 MmJpbihpYnVmKzEyLCBwbGFpbnRleHQpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJ ICAgIHByaW50ZigiSW52YWxpZCBQTEFJTlRFWFQ6ICVzIiwgaWJ1ZisxMik7CisrCQkgICAgZXJy ID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCWlmIChsZW4gPj0gc2l6ZW9mKHBsYWlu dGV4dCkpCisrCQkgICAgeworKwkJICAgIHByaW50ZigiQnVmZmVyIG92ZXJmbG93XG4iKTsKKysJ CSAgICB9CisrCQlQcmludFZhbHVlKCJQTEFJTlRFWFQiLCAodW5zaWduZWQgY2hhciopcGxhaW50 ZXh0LCBsZW4pOworKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpID09IDApICAvKiBNb250ZSBD YXJsbyBUZXN0ICovCisrCQkgICAgeworKwkJICAgIGlmKGRvX21jdChhbW9kZSwgYWtleXN6LCBh S2V5LCBpVmVjLCAKKysJCQkgICAgICBkaXIsICh1bnNpZ25lZCBjaGFyKilwbGFpbnRleHQsIGxl biwgCisrCQkJICAgICAgcmZwKSA8IDApCisrCQkJRVhJVCgxKTsKKysJCSAgICB9CisrCQllbHNl CisrCQkgICAgeworKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwgYUtl eSwgaVZlYywgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisr CQkJCSAgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOworKwkJICAgIE91dHB1dFZhbHVlKCJD SVBIRVJURVhUIixjaXBoZXJ0ZXh0LGxlbixyZnAsCisrCQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEi KSk7CisrCQkgICAgfQorKwkJc3RlcCA9IDY7CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2Fz ZSA1OiAvKiBDSVBIRVJURVhUID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJ ICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiQ0lQSEVSVEVYVCA9ICIsIDEzKSAhPSAwKQorKwkJ eworKwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAg ZWxzZQorKwkJeworKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQorKwkJICAgIGxlbj1iaW50 MmJpbihpYnVmKzEzLHN0cmxlbihpYnVmKzEzKS0xLGNpcGhlcnRleHQpOworKwkJZWxzZQorKwkJ ICAgIGxlbiA9IGhleDJiaW4oaWJ1ZisxMyxjaXBoZXJ0ZXh0KTsKKysJCWlmIChsZW4gPCAwKQor KwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQgQ0lQSEVSVEVYVFxuIik7CisrCQkgICAg ZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysKKysJCVByaW50VmFsdWUoIkNJUEhF UlRFWFQiLCBjaXBoZXJ0ZXh0LCBsZW4pOworKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpID09 IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCisrCQkgICAgeworKwkJICAgIGRvX21jdChhbW9k ZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKKysJCQkgICBkaXIsIGNpcGhlcnRleHQsIGxlbiwgcmZw KTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0 eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5 cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJCSAgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOwor KwkJICAgIE91dHB1dFZhbHVlKCJQTEFJTlRFWFQiLCh1bnNpZ25lZCBjaGFyICopcGxhaW50ZXh0 LGxlbixyZnAsCisrCQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7CisrCQkgICAgfQorKwkJc3Rl cCA9IDY7CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSA2OgorKwkgICAgaWYgKGlidWZb MF0gIT0gJ1xuJykKKysJCXsKKysJCWVyciA9IDE7CisrCQlwcmludGYoIk1pc3NpbmcgdGVybWlu YXRvclxuIik7CisrCQl9CisrCSAgICBlbHNlIGlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSAhPSAw KQorKwkJeyAvKiBNQ1QgYWxyZWFkeSBhZGRlZCB0ZXJtaW5hdGluZyBubCAqLworKwkJZnB1dHMo aWJ1ZiwgcmZwKTsKKysJCX0KKysJICAgIHN0ZXAgPSAxOworKwkgICAgYnJlYWs7CisrCSAgICB9 CisrCX0KKysgICAgaWYgKHJmcCkKKysJZmNsb3NlKHJmcCk7CisrICAgIGlmIChhZnApCisrCWZj bG9zZShhZnApOworKyAgICByZXR1cm4gZXJyOworKyAgICB9CisrCisrLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyAgUHJvY2Vzc2VzIGVpdGhl ciBhIHNpbmdsZSBmaWxlIG9yIAorKyAgYSBzZXQgb2YgZmlsZXMgd2hvc2UgbmFtZXMgYXJlIHBh c3NlZCBpbiBhIGZpbGUuCisrICBBIHNpbmdsZSBmaWxlIGlzIHNwZWNpZmllZCBhczoKKysgICAg YWVzX3Rlc3QgLWYgeHh4LnJlcQorKyAgQSBzZXQgb2YgZmlsZXMgaXMgc3BlY2lmaWVkIGFzOgor KyAgICBhZXNfdGVzdCAtZCB4eHh4eC54eHgKKysgIFRoZSBkZWZhdWx0IGlzOiAtZCByZXEudHh0 CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwor K2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKysgICAgeworKyAgICBjaGFyICpycWxp c3QgPSAicmVxLnR4dCIsICpyc3BmaWxlID0gTlVMTDsKKysgICAgRklMRSAqZnAgPSBOVUxMOwor KyAgICBjaGFyIGZuWzI1MF0gPSAiIiwgcmZuWzI1Nl0gPSAiIjsKKysgICAgaW50IGZfb3B0ID0g MCwgZF9vcHQgPSAxOworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYoIUZJUFNfbW9k ZV9zZXQoMSkpCisrCXsKKysJZG9fcHJpbnRfZXJyb3JzKCk7CisrCUVYSVQoMSk7CisrCX0KKysj ZW5kaWYKKysgICAgaWYgKGFyZ2MgPiAxKQorKwl7CisrCWlmIChzdHJjYXNlY21wKGFyZ3ZbMV0s ICItZCIpID09IDApCisrCSAgICB7CisrCSAgICBkX29wdCA9IDE7CisrCSAgICB9CisrCWVsc2Ug aWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1mIikgPT0gMCkKKysJICAgIHsKKysJICAgIGZfb3B0 ID0gMTsKKysJICAgIGRfb3B0ID0gMDsKKysJICAgIH0KKysJZWxzZQorKwkgICAgeworKwkgICAg cHJpbnRmKCJJbnZhbGlkIHBhcmFtZXRlcjogJXNcbiIsIGFyZ3ZbMV0pOworKwkgICAgcmV0dXJu IDA7CisrCSAgICB9CisrCWlmIChhcmdjIDwgMykKKysJICAgIHsKKysJICAgIHByaW50ZigiTWlz c2luZyBwYXJhbWV0ZXJcbiIpOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9CisrCWlmIChkX29w dCkKKysJICAgIHJxbGlzdCA9IGFyZ3ZbMl07CisrCWVsc2UKKysJICAgIHsKKysJICAgIHN0cmNw eShmbiwgYXJndlsyXSk7CisrCSAgICByc3BmaWxlID0gYXJndlszXTsKKysJICAgIH0KKysJfQor KyAgICBpZiAoZF9vcHQpCisrCXsgLyogbGlzdCBvZiBmaWxlcyAoZGlyZWN0b3J5KSAqLworKwlp ZiAoIShmcCA9IGZvcGVuKHJxbGlzdCwgInIiKSkpCisrCSAgICB7CisrCSAgICBwcmludGYoIkNh bm5vdCBvcGVuIHJlcSBsaXN0IGZpbGVcbiIpOworKwkgICAgcmV0dXJuIC0xOworKwkgICAgfQor Kwl3aGlsZSAoZmdldHMoZm4sIHNpemVvZihmbiksIGZwKSkKKysJICAgIHsKKysJICAgIHN0cnRv ayhmbiwgIlxyXG4iKTsKKysJICAgIHN0cmNweShyZm4sIGZuKTsKKysJICAgIGlmIChWRVJCT1NF KQorKwkJcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgcmZuKTsKKysJICAgIGlmIChwcm9jX2Zp bGUocmZuLCByc3BmaWxlKSkKKysJCXsKKysJCXByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVk IGZvcjogJXMgPDw8XG4iLCByZm4pOworKwkJRVhJVCgxKTsKKysJCX0KKysJICAgIH0KKysJZmNs b3NlKGZwKTsKKysJfQorKyAgICBlbHNlIC8qIHNpbmdsZSBmaWxlICovCisrCXsKKysJaWYgKFZF UkJPU0UpCisrCSAgICBwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCBmbik7CisrCWlmIChwcm9j X2ZpbGUoZm4sIHJzcGZpbGUpKQorKwkgICAgeworKwkgICAgcHJpbnRmKCI+Pj4gUHJvY2Vzc2lu ZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIGZuKTsKKysJICAgIH0KKysJfQorKyAgICBFWElUKDAp OworKyAgICByZXR1cm4gMDsKKysgICAgfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfY21hY3Rlc3QuYy5maXBzIG9wZW5zc2wt MS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2NtYWN0ZXN0LmMKKy0tLSBvcGVuc3Ns LTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19jbWFjdGVzdC5jLmZpcHMJMjAxMi0w Mi0yOSAxMDozMzowMi43OTAyOTQ4NjIgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2Ny eXB0by9maXBzL2NhdnMvZmlwc19jbWFjdGVzdC5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzkwMjk0 ODYyICswMTAwCitAQCAtMCwwICsxLDUxNyBAQAorKy8qIGZpcHNfY21hY3Rlc3QuYyAqLworKy8q IFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0 aGUgT3BlblNTTAorKyAqIHByb2plY3QgMjAwNS4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAq IENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6Cisr ICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJP cGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRv CisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0 dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wu b3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tu b3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK KysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws CisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKgorKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNv ZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24g KHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKgorKyAqLworKworKyNkZWZpbmUgT1BFTlNTTF9GSVBT QVBJCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1 ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NtYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9G SVBTCisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50 ZigiTm8gRklQUyBDTUFDIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKworKyNl bHNlCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlICJmaXBzX3V0bC5o IgorKworK3N0YXRpYyBpbnQgY21hY190ZXN0KGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRklM RSAqb3V0LCBGSUxFICppbiwKKysJaW50IG1vZGUsIGludCBLbGVuX2NvdW50c19rZXlzLCBpbnQg a25vd25fa2V5bGVuKTsKKytzdGF0aWMgaW50IHByaW50X2NtYWNfZ2VuKGNvbnN0IEVWUF9DSVBI RVIgKmNpcGhlciwgRklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hhciAqS2V5LCBpbnQgS2xlbiwK KysJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1zZ2xlbiwKKysJCWludCBUbGVuKTsKKytzdGF0 aWMgaW50IHByaW50X2NtYWNfdmVyKGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRklMRSAqb3V0 LAorKwkJdW5zaWduZWQgY2hhciAqS2V5LCBpbnQgS2xlbiwKKysJCXVuc2lnbmVkIGNoYXIgKk1z ZywgaW50IE1zZ2xlbiwKKysJCXVuc2lnbmVkIGNoYXIgKk1hYywgaW50IE1hY2xlbiwKKysJCWlu dCBUbGVuKTsKKysKKysjaWZkZWYgRklQU19BTEdWUworK2ludCBmaXBzX2NtYWN0ZXN0X21haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKyNlbHNlCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQorKyNlbmRpZgorKwl7CisrCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7Cisr CWludCBtb2RlID0gMDsJCS8qIDAgPT4gR2VuZXJhdGUsIDEgPT4gVmVyaWZ5ICovCisrCWludCBL bGVuX2NvdW50c19rZXlzID0gMDsgLyogMCA9PiBLbGVuIGlzIHNpemUgb2Ygb25lIGtleQorKwkJ CQkgICAgIDEgPT4gS2xlbiBpcyBhbW91bnQgb2Yga2V5cworKwkJCQkgICovCisrCWludCBrbm93 bl9rZXlsZW4gPSAwOwkvKiBPbmx5IHNldCB3aGVuIEtsZW5fY291bnRzX2tleXMgPSAxICovCisr CWNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciA9IDA7CisrCWludCByZXQgPSAxOworKwlmaXBzX2Fs Z3Rlc3RfaW5pdCgpOworKworKwl3aGlsZSAoYXJnYyA+IDEgJiYgYXJndlsxXVswXSA9PSAnLScp CisrCQl7CisrCQlzd2l0Y2ggKGFyZ3ZbMV1bMV0pCisrCQkJeworKwkJY2FzZSAnYSc6CisrCQkJ eworKwkJCWNoYXIgKnAgPSAmYXJndlsxXVsyXTsKKysJCQlpZiAoKnAgPT0gJ1wwJykKKysJCQkJ eworKwkJCQlpZiAoYXJnYyA8PSAyKQorKwkJCQkJeworKwkJCQkJZnByaW50ZihzdGRlcnIsICJP cHRpb24gJXMgbmVlZHMgYSB2YWx1ZVxuIiwgYXJndlsxXSk7CisrCQkJCQlnb3RvIGVuZDsKKysJ CQkJCX0KKysJCQkJYXJndisrOworKwkJCQlhcmdjLS07CisrCQkJCXAgPSAmYXJndlsxXVswXTsK KysJCQkJfQorKwkJCWlmICghc3RyY21wKHAsICJhZXMxMjgiKSkKKysJCQkJY2lwaGVyID0gRVZQ X2Flc18xMjhfY2JjKCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcChwLCAiYWVzMTkyIikpCisrCQkJ CWNpcGhlciA9IEVWUF9hZXNfMTkyX2NiYygpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAocCwgImFl czI1NiIpKQorKwkJCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jYmMoKTsKKysJCQllbHNlIGlmICgh c3RyY21wKHAsICJ0ZGVhMyIpIHx8ICFzdHJjbXAocCwgInRkZXMzIikpCisrCQkJCXsKKysJCQkJ Y2lwaGVyID0gRVZQX2Rlc19lZGUzX2NiYygpOworKwkJCQlLbGVuX2NvdW50c19rZXlzID0gMTsK KysJCQkJa25vd25fa2V5bGVuID0gODsKKysJCQkJfQorKwkJCWVsc2UKKysJCQkJeworKwkJCQlm cHJpbnRmKHN0ZGVyciwgIlVua25vd24gYWxnb3JpdGhtICVzXG4iLCBwKTsKKysJCQkJZ290byBl bmQ7CisrCQkJCX0KKysJCQl9CisrCQkJYnJlYWs7CisrCQljYXNlICdnJzoKKysJCQltb2RlID0g MDsKKysJCQlicmVhazsKKysJCWNhc2UgJ3YnOgorKwkJCW1vZGUgPSAxOworKwkJCWJyZWFrOwor KwkJZGVmYXVsdDoKKysJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gb3B0aW9uICVzXG4iLCBh cmd2WzFdKTsKKysJCQlnb3RvIGVuZDsKKysJCQl9CisrCQlhcmd2Kys7CisrCQlhcmdjLS07Cisr CQl9CisrCWlmIChhcmdjID09IDEpCisrCQlpbiA9IHN0ZGluOworKwllbHNlCisrCQlpbiA9IGZv cGVuKGFyZ3ZbMV0sICJyIik7CisrCisrCWlmIChhcmdjIDwgMikKKysJCW91dCA9IHN0ZG91dDsK KysJZWxzZQorKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKKysKKysJaWYgKCFpbikKKysJ CXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3Jc biIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghb3V0KQorKwkJeworKwkJZnByaW50 ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290 byBlbmQ7CisrCQl9CisrCisrCWlmICghY21hY190ZXN0KGNpcGhlciwgb3V0LCBpbiwgbW9kZSwK KysJCQlLbGVuX2NvdW50c19rZXlzLCBrbm93bl9rZXlsZW4pKQorKwkJeworKwkJZnByaW50Zihz dGRlcnIsICJGQVRBTCBjbWFjIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7CisrCQlnb3RvIGVu ZDsKKysJCX0KKysJZWxzZQorKwkJcmV0ID0gMDsKKysKKysJZW5kOgorKworKwlpZiAoaW4gJiYg KGluICE9IHN0ZGluKSkKKysJCWZjbG9zZShpbik7CisrCWlmIChvdXQgJiYgKG91dCAhPSBzdGRv dXQpKQorKwkJZmNsb3NlKG91dCk7CisrCisrCXJldHVybiByZXQ7CisrCisrCX0KKysKKysjZGVm aW5lIENNQUNfVEVTVF9NQVhMSU5FTEVOCTE1MDAwMAorKworK2ludCBjbWFjX3Rlc3QoY29uc3Qg RVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxFICpvdXQsIEZJTEUgKmluLAorKwlpbnQgbW9kZSwgaW50 IEtsZW5fY291bnRzX2tleXMsIGludCBrbm93bl9rZXlsZW4pCisrCXsKKysJY2hhciAqbGluZWJ1 ZiwgKm9saW5lYnVmLCAqcCwgKnE7CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysJdW5zaWdu ZWQgY2hhciAqKktleXMgPSBOVUxMLCAqTXNnID0gTlVMTCwgKk1hYyA9IE5VTEw7CisrCXVuc2ln bmVkIGNoYXIgKktleSA9IE5VTEw7CisrCWludCBDb3VudCwgS2xlbiwgTWxlbiwgVGxlbjsKKysJ bG9uZyBLZXlsZW4sIE1zZ2xlbiwgTWFjbGVuOworKwlpbnQgcmV0ID0gMDsKKysJaW50IGxudW0g PSAwOworKworKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKENNQUNfVEVTVF9NQVhMSU5FTEVO KTsKKysJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKENNQUNfVEVTVF9NQVhMSU5FTEVOKTsKKysK KysJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKKysJCWdvdG8gZXJyb3I7CisrCisrCUNvdW50 ID0gLTE7CisrCUtsZW4gPSAtMTsKKysJTWxlbiA9IC0xOworKwlUbGVuID0gLTE7CisrCisrCXdo aWxlIChmZ2V0cyhvbGluZWJ1ZiwgQ01BQ19URVNUX01BWExJTkVMRU4sIGluKSkKKysJCXsKKysJ CWxudW0rKzsKKysJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7CisrCQlrZXl3b3JkID0gbGlu ZWJ1ZjsKKysJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVu c2lnbmVkIGNoYXIpKmtleXdvcmQpKQorKwkJCWtleXdvcmQrKzsKKysKKysJCS8qIFNraXAgY29t bWVudHMgKi8KKysJCWlmIChrZXl3b3JkWzBdID09ICcjJykKKysJCQl7CisrCQkJaWYgKGZwdXRz KG9saW5lYnVmLCBvdXQpIDwgMCkKKysJCQkJZ290byBlcnJvcjsKKysJCQljb250aW51ZTsKKysJ CQl9CisrCisrCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KKysJCXAgPSBzdHJjaHIobGluZWJ1Ziwg Jz0nKTsKKysKKysJCS8qIElmIG5vID0gb3Igc3RhcnRzIHdpdGggWyAoZm9yIFtMPTIwXSBsaW5l KSBqdXN0IGNvcHkgKi8KKysJCWlmICghcCkKKysJCQl7CisrCQkJaWYgKGZwdXRzKG9saW5lYnVm LCBvdXQpIDwgMCkKKysJCQkJZ290byBlcnJvcjsKKysJCQljb250aW51ZTsKKysJCQl9CisrCisr CQlxID0gcCAtIDE7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KKysJCXdoaWxl IChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCQkqcS0tID0gMDsKKysKKysJCSpwID0g MDsKKysJCXZhbHVlID0gcCArIDE7CisrCisrCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9t IHZhbHVlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQorKwkJ CXZhbHVlKys7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwor KwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisrCQl3aGlsZSAoKnAgPT0gJ1xu JyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkqcC0tID0gMDsKKysKKysJCWlm ICghc3RyY21wKGtleXdvcmQsICJDb3VudCIpKQorKwkJCXsKKysJCQlpZiAoQ291bnQgIT0gLTEp CisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJQ291bnQgPSBhdG9pKHZhbHVlKTsKKysJCQlp ZiAoQ291bnQgPCAwKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgIktsZW4iKSkKKysJCQl7CisrCQkJaWYgKEtsZW4gIT0gLTEpCisr CQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJS2xlbiA9IGF0b2kodmFsdWUpOworKwkJCWlmIChL bGVuIDwgMCkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlpZiAoS2xlbl9jb3VudHNfa2V5 cykKKysJCQkJeworKwkJCQlLZXlzID0gT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKCpLZXlzKSAqIEts ZW4pOworKwkJCQltZW1zZXQoS2V5cywgJ1wwJywgc2l6ZW9mKCpLZXlzKSAqIEtsZW4pOworKwkJ CQl9CisrCQkJZWxzZQorKwkJCQl7CisrCQkJCUtleXMgPSBPUEVOU1NMX21hbGxvYyhzaXplb2Yo KktleXMpKTsKKysJCQkJbWVtc2V0KEtleXMsICdcMCcsIHNpemVvZigqS2V5cykpOworKwkJCQl9 CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTWxlbiIpKQorKwkJCXsKKysJ CQlpZiAoTWxlbiAhPSAtMSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlNbGVuID0gYXRv aSh2YWx1ZSk7CisrCQkJaWYgKE1sZW4gPCAwKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJ CX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlRsZW4iKSkKKysJCQl7CisrCQkJaWYg KFRsZW4gIT0gLTEpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJVGxlbiA9IGF0b2kodmFs dWUpOworKwkJCWlmIChUbGVuIDwgMCkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9Cisr CQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJLZXkiKSAmJiAhS2xlbl9jb3VudHNfa2V5cykK KysJCQl7CisrCQkJaWYgKEtleXNbMF0pCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJS2V5 c1swXSA9IGhleDJiaW5fbSh2YWx1ZSwgJktleWxlbik7CisrCQkJaWYgKCFLZXlzWzBdKQorKwkJ CQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJuY21wKGtleXdvcmQs ICJLZXkiLCAzKSAmJiBLbGVuX2NvdW50c19rZXlzKQorKwkJCXsKKysJCQlpbnQga2V5bnVtID0g YXRvaShrZXl3b3JkICsgMyk7CisrCQkJaWYgKCFrZXludW0gfHwga2V5bnVtID4gS2xlbiB8fCBL ZXlzW2tleW51bS0xXSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlLZXlzW2tleW51bS0x XSA9IGhleDJiaW5fbSh2YWx1ZSwgJktleWxlbik7CisrCQkJaWYgKCFLZXlzW2tleW51bS0xXSkK KysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsICJNc2ciKSkKKysJCQl7CisrCQkJaWYgKE1zZykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsK KysJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZNc2dsZW4pOworKwkJCWlmICghTXNnKQorKwkJ CQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwg Ik1hYyIpKQorKwkJCXsKKysJCQlpZiAobW9kZSA9PSAwKQorKwkJCQljb250aW51ZTsKKysJCQlp ZiAoTWFjKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCU1hYyA9IGhleDJiaW5fbSh2YWx1 ZSwgJk1hY2xlbik7CisrCQkJaWYgKCFNYWMpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJ fQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUmVzdWx0IikpCisrCQkJeworKwkJCWlm IChtb2RlID09IDEpCisrCQkJCWNvbnRpbnVlOworKwkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJ fQorKwkJZWxzZQorKwkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCisrCQlmcHV0cyhvbGluZWJ1Ziwg b3V0KTsKKysKKysJCWlmIChLZXlzICYmIE1zZyAmJiAoIW1vZGUgfHwgTWFjKSAmJiAoVGxlbiA+ IDApICYmIChLbGVuID4gMCkpCisrCQkJeworKwkJCWlmIChLbGVuX2NvdW50c19rZXlzKQorKwkJ CQl7CisrCQkJCWludCB4OworKwkJCQlLZXkgPSBPUEVOU1NMX21hbGxvYyhLbGVuICoga25vd25f a2V5bGVuKTsKKysJCQkJZm9yICh4ID0gMDsgeCA8IEtsZW47IHgrKykKKysJCQkJCXsKKysJCQkJ CW1lbWNweShLZXkgKyB4ICoga25vd25fa2V5bGVuLAorKwkJCQkJCUtleXNbeF0sIGtub3duX2tl eWxlbik7CisrCQkJCQlPUEVOU1NMX2ZyZWUoS2V5c1t4XSk7CisrCQkJCQl9CisrCQkJCUtsZW4g Kj0ga25vd25fa2V5bGVuOworKwkJCQl9CisrCQkJZWxzZQorKwkJCQl7CisrCQkJCUtleSA9IE9Q RU5TU0xfbWFsbG9jKEtsZW4pOworKwkJCQltZW1jcHkoS2V5LCBLZXlzWzBdLCBLbGVuKTsKKysJ CQkJT1BFTlNTTF9mcmVlKEtleXNbMF0pOworKwkJCQl9CisrCQkJT1BFTlNTTF9mcmVlKEtleXMp OworKworKwkJCXN3aXRjaChtb2RlKQorKwkJCQl7CisrCQkJY2FzZSAwOgorKwkJCQlpZiAoIXBy aW50X2NtYWNfZ2VuKGNpcGhlciwgb3V0LAorKwkJCQkJCUtleSwgS2xlbiwKKysJCQkJCQlNc2cs IE1sZW4sCisrCQkJCQkJVGxlbikpCisrCQkJCQlnb3RvIGVycm9yOworKwkJCQlicmVhazsKKysJ CQljYXNlIDE6CisrCQkJCWlmICghcHJpbnRfY21hY192ZXIoY2lwaGVyLCBvdXQsCisrCQkJCQkJ S2V5LCBLbGVuLAorKwkJCQkJCU1zZywgTWxlbiwKKysJCQkJCQlNYWMsIE1hY2xlbiwKKysJCQkJ CQlUbGVuKSkKKysJCQkJCWdvdG8gZXJyb3I7CisrCQkJCWJyZWFrOworKwkJCQl9CisrCisrCQkJ T1BFTlNTTF9mcmVlKEtleSk7CisrCQkJS2V5ID0gTlVMTDsKKysJCQlPUEVOU1NMX2ZyZWUoTXNn KTsKKysJCQlNc2cgPSBOVUxMOworKwkJCU9QRU5TU0xfZnJlZShNYWMpOworKwkJCU1hYyA9IE5V TEw7CisrCQkJS2xlbiA9IC0xOworKwkJCU1sZW4gPSAtMTsKKysJCQlUbGVuID0gLTE7CisrCQkJ Q291bnQgPSAtMTsKKysJCQl9CisrCQl9CisrCisrCisrCXJldCA9IDE7CisrCisrCisrCWVycm9y OgorKworKwlpZiAob2xpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOworKwlpZiAo bGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKKysJaWYgKEtleSkKKysJCU9QRU5T U0xfZnJlZShLZXkpOworKwlpZiAoTXNnKQorKwkJT1BFTlNTTF9mcmVlKE1zZyk7CisrCWlmIChN YWMpCisrCQlPUEVOU1NMX2ZyZWUoTWFjKTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJcGFyc2Vf ZXJyb3I6CisrCisrCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2lu ZyBsaW5lICVkXG4iLCBsbnVtKTsKKysKKysJZ290byBlcnJvcjsKKysKKysJfQorKworK3N0YXRp YyBpbnQgcHJpbnRfY21hY19nZW4oY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxFICpvdXQs CisrCQl1bnNpZ25lZCBjaGFyICpLZXksIGludCBLbGVuLAorKwkJdW5zaWduZWQgY2hhciAqTXNn LCBpbnQgTWxlbiwKKysJCWludCBUbGVuKQorKwl7CisrCWludCByYywgaTsKKysJc2l6ZV90IHJl c2xlbjsKKysJdW5zaWduZWQgY2hhciByZXNbMTI4XTsKKysJQ01BQ19DVFggKmNtYWNfY3R4ID0g Q01BQ19DVFhfbmV3KCk7CisrCisrCUNNQUNfSW5pdChjbWFjX2N0eCwgS2V5LCBLbGVuLCBjaXBo ZXIsIDApOworKwlDTUFDX1VwZGF0ZShjbWFjX2N0eCwgTXNnLCBNbGVuKTsKKysJaWYgKCFDTUFD X0ZpbmFsKGNtYWNfY3R4LCByZXMsICZyZXNsZW4pKQorKwkJeworKwkJZnB1dHMoIkVycm9yIGNh bGN1bGF0aW5nIENNQUNcbiIsIHN0ZGVycik7CisrCQlyYyA9IDA7CisrCQl9CisrCWVsc2UgaWYg KFRsZW4gPiAoaW50KXJlc2xlbikKKysJCXsKKysJCWZwdXRzKCJQYXJhbWV0ZXIgZXJyb3IsIFRs ZW4gPiBDTUFDIGxlbmd0aFxuIiwgc3RkZXJyKTsKKysJCXJjID0gMDsKKysJCX0KKysJZWxzZQor KwkJeworKwkJZnB1dHMoIk1hYyA9ICIsIG91dCk7CisrCQlmb3IgKGkgPSAwOyBpIDwgVGxlbjsg aSsrKQorKwkJCWZwcmludGYob3V0LCAiJTAyeCIsIHJlc1tpXSk7CisrCQlmcHV0cyhSRVNQX0VP TCwgb3V0KTsKKysJCXJjID0gMTsKKysJCX0KKysJQ01BQ19DVFhfZnJlZShjbWFjX2N0eCk7Cisr CXJldHVybiByYzsKKysJfQorKworK3N0YXRpYyBpbnQgcHJpbnRfY21hY192ZXIoY29uc3QgRVZQ X0NJUEhFUiAqY2lwaGVyLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpLZXksIGludCBL bGVuLAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTWxlbiwKKysJCXVuc2lnbmVkIGNoYXIg Kk1hYywgaW50IE1hY2xlbiwKKysJCWludCBUbGVuKQorKwl7CisrCWludCByYyA9IDE7CisrCXNp emVfdCByZXNsZW47CisrCXVuc2lnbmVkIGNoYXIgcmVzWzEyOF07CisrCUNNQUNfQ1RYICpjbWFj X2N0eCA9IENNQUNfQ1RYX25ldygpOworKworKwlDTUFDX0luaXQoY21hY19jdHgsIEtleSwgS2xl biwgY2lwaGVyLCAwKTsKKysJQ01BQ19VcGRhdGUoY21hY19jdHgsIE1zZywgTWxlbik7CisrCWlm ICghQ01BQ19GaW5hbChjbWFjX2N0eCwgcmVzLCAmcmVzbGVuKSkKKysJCXsKKysJCWZwdXRzKCJF cnJvciBjYWxjdWxhdGluZyBDTUFDXG4iLCBzdGRlcnIpOworKwkJcmMgPSAwOworKwkJfQorKwll bHNlIGlmIChUbGVuID4gKGludClyZXNsZW4pCisrCQl7CisrCQlmcHV0cygiUGFyYW1ldGVyIGVy cm9yLCBUbGVuID4gQ01BQyBsZW5ndGhcbiIsIHN0ZGVycik7CisrCQlyYyA9IDA7CisrCQl9Cisr CWVsc2UgaWYgKFRsZW4gIT0gTWFjbGVuKQorKwkJeworKwkJZnB1dHMoIlBhcmFtZXRlciBlcnJv ciwgVGxlbiAhPSByZXN1bHRpbmcgTWFjIGxlbmd0aFxuIiwgc3RkZXJyKTsKKysJCXJjID0gMDsK KysJCX0KKysJZWxzZQorKwkJeworKwkJaWYgKCFtZW1jbXAoTWFjLCByZXMsIE1hY2xlbikpCisr CQkJZnB1dHMoIlJlc3VsdCA9IFAiIFJFU1BfRU9MLCBvdXQpOworKwkJZWxzZQorKwkJCWZwdXRz KCJSZXN1bHQgPSBGIiBSRVNQX0VPTCwgb3V0KTsKKysJCX0KKysJQ01BQ19DVFhfZnJlZShjbWFj X2N0eCk7CisrCXJldHVybiByYzsKKysJfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jLmZpcHMgb3BlbnNzbC0x LjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jCistLS0gb3BlbnNzbC0x LjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jLmZpcHMJMjAxMi0wMi0y OSAxMDozMzowMi43OTAyOTQ4NjIgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0 by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMJMjAxMi0wMi0yOSAxMDozMzowMi43OTAyOTQ4NjIg KzAxMDAKK0BAIC0wLDAgKzEsNzAyIEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQg KGMpIDIwMDQgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoK 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 CisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgIE5JU1QgREVT IE1vZGVzIG9mIE9wZXJhdGlvbiBWYWxpZGF0aW9uIFN5c3RlbQorKyAgVGVzdCBQcm9ncmFtCisr CisrICBCYXNlZCBvbiB0aGUgQUVTIFZhbGlkYXRpb24gU3VpdGUsIHdoaWNoIHdhczoKKysgIERv bmF0ZWQgdG8gT3BlblNTTCBieToKKysgIFYtT05FIENvcnBvcmF0aW9uCisrICAyMDI1MCBDZW50 dXJ5IEJsdmQsIFN1aXRlIDMwMAorKyAgR2VybWFudG93biwgTUQgMjA4NzQKKysgIFUuUy5BLgor KyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisr I2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJp bmcuaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1 ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysKKysjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KKysjaW5jbHVkZSAiZV9vcy5oIgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisr CisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50ZigiTm8g RklQUyBERVMgc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrCisrI2Vsc2UKKysK KysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisr I2RlZmluZSBERVNfQkxPQ0tfU0laRSA4CisrCisrI2RlZmluZSBWRVJCT1NFIDAKKysKKytpbnQg REVTVGVzdChFVlBfQ0lQSEVSX0NUWCAqY3R4LAorKwkgICAgY2hhciAqYW1vZGUsIGludCBha2V5 c3osIHVuc2lnbmVkIGNoYXIgKmFLZXksIAorKwkgICAgdW5zaWduZWQgY2hhciAqaVZlYywgCisr CSAgICBpbnQgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCSAgICB1bnNp Z25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGNoYXIgKmluLCBpbnQgbGVuKQorKyAgICB7CisrICAg IGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciA9IE5VTEw7CisrCisrICAgIGlmIChha2V5c3ogIT0g MTkyKQorKwl7CisrCXByaW50ZigiSW52YWxpZCBrZXkgc2l6ZTogJWRcbiIsIGFrZXlzeik7Cisr CUVYSVQoMSk7CisrCX0KKysKKysgICAgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJDQkMiKSA9PSAw KQorKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2JjKCk7CisrICAgIGVsc2UgaWYgKHN0cmNhc2Vj bXAoYW1vZGUsICJFQ0IiKSA9PSAwKQorKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfZWNiKCk7Cisr ICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJDRkI2NCIpID09IDApCisrCWNpcGhlciA9 IEVWUF9kZXNfZWRlM19jZmI2NCgpOworKyAgICBlbHNlIGlmIChzdHJuY2FzZWNtcChhbW9kZSwg Ik9GQiIsIDMpID09IDApCisrCWNpcGhlciA9IEVWUF9kZXNfZWRlM19vZmIoKTsKKysgICAgZWxz ZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCOCIpKQorKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNf Y2ZiOCgpOworKyAgICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikpCisrCWNpcGhl ciA9IEVWUF9kZXNfZWRlM19jZmIxKCk7CisrICAgIGVsc2UKKysJeworKwlwcmludGYoIlVua25v d24gbW9kZTogJXNcbiIsIGFtb2RlKTsKKysJRVhJVCgxKTsKKysJfQorKworKyAgICBpZiAoRVZQ X0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGFLZXksIGlWZWMsIGRpcikgPD0gMCkK KysJcmV0dXJuIDA7CisrICAgIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikpCisrCU1fRVZQ X0NJUEhFUl9DVFhfc2V0X2ZsYWdzKGN0eCwgRVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUyk7Cisr ICAgIEVWUF9DaXBoZXIoY3R4LCBvdXQsIGluLCBsZW4pOworKworKyAgICByZXR1cm4gMTsKKysg ICAgfQorKworK3ZvaWQgRGVidWdWYWx1ZShjaGFyICp0YWcsIHVuc2lnbmVkIGNoYXIgKnZhbCwg aW50IGxlbikKKysgICAgeworKyAgICBjaGFyIG9idWZbMjA0OF07CisrICAgIGludCBvbGVuOwor KyAgICBvbGVuID0gYmluMmhleCh2YWwsIGxlbiwgb2J1Zik7CisrICAgIHByaW50ZigiJXMgPSAl LipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOworKyAgICB9CisrCisrdm9pZCBzaGlmdGluKHVuc2ln bmVkIGNoYXIgKmRzdCx1bnNpZ25lZCBjaGFyICpzcmMsaW50IG5iaXRzKQorKyAgICB7CisrICAg IGludCBuOworKworKyAgICAvKiBtb3ZlIHRoZSBieXRlcy4uLiAqLworKyAgICBtZW1tb3ZlKGRz dCxkc3QrbmJpdHMvOCwzKjgtbmJpdHMvOCk7CisrICAgIC8qIGFwcGVuZCBuZXcgZGF0YSAqLwor KyAgICBtZW1jcHkoZHN0KzMqOC1uYml0cy84LHNyYywobmJpdHMrNykvOCk7CisrICAgIC8qIGxl ZnQgc2hpZnQgdGhlIGJpdHMgKi8KKysgICAgaWYobmJpdHMlOCkKKysJZm9yKG49MCA7IG4gPCAz KjggOyArK24pCisrCSAgICBkc3Rbbl09KGRzdFtuXSA8PCAobmJpdHMlOCkpfChkc3RbbisxXSA+ PiAoOC1uYml0cyU4KSk7CisrICAgIH0JCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrY2hhciAqdF90YWdbMl0gPSB7IlBMQUlOVEVYVCIs ICJDSVBIRVJURVhUIn07CisrY2hhciAqdF9tb2RlWzZdID0geyJDQkMiLCJFQ0IiLCJPRkIiLCJD RkIxIiwiQ0ZCOCIsIkNGQjY0In07CisrZW51bSBNb2RlIHtDQkMsIEVDQiwgT0ZCLCBDRkIxLCBD RkI4LCBDRkI2NH07CisraW50IFNpemVzWzZdPXs2NCw2NCw2NCwxLDgsNjR9OworKworK3ZvaWQg ZG9fbWN0KGNoYXIgKmFtb2RlLCAKKysJICAgIGludCBha2V5c3osIGludCBudW1rZXlzLCB1bnNp Z25lZCBjaGFyICpha2V5LHVuc2lnbmVkIGNoYXIgKml2ZWMsCisrCSAgICBpbnQgZGlyLCB1bnNp Z25lZCBjaGFyICp0ZXh0LCBpbnQgbGVuLAorKwkgICAgRklMRSAqcmZwKQorKyAgICB7CisrICAg IGludCBpLGltb2RlOworKyAgICB1bnNpZ25lZCBjaGFyIG5rWzQqOF07IC8qIGxvbmdlc3Qga2V5 KzggKi8KKysgICAgdW5zaWduZWQgY2hhciB0ZXh0MFs4XTsKKysKKysgICAgZm9yIChpbW9kZT0w IDsgaW1vZGUgPCA2IDsgKytpbW9kZSkKKysJaWYoIXN0cmNtcChhbW9kZSx0X21vZGVbaW1vZGVd KSkKKysJICAgIGJyZWFrOworKyAgICBpZiAoaW1vZGUgPT0gNikKKysJeyAKKysJcHJpbnRmKCJV bnJlY29nbml6ZWQgbW9kZTogJXNcbiIsIGFtb2RlKTsKKysJRVhJVCgxKTsKKysJfQorKworKyAg ICBmb3IoaT0wIDsgaSA8IDQwMCA7ICsraSkKKysJeworKwlpbnQgajsKKysJaW50IG47CisrCWlu dCBrcD1ha2V5c3ovNjQ7CisrCXVuc2lnbmVkIGNoYXIgb2xkX2l2WzhdOworKwlFVlBfQ0lQSEVS X0NUWCBjdHg7CisrCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCisrCWZwcmludGYocmZw LCJcbkNPVU5UID0gJWRcbiIsaSk7CisrCWlmKGtwID09IDEpCisrCSAgICBPdXRwdXRWYWx1ZSgi S0VZIixha2V5LDgscmZwLDApOworKwllbHNlCisrCSAgICBmb3Iobj0wIDsgbiA8IGtwIDsgKytu KQorKwkJeworKwkJZnByaW50ZihyZnAsIktFWSVkIixuKzEpOworKwkJT3V0cHV0VmFsdWUoIiIs YWtleStuKjgsOCxyZnAsMCk7CisrCQl9CisrCisrCWlmKGltb2RlICE9IEVDQikKKysJICAgIE91 dHB1dFZhbHVlKCJJViIsaXZlYyw4LHJmcCwwKTsKKysJT3V0cHV0VmFsdWUodF90YWdbZGlyXjFd LHRleHQsbGVuLHJmcCxpbW9kZSA9PSBDRkIxKTsKKysjaWYgMAorKwkvKiBjb21wZW5zYXRlIGZv ciBlbmRpYW5uZXNzICovCisrCWlmKGltb2RlID09IENGQjEpCisrCSAgICB0ZXh0WzBdPDw9NzsK KysjZW5kaWYKKysJbWVtY3B5KHRleHQwLHRleHQsOCk7CisrCisrCWZvcihqPTAgOyBqIDwgMTAw MDAgOyArK2opCisrCSAgICB7CisrCSAgICB1bnNpZ25lZCBjaGFyIG9sZF90ZXh0WzhdOworKwor KwkgICAgbWVtY3B5KG9sZF90ZXh0LHRleHQsOCk7CisrCSAgICBpZihqID09IDApCisrCQl7Cisr CQltZW1jcHkob2xkX2l2LGl2ZWMsOCk7CisrCQlERVNUZXN0KCZjdHgsYW1vZGUsYWtleXN6LGFr ZXksaXZlYyxkaXIsdGV4dCx0ZXh0LGxlbik7CisrCQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlt ZW1jcHkob2xkX2l2LGN0eC5pdiw4KTsKKysJCUVWUF9DaXBoZXIoJmN0eCx0ZXh0LHRleHQsbGVu KTsKKysJCX0KKysJICAgIGlmKGogPT0gOTk5OSkKKysJCXsKKysJCU91dHB1dFZhbHVlKHRfdGFn W2Rpcl0sdGV4dCxsZW4scmZwLGltb2RlID09IENGQjEpOworKwkJLyoJCW1lbWNweShpdmVjLHRl eHQsOCk7ICovCisrCQl9CisrCSAgICAvKgkgICAgRGVidWdWYWx1ZSgiaXYiLGN0eC5pdiw4KTsg Ki8KKysJICAgIC8qIGFjY3VtdWxhdGUgbWF0ZXJpYWwgZm9yIHRoZSBuZXh0IGtleSAqLworKwkg ICAgc2hpZnRpbihuayx0ZXh0LFNpemVzW2ltb2RlXSk7CisrCSAgICAvKgkgICAgRGVidWdWYWx1 ZSgibmsiLG5rLDI0KTsqLworKwkgICAgaWYoKGRpciAmJiAoaW1vZGUgPT0gQ0ZCMSB8fCBpbW9k ZSA9PSBDRkI4IHx8IGltb2RlID09IENGQjY0CisrCQkJfHwgaW1vZGUgPT0gQ0JDKSkgfHwgaW1v ZGUgPT0gT0ZCKQorKwkJbWVtY3B5KHRleHQsb2xkX2l2LDgpOworKworKwkgICAgaWYoIWRpciAm JiAoaW1vZGUgPT0gQ0ZCMSB8fCBpbW9kZSA9PSBDRkI4IHx8IGltb2RlID09IENGQjY0KSkKKysJ CXsKKysJCS8qIHRoZSB0ZXN0IHNwZWNpZmllcyB1c2luZyB0aGUgb3V0cHV0IG9mIHRoZSByYXcg REVTIG9wZXJhdGlvbgorKwkJICAgd2hpY2ggd2UgZG9uJ3QgaGF2ZSwgc28gcmVjb25zdHJ1Y3Qg aXQuLi4gKi8KKysJCWZvcihuPTAgOyBuIDwgOCA7ICsrbikKKysJCSAgICB0ZXh0W25dXj1vbGRf dGV4dFtuXTsKKysJCX0KKysJICAgIH0KKysJZm9yKG49MCA7IG4gPCA4IDsgKytuKQorKwkgICAg YWtleVtuXV49bmtbMTYrbl07CisrCWZvcihuPTAgOyBuIDwgOCA7ICsrbikKKysJICAgIGFrZXlb OCtuXV49bmtbOCtuXTsKKysJZm9yKG49MCA7IG4gPCA4IDsgKytuKQorKwkgICAgYWtleVsxNitu XV49bmtbbl07CisrCWlmKG51bWtleXMgPCAzKQorKwkgICAgbWVtY3B5KCZha2V5WzIqOF0sYWtl eSw4KTsKKysJaWYobnVta2V5cyA8IDIpCisrCSAgICBtZW1jcHkoJmFrZXlbOF0sYWtleSw4KTsK KysJREVTX3NldF9vZGRfcGFyaXR5KChERVNfY2Jsb2NrICopYWtleSk7CisrCURFU19zZXRfb2Rk X3Bhcml0eSgoREVTX2NibG9jayAqKShha2V5KzgpKTsKKysJREVTX3NldF9vZGRfcGFyaXR5KChE RVNfY2Jsb2NrICopKGFrZXkrMTYpKTsKKysJbWVtY3B5KGl2ZWMsY3R4Lml2LDgpOworKworKwkv KiBwb2ludGxlc3MgZXhlcmNpc2UgLSB0aGUgZmluYWwgdGV4dCBkb2Vzbid0IGRlcGVuZCBvbiB0 aGUKKysJICAgaW5pdGlhbCB0ZXh0IGluIE9GQiBtb2RlLCBzbyB3aG8gY2FyZXMgd2hhdCBpdCBp cz8gKFdobworKwkgICBkZXNpZ25lZCB0aGVzZSB0ZXN0cz8pICovCisrCWlmKGltb2RlID09IE9G QikKKysJICAgIGZvcihuPTAgOyBuIDwgOCA7ICsrbikKKysJCXRleHRbbl09dGV4dDBbbl1eb2xk X2l2W25dOworKwl9CisrICAgIH0KKysgICAgCisraW50IHByb2NfZmlsZShjaGFyICpycWZpbGUs IGNoYXIgKnJzcGZpbGUpCisrICAgIHsKKysgICAgY2hhciBhZm5bMjU2XSwgcmZuWzI1Nl07Cisr ICAgIEZJTEUgKmFmcCA9IE5VTEwsICpyZnAgPSBOVUxMOworKyAgICBjaGFyIGlidWZbMjA0OF0s IHRidWZbMjA0OF07CisrICAgIGludCBpbGVuLCBsZW4sIHJldCA9IDA7CisrICAgIGNoYXIgYW1v ZGVbOF0gPSAiIjsKKysgICAgY2hhciBhdGVzdFsxMDBdID0gIiI7CisrICAgIGludCBha2V5c3o9 MDsKKysgICAgdW5zaWduZWQgY2hhciBpVmVjWzIwXSwgYUtleVs0MF07CisrICAgIGludCBkaXIg PSAtMSwgZXJyID0gMCwgc3RlcCA9IDA7CisrICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzIw NDhdOworKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbMjA0OF07CisrICAgIGNoYXIgKnJw OworKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7CisrICAgIGludCBudW1rZXlzPTE7CisrICAgIEVW UF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCisrICAgIGlmICghcnFmaWxlIHx8ICEoKnJxZmls ZSkpCisrCXsKKysJcHJpbnRmKCJObyByZXEgZmlsZVxuIik7CisrCXJldHVybiAtMTsKKysJfQor KyAgICBzdHJjcHkoYWZuLCBycWZpbGUpOworKworKyAgICBpZiAoKGFmcCA9IGZvcGVuKGFmbiwg InIiKSkgPT0gTlVMTCkKKysJeworKwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xu IiwgCisrCSAgICAgICBhZm4sIHN0cmVycm9yKGVycm5vKSk7CisrCXJldHVybiAtMTsKKysJfQor KyAgICBpZiAoIXJzcGZpbGUpCisrCXsKKysJc3RyY3B5KHJmbixhZm4pOworKwlycD1zdHJzdHIo cmZuLCJyZXEvIik7CisrI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCisrCWlmICghcnApCisrCSAg ICBycD1zdHJzdHIocmZuLCJyZXFcXCIpOworKyNlbmRpZgorKwlhc3NlcnQocnApOworKwltZW1j cHkocnAsInJzcCIsMyk7CisrCXJwID0gc3Ryc3RyKHJmbiwgIi5yZXEiKTsKKysJbWVtY3B5KHJw LCAiLnJzcCIsIDQpOworKwlyc3BmaWxlID0gcmZuOworKwl9CisrICAgIGlmICgocmZwID0gZm9w ZW4ocnNwZmlsZSwgInciKSkgPT0gTlVMTCkKKysJeworKwlwcmludGYoIkNhbm5vdCBvcGVuIGZp bGU6ICVzLCAlc1xuIiwgCisrCSAgICAgICByZm4sIHN0cmVycm9yKGVycm5vKSk7CisrCWZjbG9z ZShhZnApOworKwlhZnAgPSBOVUxMOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgd2hpbGUgKCFl cnIgJiYgKGZnZXRzKGlidWYsIHNpemVvZihpYnVmKSwgYWZwKSkgIT0gTlVMTCkKKysJeworKwl0 aWR5X2xpbmUodGJ1ZiwgaWJ1Zik7CisrCWlsZW4gPSBzdHJsZW4oaWJ1Zik7CisrCS8qCXByaW50 Zigic3RlcD0lZCBpYnVmPSVzIixzdGVwLGlidWYpOyovCisrCWlmKHN0ZXAgPT0gMyAmJiAhc3Ry Y21wKGFtb2RlLCJFQ0IiKSkKKysJICAgIHsKKysJICAgIG1lbXNldChpVmVjLCAwLCBzaXplb2Yo aVZlYykpOworKwkgICAgc3RlcCA9IChkaXIpPyA0OiA1OyAgLyogbm8gaXZlYyBmb3IgRUNCICov CisrCSAgICB9CisrCXN3aXRjaCAoc3RlcCkKKysJICAgIHsKKysJY2FzZSAwOiAgLyogcmVhZCBw cmVhbWJsZSAqLworKwkgICAgaWYgKGlidWZbMF0gPT0gJ1xuJykKKysJCXsgLyogZW5kIG9mIHBy ZWFtYmxlICovCisrCQlpZiAoKmFtb2RlID09ICdcMCcpCisrCQkgICAgeworKwkJICAgIHByaW50 ZigiTWlzc2luZyBNb2RlXG4iKTsKKysJCSAgICBlcnIgPSAxOworKwkJICAgIH0KKysJCWVsc2UK KysJCSAgICB7CisrCQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCSAgICArKyBzdGVwOworKwkJ ICAgIH0KKysJCX0KKysJICAgIGVsc2UgaWYgKGlidWZbMF0gIT0gJyMnKQorKwkJeworKwkJcHJp bnRmKCJJbnZhbGlkIHByZWFtYmxlIGl0ZW06ICVzXG4iLCBpYnVmKTsKKysJCWVyciA9IDE7Cisr CQl9CisrCSAgICBlbHNlCisrCQl7IC8qIHByb2Nlc3MgcHJlYW1ibGUgKi8KKysJCWNoYXIgKnhw LCAqcHAgPSBpYnVmKzI7CisrCQlpbnQgbjsKKysJCWlmKCphbW9kZSkKKysJCSAgICB7IC8qIGlu c2VydCBjdXJyZW50IHRpbWUgJiBkYXRlICovCisrCQkgICAgdGltZV90IHJ0aW0gPSB0aW1lKDAp OworKwkJICAgIGZwcmludGYocmZwLCAiIyAlcyIsIGN0aW1lKCZydGltKSk7CisrCQkgICAgfQor KwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkJICAgIGlmKCFz dHJuY21wKHBwLCJJTlZFUlNFICIsOCkgfHwgIXN0cm5jbXAocHAsIkRFUyAiLDQpCisrCQkgICAg ICAgfHwgIXN0cm5jbXAocHAsIlRERVMgIiw1KQorKwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJQ RVJNVVRBVElPTiAiLDEyKQorKwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJTVUJTVElUVVRJT04g IiwxMykKKysJCSAgICAgICB8fCAhc3RybmNtcChwcCwiVkFSSUFCTEUgIiw5KSkKKysJCQl7Cisr CQkJLyogZ2V0IHRlc3QgdHlwZSAqLworKwkJCWlmKCFzdHJuY21wKHBwLCJERVMgIiw0KSkKKysJ CQkgICAgcHArPTQ7CisrCQkJZWxzZSBpZighc3RybmNtcChwcCwiVERFUyAiLDUpKQorKwkJCSAg ICBwcCs9NTsKKysJCQl4cCA9IHN0cmNocihwcCwgJyAnKTsKKysJCQluID0geHAtcHA7CisrCQkJ c3RybmNweShhdGVzdCwgcHAsIG4pOworKwkJCWF0ZXN0W25dID0gJ1wwJzsKKysJCQkvKiBnZXQg bW9kZSAqLworKwkJCXhwID0gc3RycmNocihwcCwgJyAnKTsgLyogZ2V0IG1vZGUiICovCisrCQkJ biA9IHN0cmxlbih4cCsxKS0xOworKwkJCXN0cm5jcHkoYW1vZGUsIHhwKzEsIG4pOworKwkJCWFt b2RlW25dID0gJ1wwJzsKKysJCQkvKiBhbW9kZVszXSA9ICdcMCc7ICovCisrCQkJaWYgKFZFUkJP U0UpCisrCQkJCXByaW50ZigiVGVzdD0lcywgTW9kZT0lc1xuIixhdGVzdCxhbW9kZSk7CisrCQkJ fQorKwkJICAgIH0KKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDE6ICAvKiBbRU5DUllQ VF0gfCBbREVDUllQVF0gKi8KKysJICAgIGlmKGlidWZbMF0gPT0gJ1xuJykKKysJCWJyZWFrOwor KwkgICAgaWYgKGlidWZbMF0gPT0gJ1snKQorKwkJeworKwkJZnB1dHMoaWJ1ZiwgcmZwKTsKKysJ CSsrc3RlcDsKKysJCWlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0VOQ1JZUFRdIiwgOSkgPT0gMCkK KysJCSAgICBkaXIgPSAxOworKwkJZWxzZSBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltERUNSWVBU XSIsIDkpID09IDApCisrCQkgICAgZGlyID0gMDsKKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAg cHJpbnRmKCJJbnZhbGlkIGtleXdvcmQ6ICVzXG4iLCBpYnVmKTsKKysJCSAgICBlcnIgPSAxOwor KwkJICAgIH0KKysJCWJyZWFrOworKwkJfQorKwkgICAgZWxzZSBpZiAoZGlyID09IC0xKQorKwkJ eworKwkJZXJyID0gMTsKKysJCXByaW50ZigiTWlzc2luZyBFTkNSWVBUL0RFQ1JZUFQga2V5d29y ZFxuIik7CisrCQlicmVhazsKKysJCX0KKysJICAgIGVsc2UgCisrCQlzdGVwID0gMjsKKysKKysJ Y2FzZSAyOiAvKiBLRVkgPSB4eHh4ICovCisrCSAgICBpZigqaWJ1ZiA9PSAnXG4nKQorKwkJewor KwkgICAgICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCQlicmVhazsKKysgICAgICAgICAgICAgICAg fQorKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIkNPVU5UID0gIiw4KSkKKysJCXsKKysJICAg ICAgICBmcHV0cyhpYnVmLCByZnApOworKwkJYnJlYWs7CisrICAgICAgICAgICAgICAgIH0KKysJ ICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJDT1VOVD0iLDYpKQorKwkJeworKwkgICAgICAgIGZw dXRzKGlidWYsIHJmcCk7CisrCQlicmVhazsKKysgICAgICAgICAgICAgICAgfQorKwkgICAgaWYo IXN0cm5jYXNlY21wKGlidWYsIk51bUtleXMgPSAiLDEwKSkKKysJCXsKKysJCW51bWtleXM9YXRv aShpYnVmKzEwKTsKKysJCWJyZWFrOworKwkJfQorKwkgIAorKwkgICAgZnB1dHMoaWJ1ZiwgcmZw KTsKKysJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJLRVkgPSAiLDYpKQorKwkJeworKwkJYWtl eXN6PTY0OworKwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis2LCBhS2V5KTsKKysJCWlmIChs ZW4gPCAwKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsKKysJCSAg ICBlcnI9MTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCQlQcmludFZhbHVlKCJLRVkiLCBh S2V5LCBsZW4pOworKwkJKytzdGVwOworKwkJfQorKwkgICAgZWxzZSBpZighc3RybmNhc2VjbXAo aWJ1ZiwiS0VZcyA9ICIsNykpCisrCQl7CisrCQlha2V5c3o9NjQqMzsKKysJCWxlbj1oZXgyYmlu KGlidWYrNyxhS2V5KTsKKysJCWlmKGxlbiAhPSA4KQorKwkJICAgIHsKKysJCSAgICBwcmludGYo IkludmFsaWQgS0VZXG4iKTsKKysJCSAgICBlcnI9MTsKKysJCSAgICBicmVhazsKKysJCSAgICB9 CisrCQltZW1jcHkoYUtleSs4LGFLZXksOCk7CisrCQltZW1jcHkoYUtleSsxNixhS2V5LDgpOwor KwkJaWJ1Zls0XT0nXDAnOworKwkJUHJpbnRWYWx1ZSgiS0VZcyIsYUtleSxsZW4pOworKwkJKytz dGVwOworKwkJfQorKwkgICAgZWxzZSBpZighc3RybmNhc2VjbXAoaWJ1ZiwiS0VZIiwzKSkKKysJ CXsKKysJCWludCBuPWlidWZbM10tJzEnOworKworKwkJYWtleXN6PTY0KjM7CisrCQlsZW49aGV4 MmJpbihpYnVmKzcsYUtleStuKjgpOworKwkJaWYobGVuICE9IDgpCisrCQkgICAgeworKwkJICAg IHByaW50ZigiSW52YWxpZCBLRVlcbiIpOworKwkJICAgIGVycj0xOworKwkJICAgIGJyZWFrOwor KwkJICAgIH0KKysJCWlidWZbNF09J1wwJzsKKysJCVByaW50VmFsdWUoaWJ1ZixhS2V5LGxlbik7 CisrCQlpZihuID09IDIpCisrCQkgICAgKytzdGVwOworKwkJfQorKwkgICAgZWxzZQorKwkJewor KwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgYnJl YWs7CisrCisrCWNhc2UgMzogLyogSVYgPSB4eHh4ICovCisrCSAgICBmcHV0cyhpYnVmLCByZnAp OworKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJJViA9ICIsIDUpICE9IDApCisrCQl7Cisr CQlwcmludGYoIk1pc3NpbmcgSVZcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVsc2UK KysJCXsKKysJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNSwgaVZlYyk7CisrCQlpZiAobGVu IDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIElWXG4iKTsKKysJCSAgICBl cnIgPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJUHJpbnRWYWx1ZSgiSVYiLCBpVmVj LCBsZW4pOworKwkJc3RlcCA9IChkaXIpPyA0OiA1OworKwkJfQorKwkgICAgYnJlYWs7CisrCisr CWNhc2UgNDogLyogUExBSU5URVhUID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsK KysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiUExBSU5URVhUID0gIiwgMTIpICE9IDApCisr CQl7CisrCQlwcmludGYoIk1pc3NpbmcgUExBSU5URVhUXG4iKTsKKysJCWVyciA9IDE7CisrCQl9 CisrCSAgICBlbHNlCisrCQl7CisrCQlpbnQgbm4gPSBzdHJsZW4oaWJ1ZisxMik7CisrCQlpZigh c3RyY21wKGFtb2RlLCJDRkIxIikpCisrCQkgICAgbGVuPWJpbnQyYmluKGlidWYrMTIsbm4tMSxw bGFpbnRleHQpOworKwkJZWxzZQorKwkJICAgIGxlbj1oZXgyYmluKGlidWYrMTIsIHBsYWludGV4 dCk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIFBM QUlOVEVYVDogJXMiLCBpYnVmKzEyKTsKKysJCSAgICBlcnIgPTE7CisrCQkgICAgYnJlYWs7Cisr CQkgICAgfQorKwkJaWYgKGxlbiA+PSBzaXplb2YocGxhaW50ZXh0KSkKKysJCSAgICB7CisrCQkg ICAgcHJpbnRmKCJCdWZmZXIgb3ZlcmZsb3dcbiIpOworKwkJICAgIH0KKysJCVByaW50VmFsdWUo IlBMQUlOVEVYVCIsICh1bnNpZ25lZCBjaGFyKilwbGFpbnRleHQsIGxlbik7CisrCQlpZiAoc3Ry Y21wKGF0ZXN0LCAiTW9udGUiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVzdCAqLworKwkJICAg IHsKKysJCSAgICBkb19tY3QoYW1vZGUsYWtleXN6LG51bWtleXMsYUtleSxpVmVjLGRpcixwbGFp bnRleHQsbGVuLHJmcCk7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBhc3Nl cnQoZGlyID09IDEpOworKwkJICAgIHJldCA9IERFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwg YUtleSwgaVZlYywgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICov CisrCQkJCSAgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBsZW4pOworKwkJICAgIE91dHB1dFZhbHVl KCJDSVBIRVJURVhUIixjaXBoZXJ0ZXh0LGxlbixyZnAsCisrCQkJCSFzdHJjbXAoYW1vZGUsIkNG QjEiKSk7CisrCQkgICAgfQorKwkJc3RlcCA9IDY7CisrCQl9CisrCSAgICBicmVhazsKKysKKysJ Y2FzZSA1OiAvKiBDSVBIRVJURVhUID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsK KysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiQ0lQSEVSVEVYVCA9ICIsIDEzKSAhPSAwKQor KwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkg ICAgZWxzZQorKwkJeworKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQorKwkJICAgIGxlbj1i aW50MmJpbihpYnVmKzEzLHN0cmxlbihpYnVmKzEzKS0xLGNpcGhlcnRleHQpOworKwkJZWxzZQor KwkJICAgIGxlbiA9IGhleDJiaW4oaWJ1ZisxMyxjaXBoZXJ0ZXh0KTsKKysJCWlmIChsZW4gPCAw KQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQgQ0lQSEVSVEVYVFxuIik7CisrCQkg ICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCQorKwkJUHJpbnRWYWx1ZSgi Q0lQSEVSVEVYVCIsIGNpcGhlcnRleHQsIGxlbik7CisrCQlpZiAoc3RyY21wKGF0ZXN0LCAiTW9u dGUiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVzdCAqLworKwkJICAgIHsKKysJCSAgICBkb19t Y3QoYW1vZGUsIGFrZXlzeiwgbnVta2V5cywgYUtleSwgaVZlYywgCisrCQkJICAgZGlyLCBjaXBo ZXJ0ZXh0LCBsZW4sIHJmcCk7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBh c3NlcnQoZGlyID09IDApOworKwkJICAgIHJldCA9IERFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlz eiwgYUtleSwgaVZlYywgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0 ICovCisrCQkJCSAgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOworKwkJICAgIE91dHB1dFZh bHVlKCJQTEFJTlRFWFQiLCh1bnNpZ25lZCBjaGFyICopcGxhaW50ZXh0LGxlbixyZnAsCisrCQkJ CSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7CisrCQkgICAgfQorKwkJc3RlcCA9IDY7CisrCQl9Cisr CSAgICBicmVhazsKKysKKysJY2FzZSA2OgorKwkgICAgaWYgKGlidWZbMF0gIT0gJ1xuJykKKysJ CXsKKysJCWVyciA9IDE7CisrCQlwcmludGYoIk1pc3NpbmcgdGVybWluYXRvclxuIik7CisrCQl9 CisrCSAgICBlbHNlIGlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSAhPSAwKQorKwkJeyAvKiBNQ1Qg YWxyZWFkeSBhZGRlZCB0ZXJtaW5hdGluZyBubCAqLworKwkJZnB1dHMoaWJ1ZiwgcmZwKTsKKysJ CX0KKysJICAgIHN0ZXAgPSAxOworKwkgICAgYnJlYWs7CisrCSAgICB9CisrCX0KKysgICAgaWYg KHJmcCkKKysJZmNsb3NlKHJmcCk7CisrICAgIGlmIChhZnApCisrCWZjbG9zZShhZnApOworKyAg ICByZXR1cm4gZXJyOworKyAgICB9CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyAgUHJvY2Vzc2VzIGVpdGhlciBhIHNpbmdsZSBmaWxl IG9yIAorKyAgYSBzZXQgb2YgZmlsZXMgd2hvc2UgbmFtZXMgYXJlIHBhc3NlZCBpbiBhIGZpbGUu CisrICBBIHNpbmdsZSBmaWxlIGlzIHNwZWNpZmllZCBhczoKKysgICAgYWVzX3Rlc3QgLWYgeHh4 LnJlcQorKyAgQSBzZXQgb2YgZmlsZXMgaXMgc3BlY2lmaWVkIGFzOgorKyAgICBhZXNfdGVzdCAt ZCB4eHh4eC54eHgKKysgIFRoZSBkZWZhdWx0IGlzOiAtZCByZXEudHh0CisrLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK2ludCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKKysgICAgeworKyAgICBjaGFyICpycWxpc3QgPSAicmVxLnR4dCIs ICpyc3BmaWxlID0gTlVMTDsKKysgICAgRklMRSAqZnAgPSBOVUxMOworKyAgICBjaGFyIGZuWzI1 MF0gPSAiIiwgcmZuWzI1Nl0gPSAiIjsKKysgICAgaW50IGZfb3B0ID0gMCwgZF9vcHQgPSAxOwor KworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCXsK KysJZG9fcHJpbnRfZXJyb3JzKCk7CisrCUVYSVQoMSk7CisrCX0KKysjZW5kaWYKKysgICAgaWYg KGFyZ2MgPiAxKQorKwl7CisrCWlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZCIpID09IDApCisr CSAgICB7CisrCSAgICBkX29wdCA9IDE7CisrCSAgICB9CisrCWVsc2UgaWYgKHN0cmNhc2VjbXAo YXJndlsxXSwgIi1mIikgPT0gMCkKKysJICAgIHsKKysJICAgIGZfb3B0ID0gMTsKKysJICAgIGRf b3B0ID0gMDsKKysJICAgIH0KKysJZWxzZQorKwkgICAgeworKwkgICAgcHJpbnRmKCJJbnZhbGlk IHBhcmFtZXRlcjogJXNcbiIsIGFyZ3ZbMV0pOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9Cisr CWlmIChhcmdjIDwgMykKKysJICAgIHsKKysJICAgIHByaW50ZigiTWlzc2luZyBwYXJhbWV0ZXJc biIpOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9CisrCWlmIChkX29wdCkKKysJICAgIHJxbGlz dCA9IGFyZ3ZbMl07CisrCWVsc2UKKysJICAgIHsKKysJICAgIHN0cmNweShmbiwgYXJndlsyXSk7 CisrCSAgICByc3BmaWxlID0gYXJndlszXTsKKysJICAgIH0KKysJfQorKyAgICBpZiAoZF9vcHQp CisrCXsgLyogbGlzdCBvZiBmaWxlcyAoZGlyZWN0b3J5KSAqLworKwlpZiAoIShmcCA9IGZvcGVu KHJxbGlzdCwgInIiKSkpCisrCSAgICB7CisrCSAgICBwcmludGYoIkNhbm5vdCBvcGVuIHJlcSBs aXN0IGZpbGVcbiIpOworKwkgICAgcmV0dXJuIC0xOworKwkgICAgfQorKwl3aGlsZSAoZmdldHMo Zm4sIHNpemVvZihmbiksIGZwKSkKKysJICAgIHsKKysJICAgIHN0cnRvayhmbiwgIlxyXG4iKTsK KysJICAgIHN0cmNweShyZm4sIGZuKTsKKysJICAgIHByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIs IHJmbik7CisrCSAgICBpZiAocHJvY19maWxlKHJmbiwgcnNwZmlsZSkpCisrCQl7CisrCQlwcmlu dGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwgcmZuKTsKKysJCUVYSVQo MSk7CisrCQl9CisrCSAgICB9CisrCWZjbG9zZShmcCk7CisrCX0KKysgICAgZWxzZSAvKiBzaW5n bGUgZmlsZSAqLworKwl7CisrCWlmIChWRVJCT1NFKQorKwkJcHJpbnRmKCJQcm9jZXNzaW5nOiAl c1xuIiwgZm4pOworKwlpZiAocHJvY19maWxlKGZuLCByc3BmaWxlKSkKKysJICAgIHsKKysJICAg IHByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCBmbik7CisrCSAg ICB9CisrCX0KKysgICAgRVhJVCgwKTsKKysgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysjZW5k aWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Ro dnMuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RodnMu YworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RodnMuYy5m aXBzCTIwMTItMDItMjkgMTA6MzM6MDIuNzkwMjk0ODYyICswMTAwCisrKysgb3BlbnNzbC0xLjAu MS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGh2cy5jCTIwMTItMDItMjkgMTA6MzM6MDIu NzkwMjk0ODYyICswMTAwCitAQCAtMCwwICsxLDI5MiBAQAorKy8qIGZpcHMvZGgvZmlwc19kaHZz LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wu b3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz IHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1l dDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAq IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug b2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25v d2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFt ZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVz ZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9y IHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3Bl blNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBh cHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlz c2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25z IG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAg IGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5E IEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElU UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1Qg TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisr ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysg KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorKyAqLworKworKworKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCisrI2lu Y2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUwor KyNpbmNsdWRlIDxzdGRpby5oPgorKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK Kyt7CisrICAgIHByaW50ZigiTm8gRklQUyBESCBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDAp OworK30KKysjZWxzZQorKworKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvZXZwLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKwor KyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3N0YXRpYyBjb25zdCBFVlBfTUQgKnBhcnNlX21k KGNoYXIgKmxpbmUpCisrCXsKKysJY2hhciAqcDsKKysJaWYgKGxpbmVbMF0gIT0gJ1snIHx8IGxp bmVbMV0gIT0gJ0YnKQorKwkJcmV0dXJuIE5VTEw7CisrCXAgPSBzdHJjaHIobGluZSwgJy0nKTsK KysJaWYgKCFwKQorKwkJcmV0dXJuIE5VTEw7CisrCWxpbmUgPSBwICsgMTsKKysJcCA9IHN0cmNo cihsaW5lLCAnXScpOworKwlpZiAoIXApCisrCQlyZXR1cm4gTlVMTDsKKysJKnAgPSAwOworKwlw ID0gbGluZTsKKysJd2hpbGUoaXNzcGFjZSgqcCkpCisrCQlwKys7CisrCWlmICghc3RyY21wKHAs ICJTSEExIikpCisrCQlyZXR1cm4gRVZQX3NoYTEoKTsKKysJZWxzZSBpZiAoIXN0cmNtcChwLCAi U0hBMjI0IikpCisrCQlyZXR1cm4gRVZQX3NoYTIyNCgpOworKwllbHNlIGlmICghc3RyY21wKHAs ICJTSEEyNTYiKSkKKysJCXJldHVybiBFVlBfc2hhMjU2KCk7CisrCWVsc2UgaWYgKCFzdHJjbXAo cCwgIlNIQTM4NCIpKQorKwkJcmV0dXJuIEVWUF9zaGEzODQoKTsKKysJZWxzZSBpZiAoIXN0cmNt cChwLCAiU0hBNTEyIikpCisrCQlyZXR1cm4gRVZQX3NoYTUxMigpOworKwllbHNlCisrCQlyZXR1 cm4gTlVMTDsKKysJfQorKworK3N0YXRpYyB2b2lkIG91dHB1dF9aaGFzaChGSUxFICpvdXQsIGlu dCBleG91dCwKKysJCQkJREggKmRoLCBCSUdOVU0gKnBlZXJrZXksIGNvbnN0IEVWUF9NRCAqbWQs CisrCQkJCXVuc2lnbmVkIGNoYXIgKnJoYXNoLCBzaXplX3Qgcmhhc2hsZW4pCisrCXsKKysJdW5z aWduZWQgY2hhciAqWjsKKysJdW5zaWduZWQgY2hhciBjaGFzaFtFVlBfTUFYX01EX1NJWkVdOwor KwlpbnQgWmxlbjsKKysJaWYgKHJoYXNoID09IE5VTEwpCisrCQl7CisrCQlyaGFzaGxlbiA9IE1f RVZQX01EX3NpemUobWQpOworKwkJaWYgKCFESF9nZW5lcmF0ZV9rZXkoZGgpKQorKwkJCWV4aXQg KDEpOworKwkJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJZZXBoZW1JVVQiLCBkaC0+cHViX2tleSk7 CisrCQlpZiAoZXhvdXQpCisrCQkJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJYZXBoZW1JVVQiLCBk aC0+cHJpdl9rZXkpOworKwkJfQorKwlaID0gT1BFTlNTTF9tYWxsb2MoQk5fbnVtX2J5dGVzKGRo LT5wKSk7CisrCWlmICghWikKKysJCWV4aXQoMSk7CisrCVpsZW4gPSBESF9jb21wdXRlX2tleV9w YWRkZWQoWiwgcGVlcmtleSwgZGgpOworKwlpZiAoZXhvdXQpCisrCQlPdXRwdXRWYWx1ZSgiWiIs IFosIFpsZW4sIG91dCwgMCk7CisrCUZJUFNfZGlnZXN0KFosIFpsZW4sIGNoYXNoLCBOVUxMLCBt ZCk7CisrCU91dHB1dFZhbHVlKHJoYXNoID8gIklVVEhhc2haWiIgOiAiSGFzaFpaIiwgY2hhc2gs IHJoYXNobGVuLCBvdXQsIDApOworKwlpZiAocmhhc2gpCisrCQl7CisrCQlmcHJpbnRmKG91dCwg IlJlc3VsdCA9ICVzXG4iLAorKwkJCQltZW1jbXAoY2hhc2gsIHJoYXNoLCByaGFzaGxlbikgPyAi RiIgOiAiUCIpOworKwkJfQorKwllbHNlCisrCQl7CisrCQlCTl9jbGVhcl9mcmVlKGRoLT5wcml2 X2tleSk7CisrCQlCTl9jbGVhcl9mcmVlKGRoLT5wdWJfa2V5KTsKKysJCWRoLT5wcml2X2tleSA9 IE5VTEw7CisrCQlkaC0+cHViX2tleSA9IE5VTEw7CisrCQl9CisrCU9QRU5TU0xfY2xlYW5zZSha LCBabGVuKTsKKysJT1BFTlNTTF9mcmVlKFopOworKwl9CisrCisrI2lmZGVmIEZJUFNfQUxHVlMK KytpbnQgZmlwc19kaHZzX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKyNlbHNlCisraW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKyNlbmRpZgorKwl7CisrCWNoYXIgKiphcmdz ID0gYXJndiArIDE7CisrCWludCBhcmduID0gYXJnYyAtIDE7CisrCUZJTEUgKmluLCAqb3V0Owor KwljaGFyIGJ1ZlsyMDQ4XSwgbGJ1ZlsyMDQ4XTsKKysJdW5zaWduZWQgY2hhciAqcmhhc2g7Cisr CWxvbmcgcmhhc2hsZW47CisrCURIICpkaCA9IE5VTEw7CisrCWNvbnN0IEVWUF9NRCAqbWQgPSBO VUxMOworKwlCSUdOVU0gKnBlZXJrZXkgPSBOVUxMOworKwljaGFyICprZXl3b3JkID0gTlVMTCwg KnZhbHVlID0gTlVMTDsKKysJaW50IGRvX3ZlcmlmeSA9IC0xLCBleG91dCA9IDA7CisrCisrCWZp cHNfYWxndGVzdF9pbml0KCk7CisrCisrCWlmIChhcmduICYmICFzdHJjbXAoKmFyZ3MsICJkaHZl ciIpKQorKwkJeworKwkJZG9fdmVyaWZ5ID0gMTsKKysJCWFyZ3MrKzsKKysJCWFyZ24tLTsKKysJ CX0KKysJZWxzZSBpZiAoYXJnbiAmJiAhc3RyY21wKCphcmdzLCAiZGhnZW4iKSkKKysJCXsKKysJ CWRvX3ZlcmlmeSA9IDA7CisrCQlhcmdzKys7CisrCQlhcmduLS07CisrCQl9CisrCisrCWlmIChh cmduICYmICFzdHJjbXAoKmFyZ3MsICItZXhvdXQiKSkKKysJCXsKKysJCWV4b3V0ID0gMTsKKysJ CWFyZ3MrKzsKKysJCWFyZ24tLTsKKysJCX0KKysKKysJaWYgKGRvX3ZlcmlmeSA9PSAtMSkKKysJ CXsKKysJCWZwcmludGYoc3RkZXJyLCIlcyBbZGh2ZXJ8ZGhnZW58XSBbLWV4b3V0XSAoaW5maWxl IG91dGZpbGUpXG4iLGFyZ3ZbMF0pOworKwkJZXhpdCgxKTsKKysJCX0KKysKKysJaWYgKGFyZ24g PT0gMikKKysJCXsKKysJCWluID0gZm9wZW4oKmFyZ3MsICJyIik7CisrCQlpZiAoIWluKQorKwkJ CXsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgaW5wdXQgZmlsZVxuIik7Cisr CQkJZXhpdCgxKTsKKysJCQl9CisrCQlvdXQgPSBmb3BlbihhcmdzWzFdLCAidyIpOworKwkJaWYg KCFvdXQpCisrCQkJeworKwkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBvdXRwdXQg ZmlsZVxuIik7CisrCQkJZXhpdCgxKTsKKysJCQl9CisrCQl9CisrCWVsc2UgaWYgKGFyZ24gPT0g MCkKKysJCXsKKysJCWluID0gc3RkaW47CisrCQlvdXQgPSBzdGRvdXQ7CisrCQl9CisrCWVsc2UK KysJCXsKKysJCWZwcmludGYoc3RkZXJyLCIlcyBbZGh2ZXJ8ZGhnZW58XSBbLWV4b3V0XSAoaW5m aWxlIG91dGZpbGUpXG4iLGFyZ3ZbMF0pOworKwkJZXhpdCgxKTsKKysJCX0KKysKKysJZGggPSBG SVBTX2RoX25ldygpOworKworKwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgaW4pICE9 IE5VTEwpCisrCQl7CisrCQlmcHV0cyhidWYsIG91dCk7CisrCQlpZiAoc3RybGVuKGJ1ZikgPiA2 ICYmICFzdHJuY21wKGJ1ZiwgIltGIiwgMikpCisrCQkJeworKwkJCW1kID0gcGFyc2VfbWQoYnVm KTsKKysJCQlpZiAobWQgPT0gTlVMTCkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlpZiAo ZGgpCisrCQkJCUZJUFNfZGhfZnJlZShkaCk7CisrCQkJZGggPSBGSVBTX2RoX25ldygpOworKwkJ CWNvbnRpbnVlOworKwkJCX0KKysJCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBs YnVmLCBidWYpKQorKwkJCWNvbnRpbnVlOworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIlAiKSkK KysJCQl7CisrCQkJaWYgKCFkb19oZXgyYm4oJmRoLT5wLCB2YWx1ZSkpCisrCQkJCWdvdG8gcGFy c2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUSIpKQorKwkJ CXsKKysJCQlpZiAoIWRvX2hleDJibigmZGgtPnEsIHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9l cnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJHIikpCisrCQkJewor KwkJCWlmICghZG9faGV4MmJuKCZkaC0+ZywgdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9y OworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlhlcGhlbUlVVCIpKQorKwkJ CXsKKysJCQlpZiAoIWRvX2hleDJibigmZGgtPnByaXZfa2V5LCB2YWx1ZSkpCisrCQkJCWdvdG8g cGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWWVwaGVt SVVUIikpCisrCQkJeworKwkJCWlmICghZG9faGV4MmJuKCZkaC0+cHViX2tleSwgdmFsdWUpKQor KwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29y ZCwgIlllcGhlbUNBVlMiKSkKKysJCQl7CisrCQkJaWYgKCFkb19oZXgyYm4oJnBlZXJrZXksIHZh bHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlpZiAoZG9fdmVyaWZ5ID09IDApCisr CQkJCW91dHB1dF9aaGFzaChvdXQsIGV4b3V0LCBkaCwgcGVlcmtleSwgbWQsCisrCQkJCQkJCU5V TEwsIDApOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIkNBVlNIYXNoWloi KSkKKysJCQl7CisrCQkJaWYgKCFtZCkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlyaGFz aCA9IGhleDJiaW5fbSh2YWx1ZSwgJnJoYXNobGVuKTsKKysJCQlpZiAoIXJoYXNoIHx8IHJoYXNo bGVuICE9IE1fRVZQX01EX3NpemUobWQpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCW91 dHB1dF9aaGFzaChvdXQsIGV4b3V0LCBkaCwgcGVlcmtleSwgbWQsCisrCQkJCQkJCXJoYXNoLCBy aGFzaGxlbik7CisrCQkJfQorKwkJfQorKwlpZiAoaW4gJiYgaW4gIT0gc3RkaW4pCisrCQlmY2xv c2UoaW4pOworKwlpZiAob3V0ICYmIG91dCAhPSBzdGRvdXQpCisrCQlmY2xvc2Uob3V0KTsKKysJ cmV0dXJuIDA7CisrCXBhcnNlX2Vycm9yOgorKwlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIFBhcnNp bmcgcmVxdWVzdCBmaWxlXG4iKTsKKysJZXhpdCgxKTsKKysJfQorKworKyNlbmRpZgorZGlmZiAt dXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHJiZ3ZzLmMuZmlw cyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19kcmJndnMuYworLS0t IG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RyYmd2cy5jLmZpcHMJ MjAxMi0wMi0yOSAxMDozMzowMi43OTAyOTQ4NjIgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJl dGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19kcmJndnMuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5 MDI5NDg2MiArMDEwMAorQEAgLTAsMCArMSw0MTYgQEAKKysvKiBmaXBzL3JhbmQvZmlwc19kcmJn dnMuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNz bC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUg bWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisr ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBu YW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUg dXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBG b3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BP cGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wi IGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJt aXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlv bnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICog ICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBB TkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICog SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ REVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT IChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK KysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor KyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CisrICovCisrCisrCisrI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKKysj aW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBT CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIERSQkcgc3VwcG9ydFxuIik7CisrICAgIHJldHVy bigwKTsKKyt9CisrI2Vsc2UKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2RzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGN0eXBl Lmg+CisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrc3RhdGljIGludCBkcGFyc2VfbWQo Y2hhciAqc3RyKQorKwl7CisrCXN3aXRjaChhdG9pKHN0ciArIDUpKQorKwkJeworKwkJY2FzZSAx OgorKwkJcmV0dXJuIE5JRF9zaGExOworKworKwkJY2FzZSAyMjQ6CisrCQlyZXR1cm4gTklEX3No YTIyNDsKKysKKysJCWNhc2UgMjU2OgorKwkJcmV0dXJuIE5JRF9zaGEyNTY7CisrCisrCQljYXNl IDM4NDoKKysJCXJldHVybiBOSURfc2hhMzg0OworKworKwkJY2FzZSA1MTI6CisrCQlyZXR1cm4g TklEX3NoYTUxMjsKKysKKysJCX0KKysKKysJcmV0dXJuIE5JRF91bmRlZjsKKysJfQorKworK3N0 YXRpYyBpbnQgcGFyc2VfZWMoY2hhciAqc3RyKQorKwl7CisrCWludCBjdXJ2ZV9uaWQsIG1kX25p ZDsKKysJY2hhciAqbWQ7CisrCW1kID0gc3RyY2hyKHN0ciwgJyAnKTsKKysJaWYgKCFtZCkKKysJ CXJldHVybiBOSURfdW5kZWY7CisrCWlmICghc3RybmNtcChzdHIsICJbUC0yNTYiLCA2KSkKKysJ CWN1cnZlX25pZCA9IE5JRF9YOV82Ml9wcmltZTI1NnYxOworKwllbHNlIGlmICghc3RybmNtcChz dHIsICJbUC0zODQiLCA2KSkKKysJCWN1cnZlX25pZCA9IE5JRF9zZWNwMzg0cjE7CisrCWVsc2Ug aWYgKCFzdHJuY21wKHN0ciwgIltQLTUyMSIsIDYpKQorKwkJY3VydmVfbmlkID0gTklEX3NlY3A1 MjFyMTsKKysJZWxzZQorKwkJcmV0dXJuIE5JRF91bmRlZjsKKysJbWRfbmlkID0gZHBhcnNlX21k KG1kKTsKKysJaWYgKG1kX25pZCA9PSBOSURfdW5kZWYpCisrCQlyZXR1cm4gTklEX3VuZGVmOwor KwlyZXR1cm4gKGN1cnZlX25pZCA8PCAxNikgfCBtZF9uaWQ7CisrCX0KKysKKytzdGF0aWMgaW50 IHBhcnNlX2FlcyhjaGFyICpzdHIsIGludCAqcGRmKQorKwl7CisrCisrCWlmICghc3RybmNtcChz dHIgKyA5LCAibm8iLCAyKSkKKysJCSpwZGYgPSAwOworKwllbHNlCisrCQkqcGRmID0gRFJCR19G TEFHX0NUUl9VU0VfREY7CisrCisrCXN3aXRjaChhdG9pKHN0ciArIDUpKQorKwkJeworKwkJY2Fz ZSAxMjg6CisrCQlyZXR1cm4gTklEX2Flc18xMjhfY3RyOworKworKwkJY2FzZSAxOTI6CisrCQly ZXR1cm4gTklEX2Flc18xOTJfY3RyOworKworKwkJY2FzZSAyNTY6CisrCQlyZXR1cm4gTklEX2Fl c18yNTZfY3RyOworKworKwkJZGVmYXVsdDoKKysJCXJldHVybiBOSURfdW5kZWY7CisrCisrCQl9 CisrCX0KKysKKyt0eXBlZGVmIHN0cnVjdCAKKysJeworKwl1bnNpZ25lZCBjaGFyICplbnQ7Cisr CXNpemVfdCBlbnRsZW47CisrCXVuc2lnbmVkIGNoYXIgKm5vbmNlOworKwlzaXplX3Qgbm9uY2Vs ZW47CisrCX0gVEVTVF9FTlQ7CisrCisrc3RhdGljIHNpemVfdCB0ZXN0X2VudHJvcHkoRFJCR19D VFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbikKKysJ eworKwlURVNUX0VOVCAqdCA9IEZJUFNfZHJiZ19nZXRfYXBwX2RhdGEoZGN0eCk7CisrCSpwb3V0 ID0gKHVuc2lnbmVkIGNoYXIgKil0LT5lbnQ7CisrCXJldHVybiB0LT5lbnRsZW47CisrCX0KKysK KytzdGF0aWMgc2l6ZV90IHRlc3Rfbm9uY2UoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIg Kipwb3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHksIHNp emVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbikKKysJeworKwlURVNUX0VOVCAqdCA9IEZJUFNf ZHJiZ19nZXRfYXBwX2RhdGEoZGN0eCk7CisrCSpwb3V0ID0gKHVuc2lnbmVkIGNoYXIgKil0LT5u b25jZTsKKysJcmV0dXJuIHQtPm5vbmNlbGVuOworKwl9CisrCisrI2lmZGVmIEZJUFNfQUxHVlMK KytpbnQgZmlwc19kcmJndnNfbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKKysjZWxzZQorK2lu dCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQorKyNlbmRpZgorKwl7CisrCUZJTEUgKmluID0g TlVMTCwgKm91dCA9IE5VTEw7CisrCURSQkdfQ1RYICpkY3R4ID0gTlVMTDsKKysJVEVTVF9FTlQg dDsKKysJaW50IHIsIG5pZCA9IDA7CisrCWludCBwciA9IDA7CisrCWNoYXIgYnVmWzIwNDhdLCBs YnVmWzIwNDhdOworKwl1bnNpZ25lZCBjaGFyIHJhbmRvdXRbMjA0OF07CisrCWNoYXIgKmtleXdv cmQgPSBOVUxMLCAqdmFsdWUgPSBOVUxMOworKworKwl1bnNpZ25lZCBjaGFyICplbnQgPSBOVUxM LCAqbm9uY2UgPSBOVUxMLCAqcGVycyA9IE5VTEwsICphZGluID0gTlVMTDsKKysJbG9uZyBlbnRs ZW4sIG5vbmNlbGVuLCBwZXJzbGVuLCBhZGlubGVuOworKwlpbnQgZGYgPSAwOworKworKwllbnVt IGR0eXBlIHsgRFJCR19OT05FLCBEUkJHX0NUUiwgRFJCR19IQVNILCBEUkJHX0hNQUMsIERSQkdf RFVBTF9FQyB9CisrCQlkcmJnX3R5cGUgPSBEUkJHX05PTkU7CisrCisrCWludCByYW5kb3V0bGVu ID0gMDsKKysKKysJaW50IGdlbiA9IDA7CisrCisrCWZpcHNfYWxndGVzdF9pbml0KCk7CisrCisr CWlmIChhcmdjID09IDMpCisrCQl7CisrCQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7CisrCQlp ZiAoIWluKQorKwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgaW5wdXQg ZmlsZVxuIik7CisrCQkJZXhpdCgxKTsKKysJCQl9CisrCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAi dyIpOworKwkJaWYgKCFvdXQpCisrCQkJeworKwkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3Bl bmluZyBvdXRwdXQgZmlsZVxuIik7CisrCQkJZXhpdCgxKTsKKysJCQl9CisrCQl9CisrCWVsc2Ug aWYgKGFyZ2MgPT0gMSkKKysJCXsKKysJCWluID0gc3RkaW47CisrCQlvdXQgPSBzdGRvdXQ7Cisr CQl9CisrCWVsc2UKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCIlcyAoaW5maWxlIG91dGZpbGUp XG4iLGFyZ3ZbMF0pOworKwkJZXhpdCgxKTsKKysJCX0KKysKKysJd2hpbGUgKGZnZXRzKGJ1Ziwg c2l6ZW9mKGJ1ZiksIGluKSAhPSBOVUxMKQorKwkJeworKwkJZnB1dHMoYnVmLCBvdXQpOworKwkJ aWYgKGRyYmdfdHlwZSA9PSBEUkJHX05PTkUpCisrCQkJeworKwkJCWlmIChzdHJzdHIoYnVmLCAi Q1RSX0RSQkciKSkKKysJCQkJZHJiZ190eXBlID0gRFJCR19DVFI7CisrCQkJZWxzZSBpZiAoc3Ry c3RyKGJ1ZiwgIkhhc2hfRFJCRyIpKQorKwkJCQlkcmJnX3R5cGUgPSBEUkJHX0hBU0g7CisrCQkJ ZWxzZSBpZiAoc3Ryc3RyKGJ1ZiwgIkhNQUNfRFJCRyIpKQorKwkJCQlkcmJnX3R5cGUgPSBEUkJH X0hNQUM7CisrCQkJZWxzZSBpZiAoc3Ryc3RyKGJ1ZiwgIkR1YWxfRUNfRFJCRyIpKQorKwkJCQlk cmJnX3R5cGUgPSBEUkJHX0RVQUxfRUM7CisrCQkJZWxzZQorKwkJCQljb250aW51ZTsKKysJCQl9 CisrCQlpZiAoc3RybGVuKGJ1ZikgPiA0ICYmICFzdHJuY21wKGJ1ZiwgIltTSEEtIiwgNSkpCisr CQkJeworKwkJCW5pZCA9IGRwYXJzZV9tZChidWYpOworKwkJCWlmIChuaWQgPT0gTklEX3VuZGVm KQorKwkJCQlleGl0KDEpOworKwkJCWlmIChkcmJnX3R5cGUgPT0gRFJCR19ITUFDKQorKwkJCQl7 CisrCQkJCXN3aXRjaCAobmlkKQorKwkJCQkJeworKwkJCQkJY2FzZSBOSURfc2hhMToKKysJCQkJ CW5pZCA9IE5JRF9obWFjV2l0aFNIQTE7CisrCQkJCQlicmVhazsKKysKKysJCQkJCWNhc2UgTklE X3NoYTIyNDoKKysJCQkJCW5pZCA9IE5JRF9obWFjV2l0aFNIQTIyNDsKKysJCQkJCWJyZWFrOwor KworKwkJCQkJY2FzZSBOSURfc2hhMjU2OgorKwkJCQkJbmlkID0gTklEX2htYWNXaXRoU0hBMjU2 OworKwkJCQkJYnJlYWs7CisrCisrCQkJCQljYXNlIE5JRF9zaGEzODQ6CisrCQkJCQluaWQgPSBO SURfaG1hY1dpdGhTSEEzODQ7CisrCQkJCQlicmVhazsKKysKKysJCQkJCWNhc2UgTklEX3NoYTUx MjoKKysJCQkJCW5pZCA9IE5JRF9obWFjV2l0aFNIQTUxMjsKKysJCQkJCWJyZWFrOworKworKwkJ CQkJZGVmYXVsdDoKKysJCQkJCWV4aXQoMSk7CisrCQkJCQl9CisrCQkJCX0KKysJCQl9CisrCQlp ZiAoc3RybGVuKGJ1ZikgPiAxMiAmJiAhc3RybmNtcChidWYsICJbQUVTLSIsIDUpKQorKwkJCXsK KysJCQluaWQgPSBwYXJzZV9hZXMoYnVmLCAmZGYpOworKwkJCWlmIChuaWQgPT0gTklEX3VuZGVm KQorKwkJCQlleGl0KDEpOworKwkJCX0KKysJCWlmIChzdHJsZW4oYnVmKSA+IDEyICYmICFzdHJu Y21wKGJ1ZiwgIltQLSIsIDMpKQorKwkJCXsKKysJCQluaWQgPSBwYXJzZV9lYyhidWYpOworKwkJ CWlmIChuaWQgPT0gTklEX3VuZGVmKQorKwkJCQlleGl0KDEpOworKwkJCX0KKysJCWlmICghcGFy c2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJCWNvbnRpbnVlOworKwor KwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIltQcmVkaWN0aW9uUmVzaXN0YW5jZSIpKQorKwkJCXsK KysJCQlpZiAoIXN0cmNtcCh2YWx1ZSwgIlRydWVdIikpCisrCQkJCXByID0gMTsKKysJCQllbHNl IGlmICghc3RyY21wKHZhbHVlLCAiRmFsc2VdIikpCisrCQkJCXByID0gMDsKKysJCQllbHNlCisr CQkJCWV4aXQoMSk7CisrCQkJfQorKworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkVudHJvcHlJ bnB1dCIpKQorKwkJCXsKKysJCQllbnQgPSBoZXgyYmluX20odmFsdWUsICZlbnRsZW4pOworKwkJ CXQuZW50ID0gZW50OworKwkJCXQuZW50bGVuID0gZW50bGVuOworKwkJCX0KKysKKysJCWlmICgh c3RyY21wKGtleXdvcmQsICJOb25jZSIpKQorKwkJCXsKKysJCQlub25jZSA9IGhleDJiaW5fbSh2 YWx1ZSwgJm5vbmNlbGVuKTsKKysJCQl0Lm5vbmNlID0gbm9uY2U7CisrCQkJdC5ub25jZWxlbiA9 IG5vbmNlbGVuOworKwkJCX0KKysKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJQZXJzb25hbGl6 YXRpb25TdHJpbmciKSkKKysJCQl7CisrCQkJcGVycyA9IGhleDJiaW5fbSh2YWx1ZSwgJnBlcnNs ZW4pOworKwkJCWlmIChuaWQgPT0gMCkKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkRS QkcgdHlwZSBub3QgcmVjb2duaXNlZCFcbiIpOworKwkJCQlleGl0ICgxKTsKKysJCQkJfQorKwkJ CWRjdHggPSBGSVBTX2RyYmdfbmV3KG5pZCwgZGYgfCBEUkJHX0ZMQUdfVEVTVCk7CisrCQkJaWYg KCFkY3R4KQorKwkJCQlleGl0ICgxKTsKKysJCQlGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhkY3R4 LCB0ZXN0X2VudHJvcHksIDAsIDAsCisrCQkJCQkJCXRlc3Rfbm9uY2UsIDApOworKwkJCUZJUFNf ZHJiZ19zZXRfYXBwX2RhdGEoZGN0eCwgJnQpOworKwkJCXJhbmRvdXRsZW4gPSAoaW50KUZJUFNf ZHJiZ19nZXRfYmxvY2tsZW5ndGgoZGN0eCk7CisrCQkJciA9IEZJUFNfZHJiZ19pbnN0YW50aWF0 ZShkY3R4LCBwZXJzLCBwZXJzbGVuKTsKKysJCQlpZiAoIXIpCisrCQkJCXsKKysJCQkJZnByaW50 ZihzdGRlcnIsICJFcnJvciBpbnN0YW50aWF0aW5nIERSQkdcbiIpOworKwkJCQlleGl0KDEpOwor KwkJCQl9CisrCQkJT1BFTlNTTF9mcmVlKHBlcnMpOworKwkJCU9QRU5TU0xfZnJlZShlbnQpOwor KwkJCU9QRU5TU0xfZnJlZShub25jZSk7CisrCQkJZW50ID0gbm9uY2UgPSBwZXJzID0gTlVMTDsK KysJCQlnZW4gPSAwOworKwkJCX0KKysKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJBZGRpdGlv bmFsSW5wdXQiKSkKKysJCQl7CisrCQkJYWRpbiA9IGhleDJiaW5fbSh2YWx1ZSwgJmFkaW5sZW4p OworKwkJCWlmIChwcikKKysJCQkJY29udGludWU7CisrCQkJciA9IEZJUFNfZHJiZ19nZW5lcmF0 ZShkY3R4LCByYW5kb3V0LCByYW5kb3V0bGVuLCAwLAorKwkJCQkJCQkJYWRpbiwgYWRpbmxlbik7 CisrCQkJaWYgKCFyKQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgZ2VuZXJh dGluZyBEUkJHIGJpdHNcbiIpOworKwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJaWYgKCFyKQor KwkJCQlleGl0KDEpOworKwkJCU9QRU5TU0xfZnJlZShhZGluKTsKKysJCQlhZGluID0gTlVMTDsK KysJCQlnZW4rKzsKKysJCQl9CisrCisrCQlpZiAocHIpCisrCQkJeworKwkJCWlmICghc3RyY21w KGtleXdvcmQsICJFbnRyb3B5SW5wdXRQUiIpKQorKwkJCQl7CisrCQkJCWVudCA9IGhleDJiaW5f bSh2YWx1ZSwgJmVudGxlbik7CisrCQkJCXQuZW50ID0gZW50OworKwkJCQl0LmVudGxlbiA9IGVu dGxlbjsKKysJCQkJciA9IEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LAorKwkJCQkJCQlyYW5kb3V0 LCByYW5kb3V0bGVuLAorKwkJCQkJCQkxLCBhZGluLCBhZGlubGVuKTsKKysJCQkJaWYgKCFyKQor KwkJCQkJeworKwkJCQkJZnByaW50ZihzdGRlcnIsCisrCQkJCQkJIkVycm9yIGdlbmVyYXRpbmcg RFJCRyBiaXRzXG4iKTsKKysJCQkJCWV4aXQoMSk7CisrCQkJCQl9CisrCQkJCU9QRU5TU0xfZnJl ZShhZGluKTsKKysJCQkJT1BFTlNTTF9mcmVlKGVudCk7CisrCQkJCWFkaW4gPSBlbnQgPSBOVUxM OworKwkJCQlnZW4rKzsKKysJCQkJfQorKwkJCX0KKysJCWlmICghc3RyY21wKGtleXdvcmQsICJF bnRyb3B5SW5wdXRSZXNlZWQiKSkKKysJCQl7CisrCQkJZW50ID0gaGV4MmJpbl9tKHZhbHVlLCAm ZW50bGVuKTsKKysJCQl0LmVudCA9IGVudDsKKysJCQl0LmVudGxlbiA9IGVudGxlbjsKKysJCQl9 CisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiQWRkaXRpb25hbElucHV0UmVzZWVkIikpCisrCQkJ eworKwkJCWFkaW4gPSBoZXgyYmluX20odmFsdWUsICZhZGlubGVuKTsKKysJCQlGSVBTX2RyYmdf cmVzZWVkKGRjdHgsIGFkaW4sIGFkaW5sZW4pOworKwkJCU9QRU5TU0xfZnJlZShlbnQpOworKwkJ CU9QRU5TU0xfZnJlZShhZGluKTsKKysJCQllbnQgPSBhZGluID0gTlVMTDsKKysJCQl9CisrCQlp ZiAoZ2VuID09IDIpCisrCQkJeworKwkJCU91dHB1dFZhbHVlKCJSZXR1cm5lZEJpdHMiLCByYW5k b3V0LCByYW5kb3V0bGVuLAorKwkJCQkJCQkJCW91dCwgMCk7CisrCQkJRklQU19kcmJnX2ZyZWUo ZGN0eCk7CisrCQkJZGN0eCA9IE5VTEw7CisrCQkJZ2VuID0gMDsKKysJCQl9CisrCisrCQl9Cisr CWlmIChpbiAmJiBpbiAhPSBzdGRpbikKKysJCWZjbG9zZShpbik7CisrCWlmIChvdXQgJiYgb3V0 ICE9IHN0ZG91dCkKKysJCWZjbG9zZShvdXQpOworKwlyZXR1cm4gMDsKKysJfQorKworKyNlbmRp ZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNz dnMuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3Zz LmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19kc3N2cy5j LmZpcHMJMjAxMi0wMi0yOSAxMDozMzowMi43OTEyOTQ4NzEgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4xLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19kc3N2cy5jCTIwMTItMDItMjkgMTA6MzM6 MDIuNzkxMjk0ODcxICswMTAwCitAQCAtMCwwICsxLDUzNyBAQAorKyNpbmNsdWRlIDxvcGVuc3Ns L29wZW5zc2xjb25mLmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8c3Rk aW8uaD4KKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyAgICBwcmlu dGYoIk5vIEZJUFMgRFNBIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKyNlbHNl CisrCisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRl IDxjdHlwZS5oPgorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3N0YXRpYyB2b2lkIHBi bihjb25zdCBjaGFyICpuYW1lLCBCSUdOVU0gKmJuKQorKwl7CisrCWludCBsZW4sIGk7CisrCXVu c2lnbmVkIGNoYXIgKnRtcDsKKysJbGVuID0gQk5fbnVtX2J5dGVzKGJuKTsKKysJdG1wID0gT1BF TlNTTF9tYWxsb2MobGVuKTsKKysJaWYgKCF0bXApCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwg Ik1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKKysJCXJldHVybjsKKysJCX0KKysJQk5fYm4y YmluKGJuLCB0bXApOworKwlwcmludGYoIiVzID0gIiwgbmFtZSk7CisrCWZvciAoaSA9IDA7IGkg PCBsZW47IGkrKykKKysJCXByaW50ZigiJTAyWCIsIHRtcFtpXSk7CisrCWZwdXRzKCJcbiIsIHN0 ZG91dCk7CisrCU9QRU5TU0xfZnJlZSh0bXApOworKwlyZXR1cm47CisrCX0KKysKKyt2b2lkIHBy aW1lcygpCisrICAgIHsKKysgICAgY2hhciBidWZbMTAyNDBdOworKyAgICBjaGFyIGxidWZbMTAy NDBdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1 ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWZwdXRzKGJ1ZixzdGRvdXQpOwor KwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCWNvbnRp bnVlOworKwlpZighc3RyY21wKGtleXdvcmQsIlByaW1lIikpCisrCSAgICB7CisrCSAgICBCSUdO VU0gKnBwOworKworKwkgICAgcHA9Qk5fbmV3KCk7CisrCSAgICBkb19oZXgyYm4oJnBwLHZhbHVl KTsKKysJICAgIHByaW50ZigicmVzdWx0PSAlY1xuIiwKKysJCSAgIEJOX2lzX3ByaW1lX2V4KHBw LDIwLE5VTEwsTlVMTCkgPyAnUCcgOiAnRicpOworKwkgICAgfQkgICAgCisrCX0KKysgICAgfQor KworK3ZvaWQgcHFnKCkKKysgICAgeworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBs YnVmWzEwMjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIGludCBubW9kPTA7 CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7 CisrCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJewor KwkJZnB1dHMoYnVmLHN0ZG91dCk7CisrCQljb250aW51ZTsKKysJCX0KKysJaWYoIXN0cmNtcChr ZXl3b3JkLCJbbW9kIikpCisrCSAgICBubW9kPWF0b2kodmFsdWUpOworKwllbHNlIGlmKCFzdHJj bXAoa2V5d29yZCwiTiIpKQorKwkgICAgeworKwkgICAgaW50IG49YXRvaSh2YWx1ZSk7CisrCisr CSAgICBwcmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsKKysKKysJICAgIHdoaWxlKG4tLSkK KysJCXsKKysJCXVuc2lnbmVkIGNoYXIgc2VlZFsyMF07CisrCQlEU0EgKmRzYTsKKysJCWludCBj b3VudGVyOworKwkJdW5zaWduZWQgbG9uZyBoOworKwkJZHNhID0gRklQU19kc2FfbmV3KCk7Cisr CisrCQlpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxzZWVkLDAsJmNv dW50ZXIsJmgsTlVMTCkpCisrCQkJeworKwkJCWRvX3ByaW50X2Vycm9ycygpOworKwkJCWV4aXQo MSk7CisrCQkJfQorKwkJcGJuKCJQIixkc2EtPnApOworKwkJcGJuKCJRIixkc2EtPnEpOworKwkJ cGJuKCJHIixkc2EtPmcpOworKwkJcHYoIlNlZWQiLHNlZWQsMjApOworKwkJcHJpbnRmKCJjID0g JWRcbiIsY291bnRlcik7CisrCQlwcmludGYoIkggPSAlbHhcbiIsaCk7CisrCQlwdXRjKCdcbics c3Rkb3V0KTsKKysJCX0KKysJICAgIH0KKysJZWxzZQorKwkgICAgZnB1dHMoYnVmLHN0ZG91dCk7 CisrCX0KKysgICAgfQorKworK3ZvaWQgcHFndmVyKCkKKysgICAgeworKyAgICBjaGFyIGJ1Zlsx MDI0XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7 CisrICAgIEJJR05VTSAqcCA9IE5VTEwsICpxID0gTlVMTCwgKmcgPSBOVUxMOworKyAgICBpbnQg Y291bnRlciwgY291bnRlcjI7CisrICAgIHVuc2lnbmVkIGxvbmcgaCwgaDI7CisrICAgIERTQSAq ZHNhPU5VTEw7CisrICAgIGludCBubW9kPTA7CisrICAgIHVuc2lnbmVkIGNoYXIgc2VlZFsxMDI0 XTsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisr CXsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7 CisrCQlmcHV0cyhidWYsc3Rkb3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlmcHV0cyhidWYs IHN0ZG91dCk7CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQorKwkgICAgbm1vZD1hdG9p KHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlAiKSkKKysJICAgIHA9aGV4MmJu KHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlEiKSkKKysJICAgIHE9aGV4MmJu KHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkciKSkKKysJICAgIGc9aGV4MmJu KHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlNlZWQiKSkKKysJICAgIHsKKysJ ICAgIGludCBzbGVuID0gaGV4MmJpbih2YWx1ZSwgc2VlZCk7CisrCSAgICBpZiAoc2xlbiAhPSAy MCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiU2VlZCBwYXJzZSBsZW5ndGggZXJyb3JcbiIp OworKwkJZXhpdCAoMSk7CisrCQl9CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3Jk LCJjIikpCisrCSAgICBjb3VudGVyID1hdG9pKGJ1Zis0KTsKKysJZWxzZSBpZighc3RyY21wKGtl eXdvcmQsIkgiKSkKKysJICAgIHsKKysJICAgIGggPSBhdG9pKHZhbHVlKTsKKysJICAgIGlmICgh cCB8fCAhcSB8fCAhZykKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiUGFyc2UgRXJyb3JcbiIp OworKwkJZXhpdCAoMSk7CisrCQl9CisrCSAgICBkc2EgPSBGSVBTX2RzYV9uZXcoKTsKKysJICAg IGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLHNlZWQsMjAgLCZjb3Vu dGVyMiwmaDIsTlVMTCkpCisrCQkJeworKwkJCWRvX3ByaW50X2Vycm9ycygpOworKwkJCWV4aXQo MSk7CisrCQkJfQorKyAgICAgICAgICAgIGlmIChCTl9jbXAoZHNhLT5wLCBwKSB8fCBCTl9jbXAo ZHNhLT5xLCBxKSB8fCBCTl9jbXAoZHNhLT5nLCBnKQorKwkJfHwgKGNvdW50ZXIgIT0gY291bnRl cjIpIHx8IChoICE9IGgyKSkKKysJICAgIAlwcmludGYoIlJlc3VsdCA9IEZcbiIpOworKwkgICAg ZWxzZQorKwkgICAgCXByaW50ZigiUmVzdWx0ID0gUFxuIik7CisrCSAgICBCTl9mcmVlKHApOwor KwkgICAgQk5fZnJlZShxKTsKKysJICAgIEJOX2ZyZWUoZyk7CisrCSAgICBwID0gTlVMTDsKKysJ ICAgIHEgPSBOVUxMOworKwkgICAgZyA9IE5VTEw7CisrCSAgICBGSVBTX2RzYV9mcmVlKGRzYSk7 CisrCSAgICBkc2EgPSBOVUxMOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKysvKiBLZXlwYWly IHZlcmlmaWNhdGlvbiByb3V0aW5lLiBOQjogdGhpcyBpc24ndCBwYXJ0IG9mIHRoZSBzdGFuZGFy ZCBGSVBTMTQwLTIKKysgKiBhbGdvcml0aG0gdGVzdHMuIEl0IGlzIGFuIGFkZGl0aW9uYWwgdGVz dCB0byBwZXJmb3JtIHNhbml0eSBjaGVja3Mgb24gdGhlCisrICogb3V0cHV0IG9mIHRoZSBLZXlQ YWlyIHRlc3QuCisrICovCisrCisrc3RhdGljIGludCBkc3NfcGFyYW1jaGVjayhpbnQgbm1vZCwg QklHTlVNICpwLCBCSUdOVU0gKnEsIEJJR05VTSAqZywKKysJCQkJCQkJQk5fQ1RYICpjdHgpCisr ICAgIHsKKysgICAgQklHTlVNICpyZW0gPSBOVUxMOworKyAgICBpZiAoQk5fbnVtX2JpdHMocCkg IT0gbm1vZCkKKysJcmV0dXJuIDA7CisrICAgIGlmIChCTl9udW1fYml0cyhxKSAhPSAxNjApCisr CXJldHVybiAwOworKyAgICBpZiAoQk5faXNfcHJpbWVfZXgocCwgQk5fcHJpbWVfY2hlY2tzLCBj dHgsIE5VTEwpICE9IDEpCisrCXJldHVybiAwOworKyAgICBpZiAoQk5faXNfcHJpbWVfZXgocSwg Qk5fcHJpbWVfY2hlY2tzLCBjdHgsIE5VTEwpICE9IDEpCisrCXJldHVybiAwOworKyAgICByZW0g PSBCTl9uZXcoKTsKKysgICAgaWYgKCFCTl9tb2QocmVtLCBwLCBxLCBjdHgpIHx8ICFCTl9pc19v bmUocmVtKQorKyAgICAJfHwgKEJOX2NtcChnLCBCTl92YWx1ZV9vbmUoKSkgPD0gMCkKKysJfHwg IUJOX21vZF9leHAocmVtLCBnLCBxLCBwLCBjdHgpIHx8ICFCTl9pc19vbmUocmVtKSkKKysJewor KwlCTl9mcmVlKHJlbSk7CisrCXJldHVybiAwOworKwl9CisrICAgIC8qIFRvZG86IGNoZWNrIGcg Ki8KKysgICAgQk5fZnJlZShyZW0pOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworK3ZvaWQg a2V5dmVyKCkKKysgICAgeworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEw MjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIEJJR05VTSAqcCA9IE5VTEws ICpxID0gTlVMTCwgKmcgPSBOVUxMLCAqWCA9IE5VTEwsICpZID0gTlVMTDsKKysgICAgQklHTlVN ICpZMjsKKysgICAgQk5fQ1RYICpjdHggPSBOVUxMOworKyAgICBpbnQgbm1vZD0wLCBwYXJhbWNo ZWNrID0gMDsKKysKKysgICAgY3R4ID0gQk5fQ1RYX25ldygpOworKyAgICBZMiA9IEJOX25ldygp OworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJ eworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsK KysJCWZwdXRzKGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9CisrCWlmKCFzdHJjbXAo a2V5d29yZCwiW21vZCIpKQorKwkgICAgeworKwkgICAgaWYgKHApCisrCQlCTl9mcmVlKHApOwor KwkgICAgcCA9IE5VTEw7CisrCSAgICBpZiAocSkKKysJCUJOX2ZyZWUocSk7CisrCSAgICBxID0g TlVMTDsKKysJICAgIGlmIChnKQorKwkJQk5fZnJlZShnKTsKKysJICAgIGcgPSBOVUxMOworKwkg ICAgcGFyYW1jaGVjayA9IDA7CisrCSAgICBubW9kPWF0b2kodmFsdWUpOworKwkgICAgfQorKwll bHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUCIpKQorKwkgICAgcD1oZXgyYm4odmFsdWUpOworKwll bHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIpKQorKwkgICAgcT1oZXgyYm4odmFsdWUpOworKwll bHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRyIpKQorKwkgICAgZz1oZXgyYm4odmFsdWUpOworKwll bHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiWCIpKQorKwkgICAgWD1oZXgyYm4odmFsdWUpOworKwll bHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiWSIpKQorKwkgICAgeworKwkgICAgWT1oZXgyYm4odmFs dWUpOworKwkgICAgaWYgKCFwIHx8ICFxIHx8ICFnIHx8ICFYIHx8ICFZKQorKwkJeworKwkJZnBy aW50ZihzdGRlcnIsICJQYXJzZSBFcnJvclxuIik7CisrCQlleGl0ICgxKTsKKysJCX0KKysJICAg IHBibigiUCIscCk7CisrCSAgICBwYm4oIlEiLHEpOworKwkgICAgcGJuKCJHIixnKTsKKysJICAg IHBibigiWCIsWCk7CisrCSAgICBwYm4oIlkiLFkpOworKwkgICAgaWYgKCFwYXJhbWNoZWNrKQor KwkJeworKwkJaWYgKGRzc19wYXJhbWNoZWNrKG5tb2QsIHAsIHEsIGcsIGN0eCkpCisrCQkJcGFy YW1jaGVjayA9IDE7CisrCQllbHNlCisrCQkJcGFyYW1jaGVjayA9IC0xOworKwkJfQorKwkgICAg aWYgKHBhcmFtY2hlY2sgIT0gMSkKKysJICAgCXByaW50ZigiUmVzdWx0ID0gRlxuIik7CisrCSAg ICBlbHNlCisrCQl7CisrCQlpZiAoIUJOX21vZF9leHAoWTIsIGcsIFgsIHAsIGN0eCkgfHwgQk5f Y21wKFkyLCBZKSkKKysJICAgIAkJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsKKysJICAgICAgICBl bHNlCisrCSAgICAJCXByaW50ZigiUmVzdWx0ID0gUFxuIik7CisrCQl9CisrCSAgICBCTl9mcmVl KFgpOworKwkgICAgQk5fZnJlZShZKTsKKysJICAgIFggPSBOVUxMOworKwkgICAgWSA9IE5VTEw7 CisrCSAgICB9CisrCX0KKysJaWYgKHApCisrCSAgICBCTl9mcmVlKHApOworKwlpZiAocSkKKysJ ICAgIEJOX2ZyZWUocSk7CisrCWlmIChnKQorKwkgICAgQk5fZnJlZShnKTsKKysJaWYgKFkyKQor KwkgICAgQk5fZnJlZShZMik7CisrICAgIH0KKysKKyt2b2lkIGtleXBhaXIoKQorKyAgICB7Cisr ICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtl eXdvcmQsICp2YWx1ZTsKKysgICAgaW50IG5tb2Q9MDsKKysKKysgICAgd2hpbGUoZmdldHMoYnVm LHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3 b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7CisrCQlmcHV0cyhidWYsc3Rkb3V0KTsKKysJ CWNvbnRpbnVlOworKwkJfQorKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKKysJICAgIG5t b2Q9YXRvaSh2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJOIikpCisrCSAgICB7 CisrCSAgICBEU0EgKmRzYTsKKysJICAgIGludCBuPWF0b2kodmFsdWUpOworKworKwkgICAgcHJp bnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7CisrCSAgICBkc2EgPSBGSVBTX2RzYV9uZXcoKTsK KysJICAgIGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLE5VTEwsMCxO VUxMLE5VTEwsTlVMTCkpCisrCQl7CisrCQlkb19wcmludF9lcnJvcnMoKTsKKysJCWV4aXQoMSk7 CisrCQl9CisrCSAgICBwYm4oIlAiLGRzYS0+cCk7CisrCSAgICBwYm4oIlEiLGRzYS0+cSk7Cisr CSAgICBwYm4oIkciLGRzYS0+Zyk7CisrCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKKysKKysJICAg IHdoaWxlKG4tLSkKKysJCXsKKysJCWlmICghRFNBX2dlbmVyYXRlX2tleShkc2EpKQorKwkJCXsK KysJCQlkb19wcmludF9lcnJvcnMoKTsKKysJCQlleGl0KDEpOworKwkJCX0KKysKKysJCXBibigi WCIsZHNhLT5wcml2X2tleSk7CisrCQlwYm4oIlkiLGRzYS0+cHViX2tleSk7CisrCQlwdXRjKCdc bicsc3Rkb3V0KTsKKysJCX0KKysJICAgIH0KKysJfQorKyAgICB9CisrCisrdm9pZCBzaWdnZW4o KQorKyAgICB7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07Cisr ICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgaW50IG5tb2Q9MDsKKysgICAgRFNBICpk c2E9TlVMTDsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5V TEwpCisrCXsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1Zikp CisrCQl7CisrCQlmcHV0cyhidWYsc3Rkb3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlpZigh c3RyY21wKGtleXdvcmQsIlttb2QiKSkKKysJICAgIHsKKysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7 CisrCSAgICBwcmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsKKysJICAgIGlmIChkc2EpCisr CQlGSVBTX2RzYV9mcmVlKGRzYSk7CisrCSAgICBkc2EgPSBGSVBTX2RzYV9uZXcoKTsKKysJICAg IGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLE5VTEwsMCxOVUxMLE5V TEwsTlVMTCkpCisrCQl7CisrCQlkb19wcmludF9lcnJvcnMoKTsKKysJCWV4aXQoMSk7CisrCQl9 CisrCSAgICBwYm4oIlAiLGRzYS0+cCk7CisrCSAgICBwYm4oIlEiLGRzYS0+cSk7CisrCSAgICBw Ym4oIkciLGRzYS0+Zyk7CisrCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKKysJICAgIH0KKysJZWxz ZSBpZighc3RyY21wKGtleXdvcmQsIk1zZyIpKQorKwkgICAgeworKwkgICAgdW5zaWduZWQgY2hh ciBtc2dbMTAyNF07CisrCSAgICB1bnNpZ25lZCBjaGFyIHNidWZbNjBdOworKwkgICAgdW5zaWdu ZWQgaW50IHNsZW47CisrCSAgICBpbnQgbjsKKysJICAgIEVWUF9QS0VZIHBrOworKwkgICAgRVZQ X01EX0NUWCBtY3R4OworKwkgICAgRFNBX1NJRyAqc2lnOworKwkgICAgRVZQX01EX0NUWF9pbml0 KCZtY3R4KTsKKysKKysJICAgIG49aGV4MmJpbih2YWx1ZSxtc2cpOworKwkgICAgcHYoIk1zZyIs bXNnLG4pOworKworKwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCisrCQl7CisrCQlk b19wcmludF9lcnJvcnMoKTsKKysJCWV4aXQoMSk7CisrCQl9CisrCSAgICBway50eXBlID0gRVZQ X1BLRVlfRFNBOworKwkgICAgcGsucGtleS5kc2EgPSBkc2E7CisrCSAgICBwYm4oIlkiLGRzYS0+ cHViX2tleSk7CisrCisrCSAgICBFVlBfU2lnbkluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5V TEwpOworKwkgICAgRVZQX1NpZ25VcGRhdGUoJm1jdHgsIG1zZywgbik7CisrCSAgICBFVlBfU2ln bkZpbmFsKCZtY3R4LCBzYnVmLCAmc2xlbiwgJnBrKTsKKysKKysJICAgIHNpZyA9IERTQV9TSUdf bmV3KCk7CisrCSAgICBGSVBTX2RzYV9zaWdfZGVjb2RlKHNpZywgc2J1Ziwgc2xlbik7CisrCisr CSAgICBwYm4oIlIiLHNpZy0+cik7CisrCSAgICBwYm4oIlMiLHNpZy0+cyk7CisrCSAgICBwdXRj KCdcbicsc3Rkb3V0KTsKKysJICAgIERTQV9TSUdfZnJlZShzaWcpOworKwkgICAgRVZQX01EX0NU WF9jbGVhbnVwKCZtY3R4KTsKKysJICAgIH0KKysJfQorKwlpZiAoZHNhKQorKwkJRklQU19kc2Ff ZnJlZShkc2EpOworKyAgICB9CisrCisrdm9pZCBzaWd2ZXIoKQorKyAgICB7CisrICAgIERTQSAq ZHNhPU5VTEw7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07Cisr ICAgIHVuc2lnbmVkIGNoYXIgbXNnWzEwMjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7 CisrICAgIGludCBubW9kPTAsIG49MDsKKysgICAgRFNBX1NJRyBzZywgKnNpZyA9ICZzZzsKKysK KysgICAgc2lnLT5yID0gTlVMTDsKKysgICAgc2lnLT5zID0gTlVMTDsKKysKKysgICAgd2hpbGUo ZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJaWYgKCFwYXJzZV9s aW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7CisrCQlmcHV0cyhidWYsc3Rk b3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkK KysJICAgIHsKKysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7CisrCSAgICBpZihkc2EpCisrCQlGSVBT X2RzYV9mcmVlKGRzYSk7CisrCSAgICBkc2E9RklQU19kc2FfbmV3KCk7CisrCSAgICB9CisrCWVs c2UgaWYoIXN0cmNtcChrZXl3b3JkLCJQIikpCisrCSAgICBkc2EtPnA9aGV4MmJuKHZhbHVlKTsK KysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlEiKSkKKysJICAgIGRzYS0+cT1oZXgyYm4odmFs dWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRyIpKQorKwkgICAgeworKwkgICAgZHNh LT5nPWhleDJibih2YWx1ZSk7CisrCisrCSAgICBwcmludGYoIlttb2QgPSAlZF1cblxuIixubW9k KTsKKysJICAgIHBibigiUCIsZHNhLT5wKTsKKysJICAgIHBibigiUSIsZHNhLT5xKTsKKysJICAg IHBibigiRyIsZHNhLT5nKTsKKysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKwkgICAgfQorKwll bHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTXNnIikpCisrCSAgICB7CisrCSAgICBuPWhleDJiaW4o dmFsdWUsbXNnKTsKKysJICAgIHB2KCJNc2ciLG1zZyxuKTsKKysJICAgIH0KKysJZWxzZSBpZigh c3RyY21wKGtleXdvcmQsIlkiKSkKKysJICAgIGRzYS0+cHViX2tleT1oZXgyYm4odmFsdWUpOwor KwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUiIpKQorKwkgICAgc2lnLT5yPWhleDJibih2YWx1 ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJTIikpCisrCSAgICB7CisrCSAgICBFVlBf TURfQ1RYIG1jdHg7CisrCSAgICBFVlBfUEtFWSBwazsKKysJICAgIHVuc2lnbmVkIGNoYXIgc2ln YnVmWzYwXTsKKysJICAgIHVuc2lnbmVkIGludCBzbGVuOworKwkgICAgaW50IHI7CisrCSAgICBF VlBfTURfQ1RYX2luaXQoJm1jdHgpOworKwkgICAgcGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKKysJ ICAgIHBrLnBrZXkuZHNhID0gZHNhOworKwkgICAgc2lnLT5zPWhleDJibih2YWx1ZSk7CisrCQor KwkgICAgcGJuKCJZIixkc2EtPnB1Yl9rZXkpOworKwkgICAgcGJuKCJSIixzaWctPnIpOworKwkg ICAgcGJuKCJTIixzaWctPnMpOworKworKwkgICAgc2xlbiA9IEZJUFNfZHNhX3NpZ19lbmNvZGUo c2lnYnVmLCBzaWcpOworKwkgICAgRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCks IE5VTEwpOworKwkgICAgRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgbXNnLCBuKTsKKysJICAgIHIg PSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIHNpZ2J1Ziwgc2xlbiwgJnBrKTsKKysJICAgIEVWUF9N RF9DVFhfY2xlYW51cCgmbWN0eCk7CisrCQorKwkgICAgcHJpbnRmKCJSZXN1bHQgPSAlY1xuIiwg ciA9PSAxID8gJ1AnIDogJ0YnKTsKKysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKwkgICAgfQor Kwl9CisrICAgIH0KKysKKytpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKKysgICAgewor KyAgICBpZihhcmdjICE9IDIpCisrCXsKKysJZnByaW50ZihzdGRlcnIsIiVzIFtwcmltZXxwcWd8 cHFndmVyfGtleXBhaXJ8c2lnZ2VufHNpZ3Zlcl1cbiIsYXJndlswXSk7CisrCWV4aXQoMSk7Cisr CX0KKysgICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCXsKKysJZG9fcHJpbnRfZXJyb3JzKCk7 CisrCWV4aXQoMSk7CisrCX0KKysgICAgaWYoIXN0cmNtcChhcmd2WzFdLCJwcmltZSIpKQorKwlw cmltZXMoKTsKKysgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInBxZyIpKQorKwlwcWcoKTsK KysgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInBxZ3ZlciIpKQorKwlwcWd2ZXIoKTsKKysg ICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sImtleXBhaXIiKSkKKysJa2V5cGFpcigpOworKyAg ICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwia2V5dmVyIikpCisrCWtleXZlcigpOworKyAgICBl bHNlIGlmKCFzdHJjbXAoYXJndlsxXSwic2lnZ2VuIikpCisrCXNpZ2dlbigpOworKyAgICBlbHNl IGlmKCFzdHJjbXAoYXJndlsxXSwic2lndmVyIikpCisrCXNpZ3ZlcigpOworKyAgICBlbHNlCisr CXsKKysJZnByaW50ZihzdGRlcnIsIkRvbid0IGtub3cgaG93IHRvICVzLlxuIixhcmd2WzFdKTsK KysJZXhpdCgxKTsKKysJfQorKworKyAgICByZXR1cm4gMDsKKysgICAgfQorKworKyNlbmRpZgor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZ2NtdGVz dC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZ2NtdGVz dC5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZ2NtdGVz dC5jLmZpcHMJMjAxMi0wMi0yOSAxMDozMzowMi43OTEyOTQ4NzEgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19nY210ZXN0LmMJMjAxMi0wMi0yOSAx MDozMzowMi43OTEyOTQ4NzEgKzAxMDAKK0BAIC0wLDAgKzEsNTcxIEBACisrLyogZmlwcy9hZXMv Zmlwc19nY210ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0 ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8q ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3Qu ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z CisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlv bi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysg KiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11 c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBs aWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5 ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisr ICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVk aXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxv d2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysg KgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBg YEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVD VCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK KysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqLworKworKworKyNkZWZpbmUgT1BFTlNTTF9G SVBTQVBJCisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysKKysjaWZuZGVmIE9Q RU5TU0xfRklQUworKyNpbmNsdWRlIDxzdGRpby5oPgorKworK2ludCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBHQ00gc3VwcG9ydFxuIik7Cisr ICAgIHJldHVybigwKTsKKyt9CisrI2Vsc2UKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5j bHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrCisrI2luY2x1ZGUgImZpcHNf dXRsLmgiCisrCisrc3RhdGljIHZvaWQgZ2NtdGVzdChGSUxFICppbiwgRklMRSAqb3V0LCBpbnQg ZW5jcnlwdCkKKysJeworKwljaGFyIGJ1ZlsyMDQ4XTsKKysJY2hhciBsYnVmWzIwNDhdOworKwlj aGFyICprZXl3b3JkLCAqdmFsdWU7CisrCWludCBrZXlsZW4gPSAtMSwgaXZsZW4gPSAtMSwgYWFk bGVuID0gLTEsIHRhZ2xlbiA9IC0xLCBwdGxlbiA9IC0xOworKwlpbnQgcnY7CisrCWxvbmcgbDsK KysJdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTCwgKml2ID0gTlVMTCwgKmFhZCA9IE5VTEwsICp0 YWcgPSBOVUxMOworKwl1bnNpZ25lZCBjaGFyICpjdCA9IE5VTEwsICpwdCA9IE5VTEw7CisrCUVW UF9DSVBIRVJfQ1RYIGN0eDsKKysJY29uc3QgRVZQX0NJUEhFUiAqZ2NtID0gTlVMTDsKKysJRklQ U19jaXBoZXJfY3R4X2luaXQoJmN0eCk7CisrCisrCXdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVm LGluKSAhPSBOVUxMKQorKwkJeworKwkJZnB1dHMoYnVmLG91dCk7CisrCQlpZiAoIXBhcnNlX2xp bmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCQljb250aW51ZTsKKysJCWlmKCFz dHJjbXAoa2V5d29yZCwiW0tleWxlbiIpKQorKwkJCXsKKysJCQlrZXlsZW4gPSBhdG9pKHZhbHVl KTsKKysJCQlpZiAoa2V5bGVuID09IDEyOCkKKysJCQkJZ2NtID0gRVZQX2Flc18xMjhfZ2NtKCk7 CisrCQkJZWxzZSBpZiAoa2V5bGVuID09IDE5MikKKysJCQkJZ2NtID0gRVZQX2Flc18xOTJfZ2Nt KCk7CisrCQkJZWxzZSBpZiAoa2V5bGVuID09IDI1NikKKysJCQkJZ2NtID0gRVZQX2Flc18yNTZf Z2NtKCk7CisrCQkJZWxzZSAKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlVuc3VwcG9y dGVkIGtleWxlbiAlZFxuIiwKKysJCQkJCQkJa2V5bGVuKTsKKysJCQkJfQorKwkJCWtleWxlbiA+ Pj0gMzsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJbSVZsZW4iKSkKKysJ CQlpdmxlbiA9IGF0b2kodmFsdWUpID4+IDM7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQs ICJbQUFEbGVuIikpCisrCQkJYWFkbGVuID0gYXRvaSh2YWx1ZSkgPj4gMzsKKysJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgIltUYWdsZW4iKSkKKysJCQl0YWdsZW4gPSBhdG9pKHZhbHVlKSA+ PiAzOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiW1BUbGVuIikpCisrCQkJcHRsZW4g PSBhdG9pKHZhbHVlKSA+PiAzOworKwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIktleSIpKQor KwkJCXsKKysJCQlrZXkgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlpZiAobCAhPSBrZXls ZW4pCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgS2V5IGxlbmd0 aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmKCFzdHJjbXAo a2V5d29yZCwiSVYiKSkKKysJCQl7CisrCQkJaXYgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJ CQlpZiAobCAhPSBpdmxlbikKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lz dGVudCBJViBsZW5ndGhcbiIpOworKwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJZWxz ZSBpZighc3RyY21wKGtleXdvcmQsIlBUIikpCisrCQkJeworKwkJCXB0ID0gaGV4MmJpbl9tKHZh bHVlLCAmbCk7CisrCQkJaWYgKGwgIT0gcHRsZW4pCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRl cnIsICJJbmNvbnNpc3RlbnQgUFQgbGVuZ3RoXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQor KwkJCX0KKysJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJDVCIpKQorKwkJCXsKKysJCQljdCA9 IGhleDJiaW5fbSh2YWx1ZSwgJmwpOworKwkJCWlmIChsICE9IHB0bGVuKQorKwkJCQl7CisrCQkJ CWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IENUIGxlbmd0aFxuIik7CisrCQkJCWV4aXQo MSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiQUFEIikpCisr CQkJeworKwkJCWFhZCA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOworKwkJCWlmIChsICE9IGFhZGxl bikKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBBQUQgbGVuZ3Ro XG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYoIXN0cmNtcChr ZXl3b3JkLCJUYWciKSkKKysJCQl7CisrCQkJdGFnID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Cisr CQkJaWYgKGwgIT0gdGFnbGVuKQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25z aXN0ZW50IFRhZyBsZW5ndGhcbiIpOworKwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJ aWYgKGVuY3J5cHQgJiYgcHQgJiYgYWFkICYmIChpdiB8fCBlbmNyeXB0PT0xKSkKKysJCQl7Cisr CQkJdGFnID0gT1BFTlNTTF9tYWxsb2ModGFnbGVuKTsKKysJCQlGSVBTX2NpcGhlcmluaXQoJmN0 eCwgZ2NtLCBOVUxMLCBOVUxMLCAxKTsKKysJCQkvKiBSZWxheCBGSVBTIGNvbnN0cmFpbnRzIGZv ciB0ZXN0aW5nICovCisrCQkJTV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX0NJ UEhfRkxBR19OT05fRklQU19BTExPVyk7CisrCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwg RVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwgaXZsZW4sIDApOworKwkJCWlmIChlbmNyeXB0ID09IDEp CisrCQkJCXsKKysJCQkJc3RhdGljIHVuc2lnbmVkIGNoYXIgaXZfZml4ZWRbNF0gPSB7MSwyLDMs NH07CisrCQkJCWlmICghaXYpCisrCQkJCQlpdiA9IE9QRU5TU0xfbWFsbG9jKGl2bGVuKTsKKysJ CQkJRklQU19jaXBoZXJpbml0KCZjdHgsIE5VTEwsIGtleSwgTlVMTCwgMSk7CisrCQkJCUZJUFNf Y2lwaGVyX2N0eF9jdHJsKCZjdHgsCisrCQkJCQkJRVZQX0NUUkxfR0NNX1NFVF9JVl9GSVhFRCwK KysJCQkJCQk0LCBpdl9maXhlZCk7CisrCQkJCWlmICghRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0 eCwKKysJCQkJCUVWUF9DVFJMX0dDTV9JVl9HRU4sIDAsIGl2KSkKKysJCQkJCXsKKysJCQkJCWZw cmludGYoc3RkZXJyLCAiSVYgZ2VuIGVycm9yXG4iKTsKKysJCQkJCWV4aXQoMSk7CisrCQkJCQl9 CisrCQkJCU91dHB1dFZhbHVlKCJJViIsIGl2LCBpdmxlbiwgb3V0LCAwKTsKKysJCQkJfQorKwkJ CWVsc2UKKysJCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIE5VTEwsIGtleSwgaXYsIDEpOworKwor KworKwkJCWlmIChhYWRsZW4pCisrCQkJCUZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIGFhZCwgYWFk bGVuKTsKKysJCQlpZiAocHRsZW4pCisrCQkJCXsKKysJCQkJY3QgPSBPUEVOU1NMX21hbGxvYyhw dGxlbik7CisrCQkJCXJ2ID0gRklQU19jaXBoZXIoJmN0eCwgY3QsIHB0LCBwdGxlbik7CisrCQkJ CX0KKysJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCAwKTsKKysJCQlGSVBTX2NpcGhl cl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fR0VUX1RBRywKKysJCQkJCQkJCXRhZ2xlbiwg dGFnKTsJCisrCQkJT3V0cHV0VmFsdWUoIkNUIiwgY3QsIHB0bGVuLCBvdXQsIDApOworKwkJCU91 dHB1dFZhbHVlKCJUYWciLCB0YWcsIHRhZ2xlbiwgb3V0LCAwKTsKKysJCQlpZiAoaXYpCisrCQkJ CU9QRU5TU0xfZnJlZShpdik7CisrCQkJaWYgKGFhZCkKKysJCQkJT1BFTlNTTF9mcmVlKGFhZCk7 CisrCQkJaWYgKGN0KQorKwkJCQlPUEVOU1NMX2ZyZWUoY3QpOworKwkJCWlmIChwdCkKKysJCQkJ T1BFTlNTTF9mcmVlKHB0KTsKKysJCQlpZiAoa2V5KQorKwkJCQlPUEVOU1NMX2ZyZWUoa2V5KTsK KysJCQlpZiAodGFnKQorKwkJCQlPUEVOU1NMX2ZyZWUodGFnKTsKKysJCQlpdiA9IGFhZCA9IGN0 ID0gcHQgPSBrZXkgPSB0YWcgPSBOVUxMOworKwkJCX0JCisrCQlpZiAoIWVuY3J5cHQgJiYgdGFn KQorKwkJCXsKKysJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgZ2NtLCBOVUxMLCBOVUxMLCAwKTsK KysJCQkvKiBSZWxheCBGSVBTIGNvbnN0cmFpbnRzIGZvciB0ZXN0aW5nICovCisrCQkJTV9FVlBf Q0lQSEVSX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVyk7 CisrCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwg aXZsZW4sIDApOworKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBOVUxMLCBrZXksIGl2LCAwKTsK KysJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX1RBRywgdGFn bGVuLCB0YWcpOworKwkJCWlmIChhYWRsZW4pCisrCQkJCUZJUFNfY2lwaGVyKCZjdHgsIE5VTEws IGFhZCwgYWFkbGVuKTsKKysJCQlpZiAocHRsZW4pCisrCQkJCXsKKysJCQkJcHQgPSBPUEVOU1NM X21hbGxvYyhwdGxlbik7CisrCQkJCXJ2ID0gRklQU19jaXBoZXIoJmN0eCwgcHQsIGN0LCBwdGxl bik7CisrCQkJCX0KKysJCQlydiA9IEZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIDApOwor KwkJCWlmIChydiA8IDApCisrCQkJCWZwcmludGYob3V0LCAiRkFJTCIgUkVTUF9FT0wpOworKwkJ CWVsc2UKKysJCQkJT3V0cHV0VmFsdWUoIlBUIiwgcHQsIHB0bGVuLCBvdXQsIDApOworKwkJCWlm IChpdikKKysJCQkJT1BFTlNTTF9mcmVlKGl2KTsKKysJCQlpZiAoYWFkKQorKwkJCQlPUEVOU1NM X2ZyZWUoYWFkKTsKKysJCQlpZiAoY3QpCisrCQkJCU9QRU5TU0xfZnJlZShjdCk7CisrCQkJaWYg KHB0KQorKwkJCQlPUEVOU1NMX2ZyZWUocHQpOworKwkJCWlmIChrZXkpCisrCQkJCU9QRU5TU0xf ZnJlZShrZXkpOworKwkJCWlmICh0YWcpCisrCQkJCU9QRU5TU0xfZnJlZSh0YWcpOworKwkJCWl2 ID0gYWFkID0gY3QgPSBwdCA9IGtleSA9IHRhZyA9IE5VTEw7CisrCQkJfQorKwkJfQorKwlGSVBT X2NpcGhlcl9jdHhfY2xlYW51cCgmY3R4KTsJCisrCX0KKysKKytzdGF0aWMgdm9pZCB4dHN0ZXN0 KEZJTEUgKmluLCBGSUxFICpvdXQpCisrCXsKKysJY2hhciBidWZbMjA0ODAwXTsKKysJY2hhciBs YnVmWzIwNDgwMF07CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysJaW50IGlubGVuID0gMDsK KysJaW50IGVuY3J5cHQgPSAwOworKwlsb25nIGw7CisrCXVuc2lnbmVkIGNoYXIgKmtleSA9IE5V TEwsICppdiA9IE5VTEw7CisrCXVuc2lnbmVkIGNoYXIgKmluYnVmID0gTlVMTCwgKm91dGJ1ZiA9 IE5VTEw7CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsKKysJY29uc3QgRVZQX0NJUEhFUiAqeHRzID0g TlVMTDsKKysJRklQU19jaXBoZXJfY3R4X2luaXQoJmN0eCk7CisrCisrCXdoaWxlKGZnZXRzKGJ1 ZixzaXplb2YgYnVmLGluKSAhPSBOVUxMKQorKwkJeworKwkJZnB1dHMoYnVmLG91dCk7CisrCQlp ZiAoYnVmWzBdID09ICdbJyAmJiBzdHJsZW4oYnVmKSA+PSA5KQorKwkJCXsKKysJCQlpZighc3Ry bmNtcChidWYsIltFTkNSWVBUXSIsIDkpKQorKwkJCQllbmNyeXB0ID0gMTsKKysJCQllbHNlIGlm KCFzdHJuY21wKGJ1ZiwiW0RFQ1JZUFRdIiwgOSkpCisrCQkJCWVuY3J5cHQgPSAwOworKwkJCX0K KysJCWlmICAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCQlj b250aW51ZTsKKysJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkKKysJCQl7CisrCQkJ a2V5ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaWYgKGwgPT0gMzIpCisrCQkJCXh0cyA9 IEVWUF9hZXNfMTI4X3h0cygpOworKwkJCWVsc2UgaWYgKGwgPT0gNjQpCisrCQkJCXh0cyA9IEVW UF9hZXNfMjU2X3h0cygpOworKwkJCWVsc2UKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwg IkluY29uc2lzdGVudCBLZXkgbGVuZ3RoXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJ CX0KKysJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJpIikpCisrCQkJeworKwkJCWl2ID0gaGV4 MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaWYgKGwgIT0gMTYpCisrCQkJCXsKKysJCQkJZnByaW50 ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgaSBsZW5ndGhcbiIpOworKwkJCQlleGl0KDEpOworKwkJ CQl9CisrCQkJfQorKwkJZWxzZSBpZihlbmNyeXB0ICYmICFzdHJjbXAoa2V5d29yZCwiUFQiKSkK KysJCQl7CisrCQkJaW5idWYgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlpbmxlbiA9IGw7 CisrCQkJfQorKwkJZWxzZSBpZighZW5jcnlwdCAmJiAhc3RyY21wKGtleXdvcmQsIkNUIikpCisr CQkJeworKwkJCWluYnVmID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaW5sZW4gPSBsOwor KwkJCX0KKysJCWlmIChpbmJ1ZikKKysJCQl7CisrCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIHh0 cywga2V5LCBpdiwgZW5jcnlwdCk7CisrCQkJb3V0YnVmID0gT1BFTlNTTF9tYWxsb2MoaW5sZW4p OworKwkJCUZJUFNfY2lwaGVyKCZjdHgsIG91dGJ1ZiwgaW5idWYsIGlubGVuKTsKKysJCQlPdXRw dXRWYWx1ZShlbmNyeXB0ID8gIkNUIjoiUFQiLCBvdXRidWYsIGlubGVuLCBvdXQsIDApOworKwkJ CU9QRU5TU0xfZnJlZShpbmJ1Zik7CisrCQkJT1BFTlNTTF9mcmVlKG91dGJ1Zik7CisrCQkJT1BF TlNTTF9mcmVlKGtleSk7CisrCQkJT1BFTlNTTF9mcmVlKGl2KTsKKysJCQlpdiA9IGtleSA9IGlu YnVmID0gb3V0YnVmID0gTlVMTDsKKysJCQl9CQorKwkJfQorKwlGSVBTX2NpcGhlcl9jdHhfY2xl YW51cCgmY3R4KTsJCisrCX0KKysKKytzdGF0aWMgdm9pZCBjY210ZXN0KEZJTEUgKmluLCBGSUxF ICpvdXQpCisrCXsKKysJY2hhciBidWZbMjAwMDQ4XTsKKysJY2hhciBsYnVmWzIwMDA0OF07Cisr CWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysJbG9uZyBsOworKwl1bnNpZ25lZCBjaGFyICpLZXkg PSBOVUxMLCAqTm9uY2UgPSBOVUxMOworKwl1bnNpZ25lZCBjaGFyICpBZGF0YSA9IE5VTEwsICpQ YXlsb2FkID0gTlVMTDsKKysJdW5zaWduZWQgY2hhciAqQ1QgPSBOVUxMOworKwlpbnQgUGxlbiA9 IC0xLCBObGVuID0gLTEsIFRsZW4gPSAtMSwgQWxlbiA9IC0xOworKwlpbnQgZGVjciA9IDA7Cisr CUVWUF9DSVBIRVJfQ1RYIGN0eDsKKysJY29uc3QgRVZQX0NJUEhFUiAqY2NtID0gTlVMTDsKKysJ RklQU19jaXBoZXJfY3R4X2luaXQoJmN0eCk7CisrCisrCXdoaWxlKGZnZXRzKGJ1ZixzaXplb2Yg YnVmLGluKSAhPSBOVUxMKQorKwkJeworKwkJY2hhciAqcDsKKysJCWZwdXRzKGJ1ZixvdXQpOwor KwkJcmVkbzoKKysJCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYp KQorKwkJCWNvbnRpbnVlOworKworKwkJLyogSWYgc3Vycm91bmRlZCBieSBzcXVhcmUgYnJhY2tl dHMgemFwIHRoZW0gKi8KKysJCWlmIChrZXl3b3JkWzBdID09ICdbJykKKysJCQl7CisrCQkJa2V5 d29yZCsrOworKwkJCXAgPSBzdHJjaHIodmFsdWUsICddJyk7CisrCQkJaWYgKHApCisrCQkJCSpw ID0gMDsKKysJCQl9CisrCQkvKiBTZWUgaWYgd2UgaGF2ZSBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0 IG9mIHBhcmFtZXRlcnMKKysJCSAqIGlmIHNvIGNvcHkgcmVzdCBvZiBsaW5lIGJhY2sgdG8gYnVm ZmVyIGFuZCByZWRvIGxhdGVyLgorKwkJICovCisrCQlwID0gc3RyY2hyKHZhbHVlLCAnLCcpOwor KwkJaWYgKHApCisrCQkJeworKwkJCSpwID0gMDsKKysJCQlzdHJjcHkoYnVmLCBwICsgMSk7Cisr CQkJc3RyY2F0KGJ1ZiwgIlxuIik7CisrCQkJZGVjciA9IDE7CisrCQkJfQorKwkJaWYgKCFzdHJj bXAoa2V5d29yZCwiUGxlbiIpKQorKwkJCVBsZW4gPSBhdG9pKHZhbHVlKTsKKysJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwiTmxlbiIpKQorKwkJCU5sZW4gPSBhdG9pKHZhbHVlKTsKKysJCWVs c2UgaWYgKCFzdHJjbXAoa2V5d29yZCwiVGxlbiIpKQorKwkJCVRsZW4gPSBhdG9pKHZhbHVlKTsK KysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwiQWxlbiIpKQorKwkJCUFsZW4gPSBhdG9pKHZh bHVlKTsKKysJCWlmIChwKQorKwkJCWdvdG8gcmVkbzsKKysJCWlmICghc3RyY21wKGtleXdvcmQs IktleSIpKQorKwkJCXsKKysJCQlpZiAoS2V5KQorKwkJCQlPUEVOU1NMX2ZyZWUoS2V5KTsKKysJ CQlLZXkgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlpZiAobCA9PSAxNikKKysJCQkJY2Nt ID0gRVZQX2Flc18xMjhfY2NtKCk7CisrCQkJZWxzZSBpZiAobCA9PSAyNCkKKysJCQkJY2NtID0g RVZQX2Flc18xOTJfY2NtKCk7CisrCQkJZWxzZSBpZiAobCA9PSAzMikKKysJCQkJY2NtID0gRVZQ X2Flc18yNTZfY2NtKCk7CisrCQkJZWxzZQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAi SW5jb25zaXN0ZW50IEtleSBsZW5ndGhcbiIpOworKwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJ fQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCJOb25jZSIpKQorKwkJCXsKKysJCQlpZiAo Tm9uY2UpCisrCQkJCU9QRU5TU0xfZnJlZShOb25jZSk7CisrCQkJTm9uY2UgPSBoZXgyYmluX20o dmFsdWUsICZsKTsKKysJCQlpZiAobCAhPSBObGVuKQorKwkJCQl7CisrCQkJCWZwcmludGYoc3Rk ZXJyLCAiSW5jb25zaXN0ZW50IG5vbmNlIGxlbmd0aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJ CX0KKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsIlBheWxvYWQiKSAmJiAhZGVj cikKKysJCQl7CisrCQkJUGF5bG9hZCA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOworKwkJCWlmIChQ bGVuICYmIGwgIT0gUGxlbikKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lz dGVudCBQYXlsb2FkIGxlbmd0aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9Cisr CQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsIkFkYXRhIikpCisrCQkJeworKwkJCWlmIChBZGF0 YSkKKysJCQkJT1BFTlNTTF9mcmVlKEFkYXRhKTsKKysJCQlBZGF0YSA9IGhleDJiaW5fbSh2YWx1 ZSwgJmwpOworKwkJCWlmIChBbGVuICYmIGwgIT0gQWxlbikKKysJCQkJeworKwkJCQlmcHJpbnRm KHN0ZGVyciwgIkluY29uc2lzdGVudCBQYXlsb2FkIGxlbmd0aFxuIik7CisrCQkJCWV4aXQoMSk7 CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsIkNUIikgJiYgZGVj cikKKysJCQl7CisrCQkJQ1QgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlpZiAobCAhPSAo UGxlbiArIFRsZW4pKQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50 IENUIGxlbmd0aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQlpZiAoUGF5 bG9hZCkKKysJCQl7CisrCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIGNjbSwgTlVMTCwgTlVMTCwg MSk7CisrCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9JVkxF TiwgTmxlbiwgMCk7CisrCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NN X1NFVF9UQUcsIFRsZW4sIDApOworKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBOVUxMLCBLZXks IE5vbmNlLCAxKTsKKysKKysJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCBQbGVuKTsK KysJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBBZGF0YSwgQWxlbik7CisrCQkJQ1QgPSBPUEVO U1NMX21hbGxvYyhQbGVuICsgVGxlbik7CisrCQkJRklQU19jaXBoZXIoJmN0eCwgQ1QsIFBheWxv YWQsIFBsZW4pOworKwkJCUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9H RVRfVEFHLCBUbGVuLAorKwkJCQkJCUNUICsgUGxlbik7CisrCQkJT3V0cHV0VmFsdWUoIkNUIiwg Q1QsIFBsZW4gKyBUbGVuLCBvdXQsIDApOworKwkJCU9QRU5TU0xfZnJlZShDVCk7CisrCQkJT1BF TlNTTF9mcmVlKFBheWxvYWQpOworKwkJCUNUID0gUGF5bG9hZCA9IE5VTEw7CisrCQkJfQorKwkJ aWYgKENUKQorKwkJCXsKKysJCQlpbnQgcnY7CisrCQkJaW50IGxlbiA9IFBsZW4gPT0gMCA/IDE6 IFBsZW47CisrCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIGNjbSwgTlVMTCwgTlVMTCwgMCk7Cisr CQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9JVkxFTiwgTmxl biwgMCk7CisrCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9U QUcsCisrCQkJCQkJVGxlbiwgQ1QgKyBQbGVuKTsKKysJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwg TlVMTCwgS2V5LCBOb25jZSwgMCk7CisrCQkJRklQU19jaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwg UGxlbik7CisrCQkJRklQU19jaXBoZXIoJmN0eCwgTlVMTCwgQWRhdGEsIEFsZW4pOworKwkJCVBh eWxvYWQgPSBPUEVOU1NMX21hbGxvYyhsZW4pOworKwkJCXJ2ID0gRklQU19jaXBoZXIoJmN0eCwg UGF5bG9hZCwgQ1QsIFBsZW4pOworKwkJCWlmIChydiA+PSAwKQorKwkJCQl7CisrCQkJCWlmIChy diA9PSAwKQorKwkJCQkJUGF5bG9hZFswXSA9IDA7CisrCQkJCWZwdXRzKCJSZXN1bHQgPSBQYXNz IiBSRVNQX0VPTCwgb3V0KTsKKysJCQkJT3V0cHV0VmFsdWUoIlBheWxvYWQiLCBQYXlsb2FkLCBs ZW4sIG91dCwgMCk7CisrCQkJCX0KKysJCQllbHNlCisrCQkJCWZwdXRzKCJSZXN1bHQgPSBGYWls IiBSRVNQX0VPTCwgb3V0KTsKKysJCQlPUEVOU1NMX2ZyZWUoQ1QpOworKwkJCU9QRU5TU0xfZnJl ZShQYXlsb2FkKTsKKysJCQlDVCA9IFBheWxvYWQgPSBOVUxMOworKwkJCX0KKysJCX0KKysJaWYg KEtleSkKKysJCU9QRU5TU0xfZnJlZShLZXkpOworKwlpZiAoTm9uY2UpCisrCQlPUEVOU1NMX2Zy ZWUoTm9uY2UpOworKwlpZiAoQWRhdGEpCisrCQlPUEVOU1NMX2ZyZWUoQWRhdGEpOworKwlGSVBT X2NpcGhlcl9jdHhfY2xlYW51cCgmY3R4KTsKKysJfQorKworKyNpZmRlZiBGSVBTX0FMR1ZTCisr aW50IGZpcHNfZ2NtdGVzdF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKysjZWxzZQorK2lu dCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKysjZW5kaWYKKysJeworKwlpbnQgZW5jcnlw dDsKKysJaW50IHh0cyA9IDAsIGNjbSA9IDA7CisrCUZJTEUgKmluLCAqb3V0OworKwlpZiAoYXJn YyA9PSA0KQorKwkJeworKwkJaW4gPSBmb3Blbihhcmd2WzJdLCAiciIpOworKwkJaWYgKCFpbikK KysJCQl7CisrCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIGlucHV0IGZpbGVcbiIp OworKwkJCWV4aXQoMSk7CisrCQkJfQorKwkJb3V0ID0gZm9wZW4oYXJndlszXSwgInciKTsKKysJ CWlmICghb3V0KQorKwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgb3V0 cHV0IGZpbGVcbiIpOworKwkJCWV4aXQoMSk7CisrCQkJfQorKwkJfQorKwllbHNlIGlmIChhcmdj ID09IDIpCisrCQl7CisrCQlpbiA9IHN0ZGluOworKwkJb3V0ID0gc3Rkb3V0OworKwkJfQorKwll bHNlCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwiJXMgWy1lbmNyeXB0fC1kZWNyeXB0XVxuIixh cmd2WzBdKTsKKysJCWV4aXQoMSk7CisrCQl9CisrCWZpcHNfYWxndGVzdF9pbml0KCk7CisrCWlm KCFzdHJjbXAoYXJndlsxXSwiLWVuY3J5cHQiKSkKKysJCWVuY3J5cHQgPSAxOworKwllbHNlIGlm KCFzdHJjbXAoYXJndlsxXSwiLWVuY3J5cHRJVmV4dCIpKQorKwkJZW5jcnlwdCA9IDI7CisrCWVs c2UgaWYoIXN0cmNtcChhcmd2WzFdLCItZGVjcnlwdCIpKQorKwkJZW5jcnlwdCA9IDA7CisrCWVs c2UgaWYoIXN0cmNtcChhcmd2WzFdLCItY2NtIikpCisrCQljY20gPSAxOworKwllbHNlIGlmKCFz dHJjbXAoYXJndlsxXSwiLXh0cyIpKQorKwkJeHRzID0gMTsKKysJZWxzZQorKwkJeworKwkJZnBy aW50ZihzdGRlcnIsIkRvbid0IGtub3cgaG93IHRvICVzLlxuIixhcmd2WzFdKTsKKysJCWV4aXQo MSk7CisrCQl9CisrCisrCWlmIChjY20pCisrCQljY210ZXN0KGluLCBvdXQpOworKwllbHNlIGlm ICh4dHMpCisrCQl4dHN0ZXN0KGluLCBvdXQpOworKwllbHNlCisrCQlnY210ZXN0KGluLCBvdXQs IGVuY3J5cHQpOworKworKwlpZiAoYXJnYyA9PSA0KQorKwkJeworKwkJZmNsb3NlKGluKTsKKysJ CWZjbG9zZShvdXQpOworKwkJfQorKworKwlyZXR1cm4gMDsKKyt9CisrCisrI2VuZGlmCitkaWZm IC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5jLmZp cHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMuYworLS0t IG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMuZmlwcwky MDEyLTAyLTI5IDEwOjMzOjAyLjc5MTI5NDg3MSArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0 YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMJMjAxMi0wMi0yOSAxMDozMzowMi43OTEy OTQ4NzEgKzAxMDAKK0BAIC0wLDAgKzEsMjMwIEBACisrLyoKKysgKiBDcnVkZSB0ZXN0IGRyaXZl ciBmb3IgcHJvY2Vzc2luZyB0aGUgVlNUIGFuZCBNQ1QgdGVzdHZlY3RvciBmaWxlcworKyAqIGdl bmVyYXRlZCBieSB0aGUgQ01WUCBSTkdWUyBwcm9kdWN0LgorKyAqCisrICogTm90ZSB0aGUgaW5w dXQgZmlsZXMgYXJlIGFzc3VtZWQgdG8gaGF2ZSBhIF92ZXJ5XyBzcGVjaWZpYyBmb3JtYXQKKysg KiBhcyBkZXNjcmliZWQgaW4gdGhlIE5JU1QgZG9jdW1lbnQgIlRoZSBSYW5kb20gTnVtYmVyIEdl bmVyYXRvcgorKyAqIFZhbGlkYXRpb24gU3lzdGVtIChSTkdWUykiLCBNYXkgMjUsIDIwMDQuCisr ICoKKysgKi8KKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZm5kZWYg T1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisraW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIFJORyBzdXBwb3J0XG4iKTsK KysgICAgcmV0dXJuIDA7CisrfQorKyNlbHNlCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5o PgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysKKysjaW5jbHVk ZSAiZmlwc191dGwuaCIKKysKKyt2b2lkIHZzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hh ciAqa2V5ID0gTlVMTDsKKysgICAgdW5zaWduZWQgY2hhciAqdiA9IE5VTEw7CisrICAgIHVuc2ln bmVkIGNoYXIgKmR0ID0gTlVMTDsKKysgICAgdW5zaWduZWQgY2hhciByZXRbMTZdOworKyAgICBj aGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICBjaGFyICprZXl3b3Jk LCAqdmFsdWU7CisrICAgIGxvbmcgaSwga2V5bGVuOworKworKyAgICBrZXlsZW4gPSAwOworKwor KyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlm cHV0cyhidWYsc3Rkb3V0KTsKKysJaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDEyOC1LZXldIiwgMTMp KQorKwkJa2V5bGVuID0gMTY7CisrCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDE5Mi1LZXld IiwgMTMpKQorKwkJa2V5bGVuID0gMjQ7CisrCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDI1 Ni1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMzI7CisrCWlmICghcGFyc2VfbGluZSgma2V5d29y ZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJY29udGludWU7CisrCWlmKCFzdHJjbXAoa2V5d29y ZCwiS2V5IikpCisrCSAgICB7CisrCSAgICBrZXk9aGV4MmJpbl9tKHZhbHVlLCZpKTsKKysJICAg IGlmIChpICE9IGtleWxlbikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBrZXkg bGVuZ3RoLCBleHBlY3RpbmcgJWxkXG4iLCBrZXlsZW4pOworKwkJcmV0dXJuOworKwkJfQorKwkg ICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRFQiKSkKKysJICAgIHsKKysJICAgIGR0 PWhleDJiaW5fbSh2YWx1ZSwmaSk7CisrCSAgICBpZiAoaSAhPSAxNikKKysJCXsKKysJCWZwcmlu dGYoc3RkZXJyLCAiSW52YWxpZCBEVCBsZW5ndGhcbiIpOworKwkJcmV0dXJuOworKwkJfQorKwkg ICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiViIpKQorKwkgICAgeworKwkgICAgdj1o ZXgyYmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0gMTYpCisrCQl7CisrCQlmcHJpbnRm KHN0ZGVyciwgIkludmFsaWQgViBsZW5ndGhcbiIpOworKwkJcmV0dXJuOworKwkJfQorKworKwkg ICAgaWYgKCFrZXkgfHwgIWR0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJNaXNzaW5nIGtl eSBvciBEVFxuIik7CisrCQlyZXR1cm47CisrCQl9CisrCisrCSAgICBGSVBTX3g5MzFfc2V0X2tl eShrZXksIGtleWxlbik7CisrCSAgICBGSVBTX3g5MzFfc2VlZCh2LDE2KTsKKysJICAgIEZJUFNf eDkzMV9zZXRfZHQoZHQpOworKwkgICAgaWYgKEZJUFNfeDkzMV9ieXRlcyhyZXQsMTYpIDw9IDAp CisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGdldHRpbmcgUFJORyB2YWx1ZVxuIik7 CisrCSAgICAgICAgcmV0dXJuOworKwkgICAgICAgIH0KKysKKysJICAgIHB2KCJSIixyZXQsMTYp OworKwkgICAgT1BFTlNTTF9mcmVlKGtleSk7CisrCSAgICBrZXkgPSBOVUxMOworKwkgICAgT1BF TlNTTF9mcmVlKGR0KTsKKysJICAgIGR0ID0gTlVMTDsKKysJICAgIE9QRU5TU0xfZnJlZSh2KTsK KysJICAgIHYgPSBOVUxMOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKyt2b2lkIG1jdCgpCisr ICAgIHsKKysgICAgdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTDsKKysgICAgdW5zaWduZWQgY2hh ciAqdiA9IE5VTEw7CisrICAgIHVuc2lnbmVkIGNoYXIgKmR0ID0gTlVMTDsKKysgICAgdW5zaWdu ZWQgY2hhciByZXRbMTZdOworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEw MjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIGxvbmcgaSwga2V5bGVuOwor KyAgICBpbnQgajsKKysKKysgICAga2V5bGVuID0gMDsKKysKKysgICAgd2hpbGUoZmdldHMoYnVm LHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJZnB1dHMoYnVmLHN0ZG91dCk7Cisr CWlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxMjgtS2V5XSIsIDEzKSkKKysJCWtleWxlbiA9IDE2Owor KwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxOTItS2V5XSIsIDEzKSkKKysJCWtleWxlbiA9 IDI0OworKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAyNTYtS2V5XSIsIDEzKSkKKysJCWtl eWxlbiA9IDMyOworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVm KSkKKysJCWNvbnRpbnVlOworKwlpZighc3RyY21wKGtleXdvcmQsIktleSIpKQorKwkgICAgewor KwkgICAga2V5PWhleDJiaW5fbSh2YWx1ZSwmaSk7CisrCSAgICBpZiAoaSAhPSBrZXlsZW4pCisr CQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQga2V5IGxlbmd0aCwgZXhwZWN0aW5nICVs ZFxuIiwga2V5bGVuKTsKKysJCXJldHVybjsKKysJCX0KKysJICAgIH0KKysJZWxzZSBpZighc3Ry Y21wKGtleXdvcmQsIkRUIikpCisrCSAgICB7CisrCSAgICBkdD1oZXgyYmluX20odmFsdWUsJmkp OworKwkgICAgaWYgKGkgIT0gMTYpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQg RFQgbGVuZ3RoXG4iKTsKKysJCXJldHVybjsKKysJCX0KKysJICAgIH0KKysJZWxzZSBpZighc3Ry Y21wKGtleXdvcmQsIlYiKSkKKysJICAgIHsKKysJICAgIHY9aGV4MmJpbl9tKHZhbHVlLCZpKTsK KysJICAgIGlmIChpICE9IDE2KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIFYg bGVuZ3RoXG4iKTsKKysJCXJldHVybjsKKysJCX0KKysKKysJICAgIGlmICgha2V5IHx8ICFkdCkK KysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiTWlzc2luZyBrZXkgb3IgRFRcbiIpOworKwkJcmV0 dXJuOworKwkJfQorKworKwkgICAgRklQU194OTMxX3NldF9rZXkoa2V5LCBrZXlsZW4pOworKwkg ICAgRklQU194OTMxX3NlZWQodiwxNik7CisrCSAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkr KykKKysJCXsKKysJCSAgICBGSVBTX3g5MzFfc2V0X2R0KGR0KTsKKysJCSAgICBpZiAoRklQU194 OTMxX2J5dGVzKHJldCwxNikgPD0gMCkKKysJCQl7CisrCQkJZnByaW50ZihzdGRlcnIsICJFcnJv ciBnZXR0aW5nIFBSTkcgdmFsdWVcbiIpOworKwkJICAgICAgICByZXR1cm47CisrCQkgICAgICAg IH0KKysJCSAgICAvKiBJbmNyZW1lbnQgRFQgKi8KKysJCSAgICBmb3IgKGogPSAxNTsgaiA+PSAw OyBqLS0pCisrCQkJeworKwkJCWR0W2pdKys7CisrCQkJaWYgKGR0W2pdKQorKwkJCQlicmVhazsK KysJCQl9CisrCQl9CisrCisrCSAgICBwdigiUiIscmV0LDE2KTsKKysJICAgIE9QRU5TU0xfZnJl ZShrZXkpOworKwkgICAga2V5ID0gTlVMTDsKKysJICAgIE9QRU5TU0xfZnJlZShkdCk7CisrCSAg ICBkdCA9IE5VTEw7CisrCSAgICBPUEVOU1NMX2ZyZWUodik7CisrCSAgICB2ID0gTlVMTDsKKysJ ICAgIH0KKysJfQorKyAgICB9CisrCisraW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCisr ICAgIHsKKysgICAgaWYoYXJnYyAhPSAyKQorKwl7CisrCWZwcmludGYoc3RkZXJyLCIlcyBbbWN0 fHZzdF1cbiIsYXJndlswXSk7CisrCWV4aXQoMSk7CisrCX0KKysgICAgaWYoIUZJUFNfbW9kZV9z ZXQoMSkpCisrCXsKKysJZG9fcHJpbnRfZXJyb3JzKCk7CisrCWV4aXQoMSk7CisrCX0KKysgICAg RklQU194OTMxX3Jlc2V0KCk7CisrICAgIGlmICghRklQU194OTMxX3Rlc3RfbW9kZSgpKQorKwl7 CisrCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igc2V0dGluZyBQUk5HIHRlc3QgbW9kZVxuIik7Cisr CWRvX3ByaW50X2Vycm9ycygpOworKwlleGl0KDEpOworKwl9CisrICAgIGlmKCFzdHJjbXAoYXJn dlsxXSwibWN0IikpCisrCW1jdCgpOworKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwidnN0 IikpCisrCXZzdCgpOworKyAgICBlbHNlCisrCXsKKysJZnByaW50ZihzdGRlcnIsIkRvbid0IGtu b3cgaG93IHRvICVzLlxuIixhcmd2WzFdKTsKKysJZXhpdCgxKTsKKysJfQorKworKyAgICByZXR1 cm4gMDsKKysgICAgfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2Ny eXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jLmZpcHMJMjAxMi0wMi0yOSAxMDozMzowMi43 OTEyOTQ4NzEgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2NhdnMv Zmlwc19yc2FndGVzdC5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzkxMjk0ODcxICswMTAwCitAQCAt MCwwICsxLDM5MCBAQAorKy8qIGZpcHNfcnNhZ3Rlc3QuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIg U3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAq IHByb2plY3QgMjAwNS4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykg MjAwNSwyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAq CisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu CisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRp c2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAg IHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRw Oi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9v bGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBl bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0 aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlz c2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoK KysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNh bGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIg bmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3Bl blNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdo YXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQg KGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJF U1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMg QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK KysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBB TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAor KyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor KyAqCisrICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3Jp dHRlbiBieSBFcmljIFlvdW5nCisrICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0 c29mdC5jb20pLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUg PGN0eXBlLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorKwor KyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBSU0Egc3VwcG9ydFxuIik7CisrICAgIHJldHVy bigwKTsKKyt9CisrCisrI2Vsc2UKKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytpbnQg cnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbik7Cisrc3RhdGljIGludCByc2FfcHJpbnRrZXkx KEZJTEUgKm91dCwgUlNBICpyc2EsCisrCQlCSUdOVU0gKlhwMSwgQklHTlVNICpYcDIsIEJJR05V TSAqWHAsCisrCQlCSUdOVU0gKmUpOworK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MihGSUxFICpv dXQsIFJTQSAqcnNhLAorKwkJQklHTlVNICpYcTEsIEJJR05VTSAqWHEyLCBCSUdOVU0gKlhxKTsK KysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrCXsKKysJRklMRSAqaW4gPSBO VUxMLCAqb3V0ID0gTlVMTDsKKysKKysJaW50IHJldCA9IDE7CisrCisrCWlmKCFGSVBTX21vZGVf c2V0KDEpKQorKwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQlnb3RvIGVuZDsKKysJCX0K KysKKysJaWYgKGFyZ2MgPT0gMSkKKysJCWluID0gc3RkaW47CisrCWVsc2UKKysJCWluID0gZm9w ZW4oYXJndlsxXSwgInIiKTsKKysKKysJaWYgKGFyZ2MgPCAyKQorKwkJb3V0ID0gc3Rkb3V0Owor KwllbHNlCisrCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOworKworKwlpZiAoIWluKQorKwkJ eworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxu Iik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFvdXQpCisrCQl7CisrCQlmcHJpbnRm KHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3Rv IGVuZDsKKysJCX0KKysKKysJaWYgKCFyc2FfdGVzdChvdXQsIGluKSkKKysJCXsKKysJCWZwcmlu dGYoc3RkZXJyLCAiRkFUQUwgUlNBR1RFU1QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKKysJ CWdvdG8gZW5kOworKwkJfQorKwllbHNlCisrCQlyZXQgPSAwOworKworKwllbmQ6CisrCisrCWlm IChyZXQpCisrCQlkb19wcmludF9lcnJvcnMoKTsKKysKKysJaWYgKGluICYmIChpbiAhPSBzdGRp bikpCisrCQlmY2xvc2UoaW4pOworKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKKysJCWZj bG9zZShvdXQpOworKworKwlyZXR1cm4gcmV0OworKworKwl9CisrCisrI2RlZmluZSBSU0FfVEVT VF9NQVhMSU5FTEVOCTEwMjQwCisrCisraW50IHJzYV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4p CisrCXsKKysJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7CisrCWNoYXIgKmtleXdv cmQsICp2YWx1ZTsKKysJUlNBICpyc2EgPSBOVUxMOworKwlCSUdOVU0gKlhwMSA9IE5VTEwsICpY cDIgPSBOVUxMLCAqWHAgPSBOVUxMOworKwlCSUdOVU0gKlhxMSA9IE5VTEwsICpYcTIgPSBOVUxM LCAqWHEgPSBOVUxMOworKwlCSUdOVU0gKmUgPSBOVUxMOworKwlpbnQgcmV0ID0gMDsKKysJaW50 IGxudW0gPSAwOworKworKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJ TkVMRU4pOworKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7 CisrCisrCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCisrCQlnb3RvIGVycm9yOworKworKwl3 aGlsZSAoZmdldHMob2xpbmVidWYsIFJTQV9URVNUX01BWExJTkVMRU4sIGluKSkKKysJCXsKKysJ CWxudW0rKzsKKysJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7CisrCQlrZXl3b3JkID0gbGlu ZWJ1ZjsKKysJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVu c2lnbmVkIGNoYXIpKmtleXdvcmQpKQorKwkJCWtleXdvcmQrKzsKKysKKysJCS8qIExvb2sgZm9y ID0gc2lnbiAqLworKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKworKwkJLyogSWYgbm8g PSBvciBzdGFydHMgd2l0aCBbIChmb3IgW2ZvbyA9IGJhcl0gbGluZSkganVzdCBjb3B5ICovCisr CQlpZiAoIXAgfHwgKmtleXdvcmQ9PSdbJykKKysJCQl7CisrCQkJaWYgKGZwdXRzKG9saW5lYnVm LCBvdXQpIDwgMCkKKysJCQkJZ290byBlcnJvcjsKKysJCQljb250aW51ZTsKKysJCQl9CisrCisr CQlxID0gcCAtIDE7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KKysJCXdoaWxl IChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCQkqcS0tID0gMDsKKysKKysJCSpwID0g MDsKKysJCXZhbHVlID0gcCArIDE7CisrCisrCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9t IHZhbHVlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQorKwkJ CXZhbHVlKys7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwor KwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisrCQl3aGlsZSAoKnAgPT0gJ1xu JyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkqcC0tID0gMDsKKysKKysJCWlm ICghc3RyY21wKGtleXdvcmQsICJ4cDEiKSkKKysJCQl7CisrCQkJaWYgKFhwMSB8fCAhZG9faGV4 MmJuKCZYcDEsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwgInhwMiIpKQorKwkJCXsKKysJCQlpZiAoWHAyIHx8ICFkb19o ZXgyYm4oJlhwMix2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWHAiKSkKKysJCQl7CisrCQkJaWYgKFhwIHx8ICFkb19o ZXgyYm4oJlhwLHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNl IGlmICghc3RyY21wKGtleXdvcmQsICJ4cTEiKSkKKysJCQl7CisrCQkJaWYgKFhxMSB8fCAhZG9f aGV4MmJuKCZYcTEsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVs c2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhxMiIpKQorKwkJCXsKKysJCQlpZiAoWHEyIHx8ICFk b19oZXgyYm4oJlhxMix2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWHEiKSkKKysJCQl7CisrCQkJaWYgKFhxIHx8ICFk b19oZXgyYm4oJlhxLHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQll bHNlIGlmICghc3RyY21wKGtleXdvcmQsICJlIikpCisrCQkJeworKwkJCWlmIChlIHx8ICFkb19o ZXgyYm4oJmUsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwgInAxIikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICgh c3RyY21wKGtleXdvcmQsICJwMiIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNt cChrZXl3b3JkLCAicCIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCAicTEiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwg InEyIikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJxIikp CisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJuIikpCisrCQkJ Y29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJkIikpCisrCQkJY29udGlu dWU7CisrCQllbHNlCisrCQkJZ290byBwYXJzZV9lcnJvcjsKKysKKysJCWZwdXRzKG9saW5lYnVm LCBvdXQpOworKworKwkJaWYgKGUgJiYgWHAxICYmIFhwMiAmJiBYcCkKKysJCQl7CisrCQkJcnNh ID0gRklQU19yc2FfbmV3KCk7CisrCQkJaWYgKCFyc2EpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJ aWYgKCFyc2FfcHJpbnRrZXkxKG91dCwgcnNhLCBYcDEsIFhwMiwgWHAsIGUpKQorKwkJCQlnb3Rv IGVycm9yOworKwkJCUJOX2ZyZWUoWHAxKTsKKysJCQlYcDEgPSBOVUxMOworKwkJCUJOX2ZyZWUo WHAyKTsKKysJCQlYcDIgPSBOVUxMOworKwkJCUJOX2ZyZWUoWHApOworKwkJCVhwID0gTlVMTDsK KysJCQlCTl9mcmVlKGUpOworKwkJCWUgPSBOVUxMOworKwkJCX0KKysKKysJCWlmIChyc2EgJiYg WHExICYmIFhxMiAmJiBYcSkKKysJCQl7CisrCQkJaWYgKCFyc2FfcHJpbnRrZXkyKG91dCwgcnNh LCBYcTEsIFhxMiwgWHEpKQorKwkJCQlnb3RvIGVycm9yOworKwkJCUJOX2ZyZWUoWHExKTsKKysJ CQlYcTEgPSBOVUxMOworKwkJCUJOX2ZyZWUoWHEyKTsKKysJCQlYcTIgPSBOVUxMOworKwkJCUJO X2ZyZWUoWHEpOworKwkJCVhxID0gTlVMTDsKKysJCQlGSVBTX3JzYV9mcmVlKHJzYSk7CisrCQkJ cnNhID0gTlVMTDsKKysJCQl9CisrCQl9CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgorKwor KwlpZiAob2xpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOworKwlpZiAobGluZWJ1 ZikKKysJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKKysKKysJaWYgKFhwMSkKKysJCUJOX2ZyZWUo WHAxKTsKKysJaWYgKFhwMikKKysJCUJOX2ZyZWUoWHAyKTsKKysJaWYgKFhwKQorKwkJQk5fZnJl ZShYcCk7CisrCWlmIChYcTEpCisrCQlCTl9mcmVlKFhxMSk7CisrCWlmIChYcTEpCisrCQlCTl9m cmVlKFhxMSk7CisrCWlmIChYcTIpCisrCQlCTl9mcmVlKFhxMik7CisrCWlmIChYcSkKKysJCUJO X2ZyZWUoWHEpOworKwlpZiAoZSkKKysJCUJOX2ZyZWUoZSk7CisrCWlmIChyc2EpCisrCQlGSVBT X3JzYV9mcmVlKHJzYSk7CisrCisrCXJldHVybiByZXQ7CisrCisrCXBhcnNlX2Vycm9yOgorKwor KwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxu IiwgbG51bSk7CisrCisrCWdvdG8gZXJyb3I7CisrCisrCX0KKysKKytzdGF0aWMgaW50IHJzYV9w cmludGtleTEoRklMRSAqb3V0LCBSU0EgKnJzYSwKKysJCUJJR05VTSAqWHAxLCBCSUdOVU0gKlhw MiwgQklHTlVNICpYcCwKKysJCUJJR05VTSAqZSkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJQklH TlVNICpwMSA9IE5VTEwsICpwMiA9IE5VTEw7CisrCXAxID0gQk5fbmV3KCk7CisrCXAyID0gQk5f bmV3KCk7CisrCWlmICghcDEgfHwgIXAyKQorKwkJZ290byBlcnJvcjsKKysKKysJaWYgKCFSU0Ff WDkzMV9kZXJpdmVfZXgocnNhLCBwMSwgcDIsIE5VTEwsIE5VTEwsIFhwMSwgWHAyLCBYcCwKKysJ CQkJCQlOVUxMLCBOVUxMLCBOVUxMLCBlLCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCisrCWRv X2JuX3ByaW50X25hbWUob3V0LCAicDEiLCBwMSk7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAi cDIiLCBwMik7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicCIsIHJzYS0+cCk7CisrCisrCXJl dCA9IDE7CisrCisrCWVycm9yOgorKwlpZiAocDEpCisrCQlCTl9mcmVlKHAxKTsKKysJaWYgKHAy KQorKwkJQk5fZnJlZShwMik7CisrCisrCXJldHVybiByZXQ7CisrCX0KKysKKytzdGF0aWMgaW50 IHJzYV9wcmludGtleTIoRklMRSAqb3V0LCBSU0EgKnJzYSwKKysJCUJJR05VTSAqWHExLCBCSUdO VU0gKlhxMiwgQklHTlVNICpYcSkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJQklHTlVNICpxMSA9 IE5VTEwsICpxMiA9IE5VTEw7CisrCXExID0gQk5fbmV3KCk7CisrCXEyID0gQk5fbmV3KCk7Cisr CWlmICghcTEgfHwgIXEyKQorKwkJZ290byBlcnJvcjsKKysKKysJaWYgKCFSU0FfWDkzMV9kZXJp dmVfZXgocnNhLCBOVUxMLCBOVUxMLCBxMSwgcTIsIE5VTEwsIE5VTEwsIE5VTEwsCisrCQkJCQkJ WHExLCBYcTIsIFhxLCBOVUxMLCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCisrCWRvX2JuX3By aW50X25hbWUob3V0LCAicTEiLCBxMSk7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicTIiLCBx Mik7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicSIsIHJzYS0+cSk7CisrCWRvX2JuX3ByaW50 X25hbWUob3V0LCAibiIsIHJzYS0+bik7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAiZCIsIHJz YS0+ZCk7CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgorKwlpZiAocTEpCisrCQlCTl9mcmVl KHExKTsKKysJaWYgKHEyKQorKwkJQk5fZnJlZShxMik7CisrCisrCXJldHVybiByZXQ7CisrCX0K KysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX3JzYXN0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2Nh dnMvZmlwc19yc2FzdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9j YXZzL2ZpcHNfcnNhc3Rlc3QuYy5maXBzCTIwMTItMDItMjkgMTA6MzM6MDIuNzkyMjk0ODgwICsw MTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhc3Rl c3QuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5MjI5NDg4MCArMDEwMAorQEAgLTAsMCArMSwzNzAg QEAKKysvKiBmaXBzX3JzYXN0ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBI ZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0IDIw MDUuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9w ZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK KysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICog ICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBk aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5v cmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5T U0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29u dGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgor KyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHBy aW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisr ICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJl dGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVu U1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3Bl blNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg T3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisr ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJ QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91 bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoK KysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5j bHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisrCisrI2lmbmRlZiBPUEVOU1NM X0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAgcHJp bnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysKKysj ZWxzZQorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3N0YXRpYyBpbnQgcnNhX3N0ZXN0 KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBTYWx0bGVuKTsKKytzdGF0aWMgaW50IHJzYV9wcmlu dHNpZyhGSUxFICpvdXQsIFJTQSAqcnNhLCBjb25zdCBFVlBfTUQgKmRnc3QsCisrCQl1bnNpZ25l ZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLCBpbnQgU2FsdGxlbik7CisrCisraW50IG1haW4oaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQorKwl7CisrCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7 CisrCisrCWludCByZXQgPSAxLCBTYWx0bGVuID0gLTE7CisrCisrCWlmKCFGSVBTX21vZGVfc2V0 KDEpKQorKwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQlnb3RvIGVuZDsKKysJCX0KKysK KysJaWYgKChhcmdjID4gMikgJiYgIXN0cmNtcCgiLXNhbHRsZW4iLCBhcmd2WzFdKSkKKysJCXsK KysJCVNhbHRsZW4gPSBhdG9pKGFyZ3ZbMl0pOworKwkJaWYgKFNhbHRsZW4gPCAwKQorKwkJCXsK KysJCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBJbnZhbGlkIHNhbHQgbGVuZ3RoXG4iKTsKKysJ CQlnb3RvIGVuZDsKKysJCQl9CisrCQlhcmdjIC09IDI7CisrCQlhcmd2ICs9IDI7CisrCQl9Cisr CWVsc2UgaWYgKChhcmdjID4gMSkgJiYgIXN0cmNtcCgiLXg5MzEiLCBhcmd2WzFdKSkKKysJCXsK KysJCVNhbHRsZW4gPSAtMjsKKysJCWFyZ2MtLTsKKysJCWFyZ3YrKzsKKysJCX0KKysKKysJaWYg KGFyZ2MgPT0gMSkKKysJCWluID0gc3RkaW47CisrCWVsc2UKKysJCWluID0gZm9wZW4oYXJndlsx XSwgInIiKTsKKysKKysJaWYgKGFyZ2MgPCAyKQorKwkJb3V0ID0gc3Rkb3V0OworKwllbHNlCisr CQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOworKworKwlpZiAoIWluKQorKwkJeworKwkJZnBy aW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQln b3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFvdXQpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwg IkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJ CX0KKysKKysJaWYgKCFyc2Ffc3Rlc3Qob3V0LCBpbiwgU2FsdGxlbikpCisrCQl7CisrCQlmcHJp bnRmKHN0ZGVyciwgIkZBVEFMIFJTQVNURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7Cisr CQlnb3RvIGVuZDsKKysJCX0KKysJZWxzZQorKwkJcmV0ID0gMDsKKysKKysJZW5kOgorKworKwlp ZiAocmV0KQorKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCisrCWlmIChpbiAmJiAoaW4gIT0gc3Rk aW4pKQorKwkJZmNsb3NlKGluKTsKKysJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCisrCQlm Y2xvc2Uob3V0KTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJfQorKworKyNkZWZpbmUgUlNBX1RF U1RfTUFYTElORUxFTgkxMDI0MAorKworK2ludCByc2Ffc3Rlc3QoRklMRSAqb3V0LCBGSUxFICpp biwgaW50IFNhbHRsZW4pCisrCXsKKysJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7 CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysJUlNBICpyc2EgPSBOVUxMOworKwljb25zdCBF VlBfTUQgKmRnc3QgPSBOVUxMOworKwl1bnNpZ25lZCBjaGFyICpNc2cgPSBOVUxMOworKwlsb25n IE1zZ2xlbiA9IC0xOworKwlpbnQga2V5bGVuID0gLTEsIGN1cnJlbnRfa2V5bGVuID0gLTE7Cisr CWludCByZXQgPSAwOworKwlpbnQgbG51bSA9IDA7CisrCisrCW9saW5lYnVmID0gT1BFTlNTTF9t YWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7CisrCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhS U0FfVEVTVF9NQVhMSU5FTEVOKTsKKysKKysJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKKysJ CWdvdG8gZXJyb3I7CisrCisrCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElO RUxFTiwgaW4pKQorKwkJeworKwkJbG51bSsrOworKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVm KTsKKysJCWtleXdvcmQgPSBsaW5lYnVmOworKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisr CQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCisrCQkJa2V5d29yZCsr OworKworKwkJLyogTG9vayBmb3IgPSBzaWduICovCisrCQlwID0gc3RyY2hyKGxpbmVidWYsICc9 Jyk7CisrCisrCQkvKiBJZiBubyA9IGp1c3QgY29weSAqLworKwkJaWYgKCFwKQorKwkJCXsKKysJ CQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQorKwkJCQlnb3RvIGVycm9yOworKwkJCWNv bnRpbnVlOworKwkJCX0KKysKKysJCXEgPSBwIC0gMTsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGlu ZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJCSpx LS0gPSAwOworKworKwkJKnAgPSAwOworKwkJdmFsdWUgPSBwICsgMTsKKysKKysJCS8qIFJlbW92 ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25l ZCBjaGFyKSp2YWx1ZSkpCisrCQkJdmFsdWUrKzsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBz cGFjZSBmcm9tIHZhbHVlICovCisrCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysK KysJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJ CSpwLS0gPSAwOworKworKwkJLyogTG9vayBmb3IgW21vZCA9IFhYWF0gZm9yIGtleSBsZW5ndGgg Ki8KKysKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJbbW9kIikpCisrCQkJeworKwkJCXAgPSB2 YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKwkJCWlmICgqcCAhPSAnXScpCisrCQkJCWdvdG8g cGFyc2VfZXJyb3I7CisrCQkJKnAgPSAwOworKwkJCWtleWxlbiA9IGF0b2kodmFsdWUpOworKwkJ CWlmIChrZXlsZW4gPCAwKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwgIlNIQUFsZyIpKQorKwkJCXsKKysJCQlpZiAoIXN0cmNtcCh2 YWx1ZSwgIlNIQTEiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGExKCk7CisrCQkJZWxzZSBpZiAoIXN0 cmNtcCh2YWx1ZSwgIlNIQTIyNCIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTIyNCgpOworKwkJCWVs c2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEyNTYiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGEyNTYo KTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMzg0IikpCisrCQkJCWRnc3QgPSBF VlBfc2hhMzg0KCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTUxMiIpKQorKwkJ CQlkZ3N0ID0gRVZQX3NoYTUxMigpOworKwkJCWVsc2UKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0 ZGVyciwKKysJCQkJCSJGQVRBTDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIFwiJXNcIlxuIiwKKysJ CQkJCQkJCXZhbHVlKTsKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQkJfQorKwkJCX0KKysJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQorKwkJCXsKKysJCQlpZiAoTXNnKQor KwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKKysJCQkJ KigtLXZhbHVlKSA9ICcwJzsKKysJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZNc2dsZW4pOwor KwkJCWlmICghTXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysKKysJCWZwdXRz KG9saW5lYnVmLCBvdXQpOworKworKwkJLyogSWYga2V5IGxlbmd0aCBoYXMgY2hhbmdlZCwgZ2Vu ZXJhdGUgYW5kIG91dHB1dCBwdWJsaWMKKysJCSAqIGtleSBjb21wb25lbnRzIG9mIG5ldyBSU0Eg cHJpdmF0ZSBrZXkuCisrCQkgKi8KKysKKysJCWlmIChrZXlsZW4gIT0gY3VycmVudF9rZXlsZW4p CisrCQkJeworKwkJCUJJR05VTSAqYm5fZTsKKysJCQlpZiAocnNhKQorKwkJCQlGSVBTX3JzYV9m cmVlKHJzYSk7CisrCQkJcnNhID0gRklQU19yc2FfbmV3KCk7CisrCQkJaWYgKCFyc2EpCisrCQkJ CWdvdG8gZXJyb3I7CisrCQkJYm5fZSA9IEJOX25ldygpOworKwkJCWlmICghYm5fZSB8fCAhQk5f c2V0X3dvcmQoYm5fZSwgMHgxMDAxKSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlpZiAoIVJTQV9Y OTMxX2dlbmVyYXRlX2tleV9leChyc2EsIGtleWxlbiwgYm5fZSwgTlVMTCkpCisrCQkJCWdvdG8g ZXJyb3I7CisrCQkJQk5fZnJlZShibl9lKTsKKysJCQlmcHV0cygibiA9ICIsIG91dCk7CisrCQkJ ZG9fYm5fcHJpbnQob3V0LCByc2EtPm4pOworKwkJCWZwdXRzKCJcbmUgPSAiLCBvdXQpOworKwkJ CWRvX2JuX3ByaW50KG91dCwgcnNhLT5lKTsKKysJCQlmcHV0cygiXG4iLCBvdXQpOworKwkJCWN1 cnJlbnRfa2V5bGVuID0ga2V5bGVuOworKwkJCX0KKysKKysJCWlmIChNc2cgJiYgZGdzdCkKKysJ CQl7CisrCQkJaWYgKCFyc2FfcHJpbnRzaWcob3V0LCByc2EsIGRnc3QsIE1zZywgTXNnbGVuLAor KwkJCQkJCQkJU2FsdGxlbikpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJT1BFTlNTTF9mcmVlKE1z Zyk7CisrCQkJTXNnID0gTlVMTDsKKysJCQl9CisrCisrCQl9CisrCisrCXJldCA9IDE7CisrCisr CWVycm9yOgorKworKwlpZiAob2xpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOwor KwlpZiAobGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKKysJaWYgKHJzYSkKKysJ CUZJUFNfcnNhX2ZyZWUocnNhKTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJcGFyc2VfZXJyb3I6 CisrCisrCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5l ICVkXG4iLCBsbnVtKTsKKysKKysJZ290byBlcnJvcjsKKysKKysJfQorKworK3N0YXRpYyBpbnQg cnNhX3ByaW50c2lnKEZJTEUgKm91dCwgUlNBICpyc2EsIGNvbnN0IEVWUF9NRCAqZGdzdCwKKysJ CXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sIGludCBTYWx0bGVuKQorKwl7CisrCWlu dCByZXQgPSAwOworKwl1bnNpZ25lZCBjaGFyICpzaWdidWYgPSBOVUxMOworKwlpbnQgaSwgc2ln bGVuOworKwkvKiBFVlBfUEtFWSBzdHJ1Y3R1cmUgKi8KKysJRVZQX1BLRVkgcGs7CisrCUVWUF9N RF9DVFggY3R4OworKwlway50eXBlID0gRVZQX1BLRVlfUlNBOworKwlway5wa2V5LnJzYSA9IHJz YTsKKysKKysJc2lnbGVuID0gUlNBX3NpemUocnNhKTsKKysJc2lnYnVmID0gT1BFTlNTTF9tYWxs b2Moc2lnbGVuKTsKKysJaWYgKCFzaWdidWYpCisrCQlnb3RvIGVycm9yOworKworKwlFVlBfTURf Q1RYX2luaXQoJmN0eCk7CisrCisrCWlmIChTYWx0bGVuID49IDApCisrCQl7CisrCQlNX0VWUF9N RF9DVFhfc2V0X2ZsYWdzKCZjdHgsCisrCQkJRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MgfCAoU2Fs dGxlbiA8PCAxNikpOworKwkJfQorKwllbHNlIGlmIChTYWx0bGVuID09IC0yKQorKwkJTV9FVlBf TURfQ1RYX3NldF9mbGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpOworKwlpZiAo IUVWUF9TaWduSW5pdF9leCgmY3R4LCBkZ3N0LCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCWlm ICghRVZQX1NpZ25VcGRhdGUoJmN0eCwgTXNnLCBNc2dsZW4pKQorKwkJZ290byBlcnJvcjsKKysJ aWYgKCFFVlBfU2lnbkZpbmFsKCZjdHgsIHNpZ2J1ZiwgKHVuc2lnbmVkIGludCAqKSZzaWdsZW4s ICZwaykpCisrCQlnb3RvIGVycm9yOworKworKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7Cisr CisrCWZwdXRzKCJTID0gIiwgb3V0KTsKKysKKysJZm9yIChpID0gMDsgaSA8IHNpZ2xlbjsgaSsr KQorKwkJZnByaW50ZihvdXQsICIlMDJYIiwgc2lnYnVmW2ldKTsKKysKKysJZnB1dHMoIlxuIiwg b3V0KTsKKysKKysJcmV0ID0gMTsKKysKKysJZXJyb3I6CisrCisrCXJldHVybiByZXQ7CisrCX0K KysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9m aXBzX3JzYXZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2NhdnMv Zmlwc19yc2F2dGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfcnNhdnRlc3QuYy5maXBzCTIwMTItMDItMjkgMTA6MzM6MDIuNzkyMjk0ODgwICswMTAw CisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhdnRlc3Qu YwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5MjI5NDg4MCArMDEwMAorQEAgLTAsMCArMSwzNzcgQEAK KysvKiBmaXBzX3JzYXZ0ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5z 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+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJ UFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAgcHJpbnRm KCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysKKysjZWxz ZQorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK2ludCByc2FfdGVzdChGSUxFICpvdXQs IEZJTEUgKmluLCBpbnQgc2FsdGxlbik7Cisrc3RhdGljIGludCByc2FfcHJpbnR2ZXIoRklMRSAq b3V0LAorKwkJQklHTlVNICpuLCBCSUdOVU0gKmUsCisrCQljb25zdCBFVlBfTUQgKmRnc3QsCisr CQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLAorKwkJdW5zaWduZWQgY2hhciAqUywg bG9uZyBTbGVuLCBpbnQgU2FsdGxlbik7CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQorKwl7CisrCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7CisrCisrCWludCByZXQg PSAxOworKwlpbnQgU2FsdGxlbiA9IC0xOworKworKwlpZighRklQU19tb2RlX3NldCgxKSkKKysJ CXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICgo YXJnYyA+IDIpICYmICFzdHJjbXAoIi1zYWx0bGVuIiwgYXJndlsxXSkpCisrCQl7CisrCQlTYWx0 bGVuID0gYXRvaShhcmd2WzJdKTsKKysJCWlmIChTYWx0bGVuIDwgMCkKKysJCQl7CisrCQkJZnBy aW50ZihzdGRlcnIsICJGQVRBTDogSW52YWxpZCBzYWx0IGxlbmd0aFxuIik7CisrCQkJZ290byBl bmQ7CisrCQkJfQorKwkJYXJnYyAtPSAyOworKwkJYXJndiArPSAyOworKwkJfQorKwllbHNlIGlm ICgoYXJnYyA+IDEpICYmICFzdHJjbXAoIi14OTMxIiwgYXJndlsxXSkpCisrCQl7CisrCQlTYWx0 bGVuID0gLTI7CisrCQlhcmdjLS07CisrCQlhcmd2Kys7CisrCQl9CisrCisrCWlmIChhcmdjID09 IDEpCisrCQlpbiA9IHN0ZGluOworKwllbHNlCisrCQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7 CisrCisrCWlmIChhcmdjIDwgMikKKysJCW91dCA9IHN0ZG91dDsKKysJZWxzZQorKwkJb3V0ID0g Zm9wZW4oYXJndlsyXSwgInciKTsKKysKKysJaWYgKCFpbikKKysJCXsKKysJCWZwcmludGYoc3Rk ZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7 CisrCQl9CisrCisrCWlmICghb3V0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBv dXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisr CWlmICghcnNhX3Rlc3Qob3V0LCBpbiwgU2FsdGxlbikpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVy ciwgIkZBVEFMIFJTQVZURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7CisrCQlnb3RvIGVu ZDsKKysJCX0KKysJZWxzZQorKwkJcmV0ID0gMDsKKysKKysJZW5kOgorKworKwlpZiAocmV0KQor KwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCisrCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4pKQorKwkJ ZmNsb3NlKGluKTsKKysJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCisrCQlmY2xvc2Uob3V0 KTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJfQorKworKyNkZWZpbmUgUlNBX1RFU1RfTUFYTElO RUxFTgkxMDI0MAorKworK2ludCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBpbnQgU2Fs dGxlbikKKysJeworKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKKysJY2hhciAq a2V5d29yZCwgKnZhbHVlOworKwljb25zdCBFVlBfTUQgKmRnc3QgPSBOVUxMOworKwlCSUdOVU0g Km4gPSBOVUxMLCAqZSA9IE5VTEw7CisrCXVuc2lnbmVkIGNoYXIgKk1zZyA9IE5VTEwsICpTID0g TlVMTDsKKysJbG9uZyBNc2dsZW4sIFNsZW47CisrCWludCByZXQgPSAwOworKwlpbnQgbG51bSA9 IDA7CisrCisrCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7 CisrCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKKysKKysJ aWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKKysJCWdvdG8gZXJyb3I7CisrCisrCXdoaWxlIChm Z2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwgaW4pKQorKwkJeworKwkJbG51bSsr OworKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKKysJCWtleXdvcmQgPSBsaW5lYnVmOwor KwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQg Y2hhcikqa2V5d29yZCkpCisrCQkJa2V5d29yZCsrOworKworKwkJLyogTG9vayBmb3IgPSBzaWdu ICovCisrCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7CisrCisrCQkvKiBJZiBubyA9IG9yIHN0 YXJ0cyB3aXRoIFsgKGZvciBbZm9vID0gYmFyXSBsaW5lKSBqdXN0IGNvcHkgKi8KKysJCWlmICgh cCB8fCAqa2V5d29yZD09J1snKQorKwkJCXsKKysJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkg PCAwKQorKwkJCQlnb3RvIGVycm9yOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysKKysJCXEgPSBw IC0gMTsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3Bh Y2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJCSpxLS0gPSAwOworKworKwkJKnAgPSAwOworKwkJ dmFsdWUgPSBwICsgMTsKKysKKysJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUg Ki8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisrCQkJdmFsdWUr KzsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQlwID0g dmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysKKysJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlz c3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJCSpwLS0gPSAwOworKworKwkJaWYgKCFzdHJj bXAoa2V5d29yZCwgIm4iKSkKKysJCQl7CisrCQkJaWYgKCFkb19oZXgyYm4oJm4sdmFsdWUpKQor KwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29y ZCwgImUiKSkKKysJCQl7CisrCQkJaWYgKCFkb19oZXgyYm4oJmUsdmFsdWUpKQorKwkJCQlnb3Rv IHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlNIQUFs ZyIpKQorKwkJCXsKKysJCQlpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTEiKSkKKysJCQkJZGdzdCA9 IEVWUF9zaGExKCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTIyNCIpKQorKwkJ CQlkZ3N0ID0gRVZQX3NoYTIyNCgpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEy NTYiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGEyNTYoKTsKKysJCQllbHNlIGlmICghc3RyY21wKHZh bHVlLCAiU0hBMzg0IikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMzg0KCk7CisrCQkJZWxzZSBpZiAo IXN0cmNtcCh2YWx1ZSwgIlNIQTUxMiIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTUxMigpOworKwkJ CWVsc2UKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwKKysJCQkJCSJGQVRBTDogdW5zdXBw b3J0ZWQgYWxnb3JpdGhtIFwiJXNcIlxuIiwKKysJCQkJCQkJCXZhbHVlKTsKKysJCQkJZ290byBw YXJzZV9lcnJvcjsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwg Ik1zZyIpKQorKwkJCXsKKysJCQlpZiAoTXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJ CWlmIChzdHJsZW4odmFsdWUpICYgMSkKKysJCQkJKigtLXZhbHVlKSA9ICcwJzsKKysJCQlNc2cg PSBoZXgyYmluX20odmFsdWUsICZNc2dsZW4pOworKwkJCWlmICghTXNnKQorKwkJCQlnb3RvIHBh cnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlMiKSkKKysJ CQl7CisrCQkJaWYgKFMpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJaWYgKHN0cmxlbih2 YWx1ZSkgJiAxKQorKwkJCQkqKC0tdmFsdWUpID0gJzAnOworKwkJCVMgPSBoZXgyYmluX20odmFs dWUsICZTbGVuKTsKKysJCQlpZiAoIVMpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQor KwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUmVzdWx0IikpCisrCQkJY29udGludWU7Cisr CQllbHNlCisrCQkJZ290byBwYXJzZV9lcnJvcjsKKysKKysJCWZwdXRzKG9saW5lYnVmLCBvdXQp OworKworKwkJaWYgKG4gJiYgZSAmJiBNc2cgJiYgUyAmJiBkZ3N0KQorKwkJCXsKKysJCQlpZiAo IXJzYV9wcmludHZlcihvdXQsIG4sIGUsIGRnc3QsCisrCQkJCQlNc2csIE1zZ2xlbiwgUywgU2xl biwgU2FsdGxlbikpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJT1BFTlNTTF9mcmVlKE1zZyk7Cisr CQkJTXNnID0gTlVMTDsKKysJCQlPUEVOU1NMX2ZyZWUoUyk7CisrCQkJUyA9IE5VTEw7CisrCQkJ fQorKworKwkJfQorKworKworKwlyZXQgPSAxOworKworKworKwllcnJvcjoKKysKKysJaWYgKG9s aW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKKysJaWYgKGxpbmVidWYpCisrCQlP UEVOU1NMX2ZyZWUobGluZWJ1Zik7CisrCWlmIChuKQorKwkJQk5fZnJlZShuKTsKKysJaWYgKGUp CisrCQlCTl9mcmVlKGUpOworKworKwlyZXR1cm4gcmV0OworKworKwlwYXJzZV9lcnJvcjoKKysK KysJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRc biIsIGxudW0pOworKworKwlnb3RvIGVycm9yOworKworKwl9CisrCisrc3RhdGljIGludCByc2Ff cHJpbnR2ZXIoRklMRSAqb3V0LAorKwkJQklHTlVNICpuLCBCSUdOVU0gKmUsCisrCQljb25zdCBF VlBfTUQgKmRnc3QsCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLAorKwkJdW5z aWduZWQgY2hhciAqUywgbG9uZyBTbGVuLCBpbnQgU2FsdGxlbikKKysJeworKwlpbnQgcmV0ID0g MCwgcjsKKysJLyogU2V0dXAgUlNBIGFuZCBFVlBfUEtFWSBzdHJ1Y3R1cmVzICovCisrCVJTQSAq cnNhX3B1YmtleSA9IE5VTEw7CisrCUVWUF9QS0VZIHBrOworKwlFVlBfTURfQ1RYIGN0eDsKKysJ dW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKKysJcnNhX3B1YmtleSA9IEZJUFNfcnNhX25ldygp OworKwlpZiAoIXJzYV9wdWJrZXkpCisrCQlnb3RvIGVycm9yOworKwlyc2FfcHVia2V5LT5uID0g Qk5fZHVwKG4pOworKwlyc2FfcHVia2V5LT5lID0gQk5fZHVwKGUpOworKwlpZiAoIXJzYV9wdWJr ZXktPm4gfHwgIXJzYV9wdWJrZXktPmUpCisrCQlnb3RvIGVycm9yOworKwlway50eXBlID0gRVZQ X1BLRVlfUlNBOworKwlway5wa2V5LnJzYSA9IHJzYV9wdWJrZXk7CisrCisrCUVWUF9NRF9DVFhf aW5pdCgmY3R4KTsKKysKKysJaWYgKFNhbHRsZW4gPj0gMCkKKysJCXsKKysJCU1fRVZQX01EX0NU WF9zZXRfZmxhZ3MoJmN0eCwKKysJCQlFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUyB8IChTYWx0bGVu IDw8IDE2KSk7CisrCQl9CisrCWVsc2UgaWYgKFNhbHRsZW4gPT0gLTIpCisrCQlNX0VWUF9NRF9D VFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSk7CisrCWlmICghRVZQ X1ZlcmlmeUluaXRfZXgoJmN0eCwgZGdzdCwgTlVMTCkpCisrCQlnb3RvIGVycm9yOworKwlpZiAo IUVWUF9WZXJpZnlVcGRhdGUoJmN0eCwgTXNnLCBNc2dsZW4pKQorKwkJZ290byBlcnJvcjsKKysK KysJciA9IEVWUF9WZXJpZnlGaW5hbCgmY3R4LCBTLCBTbGVuLCAmcGspOworKworKworKwlFVlBf TURfQ1RYX2NsZWFudXAoJmN0eCk7CisrCisrCWlmIChyIDwgMCkKKysJCWdvdG8gZXJyb3I7Cisr CUVSUl9jbGVhcl9lcnJvcigpOworKworKwlpZiAociA9PSAwKQorKwkJZnB1dHMoIlJlc3VsdCA9 IEZcbiIsIG91dCk7CisrCWVsc2UKKysJCWZwdXRzKCJSZXN1bHQgPSBQXG4iLCBvdXQpOworKwor KwlyZXQgPSAxOworKworKwllcnJvcjoKKysJaWYgKHJzYV9wdWJrZXkpCisrCQlGSVBTX3JzYV9m cmVlKHJzYV9wdWJrZXkpOworKwlpZiAoYnVmKQorKwkJT1BFTlNTTF9mcmVlKGJ1Zik7CisrCisr CXJldHVybiByZXQ7CisrCX0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYy5maXBzCTIwMTItMDItMjkgMTA6MzM6MDIu NzkyMjk0ODgwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfc2hhdGVzdC5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzkyMjk0ODgwICswMTAwCitAQCAt MCwwICsxLDM4OCBAQAorKy8qIGZpcHNfc2hhdGVzdC5jICovCisrLyogV3JpdHRlbiBieSBEciBT dGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICog cHJvamVjdCAyMDA1LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAy MDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlz dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0 CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICog ICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBt YXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3 YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3 Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIg YW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNl IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAor KyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwg cGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1 LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAi T3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMg d2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQ cm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2 ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6 Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK KysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg U0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElB QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBO T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF UzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZ IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisr ICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBi eSBFcmljIFlvdW5nCisrICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5j b20pLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGN0eXBl Lmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisrCisrI2lm bmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQor K3sKKysgICAgcHJpbnRmKCJObyBGSVBTIFNIQVhYWCBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJu KDApOworK30KKysKKysjZWxzZQorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3N0YXRp YyBpbnQgZGdzdF90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pOworK3N0YXRpYyBpbnQgcHJpbnRf ZGdzdChjb25zdCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpNc2cs IGludCBNc2dsZW4pOworK3N0YXRpYyBpbnQgcHJpbnRfbW9udGUoY29uc3QgRVZQX01EICptZCwg RklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hhciAqU2VlZCwgaW50IFNlZWRMZW4pOworKworK2lu dCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKysJeworKwlGSUxFICppbiA9IE5VTEwsICpv dXQgPSBOVUxMOworKworKwlpbnQgcmV0ID0gMTsKKysKKysJaWYoIUZJUFNfbW9kZV9zZXQoMSkp CisrCQl7CisrCQlkb19wcmludF9lcnJvcnMoKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlp ZiAoYXJnYyA9PSAxKQorKwkJaW4gPSBzdGRpbjsKKysJZWxzZQorKwkJaW4gPSBmb3Blbihhcmd2 WzFdLCAiciIpOworKworKwlpZiAoYXJnYyA8IDIpCisrCQlvdXQgPSBzdGRvdXQ7CisrCWVsc2UK KysJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7CisrCisrCWlmICghaW4pCisrCQl7CisrCQlm cHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJ CWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIW91dCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJy LCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOwor KwkJfQorKworKwlpZiAoIWRnc3RfdGVzdChvdXQsIGluKSkKKysJCXsKKysJCWZwcmludGYoc3Rk ZXJyLCAiRkFUQUwgZGlnZXN0IGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7CisrCQlnb3RvIGVu ZDsKKysJCX0KKysJZWxzZQorKwkJcmV0ID0gMDsKKysKKysJZW5kOgorKworKwlpZiAocmV0KQor KwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCisrCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4pKQorKwkJ ZmNsb3NlKGluKTsKKysJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCisrCQlmY2xvc2Uob3V0 KTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJfQorKworKyNkZWZpbmUgU0hBX1RFU1RfTUFYX0JJ VFMJMTAyNDAwCisrI2RlZmluZSBTSEFfVEVTVF9NQVhMSU5FTEVOCSgoKFNIQV9URVNUX01BWF9C SVRTID4+IDMpICogMikgKyAxMDApCisrCisraW50IGRnc3RfdGVzdChGSUxFICpvdXQsIEZJTEUg KmluKQorKwl7CisrCWNvbnN0IEVWUF9NRCAqbWQgPSBOVUxMOworKwljaGFyICpsaW5lYnVmLCAq b2xpbmVidWYsICpwLCAqcTsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVlOworKwl1bnNpZ25lZCBj aGFyICpNc2cgPSBOVUxMLCAqU2VlZCA9IE5VTEw7CisrCWxvbmcgTXNnTGVuID0gLTEsIExlbiA9 IC0xLCBTZWVkTGVuID0gLTE7CisrCWludCByZXQgPSAwOworKwlpbnQgbG51bSA9IDA7CisrCisr CW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoU0hBX1RFU1RfTUFYTElORUxFTik7CisrCWxpbmVi dWYgPSBPUEVOU1NMX21hbGxvYyhTSEFfVEVTVF9NQVhMSU5FTEVOKTsKKysKKysJaWYgKCFsaW5l YnVmIHx8ICFvbGluZWJ1ZikKKysJCWdvdG8gZXJyb3I7CisrCisrCisrCXdoaWxlIChmZ2V0cyhv bGluZWJ1ZiwgU0hBX1RFU1RfTUFYTElORUxFTiwgaW4pKQorKwkJeworKwkJbG51bSsrOworKwkJ c3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKKysJCWtleXdvcmQgPSBsaW5lYnVmOworKwkJLyog U2tpcCBsZWFkaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikq a2V5d29yZCkpCisrCQkJa2V5d29yZCsrOworKworKwkJLyogTG9vayBmb3IgPSBzaWduICovCisr CQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7CisrCisrCQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3 aXRoIFsgKGZvciBbTD0yMF0gbGluZSkganVzdCBjb3B5ICovCisrCQlpZiAoIXApCisrCQkJewor KwkJCWZwdXRzKG9saW5lYnVmLCBvdXQpOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysKKysJCXEg PSBwIC0gMTsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlz c3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJCSpxLS0gPSAwOworKworKwkJKnAgPSAwOwor KwkJdmFsdWUgPSBwICsgMTsKKysKKysJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFs dWUgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisrCQkJdmFs dWUrKzsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQlw ID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlz c3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJCSpwLS0gPSAwOworKworKwkJaWYgKCFzdHJj bXAoa2V5d29yZCwiW0wiKSAmJiAqcD09J10nKQorKwkJCXsKKysJCQlzd2l0Y2ggKGF0b2kodmFs dWUpKQorKwkJCQl7CisrCQkJCWNhc2UgMjA6IG1kPUVWUF9zaGExKCk7ICAgYnJlYWs7CisrCQkJ CWNhc2UgMjg6IG1kPUVWUF9zaGEyMjQoKTsgYnJlYWs7CisrCQkJCWNhc2UgMzI6IG1kPUVWUF9z aGEyNTYoKTsgYnJlYWs7CisrCQkJCWNhc2UgNDg6IG1kPUVWUF9zaGEzODQoKTsgYnJlYWs7Cisr CQkJCWNhc2UgNjQ6IG1kPUVWUF9zaGE1MTIoKTsgYnJlYWs7CisrCQkJCWRlZmF1bHQ6IGdvdG8g cGFyc2VfZXJyb3I7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQs ICJMZW4iKSkKKysJCQl7CisrCQkJaWYgKExlbiAhPSAtMSkKKysJCQkJZ290byBwYXJzZV9lcnJv cjsKKysJCQlMZW4gPSBhdG9pKHZhbHVlKTsKKysJCQlpZiAoTGVuIDwgMCkKKysJCQkJZ290byBw YXJzZV9lcnJvcjsKKysJCQkvKiBPbmx5IGhhbmRsZSBtdWx0aXBsZXMgb2YgOCBiaXRzICovCisr CQkJaWYgKExlbiAmIDB4NykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlpZiAoTGVuID4g U0hBX1RFU1RfTUFYX0JJVFMpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJTXNnTGVuID0g TGVuID4+IDM7CisrCQkJfQorKworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNnIikp CisrCQkJeworKwkJCWxvbmcgdG1wbGVuOworKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKKysJ CQkJKigtLXZhbHVlKSA9ICcwJzsKKysJCQlpZiAoTXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9y OworKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJnRtcGxlbik7CisrCQkJaWYgKCFNc2cpCisr CQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3Jk LCAiU2VlZCIpKQorKwkJCXsKKysJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCisrCQkJCSooLS12 YWx1ZSkgPSAnMCc7CisrCQkJaWYgKFNlZWQpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJ U2VlZCA9IGhleDJiaW5fbSh2YWx1ZSwgJlNlZWRMZW4pOworKwkJCWlmICghU2VlZCkKKysJCQkJ Z290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJN RCIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZQorKwkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCisr CQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKKysKKysJCWlmIChtZCAmJiBNc2cgJiYgKE1zZ0xlbiA+ PSAwKSkKKysJCQl7CisrCQkJaWYgKCFwcmludF9kZ3N0KG1kLCBvdXQsIE1zZywgTXNnTGVuKSkK KysJCQkJZ290byBlcnJvcjsKKysJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKKysJCQlNc2cgPSBOVUxM OworKwkJCU1zZ0xlbiA9IC0xOworKwkJCUxlbiA9IC0xOworKwkJCX0KKysJCWVsc2UgaWYgKG1k ICYmIFNlZWQgJiYgKFNlZWRMZW4gPiAwKSkKKysJCQl7CisrCQkJaWYgKCFwcmludF9tb250ZSht ZCwgb3V0LCBTZWVkLCBTZWVkTGVuKSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlPUEVOU1NMX2Zy ZWUoU2VlZCk7CisrCQkJU2VlZCA9IE5VTEw7CisrCQkJU2VlZExlbiA9IC0xOworKwkJCX0KKysJ CisrCisrCQl9CisrCisrCisrCXJldCA9IDE7CisrCisrCisrCWVycm9yOgorKworKwlpZiAob2xp bmVidWYpCisrCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOworKwlpZiAobGluZWJ1ZikKKysJCU9Q RU5TU0xfZnJlZShsaW5lYnVmKTsKKysJaWYgKE1zZykKKysJCU9QRU5TU0xfZnJlZShNc2cpOwor KwlpZiAoU2VlZCkKKysJCU9QRU5TU0xfZnJlZShTZWVkKTsKKysKKysJcmV0dXJuIHJldDsKKysK KysJcGFyc2VfZXJyb3I6CisrCisrCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3Ig cHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKKysKKysJZ290byBlcnJvcjsKKysKKysJfQor KworK3N0YXRpYyBpbnQgcHJpbnRfZGdzdChjb25zdCBFVlBfTUQgKmVtZCwgRklMRSAqb3V0LAor KwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTXNnbGVuKQorKwl7CisrCWludCBpLCBtZGxlbjsK KysJdW5zaWduZWQgY2hhciBtZFtFVlBfTUFYX01EX1NJWkVdOworKwlpZiAoIUVWUF9EaWdlc3Qo TXNnLCBNc2dsZW4sIG1kLCAodW5zaWduZWQgaW50ICopJm1kbGVuLCBlbWQsIE5VTEwpKQorKwkJ eworKwkJZnB1dHMoIkVycm9yIGNhbGN1bGF0aW5nIEhBU0hcbiIsIHN0ZGVycik7CisrCQlyZXR1 cm4gMDsKKysJCX0KKysJZnB1dHMoIk1EID0gIiwgb3V0KTsKKysJZm9yIChpID0gMDsgaSA8IG1k bGVuOyBpKyspCisrCQlmcHJpbnRmKG91dCwgIiUwMngiLCBtZFtpXSk7CisrCWZwdXRzKCJcbiIs IG91dCk7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGludCBwcmludF9tb250ZShjb25z dCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpTZWVkLCBpbnQgU2Vl ZExlbikKKysJeworKwl1bnNpZ25lZCBpbnQgaSwgaiwgazsKKysJaW50IHJldCA9IDA7CisrCUVW UF9NRF9DVFggY3R4OworKwl1bnNpZ25lZCBjaGFyICptMSwgKm0yLCAqbTMsICpwOworKwl1bnNp Z25lZCBpbnQgbWxlbiwgbTFsZW4sIG0ybGVuLCBtM2xlbjsKKysKKysJRVZQX01EX0NUWF9pbml0 KCZjdHgpOworKworKwlpZiAoU2VlZExlbiA+IEVWUF9NQVhfTURfU0laRSkKKysJCW1sZW4gPSBT ZWVkTGVuOworKwllbHNlCisrCQltbGVuID0gRVZQX01BWF9NRF9TSVpFOworKworKwltMSA9IE9Q RU5TU0xfbWFsbG9jKG1sZW4pOworKwltMiA9IE9QRU5TU0xfbWFsbG9jKG1sZW4pOworKwltMyA9 IE9QRU5TU0xfbWFsbG9jKG1sZW4pOworKworKwlpZiAoIW0xIHx8ICFtMiB8fCAhbTMpCisrCQln b3RvIG1jX2Vycm9yOworKworKwltMWxlbiA9IG0ybGVuID0gbTNsZW4gPSBTZWVkTGVuOworKwlt ZW1jcHkobTEsIFNlZWQsIFNlZWRMZW4pOworKwltZW1jcHkobTIsIFNlZWQsIFNlZWRMZW4pOwor KwltZW1jcHkobTMsIFNlZWQsIFNlZWRMZW4pOworKworKwlmcHV0cygiXG4iLCBvdXQpOworKwor Kwlmb3IgKGogPSAwOyBqIDwgMTAwOyBqKyspCisrCQl7CisrCQlmb3IgKGkgPSAwOyBpIDwgMTAw MDsgaSsrKQorKwkJCXsKKysJCQlFVlBfRGlnZXN0SW5pdF9leCgmY3R4LCBtZCwgTlVMTCk7Cisr CQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMSwgbTFsZW4pOworKwkJCUVWUF9EaWdlc3RVcGRh dGUoJmN0eCwgbTIsIG0ybGVuKTsKKysJCQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIG0zLCBtM2xl bik7CisrCQkJcCA9IG0xOworKwkJCW0xID0gbTI7CisrCQkJbTFsZW4gPSBtMmxlbjsKKysJCQlt MiA9IG0zOworKwkJCW0ybGVuID0gbTNsZW47CisrCQkJbTMgPSBwOworKwkJCUVWUF9EaWdlc3RG aW5hbF9leCgmY3R4LCBtMywgJm0zbGVuKTsKKysJCQl9CisrCQlmcHJpbnRmKG91dCwgIkNPVU5U ID0gJWRcbiIsIGopOworKwkJZnB1dHMoIk1EID0gIiwgb3V0KTsKKysJCWZvciAoayA9IDA7IGsg PCBtM2xlbjsgaysrKQorKwkJCWZwcmludGYob3V0LCAiJTAyeCIsIG0zW2tdKTsKKysJCWZwdXRz KCJcblxuIiwgb3V0KTsKKysJCW1lbWNweShtMSwgbTMsIG0zbGVuKTsKKysJCW1lbWNweShtMiwg bTMsIG0zbGVuKTsKKysJCW0xbGVuID0gbTJsZW4gPSBtM2xlbjsKKysJCX0KKysKKysJcmV0ID0g MTsKKysKKysJbWNfZXJyb3I6CisrCWlmIChtMSkKKysJCU9QRU5TU0xfZnJlZShtMSk7CisrCWlm IChtMikKKysJCU9QRU5TU0xfZnJlZShtMik7CisrCWlmIChtMykKKysJCU9QRU5TU0xfZnJlZSht Myk7CisrCisrCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKKysKKysJcmV0dXJuIHJldDsKKysJ fQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9j YXZzL2ZpcHNfdXRsLmguZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2NhdnMv Zmlwc191dGwuaAorLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X3V0bC5oLmZpcHMJMjAxMi0wMi0yOSAxMDozMzowMi43OTIyOTQ4ODAgKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwuaAkyMDEyLTAyLTI5IDEw OjMzOjAyLjc5MjI5NDg4MCArMDEwMAorQEAgLTAsMCArMSwzNDMgQEAKKysvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorKyAqIENvcHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 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 CisrICoKKysgKi8KKysKKyt2b2lkIGRvX3ByaW50X2Vycm9ycyh2b2lkKQorKwl7CisrCWNvbnN0 IGNoYXIgKmZpbGUsICpkYXRhOworKwlpbnQgbGluZSwgZmxhZ3M7CisrCXVuc2lnbmVkIGxvbmcg bDsKKysJd2hpbGUgKChsID0gRVJSX2dldF9lcnJvcl9saW5lX2RhdGEoJmZpbGUsICZsaW5lLCAm ZGF0YSwgJmZsYWdzKSkpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiVseDpsaWI9 JWQsZnVuYz0lZCxyZWFzb249JWQiCisrCQkJCSI6ZmlsZT0lczpsaW5lPSVkOiVzXG4iLAorKwkJ CWwsIEVSUl9HRVRfTElCKGwpLCBFUlJfR0VUX0ZVTkMobCksIEVSUl9HRVRfUkVBU09OKGwpLAor KwkJCWZpbGUsIGxpbmUsIGZsYWdzICYgRVJSX1RYVF9TVFJJTkcgPyBkYXRhIDogIiIpOworKwkJ fQorKwl9CisrCisraW50IGhleDJiaW4oY29uc3QgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91 dCkKKysgICAgeworKyAgICBpbnQgbjEsIG4yOworKyAgICB1bnNpZ25lZCBjaGFyIGNoOworKwor KyAgICBmb3IgKG4xPTAsbjI9MCA7IGluW24xXSAmJiBpbltuMV0gIT0gJ1xuJyA7ICkKKysJeyAv KiBmaXJzdCBieXRlICovCisrCWlmICgoaW5bbjFdID49ICcwJykgJiYgKGluW24xXSA8PSAnOScp KQorKwkgICAgY2ggPSBpbltuMSsrXSAtICcwJzsKKysJZWxzZSBpZiAoKGluW24xXSA+PSAnQScp ICYmIChpbltuMV0gPD0gJ0YnKSkKKysJICAgIGNoID0gaW5bbjErK10gLSAnQScgKyAxMDsKKysJ ZWxzZSBpZiAoKGluW24xXSA+PSAnYScpICYmIChpbltuMV0gPD0gJ2YnKSkKKysJICAgIGNoID0g aW5bbjErK10gLSAnYScgKyAxMDsKKysJZWxzZQorKwkgICAgcmV0dXJuIC0xOworKwlpZighaW5b bjFdKQorKwkgICAgeworKwkgICAgb3V0W24yKytdPWNoOworKwkgICAgYnJlYWs7CisrCSAgICB9 CisrCW91dFtuMl0gPSBjaCA8PCA0OworKwkvKiBzZWNvbmQgYnl0ZSAqLworKwlpZiAoKGluW24x XSA+PSAnMCcpICYmIChpbltuMV0gPD0gJzknKSkKKysJICAgIGNoID0gaW5bbjErK10gLSAnMCc7 CisrCWVsc2UgaWYgKChpbltuMV0gPj0gJ0EnKSAmJiAoaW5bbjFdIDw9ICdGJykpCisrCSAgICBj aCA9IGluW24xKytdIC0gJ0EnICsgMTA7CisrCWVsc2UgaWYgKChpbltuMV0gPj0gJ2EnKSAmJiAo aW5bbjFdIDw9ICdmJykpCisrCSAgICBjaCA9IGluW24xKytdIC0gJ2EnICsgMTA7CisrCWVsc2UK KysJICAgIHJldHVybiAtMTsKKysJb3V0W24yKytdIHw9IGNoOworKwl9CisrICAgIHJldHVybiBu MjsKKysgICAgfQorKworK3Vuc2lnbmVkIGNoYXIgKmhleDJiaW5fbShjb25zdCBjaGFyICppbiwg bG9uZyAqcGxlbikKKysJeworKwl1bnNpZ25lZCBjaGFyICpwOworKwlwID0gT1BFTlNTTF9tYWxs b2MoKHN0cmxlbihpbikgKyAxKS8yKTsKKysJKnBsZW4gPSBoZXgyYmluKGluLCBwKTsKKysJcmV0 dXJuIHA7CisrCX0KKysKKytpbnQgZG9faGV4MmJuKEJJR05VTSAqKnByLCBjb25zdCBjaGFyICpp bikKKysJeworKwl1bnNpZ25lZCBjaGFyICpwOworKwlsb25nIHBsZW47CisrCWludCByID0gMDsK KysJcCA9IGhleDJiaW5fbShpbiwgJnBsZW4pOworKwlpZiAoIXApCisrCQlyZXR1cm4gMDsKKysJ aWYgKCEqcHIpCisrCQkqcHIgPSBCTl9uZXcoKTsKKysJaWYgKCEqcHIpCisrCQlyZXR1cm4gMDsK KysJaWYgKEJOX2JpbjJibihwLCBwbGVuLCAqcHIpKQorKwkJciA9IDE7CisrCU9QRU5TU0xfZnJl ZShwKTsKKysJcmV0dXJuIHI7CisrCX0KKysKKytpbnQgZG9fYm5fcHJpbnQoRklMRSAqb3V0LCBC SUdOVU0gKmJuKQorKwl7CisrCWludCBsZW4sIGk7CisrCXVuc2lnbmVkIGNoYXIgKnRtcDsKKysJ bGVuID0gQk5fbnVtX2J5dGVzKGJuKTsKKysJaWYgKGxlbiA9PSAwKQorKwkJeworKwkJZnB1dHMo IjAwIiwgb3V0KTsKKysJCXJldHVybiAxOworKwkJfQorKworKwl0bXAgPSBPUEVOU1NMX21hbGxv YyhsZW4pOworKwlpZiAoIXRtcCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiTWVtb3J5IGFs bG9jYXRpb24gZXJyb3JcbiIpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCUJOX2JuMmJpbihibiwg dG1wKTsKKysJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorKwkJZnByaW50ZihvdXQsICIlMDJ4 IiwgdG1wW2ldKTsKKysJT1BFTlNTTF9mcmVlKHRtcCk7CisrCXJldHVybiAxOworKwl9CisrCisr aW50IGRvX2JuX3ByaW50X25hbWUoRklMRSAqb3V0LCBjb25zdCBjaGFyICpuYW1lLCBCSUdOVU0g KmJuKQorKwl7CisrCWludCByOworKwlmcHJpbnRmKG91dCwgIiVzID0gIiwgbmFtZSk7CisrCXIg PSBkb19ibl9wcmludChvdXQsIGJuKTsKKysJaWYgKCFyKQorKwkJcmV0dXJuIDA7CisrCWZwdXRz KCJcbiIsIG91dCk7CisrCXJldHVybiAxOworKwl9CisrCisraW50IHBhcnNlX2xpbmUoY2hhciAq KnBrdywgY2hhciAqKnB2YWwsIGNoYXIgKmxpbmVidWYsIGNoYXIgKm9saW5lYnVmKQorKwl7Cisr CWNoYXIgKmtleXdvcmQsICp2YWx1ZSwgKnAsICpxOworKwlzdHJjcHkobGluZWJ1Ziwgb2xpbmVi dWYpOworKwlrZXl3b3JkID0gbGluZWJ1ZjsKKysJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisr CXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKKysJCWtleXdvcmQrKzsK KysKKysJLyogTG9vayBmb3IgPSBzaWduICovCisrCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsK KysKKysJLyogSWYgbm8gJz0nIGV4aXQgKi8KKysJaWYgKCFwKQorKwkJcmV0dXJuIDA7CisrCisr CXEgPSBwIC0gMTsKKysKKysJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisrCXdoaWxlIChp c3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCSpxLS0gPSAwOworKworKwkqcCA9IDA7Cisr CXZhbHVlID0gcCArIDE7CisrCisrCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUg Ki8KKysJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKKysJCXZhbHVlKys7 CisrCisrCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCXAgPSB2YWx1 ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKworKwl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNl KCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCSpwLS0gPSAwOworKworKwkqcGt3ID0ga2V5d29yZDsK KysJKnB2YWwgPSB2YWx1ZTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytCSUdOVU0gKmhleDJibihj b25zdCBjaGFyICppbikKKysgICAgeworKyAgICBCSUdOVU0gKnA9TlVMTDsKKysKKysgICAgaWYg KCFkb19oZXgyYm4oJnAsIGluKSkKKysJcmV0dXJuIE5VTEw7CisrCisrICAgIHJldHVybiBwOwor KyAgICB9CisrCisraW50IGJpbjJoZXgoY29uc3QgdW5zaWduZWQgY2hhciAqaW4saW50IGxlbixj aGFyICpvdXQpCisrICAgIHsKKysgICAgaW50IG4xLCBuMjsKKysgICAgdW5zaWduZWQgY2hhciBj aDsKKysKKysgICAgZm9yIChuMT0wLG4yPTAgOyBuMSA8IGxlbiA7ICsrbjEpCisrCXsKKysJY2g9 aW5bbjFdID4+IDQ7CisrCWlmIChjaCA8PSAweDA5KQorKwkgICAgb3V0W24yKytdPWNoKycwJzsK KysJZWxzZQorKwkgICAgb3V0W24yKytdPWNoLTEwKydhJzsKKysJY2g9aW5bbjFdICYgMHgwZjsK KysJaWYoY2ggPD0gMHgwOSkKKysJICAgIG91dFtuMisrXT1jaCsnMCc7CisrCWVsc2UKKysJICAg IG91dFtuMisrXT1jaC0xMCsnYSc7CisrCX0KKysgICAgb3V0W24yXT0nXDAnOworKyAgICByZXR1 cm4gbjI7CisrICAgIH0KKysKKyt2b2lkIHB2KGNvbnN0IGNoYXIgKnRhZyxjb25zdCB1bnNpZ25l ZCBjaGFyICp2YWwsaW50IGxlbikKKysgICAgeworKyAgICBjaGFyIG9idWZbMjA0OF07CisrCisr ICAgIGJpbjJoZXgodmFsLGxlbixvYnVmKTsKKysgICAgcHJpbnRmKCIlcyA9ICVzXG4iLHRhZyxv YnVmKTsKKysgICAgfQorKworKy8qIFRvIGF2b2lkIGV4dGVuc2l2ZSBjaGFuZ2VzIHRvIHRlc3Qg cHJvZ3JhbSBhdCB0aGlzIHN0YWdlIGp1c3QgY29udmVydAorKyAqIHRoZSBpbnB1dCBsaW5lIGlu dG8gYW4gYWNjZXB0YWJsZSBmb3JtLiBLZXl3b3JkIGxpbmVzIGNvbnZlcnRlZCB0byBmb3JtCisr ICogImtleXdvcmQgPSB2YWx1ZVxuIiBubyBtYXR0ZXIgd2hhdCB3aGl0ZSBzcGFjZSBwcmVzZW50 LCBhbGwgb3RoZXIgbGluZXMKKysgKiBqdXN0IGhhdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3Bh Y2UgcmVtb3ZlZC4KKysgKi8KKysKKytpbnQgdGlkeV9saW5lKGNoYXIgKmxpbmVidWYsIGNoYXIg Km9saW5lYnVmKQorKwl7CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZSwgKnAsICpxOworKwlzdHJj cHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwlrZXl3b3JkID0gbGluZWJ1ZjsKKysJLyogU2tpcCBs ZWFkaW5nIHNwYWNlICovCisrCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3Jk KSkKKysJCWtleXdvcmQrKzsKKysJLyogTG9vayBmb3IgPSBzaWduICovCisrCXAgPSBzdHJjaHIo bGluZWJ1ZiwgJz0nKTsKKysKKysJLyogSWYgbm8gJz0nIGp1c3QgY2hvcCBsZWFkaW5nLCB0cmFp bGluZyB3cyAqLworKwlpZiAoIXApCisrCQl7CisrCQlwID0ga2V5d29yZCArIHN0cmxlbihrZXl3 b3JkKSAtIDE7CisrCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFy KSpwKSkKKysJCQkqcC0tID0gMDsKKysJCXN0cmNweShvbGluZWJ1Ziwga2V5d29yZCk7CisrCQlz dHJjYXQob2xpbmVidWYsICJcbiIpOworKwkJcmV0dXJuIDE7CisrCQl9CisrCisrCXEgPSBwIC0g MTsKKysKKysJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisrCXdoaWxlIChpc3NwYWNlKCh1 bnNpZ25lZCBjaGFyKSpxKSkKKysJCSpxLS0gPSAwOworKworKwkqcCA9IDA7CisrCXZhbHVlID0g cCArIDE7CisrCisrCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJd2hp bGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKKysJCXZhbHVlKys7CisrCisrCS8q IFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCXAgPSB2YWx1ZSArIHN0cmxl bih2YWx1ZSkgLSAxOworKworKwl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25l ZCBjaGFyKSpwKSkKKysJCSpwLS0gPSAwOworKworKwlzdHJjcHkob2xpbmVidWYsIGtleXdvcmQp OworKwlzdHJjYXQob2xpbmVidWYsICIgPSAiKTsKKysJc3RyY2F0KG9saW5lYnVmLCB2YWx1ZSk7 CisrCXN0cmNhdChvbGluZWJ1ZiwgIlxuIik7CisrCisrCXJldHVybiAxOworKwl9CisrCisrLyog TkI6IHRoaXMgcmV0dXJuIHRoZSBudW1iZXIgb2YgX2JpdHNfIHJlYWQgKi8KKytpbnQgYmludDJi aW4oY29uc3QgY2hhciAqaW4sIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKm91dCkKKysgICAgewor KyAgICBpbnQgbjsKKysKKysgICAgbWVtc2V0KG91dCwwLGxlbik7CisrICAgIGZvcihuPTAgOyBu IDwgbGVuIDsgKytuKQorKwlpZihpbltuXSA9PSAnMScpCisrCSAgICBvdXRbbi84XXw9KDB4ODAg Pj4gKG4lOCkpOworKyAgICByZXR1cm4gbGVuOworKyAgICB9CisrCisraW50IGJpbjJiaW50KGNv bnN0IHVuc2lnbmVkIGNoYXIgKmluLGludCBsZW4sY2hhciAqb3V0KQorKyAgICB7CisrICAgIGlu dCBuOworKworKyAgICBmb3Iobj0wIDsgbiA8IGxlbiA7ICsrbikKKysJb3V0W25dPShpbltuLzhd JigweDgwID4+IChuJTgpKSkgPyAnMScgOiAnMCc7CisrICAgIHJldHVybiBuOworKyAgICB9Cisr CisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisr Cisrdm9pZCBQcmludFZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBpbnQgbGVu KQorK3sKKysjaWYgVkVSQk9TRQorKyAgY2hhciBvYnVmWzIwNDhdOworKyAgaW50IG9sZW47Cisr ICBvbGVuID0gYmluMmhleCh2YWwsIGxlbiwgb2J1Zik7CisrICBwcmludGYoIiVzID0gJS4qc1xu IiwgdGFnLCBvbGVuLCBvYnVmKTsKKysjZW5kaWYKKyt9CisrCisrdm9pZCBPdXRwdXRWYWx1ZShj aGFyICp0YWcsIHVuc2lnbmVkIGNoYXIgKnZhbCwgaW50IGxlbiwgRklMRSAqcmZwLGludCBiaXRt b2RlKQorKyAgICB7CisrICAgIGNoYXIgb2J1ZlsyMDQ4XTsKKysgICAgaW50IG9sZW47CisrCisr ICAgIGlmKGJpdG1vZGUpCisrCW9sZW49YmluMmJpbnQodmFsLGxlbixvYnVmKTsKKysgICAgZWxz ZQorKwlvbGVuPWJpbjJoZXgodmFsLGxlbixvYnVmKTsKKysKKysgICAgZnByaW50ZihyZnAsICIl cyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7CisrI2lmIFZFUkJPU0UKKysgICAgcHJpbnRm KCIlcyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7CisrI2VuZGlmCisrICAgIH0KKysKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3Qu Yy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3Qu YworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3Qu Yy5maXBzCTIwMTItMDItMjkgMTA6MzM6MDIuNzkzMjk0ODg5ICswMTAwCisrKysgb3BlbnNzbC0x LjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jCTIwMTItMDItMjkgMTA6 MzM6MDIuNzkzMjk0ODg5ICswMTAwCitAQCAtMCwwICsxLDM1OSBAQAorKy8qID09PT09PT09PT09 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 KysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgor KyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKytzdGF0aWMgY29uc3Qgc3RydWN0CisrICAgIHsKKysgICAgY29uc3QgdW5zaWduZWQgY2hh ciBrZXlbMTZdOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsxNl07CisrICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsxNl07CisrICAgIH0gdGVzdHNbXT0KKysJ eworKwl7CisrCXsgMHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3LAorKwkg IDB4MDgsMHgwOSwweDBBLDB4MEIsMHgwQywweDBELDB4MEUsMHgwRiB9LAorKwl7IDB4MDAsMHgx MSwweDIyLDB4MzMsMHg0NCwweDU1LDB4NjYsMHg3NywKKysJICAweDg4LDB4OTksMHhBQSwweEJC LDB4Q0MsMHhERCwweEVFLDB4RkYgfSwKKysJeyAweDY5LDB4QzQsMHhFMCwweEQ4LDB4NkEsMHg3 QiwweDA0LDB4MzAsCisrCSAgMHhEOCwweENELDB4QjcsMHg4MCwweDcwLDB4QjQsMHhDNSwweDVB IH0sCisrCX0sCisrCX07CisrCisrc3RhdGljIGludCBjb3JydXB0X2FlczsKKysKKyt2b2lkIEZJ UFNfY29ycnVwdF9hZXMoKQorKyAgICB7CisrICAgIGNvcnJ1cHRfYWVzID0gMTsKKysgICAgfQor KworK2ludCBGSVBTX3NlbGZ0ZXN0X2FlcygpCisrICAgIHsKKysgICAgaW50IG47CisrICAgIGlu dCByZXQgPSAwOworKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7CisrICAgIEVWUF9DSVBIRVJfQ1RY X2luaXQoJmN0eCk7CisrCisrICAgIGZvcihuPTAgOyBuIDwgMSA7ICsrbikKKysJeworKwl1bnNp Z25lZCBjaGFyIGtleVsxNl07CisrCisrCW1lbWNweShrZXksIHRlc3RzW25dLmtleSwgc2l6ZW9m KGtleSkpOworKwlpZiAoY29ycnVwdF9hZXMpCisrCQlrZXlbMF0rKzsKKysJaWYgKGZpcHNfY2lw aGVyX3Rlc3QoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksCisrCQkJCWtleSwgTlVMTCwKKysJCQkJ dGVzdHNbbl0ucGxhaW50ZXh0LAorKwkJCQl0ZXN0c1tuXS5jaXBoZXJ0ZXh0LAorKwkJCQkxNikg PD0gMCkKKysJCWdvdG8gZXJyOworKwl9CisrICAgIHJldCA9IDE7CisrICAgIGVycjoKKysgICAg RVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysgICAgaWYgKHJldCA9PSAwKQorKwkgICAg RklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7 CisrICAgIHJldHVybiByZXQ7CisrICAgIH0KKysKKysvKiBBRVMtQ0NNIHRlc3QgZGF0YSBmcm9t IE5JU1QgcHVibGljIHRlc3QgdmVjdG9ycyAqLworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGNjbV9rZXlbXSA9IHsKKysJMHhjZSwweGIwLDB4MDksMHhhZSwweGE0LDB4NDUsMHg0NCww eDUxLDB4ZmUsMHhhZCwweGYwLDB4ZTYsCisrCTB4YjMsMHg2ZiwweDQ1LDB4NTUsMHg1ZCwweGQw LDB4NDcsMHgyMywweGJhLDB4YTQsMHg0OCwweGU4CisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBjY21fbm9uY2VbXSA9IHsKKysJMHg3NiwweDQwLDB4NDMsMHhjNCwweDk0LDB4NjAs MHhiNworK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX2FkYXRhW10gPSB7Cisr CTB4NmUsMHg4MCwweGRkLDB4N2YsMHgxYiwweGFkLDB4ZjMsMHhhMSwweGM5LDB4YWIsMHgyNSww eGM3LAorKwkweDVmLDB4MTAsMHhiZCwweGU3LDB4OGMsMHgyMywweGZhLDB4MGUsMHhiOCwweGY5 LDB4YWEsMHhhNSwKKysJMHgzYSwweGRlLDB4ZmIsMHhmNCwweGNiLDB4ZjcsMHg4ZiwweGU0Cisr fTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjY21fcHRbXSA9IHsKKysJMHhjOCwweGQy LDB4NzUsMHhmOSwweDE5LDB4ZTEsMHg3ZCwweDdmLDB4ZTYsMHg5YywweDJhLDB4MWYsCisrCTB4 NTgsMHg5MywweDlkLDB4ZmUsMHg0ZCwweDQwLDB4MzcsMHg5MSwweGI1LDB4ZGYsMHgxMywweDEw CisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjY21fY3RbXSA9IHsKKysJMHg4YSww eDBmLDB4M2QsMHg4MiwweDI5LDB4ZTQsMHg4ZSwweDc0LDB4ODcsMHhmZCwweDk1LDB4YTIsCisr CTB4OGEsMHhkMywweDkyLDB4YzgsMHgwYiwweDM2LDB4ODEsMHhkNCwweGZiLDB4YzcsMHhiYiww eGZkCisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjY21fdGFnW10gPSB7CisrCTB4 MmQsMHhkNiwweGVmLDB4MWMsMHg0NSwweGQ0LDB4Y2MsMHhiNywweDIzLDB4ZGMsMHgwNywweDQ0 LAorKwkweDE0LDB4ZGIsMHg1MCwweDZkCisrfTsKKysKKytpbnQgRklQU19zZWxmdGVzdF9hZXNf Y2NtKHZvaWQpCisrCXsKKysJaW50IHJldCA9IDA7CisrCXVuc2lnbmVkIGNoYXIgb3V0WzEyOF0s IHRhZ1sxNl07CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsKKysJRVZQX0NJUEhFUl9DVFhfaW5pdCgm Y3R4KTsKKysJbWVtc2V0KG91dCwgMCwgc2l6ZW9mKG91dCkpOworKwlpZiAoIUVWUF9DaXBoZXJJ bml0KCZjdHgsIEVWUF9hZXNfMTkyX2NjbSgpLCBOVUxMLCBOVUxMLCAxKSkKKysJCWdvdG8gZXJy OworKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9JVkxF TiwKKysJCQkJCXNpemVvZihjY21fbm9uY2UpLCBOVUxMKSkKKysJCWdvdG8gZXJyOworKwlpZiAo IUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9UQUcsCisrCQkJCQlz aXplb2YoY2NtX3RhZyksIE5VTEwpKQorKwkJZ290byBlcnI7CisrCWlmICghRVZQX0NpcGhlcklu aXQoJmN0eCwgTlVMTCwgY2NtX2tleSwgY2NtX25vbmNlLCAxKSkKKysJCWdvdG8gZXJyOworKwlp ZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCBzaXplb2YoY2NtX3B0KSkgIT0gc2l6ZW9m KGNjbV9wdCkpCisrCQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgY2Nt X2FkYXRhLCBzaXplb2YoY2NtX2FkYXRhKSkgPCAwKQorKwkJZ290byBlcnI7CisrCWlmIChFVlBf Q2lwaGVyKCZjdHgsIG91dCwgY2NtX3B0LCBzaXplb2YoY2NtX3B0KSkgIT0gc2l6ZW9mKGNjbV9j dCkpCisrCQlnb3RvIGVycjsKKysKKysJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVW UF9DVFJMX0NDTV9HRVRfVEFHLCAxNiwgdGFnKSkKKysJCWdvdG8gZXJyOworKwlpZiAobWVtY21w KHRhZywgY2NtX3RhZywgc2l6ZW9mKGNjbV90YWcpKQorKwkJfHwgbWVtY21wKG91dCwgY2NtX2N0 LCBzaXplb2YoY2NtX2N0KSkpCisrCQlnb3RvIGVycjsKKysKKysJbWVtc2V0KG91dCwgMCwgc2l6 ZW9mKG91dCkpOworKworKwlpZiAoIUVWUF9DaXBoZXJJbml0KCZjdHgsIEVWUF9hZXNfMTkyX2Nj bSgpLCBOVUxMLCBOVUxMLCAwKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIUVWUF9DSVBIRVJfQ1RY X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9JVkxFTiwKKysJCQkJCXNpemVvZihjY21fbm9u Y2UpLCBOVUxMKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0 eCwgRVZQX0NUUkxfQ0NNX1NFVF9UQUcsIDE2LCB0YWcpKQorKwkJZ290byBlcnI7CisrCWlmICgh RVZQX0NpcGhlckluaXQoJmN0eCwgTlVMTCwgY2NtX2tleSwgY2NtX25vbmNlLCAwKSkKKysJCWdv dG8gZXJyOworKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCBzaXplb2YoY2NtX2N0 KSkgIT0gc2l6ZW9mKGNjbV9jdCkpCisrCQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0 eCwgTlVMTCwgY2NtX2FkYXRhLCBzaXplb2YoY2NtX2FkYXRhKSkgPCAwKQorKwkJZ290byBlcnI7 CisrCWlmIChFVlBfQ2lwaGVyKCZjdHgsIG91dCwgY2NtX2N0LCBzaXplb2YoY2NtX2N0KSkgIT0g c2l6ZW9mKGNjbV9wdCkpCisrCQlnb3RvIGVycjsKKysKKysJaWYgKG1lbWNtcChvdXQsIGNjbV9w dCwgc2l6ZW9mKGNjbV9wdCkpKQorKwkJZ290byBlcnI7CisrCisrCXJldCA9IDE7CisrCisrCWVy cjoKKysJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysKKysJaWYgKHJldCA9PSAwKQor KwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfQ0NNLEZJUFNfUl9TRUxG VEVTVF9GQUlMRUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWVsc2UKKysJCXJldHVybiByZXQ7 CisrCisrCX0KKysKKysvKiBBRVMtR0NNIHRlc3QgZGF0YSBmcm9tIE5JU1QgcHVibGljIHRlc3Qg dmVjdG9ycyAqLworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9rZXlbXSA9IHsK KysJMHhlZSwweGJjLDB4MWYsMHg1NywweDQ4LDB4N2YsMHg1MSwweDkyLDB4MWMsMHgwNCwweDY1 LDB4NjYsCisrCTB4NWYsMHg4YSwweGU2LDB4ZDEsMHg2NSwweDhiLDB4YjIsMHg2ZCwweGU2LDB4 ZjgsMHhhMCwweDY5LAorKwkweGEzLDB4NTIsMHgwMiwweDkzLDB4YTUsMHg3MiwweDA3LDB4OGYK Kyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9pdltdID0geworKwkweDk5LDB4 YWEsMHgzZSwweDY4LDB4ZWQsMHg4MSwweDczLDB4YTAsMHhlZSwweGQwLDB4NjYsMHg4NAorK307 Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX3B0W10gPSB7CisrCTB4ZjUsMHg2ZSww eDg3LDB4MDUsMHg1YiwweGMzLDB4MmQsMHgwZSwweGViLDB4MzEsMHhiMiwweGVhLAorKwkweGNj LDB4MmIsMHhmMiwweGE1CisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21fYWFk W10gPSB7CisrCTB4NGQsMHgyMywweGMzLDB4Y2UsMHhjMywweDM0LDB4YjQsMHg5YiwweGRiLDB4 MzcsMHgwYywweDQzLAorKwkweDdmLDB4ZWMsMHg3OCwweGRlCisrfTsKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBnY21fY3RbXSA9IHsKKysJMHhmNywweDI2LDB4NDQsMHgxMywweGE4LDB4 NGMsMHgwZSwweDdjLDB4ZDUsMHgzNiwweDg2LDB4N2UsCisrCTB4YjksMHhmMiwweDE3LDB4MzYK Kyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV90YWdbXSA9IHsKKysJMHg2Nyww eGJhLDB4MDUsMHgxMCwweDI2LDB4MmEsMHhlNCwweDg3LDB4ZDcsMHgzNywweGVlLDB4NjIsCisr CTB4OTgsMHhmNywweDdlLDB4MGMKKyt9OworKworK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc19nY20o dm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJdW5zaWduZWQgY2hhciBvdXRbMTI4XSwgdGFn WzE2XTsKKysJRVZQX0NJUEhFUl9DVFggY3R4OworKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgp OworKwltZW1zZXQob3V0LCAwLCBzaXplb2Yob3V0KSk7CisrCW1lbXNldCh0YWcsIDAsIHNpemVv Zih0YWcpKTsKKysJaWYgKCFFVlBfQ2lwaGVySW5pdCgmY3R4LCBFVlBfYWVzXzI1Nl9nY20oKSwg TlVMTCwgTlVMTCwgMSkpCisrCQlnb3RvIGVycjsKKysJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJs KCZjdHgsIEVWUF9DVFJMX0dDTV9TRVRfSVZMRU4sCisrCQkJCQlzaXplb2YoZ2NtX2l2KSwgTlVM TCkpCisrCQlnb3RvIGVycjsKKysJaWYgKCFFVlBfQ2lwaGVySW5pdCgmY3R4LCBOVUxMLCBnY21f a2V5LCBnY21faXYsIDEpKQorKwkJZ290byBlcnI7CisrCWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5V TEwsIGdjbV9hYWQsIHNpemVvZihnY21fYWFkKSkgPCAwKQorKwkJZ290byBlcnI7CisrCWlmIChF VlBfQ2lwaGVyKCZjdHgsIG91dCwgZ2NtX3B0LCBzaXplb2YoZ2NtX3B0KSkgIT0gc2l6ZW9mKGdj bV9jdCkpCisrCQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwg MCkgPCAwKQorKwkJZ290byBlcnI7CisrCisrCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4 LCBFVlBfQ1RSTF9HQ01fR0VUX1RBRywgMTYsIHRhZykpCisrCQlnb3RvIGVycjsKKysKKysJaWYg KG1lbWNtcCh0YWcsIGdjbV90YWcsIDE2KSB8fCBtZW1jbXAob3V0LCBnY21fY3QsIDE2KSkKKysJ CWdvdG8gZXJyOworKworKwltZW1zZXQob3V0LCAwLCBzaXplb2Yob3V0KSk7CisrCisrCWlmICgh RVZQX0NpcGhlckluaXQoJmN0eCwgRVZQX2Flc18yNTZfZ2NtKCksIE5VTEwsIE5VTEwsIDApKQor KwkJZ290byBlcnI7CisrCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9H Q01fU0VUX0lWTEVOLAorKwkJCQkJc2l6ZW9mKGdjbV9pdiksIE5VTEwpKQorKwkJZ290byBlcnI7 CisrCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX1RBRywg MTYsIHRhZykpCisrCQlnb3RvIGVycjsKKysJaWYgKCFFVlBfQ2lwaGVySW5pdCgmY3R4LCBOVUxM LCBnY21fa2V5LCBnY21faXYsIDApKQorKwkJZ290byBlcnI7CisrCWlmIChFVlBfQ2lwaGVyKCZj dHgsIE5VTEwsIGdjbV9hYWQsIHNpemVvZihnY21fYWFkKSkgPCAwKQorKwkJZ290byBlcnI7Cisr CWlmIChFVlBfQ2lwaGVyKCZjdHgsIG91dCwgZ2NtX2N0LCBzaXplb2YoZ2NtX2N0KSkgIT0gc2l6 ZW9mKGdjbV9wdCkpCisrCQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwg TlVMTCwgMCkgPCAwKQorKwkJZ290byBlcnI7CisrCisrCWlmIChtZW1jbXAob3V0LCBnY21fcHQs IDE2KSkKKysJCWdvdG8gZXJyOworKworKwlyZXQgPSAxOworKworKwllcnI6CisrCUVWUF9DSVBI RVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrCisrCWlmIChyZXQgPT0gMCkKKysJCXsKKysJCUZJUFNl cnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0dDTSxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsK KysJCXJldHVybiAwOworKwkJfQorKwllbHNlCisrCQlyZXR1cm4gcmV0OworKworKwl9CisrCisr Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9rZXlbXSA9IHsKKysJMHhhMSww eGI5LDB4MGMsMHhiYSwweDNmLDB4MDYsMHhhYywweDM1LDB4M2IsMHgyYywweDM0LDB4MzgsCisr CTB4NzYsMHgwOCwweDE3LDB4NjIsMHgwOSwweDA5LDB4MjMsMHgwMiwweDZlLDB4OTEsMHg3Nyww eDE4LAorKwkweDE1LDB4ZjIsMHg5ZCwweGFiLDB4MDEsMHg5MywweDJmLDB4MmYKKyt9OworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18xMjhfaVtdID0geworKwkweDRmLDB4YWUsMHhm NywweDExLDB4N2MsMHhkYSwweDU5LDB4YzYsMHg2ZSwweDRiLDB4OTIsMHgwMSwKKysJMHgzZSww eDc2LDB4OGEsMHhkNQorK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9w dFtdID0geworKwkweGViLDB4YWIsMHhjZSwweDk1LDB4YjEsMHg0ZCwweDNjLDB4OGQsMHg2Ziww eGIzLDB4NTAsMHgzOSwKKysJMHgwNywweDkwLDB4MzEsMHgxYworK307Cisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9jdFtdID0geworKwkweDc3LDB4OGEsMHhlOCwweGI0LDB4 M2MsMHhiOSwweDhkLDB4NWEsMHg4MiwweDUwLDB4ODEsMHhkNSwKKysJMHhiZSwweDQ3LDB4MWMs MHg2MworK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzI1Nl9rZXlbXSA9 IHsKKysJMHgxZSwweGE2LDB4NjEsMHhjNSwweDhkLDB4OTQsMHgzYSwweDBlLDB4NDgsMHgwMSww eGU0LDB4MmYsCisrCTB4NGIsMHgwOSwweDQ3LDB4MTQsMHg5ZSwweDdmLDB4OWYsMHg4ZSwweDNl LDB4NjgsMHhkMCwweGM3LAorKwkweDUwLDB4NTIsMHgxMCwweGJkLDB4MzEsMHgxYSwweDBlLDB4 N2MsMHhkNiwweGUxLDB4M2YsMHhmZCwKKysJMHhmMiwweDQxLDB4OGQsMHg4ZCwweDE5LDB4MTEs MHhjMCwweDA0LDB4Y2QsMHhhNSwweDhkLDB4YTMsCisrCTB4ZDYsMHgxOSwweGI3LDB4ZTIsMHhi OSwweDE0LDB4MWUsMHg1OCwweDMxLDB4OGUsMHhlYSwweDM5LAorKwkweDJjLDB4ZjQsMHgxYiww eDA4CisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMjU2X2lbXSA9IHsKKysJ MHhhZCwweGY4LDB4ZDksMHgyNiwweDI3LDB4NDYsMHg0YSwweGQyLDB4ZjAsMHg0MiwweDhlLDB4 ODQsCisrCTB4YTksMHhmOCwweDc1LDB4NjQKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIFhUU18yNTZfcHRbXSA9IHsKKysJMHgyZSwweGVkLDB4ZWEsMHg1MiwweGNkLDB4ODIsMHgx NSwweGUxLDB4YWMsMHhjNiwweDQ3LDB4ZTgsCisrCTB4MTAsMHhiYiwweGMzLDB4NjQsMHgyZSww eDg3LDB4MjgsMHg3ZiwweDhkLDB4MmUsMHg1NywweGUzLAorKwkweDZjLDB4MGEsMHgyNCwweGZi LDB4YzEsMHgyYSwweDIwLDB4MmUKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhU U18yNTZfY3RbXSA9IHsKKysJMHhjYiwweGFhLDB4ZDAsMHhlMiwweGY2LDB4Y2UsMHhhMywweGY1 LDB4MGIsMHgzNywweGY5LDB4MzQsCisrCTB4ZDQsMHg2YSwweDliLDB4MTMsMHgwYiwweDlkLDB4 NTQsMHhmMCwweDdlLDB4MzQsMHhmMywweDZhLAorKwkweGY3LDB4OTMsMHhlOCwweDZmLDB4NzMs MHhjNiwweGQ3LDB4ZGIKKyt9OworKworK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc194dHMoKQorKwl7 CisrCWludCByZXQgPSAxOworKwlFVlBfQ0lQSEVSX0NUWCBjdHg7CisrCUVWUF9DSVBIRVJfQ1RY X2luaXQoJmN0eCk7CisrCisrCWlmIChmaXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9hZXNfMTI4 X3h0cygpLAorKwkJCQlYVFNfMTI4X2tleSwgWFRTXzEyOF9pLCBYVFNfMTI4X3B0LCBYVFNfMTI4 X2N0LAorKwkJCQlzaXplb2YoWFRTXzEyOF9wdCkpIDw9IDApCisrCQlyZXQgPSAwOworKworKwlp ZiAoZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfYWVzXzI1Nl94dHMoKSwKKysJCQkJWFRTXzI1 Nl9rZXksIFhUU18yNTZfaSwgWFRTXzI1Nl9wdCwgWFRTXzI1Nl9jdCwKKysJCQkJc2l6ZW9mKFhU U18yNTZfcHQpKSA8PSAwKQorKwkJcmV0ID0gMDsKKysKKysJRVZQX0NJUEhFUl9DVFhfY2xlYW51 cCgmY3R4KTsKKysJaWYgKHJldCA9PSAwKQorKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVT VF9BRVNfWFRTLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwlyZXR1cm4gcmV0OworKwl9Cisr CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHMu Yy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwcy5jCistLS0gb3BlbnNz bC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzLmMuZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAy Ljc5MzI5NDg4OSArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlw cy5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzkzMjk0ODg5ICswMTAwCitAQCAtMCwwICsxLDQ4OSBA QAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFBy b2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysg KgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3Ry aWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmlu ZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisr ICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2pl Y3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0 ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysg KiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAg ICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3 cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisr ICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4g dGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wg UFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK KysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5T U0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysK KysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5k Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgor KyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8bGltaXRzLmg+CisrI2luY2x1ZGUgPGRs ZmNuLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNs dWRlICJmaXBzX2xvY2wuaCIKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgorKworKyNpZm5kZWYgUEFUSF9NQVgKKysjZGVmaW5lIFBBVEhfTUFY IDEwMjQKKysjZW5kaWYKKysKKytzdGF0aWMgaW50IGZpcHNfc2VsZnRlc3RfZmFpbCA9IDA7Cisr c3RhdGljIGludCBmaXBzX21vZGUgPSAwOworK3N0YXRpYyBpbnQgZmlwc19zdGFydGVkID0gMDsK KysKKytzdGF0aWMgaW50IGZpcHNfaXNfb3duaW5nX3RocmVhZCh2b2lkKTsKKytzdGF0aWMgaW50 IGZpcHNfc2V0X293bmluZ190aHJlYWQodm9pZCk7Cisrc3RhdGljIGludCBmaXBzX2NsZWFyX293 bmluZ190aHJlYWQodm9pZCk7CisrCisrI2RlZmluZSBmaXBzX3dfbG9jaygpCUNSWVBUT193X2xv Y2soQ1JZUFRPX0xPQ0tfRklQUykKKysjZGVmaW5lIGZpcHNfd191bmxvY2soKQlDUllQVE9fd191 bmxvY2soQ1JZUFRPX0xPQ0tfRklQUykKKysjZGVmaW5lIGZpcHNfcl9sb2NrKCkJQ1JZUFRPX3Jf bG9jayhDUllQVE9fTE9DS19GSVBTKQorKyNkZWZpbmUgZmlwc19yX3VubG9jaygpCUNSWVBUT19y X3VubG9jayhDUllQVE9fTE9DS19GSVBTKQorKworK3N0YXRpYyB2b2lkIGZpcHNfc2V0X21vZGUo aW50IG9ub2ZmKQorKwl7CisrCWludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhy ZWFkKCk7CisrCisrCWlmIChmaXBzX3N0YXJ0ZWQpCisrCQl7CisrCQlpZiAoIW93bmluZ190aHJl YWQpIGZpcHNfd19sb2NrKCk7CisrCQlmaXBzX21vZGUgPSBvbm9mZjsKKysJCWlmICghb3duaW5n X3RocmVhZCkgZmlwc193X3VubG9jaygpOworKwkJfQorKwl9CisrCisraW50IEZJUFNfbW9kdWxl X21vZGUodm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJaW50IG93bmluZ190aHJlYWQgPSBm aXBzX2lzX293bmluZ190aHJlYWQoKTsKKysKKysJaWYgKGZpcHNfc3RhcnRlZCkKKysJCXsKKysJ CWlmICghb3duaW5nX3RocmVhZCkgZmlwc19yX2xvY2soKTsKKysJCXJldCA9IGZpcHNfbW9kZTsK KysJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc19yX3VubG9jaygpOworKwkJfQorKwlyZXR1cm4g cmV0OworKwl9CisrCisraW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQpCisrICAgIHsKKysg ICAgaW50IHJldCA9IDA7CisrICAgIGlmIChmaXBzX3N0YXJ0ZWQpCisrCXsKKysJaW50IG93bmlu Z190aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKKysKKysJaWYgKCFvd25pbmdfdGhy ZWFkKSBmaXBzX3JfbG9jaygpOworKwlyZXQgPSBmaXBzX3NlbGZ0ZXN0X2ZhaWw7CisrCWlmICgh b3duaW5nX3RocmVhZCkgZmlwc19yX3VubG9jaygpOworKwl9CisrICAgIHJldHVybiByZXQ7Cisr ICAgIH0KKysKKysvKiBTZWxmdGVzdCBmYWlsdXJlIGZhdGFsIGV4aXQgcm91dGluZS4gVGhpcyB3 aWxsIGJlIGNhbGxlZAorKyAqIGR1cmluZyAqYW55KiBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbi4g SXQgaGFzIHRoZSBtaW5pbXVtCisrICogb3ZlcmhlYWQgcG9zc2libGUgdG8gYXZvaWQgdG9vIGJp ZyBhIHBlcmZvcm1hbmNlIGhpdC4KKysgKi8KKysKKyt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2so dm9pZCkKKysgICAgeworKyAgICBpZiAoZmlwc19zZWxmdGVzdF9mYWlsKQorKwl7CisrCU9wZW5T U0xEaWUoX19GSUxFX18sX19MSU5FX18sICJGQVRBTCBGSVBTIFNFTEZURVNUIEZBSUxVUkUiKTsK KysJfQorKyAgICB9CisrCisrdm9pZCBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKHZvaWQpCisrICAg IHsKKysgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysgICAgfQorKworKy8qIHdlIGltcGxl bWVudCB3aGF0IGxpYmZpcHNjaGVjayBkb2VzIG91cnNlbHZlcyAqLworKworK3N0YXRpYyBpbnQK KytnZXRfbGlicmFyeV9wYXRoKGNvbnN0IGNoYXIgKmxpYm5hbWUsIGNvbnN0IGNoYXIgKnN5bWJv bG5hbWUsIGNoYXIgKnBhdGgsIHNpemVfdCBwYXRobGVuKQorK3sKKysJRGxfaW5mbyBpbmZvOwor Kwl2b2lkICpkbCwgKnN5bTsKKysJaW50IHJ2ID0gLTE7CisrCisrICAgICAgICBkbCA9IGRsb3Bl bihsaWJuYW1lLCBSVExEX0xBWlkpOworKyAgICAgICAgaWYgKGRsID09IE5VTEwpIHsKKysJICAg ICAgICByZXR1cm4gLTE7CisrICAgICAgICB9ICAgICAgIAorKworKwlzeW0gPSBkbHN5bShkbCwg c3ltYm9sbmFtZSk7CisrCisrCWlmIChzeW0gIT0gTlVMTCAmJiBkbGFkZHIoc3ltLCAmaW5mbykp IHsKKysJCXN0cm5jcHkocGF0aCwgaW5mby5kbGlfZm5hbWUsIHBhdGhsZW4tMSk7CisrCQlwYXRo W3BhdGhsZW4tMV0gPSAnXDAnOworKwkJcnYgPSAwOworKwl9CisrCisrCWRsY2xvc2UoZGwpOwkK KysJCisrCXJldHVybiBydjsKKyt9CisrCisrc3RhdGljIGNvbnN0IGNoYXIgY29udltdID0gIjAx MjM0NTY3ODlhYmNkZWYiOworKworK3N0YXRpYyBjaGFyICoKKytiaW4yaGV4KHZvaWQgKmJ1Ziwg c2l6ZV90IGxlbikKKyt7CisrCWNoYXIgKmhleCwgKnA7CisrCXVuc2lnbmVkIGNoYXIgKnNyYyA9 IGJ1ZjsKKysJCisrCWhleCA9IG1hbGxvYyhsZW4gKiAyICsgMSk7CisrCWlmIChoZXggPT0gTlVM TCkKKysJCXJldHVybiBOVUxMOworKworKwlwID0gaGV4OworKworKwl3aGlsZSAobGVuID4gMCkg eworKwkJdW5zaWduZWQgYzsKKysKKysJCWMgPSAqc3JjOworKwkJc3JjKys7CisrCisrCQkqcCA9 IGNvbnZbYyA+PiA0XTsKKysJCSsrcDsKKysJCSpwID0gY29udltjICYgMHgwZl07CisrCQkrK3A7 CisrCQktLWxlbjsKKysJfQorKwkqcCA9ICdcMCc7CisrCXJldHVybiBoZXg7CisrfQorKworKyNk ZWZpbmUgSE1BQ19QUkVGSVggIi4iIAorKyNkZWZpbmUgSE1BQ19TVUZGSVggIi5obWFjIiAKKysj ZGVmaW5lIFJFQURfQlVGRkVSX0xFTkdUSCAxNjM4NAorKworK3N0YXRpYyBjaGFyICoKKyttYWtl X2htYWNfcGF0aChjb25zdCBjaGFyICpvcmlncGF0aCkKKyt7CisrCWNoYXIgKnBhdGgsICpwOwor Kwljb25zdCBjaGFyICpmbjsKKysKKysJcGF0aCA9IG1hbGxvYyhzaXplb2YoSE1BQ19QUkVGSVgp ICsgc2l6ZW9mKEhNQUNfU1VGRklYKSArIHN0cmxlbihvcmlncGF0aCkpOworKwlpZihwYXRoID09 IE5VTEwpIHsKKysJCXJldHVybiBOVUxMOworKwl9CisrCisrCWZuID0gc3RycmNocihvcmlncGF0 aCwgJy8nKTsKKysJaWYgKGZuID09IE5VTEwpIHsKKysJCWZuID0gb3JpZ3BhdGg7CisrCX0gZWxz ZSB7CisrCQkrK2ZuOworKwl9CisrCisrCXN0cm5jcHkocGF0aCwgb3JpZ3BhdGgsIGZuLW9yaWdw YXRoKTsKKysJcCA9IHBhdGggKyAoZm4gLSBvcmlncGF0aCk7CisrCXAgPSBzdHBjcHkocCwgSE1B Q19QUkVGSVgpOworKwlwID0gc3RwY3B5KHAsIGZuKTsKKysJcCA9IHN0cGNweShwLCBITUFDX1NV RkZJWCk7CisrCisrCXJldHVybiBwYXRoOworK30KKysKKytzdGF0aWMgY29uc3QgY2hhciBobWFj a2V5W10gPSAib3Jib0RlSklUSVRlanNpcnBBRE9OaXZpcnBVa3ZhclAiOworKworK3N0YXRpYyBp bnQKKytjb21wdXRlX2ZpbGVfaG1hYyhjb25zdCBjaGFyICpwYXRoLCB2b2lkICoqYnVmLCBzaXpl X3QgKmhtYWNsZW4pCisreworKwlGSUxFICpmID0gTlVMTDsKKysJaW50IHJ2ID0gLTE7CisrCXVu c2lnbmVkIGNoYXIgcmJ1ZltSRUFEX0JVRkZFUl9MRU5HVEhdOworKwlzaXplX3QgbGVuOworKwl1 bnNpZ25lZCBpbnQgaGxlbjsKKysJSE1BQ19DVFggYzsKKysKKysJSE1BQ19DVFhfaW5pdCgmYyk7 CisrCisrCWYgPSBmb3BlbihwYXRoLCAiciIpOworKworKwlpZiAoZiA9PSBOVUxMKSB7CisrCQln b3RvIGVuZDsKKysJfQorKworKwlITUFDX0luaXQoJmMsIGhtYWNrZXksIHNpemVvZihobWFja2V5 KS0xLCBFVlBfc2hhMjU2KCkpOworKworKwl3aGlsZSAoKGxlbj1mcmVhZChyYnVmLCAxLCBzaXpl b2YocmJ1ZiksIGYpKSAhPSAwKSB7CisrCQlITUFDX1VwZGF0ZSgmYywgcmJ1ZiwgbGVuKTsKKysJ fQorKworKwlsZW4gPSBzaXplb2YocmJ1Zik7CisrCS8qIHJldXNlIHJidWYgZm9yIGhtYWMgKi8K KysJSE1BQ19GaW5hbCgmYywgcmJ1ZiwgJmhsZW4pOworKworKwkqYnVmID0gbWFsbG9jKGhsZW4p OworKwlpZiAoKmJ1ZiA9PSBOVUxMKSB7CisrCQlnb3RvIGVuZDsKKysJfQorKworKwkqaG1hY2xl biA9IGhsZW47CisrCisrCW1lbWNweSgqYnVmLCByYnVmLCBobGVuKTsKKysKKysJcnYgPSAwOwor K2VuZDoKKysJSE1BQ19DVFhfY2xlYW51cCgmYyk7CisrCisrCWlmIChmKQorKwkJZmNsb3NlKGYp OworKworKwlyZXR1cm4gcnY7CisrfQorKworK3N0YXRpYyBpbnQKKytGSVBTQ0hFQ0tfdmVyaWZ5 KGNvbnN0IGNoYXIgKmxpYm5hbWUsIGNvbnN0IGNoYXIgKnN5bWJvbG5hbWUpCisreworKwljaGFy IHBhdGhbUEFUSF9NQVgrMV07CisrCWludCBydjsKKysJRklMRSAqaGY7CisrCWNoYXIgKmhtYWNw YXRoLCAqcDsKKysJY2hhciAqaG1hYyA9IE5VTEw7CisrCXNpemVfdCBuOworKwkKKysJcnYgPSBn ZXRfbGlicmFyeV9wYXRoKGxpYm5hbWUsIHN5bWJvbG5hbWUsIHBhdGgsIHNpemVvZihwYXRoKSk7 CisrCisrCWlmIChydiA8IDApCisrCQlyZXR1cm4gMDsKKysKKysJaG1hY3BhdGggPSBtYWtlX2ht YWNfcGF0aChwYXRoKTsKKysJaWYgKGhtYWNwYXRoID09IE5VTEwpCisrCQlyZXR1cm4gMDsKKysK KysJaGYgPSBmb3BlbihobWFjcGF0aCwgInIiKTsKKysJaWYgKGhmID09IE5VTEwpIHsKKysJCWZy ZWUoaG1hY3BhdGgpOworKwkJcmV0dXJuIDA7CisrCX0KKysKKysJaWYgKGdldGxpbmUoJmhtYWMs ICZuLCBoZikgPiAwKSB7CisrCQl2b2lkICpidWY7CisrCQlzaXplX3QgaG1hY2xlbjsKKysJCWNo YXIgKmhleDsKKysKKysJCWlmICgocD1zdHJjaHIoaG1hYywgJ1xuJykpICE9IE5VTEwpCisrCQkJ KnAgPSAnXDAnOworKworKwkJaWYgKGNvbXB1dGVfZmlsZV9obWFjKHBhdGgsICZidWYsICZobWFj bGVuKSA8IDApIHsKKysJCQlydiA9IC00OworKwkJCWdvdG8gZW5kOworKwkJfQorKworKwkJaWYg KChoZXg9YmluMmhleChidWYsIGhtYWNsZW4pKSA9PSBOVUxMKSB7CisrCQkJZnJlZShidWYpOwor KwkJCXJ2ID0gLTU7CisrCQkJZ290byBlbmQ7CisrCQl9CisrCisrCQlpZiAoc3RyY21wKGhleCwg aG1hYykgIT0gMCkgeworKwkJCXJ2ID0gLTE7CisrCQl9CisrCQlmcmVlKGJ1Zik7CisrCQlmcmVl KGhleCk7CisrCX0KKysKKytlbmQ6CisrCWZyZWUoaG1hYyk7CisrCWZyZWUoaG1hY3BhdGgpOwor KwlmY2xvc2UoaGYpOworKworKwlpZiAocnYgPCAwKQorKwkJcmV0dXJuIDA7CisrCisrCS8qIGNo ZWNrIHN1Y2Nlc3NmdWwgKi8KKysJcmV0dXJuIDE7CQorK30KKysKKytpbnQgRklQU19tb2R1bGVf bW9kZV9zZXQoaW50IG9ub2ZmLCBjb25zdCBjaGFyICphdXRoKQorKyAgICB7CisrICAgIGludCBy ZXQgPSAwOworKworKyAgICBmaXBzX3dfbG9jaygpOworKyAgICBmaXBzX3N0YXJ0ZWQgPSAxOwor KyAgICBmaXBzX3NldF9vd25pbmdfdGhyZWFkKCk7CisrCisrICAgIGlmKG9ub2ZmKQorKwl7Cisr CisrCWZpcHNfc2VsZnRlc3RfZmFpbCA9IDA7CisrCisrCS8qIERvbid0IGdvIGludG8gRklQUyBt b2RlIHR3aWNlLCBqdXN0IHNvIHdlIGNhbiBkbyBhdXRvbWFnaWMKKysJICAgc2VlZGluZyAqLwor KwlpZihGSVBTX21vZHVsZV9tb2RlKCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9G SVBTX01PRFVMRV9NT0RFX1NFVCxGSVBTX1JfRklQU19NT0RFX0FMUkVBRFlfU0VUKTsKKysJICAg IGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrCSAgICByZXQgPSAwOworKwkgICAgZ290byBlbmQ7 CisrCSAgICB9CisrCisrI2lmZGVmIE9QRU5TU0xfSUEzMl9TU0UyCisrCXsKKysJZXh0ZXJuIHVu c2lnbmVkIGludCBPUEVOU1NMX2lhMzJjYXBfUFsyXTsKKysJaWYgKChPUEVOU1NMX2lhMzJjYXBf UFswXSAmICgxPDwyNXwxPDwyNikpICE9ICgxPDwyNXwxPDwyNikpCisrCSAgICB7CisrCSAgICBG SVBTZXJyKEZJUFNfRl9GSVBTX01PRFVMRV9NT0RFX1NFVCxGSVBTX1JfVU5TVVBQT1JURURfUExB VEZPUk0pOworKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysJICAgIHJldCA9IDA7Cisr CSAgICBnb3RvIGVuZDsKKysJICAgIH0KKysJT1BFTlNTTF9pYTMyY2FwX1BbMF0gfD0gKDE8PDI4 KTsJLyogc2V0ICJzaGFyZWQgY2FjaGUiCSovCisrCU9QRU5TU0xfaWEzMmNhcF9QWzFdICY9IH4o MTw8KDYwLTMyKSk7CS8qIGNsZWFyIEFWWAkJKi8KKysJfQorKyNlbmRpZgorKworKwlpZighRklQ U0NIRUNLX3ZlcmlmeSgibGliY3J5cHRvLnNvLiIgU0hMSUJfVkVSU0lPTl9OVU1CRVIsIkZJUFNf bW9kZV9zZXQiKSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9EVUxFX01P REVfU0VULEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSCk7CisrCSAgICBmaXBzX3Nl bGZ0ZXN0X2ZhaWwgPSAxOworKwkgICAgcmV0ID0gMDsKKysJICAgIGdvdG8gZW5kOworKwkgICAg fQorKworKwlpZighRklQU0NIRUNLX3ZlcmlmeSgibGlic3NsLnNvLiIgU0hMSUJfVkVSU0lPTl9O VU1CRVIsIlNTTF9DVFhfbmV3IikpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBT X01PRFVMRV9NT0RFX1NFVCxGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0gpOworKwkg ICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysJICAgIHJldCA9IDA7CisrCSAgICBnb3RvIGVu ZDsKKysJICAgIH0KKysKKysJaWYoRklQU19zZWxmdGVzdCgpKQorKwkgICAgZmlwc19zZXRfbW9k ZShvbm9mZik7CisrCWVsc2UKKysJICAgIHsKKysJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7 CisrCSAgICByZXQgPSAwOworKwkgICAgZ290byBlbmQ7CisrCSAgICB9CisrCXJldCA9IDE7Cisr CWdvdG8gZW5kOworKwl9CisrICAgIGZpcHNfc2V0X21vZGUoMCk7CisrICAgIGZpcHNfc2VsZnRl c3RfZmFpbCA9IDA7CisrICAgIHJldCA9IDE7CisrZW5kOgorKyAgICBmaXBzX2NsZWFyX293bmlu Z190aHJlYWQoKTsKKysgICAgZmlwc193X3VubG9jaygpOworKyAgICByZXR1cm4gcmV0OworKyAg ICB9CisrCisrc3RhdGljIENSWVBUT19USFJFQURJRCBmaXBzX3RocmVhZDsKKytzdGF0aWMgaW50 IGZpcHNfdGhyZWFkX3NldCA9IDA7CisrCisrc3RhdGljIGludCBmaXBzX2lzX293bmluZ190aHJl YWQodm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysKKysJaWYgKGZpcHNfc3RhcnRlZCkKKysJ CXsKKysJCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJaWYgKGZpcHNfdGhy ZWFkX3NldCkKKysJCQl7CisrCQkJQ1JZUFRPX1RIUkVBRElEIGN1cjsKKysJCQlDUllQVE9fVEhS RUFESURfY3VycmVudCgmY3VyKTsKKysJCQlpZiAoIUNSWVBUT19USFJFQURJRF9jbXAoJmN1ciwg JmZpcHNfdGhyZWFkKSkKKysJCQkJcmV0ID0gMTsKKysJCQl9CisrCQlDUllQVE9fcl91bmxvY2so Q1JZUFRPX0xPQ0tfRklQUzIpOworKwkJfQorKwlyZXR1cm4gcmV0OworKwl9CisrCisraW50IGZp cHNfc2V0X293bmluZ190aHJlYWQodm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysKKysJaWYg KGZpcHNfc3RhcnRlZCkKKysJCXsKKysJCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIp OworKwkJaWYgKCFmaXBzX3RocmVhZF9zZXQpCisrCQkJeworKwkJCUNSWVBUT19USFJFQURJRF9j dXJyZW50KCZmaXBzX3RocmVhZCk7CisrCQkJcmV0ID0gMTsKKysJCQlmaXBzX3RocmVhZF9zZXQg PSAxOworKwkJCX0KKysJCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrCQl9 CisrCXJldHVybiByZXQ7CisrCX0KKysKKytpbnQgZmlwc19jbGVhcl9vd25pbmdfdGhyZWFkKHZv aWQpCisrCXsKKysJaW50IHJldCA9IDA7CisrCisrCWlmIChmaXBzX3N0YXJ0ZWQpCisrCQl7Cisr CQlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKKysJCWlmIChmaXBzX3RocmVhZF9z ZXQpCisrCQkJeworKwkJCUNSWVBUT19USFJFQURJRCBjdXI7CisrCQkJQ1JZUFRPX1RIUkVBRElE X2N1cnJlbnQoJmN1cik7CisrCQkJaWYgKCFDUllQVE9fVEhSRUFESURfY21wKCZjdXIsICZmaXBz X3RocmVhZCkpCisrCQkJCWZpcHNfdGhyZWFkX3NldCA9IDA7CisrCQkJfQorKwkJQ1JZUFRPX3df dW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKKysJCX0KKysJcmV0dXJuIHJldDsKKysJfQorKwor KworKyNpZiAwCisrLyogVGhlIHB1cnBvc2Ugb2YgdGhpcyBpcyB0byBlbnN1cmUgdGhlIGVycm9y IGNvZGUgZXhpc3RzIGFuZCB0aGUgZnVuY3Rpb24KKysgKiBuYW1lIGlzIHRvIGtlZXAgdGhlIGVy cm9yIGNoZWNraW5nIHNjcmlwdCBxdWlldAorKyAqLworK3ZvaWQgaGFzaF9maW5hbCh2b2lkKQor Kwl7CisrCUZJUFNlcnIoRklQU19GX0hBU0hfRklOQUwsRklQU19SX05PTl9GSVBTX01FVEhPRCk7 CisrCX0KKysjZW5kaWYKKysKKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0 YTMvY3J5cHRvL2ZpcHMvZmlwc19jbWFjX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJl dGEzL2NyeXB0by9maXBzL2ZpcHNfY21hY19zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMS1i ZXRhMy9jcnlwdG8vZmlwcy9maXBzX2NtYWNfc2VsZnRlc3QuYy5maXBzCTIwMTItMDItMjkgMTA6 MzM6MDIuNzkzMjk0ODg5ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlw cy9maXBzX2NtYWNfc2VsZnRlc3QuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5MzI5NDg4OSArMDEw MAorQEAgLTAsMCArMSwxNjEgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykg MjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAq 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 KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5j bHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NtYWMuaD4KKysjaW5jbHVkZSAiZmlw c19sb2NsLmgiCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworK3R5cGVkZWYgc3RydWN0IHsKKysJ aW50IG5pZDsKKysJY29uc3QgdW5zaWduZWQgY2hhciBrZXlbRVZQX01BWF9LRVlfTEVOR1RIXTsg c2l6ZV90IGtleXNpemU7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgbXNnWzY0XTsgc2l6ZV90IG1z Z3NpemU7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgbWFjWzMyXTsgc2l6ZV90IG1hY3NpemU7Cisr fSBDTUFDX0tBVDsKKysKKysvKiBmcm9tIGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9u cy9uaXN0cHVicy84MDAtMzhCL1NQXzgwMC0zOEIucGRmICovCisrc3RhdGljIGNvbnN0IENNQUNf S0FUIHZlY3RvcltdID0geworKyAgICB7CU5JRF9hZXNfMTI4X2NiYywJLyogQ291bnQgPSAzMiBm cm9tIENNQUNHZW5BRVMxMjgudHh0ICovCisrCXsgMHg3NywweGE3LDB4N2YsMHhhZiwgMHgyOSww eDBjLDB4MWYsMHhhMywKKysJICAweDBjLDB4NjgsMHgzZCwweGYxLCAweDZiLDB4YTcsMHhhNyww eDdiLCB9LCAxMjgsCisrCXsgMHgwMiwweDA2LDB4ODMsMHhlMSwgMHhmMCwweDM5LDB4MmYsMHg0 YywKKysJICAweGFjLDB4NTQsMHgzMSwweDhiLCAweDYwLDB4MjksMHgyNSwweDllLAorKwkgIDB4 OWMsMHg1NSwweDNkLDB4YmMsIDB4NGIsMHg2YSwweGQ5LDB4OTgsCisrCSAgMHhlNiwweDRkLDB4 NTgsMHhlNCwgMHhlNywweGRjLDB4MmUsMHgxMywgfSwgMjU2LAorKwl7IDB4ZmIsMHhmZSwweGE0 LDB4MWIsIH0sIDMyCisrICAgIH0sCisrICAgIHsJTklEX2Flc18xOTJfY2JjLAkvKiBDb3VudCA9 IDIzIGZyb20gQ01BQ0dlbkFFUzE5Mi50eHQgKi8KKysJeyAweDdiLDB4MzIsMHgzOSwweDEzLCAw eDY5LDB4YWEsMHg0YywweGE5LAorKwkgIDB4NzUsMHg1OCwweDA5LDB4NWIsIDB4ZTMsMHhjMyww eGVjLDB4ODYsCisrCSAgMHgyYiwweGQwLDB4NTcsMHhjZSwgMHhmMSwweGUzLDB4MmQsMHg2Miwg fSwgMTkyLAorKwl7IDB4MCB9LCAwLAorKwl7IDB4ZTQsMHhkOSwweDM0LDB4MGIsIDB4MDMsMHhl NiwweDdkLDB4ZWYsCisrCSAgMHhkNCwweDk2LDB4OWMsMHhjMSwgMHhlZCwweDM3LDB4MzUsMHhl NiwgfSwgMTI4LAorKyAgICB9LAorKyAgICB7CU5JRF9hZXNfMjU2X2NiYywJLyogQ291bnQgPSAz MyBmcm9tIENNQUNHZW5BRVMyNTYudHh0ICovCisrCXsgMHgwYiwweDEyLDB4MmEsMHhjOCwgMHhm MywweDRlLDB4ZDEsMHhmZSwKKysJICAweDA4LDB4MmEsMHgzNiwweDI1LCAweGQxLDB4NTcsMHg1 NiwweDE0LAorKwkgIDB4NTQsMHgxNiwweDdhLDB4YzEsIDB4NDUsMHhhMSwweDBiLDB4YmYsCisr CSAgMHg3NywweGM2LDB4YTcsMHgwNSwgMHg5NiwweGQ1LDB4NzQsMHhmMSwgfSwgMjU2LAorKwl7 IDB4NDksMHg4YiwweDUzLDB4ZmQsIDB4ZWMsMHg4NywweGVkLDB4Y2IsCisrCSAgMHhmMCwweDcw LDB4OTcsMHhkYywgMHhjZCwweGU5LDB4M2EsMHgwOCwKKysJICAweDRiLDB4YWQsMHg3NSwweDAx LCAweGEyLDB4MjQsMHhlMywweDg4LAorKwkgIDB4ZGYsMHgzNCwweDljLDB4ZTEsIDB4ODksMHg1 OSwweGZlLDB4ODQsCisrCSAgMHg4NSwweGY4LDB4YWQsMHgxNSwgMHgzNywweGYwLDB4ZDgsMHg5 NiwKKysJICAweGVhLDB4NzMsMHhiZSwweGRjLCAweDcyLDB4MTQsMHg3MSwweDNmLCB9LCAzODQs CisrCXsgMHhmNiwweDJjLDB4NDYsMHgzMiwgMHg5YiwgfSwgNDAsCisrICAgIH0sCisrICAgIHsJ TklEX2Rlc19lZGUzX2NiYywJLyogQ291bnQgPSA0MSBmcm9tIENNQUNHZW5UREVTMy5yZXEgKi8K KysJeyAweDg5LDB4YmMsMHhkOSwweDUyLCAweGE4LDB4YzgsMHhhYiwweDM3LAorKwkgIDB4MWEs MHhmNCwweDhhLDB4YzcsIDB4ZDAsMHg3MCwweDg1LDB4ZDUsCisrCSAgMHhlZiwweGY3LDB4MDIs MHhlNiwgMHhkNiwweDJjLDB4ZGMsMHgyMywgfSwgMTkyLAorKwl7IDB4ZmEsMHg2MiwweDBjLDB4 MWIsIDB4YmUsMHg5NywweDMxLDB4OWUsCisrCSAgMHg5YSwweDBjLDB4ZjAsMHg0OSwgMHgyMSww eDIxLDB4ZjcsMHhhMiwKKysJICAweDBlLDB4YjAsMHg4YSwweDZhLCAweDcwLDB4OWQsMHhjYiww eGQwLAorKwkgIDB4MGEsMHhhZiwweDM4LDB4ZTQsIDB4ZjksMHg5ZSwweDc1LDB4NGUsIH0sIDI1 NiwKKysJeyAweDhmLDB4NDksMHhhMSwweGI3LCAweGQ2LDB4YWEsMHgyMiwweDU4LCB9LCA2NCwK KysgICAgfSwKKyt9OworKworK2ludCBGSVBTX3NlbGZ0ZXN0X2NtYWMoKQorKwl7CisrCXNpemVf dCBuLCBvdXRsZW47CisrCXVuc2lnbmVkIGNoYXIgICAgb3V0WzMyXTsKKysJY29uc3QgRVZQX0NJ UEhFUiAqY2lwaGVyOworKwlDTUFDX0NUWCAqY3R4ID0gQ01BQ19DVFhfbmV3KCk7CisrCWNvbnN0 IENNQUNfS0FUICp0OworKwlpbnQgcnYgPSAxOworKworKwlmb3Iobj0wLHQ9dmVjdG9yOyBuPHNp emVvZih2ZWN0b3IpL3NpemVvZih2ZWN0b3JbMF0pOyBuKyssdCsrKQorKwkJeworKwkJY2lwaGVy ID0gRklQU19nZXRfY2lwaGVyYnluaWQodC0+bmlkKTsKKysJCWlmICghY2lwaGVyKQorKwkJCXsK KysJCQlydiA9IC0xOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysJCWlmICghQ01BQ19Jbml0KGN0 eCwgdC0+a2V5LCB0LT5rZXlzaXplLzgsIGNpcGhlciwgMCkpCisrCQkJeworKwkJCXJ2ID0gLTE7 CisrCQkJZ290byBlcnI7CisrCQkJfQorKwkJaWYgKCFDTUFDX1VwZGF0ZShjdHgsIHQtPm1zZywg dC0+bXNnc2l6ZS84KSkKKysJCQl7CisrCQkJcnYgPSAtMTsKKysJCQlnb3RvIGVycjsKKysJCQl9 CisrCQkJCisrCQlpZiAoIUNNQUNfRmluYWwoY3R4LCBvdXQsICZvdXRsZW4pKQorKwkJCXsKKysJ CQlydiA9IC0xOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysJCUNNQUNfQ1RYX2NsZWFudXAoY3R4 KTsKKysKKysJCWlmKG91dGxlbiA8IHQtPm1hY3NpemUvOCB8fCBtZW1jbXAob3V0LHQtPm1hYyx0 LT5tYWNzaXplLzgpKQorKwkJCXsKKysJCSAgICAJcnYgPSAwOworKwkJICAgIAl9CisrCQl9Cisr CisrCWVycjoKKysJQ01BQ19DVFhfZnJlZShjdHgpOworKworKwlpZiAocnYgPT0gLTEpCisrCQl7 CisrCQlydiA9IDA7CisrCQl9CisrCWlmICghcnYpCisrCQkgICBGSVBTZXJyKEZJUFNfRl9GSVBT X1NFTEZURVNUX0NNQUMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCisrCXJldHVybiBydjsK KysJfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9m aXBzX2Rlc19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9m aXBzX2Rlc19zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9m aXBzX2Rlc19zZWxmdGVzdC5jLmZpcHMJMjAxMi0wMi0yOSAxMDozMzowMi43OTMyOTQ4ODkgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0 LmMJMjAxMi0wMi0yOSAxMDozMzowMi43OTMyOTQ4ODkgKzAxMDAKK0BAIC0wLDAgKzEsMTQ3IEBA CisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJv amVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAq CisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJp YnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysg KgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVj dCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAq ICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAg IG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdy aXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysg KiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0 aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9y Zy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQ Uk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNT TCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr Cisrc3RhdGljIGNvbnN0IHN0cnVjdAorKyAgICB7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg a2V5WzE2XTsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbOF07CisrICAgIGNv bnN0IHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs4XTsKKysgICAgfSB0ZXN0czJbXT0KKysJewor Kwl7CisrCXsgMHg3YywweDRmLDB4NmUsMHhmNywweGEyLDB4MDQsMHgxNiwweGVjLAorKwkgIDB4 MGIsMHg2YiwweDdjLDB4OWUsMHg1ZSwweDE5LDB4YTcsMHhjNCB9LAorKwl7IDB4MDYsMHhhNyww eGQ4LDB4NzksMHhhYSwweGNlLDB4NjksMHhlZiB9LAorKwl7IDB4NGMsMHgxMSwweDE3LDB4NTUs MHhiZiwweGM0LDB4NGUsMHhmZCB9CisrCX0sCisrCXsKKysJeyAweDVkLDB4OWUsMHgwMSwweGQz LDB4MjUsMHhjNywweDNlLDB4MzQsCisrCSAgMHgwMSwweDE2LDB4N2MsMHg4NSwweDIzLDB4ZGYs MHhlMCwweDY4IH0sCisrCXsgMHg5YywweDUwLDB4MDksMHgwZiwweDVlLDB4N2QsMHg2OSwweDdl IH0sCisrCXsgMHhkMiwweDBiLDB4MTgsMHhkZiwweGQ5LDB4MGQsMHg5ZSwweGZmIH0sCisrCX0K KysJfTsKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0CisrICAgIHsKKysgICAgY29uc3QgdW5zaWdu ZWQgY2hhciBrZXlbMjRdOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsK KysgICAgY29uc3QgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOworKyAgICB9IHRlc3RzM1td PQorKwl7CisrCXsKKysJeyAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs CisrCSAgMHhGRSwweERDLDB4QkEsMHg5OCwweDc2LDB4NTQsMHgzMiwweDEwLAorKwkgIDB4MTIs MHgzNCwweDU2LDB4NzgsMHg5YSwweGJjLDB4ZGUsMHhmMCB9LAorKwl7IDB4OGYsMHg4ZiwweGJm LDB4OWIsMHg1ZCwweDQ4LDB4YjQsMHgxYyB9LAorKwl7IDB4NTksMHg4YywweGU1LDB4ZDMsMHg2 YywweGEyLDB4ZWEsMHgxYiB9LAorKwl9LAorKwl7CisrCXsgMHhEQywweEJBLDB4OTgsMHg3Niww eDU0LDB4MzIsMHgxMCwweEZFLAorKwkgIDB4MDEsMHgyMywweDQ1LDB4NjcsMHg4OSwweEFCLDB4 Q0QsMHhFRiwKKysJICAweEVELDB4MzksMHhEOSwweDUwLDB4RkEsMHg3NCwweEJDLDB4QzQgfSwK KysJeyAweDAxLDB4MjMsMHg0NSwweDY3LDB4ODksMHhBQiwweENELDB4RUYgfSwKKysJeyAweDEx LDB4MjUsMHhiMCwweDM1LDB4YmUsMHhhMCwweDgyLDB4ODYgfSwKKysJfSwKKysJfTsKKysKKysK KytzdGF0aWMgaW50IGNvcnJ1cHRfZGVzOworKworK3ZvaWQgRklQU19jb3JydXB0X2RlcygpCisr ICAgIHsKKysgICAgY29ycnVwdF9kZXMgPSAxOworKyAgICB9CisrCisraW50IEZJUFNfc2VsZnRl c3RfZGVzKCkKKysgICAgeworKyAgICBpbnQgbiwgcmV0ID0gMDsKKysgICAgRVZQX0NJUEhFUl9D VFggY3R4OworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKyAgICAvKiBFbmNyeXB0 L2RlY3J5cHQgd2l0aCAyLWtleSAzREVTIGFuZCBjb21wYXJlIHRvIGtub3duIGFuc3dlcnMgKi8K KysgICAgZm9yKG49MCA7IG4gPCAyIDsgKytuKQorKwl7CisrCXVuc2lnbmVkIGNoYXIgcGxhaW50 ZXh0WzhdOworKworKwltZW1jcHkocGxhaW50ZXh0LCB0ZXN0czJbbl0ucGxhaW50ZXh0LCBzaXpl b2YocGxhaW50ZXh0KSk7CisrCWlmIChjb3JydXB0X2RlcykKKysJCXBsYWludGV4dFswXSsrOwor KwlpZiAoIWZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Rlc19lZGVfZWNiKCksCisrCQkJCXRl c3RzMltuXS5rZXksIE5VTEwsCisrCQkJCXBsYWludGV4dCwgdGVzdHMyW25dLmNpcGhlcnRleHQs IDgpKQorKwkJZ290byBlcnI7CisrCX0KKysKKysgICAgLyogRW5jcnlwdC9kZWNyeXB0IHdpdGgg M0RFUyBhbmQgY29tcGFyZSB0byBrbm93biBhbnN3ZXJzICovCisrICAgIGZvcihuPTAgOyBuIDwg MiA7ICsrbikKKysJeworKwlpZiAoIWZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Rlc19lZGUz X2VjYigpLAorKwkJCQl0ZXN0czNbbl0ua2V5LCBOVUxMLAorKwkJCQl0ZXN0czNbbl0ucGxhaW50 ZXh0LCB0ZXN0czNbbl0uY2lwaGVydGV4dCwgOCkpCisrCQlnb3RvIGVycjsKKysJfQorKyAgICBy ZXQgPSAxOworKyAgICBlcnI6CisrICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Cisr ICAgIGlmIChyZXQgPT0gMCkKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfREVT LEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKworKyAgICByZXR1cm4gcmV0OworKyAgICB9Cisr I2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfZHJi Z19jdHIuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2N0 ci5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfY3RyLmMu ZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5MzI5NDg4OSArMDEwMAorKysrIG9wZW5zc2wtMS4w LjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5jCTIwMTItMDItMjkgMTA6MzM6MDIu NzkzMjk0ODg5ICswMTAwCitAQCAtMCwwICsxLDQzNiBAQAorKy8qIGZpcHMvcmFuZC9maXBzX2Ry YmdfY3RyLmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9w ZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwg cmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICog YXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysg KgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBv ciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBU aGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90 IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNp bmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVu U1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAg cGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmli dXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwor KyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAq IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElT JycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFS RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgor KyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN QUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBT VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB UkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH RS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorKyAqLworKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5j bHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNs dWRlICJmaXBzX3JhbmRfbGNsLmgiCisrCisrc3RhdGljIHZvaWQgaW5jXzEyOChEUkJHX0NUUl9D VFggKmNjdHgpCisrCXsKKysJaW50IGk7CisrCXVuc2lnbmVkIGNoYXIgYzsKKysJdW5zaWduZWQg Y2hhciAqcCA9IGNjdHgtPlYgKyAxNTsKKysJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisrCQl7 CisrCQljID0gKnA7CisrCQljKys7CisrCQkqcCA9IGM7CisrCQlpZiAoYykKKysJCQlyZXR1cm47 CisrCQlwLS07CisrCQl9CisrCX0KKysKKytzdGF0aWMgdm9pZCBjdHJfWE9SKERSQkdfQ1RSX0NU WCAqY2N0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmxlbikKKysJeworKwlz aXplX3QgaSwgbjsKKysJLyogQW55IHplcm8gcGFkZGluZyB3aWxsIGhhdmUgbm8gZWZmZWN0IG9u IHRoZSByZXN1bHQgYXMgd2UKKysJICogYXJlIFhPUmluZy4gU28ganVzdCBwcm9jZXNzIGhvd2V2 ZXIgbXVjaCBpbnB1dCB3ZSBoYXZlLgorKwkgKi8KKysKKysJaWYgKCFpbiB8fCAhaW5sZW4pCisr CQlyZXR1cm47CisrCisrCWlmIChpbmxlbiA8IGNjdHgtPmtleWxlbikKKysJCW4gPSBpbmxlbjsK KysJZWxzZQorKwkJbiA9IGNjdHgtPmtleWxlbjsKKysKKysJZm9yIChpID0gMDsgaSA8IG47IGkr KykKKysJCWNjdHgtPktbaV0gXj0gaW5baV07CisrCWlmIChpbmxlbiA8PSBjY3R4LT5rZXlsZW4p CisrCQlyZXR1cm47CisrCisrCW4gPSBpbmxlbiAtIGNjdHgtPmtleWxlbjsKKysJLyogU2hvdWxk IG5ldmVyIGhhcHBlbiAqLworKwlpZiAobiA+IDE2KQorKwkJbiA9IDE2OworKwlmb3IgKGkgPSAw OyBpIDwgMTY7IGkrKykKKysJCWNjdHgtPlZbaV0gXj0gaW5baSArIGNjdHgtPmtleWxlbl07Cisr CX0KKysKKysvKiBQcm9jZXNzIGEgY29tcGxldGUgYmxvY2sgdXNpbmcgQkNDIGFsZ29yaXRobSBv ZiBTUFAgODAwLTkwIDEwLjQuMyAqLworKworK3N0YXRpYyB2b2lkIGN0cl9CQ0NfYmxvY2soRFJC R19DVFJfQ1RYICpjY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCisrCQkJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmluKQorKwl7CisrCWludCBpOworKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKysJ CW91dFtpXSBePSBpbltpXTsKKysJQUVTX2VuY3J5cHQob3V0LCBvdXQsICZjY3R4LT5kZl9rcyk7 CisrI2lmIDAKKytmcHJpbnRmKHN0ZGVyciwgIkJDQyBpbitvdXRcbiIpOworK0JJT19kdW1wX2Zw KHN0ZGVyciwgaW4sIDE2KTsKKytCSU9fZHVtcF9mcChzdGRlcnIsIG91dCwgMTYpOworKyNlbmRp ZgorKwl9CisrCisrLyogSGFuZGxlIHNldmVyYWwgQkNDIG9wZXJhdGlvbnMgZm9yIGFzIG11Y2gg ZGF0YSBhcyB3ZSBuZWVkIGZvciBLIGFuZCBYICovCisrc3RhdGljIHZvaWQgY3RyX0JDQ19ibG9j a3MoRFJCR19DVFJfQ1RYICpjY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbikKKysJeworKwlj dHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktYLCBpbik7CisrCWN0cl9CQ0NfYmxvY2soY2N0eCwg Y2N0eC0+S1ggKyAxNiwgaW4pOworKwlpZiAoY2N0eC0+a2V5bGVuICE9IDE2KQorKwkJY3RyX0JD Q19ibG9jayhjY3R4LCBjY3R4LT5LWCArIDMyLCBpbik7CisrCX0KKysvKiBJbml0aWFsaXNlIEJD QyBibG9ja3M6IHRoZXNlIGhhdmUgdGhlIHZhbHVlIDAsMSwyIGluIGxlZnRtb3N0IHBvc2l0aW9u czoKKysgKiBzZWUgMTAuNC4yIHN0YWdlIDcuCisrICovCisrc3RhdGljIHZvaWQgY3RyX0JDQ19p bml0KERSQkdfQ1RSX0NUWCAqY2N0eCkKKysJeworKwltZW1zZXQoY2N0eC0+S1gsIDAsIDQ4KTsK KysJbWVtc2V0KGNjdHgtPmJsdG1wLCAwLCAxNik7CisrCWN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0 eC0+S1gsIGNjdHgtPmJsdG1wKTsKKysJY2N0eC0+Ymx0bXBbM10gPSAxOworKwljdHJfQkNDX2Js b2NrKGNjdHgsIGNjdHgtPktYICsgMTYsIGNjdHgtPmJsdG1wKTsKKysJaWYgKGNjdHgtPmtleWxl biAhPSAxNikKKysJCXsKKysJCWNjdHgtPmJsdG1wWzNdID0gMjsKKysJCWN0cl9CQ0NfYmxvY2so Y2N0eCwgY2N0eC0+S1ggKyAzMiwgY2N0eC0+Ymx0bXApOworKwkJfQorKwl9CisrCisrLyogUHJv Y2VzcyBzZXZlcmFsIGJsb2NrcyBpbnRvIEJDQyBhbGdvcml0aG0sIHNvbWUgcG9zc2libHkgcGFy dGlhbCAqLworK3N0YXRpYyB2b2lkIGN0cl9CQ0NfdXBkYXRlKERSQkdfQ1RSX0NUWCAqY2N0eCwK KysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmxlbikKKysJeworKwlpZiAo IWluIHx8ICFpbmxlbikKKysJCXJldHVybjsKKysJLyogSWYgd2UgaGF2ZSBwYXJ0aWFsIGJsb2Nr IGhhbmRsZSBpdCBmaXJzdCAqLworKwlpZiAoY2N0eC0+Ymx0bXBfcG9zKQorKwkJeworKwkJc2l6 ZV90IGxlZnQgPSAxNiAtIGNjdHgtPmJsdG1wX3BvczsKKysJCS8qIElmIHdlIG5vdyBoYXZlIGEg Y29tcGxldGUgYmxvY2sgcHJvY2VzcyBpdCAqLworKwkJaWYgKGlubGVuID49IGxlZnQpCisrCQkJ eworKwkJCW1lbWNweShjY3R4LT5ibHRtcCArIGNjdHgtPmJsdG1wX3BvcywgaW4sIGxlZnQpOwor KwkJCWN0cl9CQ0NfYmxvY2tzKGNjdHgsIGNjdHgtPmJsdG1wKTsKKysJCQljY3R4LT5ibHRtcF9w b3MgPSAwOworKwkJCWlubGVuIC09IGxlZnQ7CisrCQkJaW4gKz0gbGVmdDsKKysJCQl9CisrCQl9 CisrCS8qIFByb2Nlc3MgemVybyBvciBtb3JlIGNvbXBsZXRlIGJsb2NrcyAqLworKwl3aGlsZSAo aW5sZW4gPj0gMTYpCisrCQl7CisrCQljdHJfQkNDX2Jsb2NrcyhjY3R4LCBpbik7CisrCQlpbiAr PSAxNjsKKysJCWlubGVuIC09IDE2OworKwkJfQorKwkvKiBDb3B5IGFueSByZW1haW5pbmcgcGFy dGlhbCBibG9jayB0byB0aGUgdGVtcG9yYXJ5IGJ1ZmZlciAqLworKwlpZiAoaW5sZW4gPiAwKQor KwkJeworKwkJbWVtY3B5KGNjdHgtPmJsdG1wICsgY2N0eC0+Ymx0bXBfcG9zLCBpbiwgaW5sZW4p OworKwkJY2N0eC0+Ymx0bXBfcG9zICs9IGlubGVuOworKwkJfQorKwl9CisrCisrc3RhdGljIHZv aWQgY3RyX0JDQ19maW5hbChEUkJHX0NUUl9DVFggKmNjdHgpCisrCXsKKysJaWYgKGNjdHgtPmJs dG1wX3BvcykKKysJCXsKKysJCW1lbXNldChjY3R4LT5ibHRtcCArIGNjdHgtPmJsdG1wX3Bvcywg MCwgMTYgLSBjY3R4LT5ibHRtcF9wb3MpOworKwkJY3RyX0JDQ19ibG9ja3MoY2N0eCwgY2N0eC0+ Ymx0bXApOworKwkJfQorKwl9CisrCisrc3RhdGljIHZvaWQgY3RyX2RmKERSQkdfQ1RSX0NUWCAq Y2N0eCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFsZW4sCisrCQkJ Y29uc3QgdW5zaWduZWQgY2hhciAqaW4yLCBzaXplX3QgaW4ybGVuLAorKwkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmluMywgc2l6ZV90IGluM2xlbikKKysJeworKwlzaXplX3QgaW5sZW47CisrCXVu c2lnbmVkIGNoYXIgKnAgPSBjY3R4LT5ibHRtcDsKKysJc3RhdGljIHVuc2lnbmVkIGNoYXIgYzgw ID0gMHg4MDsKKysKKysJY3RyX0JDQ19pbml0KGNjdHgpOworKwlpZiAoIWluMSkKKysJCWluMWxl biA9IDA7CisrCWlmICghaW4yKQorKwkJaW4ybGVuID0gMDsKKysJaWYgKCFpbjMpCisrCQlpbjNs ZW4gPSAwOworKwlpbmxlbiA9IGluMWxlbiArIGluMmxlbiArIGluM2xlbjsKKysJLyogSW5pdGlh bGlzZSBMfHxOIGluIHRlbXBvcmFyeSBibG9jayAqLworKwkqcCsrID0gKGlubGVuID4+IDI0KSAm IDB4ZmY7CisrCSpwKysgPSAoaW5sZW4gPj4gMTYpICYgMHhmZjsKKysJKnArKyA9IChpbmxlbiA+ PiA4KSAmIDB4ZmY7CisrCSpwKysgPSBpbmxlbiAmIDB4ZmY7CisrCS8qIE5CIGtleWxlbiBpcyBh dCBtb3N0IDMyIGJ5dGVzICovCisrCSpwKysgPSAwOworKwkqcCsrID0gMDsKKysJKnArKyA9IDA7 CisrCSpwID0gKHVuc2lnbmVkIGNoYXIpKChjY3R4LT5rZXlsZW4gKyAxNikgJiAweGZmKTsKKysJ Y2N0eC0+Ymx0bXBfcG9zID0gODsKKysJY3RyX0JDQ191cGRhdGUoY2N0eCwgaW4xLCBpbjFsZW4p OworKwljdHJfQkNDX3VwZGF0ZShjY3R4LCBpbjIsIGluMmxlbik7CisrCWN0cl9CQ0NfdXBkYXRl KGNjdHgsIGluMywgaW4zbGVuKTsKKysJY3RyX0JDQ191cGRhdGUoY2N0eCwgJmM4MCwgMSk7Cisr CWN0cl9CQ0NfZmluYWwoY2N0eCk7CisrCS8qIFNldCB1cCBrZXkgSyAqLworKwlBRVNfc2V0X2Vu Y3J5cHRfa2V5KGNjdHgtPktYLCBjY3R4LT5rZXlsZW4gKiA4LCAmY2N0eC0+ZGZfa3hrcyk7Cisr CS8qIFggZm9sbG93cyBrZXkgSyAqLworKwlBRVNfZW5jcnlwdChjY3R4LT5LWCArIGNjdHgtPmtl eWxlbiwgY2N0eC0+S1gsICZjY3R4LT5kZl9reGtzKTsKKysJQUVTX2VuY3J5cHQoY2N0eC0+S1gs IGNjdHgtPktYICsgMTYsICZjY3R4LT5kZl9reGtzKTsKKysJaWYgKGNjdHgtPmtleWxlbiAhPSAx NikKKysJCUFFU19lbmNyeXB0KGNjdHgtPktYICsgMTYsIGNjdHgtPktYICsgMzIsICZjY3R4LT5k Zl9reGtzKTsKKysjaWYgMAorK2ZwcmludGYoc3RkZXJyLCAiT3V0cHV0IG9mIGN0cl9kZjpcbiIp OworK0JJT19kdW1wX2ZwKHN0ZGVyciwgY2N0eC0+S1gsIGNjdHgtPmtleWxlbiArIDE2KTsKKysj ZW5kaWYKKysJfQorKworKy8qIE5CIHRoZSBuby1kZiAgVXBkYXRlIGluIFNQODAwLTkwIHNwZWNp ZmllcyBhIGNvbnN0YW50IGlucHV0IGxlbmd0aAorKyAqIG9mIHNlZWRsZW4sIGhvd2V2ZXIgb3Ro ZXIgdXNlcyBvZiB0aGlzIGFsZ29yaXRobSBwYWQgdGhlIGlucHV0IHdpdGgKKysgKiB6ZXJvZXMg aWYgbmVjZXNzYXJ5IGFuZCBoYXZlIHVwIHRvIHR3byBwYXJhbWV0ZXJzIFhPUmVkIHRvZ2V0aGVy LAorKyAqIGhhbmRsZSBib3RoIGNhc2VzIGluIHRoaXMgZnVuY3Rpb24gaW5zdGVhZC4KKysgKi8K KysKKytzdGF0aWMgdm9pZCBjdHJfVXBkYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJY29uc3QgdW5z aWduZWQgY2hhciAqaW4xLCBzaXplX3QgaW4xbGVuLAorKwkJY29uc3QgdW5zaWduZWQgY2hhciAq aW4yLCBzaXplX3QgaW4ybGVuLAorKwkJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVf dCBub25jZWxlbikKKysJeworKwlEUkJHX0NUUl9DVFggKmNjdHggPSAmZGN0eC0+ZC5jdHI7Cisr CS8qIGtzIGlzIGFscmVhZHkgc2V0dXAgZm9yIGNvcnJlY3Qga2V5ICovCisrCWluY18xMjgoY2N0 eCk7CisrCUFFU19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPkssICZjY3R4LT5rcyk7CisrCS8qIElm IGtleWxlbiBsb25nZXIgdGhhbiAxMjggYml0cyBuZWVkIGV4dHJhIGVuY3J5cHQgKi8KKysJaWYg KGNjdHgtPmtleWxlbiAhPSAxNikKKysJCXsKKysJCWluY18xMjgoY2N0eCk7CisrCQlBRVNfZW5j cnlwdChjY3R4LT5WLCBjY3R4LT5LICsgMTYsICZjY3R4LT5rcyk7CisrCQl9CisrCWluY18xMjgo Y2N0eCk7CisrCUFFU19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPlYsICZjY3R4LT5rcyk7CisrCS8q IElmIDE5MiBiaXQga2V5IHBhcnQgb2YgViBpcyBvbiBlbmQgb2YgSyAqLworKwlpZiAoY2N0eC0+ a2V5bGVuID09IDI0KQorKwkJeworKwkJbWVtY3B5KGNjdHgtPlYgKyA4LCBjY3R4LT5WLCA4KTsK KysJCW1lbWNweShjY3R4LT5WLCBjY3R4LT5LICsgMjQsIDgpOworKwkJfQorKworKwlpZiAoZGN0 eC0+eGZsYWdzICYgRFJCR19GTEFHX0NUUl9VU0VfREYpCisrCQl7CisrCQkvKiBJZiBubyBpbnB1 dCByZXVzZSBleGlzdGluZyBkZXJpdmVkIHZhbHVlICovCisrCQlpZiAoaW4xIHx8IG5vbmNlIHx8 IGluMikKKysJCQljdHJfZGYoY2N0eCwgaW4xLCBpbjFsZW4sIG5vbmNlLCBub25jZWxlbiwgaW4y LCBpbjJsZW4pOworKwkJLyogSWYgdGhpcyBhIHJldXNlIGlucHV0IGluMWxlbiAhPSAwICovCisr CQlpZiAoaW4xbGVuKQorKwkJCWN0cl9YT1IoY2N0eCwgY2N0eC0+S1gsIGRjdHgtPnNlZWRsZW4p OworKwkJfQorKwllbHNlCisrCQl7CisrCQljdHJfWE9SKGNjdHgsIGluMSwgaW4xbGVuKTsKKysJ CWN0cl9YT1IoY2N0eCwgaW4yLCBpbjJsZW4pOworKwkJfQorKworKwlBRVNfc2V0X2VuY3J5cHRf a2V5KGNjdHgtPkssIGRjdHgtPnN0cmVuZ3RoLCAmY2N0eC0+a3MpOworKyNpZiAwCisrZnByaW50 ZihzdGRlcnIsICJLK1YgYWZ0ZXIgdXBkYXRlIGlzOlxuIik7CisrQklPX2R1bXBfZnAoc3RkZXJy LCBjY3R4LT5LLCBjY3R4LT5rZXlsZW4pOworK0JJT19kdW1wX2ZwKHN0ZGVyciwgY2N0eC0+Viwg MTYpOworKyNlbmRpZgorKwl9CisrCisrc3RhdGljIGludCBkcmJnX2N0cl9pbnN0YW50aWF0ZShE UkJHX0NUWCAqZGN0eCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRs ZW4sCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVfdCBub25jZWxlbiwKKysJ CQljb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xlbikKKysJeworKwlEUkJH X0NUUl9DVFggKmNjdHggPSAmZGN0eC0+ZC5jdHI7CisrCW1lbXNldChjY3R4LT5LLCAwLCBzaXpl b2YoY2N0eC0+SykpOworKwltZW1zZXQoY2N0eC0+ViwgMCwgc2l6ZW9mKGNjdHgtPlYpKTsKKysJ QUVTX3NldF9lbmNyeXB0X2tleShjY3R4LT5LLCBkY3R4LT5zdHJlbmd0aCwgJmNjdHgtPmtzKTsK KysJY3RyX1VwZGF0ZShkY3R4LCBlbnQsIGVudGxlbiwgcGVycywgcGVyc2xlbiwgbm9uY2UsIG5v bmNlbGVuKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdfY3RyX3Jlc2Vl ZChEUkJHX0NUWCAqZGN0eCwgCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3Qg ZW50bGVuLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQor Kwl7CisrCWN0cl9VcGRhdGUoZGN0eCwgZW50LCBlbnRsZW4sIGFkaW4sIGFkaW5sZW4sIE5VTEws IDApOworKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19jdHJfZ2VuZXJhdGUo RFJCR19DVFggKmRjdHgsCisrCQkJdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAor KwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQorKwl7CisrCURS QkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5kLmN0cjsKKysJaWYgKGFkaW4gJiYgYWRpbmxlbikK KysJCXsKKysJCWN0cl9VcGRhdGUoZGN0eCwgYWRpbiwgYWRpbmxlbiwgTlVMTCwgMCwgTlVMTCwg MCk7CisrCQkvKiBUaGlzIG1lYW5zIHdlIHJldXNlIGRlcml2ZWQgdmFsdWUgKi8KKysJCWlmIChk Y3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfQ1RSX1VTRV9ERikKKysJCQl7CisrCQkJYWRpbiA9IE5V TEw7CisrCQkJYWRpbmxlbiA9IDE7CisrCQkJfQorKwkJfQorKwllbHNlCisrCQlhZGlubGVuID0g MDsKKysKKysJZm9yICg7OykKKysJCXsKKysJCWluY18xMjgoY2N0eCk7CisrCQlpZiAoIShkY3R4 LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkgJiYgIWRjdHgtPmxiX3ZhbGlkKQorKwkJCXsKKysJ CQlBRVNfZW5jcnlwdChjY3R4LT5WLCBkY3R4LT5sYiwgJmNjdHgtPmtzKTsKKysJCQlkY3R4LT5s Yl92YWxpZCA9IDE7CisrCQkJY29udGludWU7CisrCQkJfQorKwkJaWYgKG91dGxlbiA8IDE2KQor KwkJCXsKKysJCQkvKiBVc2UgSyBhcyB0ZW1wIHNwYWNlIGFzIGl0IHdpbGwgYmUgdXBkYXRlZCAq LworKwkJCUFFU19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPkssICZjY3R4LT5rcyk7CisrCQkJaWYg KCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBjY3R4LT5LKSkKKysJCQkJcmV0dXJuIDA7Cisr CQkJbWVtY3B5KG91dCwgY2N0eC0+Sywgb3V0bGVuKTsKKysJCQlicmVhazsKKysJCQl9CisrCQlB RVNfZW5jcnlwdChjY3R4LT5WLCBvdXQsICZjY3R4LT5rcyk7CisrCQlpZiAoIWZpcHNfZHJiZ19j cHJuZ190ZXN0KGRjdHgsIG91dCkpCisrCQkJcmV0dXJuIDA7CisrCQlvdXQgKz0gMTY7CisrCQlv dXRsZW4gLT0gMTY7CisrCQlpZiAob3V0bGVuID09IDApCisrCQkJYnJlYWs7CisrCQl9CisrCisr CWN0cl9VcGRhdGUoZGN0eCwgYWRpbiwgYWRpbmxlbiwgTlVMTCwgMCwgTlVMTCwgMCk7CisrCisr CXJldHVybiAxOworKworKwl9CisrCisrc3RhdGljIGludCBkcmJnX2N0cl91bmluc3RhbnRpYXRl KERSQkdfQ1RYICpkY3R4KQorKwl7CisrCW1lbXNldCgmZGN0eC0+ZC5jdHIsIDAsIHNpemVvZihE UkJHX0NUUl9DVFgpKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytpbnQgZmlwc19kcmJnX2N0cl9p bml0KERSQkdfQ1RYICpkY3R4KQorKwl7CisrCURSQkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5k LmN0cjsKKysKKysJc2l6ZV90IGtleWxlbjsKKysKKysJc3dpdGNoIChkY3R4LT50eXBlKQorKwkJ eworKwkJY2FzZSBOSURfYWVzXzEyOF9jdHI6CisrCQlrZXlsZW4gPSAxNjsKKysJCWJyZWFrOwor KworKwkJY2FzZSBOSURfYWVzXzE5Ml9jdHI6CisrCQlrZXlsZW4gPSAyNDsKKysJCWJyZWFrOwor KworKwkJY2FzZSBOSURfYWVzXzI1Nl9jdHI6CisrCQlrZXlsZW4gPSAzMjsKKysJCWJyZWFrOwor KworKwkJZGVmYXVsdDoKKysJCXJldHVybiAtMjsKKysJCX0KKysKKysJZGN0eC0+aW5zdGFudGlh dGUgPSBkcmJnX2N0cl9pbnN0YW50aWF0ZTsKKysJZGN0eC0+cmVzZWVkID0gZHJiZ19jdHJfcmVz ZWVkOworKwlkY3R4LT5nZW5lcmF0ZSA9IGRyYmdfY3RyX2dlbmVyYXRlOworKwlkY3R4LT51bmlu c3RhbnRpYXRlID0gZHJiZ19jdHJfdW5pbnN0YW50aWF0ZTsKKysKKysJY2N0eC0+a2V5bGVuID0g a2V5bGVuOworKwlkY3R4LT5zdHJlbmd0aCA9IGtleWxlbiAqIDg7CisrCWRjdHgtPmJsb2NrbGVu Z3RoID0gMTY7CisrCWRjdHgtPnNlZWRsZW4gPSBrZXlsZW4gKyAxNjsKKysKKysJaWYgKGRjdHgt PnhmbGFncyAmIERSQkdfRkxBR19DVFJfVVNFX0RGKQorKwkJeworKwkJLyogZGYgaW5pdGlhbGlz YXRpb24gKi8KKysJCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGRmX2tleVszMl0gPQorKwkJCXsKKysJ CQkweDAwLDB4MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcsCisrCQkJMHgwOCwweDA5 LDB4MGEsMHgwYiwweDBjLDB4MGQsMHgwZSwweDBmLAorKwkJCTB4MTAsMHgxMSwweDEyLDB4MTMs MHgxNCwweDE1LDB4MTYsMHgxNywKKysJCQkweDE4LDB4MTksMHgxYSwweDFiLDB4MWMsMHgxZCww eDFlLDB4MWYgCisrCQkJfTsKKysJCS8qIFNldCBrZXkgc2NoZWR1bGUgZm9yIGRmX2tleSAqLwor KwkJQUVTX3NldF9lbmNyeXB0X2tleShkZl9rZXksIGRjdHgtPnN0cmVuZ3RoLCAmY2N0eC0+ZGZf a3MpOworKworKwkJZGN0eC0+bWluX2VudHJvcHkgPSBjY3R4LT5rZXlsZW47CisrCQlkY3R4LT5t YXhfZW50cm9weSA9IERSQkdfTUFYX0xFTkdUSDsKKysJCWRjdHgtPm1pbl9ub25jZSA9IGRjdHgt Pm1pbl9lbnRyb3B5IC8gMjsKKysJCWRjdHgtPm1heF9ub25jZSA9IERSQkdfTUFYX0xFTkdUSDsK KysJCWRjdHgtPm1heF9wZXJzID0gRFJCR19NQVhfTEVOR1RIOworKwkJZGN0eC0+bWF4X2FkaW4g PSBEUkJHX01BWF9MRU5HVEg7CisrCQl9CisrCWVsc2UKKysJCXsKKysJCWRjdHgtPm1pbl9lbnRy b3B5ID0gZGN0eC0+c2VlZGxlbjsKKysJCWRjdHgtPm1heF9lbnRyb3B5ID0gZGN0eC0+c2VlZGxl bjsKKysJCS8qIE5vbmNlIG5vdCB1c2VkICovCisrCQlkY3R4LT5taW5fbm9uY2UgPSAwOworKwkJ ZGN0eC0+bWF4X25vbmNlID0gMDsKKysJCWRjdHgtPm1heF9wZXJzID0gZGN0eC0+c2VlZGxlbjsK KysJCWRjdHgtPm1heF9hZGluID0gZGN0eC0+c2VlZGxlbjsKKysJCX0KKysKKysJZGN0eC0+bWF4 X3JlcXVlc3QgPSAxPDwxNjsKKysJZGN0eC0+cmVzZWVkX2ludGVydmFsID0gMTw8MjQ7CisrCisr CXJldHVybiAxOworKwl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBz L2ZpcHNfZHJiZ19oYXNoLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2Zp cHNfZHJiZ19oYXNoLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNf ZHJiZ19oYXNoLmMuZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5NDI5NDg5OCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2guYwkyMDEyLTAy LTI5IDEwOjMzOjAyLjc5NDI5NDg5OCArMDEwMAorQEAgLTAsMCArMSwzNzggQEAKKysvKiBmaXBz L3JhbmQvZmlwc19kcmJnX2hhc2guYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhl bnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisr ICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wg UHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAor KyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlz dHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIK KysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJv amVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAor KyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAg IG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdy aXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysg KiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0 aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9y Zy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQ Uk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNT TCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisrI2RlZmluZSBPUEVO U1NMX0ZJUFNBUEkKKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSAiZmlwc19yYW5k X2xjbC5oIgorKworKy8qIFRoaXMgaXMgSGFzaF9kZiBmcm9tIFNQIDgwMC05MCAxMC40LjEgKi8K KysKKytzdGF0aWMgaW50IGhhc2hfZGYoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKm91 dCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFsZW4sCisrCQkJY29u c3QgdW5zaWduZWQgY2hhciAqaW4yLCBzaXplX3QgaW4ybGVuLAorKwkJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmluMywgc2l6ZV90IGluM2xlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjQs IHNpemVfdCBpbjRsZW4pCisrCXsKKysJRVZQX01EX0NUWCAqbWN0eCA9ICZkY3R4LT5kLmhhc2gu bWN0eDsKKysJdW5zaWduZWQgY2hhciAqdnRtcCA9IGRjdHgtPmQuaGFzaC52dG1wOworKwl1bnNp Z25lZCBjaGFyIHRtcFs2XTsKKysJLyogU3RhbmRhcmQgb25seSBldmVyIG5lZWRzIHNlZWRsZW4g Ynl0ZXMgd2hpY2ggaXMgYWx3YXlzIGxlc3MgdGhhbgorKwkgKiBtYXhpbXVtIHBlcm1pdHRlZCBz byBubyBuZWVkIHRvIGNoZWNrIGxlbmd0aC4KKysJICovCisrCXNpemVfdCBvdXRsZW4gPSBkY3R4 LT5zZWVkbGVuOworKwl0bXBbMF0gPSAxOworKwl0bXBbMV0gPSAoKG91dGxlbiAqIDgpID4+IDI0 KSAmIDB4ZmY7CisrCXRtcFsyXSA9ICgob3V0bGVuICogOCkgPj4gMTYpICYgMHhmZjsKKysJdG1w WzNdID0gKChvdXRsZW4gKiA4KSA+PiA4KSAmIDB4ZmY7CisrCXRtcFs0XSA9IChvdXRsZW4gKiA4 KSAmIDB4ZmY7CisrCWlmICghaW4xKQorKwkJeworKwkJdG1wWzVdID0gKHVuc2lnbmVkIGNoYXIp aW4xbGVuOworKwkJaW4xID0gdG1wICsgNTsKKysJCWluMWxlbiA9IDE7CisrCQl9CisrCWZvciAo OzspCisrCQl7CisrCQlpZiAoIUZJUFNfZGlnZXN0aW5pdChtY3R4LCBkY3R4LT5kLmhhc2gubWQp KQorKwkJCXJldHVybiAwOworKwkJaWYgKCFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCB0bXAsIDUp KQorKwkJCXJldHVybiAwOworKwkJaWYgKGluMSAmJiAhRklQU19kaWdlc3R1cGRhdGUobWN0eCwg aW4xLCBpbjFsZW4pKQorKwkJCXJldHVybiAwOworKwkJaWYgKGluMiAmJiAhRklQU19kaWdlc3R1 cGRhdGUobWN0eCwgaW4yLCBpbjJsZW4pKQorKwkJCXJldHVybiAwOworKwkJaWYgKGluMyAmJiAh RklQU19kaWdlc3R1cGRhdGUobWN0eCwgaW4zLCBpbjNsZW4pKQorKwkJCXJldHVybiAwOworKwkJ aWYgKGluNCAmJiAhRklQU19kaWdlc3R1cGRhdGUobWN0eCwgaW40LCBpbjRsZW4pKQorKwkJCXJl dHVybiAwOworKwkJaWYgKG91dGxlbiA8IGRjdHgtPmJsb2NrbGVuZ3RoKQorKwkJCXsKKysJCQlp ZiAoIUZJUFNfZGlnZXN0ZmluYWwobWN0eCwgdnRtcCwgTlVMTCkpCisrCQkJCXJldHVybiAwOwor KwkJCW1lbWNweShvdXQsIHZ0bXAsIG91dGxlbik7CisrCQkJT1BFTlNTTF9jbGVhbnNlKHZ0bXAs IGRjdHgtPmJsb2NrbGVuZ3RoKTsKKysJCQlyZXR1cm4gMTsKKysJCQl9CisrCQllbHNlIGlmKCFG SVBTX2RpZ2VzdGZpbmFsKG1jdHgsIG91dCwgTlVMTCkpCisrCQkJcmV0dXJuIDA7CisrCisrCQlv dXRsZW4gLT0gZGN0eC0+YmxvY2tsZW5ndGg7CisrCQlpZiAob3V0bGVuID09IDApCisrCQkJcmV0 dXJuIDE7CisrCQl0bXBbMF0rKzsKKysJCW91dCArPSBkY3R4LT5ibG9ja2xlbmd0aDsKKysJCX0K KysJfQorKworKworKy8qIEFkZCBhbiB1bnNpZ25lZCBidWZmZXIgdG8gdGhlIGJ1ZiB2YWx1ZSwg c3RvcmluZyB0aGUgcmVzdWx0IGluIGJ1Zi4gRm9yCisrICogdGhpcyBhbGdvcml0aG0gdGhlIGxl bmd0aCBvZiBpbnB1dCBuZXZlciBleGNlZWRzIHRoZSBzZWVkIGxlbmd0aC4KKysgKi8KKysKKytz dGF0aWMgdm9pZCBjdHhfYWRkX2J1ZihEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqYnVm LAorKwkJCQl1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKQorKwl7CisrCXNpemVfdCBp ID0gaW5sZW47CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnE7CisrCXVuc2lnbmVkIGNoYXIgYywg KnA7CisrCXAgPSBidWYgKyBkY3R4LT5zZWVkbGVuOworKwlxID0gaW4gKyBpbmxlbjsKKysKKysJ T1BFTlNTTF9hc3NlcnQoaSA8PSBkY3R4LT5zZWVkbGVuKTsKKysKKysJLyogU3BlY2lhbCBjYXNl OiB6ZXJvIGxlbmd0aCwganVzdCBpbmNyZW1lbnQgYnVmZmVyICovCisrCWlmIChpKQorKwkJYyA9 IDA7CisrCWVsc2UgCisrCQljID0gMTsKKysKKysJd2hpbGUgKGkpCisrCQl7CisrCQlpbnQgcjsK KysJCXAtLTsKKysJCXEtLTsKKysJCXIgPSAqcCArICpxICsgYzsKKysJCS8qIENhcnJ5ICovCisr CQlpZiAociA+IDB4ZmYpCisrCQkJYyA9IDE7CisrCQllbHNlCisrCQkJYyA9IDA7CisrCQkqcCA9 IHIgJiAweGZmOworKwkJaS0tOworKwkJfQorKworKwlpID0gZGN0eC0+c2VlZGxlbiAtIGlubGVu OworKworKwkvKiBJZiBub3QgYWRkaW5nIHdob2xlIGJ1ZmZlciBoYW5kbGUgZmluYWwgY2Fycmll cyAqLworKwlpZiAoYyAmJiBpKQorKwkJeworKwkJZG8KKysJCQl7CisrCQkJcC0tOworKwkJCWMg PSAqcDsKKysJCQljKys7CisrCQkJKnAgPSBjOworKwkJCWlmKGMpCisrCQkJCXJldHVybjsKKysJ CQl9IHdoaWxlKGktLSk7CisrCQl9CisrCX0KKysKKysvKiBGaW5hbGlzZSBhbmQgYWRkIGhhc2gg dG8gViAqLworKwkKKytzdGF0aWMgaW50IGN0eF9hZGRfbWQoRFJCR19DVFggKmRjdHgpCisrCXsK KysJaWYgKCFGSVBTX2RpZ2VzdGZpbmFsKCZkY3R4LT5kLmhhc2gubWN0eCwgZGN0eC0+ZC5oYXNo LnZ0bXAsIE5VTEwpKQorKwkJCXJldHVybiAwOworKwljdHhfYWRkX2J1ZihkY3R4LCBkY3R4LT5k Lmhhc2guViwgZGN0eC0+ZC5oYXNoLnZ0bXAsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKKysJcmV0dXJu IDE7CisrCX0KKysKKytzdGF0aWMgaW50IGhhc2hfZ2VuKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25l ZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4pCisrCXsKKysJRFJCR19IQVNIX0NUWCAqaGN0eCA9 ICZkY3R4LT5kLmhhc2g7CisrCWlmIChvdXRsZW4gPT0gMCkKKysJCXJldHVybiAxOworKwltZW1j cHkoaGN0eC0+dnRtcCwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbik7CisrCWZvcig7OykKKysJCXsK KysJCUZJUFNfZGlnZXN0aW5pdCgmaGN0eC0+bWN0eCwgaGN0eC0+bWQpOworKwkJRklQU19kaWdl c3R1cGRhdGUoJmhjdHgtPm1jdHgsIGhjdHgtPnZ0bXAsIGRjdHgtPnNlZWRsZW4pOworKwkJaWYg KCEoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpICYmICFkY3R4LT5sYl92YWxpZCkKKysJ CQl7CisrCQkJRklQU19kaWdlc3RmaW5hbCgmaGN0eC0+bWN0eCwgZGN0eC0+bGIsIE5VTEwpOwor KwkJCWRjdHgtPmxiX3ZhbGlkID0gMTsKKysJCQl9CisrCQllbHNlIGlmIChvdXRsZW4gPCBkY3R4 LT5ibG9ja2xlbmd0aCkKKysJCQl7CisrCQkJRklQU19kaWdlc3RmaW5hbCgmaGN0eC0+bWN0eCwg aGN0eC0+dnRtcCwgTlVMTCk7CisrCQkJaWYgKCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBo Y3R4LT52dG1wKSkKKysJCQkJcmV0dXJuIDA7CisrCQkJbWVtY3B5KG91dCwgaGN0eC0+dnRtcCwg b3V0bGVuKTsKKysJCQlyZXR1cm4gMTsKKysJCQl9CisrCQllbHNlCisrCQkJeworKwkJCUZJUFNf ZGlnZXN0ZmluYWwoJmhjdHgtPm1jdHgsIG91dCwgTlVMTCk7CisrCQkJaWYgKCFmaXBzX2RyYmdf Y3BybmdfdGVzdChkY3R4LCBvdXQpKQorKwkJCQlyZXR1cm4gMDsKKysJCQlvdXRsZW4gLT0gZGN0 eC0+YmxvY2tsZW5ndGg7CisrCQkJaWYgKG91dGxlbiA9PSAwKQorKwkJCQlyZXR1cm4gMTsKKysJ CQlvdXQgKz0gZGN0eC0+YmxvY2tsZW5ndGg7CisrCQkJfQorKwkJY3R4X2FkZF9idWYoZGN0eCwg aGN0eC0+dnRtcCwgTlVMTCwgMCk7CisrCQl9CisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdfaGFz aF9pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAq ZW50LCBzaXplX3QgZW50X2xlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNp emVfdCBub25jZV9sZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBzdHIsIHNpemVfdCBw c3RyX2xlbikKKysJeworKwlEUkJHX0hBU0hfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsKKysJ aWYgKCFoYXNoX2RmKGRjdHgsIGhjdHgtPlYsIAorKwkJCWVudCwgZW50X2xlbiwgbm9uY2UsIG5v bmNlX2xlbiwgcHN0ciwgcHN0cl9sZW4sCisrCQkJTlVMTCwgMCkpCisrCQlyZXR1cm4gMDsKKysJ aWYgKCFoYXNoX2RmKGRjdHgsIGhjdHgtPkMsIAorKwkJCU5VTEwsIDAsIGhjdHgtPlYsIGRjdHgt PnNlZWRsZW4sCisrCQkJTlVMTCwgMCwgTlVMTCwgMCkpCisrCQlyZXR1cm4gMDsKKysKKysjaWZk ZWYgSEFTSF9EUkJHX1RSQUNFCisrCWZwcmludGYoc3RkZXJyLCAiVitDIGFmdGVyIGluc3RhbnRp YXRlOlxuIik7CisrCWhleHByaW50KHN0ZGVyciwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbik7Cisr CWhleHByaW50KHN0ZGVyciwgaGN0eC0+QywgZGN0eC0+c2VlZGxlbik7CisrI2VuZGlmCisrCXJl dHVybiAxOworKwl9CisrCisrCQorK3N0YXRpYyBpbnQgZHJiZ19oYXNoX3Jlc2VlZChEUkJHX0NU WCAqZGN0eCwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50X2xlbiwK KysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5fbGVuKQorKwl7Cisr CURSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOworKwkvKiBWIGFib3V0IHRvIGJl IHVwZGF0ZWQgc28gdXNlIEMgYXMgb3V0cHV0IGluc3RlYWQgKi8KKysJaWYgKCFoYXNoX2RmKGRj dHgsIGhjdHgtPkMsCisrCQkJTlVMTCwgMSwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbiwKKysJCQll bnQsIGVudF9sZW4sIGFkaW4sIGFkaW5fbGVuKSkKKysJCXJldHVybiAwOworKwltZW1jcHkoaGN0 eC0+ViwgaGN0eC0+QywgZGN0eC0+c2VlZGxlbik7CisrCWlmICghaGFzaF9kZihkY3R4LCBoY3R4 LT5DLCBOVUxMLCAwLAorKwkJCWhjdHgtPlYsIGRjdHgtPnNlZWRsZW4sIE5VTEwsIDAsIE5VTEws IDApKQorKwkJcmV0dXJuIDA7CisrI2lmZGVmIEhBU0hfRFJCR19UUkFDRQorKwlmcHJpbnRmKHN0 ZGVyciwgIlYrQyBhZnRlciByZXNlZWQ6XG4iKTsKKysJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5W LCBkY3R4LT5zZWVkbGVuKTsKKysJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5DLCBkY3R4LT5zZWVk bGVuKTsKKysjZW5kaWYKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdfaGFz aF9nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwKKysJCQkJdW5zaWduZWQgY2hhciAqb3V0LCBzaXpl X3Qgb3V0bGVuLAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9s ZW4pCisrCXsKKysJRFJCR19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhhc2g7CisrCUVWUF9N RF9DVFggKm1jdHggPSAmaGN0eC0+bWN0eDsKKysJdW5zaWduZWQgY2hhciB0bXBbNF07CisrCWlm IChhZGluICYmIGFkaW5fbGVuKQorKwkJeworKwkJdG1wWzBdID0gMjsKKysJCWlmICghRklQU19k aWdlc3Rpbml0KG1jdHgsIGhjdHgtPm1kKSkKKysJCQlyZXR1cm4gMDsKKysJCWlmICghRVZQX0Rp Z2VzdFVwZGF0ZShtY3R4LCB0bXAsIDEpKQorKwkJCXJldHVybiAwOworKwkJaWYgKCFFVlBfRGln ZXN0VXBkYXRlKG1jdHgsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pKQorKwkJCXJldHVybiAwOwor KwkJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1jdHgsIGFkaW4sIGFkaW5fbGVuKSkKKysJCQlyZXR1 cm4gMDsKKysJCWlmICghY3R4X2FkZF9tZChkY3R4KSkKKysJCQlyZXR1cm4gMDsKKysJCX0KKysJ aWYgKCFoYXNoX2dlbihkY3R4LCBvdXQsIG91dGxlbikpCisrCQlyZXR1cm4gMDsKKysKKysJdG1w WzBdID0gMzsKKysJaWYgKCFGSVBTX2RpZ2VzdGluaXQobWN0eCwgaGN0eC0+bWQpKQorKwkJcmV0 dXJuIDA7CisrCWlmICghRVZQX0RpZ2VzdFVwZGF0ZShtY3R4LCB0bXAsIDEpKQorKwkJcmV0dXJu IDA7CisrCWlmICghRVZQX0RpZ2VzdFVwZGF0ZShtY3R4LCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVu KSkKKysJCXJldHVybiAwOworKworKwlpZiAoIWN0eF9hZGRfbWQoZGN0eCkpCisrCQlyZXR1cm4g MDsKKysKKysJY3R4X2FkZF9idWYoZGN0eCwgaGN0eC0+ViwgaGN0eC0+QywgZGN0eC0+c2VlZGxl bik7CisrCisrCXRtcFswXSA9IChkY3R4LT5yZXNlZWRfY291bnRlciA+PiAyNCkgJiAweGZmOwor Kwl0bXBbMV0gPSAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj4gMTYpICYgMHhmZjsKKysJdG1wWzJd ID0gKGRjdHgtPnJlc2VlZF9jb3VudGVyID4+IDgpICYgMHhmZjsKKysJdG1wWzNdID0gZGN0eC0+ cmVzZWVkX2NvdW50ZXIgJiAweGZmOworKwljdHhfYWRkX2J1ZihkY3R4LCBoY3R4LT5WLCB0bXAs IDQpOworKyNpZmRlZiBIQVNIX0RSQkdfVFJBQ0UKKysJZnByaW50ZihzdGRlcnIsICJWK0MgYWZ0 ZXIgZ2VuZXJhdGU6XG4iKTsKKysJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5WLCBkY3R4LT5zZWVk bGVuKTsKKysJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKKysjZW5k aWYKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdfaGFzaF91bmluc3RhbnRp YXRlKERSQkdfQ1RYICpkY3R4KQorKwl7CisrCUVWUF9NRF9DVFhfY2xlYW51cCgmZGN0eC0+ZC5o YXNoLm1jdHgpOworKwlPUEVOU1NMX2NsZWFuc2UoJmRjdHgtPmQuaGFzaCwgc2l6ZW9mKERSQkdf SEFTSF9DVFgpKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytpbnQgZmlwc19kcmJnX2hhc2hfaW5p dChEUkJHX0NUWCAqZGN0eCkKKysJeworKwljb25zdCBFVlBfTUQgKm1kOworKwlEUkJHX0hBU0hf Q1RYICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsKKysJbWQgPSBGSVBTX2dldF9kaWdlc3RieW5pZChk Y3R4LT50eXBlKTsKKysJaWYgKCFtZCkKKysJCXJldHVybiAtMjsKKysJc3dpdGNoIChkY3R4LT50 eXBlKQorKwkJeworKwkJY2FzZSBOSURfc2hhMToKKysJCWRjdHgtPnN0cmVuZ3RoID0gMTI4Owor KwkJYnJlYWs7CisrCisrCQljYXNlIE5JRF9zaGEyMjQ6CisrCQlkY3R4LT5zdHJlbmd0aCA9IDE5 MjsKKysJCWJyZWFrOworKworKwkJZGVmYXVsdDoKKysJCWRjdHgtPnN0cmVuZ3RoID0gMjU2Owor KwkJYnJlYWs7CisrCQl9CisrCisrCWRjdHgtPmluc3RhbnRpYXRlID0gZHJiZ19oYXNoX2luc3Rh bnRpYXRlOworKwlkY3R4LT5yZXNlZWQgPSBkcmJnX2hhc2hfcmVzZWVkOworKwlkY3R4LT5nZW5l cmF0ZSA9IGRyYmdfaGFzaF9nZW5lcmF0ZTsKKysJZGN0eC0+dW5pbnN0YW50aWF0ZSA9IGRyYmdf aGFzaF91bmluc3RhbnRpYXRlOworKworKwlkY3R4LT5kLmhhc2gubWQgPSBtZDsKKysJRVZQX01E X0NUWF9pbml0KCZoY3R4LT5tY3R4KTsKKysKKysJLyogVGhlc2UgYXJlIHRha2VuIGZyb20gU1Ag ODAwLTkwIDEwLjEgdGFibGUgMiAqLworKworKwlkY3R4LT5ibG9ja2xlbmd0aCA9IE1fRVZQX01E X3NpemUobWQpOworKwlpZiAoZGN0eC0+YmxvY2tsZW5ndGggPiAzMikKKysJCWRjdHgtPnNlZWRs ZW4gPSAxMTE7CisrCWVsc2UKKysJCWRjdHgtPnNlZWRsZW4gPSA1NTsKKysKKysKKysJZGN0eC0+ bWluX2VudHJvcHkgPSBkY3R4LT5zdHJlbmd0aCAvIDg7CisrCWRjdHgtPm1heF9lbnRyb3B5ID0g RFJCR19NQVhfTEVOR1RIOworKworKwlkY3R4LT5taW5fbm9uY2UgPSBkY3R4LT5taW5fZW50cm9w eSAvIDI7CisrCWRjdHgtPm1heF9ub25jZSA9IERSQkdfTUFYX0xFTkdUSDsKKysKKysJZGN0eC0+ bWF4X3BlcnMgPSBEUkJHX01BWF9MRU5HVEg7CisrCWRjdHgtPm1heF9hZGluID0gRFJCR19NQVhf TEVOR1RIOworKworKwlkY3R4LT5tYXhfcmVxdWVzdCA9IDE8PDE2OworKwlkY3R4LT5yZXNlZWRf aW50ZXJ2YWwgPSAxPDwyNDsKKysKKysJcmV0dXJuIDE7CisrCX0KK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2htYWMuYy5maXBzIG9wZW5zc2wtMS4w LjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2htYWMuYworLS0tIG9wZW5zc2wtMS4wLjEt YmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2htYWMuYy5maXBzCTIwMTItMDItMjkgMTA6MzM6 MDIuNzk0Mjk0ODk4ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9m aXBzX2RyYmdfaG1hYy5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzk0Mjk0ODk4ICswMTAwCitAQCAt MCwwICsxLDI4MSBAQAorKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdfaG1hYy5jICovCisrLyogV3Jp dHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBP cGVuU1NMCisrICogcHJvamVjdC4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdo dCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysg KgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp bgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0 aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAg ICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0 cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRv b2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAg ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdp dGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1p c3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAq CisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBj YWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWly IG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9w ZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3 aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVu dDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBS RVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JT IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU CisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK KysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KysgKi8KKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Cisr I2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKKysKKytzdGF0aWMgaW50IGRyYmdfaG1hY191cGRh dGUoRFJCR19DVFggKmRjdHgsCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90 IGluMWxlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4yLCBzaXplX3QgaW4ybGVuLAor KwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjMsIHNpemVfdCBpbjNsZW4KKysJCQkpCisrCXsK KysJc3RhdGljIHVuc2lnbmVkIGNoYXIgYzAgPSAwLCBjMSA9IDE7CisrCURSQkdfSE1BQ19DVFgg KmhtYWMgPSAmZGN0eC0+ZC5obWFjOworKwlITUFDX0NUWCAqaGN0eCA9ICZobWFjLT5oY3R4Owor KworKwlpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwg aG1hYy0+bWQsIE5VTEwpKQorKwkJcmV0dXJuIDA7CisrCWlmICghSE1BQ19VcGRhdGUoaGN0eCwg aG1hYy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQorKwkJcmV0dXJuIDA7CisrCWlmICghSE1BQ19V cGRhdGUoaGN0eCwgJmMwLCAxKSkKKysJCXJldHVybiAwOworKwlpZiAoaW4xbGVuICYmICFITUFD X1VwZGF0ZShoY3R4LCBpbjEsIGluMWxlbikpCisrCQlyZXR1cm4gMDsKKysJaWYgKGluMmxlbiAm JiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4yLCBpbjJsZW4pKQorKwkJcmV0dXJuIDA7CisrCWlmIChp bjNsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMywgaW4zbGVuKSkKKysJCXJldHVybiAwOwor KworKwlpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+SywgTlVMTCkpCisrCQlyZXR1cm4gMDsK KysKKysJaWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgs IGhtYWMtPm1kLCBOVUxMKSkKKysJCXJldHVybiAwOworKwlpZiAoIUhNQUNfVXBkYXRlKGhjdHgs IGhtYWMtPlYsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKKysJCXJldHVybiAwOworKworKwlpZiAoIUhN QUNfRmluYWwoaGN0eCwgaG1hYy0+ViwgTlVMTCkpCisrCQlyZXR1cm4gMDsKKysKKysJaWYgKCFp bjFsZW4gJiYgIWluMmxlbiAmJiAhaW4zbGVuKQorKwkJcmV0dXJuIDE7CisrCisrCWlmICghSE1B Q19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLCBobWFjLT5tZCwgTlVM TCkpCisrCQlyZXR1cm4gMDsKKysJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBobWFjLT5WLCBkY3R4 LT5ibG9ja2xlbmd0aCkpCisrCQlyZXR1cm4gMDsKKysJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCAm YzEsIDEpKQorKwkJcmV0dXJuIDA7CisrCWlmIChpbjFsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgs IGluMSwgaW4xbGVuKSkKKysJCXJldHVybiAwOworKwlpZiAoaW4ybGVuICYmICFITUFDX1VwZGF0 ZShoY3R4LCBpbjIsIGluMmxlbikpCisrCQlyZXR1cm4gMDsKKysJaWYgKGluM2xlbiAmJiAhSE1B Q19VcGRhdGUoaGN0eCwgaW4zLCBpbjNsZW4pKQorKwkJcmV0dXJuIDA7CisrCisrCWlmICghSE1B Q19GaW5hbChoY3R4LCBobWFjLT5LLCBOVUxMKSkKKysJCXJldHVybiAwOworKworKwlpZiAoIUhN QUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5V TEwpKQorKwkJcmV0dXJuIDA7CisrCWlmICghSE1BQ19VcGRhdGUoaGN0eCwgaG1hYy0+ViwgZGN0 eC0+YmxvY2tsZW5ndGgpKQorKwkJcmV0dXJuIDA7CisrCisrCWlmICghSE1BQ19GaW5hbChoY3R4 LCBobWFjLT5WLCBOVUxMKSkKKysJCXJldHVybiAwOworKworKwlyZXR1cm4gMTsKKysKKysJfQor KworK3N0YXRpYyBpbnQgZHJiZ19obWFjX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJ CQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAorKwkJCQljb25zdCB1 bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlX2xlbiwKKysJCQkJY29uc3QgdW5zaWdu ZWQgY2hhciAqcHN0ciwgc2l6ZV90IHBzdHJfbGVuKQorKwl7CisrCURSQkdfSE1BQ19DVFggKmht YWMgPSAmZGN0eC0+ZC5obWFjOworKwltZW1zZXQoaG1hYy0+SywgMCwgZGN0eC0+YmxvY2tsZW5n dGgpOworKwltZW1zZXQoaG1hYy0+ViwgMSwgZGN0eC0+YmxvY2tsZW5ndGgpOworKwlpZiAoIWRy YmdfaG1hY191cGRhdGUoZGN0eCwKKysJCQllbnQsIGVudF9sZW4sIG5vbmNlLCBub25jZV9sZW4s IHBzdHIsIHBzdHJfbGVuKSkKKysJCXJldHVybiAwOworKworKyNpZmRlZiBITUFDX0RSQkdfVFJB Q0UKKysJZnByaW50ZihzdGRlcnIsICJLK1YgYWZ0ZXIgaW5zdGFudGlhdGU6XG4iKTsKKysJaGV4 cHJpbnQoc3RkZXJyLCBobWFjLT5LLCBobWFjLT5ibG9ja2xlbmd0aCk7CisrCWhleHByaW50KHN0 ZGVyciwgaG1hYy0+ViwgaG1hYy0+YmxvY2tsZW5ndGgpOworKyNlbmRpZgorKwlyZXR1cm4gMTsK KysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19obWFjX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwKKysJ CQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50X2xlbiwKKysJCQkJY29uc3Qg dW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5fbGVuKQorKwl7CisrCWlmICghZHJiZ19o bWFjX3VwZGF0ZShkY3R4LAorKwkJCWVudCwgZW50X2xlbiwgYWRpbiwgYWRpbl9sZW4sIE5VTEws IDApKQorKwkJcmV0dXJuIDA7CisrCisrI2lmZGVmIEhNQUNfRFJCR19UUkFDRQorKwl7CisrCQlE UkJHX0hNQUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1hYzsKKysJCWZwcmludGYoc3RkZXJyLCAi SytWIGFmdGVyIHJlc2VlZDpcbiIpOworKwkJaGV4cHJpbnQoc3RkZXJyLCBobWFjLT5LLCBobWFj LT5ibG9ja2xlbmd0aCk7CisrCQloZXhwcmludChzdGRlcnIsIGhtYWMtPlYsIGhtYWMtPmJsb2Nr bGVuZ3RoKTsKKysJfQorKyNlbmRpZgorKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQg ZHJiZ19obWFjX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJCQl1bnNpZ25lZCBjaGFyICpv dXQsIHNpemVfdCBvdXRsZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVf dCBhZGluX2xlbikKKysJeworKwlEUkJHX0hNQUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1hYzsK KysJSE1BQ19DVFggKmhjdHggPSAmaG1hYy0+aGN0eDsKKysJY29uc3QgdW5zaWduZWQgY2hhciAq VnRtcCA9IGhtYWMtPlY7CisrCWlmIChhZGluX2xlbiAmJiAhZHJiZ19obWFjX3VwZGF0ZShkY3R4 LCBhZGluLCBhZGluX2xlbiwKKysJCQkJCQlOVUxMLCAwLCBOVUxMLCAwKSkKKysJCXJldHVybiAw OworKwlmb3IgKDs7KQorKwkJeworKwkJaWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+Sywg ZGN0eC0+YmxvY2tsZW5ndGgsCisrCQkJCQkJCWhtYWMtPm1kLCBOVUxMKSkKKysJCQlyZXR1cm4g MDsKKysJCWlmICghSE1BQ19VcGRhdGUoaGN0eCwgVnRtcCwgZGN0eC0+YmxvY2tsZW5ndGgpKQor KwkJCXJldHVybiAwOworKwkJaWYgKCEoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpICYm ICFkY3R4LT5sYl92YWxpZCkKKysJCQl7CisrCQkJaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGRjdHgt PmxiLCBOVUxMKSkKKysJCQkJcmV0dXJuIDA7CisrCQkJZGN0eC0+bGJfdmFsaWQgPSAxOworKwkJ CVZ0bXAgPSBkY3R4LT5sYjsKKysJCQljb250aW51ZTsKKysJCQl9CisrCQllbHNlIGlmIChvdXRs ZW4gPiBkY3R4LT5ibG9ja2xlbmd0aCkKKysJCQl7CisrCQkJaWYgKCFITUFDX0ZpbmFsKGhjdHgs IG91dCwgTlVMTCkpCisrCQkJCXJldHVybiAwOworKwkJCWlmICghZmlwc19kcmJnX2Nwcm5nX3Rl c3QoZGN0eCwgb3V0KSkKKysJCQkJcmV0dXJuIDA7CisrCQkJVnRtcCA9IG91dDsKKysJCQl9Cisr CQllbHNlCisrCQkJeworKwkJCWlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5WLCBOVUxMKSkK KysJCQkJcmV0dXJuIDA7CisrCQkJaWYgKCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBobWFj LT5WKSkKKysJCQkJcmV0dXJuIDA7CisrCQkJbWVtY3B5KG91dCwgaG1hYy0+Viwgb3V0bGVuKTsK KysJCQlicmVhazsKKysJCQl9CisrCQlvdXQgKz0gZGN0eC0+YmxvY2tsZW5ndGg7CisrCQlvdXRs ZW4gLT0gZGN0eC0+YmxvY2tsZW5ndGg7CisrCQl9CisrCWlmICghZHJiZ19obWFjX3VwZGF0ZShk Y3R4LCBhZGluLCBhZGluX2xlbiwgTlVMTCwgMCwgTlVMTCwgMCkpCisrCQlyZXR1cm4gMDsKKysK KysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdfaG1hY191bmluc3RhbnRpYXRl KERSQkdfQ1RYICpkY3R4KQorKwl7CisrCUhNQUNfQ1RYX2NsZWFudXAoJmRjdHgtPmQuaG1hYy5o Y3R4KTsKKysJT1BFTlNTTF9jbGVhbnNlKCZkY3R4LT5kLmhtYWMsIHNpemVvZihEUkJHX0hNQUNf Q1RYKSk7CisrCXJldHVybiAxOworKwl9CisrCisraW50IGZpcHNfZHJiZ19obWFjX2luaXQoRFJC R19DVFggKmRjdHgpCisrCXsKKysJY29uc3QgRVZQX01EICptZCA9IE5VTEw7CisrCURSQkdfSE1B Q19DVFggKmhjdHggPSAmZGN0eC0+ZC5obWFjOworKwlkY3R4LT5zdHJlbmd0aCA9IDI1NjsKKysJ c3dpdGNoIChkY3R4LT50eXBlKQorKwkJeworKwkJY2FzZSBOSURfaG1hY1dpdGhTSEExOgorKwkJ bWQgPSBFVlBfc2hhMSgpOworKwkJZGN0eC0+c3RyZW5ndGggPSAxMjg7CisrCQlicmVhazsKKysK KysJCWNhc2UgTklEX2htYWNXaXRoU0hBMjI0OgorKwkJbWQgPSBFVlBfc2hhMjI0KCk7CisrCQlk Y3R4LT5zdHJlbmd0aCA9IDE5MjsKKysJCWJyZWFrOworKworKwkJY2FzZSBOSURfaG1hY1dpdGhT SEEyNTY6CisrCQltZCA9IEVWUF9zaGEyNTYoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSBOSURf aG1hY1dpdGhTSEEzODQ6CisrCQltZCA9IEVWUF9zaGEzODQoKTsKKysJCWJyZWFrOworKworKwkJ Y2FzZSBOSURfaG1hY1dpdGhTSEE1MTI6CisrCQltZCA9IEVWUF9zaGE1MTIoKTsKKysJCWJyZWFr OworKworKwkJZGVmYXVsdDoKKysJCWRjdHgtPnN0cmVuZ3RoID0gMDsKKysJCXJldHVybiAtMjsK KysJCX0KKysgICAgICAgIGRjdHgtPmluc3RhbnRpYXRlID0gZHJiZ19obWFjX2luc3RhbnRpYXRl OworKyAgICAgICAgZGN0eC0+cmVzZWVkID0gZHJiZ19obWFjX3Jlc2VlZDsKKysgICAgICAgIGRj dHgtPmdlbmVyYXRlID0gZHJiZ19obWFjX2dlbmVyYXRlOworKyAgICAgICAgZGN0eC0+dW5pbnN0 YW50aWF0ZSA9IGRyYmdfaG1hY191bmluc3RhbnRpYXRlOworKwlITUFDX0NUWF9pbml0KCZoY3R4 LT5oY3R4KTsKKysJaGN0eC0+bWQgPSBtZDsKKysJZGN0eC0+YmxvY2tsZW5ndGggPSBNX0VWUF9N RF9zaXplKG1kKTsKKysJZGN0eC0+c2VlZGxlbiA9IE1fRVZQX01EX3NpemUobWQpOworKworKyAg ICAgICAgZGN0eC0+bWluX2VudHJvcHkgPSBkY3R4LT5zdHJlbmd0aCAvIDg7CisrICAgICAgICBk Y3R4LT5tYXhfZW50cm9weSA9IERSQkdfTUFYX0xFTkdUSDsKKysKKysgICAgICAgIGRjdHgtPm1p bl9ub25jZSA9IGRjdHgtPm1pbl9lbnRyb3B5IC8gMjsKKysgICAgICAgIGRjdHgtPm1heF9ub25j ZSA9IERSQkdfTUFYX0xFTkdUSDsKKysKKysgICAgICAgIGRjdHgtPm1heF9wZXJzID0gRFJCR19N QVhfTEVOR1RIOworKyAgICAgICAgZGN0eC0+bWF4X2FkaW4gPSBEUkJHX01BWF9MRU5HVEg7Cisr CisrICAgICAgICBkY3R4LT5tYXhfcmVxdWVzdCA9IDE8PDE2OworKyAgICAgICAgZGN0eC0+cmVz ZWVkX2ludGVydmFsID0gMTw8MjQ7CisrCisrCXJldHVybiAxOworKwl9CitkaWZmIC11cCBvcGVu c3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19saWIuYy5maXBzIG9wZW5zc2wt MS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2xpYi5jCistLS0gb3BlbnNzbC0xLjAu MS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGliLmMuZmlwcwkyMDEyLTAyLTI5IDEwOjMz OjAyLjc5NDI5NDg5OCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMv Zmlwc19kcmJnX2xpYi5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzk0Mjk0ODk4ICswMTAwCitAQCAt MCwwICsxLDU3NiBAQAorKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVA b3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysg KiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgor KyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQu IFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBu b3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vu c2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9w ZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAg ICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3Ry aWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5n CisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisr ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMg SVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0Ug QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9S CisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAq IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN QUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKKysj aW5jbHVkZSAiZmlwc19yYW5kX2xjbC5oIgorKworKy8qIFN1cHBvcnQgZnJhbWV3b3JrIGZvciBT UDgwMC05MCBEUkJHcyAqLworKworK2ludCBGSVBTX2RyYmdfaW5pdChEUkJHX0NUWCAqZGN0eCwg aW50IHR5cGUsIHVuc2lnbmVkIGludCBmbGFncykKKysJeworKwlpbnQgcnY7CisrCW1lbXNldChk Y3R4LCAwLCBzaXplb2YoRFJCR19DVFgpKTsKKysJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNf VU5JTklUSUFMSVNFRDsKKysJZGN0eC0+eGZsYWdzID0gZmxhZ3M7CisrCWRjdHgtPnR5cGUgPSB0 eXBlOworKworKwlkY3R4LT5pZmxhZ3MgPSAwOworKwlkY3R4LT5lbnRyb3B5X2Jsb2NrbGVuID0g MDsKKysJZGN0eC0+aGVhbHRoX2NoZWNrX2NudCA9IDA7CisrCWRjdHgtPmhlYWx0aF9jaGVja19p bnRlcnZhbCA9IERSQkdfSEVBTFRIX0lOVEVSVkFMOworKworKwlydiA9IGZpcHNfZHJiZ19oYXNo X2luaXQoZGN0eCk7CisrCisrCWlmIChydiA9PSAtMikKKysJCXJ2ID0gZmlwc19kcmJnX2N0cl9p bml0KGRjdHgpOworKwlpZiAocnYgPT0gLTIpCisrCQlydiA9IGZpcHNfZHJiZ19obWFjX2luaXQo ZGN0eCk7CisrCisrCWlmIChydiA8PSAwKQorKwkJeworKwkJaWYgKHJ2ID09IC0yKQorKwkJCUZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTklULCBGSVBTX1JfVU5TVVBQT1JURURfRFJCR19UWVBF KTsKKysJCWVsc2UKKysJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5JVCwgRklQU19SX0VS Uk9SX0lOSVRJQUxJU0lOR19EUkJHKTsKKysJCX0KKysKKysJLyogSWYgbm90IGluIHRlc3QgbW9k ZSBydW4gc2VsZnRlc3RzIG9uIERSQkcgb2YgdGhlIHNhbWUgdHlwZSAqLworKworKwlpZiAoIShk Y3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkpCisrCQl7CisrCQlpZiAoIUZJUFNfZHJiZ19o ZWFsdGhfY2hlY2soZGN0eCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19J TklULCBGSVBTX1JfU0VMRlRFU1RfRkFJTFVSRSk7CisrCQkJcmV0dXJuIDA7CisrCQkJfQorKwkJ fQorKworKwlyZXR1cm4gcnY7CisrCX0KKysKKytEUkJHX0NUWCAqRklQU19kcmJnX25ldyhpbnQg dHlwZSwgdW5zaWduZWQgaW50IGZsYWdzKQorKwl7CisrCURSQkdfQ1RYICpkY3R4OworKwlkY3R4 ID0gT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKERSQkdfQ1RYKSk7CisrCWlmICghZGN0eCkKKysJCXsK KysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19ORVcsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsK KysJCXJldHVybiBOVUxMOworKwkJfQorKworKwlpZiAodHlwZSA9PSAwKQorKwkJeworKwkJbWVt c2V0KGRjdHgsIDAsIHNpemVvZihEUkJHX0NUWCkpOworKwkJZGN0eC0+dHlwZSA9IDA7CisrCQlk Y3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEOworKwkJcmV0dXJuIGRjdHg7 CisrCQl9CisrCisrCWlmIChGSVBTX2RyYmdfaW5pdChkY3R4LCB0eXBlLCBmbGFncykgPD0gMCkK KysJCXsKKysJCU9QRU5TU0xfZnJlZShkY3R4KTsKKysJCXJldHVybiBOVUxMOworKwkJfQorKwkJ CisrCXJldHVybiBkY3R4OworKwl9CisrCisrdm9pZCBGSVBTX2RyYmdfZnJlZShEUkJHX0NUWCAq ZGN0eCkKKysJeworKwlpZiAoZGN0eC0+dW5pbnN0YW50aWF0ZSkKKysJCWRjdHgtPnVuaW5zdGFu dGlhdGUoZGN0eCk7CisrCS8qIERvbid0IGZyZWUgdXAgZGVmYXVsdCBEUkJHICovCisrCWlmIChk Y3R4ID09IEZJUFNfZ2V0X2RlZmF1bHRfZHJiZygpKQorKwkJeworKwkJbWVtc2V0KGRjdHgsIDAs IHNpemVvZihEUkJHX0NUWCkpOworKwkJZGN0eC0+dHlwZSA9IDA7CisrCQlkY3R4LT5zdGF0dXMg PSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEOworKwkJfQorKwllbHNlCisrCQl7CisrCQlPUEVO U1NMX2NsZWFuc2UoJmRjdHgtPmQsIHNpemVvZihkY3R4LT5kKSk7CisrCQlPUEVOU1NMX2ZyZWUo ZGN0eCk7CisrCQl9CisrCX0KKysKKytzdGF0aWMgc2l6ZV90IGZpcHNfZ2V0X2VudHJvcHkoRFJC R19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAorKwkJCQlpbnQgZW50cm9weSwgc2l6 ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQorKwl7CisrCXVuc2lnbmVkIGNoYXIgKnRvdXQs ICpwOworKwlzaXplX3QgYmwgPSBkY3R4LT5lbnRyb3B5X2Jsb2NrbGVuLCBydjsKKysJaWYgKCFk Y3R4LT5nZXRfZW50cm9weSkKKysJCXJldHVybiAwOworKwlpZiAoZGN0eC0+eGZsYWdzICYgRFJC R19GTEFHX1RFU1QgfHwgIWJsKQorKwkJcmV0dXJuIGRjdHgtPmdldF9lbnRyb3B5KGRjdHgsIHBv dXQsIGVudHJvcHksIG1pbl9sZW4sIG1heF9sZW4pOworKwlydiA9IGRjdHgtPmdldF9lbnRyb3B5 KGRjdHgsICZ0b3V0LCBlbnRyb3B5ICsgYmwsCisrCQkJCW1pbl9sZW4gKyBibCwgbWF4X2xlbiAr IGJsKTsKKysJKnBvdXQgPSB0b3V0ICsgYmw7CisrCWlmIChydiA8IChtaW5fbGVuICsgYmwpIHx8 IChydiAlIGJsKSkKKysJCXJldHVybiAwOworKwkvKiBDb21wYXJlIGNvbnNlY3V0aXZlIGJsb2Nr cyBmb3IgY29udGludW91cyBQUk5HIHRlc3QgKi8KKysJZm9yIChwID0gdG91dDsgcCA8IHRvdXQg KyBydiAtIGJsOyBwICs9IGJsKQorKwkJeworKwkJaWYgKCFtZW1jbXAocCwgcCArIGJsLCBibCkp CisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfR0VUX0VOVFJPUFksIEZJUFNfUl9FTlRS T1BZX1NPVVJDRV9TVFVDSyk7CisrCQkJcmV0dXJuIDA7CisrCQkJfQorKwkJfQorKwlydiAtPSBi bDsKKysJaWYgKHJ2ID4gbWF4X2xlbikKKysJCXJldHVybiBtYXhfbGVuOworKwlyZXR1cm4gcnY7 CisrCX0KKysKKytzdGF0aWMgdm9pZCBmaXBzX2NsZWFudXBfZW50cm9weShEUkJHX0NUWCAqZGN0 eCwKKysJCQkJCXVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pCisrCXsKKysJc2l6ZV90 IGJsOworKwlpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpCisrCQlibCA9IDA7Cisr CWVsc2UKKysJCWJsID0gZGN0eC0+ZW50cm9weV9ibG9ja2xlbjsKKysJLyogQ2FsbCBjbGVhbnVw IHdpdGggb3JpZ2luYWwgYXJndW1lbnRzICovCisrCWRjdHgtPmNsZWFudXBfZW50cm9weShkY3R4 LCBvdXQgLSBibCwgb2xlbiArIGJsKTsKKysJfQorKworKworK2ludCBGSVBTX2RyYmdfaW5zdGFu dGlhdGUoRFJCR19DVFggKmRjdHgsCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNp emVfdCBwZXJzbGVuKQorKwl7CisrCXNpemVfdCBlbnRsZW4gPSAwLCBub25jZWxlbiA9IDA7Cisr CXVuc2lnbmVkIGNoYXIgKm5vbmNlID0gTlVMTCwgKmVudHJvcHkgPSBOVUxMOworKworKyNpZiAw CisrCS8qIFB1dCBoZXJlIHNvIGVycm9yIHNjcmlwdCBwaWNrcyB0aGVtIHVwICovCisrCUZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwKKysJCQkJRklQU19SX1BFUlNPTkFMSVNB VElPTl9TVFJJTkdfVE9PX0xPTkcpOworKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFO VElBVEUsIEZJUFNfUl9JTl9FUlJPUl9TVEFURSk7CisrCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJC R19JTlNUQU5USUFURSwgRklQU19SX0FMUkVBRFlfSU5TVEFOVElBVEVEKTsKKysJRklQU2VycihG SVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRS T1BZKTsKKysJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfRVJS T1JfUkVUUklFVklOR19OT05DRSk7CisrCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5U SUFURSwgRklQU19SX0lOU1RBTlRJQVRFX0VSUk9SKTsKKysJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfRFJCR19OT1RfSU5JVElBTElTRUQpOworKyNlbmRpZgor KworKwlpbnQgciA9IDA7CisrCisrCWlmIChwZXJzbGVuID4gZGN0eC0+bWF4X3BlcnMpCisrCQl7 CisrCQlyID0gRklQU19SX1BFUlNPTkFMSVNBVElPTl9TVFJJTkdfVE9PX0xPTkc7CisrCQlnb3Rv IGVuZDsKKysJCX0KKysKKysJaWYgKCFkY3R4LT5pbnN0YW50aWF0ZSkKKysJCXsKKysJCXIgPSBG SVBTX1JfRFJCR19OT1RfSU5JVElBTElTRUQ7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYg KGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKQorKwkJeworKwkJaWYg KGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19FUlJPUikKKysJCQlyID0gRklQU19SX0lOX0VS Uk9SX1NUQVRFOworKwkJZWxzZQorKwkJCXIgPSBGSVBTX1JfQUxSRUFEWV9JTlNUQU5USUFURUQ7 CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfRVJS T1I7CisrCisrCWVudGxlbiA9IGZpcHNfZ2V0X2VudHJvcHkoZGN0eCwgJmVudHJvcHksIGRjdHgt PnN0cmVuZ3RoLAorKwkJCQlkY3R4LT5taW5fZW50cm9weSwgZGN0eC0+bWF4X2VudHJvcHkpOwor KworKwlpZiAoZW50bGVuIDwgZGN0eC0+bWluX2VudHJvcHkgfHwgZW50bGVuID4gZGN0eC0+bWF4 X2VudHJvcHkpCisrCQl7CisrCQlyID0gRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWTsK KysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoZGN0eC0+bWF4X25vbmNlID4gMCAmJiBkY3R4 LT5nZXRfbm9uY2UpCisrCQl7CisrCQlub25jZWxlbiA9IGRjdHgtPmdldF9ub25jZShkY3R4LCAm bm9uY2UsCisrCQkJCQlkY3R4LT5zdHJlbmd0aCAvIDIsCisrCQkJCQlkY3R4LT5taW5fbm9uY2Us IGRjdHgtPm1heF9ub25jZSk7CisrCisrCQlpZiAobm9uY2VsZW4gPCBkY3R4LT5taW5fbm9uY2Ug fHwgbm9uY2VsZW4gPiBkY3R4LT5tYXhfbm9uY2UpCisrCQkJeworKwkJCXIgPSBGSVBTX1JfRVJS T1JfUkVUUklFVklOR19OT05DRTsKKysJCQlnb3RvIGVuZDsKKysJCQl9CisrCisrCQl9CisrCisr CWlmICghZGN0eC0+aW5zdGFudGlhdGUoZGN0eCwgCisrCQkJCWVudHJvcHksIGVudGxlbiwKKysJ CQkJbm9uY2UsIG5vbmNlbGVuLAorKwkJCQlwZXJzLCBwZXJzbGVuKSkKKysJCXsKKysJCXIgPSBG SVBTX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHOworKwkJZ290byBlbmQ7CisrCQl9CisrCisr CisrCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1JFQURZOworKwlpZiAoIShkY3R4LT5pZmxh Z3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQpKQorKwkJZGN0eC0+cmVzZWVkX2NvdW50ZXIgPSAxOwor KworKwllbmQ6CisrCisrCWlmIChlbnRyb3B5ICYmIGRjdHgtPmNsZWFudXBfZW50cm9weSkKKysJ CWZpcHNfY2xlYW51cF9lbnRyb3B5KGRjdHgsIGVudHJvcHksIGVudGxlbik7CisrCisrCWlmIChu b25jZSAmJiBkY3R4LT5jbGVhbnVwX25vbmNlKQorKwkJZGN0eC0+Y2xlYW51cF9ub25jZShkY3R4 LCBub25jZSwgbm9uY2VsZW4pOworKworKwlpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVT X1JFQURZKQorKwkJcmV0dXJuIDE7CisrCisrCWlmIChyICYmICEoZGN0eC0+aWZsYWdzICYgRFJC R19GTEFHX05PRVJSKSkKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwg cik7CisrCisrCXJldHVybiAwOworKworKwl9CisrCisrc3RhdGljIGludCBkcmJnX3Jlc2VlZChE UkJHX0NUWCAqZGN0eCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRp bmxlbiwgaW50IGhjaGVjaykKKysJeworKwl1bnNpZ25lZCBjaGFyICplbnRyb3B5ID0gTlVMTDsK KysJc2l6ZV90IGVudGxlbiA9IDA7CisrCWludCByID0gMDsKKysKKysjaWYgMAorKwlGSVBTZXJy KEZJUFNfRl9EUkJHX1JFU0VFRCwgRklQU19SX05PVF9JTlNUQU5USUFURUQpOworKwlGSVBTZXJy KEZJUFNfRl9EUkJHX1JFU0VFRCwgRklQU19SX0FERElUSU9OQUxfSU5QVVRfVE9PX0xPTkcpOwor KyNlbmRpZgorKwlpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1JFQURZCisrCQkmJiBk Y3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfUkVTRUVEKQorKwkJeworKwkJaWYgKGRjdHgtPnN0 YXR1cyA9PSBEUkJHX1NUQVRVU19FUlJPUikKKysJCQlyID0gRklQU19SX0lOX0VSUk9SX1NUQVRF OworKwkJZWxzZSBpZihkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkK KysJCQlyID0gRklQU19SX05PVF9JTlNUQU5USUFURUQ7CisrCQlnb3RvIGVuZDsKKysJCX0KKysK KysJaWYgKCFhZGluKQorKwkJYWRpbmxlbiA9IDA7CisrCWVsc2UgaWYgKGFkaW5sZW4gPiBkY3R4 LT5tYXhfYWRpbikKKysJCXsKKysJCXIgPSBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9O RzsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19F UlJPUjsKKysJLyogUGVmb3JtIGhlYWx0aCBjaGVjayBvbiBhbGwgcmVzZWVkIG9wZXJhdGlvbnMg aWYgbm90IGEgcHJlZGljdGlvbgorKwkgKiByZXNpc3RhbmNlIHJlcXVlc3QgYW5kIG5vdCBpbiB0 ZXN0IG1vZGUuCisrCSAqLworKwlpZiAoaGNoZWNrICYmICEoZGN0eC0+eGZsYWdzICYgRFJCR19G TEFHX1RFU1QpKQorKwkJeworKwkJaWYgKCFGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKGRjdHgpKQor KwkJCXsKKysJCQlyID0gRklQU19SX1NFTEZURVNUX0ZBSUxVUkU7CisrCQkJZ290byBlbmQ7Cisr CQkJfQorKwkJfQorKworKwllbnRsZW4gPSBmaXBzX2dldF9lbnRyb3B5KGRjdHgsICZlbnRyb3B5 LCBkY3R4LT5zdHJlbmd0aCwKKysJCQkJZGN0eC0+bWluX2VudHJvcHksIGRjdHgtPm1heF9lbnRy b3B5KTsKKysKKysJaWYgKGVudGxlbiA8IGRjdHgtPm1pbl9lbnRyb3B5IHx8IGVudGxlbiA+IGRj dHgtPm1heF9lbnRyb3B5KQorKwkJeworKwkJciA9IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VO VFJPUFk7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFkY3R4LT5yZXNlZWQoZGN0eCwg ZW50cm9weSwgZW50bGVuLCBhZGluLCBhZGlubGVuKSkKKysJCWdvdG8gZW5kOworKworKwlkY3R4 LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19SRUFEWTsKKysJaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJC R19DVVNUT01fUkVTRUVEKSkKKysJCWRjdHgtPnJlc2VlZF9jb3VudGVyID0gMTsKKysJZW5kOgor KworKwlpZiAoZW50cm9weSAmJiBkY3R4LT5jbGVhbnVwX2VudHJvcHkpCisrCQlmaXBzX2NsZWFu dXBfZW50cm9weShkY3R4LCBlbnRyb3B5LCBlbnRsZW4pOworKworKwlpZiAoZGN0eC0+c3RhdHVz ID09IERSQkdfU1RBVFVTX1JFQURZKQorKwkJcmV0dXJuIDE7CisrCisrCWlmIChyICYmICEoZGN0 eC0+aWZsYWdzICYgRFJCR19GTEFHX05PRVJSKSkKKysJCUZJUFNlcnIoRklQU19GX0RSQkdfUkVT RUVELCByKTsKKysKKysJcmV0dXJuIDA7CisrCX0KKysKKytpbnQgRklQU19kcmJnX3Jlc2VlZChE UkJHX0NUWCAqZGN0eCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRp bmxlbikKKysJeworKwlyZXR1cm4gZHJiZ19yZXNlZWQoZGN0eCwgYWRpbiwgYWRpbmxlbiwgMSk7 CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19jaGVjayhEUkJHX0NUWCAqZGN0eCkKKysJ eworKwlpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpCisrCQlyZXR1cm4gMTsKKysJ ZGN0eC0+aGVhbHRoX2NoZWNrX2NudCsrOworKwlpZiAoZGN0eC0+aGVhbHRoX2NoZWNrX2NudCA+ PSBkY3R4LT5oZWFsdGhfY2hlY2tfaW50ZXJ2YWwpCisrCQl7CisrCQlpZiAoIUZJUFNfZHJiZ19o ZWFsdGhfY2hlY2soZGN0eCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19D SEVDSywgRklQU19SX1NFTEZURVNUX0ZBSUxVUkUpOworKwkJCXJldHVybiAwOworKwkJCX0KKysJ CX0KKysJcmV0dXJuIDE7CisrCX0KKysKKytpbnQgRklQU19kcmJnX2dlbmVyYXRlKERSQkdfQ1RY ICpkY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCisrCQkJaW50IHByZWRp Y3Rpb25fcmVzaXN0YW5jZSwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3Qg YWRpbmxlbikKKysJeworKwlpbnQgciA9IDA7CisrCisrCWlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxl ZCgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0dFTkVSQVRFLCBGSVBTX1Jf U0VMRlRFU1RfRkFJTEVEKTsKKysJCXJldHVybiAwOworKwkJfQorKworKwlpZiAoIWZpcHNfZHJi Z19jaGVjayhkY3R4KSkKKysJCXJldHVybiAwOworKworKwlpZiAoZGN0eC0+c3RhdHVzICE9IERS QkdfU1RBVFVTX1JFQURZCisrCQkmJiBkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfUkVTRUVE KQorKwkJeworKwkJaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19FUlJPUikKKysJCQly ID0gRklQU19SX0lOX0VSUk9SX1NUQVRFOworKwkJZWxzZSBpZihkY3R4LT5zdGF0dXMgPT0gRFJC R19TVEFUVVNfVU5JTklUSUFMSVNFRCkKKysJCQlyID0gRklQU19SX05PVF9JTlNUQU5USUFURUQ7 CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKG91dGxlbiA+IGRjdHgtPm1heF9yZXF1ZXN0 KQorKwkJeworKwkJciA9IEZJUFNfUl9SRVFVRVNUX1RPT19MQVJHRV9GT1JfRFJCRzsKKysJCXJl dHVybiAwOworKwkJfQorKworKwlpZiAoYWRpbmxlbiA+IGRjdHgtPm1heF9hZGluKQorKwkJewor KwkJciA9IEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX1RPT19MT05HOworKwkJZ290byBlbmQ7Cisr CQl9CisrCisrCWlmIChkY3R4LT5pZmxhZ3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQpCisrCQlkY3R4 LT5nZW5lcmF0ZShkY3R4LCBOVUxMLCBvdXRsZW4sIE5VTEwsIDApOworKwllbHNlIGlmIChkY3R4 LT5yZXNlZWRfY291bnRlciA+PSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWwpCisrCQlkY3R4LT5zdGF0 dXMgPSBEUkJHX1NUQVRVU19SRVNFRUQ7CisrCisrCWlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19T VEFUVVNfUkVTRUVEIHx8IHByZWRpY3Rpb25fcmVzaXN0YW5jZSkKKysJCXsKKysJCS8qIElmIHBy ZWRpY3Rpb24gcmVzaXN0YW5jZSByZXF1ZXN0IGRvbid0IGRvIGhlYWx0aCBjaGVjayAqLworKwkJ aW50IGhjaGVjayA9IHByZWRpY3Rpb25fcmVzaXN0YW5jZSA/IDAgOiAxOworKwkJCisrCQlpZiAo IWRyYmdfcmVzZWVkKGRjdHgsIGFkaW4sIGFkaW5sZW4sIGhjaGVjaykpCisrCQkJeworKwkJCXIg PSBGSVBTX1JfUkVTRUVEX0VSUk9SOworKwkJCWdvdG8gZW5kOworKwkJCX0KKysJCWFkaW4gPSBO VUxMOworKwkJYWRpbmxlbiA9IDA7CisrCQl9CisrCisrCWlmICghZGN0eC0+Z2VuZXJhdGUoZGN0 eCwgb3V0LCBvdXRsZW4sIGFkaW4sIGFkaW5sZW4pKQorKwkJeworKwkJciA9IEZJUFNfUl9HRU5F UkFURV9FUlJPUjsKKysJCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX0VSUk9SOworKwkJZ290 byBlbmQ7CisrCQl9CisrCWlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfQ1VTVE9NX1JFU0VFRCkp CisrCQl7CisrCQlpZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj0gZGN0eC0+cmVzZWVkX2ludGVy dmFsKQorKwkJCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1JFU0VFRDsKKysJCWVsc2UKKysJ CQlkY3R4LT5yZXNlZWRfY291bnRlcisrOworKwkJfQorKworKwllbmQ6CisrCWlmIChyKQorKwkJ eworKwkJaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJCR19GTEFHX05PRVJSKSkKKysJCQlGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfR0VORVJBVEUsIHIpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCisr CXJldHVybiAxOworKwl9CisrCisraW50IEZJUFNfZHJiZ191bmluc3RhbnRpYXRlKERSQkdfQ1RY ICpkY3R4KQorKwl7CisrCWludCBydjsKKysJaWYgKCFkY3R4LT51bmluc3RhbnRpYXRlKQorKwkJ cnYgPSAxOworKwllbHNlCisrCQlydiA9IGRjdHgtPnVuaW5zdGFudGlhdGUoZGN0eCk7CisrCS8q IEFsdGhvdWdoIHdlJ2QgbGlrZSB0byBjbGVhbnNlIGhlcmUgd2UgY2FuJ3QgYmVjYXVzZSB3ZSBo YXZlIHRvCisrCSAqIHRlc3QgdGhlIHVuaW5zdGFudGlhdGUgcmVhbGx5IHplcm9lcyB0aGUgZGF0 YS4KKysJICovCisrCW1lbXNldCgmZGN0eC0+ZCwgMCwgc2l6ZW9mKGRjdHgtPmQpKTsKKysJZGN0 eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRDsKKysJLyogSWYgbWV0aG9kIGhh cyBwcm9ibGVtcyB1bmluc3RhbnRpYXRpbmcsIHJldHVybiBlcnJvciAqLworKwlyZXR1cm4gcnY7 CisrCX0KKysKKytpbnQgRklQU19kcmJnX3NldF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgsCisr CXNpemVfdCAoKmdldF9lbnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91 dCwKKysJCQkJaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbiksCisr CXZvaWQgKCpjbGVhbnVwX2VudHJvcHkpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91 dCwgc2l6ZV90IG9sZW4pLAorKwlzaXplX3QgZW50cm9weV9ibG9ja2xlbiwKKysJc2l6ZV90ICgq Z2V0X25vbmNlKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysJCQkJaW50 IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbiksCisrCXZvaWQgKCpjbGVh bnVwX25vbmNlKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVu KSkKKysJeworKwlpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQp CisrCQlyZXR1cm4gMDsKKysJZGN0eC0+ZW50cm9weV9ibG9ja2xlbiA9IGVudHJvcHlfYmxvY2ts ZW47CisrCWRjdHgtPmdldF9lbnRyb3B5ID0gZ2V0X2VudHJvcHk7CisrCWRjdHgtPmNsZWFudXBf ZW50cm9weSA9IGNsZWFudXBfZW50cm9weTsKKysJZGN0eC0+Z2V0X25vbmNlID0gZ2V0X25vbmNl OworKwlkY3R4LT5jbGVhbnVwX25vbmNlID0gY2xlYW51cF9ub25jZTsKKysJcmV0dXJuIDE7Cisr CX0KKysKKytpbnQgRklQU19kcmJnX3NldF9yYW5kX2NhbGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwK KysJc2l6ZV90ICgqZ2V0X2FkaW4pKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0 KSwKKysJdm9pZCAoKmNsZWFudXBfYWRpbikoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAq b3V0LCBzaXplX3Qgb2xlbiksCisrCWludCAoKnJhbmRfc2VlZF9jYikoRFJCR19DVFggKmN0eCwg Y29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtKSwKKysJaW50ICgqcmFuZF9hZGRfY2IpKERSQkdfQ1RY ICpjdHgsCisrCQkJCWNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSwgZG91YmxlIGVudHJvcHkpKQor Kwl7CisrCWlmIChkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKKysJ CXJldHVybiAwOworKwlkY3R4LT5nZXRfYWRpbiA9IGdldF9hZGluOworKwlkY3R4LT5jbGVhbnVw X2FkaW4gPSBjbGVhbnVwX2FkaW47CisrCWRjdHgtPnJhbmRfc2VlZF9jYiA9IHJhbmRfc2VlZF9j YjsKKysJZGN0eC0+cmFuZF9hZGRfY2IgPSByYW5kX2FkZF9jYjsKKysJcmV0dXJuIDE7CisrCX0K KysKKyt2b2lkICpGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKERSQkdfQ1RYICpkY3R4KQorKwl7Cisr CXJldHVybiBkY3R4LT5hcHBfZGF0YTsKKysJfQorKworK3ZvaWQgRklQU19kcmJnX3NldF9hcHBf ZGF0YShEUkJHX0NUWCAqZGN0eCwgdm9pZCAqYXBwX2RhdGEpCisrCXsKKysJZGN0eC0+YXBwX2Rh dGEgPSBhcHBfZGF0YTsKKysJfQorKworK3NpemVfdCBGSVBTX2RyYmdfZ2V0X2Jsb2NrbGVuZ3Ro KERSQkdfQ1RYICpkY3R4KQorKwl7CisrCXJldHVybiBkY3R4LT5ibG9ja2xlbmd0aDsKKysJfQor KworK2ludCBGSVBTX2RyYmdfZ2V0X3N0cmVuZ3RoKERSQkdfQ1RYICpkY3R4KQorKwl7CisrCXJl dHVybiBkY3R4LT5zdHJlbmd0aDsKKysJfQorKworK3ZvaWQgRklQU19kcmJnX3NldF9jaGVja19p bnRlcnZhbChEUkJHX0NUWCAqZGN0eCwgaW50IGludGVydmFsKQorKwl7CisrCWRjdHgtPmhlYWx0 aF9jaGVja19pbnRlcnZhbCA9IGludGVydmFsOworKwl9CisrCisrdm9pZCBGSVBTX2RyYmdfc2V0 X3Jlc2VlZF9pbnRlcnZhbChEUkJHX0NUWCAqZGN0eCwgaW50IGludGVydmFsKQorKwl7CisrCWRj dHgtPnJlc2VlZF9pbnRlcnZhbCA9IGludGVydmFsOworKwl9CisrCisrc3RhdGljIGludCBkcmJn X3N0aWNrID0gMDsKKysKKyt2b2lkIEZJUFNfZHJiZ19zdGljayhpbnQgb25vZmYpCisrCXsKKysJ ZHJiZ19zdGljayA9IG9ub2ZmOworKwl9CisrCisrLyogQ29udGludW91cyBEUkJHIHV0aWxpdHkg ZnVuY3Rpb24gKi8KKytpbnQgZmlwc19kcmJnX2Nwcm5nX3Rlc3QoRFJCR19DVFggKmRjdHgsIGNv bnN0IHVuc2lnbmVkIGNoYXIgKm91dCkKKysJeworKwkvKiBObyBDUFJORyBpbiB0ZXN0IG1vZGUg Ki8KKysJaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKQorKwkJcmV0dXJuIDE7Cisr CS8qIENoZWNrIGJsb2NrIGlzIHZhbGlkOiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisrCWlmIChk Y3R4LT5sYl92YWxpZCA9PSAwKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0NQ Uk5HX1RFU1QsIEZJUFNfUl9JTlRFUk5BTF9FUlJPUik7CisrCQlmaXBzX3NldF9zZWxmdGVzdF9m YWlsKCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKGRyYmdfc3RpY2spCisrCQltZW1jcHko ZGN0eC0+bGIsIG91dCwgZGN0eC0+YmxvY2tsZW5ndGgpOworKwkvKiBDaGVjayBhZ2FpbnN0IGxh c3QgYmxvY2s6IGZhaWwgaWYgbWF0Y2ggKi8KKysJaWYgKCFtZW1jbXAoZGN0eC0+bGIsIG91dCwg ZGN0eC0+YmxvY2tsZW5ndGgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0NQ Uk5HX1RFU1QsIEZJUFNfUl9EUkJHX1NUVUNLKTsKKysJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwo KTsKKysJCXJldHVybiAwOworKwkJfQorKwkvKiBTYXZlIGxhc3QgYmxvY2sgZm9yIG5leHQgY29t cGFyaXNvbiAqLworKwltZW1jcHkoZGN0eC0+bGIsIG91dCwgZGN0eC0+YmxvY2tsZW5ndGgpOwor KwlyZXR1cm4gMTsKKysJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlw cy9maXBzX2RyYmdfcmFuZC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9m aXBzX2RyYmdfcmFuZC5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBz X2RyYmdfcmFuZC5jLmZpcHMJMjAxMi0wMi0yOSAxMDozMzowMi43OTQyOTQ4OTggKzAxMDAKKysr KyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMJMjAxMi0w Mi0yOSAxMDozMzowMi43OTQyOTQ4OTggKzAxMDAKK0BAIC0wLDAgKzEsMTcyIEBACisrLyogZmlw cy9yYW5kL2ZpcHNfZHJiZ19yYW5kLmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBI ZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0Lgor KyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK KysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRp c3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLyki CisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK KysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAg ICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3 cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisr ICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4g dGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5v cmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wg UFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK KysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5T U0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqLworKworKyNpbmNsdWRlIDxz dHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv Zmlwc19yYW5kLmg+CisrI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKKysKKysvKiBNYXBwaW5n IG9mIFNQODAwLTkwIERSQkdzIHRvIE9wZW5TU0wgUkFORF9NRVRIT0QgKi8KKysKKysvKiBTaW5j ZSB3ZSBvbmx5IGhhdmUgb25lIGdsb2JhbCBQUk5HIHVzZWQgYXQgYW55IHRpbWUgaW4gT3BlblNT TCB1c2UgYSBnbG9iYWwKKysgKiB2YXJpYWJsZSB0byBzdG9yZSBjb250ZXh0LgorKyAqLworKwor K3N0YXRpYyBEUkJHX0NUWCBvc3NsX2RjdHg7CisrCisrRFJCR19DVFggKkZJUFNfZ2V0X2RlZmF1 bHRfZHJiZyh2b2lkKQorKwl7CisrCXJldHVybiAmb3NzbF9kY3R4OworKwl9CisrCisrc3RhdGlj IGludCBmaXBzX2RyYmdfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBpbnQgY291bnQpCisrCXsK KysJRFJCR19DVFggKmRjdHggPSAmb3NzbF9kY3R4OworKwlpbnQgcnYgPSAwOworKwl1bnNpZ25l ZCBjaGFyICphZGluID0gTlVMTDsKKysJc2l6ZV90IGFkaW5sZW4gPSAwOworKwlDUllQVE9fd19s b2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlkbyAKKysJCXsKKysJCXNpemVfdCByY250OworKwkJ aWYgKGNvdW50ID4gKGludClkY3R4LT5tYXhfcmVxdWVzdCkKKysJCQlyY250ID0gZGN0eC0+bWF4 X3JlcXVlc3Q7CisrCQllbHNlCisrCQkJcmNudCA9IGNvdW50OworKwkJaWYgKGRjdHgtPmdldF9h ZGluKQorKwkJCXsKKysJCQlhZGlubGVuID0gZGN0eC0+Z2V0X2FkaW4oZGN0eCwgJmFkaW4pOwor KwkJCWlmIChhZGlubGVuICYmICFhZGluKQorKwkJCQl7CisrCQkJCUZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19CWVRFUywgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfQURESVRJT05BTF9JTlBVVCk7 CisrCQkJCWdvdG8gZXJyOworKwkJCQl9CisrCQkJfQorKwkJcnYgPSBGSVBTX2RyYmdfZ2VuZXJh dGUoZGN0eCwgb3V0LCByY250LCAwLCBhZGluLCBhZGlubGVuKTsKKysJCWlmIChhZGluKQorKwkJ CXsKKysJCQlpZiAoZGN0eC0+Y2xlYW51cF9hZGluKQorKwkJCQlkY3R4LT5jbGVhbnVwX2FkaW4o ZGN0eCwgYWRpbiwgYWRpbmxlbik7CisrCQkJYWRpbiA9IE5VTEw7CisrCQkJfQorKwkJaWYgKCFy dikKKysJCQlnb3RvIGVycjsKKysJCW91dCArPSByY250OworKwkJY291bnQgLT0gcmNudDsKKysJ CX0KKysJd2hpbGUgKGNvdW50KTsKKysJcnYgPSAxOworKwllcnI6CisrCUNSWVBUT193X3VubG9j ayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0dXJuIHJ2OworKwl9CisrCisrc3RhdGljIGludCBm aXBzX2RyYmdfcHNldWRvKHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IGNvdW50KQorKwl7CisrCWlm IChmaXBzX2RyYmdfYnl0ZXMob3V0LCBjb3VudCkgPD0gMCkKKysJCXJldHVybiAtMTsKKysJcmV0 dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19zdGF0dXModm9pZCkKKysJewor KwlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7CisrCWludCBydjsKKysJQ1JZUFRPX3JfbG9j ayhDUllQVE9fTE9DS19SQU5EKTsKKysJcnYgPSBkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNf UkVBRFkgPyAxIDogMDsKKysJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwly ZXR1cm4gcnY7CisrCX0KKysKKytzdGF0aWMgdm9pZCBmaXBzX2RyYmdfY2xlYW51cCh2b2lkKQor Kwl7CisrCURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKKysJQ1JZUFRPX3dfbG9jayhDUllQ VE9fTE9DS19SQU5EKTsKKysJRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCk7CisrCUNSWVBU T193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJfQorKworK3N0YXRpYyBpbnQgZmlwc19k cmJnX3NlZWQoY29uc3Qgdm9pZCAqc2VlZCwgaW50IHNlZWRsZW4pCisrCXsKKysJRFJCR19DVFgg KmRjdHggPSAmb3NzbF9kY3R4OworKwlpZiAoZGN0eC0+cmFuZF9zZWVkX2NiKQorKwkJcmV0dXJu IGRjdHgtPnJhbmRfc2VlZF9jYihkY3R4LCBzZWVkLCBzZWVkbGVuKTsKKysJcmV0dXJuIDE7Cisr CX0KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19hZGQoY29uc3Qgdm9pZCAqc2VlZCwgaW50IHNl ZWRsZW4sCisrCQkJCQlkb3VibGUgYWRkX2VudHJvcHkpCisrCXsKKysJRFJCR19DVFggKmRjdHgg PSAmb3NzbF9kY3R4OworKwlpZiAoZGN0eC0+cmFuZF9hZGRfY2IpCisrCQlyZXR1cm4gZGN0eC0+ cmFuZF9hZGRfY2IoZGN0eCwgc2VlZCwgc2VlZGxlbiwgYWRkX2VudHJvcHkpOworKwlyZXR1cm4g MTsKKysJfQorKworK3N0YXRpYyBjb25zdCBSQU5EX01FVEhPRCByYW5kX2RyYmdfbWV0aCA9Cisr CXsKKysJZmlwc19kcmJnX3NlZWQsCisrCWZpcHNfZHJiZ19ieXRlcywKKysJZmlwc19kcmJnX2Ns ZWFudXAsCisrCWZpcHNfZHJiZ19hZGQsCisrCWZpcHNfZHJiZ19wc2V1ZG8sCisrCWZpcHNfZHJi Z19zdGF0dXMKKysJfTsKKysKKytjb25zdCBSQU5EX01FVEhPRCAqRklQU19kcmJnX21ldGhvZCh2 b2lkKQorKwl7CisrCXJldHVybiAmcmFuZF9kcmJnX21ldGg7CisrCX0KKysKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmMuZmlwcyBv cGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5jCistLS0g b3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuYy5maXBz CTIwMTItMDItMjkgMTA6MzM6MDIuNzk1Mjk0OTA3ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1i ZXRhMy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuYwkyMDEyLTAyLTI5IDEwOjMzOjAy Ljc5NTI5NDkwNyArMDEwMAorQEAgLTAsMCArMSw4NjIgQEAKKysvKiBmaXBzL3JhbmQvZmlwc19k cmJnX3NlbGZ0ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0 ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8q ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3Qu ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z CisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlv bi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysg KiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11 c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBs aWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5 ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisr ICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVk aXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxv d2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysg KgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBg YEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVD VCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK KysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSAiZmlwc19yYW5kX2xj bC5oIgorKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKKysKKysjaW5jbHVkZSAiZmlwc19kcmJnX3Nl bGZ0ZXN0LmgiCisrCisrdHlwZWRlZiBzdHJ1Y3QgeworKwlpbnQgcG9zdDsKKysJaW50IG5pZDsK KysJdW5zaWduZWQgaW50IGZsYWdzOworKworKwkvKiBLQVQgZGF0YSBmb3Igbm8gUFIgKi8KKysJ Y29uc3QgdW5zaWduZWQgY2hhciAqZW50OworKwlzaXplX3QgZW50bGVuOworKwljb25zdCB1bnNp Z25lZCBjaGFyICpub25jZTsKKysJc2l6ZV90IG5vbmNlbGVuOworKwljb25zdCB1bnNpZ25lZCBj aGFyICpwZXJzOworKwlzaXplX3QgcGVyc2xlbjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqYWRp bjsKKysJc2l6ZV90IGFkaW5sZW47CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudHJlc2VlZDsK KysJc2l6ZV90IGVudHJlc2VlZGxlbjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbnJlc2Vl ZDsKKysJc2l6ZV90IGFkaW5yZXNlZWRsZW47CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4y OworKwlzaXplX3QgYWRpbjJsZW47CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdDsKKysJc2l6 ZV90IGthdGxlbjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0MjsKKysJc2l6ZV90IGthdDJs ZW47CisrCisrCS8qIEtBVCBkYXRhIGZvciBQUiAqLworKwljb25zdCB1bnNpZ25lZCBjaGFyICpl bnRfcHI7CisrCXNpemVfdCBlbnRsZW5fcHI7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNl X3ByOworKwlzaXplX3Qgbm9uY2VsZW5fcHI7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnNf cHI7CisrCXNpemVfdCBwZXJzbGVuX3ByOworKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGluX3By OworKwlzaXplX3QgYWRpbmxlbl9wcjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqZW50cHJfcHI7 CisrCXNpemVfdCBlbnRwcmxlbl9wcjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbmdfcHI7 CisrCXNpemVfdCBhZGluZ2xlbl9wcjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqZW50Z19wcjsK KysJc2l6ZV90IGVudGdsZW5fcHI7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdF9wcjsKKysJ c2l6ZV90IGthdGxlbl9wcjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0Ml9wcjsKKysJc2l6 ZV90IGthdDJsZW5fcHI7CisrCisrCX0gRFJCR19TRUxGVEVTVF9EQVRBOworKworKyNkZWZpbmUg bWFrZV9kcmJnX3Rlc3RfZGF0YShuaWQsIGZsYWcsIHByLCBwKSB7cCwgbmlkLCBmbGFnIHwgRFJC R19GTEFHX1RFU1QsIFwKKysJcHIjI19lbnRyb3B5aW5wdXQsIHNpemVvZihwciMjX2VudHJvcHlp bnB1dCksIFwKKysJcHIjI19ub25jZSwgc2l6ZW9mKHByIyNfbm9uY2UpLCBcCisrCXByIyNfcGVy c29uYWxpemF0aW9uc3RyaW5nLCBzaXplb2YocHIjI19wZXJzb25hbGl6YXRpb25zdHJpbmcpLCBc CisrCXByIyNfYWRkaXRpb25hbGlucHV0LCBzaXplb2YocHIjI19hZGRpdGlvbmFsaW5wdXQpLCBc CisrCXByIyNfZW50cm9weWlucHV0cmVzZWVkLCBzaXplb2YocHIjI19lbnRyb3B5aW5wdXRyZXNl ZWQpLCBcCisrCXByIyNfYWRkaXRpb25hbGlucHV0cmVzZWVkLCBzaXplb2YocHIjI19hZGRpdGlv bmFsaW5wdXRyZXNlZWQpLCBcCisrCXByIyNfYWRkaXRpb25hbGlucHV0Miwgc2l6ZW9mKHByIyNf YWRkaXRpb25hbGlucHV0MiksIFwKKysJcHIjI19pbnRfcmV0dXJuZWRiaXRzLCBzaXplb2YocHIj I19pbnRfcmV0dXJuZWRiaXRzKSwgXAorKwlwciMjX3JldHVybmVkYml0cywgc2l6ZW9mKHByIyNf cmV0dXJuZWRiaXRzKSwgXAorKwlwciMjX3ByX2VudHJvcHlpbnB1dCwgc2l6ZW9mKHByIyNfcHJf ZW50cm9weWlucHV0KSwgXAorKwlwciMjX3ByX25vbmNlLCBzaXplb2YocHIjI19wcl9ub25jZSks IFwKKysJcHIjI19wcl9wZXJzb25hbGl6YXRpb25zdHJpbmcsIHNpemVvZihwciMjX3ByX3BlcnNv bmFsaXphdGlvbnN0cmluZyksIFwKKysJcHIjI19wcl9hZGRpdGlvbmFsaW5wdXQsIHNpemVvZihw ciMjX3ByX2FkZGl0aW9uYWxpbnB1dCksIFwKKysJcHIjI19wcl9lbnRyb3B5aW5wdXRwciwgc2l6 ZW9mKHByIyNfcHJfZW50cm9weWlucHV0cHIpLCBcCisrCXByIyNfcHJfYWRkaXRpb25hbGlucHV0 Miwgc2l6ZW9mKHByIyNfcHJfYWRkaXRpb25hbGlucHV0MiksIFwKKysJcHIjI19wcl9lbnRyb3B5 aW5wdXRwcjIsIHNpemVvZihwciMjX3ByX2VudHJvcHlpbnB1dHByMiksIFwKKysJcHIjI19wcl9p bnRfcmV0dXJuZWRiaXRzLCBzaXplb2YocHIjI19wcl9pbnRfcmV0dXJuZWRiaXRzKSwgXAorKwlw ciMjX3ByX3JldHVybmVkYml0cywgc2l6ZW9mKHByIyNfcHJfcmV0dXJuZWRiaXRzKSwgXAorKwl9 CisrCisrI2RlZmluZSBtYWtlX2RyYmdfdGVzdF9kYXRhX2RmKG5pZCwgcHIsIHApIFwKKysJbWFr ZV9kcmJnX3Rlc3RfZGF0YShuaWQsIERSQkdfRkxBR19DVFJfVVNFX0RGLCBwciwgcCkKKysKKysj ZGVmaW5lIG1ha2VfZHJiZ190ZXN0X2RhdGFfZWMoY3VydmUsIG1kLCBwciwgcCkgXAorKwltYWtl X2RyYmdfdGVzdF9kYXRhKChjdXJ2ZSA8PCAxNikgfCBtZCAsIDAsIHByLCBwKQorKworK3N0YXRp YyBEUkJHX1NFTEZURVNUX0RBVEEgZHJiZ190ZXN0W10gPSB7CisrCW1ha2VfZHJiZ190ZXN0X2Rh dGFfZGYoTklEX2Flc18xMjhfY3RyLCBhZXNfMTI4X3VzZV9kZiwgMCksCisrCW1ha2VfZHJiZ190 ZXN0X2RhdGFfZGYoTklEX2Flc18xOTJfY3RyLCBhZXNfMTkyX3VzZV9kZiwgMCksCisrCW1ha2Vf ZHJiZ190ZXN0X2RhdGFfZGYoTklEX2Flc18yNTZfY3RyLCBhZXNfMjU2X3VzZV9kZiwgMSksCisr CW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2Flc18xMjhfY3RyLCAwLCBhZXNfMTI4X25vX2RmLCAw KSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfYWVzXzE5Ml9jdHIsIDAsIGFlc18xOTJfbm9f ZGYsIDApLAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9hZXNfMjU2X2N0ciwgMCwgYWVzXzI1 Nl9ub19kZiwgMSksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTEsIDAsIHNoYTEsIDAp LAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGEyMjQsIDAsIHNoYTIyNCwgMCksCisrCW1h a2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTI1NiwgMCwgc2hhMjU2LCAxKSwKKysJbWFrZV9kcmJn X3Rlc3RfZGF0YShOSURfc2hhMzg0LCAwLCBzaGEzODQsIDApLAorKwltYWtlX2RyYmdfdGVzdF9k YXRhKE5JRF9zaGE1MTIsIDAsIHNoYTUxMiwgMCksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklE X2htYWNXaXRoU0hBMSwgMCwgaG1hY19zaGExLCAwKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShO SURfaG1hY1dpdGhTSEEyMjQsIDAsIGhtYWNfc2hhMjI0LCAwKSwKKysJbWFrZV9kcmJnX3Rlc3Rf ZGF0YShOSURfaG1hY1dpdGhTSEEyNTYsIDAsIGhtYWNfc2hhMjU2LCAxKSwKKysJbWFrZV9kcmJn X3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEEzODQsIDAsIGhtYWNfc2hhMzg0LCAwKSwKKysJbWFr ZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEE1MTIsIDAsIGhtYWNfc2hhNTEyLCAwKSwK KysJezAsMCwwfQorKwl9OworKworK3R5cGVkZWYgc3RydWN0IAorKwl7CisrCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmVudDsKKysJc2l6ZV90IGVudGxlbjsKKysJaW50IGVudGNudDsKKysJY29uc3Qg dW5zaWduZWQgY2hhciAqbm9uY2U7CisrCXNpemVfdCBub25jZWxlbjsKKysJaW50IG5vbmNlY250 OworKwl9IFRFU1RfRU5UOworKworK3N0YXRpYyBzaXplX3QgdGVzdF9lbnRyb3B5KERSQkdfQ1RY ICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCisrCXsK KysJVEVTVF9FTlQgKnQgPSBGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKGRjdHgpOworKwkqcG91dCA9 ICh1bnNpZ25lZCBjaGFyICopdC0+ZW50OworKwl0LT5lbnRjbnQrKzsKKysJcmV0dXJuIHQtPmVu dGxlbjsKKysJfQorKworK3N0YXRpYyBzaXplX3QgdGVzdF9ub25jZShEUkJHX0NUWCAqZGN0eCwg dW5zaWduZWQgY2hhciAqKnBvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQorKwl7CisrCVRFU1Rf RU5UICp0ID0gRklQU19kcmJnX2dldF9hcHBfZGF0YShkY3R4KTsKKysJKnBvdXQgPSAodW5zaWdu ZWQgY2hhciAqKXQtPm5vbmNlOworKwl0LT5ub25jZWNudCsrOworKwlyZXR1cm4gdC0+bm9uY2Vs ZW47CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19zaW5nbGVfa2F0KERSQkdfQ1RYICpk Y3R4LCBEUkJHX1NFTEZURVNUX0RBVEEgKnRkLAorKwkJCQkJCQkJaW50IHF1aWNrKQorKwl7Cisr CVRFU1RfRU5UIHQ7CisrCWludCBydiA9IDA7CisrCXNpemVfdCBhZGlubGVuOworKwl1bnNpZ25l ZCBjaGFyIHJhbmRvdXRbMTAyNF07CisrCisrCS8qIEluaXRpYWwgdGVzdCB3aXRob3V0IFBSICov CisrCisrCS8qIEluc3RhbnRpYXRlIERSQkcgd2l0aCB0ZXN0IGVudHJvcHksIG5vbmNlIGFuZCBw ZXJzb25hbGlzYXRpb24KKysJICogc3RyaW5nLgorKwkgKi8KKysKKysJaWYgKCFGSVBTX2RyYmdf aW5pdChkY3R4LCB0ZC0+bmlkLCB0ZC0+ZmxhZ3MpKQorKwkJcmV0dXJuIDA7CisrCWlmICghRklQ U19kcmJnX3NldF9jYWxsYmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAwLCB0ZXN0X25vbmNl LCAwKSkKKysJCXJldHVybiAwOworKworKwlGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKGRjdHgsICZ0 KTsKKysKKysJdC5lbnQgPSB0ZC0+ZW50OworKwl0LmVudGxlbiA9IHRkLT5lbnRsZW47CisrCXQu bm9uY2UgPSB0ZC0+bm9uY2U7CisrCXQubm9uY2VsZW4gPSB0ZC0+bm9uY2VsZW47CisrCXQuZW50 Y250ID0gMDsKKysJdC5ub25jZWNudCA9IDA7CisrCisrCWlmICghRklQU19kcmJnX2luc3RhbnRp YXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikpCisrCQlnb3RvIGVycjsKKysKKysJLyog Tm90ZSBmb3IgQ1RSIHdpdGhvdXQgREYgc29tZSBhZGRpdGlvbmFsIGlucHV0IHZhbHVlcworKwkg KiBpZ25vcmUgYnl0ZXMgYWZ0ZXIgdGhlIGtleWxlbmd0aDogc28gcmVkdWNlIGFkaW5sZW4KKysJ ICogdG8gaGFsZiB0byBlbnN1cmUgaW52YWxpZCBkYXRhIGlzIGZlZCBpbi4KKysJICovCisrCWlm ICghZmlwc19wb3N0X2NvcnJ1cHQoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT5p ZmxhZ3MpKQorKwkJYWRpbmxlbiA9IHRkLT5hZGlubGVuIC8gMjsKKysJZWxzZQorKwkJYWRpbmxl biA9IHRkLT5hZGlubGVuOworKworKwkvKiBHZW5lcmF0ZSB3aXRoIG5vIFBSIGFuZCB2ZXJpZnkg b3V0cHV0IG1hdGNoZXMgZXhwZWN0ZWQgZGF0YSAqLworKwlpZiAoIUZJUFNfZHJiZ19nZW5lcmF0 ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAorKwkJCQl0ZC0+YWRpbiwgYWRpbmxlbikp CisrCQlnb3RvIGVycjsKKysKKysJaWYgKG1lbWNtcChyYW5kb3V0LCB0ZC0+a2F0LCB0ZC0+a2F0 bGVuKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FULCBGSVBT X1JfTk9QUl9URVNUMV9GQUlMVVJFKTsKKysJCWdvdG8gZXJyMjsKKysJCX0KKysJLyogSWYgYWJi cmV2aWF0ZWQgUE9TVCBlbmQgb2YgdGVzdCAqLworKwlpZiAocXVpY2spCisrCQl7CisrCQlydiA9 IDE7CisrCQlnb3RvIGVycjsKKysJCX0KKysJLyogUmVzZWVkIERSQkcgd2l0aCB0ZXN0IGVudHJv cHkgYW5kIGFkZGl0aW9uYWwgaW5wdXQgKi8KKysJdC5lbnQgPSB0ZC0+ZW50cmVzZWVkOworKwl0 LmVudGxlbiA9IHRkLT5lbnRyZXNlZWRsZW47CisrCisrCWlmICghRklQU19kcmJnX3Jlc2VlZChk Y3R4LCB0ZC0+YWRpbnJlc2VlZCwgdGQtPmFkaW5yZXNlZWRsZW4pKQorKwkJZ290byBlcnI7Cisr CisrCS8qIEdlbmVyYXRlIHdpdGggbm8gUFIgYW5kIHZlcmlmeSBvdXRwdXQgbWF0Y2hlcyBleHBl Y3RlZCBkYXRhICovCisrCWlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRk LT5rYXQybGVuLCAwLAorKwkJCQl0ZC0+YWRpbjIsIHRkLT5hZGluMmxlbikpCisrCQlnb3RvIGVy cjsKKysKKysJaWYgKG1lbWNtcChyYW5kb3V0LCB0ZC0+a2F0MiwgdGQtPmthdDJsZW4pKQorKwkJ eworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9OT1BSX1RF U1QyX0ZBSUxVUkUpOworKwkJZ290byBlcnIyOworKwkJfQorKworKwlGSVBTX2RyYmdfdW5pbnN0 YW50aWF0ZShkY3R4KTsKKysKKysJLyogTm93IHRlc3Qgd2l0aCBQUiAqLworKworKwkvKiBJbnN0 YW50aWF0ZSBEUkJHIHdpdGggdGVzdCBlbnRyb3B5LCBub25jZSBhbmQgcGVyc29uYWxpc2F0aW9u CisrCSAqIHN0cmluZy4KKysJICovCisrCWlmICghRklQU19kcmJnX2luaXQoZGN0eCwgdGQtPm5p ZCwgdGQtPmZsYWdzKSkKKysJCXJldHVybiAwOworKwlpZiAoIUZJUFNfZHJiZ19zZXRfY2FsbGJh Y2tzKGRjdHgsIHRlc3RfZW50cm9weSwgMCwgMCwgdGVzdF9ub25jZSwgMCkpCisrCQlyZXR1cm4g MDsKKysKKysJRklQU19kcmJnX3NldF9hcHBfZGF0YShkY3R4LCAmdCk7CisrCisrCXQuZW50ID0g dGQtPmVudF9wcjsKKysJdC5lbnRsZW4gPSB0ZC0+ZW50bGVuX3ByOworKwl0Lm5vbmNlID0gdGQt Pm5vbmNlX3ByOworKwl0Lm5vbmNlbGVuID0gdGQtPm5vbmNlbGVuX3ByOworKwl0LmVudGNudCA9 IDA7CisrCXQubm9uY2VjbnQgPSAwOworKworKwlpZiAoIUZJUFNfZHJiZ19pbnN0YW50aWF0ZShk Y3R4LCB0ZC0+cGVyc19wciwgdGQtPnBlcnNsZW5fcHIpKQorKwkJZ290byBlcnI7CisrCisrCS8q IE5vdyBnZW5lcmF0ZSB3aXRoIFBSOiB3ZSBuZWVkIHRvIHN1cHBseSBlbnRyb3B5IGFzIHRoaXMg d2lsbAorKwkgKiBwZXJmb3JtIGEgcmVzZWVkIG9wZXJhdGlvbi4gQ2hlY2sgb3V0cHV0IG1hdGNo ZXMgZXhwZWN0ZWQgdmFsdWUuCisrCSAqLworKworKwl0LmVudCA9IHRkLT5lbnRwcl9wcjsKKysJ dC5lbnRsZW4gPSB0ZC0+ZW50cHJsZW5fcHI7CisrCisrCS8qIE5vdGUgZm9yIENUUiB3aXRob3V0 IERGIHNvbWUgYWRkaXRpb25hbCBpbnB1dCB2YWx1ZXMKKysJICogaWdub3JlIGJ5dGVzIGFmdGVy IHRoZSBrZXlsZW5ndGg6IHNvIHJlZHVjZSBhZGlubGVuCisrCSAqIHRvIGhhbGYgdG8gZW5zdXJl IGludmFsaWQgZGF0YSBpcyBmZWQgaW4uCisrCSAqLworKwlpZiAoIWZpcHNfcG9zdF9jb3JydXB0 KEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+aWZsYWdzKSkKKysJCWFkaW5sZW4g PSB0ZC0+YWRpbmxlbl9wciAvIDI7CisrCWVsc2UKKysJCWFkaW5sZW4gPSB0ZC0+YWRpbmxlbl9w cjsKKysJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbl9w ciwgMSwKKysJCQkJdGQtPmFkaW5fcHIsIGFkaW5sZW4pKQorKwkJZ290byBlcnI7CisrCisrCWlm IChtZW1jbXAocmFuZG91dCwgdGQtPmthdF9wciwgdGQtPmthdGxlbl9wcikpCisrCQl7CisrCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX1BSX1RFU1QxX0ZBSUxV UkUpOworKwkJZ290byBlcnIyOworKwkJfQorKworKwkvKiBOb3cgZ2VuZXJhdGUgYWdhaW4gd2l0 aCBQUjogc3VwcGx5IG5ldyBlbnRyb3B5IGFnYWluLgorKwkgKiBDaGVjayBvdXRwdXQgbWF0Y2hl cyBleHBlY3RlZCB2YWx1ZS4KKysJICovCisrCisrCXQuZW50ID0gdGQtPmVudGdfcHI7CisrCXQu ZW50bGVuID0gdGQtPmVudGdsZW5fcHI7CisrCisrCWlmICghRklQU19kcmJnX2dlbmVyYXRlKGRj dHgsIHJhbmRvdXQsIHRkLT5rYXQybGVuX3ByLCAxLAorKwkJCQl0ZC0+YWRpbmdfcHIsIHRkLT5h ZGluZ2xlbl9wcikpCisrCQlnb3RvIGVycjsKKysKKysJaWYgKG1lbWNtcChyYW5kb3V0LCB0ZC0+ a2F0Ml9wciwgdGQtPmthdDJsZW5fcHIpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9QUl9URVNUMl9GQUlMVVJFKTsKKysJCWdvdG8gZXJyMjsK KysJCX0KKysJLyogQWxsIE9LLCB0ZXN0IGNvbXBsZXRlICovCisrCXJ2ID0gMTsKKysKKysJZXJy OgorKwlpZiAocnYgPT0gMCkKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FU LCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJZXJyMjoKKysJRklQU19kcmJnX3VuaW5zdGFu dGlhdGUoZGN0eCk7CisrCQorKwlyZXR1cm4gcnY7CisrCisrCX0KKysKKysvKiBJbml0aWFsaXNl IGEgRFJCRyBiYXNlZCBvbiBzZWxmdGVzdCBkYXRhICovCisrCisrc3RhdGljIGludCBkb19kcmJn X2luaXQoRFJCR19DVFggKmRjdHgsIERSQkdfU0VMRlRFU1RfREFUQSAqdGQsIFRFU1RfRU5UICp0 KQorKwl7CisrCisrCWlmICghRklQU19kcmJnX2luaXQoZGN0eCwgdGQtPm5pZCwgdGQtPmZsYWdz KSkKKysJCXJldHVybiAwOworKworKwlpZiAoIUZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKGRjdHgs IHRlc3RfZW50cm9weSwgMCwgMCwgdGVzdF9ub25jZSwgMCkpCisrCQlyZXR1cm4gMDsKKysKKysJ RklQU19kcmJnX3NldF9hcHBfZGF0YShkY3R4LCB0KTsKKysKKysJdC0+ZW50ID0gdGQtPmVudDsK KysJdC0+ZW50bGVuID0gdGQtPmVudGxlbjsKKysJdC0+bm9uY2UgPSB0ZC0+bm9uY2U7CisrCXQt Pm5vbmNlbGVuID0gdGQtPm5vbmNlbGVuOworKwl0LT5lbnRjbnQgPSAwOworKwl0LT5ub25jZWNu dCA9IDA7CisrCXJldHVybiAxOworKwl9CisrCisrLyogSW5pdGlhbGlzZSBhbmQgaW5zdGFudGlh dGUgRFJCRyBiYXNlZCBvbiBzZWxmdGVzdCBkYXRhICovCisrc3RhdGljIGludCBkb19kcmJnX2lu c3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LCBEUkJHX1NFTEZURVNUX0RBVEEgKnRkLAorKwkJCQkJ CQkJVEVTVF9FTlQgKnQpCisrCXsKKysJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsIHQpKQor KwkJcmV0dXJuIDA7CisrCWlmICghRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJz LCB0ZC0+cGVyc2xlbikpCisrCQlyZXR1cm4gMDsKKysKKysJcmV0dXJuIDE7CisrCX0KKysKKysv KiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGV4dGVuc2l2ZSBlcnJvciBjaGVja2luZyBhcyByZXF1 aXJlZCBieSBTUDgwMC05MC4KKysgKiBJbmR1Y2Ugc2V2ZXJhbCBmYWlsdXJlIG1vZGVzIGFuZCBj aGVjayBhbiBlcnJvciBjb25kaXRpb24gaXMgc2V0LgorKyAqIFRoaXMgZnVuY3Rpb24gYWxvbmcg d2l0aCBmaXBzX2RyYmdfc2luZ2xlX2thdCBwZWZvcm1zIHRoZSBoZWFsdGggY2hlY2tpbmcKKysg KiBvcGVyYXRpb24uCisrICovCisrCisrc3RhdGljIGludCBmaXBzX2RyYmdfZXJyb3JfY2hlY2so RFJCR19DVFggKmRjdHgsIERSQkdfU0VMRlRFU1RfREFUQSAqdGQpCisrCXsKKysJdW5zaWduZWQg Y2hhciByYW5kb3V0WzEwMjRdOworKwlURVNUX0VOVCB0OworKwlzaXplX3QgaTsKKysJdW5zaWdu ZWQgaW50IHJlc2VlZF9jb3VudGVyX3RtcDsKKysJdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25l ZCBjaGFyICopZGN0eDsKKysKKysJLyogSW5pdGlhbGlzZSBEUkJHICovCisrCisrCWlmICghZG9f ZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrCQlnb3RvIGVycjsKKysKKysJLyogRG9uJ3QgcmVw b3J0IGluZHVjZWQgZXJyb3JzICovCisrCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7 CisrCisrCS8qIFBlcnNvbmFsaXNhdGlvbiBzdHJpbmcgdGVzdHMgKi8KKysKKysJLyogVGVzdCBk ZXRlY3Rpb24gb2YgdG9vIGxhcmdlIHBlcnNvbmxpc2F0aW9uIHN0cmluZyAqLworKworKwlpZiAo RklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCBkY3R4LT5tYXhfcGVycyArIDEp ID4gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQ U19SX1BFUlNPTkFMSVNBVElPTl9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCWdvdG8gZXJyOworKwkJ fQorKworKwkvKiBFbnRyb3B5IHNvdXJjZSB0ZXN0cyAqLworKworKwkvKiBUZXN0IGVudHJvcHkg c291cmNlIGZhaWx1cmUgZGV0ZWNpb246IGkuZS4gcmV0dXJucyBubyBkYXRhICovCisrCisrCXQu ZW50bGVuID0gMDsKKysKKysJaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVy cywgdGQtPnBlcnNsZW4pID4gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19F UlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVy cjsKKysJCX0KKysKKysJLyogVHJ5IHRvIGdlbmVyYXRlIG91dHB1dCBmcm9tIHVuaW5zdGFudGlh dGVkIERSQkcgKi8KKysJaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+ a2F0bGVuLCAwLAorKwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQorKwkJeworKwkJRklQU2Vy cihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfR0VORVJBVEVfRVJST1JfVU5E RVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJZGN0eC0+aWZsYWdzICY9IH5EUkJH X0ZMQUdfTk9FUlI7CisrCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCisrCQl7 CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RB TlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwlpZiAoIWRvX2RyYmdfaW5p dChkY3R4LCB0ZCwgJnQpKQorKwkJZ290byBlcnI7CisrCisrCWRjdHgtPmlmbGFncyB8PSBEUkJH X0ZMQUdfTk9FUlI7CisrCisrCS8qIFRlc3QgaW5zdWZmaWNpZW50IGVudHJvcHkgKi8KKysKKysJ dC5lbnRsZW4gPSBkY3R4LT5taW5fZW50cm9weSAtIDE7CisrCisrCWlmIChGSVBTX2RyYmdfaW5z dGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApCisrCQl7CisrCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VO REVURUNURUQpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCWRjdHgtPmlmbGFncyAmPSB+RFJC R19GTEFHX05PRVJSOworKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQorKwkJ eworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNU QU5USUFURV9FUlJPUik7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJLyogVGVzdCB0b28gbXVj aCBlbnRyb3B5ICovCisrCisrCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrCQln b3RvIGVycjsKKysKKysJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysJdC5l bnRsZW4gPSBkY3R4LT5tYXhfZW50cm9weSArIDE7CisrCisrCWlmIChGSVBTX2RyYmdfaW5zdGFu dGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApCisrCQl7CisrCQlGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVU RUNURUQpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCWRjdHgtPmlmbGFncyAmPSB+RFJCR19G TEFHX05PRVJSOworKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQorKwkJewor KwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5U SUFURV9FUlJPUik7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJLyogTm9uY2UgdGVzdHMgKi8K KysKKysJLyogVGVzdCB0b28gc21hbGwgbm9uY2UgKi8KKysKKysJaWYgKGRjdHgtPm1pbl9ub25j ZSkKKysJCXsKKysKKysJCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrCQkJZ290 byBlcnI7CisrCisrCQlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOworKworKwkJdC5u b25jZWxlbiA9IGRjdHgtPm1pbl9ub25jZSAtIDE7CisrCisrCQlpZiAoRklQU19kcmJnX2luc3Rh bnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKQorKwkJCXsKKysJCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9OT05DRV9FUlJPUl9VTkRF VEVDVEVEKTsKKysJCQlnb3RvIGVycjsKKysJCQl9CisrCisrCQlkY3R4LT5pZmxhZ3MgJj0gfkRS QkdfRkxBR19OT0VSUjsKKysJCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCisr CQkJeworKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VO SU5TVEFOVElBVEVfRVJST1IpOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysKKysJCX0KKysKKysJ LyogVGVzdCB0b28gbGFyZ2Ugbm9uY2UgKi8KKysKKysJaWYgKGRjdHgtPm1heF9ub25jZSkKKysJ CXsKKysKKysJCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrCQkJZ290byBlcnI7 CisrCisrCQlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOworKworKwkJdC5ub25jZWxl biA9IGRjdHgtPm1heF9ub25jZSArIDE7CisrCisrCQlpZiAoRklQU19kcmJnX2luc3RhbnRpYXRl KGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9OT05DRV9FUlJPUl9VTkRFVEVDVEVE KTsKKysJCQlnb3RvIGVycjsKKysJCQl9CisrCisrCQlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxB R19OT0VSUjsKKysJCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCisrCQkJewor KwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFO VElBVEVfRVJST1IpOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysKKysJCX0KKysKKysJLyogSW5z dGFudGlhdGUgd2l0aCB2YWxpZCBkYXRhLiAqLworKwlpZiAoIWRvX2RyYmdfaW5zdGFudGlhdGUo ZGN0eCwgdGQsICZ0KSkKKysJCQlnb3RvIGVycjsKKysKKysJLyogQ2hlY2sgZ2VuZXJhdGlvbiBp cyBub3cgT0sgKi8KKysJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQt PmthdGxlbiwgMCwKKysJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKKysJCWdvdG8gZXJyOwor KworKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOworKworKwkvKiBSZXF1ZXN0IHRv byBtdWNoIGRhdGEgZm9yIG9uZSByZXF1ZXN0ICovCisrCWlmIChGSVBTX2RyYmdfZ2VuZXJhdGUo ZGN0eCwgcmFuZG91dCwgZGN0eC0+bWF4X3JlcXVlc3QgKyAxLCAwLAorKwkJCQl0ZC0+YWRpbiwg dGQtPmFkaW5sZW4pKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NI RUNLLCBGSVBTX1JfUkVRVUVTVF9MRU5HVEhfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVy cjsKKysJCX0KKysKKysJLyogVHJ5IHRvbyBsYXJnZSBhZGRpdGlvbmFsIGlucHV0ICovCisrCWlm IChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMCwKKysJCQkJ dGQtPmFkaW4sIGRjdHgtPm1heF9hZGluICsgMSkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9G SVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX0VSUk9SX1VOREVU RUNURUQpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCS8qIENoZWNrIHByZWRpY3Rpb24gcmVz aXN0YW5jZSByZXF1ZXN0IGZhaWxzIGlmIGVudHJvcHkgc291cmNlCisrCSAqIGZhaWx1cmUuCisr CSAqLworKworKwl0LmVudGxlbiA9IDA7CisrCisrCWlmIChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0 eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMSwKKysJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkK KysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VO VFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysJCQorKwlkY3R4 LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50 aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVD SywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKwkJZ290byBlcnI7CisrCQl9CisrCisr CisrCS8qIEluc3RhbnRpYXRlIGFnYWluIHdpdGggdmFsaWQgZGF0YSAqLworKworKwlpZiAoIWRv X2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQsICZ0KSkKKysJCQlnb3RvIGVycjsKKysJLyogVGVz dCByZXNlZWQgY291bnRlciB3b3JrcyAqLworKwkvKiBTYXZlIGluaXRpYWwgcmVzZWVkIGNvdW50 ZXIgKi8KKysJcmVzZWVkX2NvdW50ZXJfdG1wID0gZGN0eC0+cmVzZWVkX2NvdW50ZXI7CisrCS8q IFNldCByZXNlZWQgY291bnRlciB0byBiZXlvbmQgaW50ZXJ2YWwgKi8KKysJZGN0eC0+cmVzZWVk X2NvdW50ZXIgPSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWw7CisrCisrCS8qIEdlbmVyYXRlIG91dHB1 dCBhbmQgY2hlY2sgZW50cm9weSBoYXMgYmVlbiByZXF1ZXN0ZWQgZm9yIHJlc2VlZCAqLworKwl0 LmVudGNudCA9IDA7CisrCWlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRk LT5rYXRsZW4sIDAsCisrCQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCisrCQlnb3RvIGVycjsK KysJaWYgKHQuZW50Y250ICE9IDEpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdf RVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX05PVF9SRVFVRVNURURfRk9SX1JFU0VFRCk7Cisr CQlnb3RvIGVycjsKKysJCX0KKysJLyogQ2hlY2sgcmVzZWVkIGNvdW50ZXIgaGFzIGJlZW4gcmVz ZXQgKi8KKysJaWYgKGRjdHgtPnJlc2VlZF9jb3VudGVyICE9IHJlc2VlZF9jb3VudGVyX3RtcCAr IDEpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNf Ul9SRVNFRURfQ09VTlRFUl9FUlJPUik7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJZGN0eC0+ aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7CisrCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlh dGUoZGN0eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ss IEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwkv KiBDaGVjayBwcmVkaWN0aW9uIHJlc2lzdGFuY2UgcmVxdWVzdCBmYWlscyBpZiBlbnRyb3B5IHNv dXJjZQorKwkgKiBmYWlsdXJlLgorKwkgKi8KKysKKysJdC5lbnRsZW4gPSAwOworKworKwlkY3R4 LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOworKwlpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRj dHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDEsCisrCQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikp CisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9F TlRST1BZX0VSUk9SX1VOREVURUNURUQpOworKwkJZ290byBlcnI7CisrCQl9CisrCQkKKysJZGN0 eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7CisrCisrCWlmICghRklQU19kcmJnX3VuaW5z dGFudGlhdGUoZGN0eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1Jf Q0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJfQor KworKworKwlpZiAoIWRvX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQsICZ0KSkKKysJCQlnb3Rv IGVycjsKKysJLyogVGVzdCByZXNlZWQgY291bnRlciB3b3JrcyAqLworKwkvKiBTYXZlIGluaXRp YWwgcmVzZWVkIGNvdW50ZXIgKi8KKysJcmVzZWVkX2NvdW50ZXJfdG1wID0gZGN0eC0+cmVzZWVk X2NvdW50ZXI7CisrCS8qIFNldCByZXNlZWQgY291bnRlciB0byBiZXlvbmQgaW50ZXJ2YWwgKi8K KysJZGN0eC0+cmVzZWVkX2NvdW50ZXIgPSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWw7CisrCisrCS8q IEdlbmVyYXRlIG91dHB1dCBhbmQgY2hlY2sgZW50cm9weSBoYXMgYmVlbiByZXF1ZXN0ZWQgZm9y IHJlc2VlZCAqLworKwl0LmVudGNudCA9IDA7CisrCWlmICghRklQU19kcmJnX2dlbmVyYXRlKGRj dHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCisrCQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikp CisrCQlnb3RvIGVycjsKKysJaWYgKHQuZW50Y250ICE9IDEpCisrCQl7CisrCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX05PVF9SRVFVRVNURURf Rk9SX1JFU0VFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysJLyogQ2hlY2sgcmVzZWVkIGNvdW50 ZXIgaGFzIGJlZW4gcmVzZXQgKi8KKysJaWYgKGRjdHgtPnJlc2VlZF9jb3VudGVyICE9IHJlc2Vl ZF9jb3VudGVyX3RtcCArIDEpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJS T1JfQ0hFQ0ssIEZJUFNfUl9SRVNFRURfQ09VTlRFUl9FUlJPUik7CisrCQlnb3RvIGVycjsKKysJ CX0KKysKKysJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7CisrCWlmICghRklQU19k cmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RS QkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJy OworKwkJfQorKworKwkvKiBFeHBsaWNpdCByZXNlZWQgdGVzdHMgKi8KKysKKysJLyogVGVzdCBl eHBsaWNpdCByZXNlZWQgd2l0aCB0b28gbGFyZ2UgYWRkaXRpb25hbCBpbnB1dCAqLworKwlpZiAo IWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQorKwkJZ290byBlcnI7CisrCisrCWRjdHgtPmlm bGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisrCWlmIChGSVBTX2RyYmdfcmVzZWVkKGRjdHgs IHRkLT5hZGluLCBkY3R4LT5tYXhfYWRpbiArIDEpID4gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0FERElUSU9OQUxfSU5QVVRfRVJST1Jf VU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJLyogVGVzdCBleHBsaWNpdCBy ZXNlZWQgd2l0aCBlbnRyb3B5IHNvdXJjZSBmYWlsdXJlICovCisrCisrCXQuZW50bGVuID0gMDsK KysKKysJaWYgKEZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSA+ IDApCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNf Ul9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCWlm ICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNf Rl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysJ CWdvdG8gZXJyOworKwkJfQorKworKwkvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRoIHRvbyBt dWNoIGVudHJvcHkgKi8KKysKKysJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKKysJ CWdvdG8gZXJyOworKworKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOworKworKwl0 LmVudGxlbiA9IGRjdHgtPm1heF9lbnRyb3B5ICsgMTsKKysKKysJaWYgKEZJUFNfZHJiZ19yZXNl ZWQoZGN0eCwgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSA+IDApCisrCQl7CisrCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNU RUQpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlh dGUoZGN0eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ss IEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwkv KiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRoIHRvbyBsaXR0bGUgZW50cm9weSAqLworKworKwlp ZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQorKwkJZ290byBlcnI7CisrCisrCWRjdHgt PmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisrCXQuZW50bGVuID0gZGN0eC0+bWluX2Vu dHJvcHkgLSAxOworKworKwlpZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwgdGQt PmFkaW5sZW4pID4gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9D SEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJ CX0KKysKKysJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVf RVJST1IpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCXAgPSAodW5zaWduZWQgY2hhciAqKSZk Y3R4LT5kOworKwkvKiBTdGFuZGFyZCBzYXlzIHdlIGhhdmUgdG8gY2hlY2sgdW5pbnN0YW50aWF0 ZSByZWFsbHkgemVyb2VzCisrCSAqIHRoZSBkYXRhLi4uCisrCSAqLworKwlmb3IgKGkgPSAwOyBp IDwgc2l6ZW9mKGRjdHgtPmQpOyBpKyspCisrCQl7CisrCQlpZiAoKnAgIT0gMCkKKysJCQl7Cisr CQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5U SUFURV9aRVJPSVNFX0VSUk9SKTsKKysJCQlnb3RvIGVycjsKKysJCQl9CisrCQlwKys7CisrCQl9 CisrCisrCXJldHVybiAxOworKworKwllcnI6CisrCS8qIEEgcmVhbCBlcnJvciBhcyBvcHBvc2Vk IHRvIGFuIGluZHVjZWQgb25lOiB1bmRlcmx5aW5nIGZ1bmN0aW9uIHdpbGwKKysJICogaW5kaWNh dGUgdGhlIGVycm9yLgorKwkgKi8KKysJaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJCR19GTEFHX05P RVJSKSkKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0ZV TkNUSU9OX0VSUk9SKTsKKysJRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCk7CisrCXJldHVy biAwOworKworKwl9CisrCisraW50IGZpcHNfZHJiZ19rYXQoRFJCR19DVFggKmRjdHgsIGludCBu aWQsIHVuc2lnbmVkIGludCBmbGFncykKKysJeworKwlEUkJHX1NFTEZURVNUX0RBVEEgKnRkOwor KwlmbGFncyB8PSBEUkJHX0ZMQUdfVEVTVDsKKysJZm9yICh0ZCA9IGRyYmdfdGVzdDsgdGQtPm5p ZCAhPSAwOyB0ZCsrKQorKwkJeworKwkJaWYgKHRkLT5uaWQgPT0gbmlkICYmIHRkLT5mbGFncyA9 PSBmbGFncykKKysJCQl7CisrCQkJaWYgKCFmaXBzX2RyYmdfc2luZ2xlX2thdChkY3R4LCB0ZCwg MCkpCisrCQkJCXJldHVybiAwOworKwkJCXJldHVybiBmaXBzX2RyYmdfZXJyb3JfY2hlY2soZGN0 eCwgdGQpOworKwkJCX0KKysJCX0KKysJcmV0dXJuIDA7CisrCX0KKysKKytpbnQgRklQU19kcmJn X2hlYWx0aF9jaGVjayhEUkJHX0NUWCAqZGN0eCkKKysJeworKwlpbnQgcnY7CisrCURSQkdfQ1RY ICp0Y3R4ID0gTlVMTDsKKysJdGN0eCA9IEZJUFNfZHJiZ19uZXcoMCwgMCk7CisrCWZpcHNfcG9z dF9zdGFydGVkKEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+eGZsYWdzKTsKKysJ aWYgKCF0Y3R4KQorKwkJcmV0dXJuIDA7CisrCXJ2ID0gZmlwc19kcmJnX2thdCh0Y3R4LCBkY3R4 LT50eXBlLCBkY3R4LT54ZmxhZ3MpOworKwlpZiAodGN0eCkKKysJCUZJUFNfZHJiZ19mcmVlKHRj dHgpOworKwlpZiAocnYpCisrCQlmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1RfRFJCRywgZGN0 eC0+dHlwZSwgJmRjdHgtPnhmbGFncyk7CisrCWVsc2UKKysJCWZpcHNfcG9zdF9mYWlsZWQoRklQ U19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT54ZmxhZ3MpOworKwlpZiAoIXJ2KQorKwkJ ZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfRVJST1I7CisrCWVsc2UKKysJCWRjdHgtPmhlYWx0 aF9jaGVja19jbnQgPSAwOworKwlyZXR1cm4gcnY7CisrCX0KKysKKytpbnQgRklQU19zZWxmdGVz dF9kcmJnKHZvaWQpCisrCXsKKysJRFJCR19DVFggKmRjdHg7CisrCURSQkdfU0VMRlRFU1RfREFU QSAqdGQ7CisrCWludCBydiA9IDE7CisrCWRjdHggPSBGSVBTX2RyYmdfbmV3KDAsIDApOworKwlp ZiAoIWRjdHgpCisrCQlyZXR1cm4gMDsKKysJZm9yICh0ZCA9IGRyYmdfdGVzdDsgdGQtPm5pZCAh PSAwOyB0ZCsrKQorKwkJeworKwkJaWYgKHRkLT5wb3N0ICE9IDEpCisrCQkJY29udGludWU7Cisr CQlpZiAoIWZpcHNfcG9zdF9zdGFydGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZs YWdzKSkKKysJCQlyZXR1cm4gMTsKKysJCWlmICghZmlwc19kcmJnX3NpbmdsZV9rYXQoZGN0eCwg dGQsIDEpKQorKwkJCXsKKysJCQlmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+ bmlkLCAmdGQtPmZsYWdzKTsKKysJCQlydiA9IDA7CisrCQkJY29udGludWU7CisrCQkJfQorKwkJ aWYgKCFmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFn cykpCisrCQkJcmV0dXJuIDA7CisrCQl9CisrCUZJUFNfZHJiZ19mcmVlKGRjdHgpOworKwlyZXR1 cm4gcnY7CisrCX0KKysKKysKKytpbnQgRklQU19zZWxmdGVzdF9kcmJnX2FsbCh2b2lkKQorKwl7 CisrCURSQkdfQ1RYICpkY3R4OworKwlEUkJHX1NFTEZURVNUX0RBVEEgKnRkOworKwlpbnQgcnYg PSAxOworKwlkY3R4ID0gRklQU19kcmJnX25ldygwLCAwKTsKKysJaWYgKCFkY3R4KQorKwkJcmV0 dXJuIDA7CisrCWZvciAodGQgPSBkcmJnX3Rlc3Q7IHRkLT5uaWQgIT0gMDsgdGQrKykKKysJCXsK KysJCWlmICghZmlwc19wb3N0X3N0YXJ0ZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ ZmxhZ3MpKQorKwkJCXJldHVybiAxOworKwkJaWYgKCFmaXBzX2RyYmdfc2luZ2xlX2thdChkY3R4 LCB0ZCwgMCkpCisrCQkJeworKwkJCWZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNUX0RSQkcsIHRk LT5uaWQsICZ0ZC0+ZmxhZ3MpOworKwkJCXJ2ID0gMDsKKysJCQljb250aW51ZTsKKysJCQl9Cisr CQlpZiAoIWZpcHNfZHJiZ19lcnJvcl9jaGVjayhkY3R4LCB0ZCkpCisrCQkJeworKwkJCWZpcHNf cG9zdF9mYWlsZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpOworKwkJCXJ2 ID0gMDsKKysJCQljb250aW51ZTsKKysJCQl9CisrCQlpZiAoIWZpcHNfcG9zdF9zdWNjZXNzKEZJ UFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKSkKKysJCQlyZXR1cm4gMDsKKysJCX0K KysJRklQU19kcmJnX2ZyZWUoZGN0eCk7CisrCXJldHVybiBydjsKKysJfQorKworZGlmZiAtdXAg b3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuaC5maXBz IG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmgKKy0t LSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5oLmZp cHMJMjAxMi0wMi0yOSAxMDozMzowMi43OTYyOTQ5MTUgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4x LWJldGEzL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5oCTIwMTItMDItMjkgMTA6MzM6 MDIuNzk2Mjk0OTE1ICswMTAwCitAQCAtMCwwICsxLDIzMzUgQEAKKysvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor KyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6 CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlLm9y Zy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93 bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisr ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICov CisrCisrLyogU2VsZnRlc3QgYW5kIGhlYWx0aCBjaGVjayBkYXRhIGZvciB0aGUgU1A4MDAtOTAg RFJCRyAqLworKworKyNkZWZpbmUgX19maXBzX2NvbnN0c2VnCisrCisrLyogQUVTLTEyOCB1c2Ug ZGYgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzEyOF91c2VfZGZfcHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4NjEsMHg1MiwweDdj LDB4ZTMsMHgyMywweDdkLDB4MGEsMHgwNywweDEwLDB4MGMsMHg1MCwweDMzLAorKwkweGM4LDB4 ZGIsMHhmZiwweDEyCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfbm9uY2VbXSA9CisrCXsKKysJMHg1MSwweDBk LDB4ODUsMHg3NywweGVkLDB4MjIsMHg5NywweDI4CisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfcGVyc29uYWxp emF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4NTksMHg5ZiwweGJiLDB4Y2QsMHhkNSwweDI1LDB4 NjksMHhiNSwweGNiLDB4YjUsMHgwMywweGZlLAorKwkweGQ3LDB4ZDcsMHgwMSwweDY3CisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEy OF91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4ZWYsMHg4OCwweDc2LDB4 MDEsMHhhZiwweDNjLDB4ZmUsMHg4YiwweGFmLDB4MjYsMHgwNiwweDllLAorKwkweDlhLDB4NDcs MHgwOCwweDc2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHhl MiwweDc2LDB4ZjksMHhmNiwweDNhLDB4YmEsMHgxMCwweDlmLDB4YmYsMHg0NywweDBlLDB4NTEs CisrCTB4MDksMHhmYiwweGEzLDB4YjYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9pbnRfcmV0dXJuZWRiaXRz W10gPQorKwl7CisrCTB4ZDQsMHg5OCwweDhhLDB4NDYsMHg4MCwweDRjLDB4ZGIsMHhhMywweDU5 LDB4MDIsMHg1NywweDUyLAorKwkweDY2LDB4MWMsMHhlYSwweDViCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJf YWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDg4LDB4OGMsMHg5MSwweGQ2LDB4YmUsMHg1 NiwweDZlLDB4MDgsMHg5YSwweDYyLDB4MmIsMHgxMSwKKysJMHgzZiwweDVlLDB4MzEsMHgwNgor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xMjhfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJeworKwkweGMwLDB4NWMsMHg2 YiwweDk4LDB4MDEsMHgwZCwweDU4LDB4MTgsMHg1MSwweDE4LDB4OTYsMHhhZSwKKysJMHhhNyww eGUzLDB4YTgsMHg2NworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkw eGNmLDB4MDEsMHhhYywweDIyLDB4MzEsMHgwNiwweDhlLDB4ZmMsMHhjZSwweDU2LDB4ZWEsMHgy NCwKKysJMHgwZiwweDM4LDB4NDMsMHhjNgorKwl9OworKworKworKy8qIEFFUy0xMjggdXNlIGRm IE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xMjhfdXNlX2RmX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDFmLDB4OGUsMHgzNCww eDgyLDB4MGMsMHhiNywweGJlLDB4YzUsMHgwMSwweDNlLDB4ZDAsMHhhMywKKysJMHg5ZCwweDdk LDB4MWMsMHg5YgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX25vbmNlW10gPQorKwl7CisrCTB4ZDUsMHg0ZCwweGJk LDB4NGEsMHg5MywweDdmLDB4YjgsMHg5NgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3BlcnNvbmFsaXphdGlvbnN0 cmluZ1tdID0KKysJeworKwkweGFiLDB4ZDYsMHgzZiwweDA0LDB4ZmUsMHgyNywweDZiLDB4MmQs MHhkNywweGMzLDB4MWMsMHhmMywKKysJMHgzOCwweDY2LDB4YmEsMHgxYgorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2Rm X2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweGZlLDB4ZjQsMHgwOSwweGE4LDB4YjcsMHg3 MywweDI3LDB4OWMsMHg1ZiwweGE3LDB4ZWEsMHg0NiwKKysJMHhiNSwweGUyLDB4YjIsMHg0MQor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xMjhfdXNlX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg0MiwweGU0LDB4NGUs MHg3YiwweDI3LDB4ZGQsMHhjYiwweGJjLDB4MGEsMHhjZiwweGE2LDB4NjcsCisrCTB4ZTcsMHg1 NywweDExLDB4YjQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJ MHgxNCwweDI2LDB4NjksMHhkOSwweGYzLDB4NjUsMHgwMywweGQ2LDB4NmIsMHhiOSwweDQ0LDB4 MGIsCisrCTB4YzcsMHhjNCwweDllLDB4MzkKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRy ZXNlZWRbXSA9CisrCXsKKysJMHg1NSwweDJlLDB4NjAsMHg5YSwweDA1LDB4NzIsMHg4YSwweGE4 LDB4ZWYsMHgyMiwweDgxLDB4NWEsCisrCTB4YzgsMHg5MywweGZhLDB4ODQKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9k Zl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4M2MsMHg0MCwweGM4LDB4YzQsMHgxNiww eDBjLDB4MjEsMHhhNCwweDM3LDB4MmMsMHg4ZiwweGE1LAorKwkweDA2LDB4MGMsMHgxNSwweDJj CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzEyOF91c2VfZGZfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZTEsMHgzZSwweDk5LDB4 OTgsMHg4NiwweDY3LDB4MGIsMHg2MywweDdiLDB4YmUsMHgzZiwweDg4LAorKwkweDQ2LDB4ODEs MHhjNywweDE5CisrCX07CisrCisrCisrLyogQUVTLTE5MiB1c2UgZGYgUFIgICovCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJf ZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4MmIsMHg0ZSwweDhiLDB4ZTEsMHhmMSwweDM0LDB4 ODAsMHg1NiwweDgxLDB4ZjksMHg3NCwweGVjLAorKwkweDE3LDB4NDQsMHgyYSwweGYxLDB4MTQs MHhiMCwweGJmLDB4OTcsMHgzOSwweGI3LDB4MDQsMHg3ZAorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX25vbmNl W10gPQorKwl7CisrCTB4ZDYsMHg5ZCwweGViLDB4MTQsMHg0ZSwweDZjLDB4MzAsMHgxZSwweDM5 LDB4NTUsMHg3MywweGQwLAorKwkweGQxLDB4ODAsMHg3OCwweGZhCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJf cGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4ZmMsMHg0MywweDRhLDB4ZjgsMHg5 YSwweDU1LDB4YjMsMHg1MywweDgzLDB4ZTIsMHgxOCwweDE2LAorKwkweDBjLDB4ZGMsMHhjZCww eDVlLDB4NGYsMHhhMCwweDAzLDB4MDEsMHgyYiwweDlmLDB4ZTQsMHhkNSwKKysJMHg3ZCwweDQ5 LDB4ZjAsMHg0MSwweDllLDB4M2QsMHg5OSwweDA0CisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfYWRkaXRpb25h bGlucHV0W10gPQorKwl7CisrCTB4NWUsMHg5ZiwweDQ5LDB4NmYsMHgyMSwweDhiLDB4MWQsMHgz MiwweGQ1LDB4ODQsMHg1YywweGFjLAorKwkweGFmLDB4ZGYsMHhlNCwweDc5LDB4OWUsMHhhZiww eGE5LDB4ODIsMHhkMCwweGY4LDB4NGYsMHhjYiwKKysJMHg2OSwweDEwLDB4MGEsMHg3ZSwweDgx LDB4NTcsMHhiNSwweDM2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsK KysJMHhkNCwweDgxLDB4MGMsMHhkNywweDY2LDB4MzksMHhlYywweDQyLDB4NTMsMHg4NywweDQx LDB4YTUsCisrCTB4MWUsMHg3ZCwweDgwLDB4OTEsMHg4ZSwweGJiLDB4ZWQsMHhhYywweDE0LDB4 MDIsMHgxYSwweGQ1CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJewor KwkweGRmLDB4MWQsMHgzOSwweDQ1LDB4N2MsMHg5YiwweGM2LDB4MmIsMHg3ZCwweDhjLDB4OTMs MHhlOSwKKysJMHgxOSwweDMwLDB4NmIsMHg2NworKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2FkZGl0aW9uYWxp bnB1dDJbXSA9CisrCXsKKysJMHgwMCwweDcxLDB4MjcsMHg0ZSwweGQzLDB4MTQsMHhmMSwweDIw LDB4N2YsMHg0YSwweDQxLDB4MzIsCisrCTB4MmEsMHg5NywweDExLDB4NDMsMHg4ZiwweDRhLDB4 MTUsMHg3YiwweDliLDB4NTEsMHg3OSwweGRhLAorKwkweDQ5LDB4M2QsMHhkZSwweGU4LDB4YmMs MHg5MywweDkxLDB4OTkKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsK KysJMHg5MCwweGVlLDB4NzYsMHhhMSwweDQ1LDB4OGQsMHhiNywweDQwLDB4YjAsMHgxMSwweGJm LDB4ZDAsCisrCTB4NjUsMHhkNywweDNjLDB4N2MsMHg0ZiwweDIwLDB4M2YsMHg0ZSwweDExLDB4 OWQsMHhiMywweDVlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4 MjQsMHgzYiwweDIwLDB4YTQsMHgzNywweDY2LDB4YmEsMHg3MiwweDM5LDB4M2YsMHhjZiwweDNj LAorKwkweDdlLDB4MWEsMHgyYiwweDgzCisrCX07CisrCisrCisrLyogQUVTLTE5MiB1c2UgZGYg Tm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzE5Ml91c2VfZGZfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4OGQsMHg3NCwweGE0LDB4 NTAsMHgxYSwweDAyLDB4NjgsMHgwYywweDJhLDB4NjksMHhjNCwweDgyLAorKwkweDNiLDB4YmIs MHhkYSwweDBlLDB4N2YsMHg3NywweGEzLDB4MTcsMHg3OCwweDU3LDB4YjIsMHg3YgorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJf dXNlX2RmX25vbmNlW10gPQorKwl7CisrCTB4NzUsMHhkNSwweDFmLDB4YWMsMHhhNCwweDhkLDB4 NDIsMHg3OCwweGQ3LDB4NjksMHg4NiwweDlkLAorKwkweDc3LDB4ZDcsMHg0MSwweDBlCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5 Ml91c2VfZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4NGUsMHgzMywweDQx LDB4M2MsMHg5YywweGMyLDB4ZDIsMHg1MywweGFmLDB4OTAsMHhlYSwweGNmLAorKwkweDE5LDB4 NTAsMHgxZSwweGU2LDB4NmYsMHg2MywweGM4LDB4MzIsMHgyMiwweGRjLDB4MDcsMHg2NSwKKysJ MHg5YywweGQzLDB4ZjgsMHgzMCwweDllLDB4ZWQsMHgzNSwweDcwCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfYWRk aXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4NWQsMHg4YiwweDhjLDB4YzEsMHhkZiwweDBlLDB4 MDIsMHg3OCwweGZiLDB4MTksMHhiOCwweDY5LAorKwkweDc4LDB4NGUsMHg5YywweDUyLDB4YmMs MHhjNywweDIwLDB4YzksMHhlNiwweDVlLDB4NzcsMHgyMiwKKysJMHgyOCwweDNkLDB4MGMsMHg5 ZSwweDY4LDB4YTgsMHg0NSwweGQ3CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfaW50X3JldHVybmVkYml0c1tdID0K KysJeworKwkweGQ1LDB4ZTcsMHgwOCwweGM1LDB4MTksMHg5OSwweGQ1LDB4MzEsMHgwMywweDBh LDB4NzQsMHhiNiwKKysJMHhiNywweGVkLDB4ZTksMHhlYQorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2VudHJvcHlp bnB1dHJlc2VlZFtdID0KKysJeworKwkweDljLDB4MjYsMHhkYSwweGYxLDB4YWMsMHhkOSwweDVh LDB4ZDYsMHhhOCwweDY1LDB4ZjUsMHgwMiwKKysJMHg4ZiwweGRjLDB4YTIsMHgwOSwweDU0LDB4 YTYsMHhlMiwweGE0LDB4ZGUsMHgzMiwweGUwLDB4MDEKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9hZGRpdGlvbmFs aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg5YiwweDkwLDB4YjAsMHgzYSwweDBlLDB4M2EsMHg4 MCwweDA3LDB4NGEsMHhmNCwweGRhLDB4NzYsCisrCTB4MjgsMHgzMCwweDNjLDB4ZWUsMHg1NCww eDFiLDB4OTQsMHg1OSwweDUxLDB4NDMsMHg1NiwweDc3LAorKwkweGFmLDB4ODgsMHhkZCwweDYz LDB4ODksMHg0NywweDA2LDB4NjUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9hZGRpdGlvbmFsaW5wdXQyW10gPQor Kwl7CisrCTB4M2MsMHgxMSwweDY0LDB4N2EsMHg5NiwweGY1LDB4ZDgsMHhiOCwweGFlLDB4ZDYs MHg3MCwweDRlLAorKwkweDE2LDB4OTYsMHhkZSwweGU5LDB4NjIsMHhiYywweGVlLDB4MjgsMHgy ZiwweDI2LDB4YTYsMHhmMCwKKysJMHg1NiwweGVmLDB4YTMsMHhmMSwweDZiLDB4YTEsMHhiMSww eDc3CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzE5Ml91c2VfZGZfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MGIsMHhlMiwweDU2 LDB4MDMsMHgxZSwweGRiLDB4MmMsMHg2ZCwweDdmLDB4MWIsMHgxNSwweDU4LAorKwkweDFhLDB4 ZjksMHgxMywweDI4CisrCX07CisrCisrCisrLyogQUVTLTI1NiB1c2UgZGYgUFIgICovCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZf cHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4NjEsMHg2OCwweGZjLDB4MWEsMHhmMCwweGI1 LDB4OTUsMHg2YiwweDg1LDB4MDksMHg5YiwweDc0LAorKwkweDNmLDB4MTMsMHg3OCwweDQ5LDB4 M2IsMHg4NSwweGVjLDB4OTMsMHgxMywweDNiLDB4YTksMHg0ZiwKKysJMHg5NiwweGFiLDB4MmMs MHhlNCwweGM4LDB4OGYsMHhkZCwweDZhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfbm9uY2VbXSA9CisrCXsK KysJMHhhZCwweGQyLDB4YmIsMHhiYSwweGI3LDB4NjUsMHg4OSwweGMzLDB4MjEsMHg2YywweDU1 LDB4MzMsCisrCTB4MmIsMHgzNiwweGZmLDB4YTQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9wZXJzb25hbGl6 YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg2ZSwweGNhLDB4ZTcsMHgyMCwweDcyLDB4ZDMsMHg4 NCwweDVhLDB4MzIsMHhkMywweDRiLDB4MjQsCisrCTB4NzIsMHhjNCwweDYzLDB4MmIsMHg5ZCww eDEyLDB4MjQsMHgwYywweDIzLDB4MjYsMHg4ZSwweDgzLAorKwkweDE2LDB4MzcsMHgwYiwweGQx LDB4MDYsMHg0ZiwweDY4LDB4NmQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9 CisrCXsKKysJMHg3ZSwweDA4LDB4NGEsMHhiYiwweGUzLDB4MjEsMHg3YywweGM5LDB4MjMsMHhk MiwweGY4LDB4YjAsCisrCTB4NzMsMHg5OCwweGJhLDB4ODQsMHg3NCwweDIzLDB4YWIsMHgwNiww eDhhLDB4ZTIsMHgyMiwweGQzLAorKwkweDdiLDB4Y2UsMHg5YiwweGQyLDB4NGEsMHg3NiwweGI4 LDB4ZGUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMjU2X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweDBiLDB4 MjMsMHhhZiwweGRmLDB4ZjEsMHg2MiwweGQ3LDB4ZDMsMHg0MywweDk3LDB4ZjgsMHg3NywKKysJ MHgwNCwweGE4LDB4NDIsMHgyMCwweGJkLDB4ZjYsMHgwZiwweGMxLDB4MTcsMHgyZiwweDlmLDB4 NTQsCisrCTB4YmIsMHg1NiwweDE3LDB4ODYsMHg2OCwweDBlLDB4YmEsMHhhOQorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNl X2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHgzMSwweDhlLDB4YWQsMHhhZiww eDQwLDB4ZWIsMHg2YiwweDc0LDB4MzEsMHg0NiwweDgwLDB4YzcsCisrCTB4MTcsMHhhYiwweDNj LDB4N2EKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMjU2X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4OTQs MHg2YiwweGM5LDB4OWYsMHhhYiwweDhkLDB4YzUsMHhlYywweDcxLDB4ODgsMHgxZCwweDAwLAor KwkweDhjLDB4ODksMHg2OCwweGU0LDB4YzgsMHgwNywweDc3LDB4MzYsMHgxNywweDZkLDB4Nzks MHg3OCwKKysJMHhjNywweDA2LDB4NGUsMHg5OSwweDA0LDB4MjgsMHgyOSwweGMzCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91 c2VfZGZfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4YmYsMHg2YywweDU5LDB4MmEs MHgwZCwweDQ0LDB4MGYsMHhhZSwweDlhLDB4NWUsMHgwMywweDczLAorKwkweGQ4LDB4YTYsMHhl MSwweGNmLDB4MjUsMHg2MSwweDM4LDB4MjQsMHg4NiwweDllLDB4NTMsMHhlOCwKKysJMHhhNCww eGRmLDB4NTYsMHhmNCwweDA2LDB4MDcsMHg5YywweDBmCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfcmV0dXJu ZWRiaXRzW10gPQorKwl7CisrCTB4MjIsMHg0YSwweGI0LDB4YjgsMHhiNiwweGVlLDB4N2QsMHhi MSwweDllLDB4YzksMHhmOSwweGEwLAorKwkweGQ5LDB4ZTIsMHg5NywweDAwCisrCX07CisrCisr CisrLyogQUVTLTI1NiB1c2UgZGYgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfZW50cm9weWlucHV0W10gPQorKwl7 CisrCTB4YTUsMHgzZSwweDM3LDB4MTAsMHgxNywweDQzLDB4OTEsMHg5MywweDU5LDB4MWUsMHg0 NywweDUwLAorKwkweDg3LDB4YWEsMHhkZCwweGQ1LDB4YzEsMHhjMywweDg2LDB4Y2QsMHhjYSww eDBkLDB4ZGIsMHg2OCwKKysJMHhlMCwweDAyLDB4ZDgsMHgwZiwweGRjLDB4NDAsMHgxYSwweDQ3 CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzI1Nl91c2VfZGZfbm9uY2VbXSA9CisrCXsKKysJMHhhOSwweDRkLDB4YTUsMHg1YSwweGZk LDB4YzUsMHgwYywweGU1LDB4MWMsMHg5YSwweDNiLDB4OGEsCisrCTB4NGMsMHg0NCwweDg0LDB4 NDAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMjU2X3VzZV9kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg4Yiww eDUyLDB4YTIsMHg0YSwweDkzLDB4YzMsMHg0ZSwweGE3LDB4MWUsMHgxYywweGE3LDB4MDUsCisr CTB4ZWIsMHg4MiwweDliLDB4YTYsMHg1ZCwweGU0LDB4ZDQsMHhlMCwweDdmLDB4YTMsMHhkOCww eDZiLAorKwkweDM3LDB4ODQsMHg1ZiwweGYxLDB4YzcsMHhkNSwweGY2LDB4ZDIKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3Vz ZV9kZl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHgyMCwweGY0LDB4MjIsMHhlZCwweGY4 LDB4NWMsMHhhMSwweDZhLDB4MDEsMHhjZiwweGJlLDB4NWYsCisrCTB4OGQsMHg2YywweDk0LDB4 N2YsMHhhZSwweDEyLDB4YTgsMHg1NywweGRiLDB4MmEsMHhhOSwweGJmLAorKwkweGM3LDB4YjMs MHg2NSwweDgxLDB4ODAsMHg4ZCwweDBkLDB4NDYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9pbnRfcmV0dXJuZWRi aXRzW10gPQorKwl7CisrCTB4NGUsMHg0NCwweGZkLDB4ZjMsMHg5ZSwweDI5LDB4YTIsMHhiOCww eDBmLDB4NWQsMHg2YywweGUxLAorKwkweDI4LDB4MGMsMHgzYiwweGMxCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZf ZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4ZGQsMHg0MCwweGU1LDB4OTgsMHg3Yiww eDI3LDB4MTYsMHg3MywweDE1LDB4NjgsMHhkMiwweDc2LAorKwkweGJmLDB4MGMsMHg2NywweDE1 LDB4NzUsMHg3OSwweDAzLDB4ZDMsMHhkZSwweGRlLDB4OTEsMHg0NiwKKysJMHg0MiwweGRkLDB4 ZDQsMHg2NywweGM4LDB4NzksMHhjOCwweDFlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfYWRkaXRpb25hbGlucHV0 cmVzZWVkW10gPQorKwl7CisrCTB4N2YsMHhkOCwweDFmLDB4YmQsMHgyYSwweGI1LDB4MWMsMHgx MSwweDVkLDB4ODMsMHg0ZSwweDk5LAorKwkweGY2LDB4NWMsMHhhNSwweDQwLDB4MjAsMHhlZCww eDM4LDB4OGUsMHhkNSwweDllLDB4ZTAsMHg3NSwKKysJMHg5MywweGZlLDB4MTIsMHg1ZSwweDVk LDB4NzMsMHhmYiwweDc1CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfYWRkaXRpb25hbGlucHV0MltdID0KKysJewor KwkweGNkLDB4MmMsMHhmZiwweDE0LDB4NjksMHgzZSwweDRjLDB4OWUsMHhmZCwweGZlLDB4MjYs MHgwZCwKKysJMHhlOSwweDg2LDB4MDAsMHg0OSwweDMwLDB4YmEsMHhiMSwweGM2LDB4NTAsMHg1 NywweDc3LDB4MmEsCisrCTB4NjIsMHgzOSwweDJjLDB4M2IsMHg3NCwweGViLDB4YzksMHgwZAor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18yNTZfdXNlX2RmX3JldHVybmVkYml0c1tdID0KKysJeworKwkweDRmLDB4NzgsMHhiZSwweGI5 LDB4NGQsMHg5NywweDhjLDB4ZTksMHhkMCwweDk3LDB4ZmUsMHhhZCwKKysJMHhmYSwweGZkLDB4 MzUsMHg1ZQorKwl9OworKworKworKy8qIEFFUy0xMjggbm8gZGYgUFIgICovCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9lbnRy b3B5aW5wdXRbXSA9CisrCXsKKysJMHg5YSwweDI1LDB4NjUsMHgxMCwweDY3LDB4ZDUsMHhiNiww eDZiLDB4NzAsMHhhMSwweGIzLDB4YTQsCisrCTB4NDMsMHg5NSwweDgwLDB4YzAsMHg4NCwweDBh LDB4NzksMHhiMCwweDg4LDB4NzQsMHhmMiwweGJmLAorKwkweDMxLDB4NmMsMHgzMywweDM4LDB4 MGIsMHgwMCwweGIyLDB4NWEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX25vbmNlW10gPQorKwl7CisrCTB4Nzgs MHg0NywweDZiLDB4ZjcsMHg5MCwweDhlLDB4ODcsMHhmMQorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfcGVyc29u YWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4ZjcsMHgyMiwweDFkLDB4M2EsMHhiZSwweDFk LDB4Y2EsMHgzMiwweDFiLDB4YmQsMHg4NywweDBjLAorKwkweDUxLDB4MjQsMHgxOSwweGVlLDB4 YTMsMHgyMywweDA5LDB4NjMsMHgzMywweDNkLDB4YTgsMHgwYywKKysJMHgxYywweGZhLDB4NDIs MHg4OSwweGNjLDB4NmYsMHhhMCwweGE4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXRb XSA9CisrCXsKKysJMHhjOSwweGUwLDB4ODAsMHhiZiwweDhjLDB4NDUsMHg1OCwweDM5LDB4ZmYs MHgwMCwweGFiLDB4MDIsCisrCTB4NGMsMHgzZSwweDNhLDB4OTUsMHg5YiwweDgwLDB4YTgsMHgy MSwweDJhLDB4ZWUsMHhiYSwweDczLAorKwkweGIxLDB4ZDksMHhjZiwweDI4LDB4ZjYsMHg4Ziww eDliLDB4MTIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4NGMs MHhhOCwweGM1LDB4ZjAsMHg1OSwweDllLDB4YTYsMHg4ZCwweDI2LDB4NTMsMHhkNywweDhhLAor KwkweGE5LDB4ZDgsMHhmNywweGVkLDB4YjIsMHhmOSwweDEyLDB4NDIsMHhlMSwweGU1LDB4YmQs MHhlNywKKysJMHhlNywweDFkLDB4NzQsMHg5OSwweDAwLDB4OWQsMHgzMSwweDNlCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9u b19kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZTIsMHhhYywweDIwLDB4ZjAs MHg4MCwweGU3LDB4YmMsMHg3ZSwweDljLDB4N2IsMHg2NSwweDcxLAorKwkweGFmLDB4MTksMHgz MiwweDE2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzEyOF9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4MzIs MHg3ZiwweDM4LDB4OGIsMHg3MywweDBhLDB4NzgsMHg4MywweGRjLDB4MzAsMHhiZSwweDlmLAor KwkweDEwLDB4MWYsMHhmNSwweDFmLDB4Y2EsMHgwMCwweGI1LDB4MGQsMHhkNiwweDlkLDB4NjAs MHg4MywKKysJMHg1MSwweDU0LDB4N2QsMHgzOCwweDIzLDB4M2EsMHg1MiwweDUwCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9u b19kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHgxOCwweDYxLDB4NTMsMHg1Niww eGVkLDB4ZWQsMHhkNywweDIwLDB4ZmIsMHg3MSwweDA0LDB4N2EsCisrCTB4YjIsMHhhYywweGMx LDB4MjgsMHhjZCwweGYyLDB4YzIsMHhmYywweGFhLDB4YjEsMHgwNiwweDA3LAorKwkweGU5LDB4 NDYsMHg5NSwweDAyLDB4NDgsMHgwMSwweDc4LDB4ZjkKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX3JldHVybmVk Yml0c1tdID0KKysJeworKwkweDI5LDB4YzgsMHgxYiwweDE1LDB4YjEsMHhkMSwweGMyLDB4ZjYs MHg3MSwweDg2LDB4NjgsMHgzMywKKysJMHg1NywweDgyLDB4MzMsMHhhZgorKwl9OworKworKwor Ky8qIEFFUy0xMjggbm8gZGYgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJ MHhjOSwweGM1LDB4NzksMHhiYywweGU4LDB4YzUsMHgxOSwweGQ4LDB4YmMsMHg2NiwweDczLDB4 NjcsCisrCTB4ZjYsMHhkMywweDcyLDB4YWEsMHhhNiwweDE2LDB4YjgsMHg1MCwweGI3LDB4NDcs MHgzYSwweDQyLAorKwkweGFiLDB4ZjQsMHgxNiwweGIyLDB4OTYsMHhkMiwweGI2LDB4NjAKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTI4X25vX2RmX25vbmNlW10gPQorKwl7CisrCTB4NWYsMHhiZiwweDk3LDB4MGMsMHg0YiwweGE0 LDB4ODcsMHgxMworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7Cisr CTB4Y2UsMHhmYiwweDdiLDB4M2YsMHhkNCwweDZiLDB4MjksMHgwZCwweDY5LDB4MDYsMHhmZiww eGJiLAorKwkweGYyLDB4ZTUsMHhjNiwweDZjLDB4MGEsMHgxMCwweGEwLDB4Y2YsMHgxYSwweDQ4 LDB4YzcsMHg4YiwKKysJMHgzYywweDE2LDB4ODgsMHhlZCwweDUwLDB4MTMsMHg4MSwweGNlCisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzEyOF9ub19kZl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg0YiwweDIyLDB4NDYsMHgx OCwweDAyLDB4N2IsMHhkMiwweDFiLDB4MjIsMHg0MiwweDdjLDB4MzcsCisrCTB4ZDksMHhmNiww eGU4LDB4OWIsMHgxMiwweDMwLDB4NWYsMHhlOSwweDkwLDB4ZTgsMHgwOCwweDI0LAorKwkweDRm LDB4MDYsMHg2NiwweGRiLDB4MTksMHgyYiwweDEzLDB4OTUKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2ludF9yZXR1 cm5lZGJpdHNbXSA9CisrCXsKKysJMHgyZSwweDk2LDB4NzAsMHg2NCwweGZhLDB4ZGYsMHhkZiww eDU3LDB4YjUsMHg4MiwweGVlLDB4ZDYsCisrCTB4ZWQsMHgzZSwweDY1LDB4YzIKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25v X2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDI2LDB4YzAsMHg3MiwweDE2LDB4 M2EsMHg0YiwweGI3LDB4OTksMHhkNCwweDA3LDB4YWYsMHg2NiwKKysJMHg2MiwweDM2LDB4OTYs MHhhNCwweDUxLDB4MTcsMHhmYSwweDA3LDB4OGIsMHgxNywweDVlLDB4YTEsCisrCTB4MmYsMHgz YywweDEwLDB4ZTcsMHg5MCwweGQwLDB4NDYsMHgwMAorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfYWRkaXRpb25hbGlu cHV0cmVzZWVkW10gPQorKwl7CisrCTB4ODMsMHgzOSwweDM3LDB4N2IsMHgwMiwweDA2LDB4ZDIs MHgxMiwweDEzLDB4OGQsMHg4YiwweGYyLAorKwkweGYwLDB4ZjYsMHgyNiwweGViLDB4YTQsMHgy MiwweDdiLDB4YzIsMHhlNywweGJhLDB4NzksMHhlNCwKKysJMHgzYiwweDc3LDB4NWQsMHg0ZCww eDQ3LDB4YjIsMHgyZCwweGI0CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7 CisrCTB4MGIsMHhiOSwweDY3LDB4MzcsMHhkYiwweDgzLDB4ZGYsMHhjYSwweDgxLDB4OGIsMHhm OSwweDNmLAorKwkweGYxLDB4MTEsMHgxYiwweDJmLDB4ZjAsMHg2MSwweGE2LDB4ZGYsMHhiYSww eGEzLDB4YjEsMHhhYywKKysJMHhkMywweGU2LDB4MDksMHhiOCwweDJjLDB4NmEsMHg2NywweGQ2 CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzEyOF9ub19kZl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHgxZSwweGE3LDB4YTQsMHhl NCwweGUxLDB4YTYsMHg3YywweDY5LDB4OWEsMHg0NCwweDZjLDB4MzYsCisrCTB4ODEsMHgzNyww eDE5LDB4ZDQKKysJfTsKKysKKysKKysvKiBBRVMtMTkyIG5vIGRmIFBSICAqLworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfZW50 cm9weWlucHV0W10gPQorKwl7CisrCTB4OWQsMHgyYywweGQyLDB4NTUsMHg2NiwweGVhLDB4ZTAs MHhiZSwweDE4LDB4YjcsMHg3NiwweGU3LAorKwkweDczLDB4MzUsMHhkOCwweDFmLDB4YWQsMHgz YSwweGUzLDB4ODEsMHgwZSwweDkyLDB4ZDAsMHg2MSwKKysJMHhjOSwweDEyLDB4MjYsMHhmNiww eDFjLDB4ZGYsMHhmZSwweDQ3LDB4YWEsMHhmZSwweDdkLDB4NWEsCisrCTB4MTcsMHgxZiwweDhk LDB4OWEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMTkyX25vX2RmX3ByX25vbmNlW10gPQorKwl7CisrCTB4NDQsMHg4MiwweGVkLDB4 ZTgsMHg0YywweDI4LDB4NWEsMHgxNCwweGZmLDB4ODgsMHg4ZCwweDE5LAorKwkweDYxLDB4NWMs MHhlZSwweDBmCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsK KysJMHg0NywweGQ3LDB4OWIsMHg5OSwweGFhLDB4Y2IsMHhlNywweGQyLDB4NTcsMHg2NiwweDJj LDB4ZTEsCisrCTB4NzgsMHhkNiwweDJjLDB4ZWEsMHhhMywweDIzLDB4NWYsMHgyYSwweGMxLDB4 M2EsMHhmMCwweGE0LAorKwkweDIwLDB4M2IsMHhmYSwweDA3LDB4ZDUsMHgwNSwweDAyLDB4ZTQs MHg1NywweDAxLDB4YjYsMHgxMCwKKysJMHg1NywweDJlLDB4ZTcsMHg1NQorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZf cHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4NGIsMHg3NCwweDBiLDB4NDAsMHhjZSww eDZiLDB4YzIsMHg2YSwweDI0LDB4YjQsMHhmMywweGFkLAorKwkweDdhLDB4YTUsMHg3YSwweGEy LDB4MTUsMHhlMiwweGM4LDB4NjEsMHgxNSwweGM2LDB4YjcsMHg4NSwKKysJMHg2OSwweDExLDB4 YWQsMHg3YiwweDE0LDB4ZDIsMHhmNiwweDEyLDB4YTEsMHg5NSwweDVkLDB4M2YsCisrCTB4ZTIs MHhkMCwweDBjLDB4MmYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7Cisr CTB4MGMsMHg5YywweGFkLDB4MDUsMHhlZSwweGFlLDB4NDgsMHgyMywweDg5LDB4NTksMHhhMSww eDk0LAorKwkweGQ3LDB4ZDgsMHg3NSwweGQ1LDB4NTQsMHg5MywweGM3LDB4NGEsMHhkOSwweDI2 LDB4ZGUsMHhlYiwKKysJMHhiYSwweGIwLDB4N2UsMHgzMCwweDFkLDB4NWYsMHg2OSwweDQwLDB4 OWMsMHgzYiwweDE3LDB4NTgsCisrCTB4MWQsMHgzMCwweGIzLDB4NzgKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3By X2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhmNywweDkzLDB4YjAsMHg2ZCwweDc3LDB4 ODMsMHhkNSwweDM4LDB4MDEsMHhlMSwweDUyLDB4NDAsCisrCTB4N2UsMHgzZSwweDBjLDB4MjYK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTkyX25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHhiYywweDRiLDB4 MzcsMHg0NCwweDFjLDB4YzUsMHg0NSwweDVmLDB4OGYsMHg1MSwweDYyLDB4OGEsCisrCTB4ODUs MHgzMCwweDFkLDB4N2MsMHhlNCwweGNmLDB4ZjcsMHg0NCwweGNlLDB4MzIsMHgzZSwweDU3LAor KwkweDk1LDB4YTQsMHgyYSwweGRmLDB4ZmQsMHg5ZSwweDM4LDB4NDEsMHhiMywweGY2LDB4YzUs MHhlZSwKKysJMHgwYywweDRiLDB4ZWUsMHg2ZQorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfZW50cm9weWlucHV0 cHIyW10gPQorKwl7CisrCTB4ZWMsMHhhZiwweGY2LDB4NGYsMHhiMSwweGEwLDB4NTQsMHhiNSww eDViLDB4ZTMsMHg0NiwweGIwLAorKwkweDc2LDB4NWEsMHg3YywweDNmLDB4N2IsMHg5NCwweDY5 LDB4MjEsMHg1MSwweDAyLDB4ZTUsMHg5ZiwKKysJMHgwNCwweDU5LDB4MDIsMHg5OCwweGM2LDB4 NDMsMHgyYywweGNjLDB4MjYsMHg0YywweDg3LDB4NmIsCisrCTB4OGUsMHgwYSwweDgzLDB4ZGYK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTkyX25vX2RmX3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkweDc0LDB4NDUsMHhmYiww eDUzLDB4ODQsMHg5NiwweGJlLDB4ZmYsMHgxNSwweGNjLDB4NDEsMHg5MSwKKysJMHhiOSwweGEx LDB4MjEsMHg2OAorKwl9OworKworKworKy8qIEFFUy0xOTIgbm8gZGYgTm8gUFIgICovCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9l bnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHgzYywweDdkLDB4YjUsMHhlMCwweDU0LDB4ZDksMHg2 ZSwweDhjLDB4YTksMHg4NiwweGNlLDB4NGUsCisrCTB4NmIsMHhhZiwweGViLDB4MmYsMHhlNyww eDc1LDB4ZTAsMHg4YiwweGE0LDB4M2IsMHgwNywweGZlLAorKwkweGJlLDB4MzMsMHg3NSwweDkz LDB4ODAsMHgyNywweGI1LDB4MjksMHg0NywweDhiLDB4YzcsMHgyOCwKKysJMHg5NCwweGMzLDB4 NTksMHg2MworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xOTJfbm9fZGZfbm9uY2VbXSA9CisrCXsKKysJMHg0MywweGYxLDB4N2QsMHhi OCwweGMzLDB4ZmUsMHhkMCwweDIzLDB4NmIsMHhiNCwweDkyLDB4ZGIsCisrCTB4MjksMHhmZCww eDQ1LDB4NzEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTkyX25vX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkw eDlmLDB4MjQsMHgyOSwweDk5LDB4OWUsMHgwMSwweGFiLDB4ZTksMHgxOSwweGQ4LDB4MjMsMHgw OCwKKysJMHhiNywweGQ2LDB4N2UsMHg4YywweGMwLDB4OWUsMHg3ZiwweDZlLDB4NWIsMHgzMyww eDIwLDB4OTYsCisrCTB4MGIsMHgyMywweDJjLDB4YTUsMHg2YSwweGY4LDB4MWIsMHgwNCwweDI2 LDB4ZGIsMHgyZSwweDJiLAorKwkweDNiLDB4ODgsMHhjZSwweDM1CisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9hZGRp dGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg5NCwweGU5LDB4N2MsMHgzZCwweGE3LDB4ZGIsMHg2 MCwweDgzLDB4MWYsMHg5OCwweDNmLDB4MGIsCisrCTB4ODgsMHg1OSwweDU3LDB4NTEsMHg4OCww eDlmLDB4NzYsMHg0OSwweDlmLDB4YTYsMHhkYSwweDcxLAorKwkweDFkLDB4MGQsMHg0NywweDE2 LDB4NjMsMHhjNSwweDY4LDB4ZTQsMHg1ZCwweDM5LDB4NjksMHhiMywKKysJMHgzZSwweGJlLDB4 ZDQsMHg4ZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xOTJfbm9fZGZfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGY5LDB4 ZDcsMHhhZCwweDY5LDB4YWIsMHg4ZiwweDIzLDB4NTYsMHg3MCwweDE3LDB4NGYsMHgyYSwKKysJ MHg0NSwweGU3LDB4NGEsMHhjNQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQor Kwl7CisrCTB4YTYsMHg3MSwweDZhLDB4M2QsMHhiYSwweGQxLDB4ZTgsMHg2NiwweGE2LDB4ZWYs MHhiMiwweDBlLAorKwkweGE4LDB4OWMsMHhhYSwweDRlLDB4YWYsMHgxNywweDg5LDB4NTAsMHgw MCwweGRhLDB4YTEsMHhiMSwKKysJMHgwYiwweGE0LDB4ZDksMHgzNSwweDg5LDB4YzgsMHhlNSww eGIwLDB4ZDksMHhiNywweGM0LDB4MzMsCisrCTB4OWIsMHhjYiwweDdlLDB4NzUKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25v X2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDI3LDB4MjEsMHhmYywweGMy LDB4YmQsMHhmMywweDNjLDB4Y2UsMHhjMywweGNhLDB4YzEsMHgwMSwKKysJMHhlMCwweGZmLDB4 OTMsMHgxMiwweDdkLDB4NTQsMHg0MiwweGUzLDB4OWYsMHgwMywweGRmLDB4MjcsCisrCTB4MDQs MHgwNywweDNjLDB4NTMsMHg3ZiwweGE4LDB4NjYsMHhjOCwweDk3LDB4NGIsMHg2MSwweDQwLAor KwkweDVkLDB4N2EsMHgyNSwweDc5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9hZGRpdGlvbmFsaW5wdXQyW10gPQor Kwl7CisrCTB4MmQsMHg4ZSwweDE2LDB4NWQsMHgwYiwweDlmLDB4ZWIsMHhhYSwweGQ2LDB4ZWMs MHgyOCwweDcxLAorKwkweDdjLDB4MGIsMHhjMSwweDFkLDB4ZDQsMHg0NCwweDE5LDB4NDcsMHhm ZCwweDFkLDB4N2MsMHhlNSwKKysJMHhmMywweDI3LDB4ZTEsMHhiNiwweDcyLDB4MGEsMHhlMCww eGVjLDB4MGUsMHhjZCwweGVmLDB4MWEsCisrCTB4OTEsMHg2YSwweGUzLDB4NWYKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25v X2RmX3JldHVybmVkYml0c1tdID0KKysJeworKwkweGU1LDB4ZGEsMHhiOCwweGUwLDB4NjMsMHg1 OSwweDVhLDB4Y2MsMHgzZCwweGRjLDB4OWYsMHhlOCwKKysJMHg2NiwweDY3LDB4MmMsMHg5Mgor Kwl9OworKworKworKy8qIEFFUy0yNTYgbm8gZGYgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9lbnRyb3B5aW5wdXRb XSA9CisrCXsKKysJMHgxNSwweGM3LDB4NWQsMHhjYiwweDQxLDB4NGIsMHgxNiwweDAxLDB4M2Es MHhkMSwweDQ0LDB4ZTgsCisrCTB4MjIsMHgzMiwweGM2LDB4OWMsMHgzZiwweGU3LDB4NDMsMHhm NSwweDlhLDB4ZDMsMHhlYSwweGYyLAorKwkweGQ3LDB4NGUsMHg2ZSwweDZhLDB4NTUsMHg3Myww eDQwLDB4ZWYsMHg4OSwweGFkLDB4MGQsMHgwMywKKysJMHg5NiwweDdlLDB4NzgsMHg4MSwweDJm LDB4OTEsMHgxYiwweDQ0LDB4YjAsMHgwMiwweGJhLDB4MWMKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX25vbmNl W10gPQorKwl7CisrCTB4ZGMsMHhlNCwweGQ0LDB4MjcsMHg3YSwweDkwLDB4ZDcsMHg5OSwweDQz LDB4YTEsMHgzYywweDMwLAorKwkweGNjLDB4NGIsMHhlZSwweDJlCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9w ZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHhlMywweGU2LDB4YjksMHgxMSwweGU0 LDB4N2EsMHhhNCwweDQwLDB4NmIsMHhmOCwweDczLDB4ZjcsCisrCTB4N2UsMHhlYywweGM3LDB4 YjksMHg5NywweGJmLDB4ZjgsMHgyNSwweDdiLDB4YmUsMHgxMSwweDliLAorKwkweDViLDB4NmEs MHgwYywweDJlLDB4MmIsMHgwMSwweDUxLDB4Y2QsMHg0MSwweDRiLDB4NmIsMHhhYywKKysJMHgz MSwweGE4LDB4MGIsMHhmNywweGU2LDB4NTksMHg0MiwweGI4LDB4MDMsMHgwYywweGY4LDB4MDYK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMjU2X25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDZhLDB4OWYsMHgw MCwweDkxLDB4YWUsMHhmZSwweGNmLDB4ODQsMHg5OSwweGNlLDB4YjEsMHg0MCwKKysJMHg2ZCww eDVkLDB4MzMsMHgyOCwweDg0LDB4ZjQsMHg4YywweDYzLDB4NGMsMHg3ZSwweGJkLDB4MmMsCisr CTB4ODAsMHg3NiwweGVlLDB4NWEsMHhhYSwweDE1LDB4MDcsMHgzMSwweGQ4LDB4YmIsMHg4Yyww eDY5LAorKwkweDlkLDB4OWQsMHhiYywweDdlLDB4NDksMHhhZSwweGVjLDB4MzksMHg2YiwweGQx LDB4MWYsMHg3ZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHhm MywweGI5LDB4NzUsMHg5YywweGJkLDB4ODgsMHhlYSwweGEyLDB4NTAsMHhhZCwweGQ2LDB4MTYs CisrCTB4MWEsMHgxMiwweDNjLDB4ODYsMHg2OCwweGFmLDB4NmYsMHhiZSwweDE5LDB4ZjIsMHhl ZSwweGNjLAorKwkweGE1LDB4NzAsMHg4NCwweDUzLDB4NTAsMHhjYiwweDlmLDB4MTQsMHhhOSww eGU1LDB4ZWUsMHhiOSwKKysJMHg0OCwweDQ1LDB4NDAsMHhlMiwweGM3LDB4YzksMHg5YSwweDc0 LDB4ZmYsMHg4YywweDk5LDB4MWYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9 CisrCXsKKysJMHgyZSwweGYyLDB4NDUsMHg0YywweDYyLDB4MmUsMHgwYSwweGI5LDB4NmIsMHhh MiwweGZkLDB4NTYsCisrCTB4NzksMHg2MCwweDkzLDB4Y2YKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2FkZGl0 aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHhhZiwweDY5LDB4MjAsMHhlOSwweDNiLDB4MzcsMHg5 ZCwweDNmLDB4YjQsMHg4MCwweDAyLDB4N2EsCisrCTB4MjUsMHg3ZCwweGI4LDB4ZGUsMHg3MSww eGM1LDB4MDYsMHgwYywweGI0LDB4ZTIsMHg4ZiwweDM1LAorKwkweGQ4LDB4MTQsMHgwZCwweDdm LDB4NzYsMHg2MywweDRlLDB4YjUsMHhlZSwweGU5LDB4NmYsMHgzNCwKKysJMHhjNywweDVmLDB4 NTYsMHgxNCwweDRhLDB4ZTgsMHg3MywweDk1LDB4NWIsMHgxYywweGI5LDB4Y2IKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25v X2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJeworKwkweGU1LDB4YjAsMHgyZSwweDdlLDB4 NTIsMHgzMCwweGUzLDB4NjMsMHg4MiwweGI2LDB4NDQsMHhkMywKKysJMHgyNSwweDE5LDB4MDUs MHgyNCwweDlhLDB4OWYsMHg1ZiwweDI3LDB4NmEsMHgyOSwweGFiLDB4ZmEsCisrCTB4MDcsMHhh MiwweDQyLDB4MGYsMHhjNSwweGE4LDB4OTQsMHg3YywweDE3LDB4N2IsMHg4NSwweDgzLAorKwkw eDBjLDB4MjUsMHgwZSwweDYzLDB4MGIsMHhlOSwweDEyLDB4NjAsMHhjZCwweGVmLDB4ODAsMHgw ZgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18yNTZfbm9fZGZfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4NWUsMHhmMiwweDI2 LDB4ZWYsMHg5ZiwweDU4LDB4NWQsMHhkNSwweDRhLDB4MTAsMHhmZSwweGE3LAorKwkweDJkLDB4 NWYsMHg0YSwweDQ2CisrCX07CisrCisrCisrLyogQUVTLTI1NiBubyBkZiBObyBQUiAgKi8KKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2Rm X2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweGZiLDB4Y2YsMHgxYiwweDYxLDB4MTYsMHg4OSww eDc4LDB4MjMsMHhmNSwweGQ4LDB4OTYsMHhlMywKKysJMHg0ZSwweDY0LDB4MGIsMHgyOSwweDlh LDB4M2YsMHhmOCwweGE1LDB4ZWQsMHhmMiwweGZlLDB4ZGIsCisrCTB4MTYsMHhjYSwweDdmLDB4 MTAsMHhmYSwweDVlLDB4MTgsMHg3NiwweDJjLDB4NjMsMHg1ZSwweDk2LAorKwkweGNmLDB4YjMs MHhkNiwweGZjLDB4YWYsMHg5OSwweDM5LDB4MjgsMHg5YywweDYxLDB4ZTgsMHhiMworKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZf bm9fZGZfbm9uY2VbXSA9CisrCXsKKysJMHgxMiwweDk2LDB4ZjAsMHg1MiwweGYzLDB4OGQsMHg4 MSwweGNmLDB4ZGUsMHg4NiwweGYyLDB4OTksCisrCTB4NDMsMHg5NiwweGI5LDB4ZjAKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2 X25vX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDYzLDB4MGQsMHg3OCww eGY1LDB4OTAsMHg4ZSwweDMyLDB4NDcsMHhiMCwweDRkLDB4MzcsMHg2MCwKKysJMHgwOSwweDk2 LDB4YmMsMHhiZiwweDk3LDB4N2EsMHg2MiwweDE0LDB4NDUsMHhiZCwweDhkLDB4Y2MsCisrCTB4 NjksMHhmYiwweDAzLDB4ZTEsMHg4MCwweDFjLDB4YzcsMHhlMiwweDJhLDB4ZjksMHgzNywweDNm LAorKwkweDY2LDB4NGQsMHg2MiwweGQ5LDB4MTAsMHhlMCwweGFkLDB4YzgsMHg5YSwweGYwLDB4 YTgsMHg2ZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18yNTZfbm9fZGZfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4MzYsMHhj NiwweDEzLDB4NjAsMHhiYiwweDE0LDB4YWQsMHgyMiwweGIwLDB4MzgsMHhhYywweGE2LAorKwkw eDE4LDB4MTYsMHg5MywweDI1LDB4ODYsMHhiNywweGRjLDB4ZGMsMHgzNiwweDk4LDB4MmIsMHhm OSwKKysJMHg2OCwweDMzLDB4ZDMsMHhjNiwweGZmLDB4Y2UsMHg4ZCwweDE1LDB4NTksMHg4Miww eDc2LDB4ZWQsCisrCTB4NmYsMHg4ZCwweDQ5LDB4NzQsMHgyZiwweGRhLDB4ZGMsMHgxZiwweDE3 LDB4ZDAsMHhkZSwweDE3CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7Cisr CTB4MTYsMHgyZiwweDhlLDB4M2YsMHgyMSwweDdhLDB4MWMsMHgyMCwweDU2LDB4ZDEsMHg5Miww eGY2LAorKwkweGQyLDB4MjUsMHg3NSwweDBlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9lbnRyb3B5aW5wdXRyZXNl ZWRbXSA9CisrCXsKKysJMHg5MSwweDc5LDB4NzYsMHhlZSwweGUwLDB4Y2YsMHg5ZSwweGMyLDB4 ZDUsMHhkNCwweDIzLDB4OWIsCisrCTB4MTIsMHg4YywweDdlLDB4MGEsMHhiNywweGQyLDB4OGIs MHhkNiwweDdjLDB4YTMsMHhjNiwweGU1LAorKwkweDBlLDB4YWEsMHhjNywweDZiLDB4YWUsMHgw ZCwweGZhLDB4NTMsMHgwNiwweDc5LDB4YTEsMHhlZCwKKysJMHg0ZCwweDZhLDB4MGUsMHhkOCww eDlkLDB4YmUsMHgxYiwweDMxLDB4OTMsMHg3YiwweGVjLDB4ZmIKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2FkZGl0 aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweGQyLDB4NDYsMHg1MCwweDIyLDB4MTAsMHgx NCwweDYzLDB4ZjcsMHhlYSwweDBmLDB4YjksMHg3ZSwKKysJMHgwZCwweGUxLDB4OTQsMHgwNyww eGFmLDB4MDksMHg0NCwweDMxLDB4ZWEsMHg2NCwweGE0LDB4MTgsCisrCTB4NWIsMHhmOSwweGQ4 LDB4YzIsMHhmYSwweDAzLDB4NDcsMHhjNSwweDM5LDB4NDMsMHhkNSwweDNiLAorKwkweDYyLDB4 ODYsMHg2NCwweGVhLDB4MmMsMHg3MywweDhjLDB4YWUsMHg5ZCwweDk4LDB4OTgsMHgyOQorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18y NTZfbm9fZGZfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDhjLDB4YWIsMHgxOCwweGY4 LDB4YzMsMHhlYywweDE4LDB4NWMsMHhiMywweDFlLDB4OWQsMHhiZSwKKysJMHgzZiwweDAzLDB4 YjQsMHgwMCwweDk4LDB4OWQsMHhhZSwweGViLDB4ZjQsMHg5NCwweGY4LDB4NDIsCisrCTB4OGYs MHhlMywweDM5LDB4MDcsMHhlMSwweGM5LDB4YWQsMHgwYiwweDFmLDB4ZWQsMHhjMCwweGJhLAor KwkweGY2LDB4ZDEsMHhlYywweDI3LDB4ODYsMHg3YiwweGQ2LDB4NTUsMHg5YiwweDYwLDB4YTUs MHhjNgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18yNTZfbm9fZGZfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZWYsMHhkMiwweGQ4 LDB4NWMsMHhkYywweDYyLDB4MjUsMHg5ZiwweGFhLDB4MWUsMHgyYywweDY3LAorKwkweGY2LDB4 MDIsMHgzMiwweGUyCisrCX07CisrCisrCisrLyogU0hBLTEgUFIgICovCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9lbnRyb3B5aW5wdXRbXSA9 CisrCXsKKysJMHhkMiwweDM2LDB4YTUsMHgyNywweDMxLDB4NzMsMHhkZCwweDExLDB4NGYsMHg5 MywweGJkLDB4ZTIsCisrCTB4MzEsMHhhNSwweDkxLDB4MTMKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX25vbmNlW10gPQorKwl7 CisrCTB4YjUsMHhiMywweDYwLDB4ZWYsMHhmNywweDYzLDB4MzEsMHhmMworKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfcGVyc29u YWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4ZDQsMHhiYiwweDAyLDB4MTAsMHhiMiwweDcx LDB4ZGIsMHg4MSwweGQ2LDB4ZjAsMHg0MiwweDYwLAorKwkweGRhLDB4ZWEsMHg3NywweDUyCisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh MV9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg0ZCwweGQyLDB4NmMsMHg4NywweGZi LDB4MmMsMHg0ZiwweGE2LDB4OGQsMHgxNiwweDYzLDB4MjIsCisrCTB4NmEsMHg1MSwweGUzLDB4 ZjgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGExX3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4YzksMHg4MywweDllLDB4MTYs MHhmNiwweDFjLDB4MGYsMHhiMiwweGVjLDB4NjAsMHgzMSwweGE5LAorKwkweGNiLDB4YTksMHgz NiwweDdhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMV9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4YTgsMHgxMywweDRm LDB4ZjQsMHgzMSwweDAyLDB4NDQsMHhlMywweGQzLDB4M2QsMHg2MSwweDllLAorKwkweGU1LDB4 YzYsMHgzZSwweDg5LDB4YjUsMHg5YiwweDBmLDB4MzUKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2FkZGl0aW9uYWxpbnB1dDJb XSA9CisrCXsKKysJMHhmOSwweGU4LDB4ZDIsMHg3MiwweDEzLDB4MzQsMHg5NSwweDZmLDB4MTUs MHg0OSwweDQ3LDB4OTksCisrCTB4MTYsMHgwMywweDE5LDB4NDcKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2VudHJvcHlpbnB1 dHByMltdID0KKysJeworKwkweDRlLDB4OGMsMHg0OSwweDliLDB4NGEsMHg1YywweDliLDB4OWMs MHgzYSwweGVlLDB4ZmIsMHhkMiwKKysJMHhhZSwweGNkLDB4OGMsMHhjNAorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfcmV0dXJu ZWRiaXRzW10gPQorKwl7CisrCTB4NTAsMHhiNCwweGI0LDB4Y2QsMHg2OCwweDU3LDB4ZmMsMHgy ZSwweGMxLDB4NTIsMHhjYywweGY2LAorKwkweDY4LDB4YTQsMHg4MSwweGVkLDB4N2UsMHhlNCww eDFkLDB4ODcKKysJfTsKKysKKysKKysvKiBTSEEtMSBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2VudHJvcHlpbnB1dFtdID0KKysJ eworKwkweGE5LDB4NDcsMHgxYiwweDI5LDB4MmQsMHgxYywweDA1LDB4ZGYsMHg3NiwweGQwLDB4 NjIsMHhmOSwKKysJMHhlMiwweDdmLDB4NGMsMHg3YgorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfbm9uY2VbXSA9CisrCXsKKysJMHg1 MywweDIzLDB4MjQsMHhlMywweGVjLDB4MGMsMHg1NCwweDE0CisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wZXJzb25hbGl6YXRpb25z dHJpbmdbXSA9CisrCXsKKysJMHg3YSwweDg3LDB4YTEsMHhhYywweDFjLDB4ZmQsMHhhYiwweGFl LDB4ZjcsMHhkNiwweGZiLDB4NzYsCisrCTB4MjgsMHhlYywweDZkLDB4Y2EKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2FkZGl0aW9u YWxpbnB1dFtdID0KKysJeworKwkweGZjLDB4OTIsMHgzNSwweGQ2LDB4N2UsMHhiNywweDI0LDB4 NjUsMHhmZCwweDEyLDB4MjcsMHgzNSwKKysJMHhjMCwweDcyLDB4Y2EsMHgyOAorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfaW50X3Jl dHVybmVkYml0c1tdID0KKysJeworKwkweDU3LDB4ODgsMHg4MiwweGU1LDB4MjUsMHhhNSwweDJj LDB4NGEsMHgwNiwweDIwLDB4NmMsMHg3MiwKKysJMHg1NSwweDYxLDB4ZGQsMHg5MCwweDcxLDB4 OWYsMHg5NSwweGVhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMV9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg2OSwweGE1 LDB4NDAsMHg2MiwweDk4LDB4NDcsMHg1NiwweDczLDB4NGEsMHg4ZiwweDYwLDB4OTYsCisrCTB4 ZDYsMHg5OSwweDI3LDB4ZWQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGExX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkw eGU1LDB4NDAsMHg0ZSwweGJkLDB4NTAsMHgwMCwweGY1LDB4MTUsMHhhNiwweGVlLDB4NDUsMHhk YSwKKysJMHg4NCwweDNkLDB4ZDQsMHhjMAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfYWRkaXRpb25hbGlucHV0MltdID0KKysJewor KwkweDExLDB4NTEsMHgxNCwweGYwLDB4MDksMHgxYiwweDRlLDB4NTYsMHgwZCwweGU5LDB4ZjYs MHgxZSwKKysJMHg1MiwweDY1LDB4Y2QsMHg5NgorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcmV0dXJuZWRiaXRzW10gPQorKwl7Cisr CTB4YTEsMHg5YywweDk0LDB4NmUsMHgyOSwweGUxLDB4MzMsMHgwZCwweDMyLDB4ZDYsMHhhYSww eGNlLAorKwkweDcxLDB4M2YsMHg1MiwweDcyLDB4OGIsMHg0MiwweGE4LDB4ZDcKKysJfTsKKysK KysKKysvKiBTSEEtMjI0IFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHgxMiwweDY5 LDB4MzIsMHg0ZiwweDgzLDB4YTYsMHhmNSwweDE0LDB4ZTMsMHg0OSwweDNlLDB4NzUsCisrCTB4 M2UsMHhkZSwweGFkLDB4YTEsMHgyOSwweGMzLDB4ZjMsMHgxOSwweDIwLDB4YjUsMHg0YywweGQ5 CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMjI0X3ByX25vbmNlW10gPQorKwl7CisrCTB4NmEsMHg3OCwweGQwLDB4ZWIsMHhiYiwweDVh LDB4ZjAsMHhlZSwweGU4LDB4YzMsMHhiYSwweDcxCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX3BlcnNvbmFsaXphdGlvbnN0 cmluZ1tdID0KKysJeworKwkweGQ1LDB4YjgsMHhiNiwweGJjLDB4YzEsMHg1YiwweDYwLDB4MzEs MHgzYywweGY1LDB4ZTUsMHhjMCwKKysJMHg4ZSwweDUyLDB4N2EsMHhiZCwweGVhLDB4NDcsMHhh OSwweDVmLDB4OGYsMHhmOSwweDhiLDB4YWUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfYWRkaXRpb25hbGlucHV0W10gPQor Kwl7CisrCTB4MWYsMHg1NSwweGVjLDB4YWUsMHgxNiwweDEyLDB4ODQsMHhiYSwweDg0LDB4MTYs MHgxOSwweDg4LAorKwkweDhlLDB4YjgsMHgzMywweDI1LDB4NTQsMHhmZiwweGNhLDB4NzksMHhh ZiwweDA3LDB4MjUsMHg1MAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweDky LDB4YTMsMHgzMiwweGE4LDB4OWEsMHgwYSwweDU4LDB4N2MsMHgxZCwweDVhLDB4N2UsMHhlMSwK KysJMHhiMiwweDczLDB4YWIsMHgwZSwweDE2LDB4NzksMHgyMywweGQzLDB4MjksMHg4OSwweDgx LDB4ZTEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEyMjRfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGYzLDB4MzgsMHg5 MSwweDQwLDB4MzcsMHg3YSwweDUxLDB4NzIsMHg0MiwweDc0LDB4NzgsMHgwYSwKKysJMHg2OSww eGZkLDB4YTYsMHg0NCwweDQzLDB4NDUsMHg2YywweDBjLDB4NWEsMHgxOSwweGZmLDB4ZjEsCisr CTB4NTQsMHg2MCwweGVlLDB4NmEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJewor KwkweDc1LDB4ZjMsMHgwNCwweDI1LDB4ZGQsMHgzNiwweGE4LDB4MzcsMHg0NiwweGFlLDB4MGMs MHg1MiwKKysJMHgwNSwweDc5LDB4NGMsMHgyNiwweGRiLDB4ZTksMHg3MSwweDE2LDB4NGMsMHgw YSwweGYyLDB4NjAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEyMjRfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4ZWEsMHhj NSwweDAzLDB4MGEsMHg0ZiwweGIwLDB4MzgsMHg4ZCwweDIzLDB4ZDQsMHhjOCwweDc3LAorKwkw eGUyLDB4NmQsMHg5YywweDBiLDB4NDQsMHhmNywweDJkLDB4NWIsMHhiZiwweDVkLDB4MmEsMHgx MQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTIyNF9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg2MCwweDUwLDB4MmIsMHhlNyww eDg2LDB4ZDgsMHgyNiwweDczLDB4ZTMsMHgxZCwweDk1LDB4MjAsCisrCTB4YjMsMHgyYywweDMy LDB4MWMsMHhmNSwweGNlLDB4NTcsMHhhNiwweDY3LDB4MmIsMHhkYywweDRlLAorKwkweGRkLDB4 MTEsMHg0YywweGM0CisrCX07CisrCisrCisrLyogU0hBLTIyNCBObyBQUiAgKi8KKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfZW50cm9weWlucHV0 W10gPQorKwl7CisrCTB4YjIsMHgxYywweDc3LDB4NGQsMHhmNiwweGQzLDB4YjYsMHg0MCwweGI3 LDB4MzAsMHgzZSwweDI5LAorKwkweGIwLDB4ODUsMHgxYywweGJlLDB4NGEsMHhlYSwweDZiLDB4 NWEsMHhiNSwweDhhLDB4OTcsMHhlYgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9ub25jZVtdID0KKysJeworKwkweDQyLDB4MDIs MHgwYSwweDFjLDB4OTgsMHg5YSwweDc3LDB4OWUsMHg5ZiwweDgwLDB4YmEsMHhlMAorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9w ZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg5OCwweGI4LDB4MDQsMHg0MSwweGZj LDB4YzEsMHg1ZCwweGM1LDB4ZTksMHhiOSwweDA4LDB4ZGEsCisrCTB4ZjksMHhmYSwweDBkLDB4 OTAsMHhjZSwweGRmLDB4MWQsMHgxMCwweGE5LDB4OGQsMHg1MCwweDBjCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2FkZGl0aW9u YWxpbnB1dFtdID0KKysJeworKwkweDlhLDB4OGQsMHgzOSwweDQ5LDB4NDIsMHhkNSwweDBiLDB4 YWUsMHhlMSwweGFmLDB4YjcsMHgwMCwKKysJMHgwMiwweGZhLDB4OTYsMHhiMSwweGE1LDB4MWQs MHgyZCwweDI1LDB4NzgsMHhlZSwweDgzLDB4M2YKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfaW50X3JldHVybmVkYml0c1tdID0K KysJeworKwkweGU0LDB4ZjUsMHg1MywweDc5LDB4NWEsMHg5NywweDU4LDB4MDYsMHgwOCwweGJh LDB4N2IsMHhmYSwKKysJMHhmMCwweDgzLDB4MDUsMHg4YywweDIyLDB4YzAsMHhjOSwweGRiLDB4 MTUsMHhlNywweGRlLDB4MjAsCisrCTB4NTUsMHgyMiwweDlhLDB4YWQKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfZW50cm9weWlu cHV0cmVzZWVkW10gPQorKwl7CisrCTB4NjcsMHgwOSwweDQ4LDB4YWEsMHgwNywweDE2LDB4OTks MHg4OSwweDdmLDB4NmQsMHhhMCwweGU1LAorKwkweDhmLDB4ZGYsMHhiYywweGRiLDB4ZmUsMHhl NSwweDZjLDB4N2EsMHg5NSwweDRhLDB4NjYsMHgxNworKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9hZGRpdGlvbmFsaW5wdXRyZXNl ZWRbXSA9CisrCXsKKysJMHgwZiwweDRiLDB4MWMsMHg2ZiwweGI3LDB4ZTMsMHg0NywweGU1LDB4 NWQsMHg3ZCwweDM4LDB4ZDYsCisrCTB4MjgsMHg5YiwweGViLDB4NTUsMHg2MywweDA5LDB4M2Us MHg3YywweDU2LDB4ZWEsMHhmOCwweDE5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsK KysJMHgyZCwweDI2LDB4N2MsMHgzNywweGU0LDB4N2EsMHgyOCwweDVlLDB4NWEsMHgzYywweGFm LDB4M2QsCisrCTB4NWEsMHg4ZSwweDU1LDB4YTIsMHgxYSwweDZlLDB4YzAsMHhlNSwweGY2LDB4 MjEsMHhkMywweGY2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMjI0X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDRkLDB4ODMsMHgz NSwweGRmLDB4NjcsMHhhOSwweGZjLDB4MTcsMHhkYSwweDcwLDB4Y2MsMHg4YiwKKysJMHg3Ziww eDc3LDB4YWUsMHhhMiwweDVmLDB4YjksMHg3ZSwweDc0LDB4NGMsMHgyNiwweGMxLDB4N2EsCisr CTB4M2IsMHhhNywweDVjLDB4OTMKKysJfTsKKysKKysKKysvKiBTSEEtMjU2IFBSICAqLworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9lbnRy b3B5aW5wdXRbXSA9CisrCXsKKysJMHhjZSwweDQ5LDB4MDAsMHg3YSwweDU2LDB4ZTMsMHg2Nyww eDhmLDB4ZTEsMHhiNiwweGE3LDB4ZDQsCisrCTB4NGYsMHgwOCwweDdhLDB4MWIsMHgwMSwweGY0 LDB4ZmEsMHg2YiwweGVmLDB4YjcsMHhlNSwweGViLAorKwkweDA3LDB4M2QsMHgxMSwweDBkLDB4 YzgsMHhlYSwweDJiLDB4ZmUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfbm9uY2VbXSA9CisrCXsKKysJMHg3MywweDQxLDB4 YzgsMHg5MiwweDk0LDB4ZTIsMHhjNSwweDVmLDB4OTMsMHhmZCwweDM5LDB4NWQsCisrCTB4MmIs MHg5MSwweDRkLDB4MzgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEyNTZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7Cisr CTB4NTAsMHg2ZCwweDAxLDB4MDEsMHgwNywweDVhLDB4ODAsMHgzNSwweDdhLDB4NTYsMHgxYSww eDU2LAorKwkweDJmLDB4OWEsMHgwYiwweDM1LDB4YjIsMHhiMSwweGM5LDB4ZTUsMHhjYSwweDY5 LDB4NjEsMHg0OCwKKysJMHhmZiwweGZiLDB4MGYsMHhkOSwweDRiLDB4NzksMHgxZCwweGJhCisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh MjU2X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDIwLDB4YjgsMHhkZiwweDQ0LDB4 NzcsMHg1YSwweGI4LDB4ZDMsMHhiZiwweGY2LDB4Y2YsMHhhYywKKysJMHg1ZSwweGE2LDB4OTYs MHg2MiwweDczLDB4NDQsMHg0MCwweDRhLDB4MzAsMHhmYiwweDM4LDB4YTUsCisrCTB4N2IsMHgw ZCwweGU0LDB4MGQsMHhjNiwweGU0LDB4OWEsMHgxZgorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9lbnRyb3B5aW5wdXRwcltd ID0KKysJeworKwkweDA0LDB4YzQsMHg2NSwweGY0LDB4ZDMsMHhiZiwweDgzLDB4NGIsMHhhYiww eGM4LDB4NDEsMHhhOCwKKysJMHhjMiwweGUwLDB4NDQsMHg2MywweDc3LDB4NGMsMHg2ZiwweDZj LDB4NDksMHg0NiwweGZmLDB4OTQsCisrCTB4MTcsMHhlYSwweGU2LDB4MWEsMHg5ZCwweDVlLDB4 NjYsMHg3OAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTI1Nl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MDcsMHg0ZCww eGFjLDB4OWIsMHg4NiwweGNhLDB4NGEsMHhhYSwweDZlLDB4N2EsMHgwMywweGEyLAorKwkweDVk LDB4MTAsMHhlYSwweDBiLDB4ZjksMHg4MywweGNjLDB4ZDEsMHhmYywweGUyLDB4MDcsMHhjNywK KysJMHgwNiwweDM0LDB4NjAsMHg2ZiwweDgzLDB4OTQsMHg5OSwweDc2CisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2FkZGl0 aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHg4OSwweDRlLDB4NDUsMHg4YywweDExLDB4ZjksMHhi YywweDViLDB4YWMsMHg3NCwweDhiLDB4NGIsCisrCTB4NWYsMHhmNywweDE5LDB4ZjMsMHhmNSww eDI0LDB4NTQsMHgxNCwweGQxLDB4MTUsMHhiMSwweDQzLAorKwkweDEyLDB4YTQsMHg1ZiwweGQ0 LDB4ZWMsMHhmYywweGNkLDB4MDkKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7Cisr CTB4MGUsMHhlYiwweDFmLDB4ZDcsMHhmYywweGQxLDB4OWQsMHhkNCwweDA1LDB4MzYsMHg4Yiww eGIyLAorKwkweGZiLDB4ZTQsMHhmNCwweDUxLDB4MGMsMHg4NywweDliLDB4MDIsMHg0NCwweGQ1 LDB4OTIsMHg0ZCwKKysJMHg0NCwweGZlLDB4MWEsMHgwMywweDQzLDB4NTYsMHhiZCwweDg2Cisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh MjU2X3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkweDAyLDB4YWEsMHhiNiwweDFkLDB4N2Us MHgyYSwweDQwLDB4MDMsMHg2OSwweDJkLDB4NDksMHhhMywKKysJMHg0MSwweGU3LDB4NDQsMHgw YiwweGFmLDB4N2IsMHg4NSwweGU0LDB4NWYsMHg1MywweDNiLDB4NjQsCisrCTB4YmMsMHg4OSww eGM4LDB4ODIsMHhkNCwweDc4LDB4MzcsMHhhMgorKwl9OworKworKworKy8qIFNIQS0yNTYgTm8g UFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh MjU2X2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDViLDB4MWIsMHhlYywweDRkLDB4YTksMHgz OCwweDc0LDB4NWEsMHgzNCwweDBiLDB4N2IsMHhjNSwKKysJMHhlNSwweGQ3LDB4NjYsMHg3Yyww eGJjLDB4ODIsMHhiOSwweDBlLDB4MmQsMHgxZiwweDkyLDB4ZDcsCisrCTB4YzEsMHhiYywweDY3 LDB4NjksMHhlYywweDZiLDB4MDMsMHgzYworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9ub25jZVtdID0KKysJeworKwkweGE0LDB4 MGMsMHhkOCwweDljLDB4NjEsMHhkOCwweGMzLDB4NTQsMHhmZSwweDUzLDB4YzksMHhlNSwKKysJ MHg1ZCwweDZmLDB4NmQsMHgzNQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsK KysJMHgyMiwweDVlLDB4NjIsMHg5MywweDQyLDB4ODMsMHg3OCwweDI0LDB4ZDgsMHg0MCwweDhj LDB4ZGUsCisrCTB4NmYsMHhmOSwweGE0LDB4N2EsMHhjNSwweGE3LDB4M2IsMHg4OCwweGEzLDB4 ZWUsMHg0MiwweDIwLAorKwkweGZkLDB4NjEsMHg1NiwweGM2LDB4NGMsMHgxMywweDQxLDB4OWMK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEyNTZfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4YmYsMHg3NCwweDViLDB4ZjYsMHhj NSwweDY0LDB4NWUsMHg5OSwweDM0LDB4OGYsMHhiYywweGE0LAorKwkweGUyLDB4YmQsMHhkOCww eDg1LDB4MjYsMHgzNywweGVhLDB4YmEsMHg0ZiwweGYyLDB4OWEsMHg5YSwKKysJMHg2NiwweGZj LDB4ZGYsMHg2MywweDI2LDB4MjYsMHgxOSwweDg3CisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2ludF9yZXR1cm5lZGJpdHNbXSA9 CisrCXsKKysJMHhiMywweGM2LDB4MDcsMHgwNywweGQ2LDB4NzUsMHhmNiwweDJiLDB4ZDYsMHgy MSwweDk2LDB4ZjEsCisrCTB4YWUsMHhkYiwweDJiLDB4YWMsMHgyNSwweDJhLDB4YWUsMHhhZSww eDQxLDB4NzIsMHgwMywweDVlLAorKwkweGJmLDB4ZDMsMHg2NCwweGJjLDB4NTksMHhmOSwweGMw LDB4NzYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEyNTZfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4YmYsMHgyMCwweDMz LDB4NTYsMHgyOSwweGE4LDB4MzcsMHgwNCwweDFmLDB4NzgsMHgzNCwweDNkLAorKwkweDgxLDB4 MmEsMHhjOSwweDg2LDB4YzYsMHg3YSwweDJmLDB4ODgsMHg1ZSwweGQ1LDB4YmUsMHgzNCwKKysJ MHg0NiwweDIwLDB4YTQsMHgzNSwweGViLDB4YzcsMHhlMiwweDlkCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2FkZGl0aW9uYWxp bnB1dHJlc2VlZFtdID0KKysJeworKwkweDliLDB4YWUsMHgyZCwweDJkLDB4NjEsMHhhNCwweDg5 LDB4ZWIsMHg0MywweDQ2LDB4YTcsMHhkYSwKKysJMHhlZiwweDQwLDB4Y2EsMHg0YSwweDk5LDB4 MTEsMHg0MSwweGRjLDB4NWMsMHg5NCwweGU5LDB4YWMsCisrCTB4ZDQsMHhkMCwweGU2LDB4YmQs MHhmYiwweDAzLDB4OWMsMHhhOAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4 MjMsMHhhYSwweDBjLDB4YmQsMHgyOCwweDMzLDB4ZTIsMHg1MSwweGZjLDB4NzEsMHhkMiwweDE1 LAorKwkweDFmLDB4NzYsMHhmZCwweDBkLDB4ZTAsMHhiNywweGI1LDB4ODQsMHg3NSwweDViLDB4 YmUsMHhmMywKKysJMHg1YywweGNhLDB4YzUsMHgzMCwweGYyLDB4NzUsMHgxZiwweGRhCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2 X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDkwLDB4M2MsMHhjMSwweDEwLDB4OGMsMHgxMiww eDAxLDB4YzYsMHhhNiwweDNhLDB4MGYsMHg0ZCwKKysJMHhiNiwweDNhLDB4NGYsMHg0MSwweDlj LDB4NjEsMHg3NSwweDg0LDB4ZTksMHg3NCwweDc1LDB4ZmQsCisrCTB4ZmUsMHhmMiwweDFmLDB4 NDMsMHhkOCwweDVlLDB4MjQsMHhhMworKwl9OworKworKworKy8qIFNIQS0zODQgUFIgICovCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2Vu dHJvcHlpbnB1dFtdID0KKysJeworKwkweDcxLDB4OWQsMHhiMiwweDVhLDB4NzEsMHg2ZCwweDA0 LDB4ZTksMHgxZSwweGM3LDB4OTIsMHgyNCwKKysJMHg2ZSwweDEyLDB4MzMsMHhhOSwweDUyLDB4 NjQsMHgzMSwweGVmLDB4NzEsMHhlYiwweDIyLDB4NTUsCisrCTB4MjgsMHg5NywweDA2LDB4NmEs MHhjMCwweDBjLDB4YTAsMHg3ZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9ub25jZVtdID0KKysJeworKwkweGY1LDB4MGQs MHhmYSwweGIwLDB4ZWMsMHg2YSwweDdjLDB4ZDYsMHhiZCwweDliLDB4MDUsMHhmZCwKKysJMHgz OCwweDNlLDB4MmUsMHg1NgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsK KysJMHg3NCwweGFjLDB4N2UsMHg2ZCwweGIxLDB4YTQsMHhlNywweDIxLDB4ZDEsMHgxZSwweDZl LDB4OTYsCisrCTB4NmQsMHg0ZCwweDUzLDB4NDYsMHg4MiwweDk2LDB4NmUsMHhjZiwweGFhLDB4 ODEsMHg4ZCwweDdkLAorKwkweDllLDB4ZTEsMHgwZiwweDE1LDB4ZWEsMHg0MSwweGJmLDB4ZTMK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEzODRfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4ZGEsMHg5NSwweGQ0LDB4ZDAs MHhiOCwweDExLDB4ZDMsMHg0OSwweDI3LDB4NWQsMHhhOSwweDM5LAorKwkweDY4LDB4ZjMsMHhh OCwweGU5LDB4NWQsMHgxOSwweDhhLDB4MmIsMHg2NiwweGU4LDB4NjksMHgwNiwKKysJMHg3Yyww eDllLDB4MDMsMHhhMSwweDhiLDB4MjYsMHgyZCwweDZlCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2VudHJvcHlpbnB1dHBy W10gPQorKwl7CisrCTB4NDksMHhkZiwweDQ0LDB4MDAsMHhlNCwweDFjLDB4NzUsMHgwYiwweDI2 LDB4NWEsMHg1OSwweDY0LAorKwkweDFmLDB4NGUsMHhiMSwweGIyLDB4MTMsMHhmMSwweDIyLDB4 NGUsMHhiNCwweDZkLDB4OWEsMHhjYywKKysJMHhhMCwweDQ4LDB4ZTYsMHhjZiwweDFkLDB4ZDEs MHg5MiwweDBkCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMzg0X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhjOCwweDUy LDB4YWUsMHhiZiwweDA0LDB4M2MsMHgyNywweGI3LDB4NzgsMHgxOCwweGFhLDB4OGYsCisrCTB4 ZmYsMHhjZiwweGE0LDB4ZjEsMHhjYywweGU3LDB4NjgsMHhmYSwweDIyLDB4YTIsMHgxMywweDQ1 LAorKwkweGU4LDB4ZGQsMHg4NywweGU2LDB4ZjIsMHg2ZSwweGRkLDB4YzcsMHg1MiwweDkwLDB4 OWYsMHg3YiwKKysJMHhmYSwweDYxLDB4MmQsMHg5ZCwweDllLDB4Y2YsMHg5OCwweGFjLDB4NTIs MHg0MCwweGNlLDB4YWYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEzODRfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDYx LDB4N2MsMHgwMywweDlhLDB4M2UsMHg1MCwweDU3LDB4NjAsMHhjNSwweDgzLDB4YzksMHhiMiwK KysJMHhkMSwweDg3LDB4ODUsMHg2NiwweDkyLDB4NWQsMHg4NCwweDBlLDB4NTMsMHhmYiwweDcw LDB4MDMsCisrCTB4NzIsMHhmZCwweGJhLDB4YWUsMHg5YywweDhmLDB4ZjgsMHgxOAorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9w cl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHhmOCwweGViLDB4ODksMHhiMSwweDhkLDB4 NzgsMHhiZSwweDIxLDB4ZTAsMHhiYiwweDlkLDB4YjcsCisrCTB4OTUsMHgwZSwweGQ5LDB4NDYs MHgwYywweDhjLDB4ZTIsMHg2MywweGI3LDB4OWQsMHg2NywweDkwLAorKwkweGJkLDB4YzcsMHgw YiwweGE1LDB4Y2UsMHhiMiwweDY1LDB4ODEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7 CisrCTB4ZTYsMHg5ZiwweGZlLDB4NjgsMHhkNiwweGI1LDB4NzksMHhmMSwweDA2LDB4NWYsMHhh MywweGJiLAorKwkweDIzLDB4ODUsMHhkOCwweGYwLDB4MjksMHg1YSwweDY4LDB4OWUsMHhmNSww eGY0LDB4YTYsMHgxMiwKKysJMHhlMCwweDlhLDB4ZTIsMHhhYywweDAwLDB4MWQsMHg5OCwweDI2 LDB4ZmMsMHg1MywweDk1LDB4NTMsCisrCTB4ZTQsMHgzZSwweDE3LDB4ZDUsMHgwOCwweDBiLDB4 NzAsMHgzZCwweDY3LDB4OTksMHhhYywweDY2CisrCX07CisrCisrCisrLyogU0hBLTM4NCBObyBQ UiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEz ODRfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4MDcsMHgxNSwweDI3LDB4MmEsMHhhZiwweDc0 LDB4MjQsMHgzNywweGJjLDB4ZDUsMHgxNCwweDY5LAorKwkweGNlLDB4MTEsMHhmZiwweGEyLDB4 NmIsMHhiOCwweDA1LDB4NjcsMHgzNCwweGY4LDB4YmQsMHg2ZCwKKysJMHg2YSwweGNjLDB4Y2Qs MHg2MCwweGEzLDB4NjgsMHhjYSwweGY0CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X25vbmNlW10gPQorKwl7CisrCTB4NzAsMHgx NywweGMyLDB4NWIsMHg1ZCwweDIyLDB4MGIsMHgwNiwweDE1LDB4NTQsMHg3OCwweDc3LAorKwkw eDQ0LDB4YWYsMHgyZiwweDA5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJewor KwkweDg5LDB4MzksMHgyOCwweGIwLDB4NjAsMHhlYiwweDNkLDB4ZGMsMHg1NSwweDc1LDB4ODYs MHhlYiwKKysJMHhhZSwweGEyLDB4OGYsMHhiYywweDFiLDB4NzUsMHhkNCwweGUxLDB4MGYsMHhh YSwweDM4LDB4Y2EsCisrCTB4NjIsMHg4YiwweGNiLDB4MmMsMHgyNiwweGY2LDB4YmMsMHhiMQor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTM4NF9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHgzMCwweDJiLDB4NDIsMHgzNSwweGVm LDB4ZGEsMHg0MCwweDU1LDB4MjgsMHhjNiwweDk1LDB4ZmIsCisrCTB4NTQsMHgwMSwweDYyLDB4 ZDcsMHg4NywweDE0LDB4NDgsMHg2ZCwweDkwLDB4NGMsMHhhOSwweDAyLAorKwkweDU0LDB4NDAs MHgyMiwweGM4LDB4NjYsMHhhNSwweDQ4LDB4NDgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfaW50X3JldHVybmVkYml0c1tdID0K KysJeworKwkweDgyLDB4YzQsMHhhMSwweDljLDB4MjEsMHhkMiwweGU3LDB4YTUsMHhhNiwweGY2 LDB4NWYsMHgwNCwKKysJMHg1YywweGM3LDB4MzEsMHg5ZCwweDhkLDB4NTksMHg3NCwweDUwLDB4 MTksMHg4OSwweDJmLDB4NjMsCisrCTB4ZDUsMHhiNywweDdlLDB4ZWIsMHgxNSwweGUzLDB4NzAs MHg4MywweGExLDB4MjQsMHg1OSwweGZhLAorKwkweDJjLDB4NTYsMHhmNiwweDg4LDB4M2EsMHg5 MiwweDkzLDB4YTEsMHhmYiwweDc5LDB4YzEsMHg3YQorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9lbnRyb3B5aW5wdXRyZXNlZWRb XSA9CisrCXsKKysJMHgzOSwweGE2LDB4ZTgsMHg1YywweDgyLDB4MTcsMHg3MSwweDI2LDB4NTcs MHg0ZiwweDlmLDB4YzIsCisrCTB4NTUsMHhmZiwweDVjLDB4OWIsMHg1MywweDFhLDB4ZDEsMHg1 ZiwweGJjLDB4NjIsMHhlNCwweDI3LAorKwkweDJkLDB4MzIsMHhmMCwweGU0LDB4NTIsMHg4Yyww eGM1LDB4MGMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEzODRfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4OGQsMHhj YiwweDhkLDB4Y2UsMHgwOCwweGVhLDB4ODAsMHhlOCwweDliLDB4NjEsMHhhOCwweDBmLAorKwkw eGFmLDB4NDksMHgyMCwweDllLDB4NzQsMHhjYiwweDU3LDB4ODAsMHg0MiwweGIwLDB4ODQsMHg1 ZSwKKysJMHgzMCwweDJhLDB4NjcsMHgwOCwweGY0LDB4ZTMsMHg0MCwweDIyCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2FkZGl0 aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHg3YywweDhmLDB4YzIsMHhhZSwweDIyLDB4NGEsMHhk NiwweGY2LDB4MDUsMHhhNCwweDdhLDB4ZWEsCisrCTB4YmIsMHgyNSwweGQwLDB4YjcsMHg1YSww eGQ2LDB4Y2YsMHg5ZCwweGYzLDB4NmMsMHhlMiwweGIyLAorKwkweDRlLDB4YjQsMHhiZCwweGY0 LDB4ZTUsMHg0MCwweDgwLDB4OTQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4OWUs MHg3ZSwweGZiLDB4NTksMHhiYiwweGFhLDB4M2MsMHhmNywweGUxLDB4ZjgsMHg3NiwweGRkLAor KwkweDYzLDB4NWYsMHhhZiwweDIzLDB4ZDYsMHg2NCwweDYxLDB4YzAsMHg5YSwweDA5LDB4NDcs MHhjOSwKKysJMHgzMywweGRmLDB4NmQsMHg1NSwweDkxLDB4MzQsMHg3OSwweDcwLDB4YzQsMHg5 OSwweDZlLDB4NTQsCisrCTB4MDksMHg2NCwweDIxLDB4MWEsMHhiZCwweDFlLDB4ODAsMHg0MCww eDM0LDB4YWQsMHhmYSwweGQ3CisrCX07CisrCisrCisrLyogU0hBLTUxMiBQUiAgKi8KKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfZW50cm9w eWlucHV0W10gPQorKwl7CisrCTB4MTMsMHhmNywweDYxLDB4NzUsMHg2NSwweDI4LDB4YTIsMHg1 OSwweDEzLDB4NWEsMHg0YSwweDRmLAorKwkweDU2LDB4NjAsMHg4YywweDUzLDB4N2QsMHhiMCww eGJkLDB4MDYsMHg0ZiwweGVkLDB4Y2MsMHhkMiwKKysJMHhhMiwweGI1LDB4ZmQsMHg1YiwweDNh LDB4YWIsMHhlYywweDI4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX25vbmNlW10gPQorKwl7CisrCTB4YmUsMHhhMywweDkx LDB4OTMsMHgxZCwweGMzLDB4MzEsMHgzYSwweDIzLDB4MzMsMHg1MCwweDY3LAorKwkweDg4LDB4 YzcsMHhhMiwweGM0CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhNTEyX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkw eDFmLDB4NTksMHg0ZCwweDdiLDB4ZTYsMHg0NiwweDkxLDB4NDgsMHhjMSwweDI1LDB4ZmEsMHhm ZiwKKysJMHg4OSwweDEyLDB4NzcsMHgzNSwweGRmLDB4M2UsMHhmNCwweDgwLDB4NWYsMHhkOSww eGIwLDB4MDcsCisrCTB4MjIsMHg0MSwweGRkLDB4NDgsMHg3OCwweDZiLDB4NzcsMHgyYgorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUx Ml9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHgzMCwweGZmLDB4NjMsMHg2ZiwweGFj LDB4ZDksMHg4NCwweDM5LDB4NmYsMHhlNCwweDk5LDB4Y2UsCisrCTB4OTEsMHg3ZCwweDdlLDB4 YzgsMHg1OCwweGYyLDB4MTIsMHhjMywweGI2LDB4YWQsMHhkYSwweDIyLAorKwkweDA0LDB4YTAs MHhkMiwweDIxLDB4ZmUsMHhmMiwweDk1LDB4MWQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfZW50cm9weWlucHV0cHJbXSA9 CisrCXsKKysJMHg2NCwweDU0LDB4MTMsMHhlYywweDRmLDB4NzcsMHhkYSwweGIyLDB4OTIsMHgy ZSwweDUyLDB4ODAsCisrCTB4MTEsMHgxMCwweGMyLDB4ZjgsMHhlNiwweGE3LDB4Y2QsMHg0Yiww eGZjLDB4MzIsMHgyZSwweDllLAorKwkweGViLDB4YmIsMHhiMSwweGJmLDB4MTUsMHg1YywweDcz LDB4MDgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGE1MTJfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGVmLDB4MWUsMHhk YywweDBhLDB4YTQsMHgzNiwweDkxLDB4OWMsMHgzZCwweDI3LDB4OTcsMHg1MCwKKysJMHg4ZCww eDM2LDB4MjksMHg4ZCwweGNlLDB4NmEsMHgwYywweGY3LDB4MjEsMHhjMCwweDkxLDB4YWUsCisr CTB4MGMsMHg5NiwweDcyLDB4YmQsMHg1MiwweDgxLDB4NTgsMHhmYywweDZkLDB4ZTUsMHhmNyww eGE1LAorKwkweGZkLDB4NWQsMHhhNywweDU4LDB4NjgsMHhjOCwweDk5LDB4NTgsMHg4ZSwweGM4 LDB4Y2UsMHg5NSwKKysJMHgwMSwweDdkLDB4ZmYsMHhhNCwweGM4LDB4ZjcsMHg2MywweGZlLDB4 NWYsMHg2OSwweDgzLDB4NTMsCisrCTB4ZTIsMHhjNiwweDhiLDB4YzMKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfYWRkaXRp b25hbGlucHV0MltdID0KKysJeworKwkweGU2LDB4OWIsMHhjNCwweDg4LDB4MzQsMHhjYSwweGVh LDB4MjksMHgyZiwweDk4LDB4MDUsMHhhNCwKKysJMHhkMywweGMwLDB4N2IsMHgxMSwweGU4LDB4 YmIsMHg3NSwweGYyLDB4YmQsMHgyOSwweGI3LDB4NDAsCisrCTB4MjUsMHg3ZiwweGMxLDB4Yjcs MHhiMSwweGYxLDB4MjUsMHg2MQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJ MHgyMywweDZkLDB4ZmYsMHhkZSwweGZiLDB4ZDEsMHhiYSwweDMzLDB4MTgsMHhlNiwweGJlLDB4 YjUsCisrCTB4NDgsMHg3NywweDZkLDB4N2YsMHhhNywweGUxLDB4NGQsMHg0OCwweDFlLDB4M2Ms MHhhNywweDM0LAorKwkweDFhLDB4YzgsMHg2MCwweGRiLDB4OGYsMHg5OSwweDE1LDB4OTkKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1 MTJfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4NzAsMHgyNywweDMxLDB4ZGIsMHg5Miww eDcwLDB4MjEsMHhmZSwweDE2LDB4YjYsMHhjOCwweDUxLAorKwkweDM0LDB4ODcsMHg2NSwweGQw LDB4NGUsMHhmZCwweGZlLDB4NjgsMHhlYywweGFjLDB4ZGMsMHg5MywKKysJMHg0MSwweDM4LDB4 OTIsMHg5MCwweGI0LDB4OTQsMHhmOSwweDBkLDB4YTQsMHhmNywweDRlLDB4ODAsCisrCTB4OTIs MHg2NywweDQ4LDB4NDAsMHhhNywweDA4LDB4YzcsMHhiYywweDY2LDB4MDAsMHhmZCwweGY3LAor KwkweDRjLDB4OGIsMHgxNywweDZlLDB4ZDEsMHg4ZiwweDliLDB4ZjMsMHg2ZiwweGY2LDB4MzQs MHhkZCwKKysJMHg2NywweGY3LDB4NjgsMHhkZAorKwl9OworKworKworKy8qIFNIQS01MTIgTm8g UFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh NTEyX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweGI2LDB4MGIsMHhiNywweGJjLDB4ODQsMHg1 NiwweGY2LDB4MTIsMHhhZiwweDQ1LDB4NjcsMHgxNywKKysJMHg3YywweGQxLDB4YjIsMHg3OCww eDJiLDB4YTAsMHhmMiwweGJlLDB4YjYsMHg2ZCwweDhiLDB4NTYsCisrCTB4YzYsMHhiYywweDRk LDB4ZTEsMHhmNywweGJlLDB4Y2UsMHhiZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9ub25jZVtdID0KKysJeworKwkweDlkLDB4 ZWQsMHhjMCwweGU1LDB4NWEsMHg5OCwweDZhLDB4Y2IsMHg1MSwweDdkLDB4NzYsMHgzMSwKKysJ MHg1YSwweDY0LDB4ZjAsMHhmNworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsK KysJMHhjMiwweDZkLDB4YTMsMHhjMywweDA2LDB4NzQsMHhlNSwweDAxLDB4NWMsMHgxMCwweDE3 LDB4YzcsCisrCTB4YWYsMHg4MywweDlkLDB4NTksMHg4ZCwweDJkLDB4MjksMHgzOCwweGM1LDB4 NTksMHg3MCwweDhiLAorKwkweDQ2LDB4NDgsMHgyZCwweGNmLDB4MzYsMHg3ZCwweDU5LDB4YzAK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGE1MTJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4ZWMsMHg4YywweGQ0LDB4ZjcsMHg2 MSwweDZlLDB4MGQsMHg5NSwweDc5LDB4YjcsMHgyOCwweGFkLAorKwkweDVmLDB4NjksMHg3NCww eDVmLDB4MmQsMHgzNiwweDA2LDB4OGEsMHg2YiwweGFjLDB4NTQsMHg5NywKKysJMHhjNCwweGEx LDB4MTIsMHg4NSwweDBhLDB4ZGYsMHg0YiwweDM0CisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2ludF9yZXR1cm5lZGJpdHNbXSA9 CisrCXsKKysJMHg4NCwweDJmLDB4MWYsMHg2OCwweDZhLDB4YTMsMHhhZCwweDFlLDB4ZmIsMHhm NCwweDE1LDB4YmQsCisrCTB4ZGUsMHgzOCwweGQ0LDB4MzAsMHg4MCwweDUxLDB4ZTksMHhkMyww eGM3LDB4MjAsMHg4OCwweGU5LAorKwkweGY1LDB4Y2MsMHhkZiwweDU3LDB4NWMsMHg0NywweDJm LDB4NTcsMHgzYywweDVmLDB4MTMsMHg1NiwKKysJMHhjYywweGM1LDB4NGYsMHg4NCwweGY4LDB4 MTAsMHg0MSwweGQ1LDB4N2UsMHg1OCwweDZlLDB4MTksCisrCTB4MTksMHg5ZSwweGFmLDB4YzIs MHgyMiwweDU4LDB4NDEsMHg1MCwweDc5LDB4YzIsMHhkOCwweDA0LAorKwkweDI4LDB4ZDQsMHgz OSwweDlhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhNTEyX2VudHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweGZhLDB4N2YsMHg0 NiwweDUxLDB4ODMsMHg2MiwweDk4LDB4MTYsMHg5YSwweDE5LDB4YTIsMHg0OSwKKysJMHhhOSww eGU2LDB4NGEsMHhkOCwweDg1LDB4ZTcsMHhkNCwweDNiLDB4MmMsMHg4MiwweGM1LDB4ODIsCisr CTB4YmYsMHgxMSwweGY5LDB4OWUsMHhiYywweGQwLDB4MDEsMHhlZQorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9hZGRpdGlvbmFs aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHhiOSwweDEyLDB4ZTAsMHg0ZiwweGY3LDB4YTcsMHhj NCwweGQ4LDB4ZDAsMHg4ZSwweDk5LDB4MjksCisrCTB4N2MsMHg5YSwweGU5LDB4Y2YsMHhjNCww eDZjLDB4ZjgsMHhjMywweGE3LDB4NDEsMHg4MywweGQ2LAorKwkweDJlLDB4ZmEsMHhiOCwweDVl LDB4OGUsMHg2YiwweDc4LDB4MjAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkw eGQ3LDB4MDcsMHg1MiwweGI5LDB4ODMsMHgyYywweDAzLDB4NzEsMHhlZSwweGM5LDB4YzAsMHg4 NSwKKysJMHhlMSwweDU3LDB4YjIsMHhjZCwweDNhLDB4ZjAsMHhjOSwweDM0LDB4MjQsMHg0MSww eDFjLDB4NDIsCisrCTB4OTksMHhiMiwweDg0LDB4ZTksMHgxNywweGQyLDB4NzYsMHg5MgorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUx Ml9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHgzNiwweDE3LDB4NWQsMHg5OCwweDJiLDB4NjUs MHgyNSwweDhlLDB4YzgsMHgyOSwweGRmLDB4MjcsCisrCTB4MDUsMHgzNiwweDI2LDB4MTIsMHg4 YSwweDY4LDB4NzQsMHgyNywweDM3LDB4ZDQsMHg3ZiwweDMyLAorKwkweGIxLDB4MTIsMHhkNiww eDg1LDB4ODMsMHhlYiwweDJlLDB4YTAsMHhlZCwweDRiLDB4YjUsMHg3YiwKKysJMHg2ZiwweDM5 LDB4M2MsMHg3MSwweDc3LDB4MDIsMHgxMiwweGNjLDB4MmMsMHgzYSwweDhlLDB4NjMsCisrCTB4 ZGYsMHg0YSwweGJkLDB4NmYsMHg2ZSwweDJlLDB4ZWQsMHgwYSwweDg1LDB4YTUsMHgyZiwweGEy LAorKwkweDY4LDB4ZGUsMHg0MiwweGI1CisrCX07CisrCisrCisrLyogSE1BQyBTSEEtMSBQUiAg Ki8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTFfcHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4MjYsMHg1ZiwweDM2LDB4MTQsMHhmZiww eDNkLDB4ODMsMHhmYSwweDczLDB4NWUsMHg3NSwweGRjLAorKwkweDJjLDB4MTgsMHgxNywweDFi CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGExX3ByX25vbmNlW10gPQorKwl7CisrCTB4YzgsMHhlMywweDU3LDB4YTUsMHg3Yiww eDc0LDB4ODYsMHg2ZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsK KysJMHg2ZSwweGRiLDB4MGQsMHhmZSwweDdkLDB4YWMsMHg3OSwweGQwLDB4YTUsMHgzYSwweDQ4 LDB4ODUsCisrCTB4ODAsMHhlMiwweDdmLDB4MmEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfYWRkaXRpb25hbGlucHV0 W10gPQorKwl7CisrCTB4MzEsMHhjZCwweDVlLDB4NDMsMHhkYywweGZiLDB4N2EsMHg3OSwweGNh LDB4ODgsMHhkZSwweDFmLAorKwkweGQ3LDB4YmIsMHg0MiwweDA5CisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2VudHJv cHlpbnB1dHByW10gPQorKwl7CisrCTB4N2MsMHgyMywweDk1LDB4MzgsMHgwMCwweDk1LDB4YzEs MHg3OCwweDFmLDB4OGYsMHhkNywweDYzLAorKwkweDIzLDB4ODcsMHgyYSwweGVkCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEx X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhiYiwweDM0LDB4ZTcsMHg5MywweGEz LDB4MDIsMHgyYywweDRhLDB4ZDAsMHg4OSwweGRhLDB4N2YsCisrCTB4ZWQsMHhmNCwweDRjLDB4 ZGUsMHgxNywweGVjLDB4ZTUsMHg2YworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQor Kwl7CisrCTB4NDksMHhiYywweDJkLDB4MmMsMHhiNywweDMyLDB4Y2IsMHgyMCwweGRmLDB4ZjUs MHg3NywweDU4LAorKwkweGEwLDB4NGIsMHg5MywweDZlCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2VudHJvcHlpbnB1 dHByMltdID0KKysJeworKwkweDNjLDB4YWEsMHhiMCwweDIxLDB4NDIsMHhiMCwweGRkLDB4MzQs MHhmMCwweDE2LDB4N2YsMHgwYywKKysJMHgwZiwweGZmLDB4MmUsMHhhZgorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9y ZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg4ZSwweGNiLDB4YTMsMHg2NCwweGIyLDB4YjgsMHgz MywweDZjLDB4NjQsMHgzYiwweDc4LDB4MTYsCisrCTB4OTksMHgzNSwweGM4LDB4MzAsMHhjYiww eDNlLDB4YTAsMHhkOAorKwl9OworKworKworKy8qIEhNQUMgU0hBLTEgTm8gUFIgICovCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2VudHJv cHlpbnB1dFtdID0KKysJeworKwkweDMyLDB4OWEsMHgyYSwweDg3LDB4N2IsMHg4OSwweDdjLDB4 ZjYsMHhjYiwweDk1LDB4ZDUsMHg0MCwKKysJMHgxNywweGZlLDB4NDcsMHg3MAorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9u b25jZVtdID0KKysJeworKwkweDE2LDB4ZDgsMHhlMCwweGM3LDB4NTIsMHhjZiwweDRhLDB4MjUK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTFfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4MzUsMHgzNSwweGE5 LDB4YTUsMHg0MCwweGJlLDB4OWIsMHhkMSwweDU2LDB4ZGQsMHg0NCwweDAwLAorKwkweDcyLDB4 ZjcsMHhkMywweDVlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGExX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDFiLDB4 MmMsMHg4NCwweDJkLDB4NGEsMHg4OSwweDhmLDB4NjksMHgxOSwweGYxLDB4ZjMsMHhkYiwKKysJ MHhiYiwweGUzLDB4YWEsMHhlYQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7Cisr CTB4Y2YsMHhmYSwweDdkLDB4NzIsMHgwZiwweGU2LDB4YzcsMHg5NiwweGEwLDB4NjksMHgzMSww eDExLAorKwkweDliLDB4MGIsMHgxYSwweDIwLDB4MWYsMHgzZiwweGFhLDB4ZDEKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFf ZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4OTAsMHg3NSwweDE1LDB4MDQsMHg5NSww eGYxLDB4YmEsMHg4MSwweDBjLDB4MzcsMHg5NCwweDZmLAorKwkweDg2LDB4NTIsMHg2ZCwweDlj CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGExX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDViLDB4NDAsMHhi YSwweDVmLDB4MTcsMHg3MCwweGYwLDB4NGIsMHhkZiwweGM5LDB4OTcsMHg5MiwKKysJMHg3OSww eGM1LDB4ODIsMHgyOAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4OTcs MHhjOCwweDgwLDB4OTAsMHhiMywweGFhLDB4NmUsMHg2MCwweGVhLDB4ODMsMHg3YSwweGUzLAor KwkweDhhLDB4Y2EsMHhhNCwweDdmCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3JldHVybmVkYml0c1tdID0KKysJeworKwkw eDkwLDB4YmQsMHgwNSwweDU2LDB4NmQsMHhiNSwweDIyLDB4ZDUsMHhiOSwweDVhLDB4MjksMHgy ZCwKKysJMHhlOSwweDBiLDB4ZTEsMHhhYywweGRlLDB4MjcsMHgwYiwweGIwCisrCX07CisrCisr CisrLyogSE1BQyBTSEEtMjI0IFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkw eDE3LDB4MzIsMHgyYiwweDJlLDB4NmYsMHgxYiwweDljLDB4NmQsMHgzMSwweGUwLDB4MzQsMHgw NywKKysJMHhjZiwweGVkLDB4ZjYsMHhiNiwweDVhLDB4NzYsMHg0YywweGJjLDB4NjIsMHg4NSww eDAxLDB4OTAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTIyNF9wcl9ub25jZVtdID0KKysJeworKwkweDM4LDB4YmYsMHg1Ziww eDIwLDB4YjMsMHg2OCwweDJmLDB4NDMsMHg2MSwweDA1LDB4OGYsMHgyMworKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3By X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweGMwLDB4YzksMHg0NSwweGFjLDB4 OGQsMHgyNywweDc3LDB4MDgsMHgwYiwweDE3LDB4NmQsMHhlZCwKKysJMHhjMSwweDdkLDB4ZDUs MHgwNywweDlkLDB4NmUsMHhmOCwweDIzLDB4MmEsMHgyMiwweDEzLDB4YmQKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9w cl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHhhNCwweDNjLDB4ZTcsMHgzYiwweGVhLDB4 MTksMHg0NSwweDMyLDB4YzIsMHg4MywweDZkLDB4MjEsCisrCTB4OGEsMHhjMCwweGVlLDB4Njcs MHg0NSwweGRlLDB4MTMsMHg3ZCwweDlkLDB4NjEsMHgwMCwweDNiCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfZW50 cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHgxNSwweDA1LDB4NzQsMHg0YSwweDdmLDB4OGQsMHg1 YywweDYwLDB4MTYsMHhlNSwweDdiLDB4YWQsCisrCTB4ZjUsMHg0MSwweDhmLDB4NTUsMHg2MCww eGM0LDB4MDksMHhlZSwweDFlLDB4MTEsMHg4MSwweGFiCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfaW50X3JldHVy bmVkYml0c1tdID0KKysJeworKwkweDZmLDB4ZjUsMHg5YSwweGUyLDB4NTQsMHg1MywweDMwLDB4 M2QsMHg1YSwweDI3LDB4MjksMHgzOCwKKysJMHgyNywweGYyLDB4MGQsMHgwNSwweGU5LDB4MjYs MHhjYiwweDE2LDB4YzMsMHg1MSwweDVmLDB4MTMsCisrCTB4NDEsMHhmZSwweDk5LDB4ZjIKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTIyNF9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4NzMsMHg4MSwweDg4LDB4 ODQsMHg4ZiwweGVkLDB4NmYsMHgxMCwweDlmLDB4OTMsMHhiZiwweDE3LAorKwkweDM1LDB4N2Ms MHhlZiwweGQ1LDB4OGQsMHgyNiwweGE2LDB4N2EsMHhlOCwweDA5LDB4MzYsMHg0ZgorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh MjI0X3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJeworKwkweGU2LDB4Y2YsMHhjZiwweDdlLDB4 MTIsMHhlNSwweDQzLDB4ZDIsMHgzOCwweGQ4LDB4MjQsMHg2ZiwKKysJMHg1YSwweDM3LDB4Njgs MHhiZiwweDRmLDB4YTAsMHhmZiwweGQ1LDB4NjEsMHg4YSwweDkzLDB4ZTAKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9w cl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhhZiwweGY5LDB4ZDgsMHgxOSwweDkxLDB4MzAs MHg4MiwweDZmLDB4YTksMHgxZSwweDlkLDB4ZDcsCisrCTB4ZjMsMHg1MCwweGUwLDB4YzcsMHhk NSwweDY0LDB4OTYsMHg3ZCwweDRjLDB4NGQsMHg3OCwweDAzLAorKwkweDZkLDB4ZDgsMHg5ZSww eDcyCisrCX07CisrCisrCisrLyogSE1BQyBTSEEtMjI0IE5vIFBSICAqLworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2VudHJvcHlpbnB1 dFtdID0KKysJeworKwkweDExLDB4ODIsMHhmZCwweGQ5LDB4NDIsMHhmNCwweGZhLDB4YzgsMHhm MiwweDQxLDB4ZTYsMHg1NCwKKysJMHgwMSwweGFlLDB4MjIsMHg2ZSwweGM2LDB4YWYsMHhhZiww eGQwLDB4YTYsMHhiMiwweGUyLDB4NmQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9ub25jZVtdID0KKysJeworKwkweGE5 LDB4NDgsMHhkNywweDkyLDB4MzksMHg3ZSwweDJhLDB4ZGMsMHgzMCwweDFmLDB4MGUsMHgyYgor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMjI0X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDExLDB4ZDUsMHhm NCwweGJkLDB4NjcsMHg4YywweDMxLDB4Y2YsMHhhMywweDNmLDB4MWUsMHg2YiwKKysJMHhhOCww eDA3LDB4MDIsMHgwYiwweGM4LDB4MmUsMHg2YywweDY0LDB4NDEsMHg1YiwweGM4LDB4MzcKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTIyNF9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg2OCwweDE4LDB4YzIsMHgwNiww eGViLDB4M2UsMHgwNCwweDk1LDB4NDQsMHg1ZSwweGZiLDB4ZTYsCisrCTB4NDEsMHhjMSwweDVj LDB4Y2MsMHg0MCwweDJmLDB4YjcsMHhkMiwweDBmLDB4ZjMsMHg2YiwweGU3CisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRf aW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDdmLDB4NDUsMHhjNywweDVkLDB4MzIsMHhl NiwweDE3LDB4NjAsMHhiYSwweGRjLDB4YjgsMHg0MiwKKysJMHgxYiwweDljLDB4ZjEsMHhmYSww eDNiLDB4NGQsMHgyOSwweDU0LDB4YzYsMHg5MCwweGZmLDB4NWMsCisrCTB4Y2QsMHhkNiwweGE5 LDB4Y2MKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTIyNF9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHhjNCwweDhl LDB4MzcsMHg5NSwweDY5LDB4NTMsMHgyOCwweGQ3LDB4MzcsMHhiYiwweDcwLDB4OTUsCisrCTB4 MWMsMHgwNywweDFkLDB4ZDksMHhiNywweGU2LDB4MWIsMHhiYiwweGZlLDB4NDEsMHhlYiwweGM5 CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGEyMjRfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4NTMsMHgxNyww eGExLDB4NmEsMHhmYSwweDc3LDB4NDcsMHhiMCwweDk1LDB4NTYsMHg5YSwweDIwLAorKwkweDU3 LDB4ZGUsMHg1YywweDg5LDB4OWYsMHg3ZiwweGUyLDB4ZGUsMHgxNywweDNhLDB4NTAsMHgyMwor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMjI0X2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHgzYSwweDMyLDB4ZjksMHg4 NSwweDBjLDB4YzEsMHhlZCwweDc2LDB4MmQsMHhkZiwweDQwLDB4YzMsCisrCTB4MDYsMHgyMiww eDY2LDB4ZDQsMHg5YSwweDlhLDB4ZmYsMHg1YSwweDdlLDB4N2EsMHhmMywweDk2CisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEy MjRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4NDMsMHhiNCwweDU3LDB4NWMsMHgzOCwweDI1 LDB4OWQsMHhhZSwweGVjLDB4OTYsMHhkMSwweDg1LAorKwkweDNhLDB4ODQsMHg4ZCwweGZlLDB4 NjgsMHhkNSwweDBlLDB4NWMsMHg4ZiwweDY1LDB4YTUsMHg0ZSwKKysJMHg0NSwweDg0LDB4YTgs MHg5NAorKwl9OworKworKworKy8qIEhNQUMgU0hBLTI1NiBQUiAgKi8KKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9lbnRyb3B5aW5w dXRbXSA9CisrCXsKKysJMHg0ZCwweGIwLDB4NDMsMHhkOCwweDM0LDB4NGIsMHgxMCwweDcwLDB4 YjEsMHg4YiwweGVkLDB4ZWEsCisrCTB4MDcsMHg5MiwweDlmLDB4NmMsMHg3OSwweDMxLDB4YWYs MHg4MSwweDI5LDB4ZWIsMHg2ZSwweGNhLAorKwkweDMyLDB4NDgsMHgyOCwweGU3LDB4MDIsMHg1 ZCwweGE2LDB4YTYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9ub25jZVtdID0KKysJeworKwkweDNhLDB4YWUsMHgx NSwweGE5LDB4OTksMHhkYywweGU0LDB4NjcsMHgzNCwweDNiLDB4NzAsMHgxNSwKKysJMHhhYSww eGQzLDB4MzAsMHg5YQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJ eworKwkweDEzLDB4MWQsMHgyNCwweDA0LDB4YjAsMHgxOCwweDgxLDB4MTUsMHgyMSwweDUxLDB4 MmEsMHgyNCwKKysJMHg1MiwweDYxLDB4YmUsMHg2NCwweDgyLDB4NmIsMHg1NSwweDJmLDB4ZTIs MHhmMSwweDQwLDB4N2QsCisrCTB4NzEsMHhkOCwweDAxLDB4ODYsMHgxNSwweGI3LDB4OGIsMHhi NQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMjU2X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDhmLDB4YTYsMHg1 NCwweDVmLDB4YjEsMHhkMCwweGQ4LDB4YzMsMHhlNywweDBjLDB4MTUsMHhhOSwKKysJMHgyMyww eDZlLDB4ZmUsMHhmYiwweDkzLDB4ZjcsMHgzYSwweGJkLDB4NTksMHgwMSwweGZhLDB4MTgsCisr CTB4OGUsMHhlOSwweDFhLDB4YTksMHg3OCwweGZjLDB4NzksMHgwYgorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2Vu dHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4Y2YsMHgyNCwweGI5LDB4ZWIsMHhiMywweGQ0LDB4 Y2QsMHgxNywweDM3LDB4MzgsMHg3NSwweDc5LAorKwkweDE1LDB4Y2IsMHgyZCwweDc1LDB4NTEs MHhmMSwweGNjLDB4YWEsMHgzMiwweGE0LDB4YTcsMHgzNiwKKysJMHg3YywweDVjLDB4ZTQsMHg0 NywweGYxLDB4M2UsMHgxZCwweGU1CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfaW50X3JldHVybmVkYml0c1tdID0K KysJeworKwkweDUyLDB4NDIsMHhmYSwweGViLDB4ODUsMHhlMCwweDMwLDB4MjIsMHg3OSwweDAw LDB4MTYsMHhiMiwKKysJMHg4OCwweDJmLDB4MTQsMHg2YSwweGI3LDB4ZmMsMHhiNywweDUzLDB4 ZGMsMHg0YSwweDEyLDB4ZWYsCisrCTB4NTQsMHhkNiwweDMzLDB4ZTksMHgyMCwweGQ2LDB4ZmQs MHg1NgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMjU2X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHhmNCwweGY2 LDB4NDksMHhhMSwweDJkLDB4NjQsMHgyYiwweDMwLDB4NTgsMHhmOCwweGJkLDB4YjgsCisrCTB4 NzUsMHhlYiwweGJiLDB4NWUsMHgxYywweDliLDB4ODEsMHg2YSwweGRhLDB4MTQsMHg4NiwweDZl LAorKwkweGQwLDB4ZGEsMHgxOCwweGI3LDB4ODgsMHhmYiwweDU5LDB4ZjMKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9w cl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHgyMSwweGNkLDB4NmUsMHg0NiwweGFkLDB4 OTksMHgwNywweDE3LDB4YjQsMHgzZCwweDc2LDB4MGEsCisrCTB4ZmYsMHg1YiwweDUyLDB4NTAs MHg3OCwweGRmLDB4MWYsMHgyNCwweDA2LDB4MGQsMHgzZiwweDc0LAorKwkweGE5LDB4YzksMHgz NywweGNmLDB4ZDgsMHgyNiwweDI1LDB4OTEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9yZXR1cm5lZGJpdHNbXSA9 CisrCXsKKysJMHhhNywweGFmLDB4MmYsMHgyOSwweGUwLDB4M2EsMHg3MiwweDk1LDB4OTYsMHgx YywweGE5LDB4ZjAsCisrCTB4NGEsMHgxNywweDRkLDB4NjYsMHgwNiwweDEwLDB4YmYsMHgzOSww eDg5LDB4ODgsMHhiOCwweDkxLAorKwkweDM3LDB4MTgsMHg5OSwweGNmLDB4OGMsMHg1MywweDNi LDB4N2UKKysJfTsKKysKKysKKysvKiBITUFDIFNIQS0yNTYgTm8gUFIgICovCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfZW50cm9weWlu cHV0W10gPQorKwl7CisrCTB4OTYsMHhiNywweDUzLDB4MjIsMHgxZSwweDUyLDB4MmEsMHg5Niww eGIxLDB4MTUsMHgzYywweDM1LAorKwkweDVhLDB4OGIsMHhkMywweDRhLDB4YTYsMHg2YywweDgz LDB4MGEsMHg3ZCwweGEzLDB4MjMsMHgzZCwKKysJMHg0MywweGExLDB4MDcsMHgyYywweDJkLDB4 ZTMsMHg4MSwweGNjCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfbm9uY2VbXSA9CisrCXsKKysJMHhmMSwweGFjLDB4OTcs MHhjYiwweDVlLDB4MDYsMHg0OCwweGQyLDB4OTQsMHhiZSwweDE1LDB4MmUsCisrCTB4YzcsMHhm YywweGMyLDB4MDEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTI1Nl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJ MHg5OCwweGM1LDB4MWUsMHgzNSwweDVlLDB4ODksMHgwZCwweGNlLDB4NjQsMHg2ZCwweDE4LDB4 YTcsCisrCTB4NWEsMHhjNiwweGYzLDB4ZTcsMHhkNiwweDllLDB4YzAsMHhlYSwweGI3LDB4M2Es MHg4ZCwweDY1LAorKwkweGI4LDB4ZWIsMHgxMCwweGQ3LDB4NTcsMHgxOCwweGEwLDB4MzIKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTI1Nl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHgxYiwweDEwLDB4YWYsMHhhYyww eGQwLDB4NjUsMHg5NSwweGFkLDB4MDQsMHhhZCwweDAzLDB4MWMsCisrCTB4ZTAsMHg0MCwweGQ2 LDB4M2UsMHgxYywweDQ2LDB4NTMsMHgzOSwweDdjLDB4ZTIsMHhiYywweGRhLAorKwkweDhjLDB4 YTIsMHgzMywweGE3LDB4OWEsMHgyNiwweGQzLDB4MjcKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9pbnRfcmV0dXJuZWRi aXRzW10gPQorKwl7CisrCTB4YmEsMHg2MSwweDBlLDB4NTUsMHhmZSwweDExLDB4OGEsMHg5ZSww eDBmLDB4ODAsMHhkZiwweDFkLAorKwkweDAzLDB4MGEsMHhmZSwweDE1LDB4OTQsMHgyOCwweDRi LDB4YmEsMHhmNCwweDlmLDB4NTEsMHgyNSwKKysJMHg4OCwweGU1LDB4NGUsMHhmYiwweGFmLDB4 Y2UsMHg2OSwweDkwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4 NjIsMHg3ZiwweDFlLDB4NmIsMHhlOCwweDhlLDB4ZTEsMHgzNSwweDdkLDB4OWIsMHg0ZiwweGM3 LAorKwkweGVjLDB4YzgsMHhhYywweGVmLDB4NmIsMHgxMywweDllLDB4MDUsMHg1NiwweGMxLDB4 MDgsMHhmOSwKKysJMHgyZiwweDBmLDB4MjcsMHg5YywweGQ0LDB4MTUsMHhlZCwweDJkCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGEyNTZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4YzcsMHg3NiwweDZlLDB4 YTksMHhkMiwweGIyLDB4NzYsMHg0MCwweDgyLDB4MjUsMHgyYywweGIzLAorKwkweDZmLDB4YWMs MHhlOSwweDc0LDB4ZWYsMHg4ZiwweDNjLDB4OGUsMHhjZCwweGYxLDB4YmYsMHhiMywKKysJMHg0 OSwweDc3LDB4MzQsMHg4OCwweDUyLDB4MzYsMHhlNiwweDJlCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfYWRkaXRpb25h bGlucHV0MltdID0KKysJeworKwkweDhkLDB4YjgsMHgwYywweGQxLDB4YmYsMHg3MCwweGY2LDB4 MTksMHhjMywweDQxLDB4ODAsMHg5ZiwKKysJMHhlMSwweGE1LDB4YTQsMHgxZiwweDJjLDB4MjYs MHhiMSwweGU1LDB4ZDgsMHhlYiwweGJlLDB4ZjgsCisrCTB4ZGYsMHg4OCwweDZhLDB4ODksMHhk NiwweDA1LDB4ZDgsMHg5ZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDQz LDB4MTIsMHgyYSwweDJjLDB4NDAsMHg1MywweDJlLDB4N2MsMHg2NiwweDM0LDB4YWMsMHhjMywK KysJMHg0MywweGUzLDB4ZTAsMHg2YSwweGZjLDB4ZmEsMHhlYSwweDg3LDB4MjEsMHgxZiwweGUy LDB4MjYsCisrCTB4YzQsMHhmOSwweDA5LDB4OWEsMHgwZCwweDZlLDB4N2YsMHhlMAorKwl9Owor KworKworKy8qIEhNQUMgU0hBLTM4NCBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsK KysJMHg2OSwweDgxLDB4OTgsMHg4OCwweDQ0LDB4ZjUsMHhkNiwweDJlLDB4MDAsMHgwOCwweDNi LDB4YzUsCisrCTB4ZmIsMHhkNywweDhlLDB4NmYsMHgyMywweGY4LDB4NmQsMHgwOSwweGQ2LDB4 ODUsMHg0OSwweGQxLAorKwkweGY4LDB4NmQsMHhhNCwweDU4LDB4NTQsMHhmZCwweDg4LDB4YTkK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTM4NF9wcl9ub25jZVtdID0KKysJeworKwkweDZlLDB4MzgsMHg4MSwweGNhLDB4Yjcs MHhlOCwweDZlLDB4NjYsMHg0OSwweDhhLDB4YjIsMHg1OSwKKysJMHhlZSwweDE2LDB4YzksMHhk ZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMzg0X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweGZlLDB4 NGMsMHhkOSwweGY0LDB4NzgsMHgzYiwweDA4LDB4NDEsMHg4ZCwweDhmLDB4NTUsMHhjNCwKKysJ MHg0MywweDU2LDB4YjYsMHgxMiwweDM2LDB4NmIsMHgzMCwweGI3LDB4NWUsMHhlMSwweGI5LDB4 NDcsCisrCTB4MDQsMHhiMSwweDRlLDB4YTksMHgwMCwweGExLDB4NTIsMHhhMQorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0 X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDg5LDB4ZTksMHhjYywweDhmLDB4Mjcs MHgzYywweDI2LDB4ZDEsMHg5NSwweGM4LDB4N2QsMHgwZiwKKysJMHg1YiwweDFhLDB4ZjAsMHg3 OCwweDM5LDB4NTYsMHg2ZiwweGE0LDB4MjMsMHhlNywweGQxLDB4ZGEsCisrCTB4N2MsMHg2Niww eDMzLDB4YTAsMHg5MCwweGM5LDB4OTIsMHg4OAorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2VudHJvcHlpbnB1dHBy W10gPQorKwl7CisrCTB4YmUsMHgzZCwweDdjLDB4MGQsMHhjYSwweGRhLDB4N2MsMHg0OSwweGI4 LDB4MTIsMHgzNiwweGMwLAorKwkweGRiLDB4YWQsMHgzNSwweGE4LDB4YzcsMHgwYiwweDJhLDB4 MmMsMHg2OSwweDZkLDB4MjUsMHg1NiwKKysJMHg2MywweDgyLDB4MTEsMHgzZSwweGE3LDB4MzMs MHg3MCwweDcyCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEzODRfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDgy LDB4M2QsMHhlNiwweDU0LDB4ODAsMHg0MiwweGY4LDB4YmEsMHg5MCwweDRmLDB4MDYsMHhhNiwK KysJMHhkMiwweDdmLDB4YmYsMHg3OSwweDdjLDB4MTIsMHg3ZCwweGE2LDB4YTIsMHg2NiwweGU4 LDB4YTYsCisrCTB4YzAsMHhkNiwweDRhLDB4NTUsMHhiZiwweGQ4LDB4MGEsMHhjNSwweGY4LDB4 MDMsMHg4OCwweGRkLAorKwkweDhlLDB4ODcsMHhkMSwweDVhLDB4NDgsMHgyNiwweDcyLDB4MmEs MHg4ZSwweGNmLDB4ZWUsMHhiYQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Cisr CXsKKysJMHg4ZiwweGZmLDB4ZDksMHg4NCwweGJiLDB4ODUsMHgzYSwweDY2LDB4YTEsMHgyMSww eGNlLDB4YjIsCisrCTB4M2EsMHgzYSwweDE3LDB4MjIsMHgxOSwweGFlLDB4YzcsMHhiNiwweDYz LDB4ODEsMHhkNSwweGZmLAorKwkweDBkLDB4YzgsMHhlMSwweGFmLDB4NTcsMHhkMiwweGNiLDB4 NjAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTM4NF9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHhkNywweGZiLDB4 YzksMHhlOCwweGUyLDB4ZjIsMHhhYSwweDRjLDB4YjgsMHg1MSwweDJmLDB4ZTEsCisrCTB4MjIs MHhiYSwweGYzLDB4ZGEsMHgwYSwweDE5LDB4NzYsMHg3MSwweDU3LDB4YjIsMHgxZCwweDk0LAor KwkweDA5LDB4NjksMHg2YywweGQzLDB4OTcsMHg1MSwweDgxLDB4ODcKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9y ZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhlNiwweDE5LDB4MjgsMHhhOCwweDIxLDB4Y2UsMHg1 ZSwweGRiLDB4MjQsMHg3OSwweDhjLDB4NzYsCisrCTB4NWQsMHg3MywweGIyLDB4ZGYsMHhhYyww eGVmLDB4ODUsMHhhNywweDNiLDB4MTksMHgwOSwweDhiLAorKwkweDdmLDB4OTgsMHgyOCwweGE5 LDB4OTMsMHhkOCwweDdhLDB4YWQsMHg1NSwweDhiLDB4MjQsMHg5ZCwKKysJMHhlNiwweDk4LDB4 ZmUsMHg0NywweGQ1LDB4NDgsMHhjMSwweDIzLDB4ZDgsMHgxZCwweDYyLDB4NzUKKysJfTsKKysK KysKKysvKiBITUFDIFNIQS0zODQgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfZW50cm9weWlucHV0W10gPQorKwl7Cisr CTB4YzMsMHg1NiwweDJiLDB4MWQsMHhjMiwweGJiLDB4YTgsMHhmMCwweGFlLDB4MWIsMHgwZCww eGQzLAorKwkweDVhLDB4NmMsMHhkYSwweDU3LDB4OGUsMHhhNSwweDhhLDB4MGQsMHg2YywweDRi LDB4MTgsMHhiMSwKKysJMHgwNCwweDNlLDB4YjQsMHg5OSwweDM1LDB4YzQsMHhjMCwweDVmCisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEzODRfbm9uY2VbXSA9CisrCXsKKysJMHhjNSwweDQ5LDB4MWUsMHg2NiwweDI3LDB4OTIs MHhiZSwweGVjLDB4YjUsMHgxZSwweDRiLDB4YjEsCisrCTB4MzgsMHhlMywweGViLDB4NjIKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTM4NF9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHhiZSwweGU3LDB4NmIs MHg1NywweGRlLDB4ODgsMHgxMSwweDk2LDB4OWIsMHg2ZSwweGVhLDB4ZTUsCisrCTB4NjMsMHg4 MywweDRjLDB4YjYsMHg4ZCwweDY2LDB4YWEsMHgxZiwweDhiLDB4NTQsMHhlNywweDYyLAorKwkw eDZkLDB4NWEsMHhmYywweGJmLDB4OTcsMHhiYSwweGNkLDB4NzcKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9hZGRpdGlv bmFsaW5wdXRbXSA9CisrCXsKKysJMHhlNSwweDI4LDB4NWYsMHg0MywweGY1LDB4ODMsMHg2ZSww eDBhLDB4ODMsMHg1YywweGUzLDB4ODEsCisrCTB4MDMsMHhmMiwweGY4LDB4NzgsMHgwMCwweDdj LDB4OTUsMHg4NywweDE2LDB4ZDYsMHg2YywweDU4LAorKwkweDMzLDB4NmMsMHg1MywweDM1LDB4 MGQsMHg2NiwweGUzLDB4Y2UKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7Cisr CTB4ZTIsMHgxZiwweGYzLDB4ZGEsMHgwZCwweDE5LDB4OTksMHg4NywweGM0LDB4OTAsMHhhMiww eDMxLAorKwkweGNhLDB4MmEsMHg4OSwweDU4LDB4NDMsMHg0NCwweGI4LDB4ZGUsMHhjZiwweGE0 LDB4YmUsMHgzYiwKKysJMHg1MywweDI2LDB4MjIsMHgzMSwweDc2LDB4NDEsMHgyMiwweGI1LDB4 YTgsMHg3MCwweDJmLDB4NGIsCisrCTB4NjQsMHg5NSwweDRkLDB4NDgsMHg5NiwweDM1LDB4ZTYs MHhiZCwweDNjLDB4MzQsMHhkYiwweDFiCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfZW50cm9weWlucHV0cmVzZWVkW10g PQorKwl7CisrCTB4NzcsMHg2MSwweGJhLDB4YmMsMHhmMiwweGMxLDB4ZjMsMHg0YiwweDg2LDB4 NjUsMHhmZCwweDQ4LAorKwkweDBlLDB4M2MsMHgwMiwweDVlLDB4YTIsMHg3YSwweDZiLDB4N2Ms MHhlZCwweDIxLDB4NWUsMHhmOSwKKysJMHhjZCwweGNkLDB4NzcsMHgwNywweDJiLDB4YmUsMHhj NSwweDVjCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGEzODRfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4MTgs MHgyNCwweDVmLDB4YzYsMHg4NCwweGQxLDB4NjcsMHhjMywweDlhLDB4MTEsMHhhNSwweDhjLAor KwkweDA3LDB4MzksMHgyMSwweDgzLDB4NGQsMHgwNCwweGM0LDB4NmEsMHgyOCwweDE5LDB4Y2Ys MHg5MiwKKysJMHgyMSwweGQ5LDB4OWUsMHg0MSwweDcyLDB4NmMsMHg5ZSwweDYzCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEz ODRfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDk2LDB4NjcsMHg0MSwweDI4LDB4OWIs MHhiNywweDkyLDB4OGQsMHg2NCwweDNiLDB4ZTQsMHhjZiwKKysJMHg3ZSwweGFhLDB4MWUsMHhi MSwweDRiLDB4MWQsMHgwOSwweDU2LDB4NjcsMHg5YywweGM2LDB4NmQsCisrCTB4M2IsMHhlOCww eDkxLDB4OWQsMHhlMSwweDhhLDB4YjcsMHgzMgorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3JldHVybmVkYml0c1tdID0K KysJeworKwkweGUzLDB4NTksMHg2MSwweDM4LDB4OTIsMHhlYywweGUyLDB4M2MsMHhmZiwweGI3 LDB4ZGIsMHgxOSwKKysJMHgwZiwweDViLDB4OTMsMHg2OCwweDBkLDB4YTQsMHg5NCwweDQwLDB4 NzIsMHgwYiwweGUwLDB4ZWQsCisrCTB4NGQsMHhjZCwweDY4LDB4YTAsMHgxZSwweGZlLDB4Njcs MHhiMiwweGZhLDB4MjEsMHg1NiwweDc0LAorKwkweGE0LDB4YWQsMHhjZiwweGI3LDB4NjAsMHg2 NiwweDJlLDB4NDAsMHhkZSwweDgyLDB4Y2EsMHhmYgorKwl9OworKworKworKy8qIEhNQUMgU0hB LTUxMiBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTUxMl9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHhhYSwweDllLDB4NDUs MHg2NywweDBlLDB4MDAsMHgyYSwweDY3LDB4OTgsMHhkNiwweGRhLDB4MGIsCisrCTB4MGYsMHgx NywweDdlLDB4YWMsMHhmZCwweDI3LDB4YzQsMHhjYSwweDg0LDB4ZGYsMHhkZSwweGJhLAorKwkw eDg1LDB4ZDksMHhiZSwweDhmLDB4ZjMsMHhmZiwweDkxLDB4NGQKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9ub25j ZVtdID0KKysJeworKwkweDhjLDB4NDksMHgyZiwweDU4LDB4MWUsMHg3YSwweGRhLDB4NGIsMHg3 ZSwweDhhLDB4MzAsMHg3YiwKKysJMHg4NiwweGVhLDB4YWYsMHhhMgorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX3Bl cnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDcxLDB4ZTEsMHhiYiwweGFkLDB4YTcs MHg0YiwweDJlLDB4MzEsMHgzYiwweDBiLDB4ZWMsMHgyNCwKKysJMHg5OSwweDM4LDB4YmMsMHhh YSwweDA1LDB4NGMsMHg0NiwweDQ0LDB4ZmEsMHhhZCwweDhlLDB4MDIsCisrCTB4YzEsMHg3ZSww eGFkLDB4ZWMsMHg1NCwweGE2LDB4ZDAsMHhhZAorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1 dFtdID0KKysJeworKwkweDNkLDB4NmUsMHhhNiwweGE4LDB4MjksMHgyYSwweGIyLDB4ZjUsMHg5 OCwweDQyLDB4ZTQsMHg5MiwKKysJMHg3OCwweDIyLDB4NjcsMHhmZCwweDFiLDB4MTUsMHgxZSww eDI5LDB4YWEsMHg3MSwweDNjLDB4M2MsCisrCTB4ZTcsMHgwNSwweDIwLDB4YTksMHgyOSwweGM2 LDB4NzUsMHg3MQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4YWIs MHhiOSwweDE2LDB4ZDgsMHg1NSwweDM1LDB4NTQsMHhiNywweDk3LDB4M2YsMHg5NCwweGJjLAor KwkweDJmLDB4N2MsMHg3MCwweGM3LDB4ZDAsMHhlZCwweGI3LDB4NGIsMHhmNywweGY2LDB4NmMs MHgwMywKKysJMHgwYywweGIwLDB4MDMsMHhkOCwweGJiLDB4NzEsMHhkOSwweDEwCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1 MTJfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDhlLDB4ZDMsMHhmZCwweDUyLDB4 OWUsMHg4MywweDA4LDB4NDksMHgxOCwweDZlLDB4MjMsMHg1NiwKKysJMHg1YywweDQ1LDB4OTMs MHgzNCwweDA1LDB4ZTIsMHg5OCwweDhmLDB4MGMsMHhkNCwweDMyLDB4MGMsCisrCTB4ZmQsMHhk YSwweDVmLDB4OTIsMHgzYSwweDhjLDB4ODEsMHhiZCwweGY2LDB4NmMsMHg1NSwweGZkLAorKwkw eGI4LDB4MjAsMHhjZSwweDhkLDB4OTcsMHgyNywweGU4LDB4ZTgsMHhlMCwweGIzLDB4ODUsMHg1 MCwKKysJMHhhMiwweGMyLDB4YjIsMHg5NSwweDFkLDB4NDgsMHhkMywweDdiLDB4NGIsMHg3OCww eDEzLDB4MzUsCisrCTB4MDUsMHgxNywweGJlLDB4MGQKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9hZGRpdGlvbmFs aW5wdXQyW10gPQorKwl7CisrCTB4YzMsMHhmYywweDk1LDB4YWEsMHg2OSwweDA2LDB4YWUsMHg1 OSwweDQxLDB4Y2UsMHgyNiwweDA4LAorKwkweDI5LDB4NmQsMHg0NSwweGRhLDB4ZTgsMHhiMyww eDZjLDB4OTUsMHg2MCwweDBmLDB4NzAsMHgyYywKKysJMHgxMCwweGJhLDB4MzgsMHg4YywweGNm LDB4MjksMHg5OSwweGFhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7Cisr CTB4M2IsMHg5YSwweDI1LDB4Y2UsMHhkNywweGY5LDB4NWMsMHhkMSwweDNhLDB4M2UsMHhhYSww eDcxLAorKwkweDE0LDB4M2UsMHgxOSwweGU4LDB4Y2UsMHhlNiwweGZlLDB4NTEsMHg4NCwweGU5 LDB4MWIsMHhmZSwKKysJMHgzZiwweGE3LDB4ZjIsMHhmZCwweDc2LDB4NWYsMHg2YSwweGU3Cisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGE1MTJfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4YjcsMHg4MiwweGE5LDB4NTcs MHg4MSwweDY3LDB4NTMsMHhiNSwweGExLDB4ZTksMHgzZCwweDM1LAorKwkweGY5LDB4ZTQsMHg5 NywweGJlLDB4YTYsMHhjYSwweGYxLDB4MDEsMHgxMywweDA5LDB4ZTcsMHgyMSwKKysJMHhjMCww eGVkLDB4OTMsMHg1ZCwweDRiLDB4ZjQsMHhlYiwweDhkLDB4NTMsMHgyNSwweDhhLDB4YzQsCisr CTB4YjEsMHg2ZiwweDZlLDB4MzcsMHhjZCwweDJlLDB4YWMsMHgzOSwweGIyLDB4YjYsMHg5OSww eGEzLAorKwkweDgyLDB4MDAsMHhiMCwweDIxLDB4ZjAsMHhjNywweDJmLDB4NGMsMHg3MywweDky LDB4ZmQsMHgwMCwKKysJMHhiNiwweGFmLDB4YmMsMHhkMworKwl9OworKworKworKy8qIEhNQUMg U0hBLTUxMiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTUxMl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHg2ZSwweDg1LDB4 ZTYsMHgyNSwweDk2LDB4MjksMHhhNywweDUyLDB4NWIsMHg2MCwweGJhLDB4YWEsCisrCTB4ZGUs MHhkYiwweDM2LDB4MGEsMHg1MSwweDlhLDB4MTUsMHhhZSwweDZlLDB4MTgsMHhkMywweGZlLAor KwkweDM5LDB4YjksMHg0YSwweDk2LDB4ZjgsMHg3NywweGNiLDB4OTUKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9ub25j ZVtdID0KKysJeworKwkweGUwLDB4YTYsMHg1ZCwweDA4LDB4YzMsMHg3YywweGFlLDB4MjUsMHgy ZSwweDgwLDB4ZDEsMHgzZSwKKysJMHhkOSwweGFmLDB4NDMsMHgzYworKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3BlcnNv bmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDUzLDB4OTksMHg1MiwweDVmLDB4MTEsMHhh OSwweDY0LDB4NjYsMHgyMCwweDVlLDB4MWIsMHg1ZiwKKysJMHg0MiwweGIzLDB4ZjQsMHhkYSww eGVkLDB4YmIsMHg2MywweGMxLDB4MjMsMHhhZiwweGQwLDB4MDEsCisrCTB4OTAsMHgzYiwweGQw LDB4NzgsMHhlNCwweDBiLDB4YTcsMHgyMAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2FkZGl0aW9uYWxpbnB1dFtdID0K KysJeworKwkweDg1LDB4OTAsMHg4MCwweGQzLDB4OTgsMHhmMSwweDUzLDB4NmQsMHg2OCwweDE1 LDB4OGYsMHhlNSwKKysJMHg2MCwweDNmLDB4MTcsMHgyOSwweDU1LDB4OGQsMHgzMywweGIxLDB4 NDUsMHg2NCwweDY0LDB4OGQsCisrCTB4NTAsMHgyMSwweDg5LDB4YWUsMHhmNiwweGZkLDB4MzIs MHg3MworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhNTEyX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHgyOCwweDU2LDB4 MzAsMHg2ZiwweGY0LDB4YTEsMHg0OCwweGUwLDB4YzksMHhmNSwweDc1LDB4OTAsCisrCTB4Y2Ms MHhmYiwweGRmLDB4ZGYsMHg3MSwweDNkLDB4MGEsMHg5YSwweDAzLDB4NjUsMHgzYiwweDE4LAor KwkweDYxLDB4ZTMsMHhkMSwweGRhLDB4Y2MsMHg0YSwweGZlLDB4NTUsMHgzOCwweGY4LDB4MjEs MHg2YiwKKysJMHhmYSwweDE4LDB4MDEsMHg0MiwweDM5LDB4MmYsMHg5OSwweDUzLDB4MzgsMHgx NSwweDgyLDB4MzQsCisrCTB4YzUsMHg5MywweDkyLDB4YmMsMHg0ZCwweDc1LDB4MWEsMHg1Ziww eDIxLDB4MjcsMHhjYywweGExLAorKwkweGIxLDB4NTcsMHg2OSwweGU4CisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfZW50 cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4OGMsMHg1MiwweDdlLDB4NzcsMHg3MiwweDNm LDB4YTMsMHgwNCwweDk3LDB4MTAsMHg5YiwweDQxLAorKwkweGJkLDB4ZTgsMHhmZiwweDg5LDB4 ZWQsMHg4MCwweGUzLDB4YmQsMHhhYSwweDEyLDB4MmQsMHhjYSwKKysJMHg3NSwweDgyLDB4MzYs MHg3NywweDg4LDB4Y2QsMHhhNiwweDczCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfYWRkaXRpb25hbGlucHV0cmVzZWVk W10gPQorKwl7CisrCTB4N2UsMHgzMiwweGUzLDB4NjksMHg2OSwweDA3LDB4MzQsMHhhMiwweDE2 LDB4YTIsMHg1ZCwweDFhLAorKwkweDEwLDB4OTEsMHhkMywweGUyLDB4MjEsMHhhMiwweGEzLDB4 ZGQsMHhjZCwweDBjLDB4MDksMHg4NiwKKysJMHgxMSwweGUxLDB4NTAsMHhmZiwweDVjLDB4Yjcs MHhlYiwweDVjCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGE1MTJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDdmLDB4 NzgsMHg2NiwweGQ4LDB4ZmIsMHg2NywweGNmLDB4OGQsMHg4YywweDA4LDB4MzAsMHhhNSwKKysJ MHhmOCwweDdkLDB4Y2YsMHg0NCwweDU5LDB4Y2UsMHhmOCwweGRmLDB4NTgsMHhkMywweDYwLDB4 Y2IsCisrCTB4YTgsMHg2MCwweGI5LDB4MDcsMHhjNCwweGIxLDB4OTUsMHg0OAorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEy X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGRmLDB4YTcsMHgzNiwweGQ0LDB4ZGMsMHg1ZCww eDRkLDB4MzEsMHhhZCwweDY5LDB4NDYsMHg5ZiwKKysJMHhmMSwweDdjLDB4ZDcsMHgzYiwweDRm LDB4NTUsMHhmMiwweGQ3LDB4YjksMHg5ZCwweGFkLDB4N2EsCisrCTB4NzksMHgwOCwweDU5LDB4 YTUsMHhkYywweDc0LDB4ZjUsMHg5YiwweDczLDB4ZDIsMHgxMywweDI1LAorKwkweDBiLDB4ODEs MHgwOCwweDA4LDB4MjUsMHhmYiwweDM5LDB4ZjIsMHhmMCwweGEzLDB4YTQsMHg4ZCwKKysJMHhl ZiwweDA1LDB4OWUsMHhiOCwweGM3LDB4NTIsMHhlNCwweDBlLDB4NDIsMHhhYSwweDdjLDB4Nzks CisrCTB4YzIsMHhkNiwweGZkLDB4YTUKKysJfTsKKysKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEt YmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjEt YmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjEt YmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYy5maXBzCTIwMTItMDItMjkgMTA6 MzM6MDIuNzk2Mjk0OTE1ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlw cy9maXBzX2RzYV9zZWxmdGVzdC5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzk2Mjk0OTE1ICswMTAw CitAQCAtMCwwICsxLDE5MyBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAy MDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlz dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0 CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICog ICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBt YXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3 YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIg YW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNl IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAor KyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwg cGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50Ogor KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNs dWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9kc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvYm4uaD4KKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisrCisrI2lmZGVmIE9QRU5TU0xfRklQ UworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfcFtdID0gewor KwkweGE4LDB4NTMsMHg3OCwweGQ4LDB4ZmQsMHgzZiwweDhkLDB4NzIsMHhlYywweDc0LDB4MTgs MHgwOCwKKysJMHgwZCwweGEyLDB4MTMsMHgxNywweGU0LDB4M2UsMHhjNCwweGI2LDB4MmIsMHhh OCwweGM4LDB4NjIsCisrCTB4M2IsMHg3ZSwweDRkLDB4MDQsMHg0NCwweDFkLDB4ZDEsMHhhMCww eDY1LDB4ODYsMHg2MiwweDU5LAorKwkweDY0LDB4OTMsMHhjYSwweDhlLDB4OWUsMHg4ZiwweGJi LDB4N2UsMHgzNCwweGFhLDB4ZGQsMHhiNiwKKysJMHgyZSwweDVkLDB4NjcsMHhiNiwweGQwLDB4 OWEsMHg2ZSwweDYxLDB4YjcsMHg2OSwweGU3LDB4YzMsCisrCTB4NTIsMHhhYSwweDJiLDB4MTAs MHhlMiwweDBjLDB4YTAsMHg2MywweDY5LDB4NjMsMHhiNSwweDUyLAorKwkweDNlLDB4ODYsMHg0 NywweDBkLDB4ZWMsMHhiYiwweGVkLDB4YTAsMHgyNywweGU3LDB4OTcsMHhlNywKKysJMHhiNiww eDc2LDB4MzUsMHhkNCwweGQ0LDB4OWMsMHgzMCwweDcwLDB4MGUsMHg3NCwweGFmLDB4OGEsCisr CTB4MGYsMHhmMSwweDU2LDB4YTgsMHgwMSwweGFmLDB4NTcsMHhhMiwweDZlLDB4NzAsMHg3OCww eGYxLAorKwkweGQ4LDB4MmYsMHg3NCwweDkwLDB4OGUsMHhjYiwweDZkLDB4MDcsMHhlNywweDBi LDB4MzUsMHgwMywKKysJMHhlZSwweGQ5LDB4NGYsMHhhMywweDJjLDB4ZjEsMHg3YSwweDdmLDB4 YzMsMHhkNiwweGNmLDB4NDAsCisrCTB4ZGMsMHg3YiwweDAwLDB4ODMsMHgwZSwweDZhLDB4MjUs MHg2NiwweGRjLDB4MDcsMHgzZSwweDM0LAorKwkweDMzLDB4MTIsMHg1MSwweDdjLDB4NmEsMHhh NSwweDE1LDB4MmIsMHg0YiwweGZlLDB4Y2QsMHgyZSwKKysJMHg1NSwweDFmLDB4ZWUsMHgzNCww eDYzLDB4MTgsMHhhMSwweDUzLDB4NDIsMHgzYywweDk5LDB4NmIsCisrCTB4MGQsMHg1ZCwweGNi LDB4OTEsMHgwMiwweGFlLDB4ZGQsMHgzOCwweDc5LDB4ODYsMHgxNiwweGYxLAorKwkweGYxLDB4 ZTAsMHhkNiwweGM0LDB4MDMsMHg1MiwweDViLDB4MWYsMHg5YiwweDNkLDB4NGQsMHhjNywKKysJ MHg2NiwweGRlLDB4MmQsMHhmYywweDRhLDB4NTYsMHhkNywweGI4LDB4YmEsMHg1OSwweDYzLDB4 ZDYsCisrCTB4MGYsMHgzZSwweDE2LDB4MzEsMHg4OCwweDcwLDB4YWQsMHg0MywweDY5LDB4NTIs MHhlNSwweDU3LAorKwkweDY1LDB4MzcsMHg0ZSwweGFiLDB4ODUsMHhlOCwweGVjLDB4MTcsMHhk NiwweGI5LDB4YTQsMHg1NCwKKysJMHg3YiwweDliLDB4NWYsMHgyNywweDUyLDB4ZjMsMHgxMCww eDViLDB4ZTgsMHgwOSwweGIyLDB4M2EsCisrCTB4MmMsMHg4ZCwweDc0LDB4NjksMHhkYiwweDAy LDB4ZTIsMHg0ZCwweDU5LDB4MjMsMHg5NCwweGE3LAorKwkweGRiLDB4YTAsMHg2OSwweGU5Cisr fTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X3FbXSA9IHsK KysJMHhkMiwweDc3LDB4MDQsMHg0ZSwweDUwLDB4ZjUsMHhhNCwweGUzLDB4ZjUsMHgxMCwweGE1 LDB4MGEsCisrCTB4MGIsMHg4NCwweGZkLDB4ZmYsMHhiYywweGEwLDB4NDcsMHhlZCwweDI3LDB4 NjAsMHgyMCwweDU2LAorKwkweDc0LDB4NDEsMHhhMCwweGE1CisrfTsKKysKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X2dbXSA9IHsKKysJMHgxMywweGQ3LDB4NTQs MHhlMiwweDFmLDB4ZDIsMHg0MSwweDY1LDB4NWQsMHhhOCwweDkxLDB4YzUsCisrCTB4MjIsMHhh NiwweDVhLDB4NzIsMHhhOCwweDliLDB4ZGMsMHg2NCwweGVjLDB4OWIsMHg1NCwweGE4LAorKwkw eDIxLDB4ZWQsMHg0YSwweDg5LDB4OGIsMHg0OSwweDBlLDB4MGMsMHg0ZiwweGNiLDB4NzIsMHgx OSwKKysJMHgyYSwweDRhLDB4MjAsMHhmNSwweDQxLDB4ZjMsMHhmMiwweDkyLDB4NTMsMHg5OSww eGYwLDB4YmEsCisrCTB4ZWMsMHhmOSwweDI5LDB4YWEsMHhmYiwweGY3LDB4OWQsMHhmZSwweDQz LDB4MzIsMHgzOSwweDNiLAorKwkweDMyLDB4Y2QsMHgyZSwweDJmLDB4Y2YsMHgyNywweDJmLDB4 MzIsMHhhNiwweDI3LDB4NDMsMHg0YSwKKysJMHgwZCwweGYyLDB4NDIsMHhiNywweDViLDB4NDEs MHg0ZCwweGYzLDB4NzIsMHgxMiwweDFlLDB4NTMsCisrCTB4YTUsMHg1MywweGYyLDB4MjIsMHhm OCwweDM2LDB4YjAsMHgwMCwweGYwLDB4MTYsMHg0OCwweDViLAorKwkweDZiLDB4ZDAsMHg4OSww eDg0LDB4NTEsMHg4MCwweDFkLDB4Y2QsMHg4ZCwweGU2LDB4NGMsMHhkNSwKKysJMHgzNiwweDU2 LDB4OTYsMHhmZiwweGM1LDB4MzIsMHhkNSwweDI4LDB4YzUsMHgwNiwweDYyLDB4MGEsCisrCTB4 OTQsMHgyYSwweDAzLDB4MDUsMHgwNCwweDZkLDB4OGYsMHgxOCwweDc2LDB4MzQsMHgxZiwweDFl LAorKwkweDU3LDB4MGIsMHhjMywweDk3LDB4NGIsMHhhNiwweGI5LDB4YTQsMHgzOCwweGU5LDB4 NzAsMHgyMywKKysJMHgwMiwweGEyLDB4ZTYsMHhlNiwweDdiLDB4ZmQsMHgwNiwweGQzLDB4MmIs MHhjNiwweDc5LDB4OTYsCisrCTB4MjIsMHg3MSwweGQ3LDB4YjQsMHgwYywweGQ3LDB4MmYsMHgz OCwweDZlLDB4NjQsMHhlMCwweGQ3LAorKwkweGVmLDB4ODYsMHhjYSwweDhjLDB4YTUsMHhkMSww eDQyLDB4MjgsMHhkYywweDJhLDB4NGYsMHgxNiwKKysJMHhlMywweDE4LDB4OTgsMHg4NiwweGI1 LDB4OTksMHgwNiwweDc0LDB4ZjQsMHgyMCwweDBmLDB4M2EsCisrCTB4NGMsMHhmNiwweDVhLDB4 M2YsMHgwZCwweGRiLDB4YTEsMHhmYSwweDY3LDB4MmQsMHhmZiwweDJmLAorKwkweDVlLDB4MTQs MHgzZCwweDEwLDB4ZTQsMHhlOSwweDdhLDB4ZTgsMHg0ZiwweDZkLDB4YTAsMHg5NSwKKysJMHgz NSwweGQ1LDB4YjksMHhkZiwweDI1LDB4OTEsMHg4MSwweGE3LDB4OWIsMHg2MywweGIwLDB4Njks CisrCTB4ZTksMHg0OSwweDk3LDB4MmIsMHgwMiwweGJhLDB4MzYsMHhiMywweDU4LDB4NmEsMHhh YiwweDdlLAorKwkweDQ1LDB4ZjMsMHgyMiwweGY4LDB4MmUsMHg0ZSwweDg1LDB4Y2EsMHgzYSww eGI4LDB4NTUsMHg5MSwKKysJMHhiMywweGMyLDB4YTksMHg2NgorK307CisrCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0OF9wdWJfa2V5W10gPSB7CisrCTB4MjQsMHg1 MiwweGYzLDB4Y2MsMHhiZSwweDllLDB4ZDUsMHhjYSwweDdkLDB4YzcsMHg0YywweDYwLAorKwkw eDJiLDB4OTksMHgyMiwweDZlLDB4OGYsMHgyZiwweGFiLDB4MzgsMHhlNywweGQ3LDB4ZGQsMHhm YiwKKysJMHg3NSwweDUzLDB4OWIsMHgxNywweDE1LDB4NWUsMHg5ZiwweGNmLDB4ZDEsMHhhYiww eGE1LDB4NjQsCisrCTB4ZWIsMHg4NSwweDM1LDB4ZDgsMHgxMiwweGM5LDB4YzIsMHhkYywweGY5 LDB4NzIsMHg4NCwweDQ0LAorKwkweDFiLDB4YzQsMHg4MiwweDI0LDB4MzYsMHgyNCwweGM3LDB4 ZjQsMHg1NywweDU4LDB4MGMsMHgxYywKKysJMHgzOCwweGE1LDB4N2MsMHg0NiwweGM0LDB4NTcs MHgzOSwweDI0LDB4NzAsMHhlZCwweGI1LDB4MmMsCisrCTB4YjUsMHhhNiwweGUwLDB4M2YsMHhl NiwweDI4LDB4N2IsMHhiNiwweGY0LDB4OWEsMHg0MiwweGEyLAorKwkweDA2LDB4NWEsMHgwNSww eDRmLDB4MDMsMHgwOCwweDM5LDB4ZGYsMHgxZiwweGQzLDB4MTQsMHg5YywKKysJMHg0YywweGEw LDB4NTMsMHgxZCwweGQ4LDB4Y2EsMHg4YSwweGFhLDB4OWMsMHhjNywweDMzLDB4NzEsCisrCTB4 OTMsMHgzOCwweDczLDB4NDgsMHgzMywweDYxLDB4MTgsMHgyMiwweDQ1LDB4NDUsMHhlOCwweDhj LAorKwkweDgwLDB4ZmYsMHhkOCwweDc2LDB4NWQsMHg3NCwweDM2LDB4MDMsMHgzMywweGNjLDB4 YWIsMHg5OSwKKysJMHg3MiwweDc3LDB4OWIsMHg2NSwweDI1LDB4YTYsMHg1YiwweGRkLDB4MGQs MHgxMCwweGM2LDB4NzUsCisrCTB4YzEsMHgwOSwweGJiLDB4ZDMsMHhlNSwweGJlLDB4NGQsMHg3 MiwweGVmLDB4NmUsMHhiYSwweDZlLAorKwkweDQzLDB4OGQsMHg1MiwweDI2LDB4MjMsMHg3ZCww eGI4LDB4ODgsMHgzNywweDljLDB4NWYsMHhjYywKKysJMHg0NywweGEzLDB4ODQsMHg3ZiwweGY2 LDB4MzcsMHgxMSwweGJhLDB4ZWQsMHg2ZCwweDAzLDB4YWYsCisrCTB4ZTgsMHgxZSwweDY5LDB4 NGEsMHg0MSwweDNiLDB4NjgsMHgwYiwweGQzLDB4OGEsMHhiNCwweDkwLAorKwkweDNmLDB4ODMs MHg3MCwweGE3LDB4MDcsMHhlZiwweDU1LDB4MWQsMHg0OSwweDQxLDB4MDIsMHg2ZCwKKysJMHg5 NSwweDc5LDB4ZDYsMHg5MSwweGRlLDB4OGUsMHhkYSwweGExLDB4NjEsMHgwNSwweGViLDB4OWQs CisrCTB4YmEsMHgzYywweDJmLDB4NGMsMHgxYiwweGVjLDB4NTAsMHg4MiwweDc1LDB4YWEsMHgw MiwweDA3LAorKwkweGUyLDB4NTEsMHhiNSwweGVjLDB4Y2IsMHgyOCwweDZhLDB4NGIsMHgwMSww eGQ0LDB4NDksMHhkMywKKysJMHgwYSwweGNiLDB4NjcsMHgzNywweDE3LDB4YTAsMHhkMiwweGZi LDB4M2IsMHg1MCwweGM4LDB4OTMsCisrCTB4ZjcsMHhkYSwweGIxLDB4NGYKKyt9OworKworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfcHJpdl9rZXlbXSA9IHsKKysJ MHgwYywweDRiLDB4MzAsMHg4OSwweGQxLDB4YjgsMHg2MiwweGNiLDB4M2MsMHg0MywweDY0LDB4 OTEsCisrCTB4ZjAsMHg5MSwweDU0LDB4NzAsMHhjNSwweDI3LDB4OTYsMHhlMywweGFjLDB4YmUs MHhlOCwweDAwLAorKwkweGVjLDB4NTUsMHhmNiwweGNjCisrfTsKKysKKytzdGF0aWMgaW50IGNv cnJ1cHRfZHNhOworKworK3ZvaWQgRklQU19jb3JydXB0X2RzYSgpCisrICAgIHsKKysgICAgY29y cnVwdF9kc2EgPSAxOworKyAgICB9CisrCisraW50IEZJUFNfc2VsZnRlc3RfZHNhKCkKKysJewor KwlEU0EgKmRzYSA9IE5VTEw7CisrCUVWUF9QS0VZICpwayA9IE5VTEw7CisrCWludCByZXQgPSAw OworKworKwlkc2EgPSBEU0FfbmV3KCk7CisrCisrCWlmKGRzYSA9PSBOVUxMKQorKwkJZ290byBl cnI7CisrCisrCWZpcHNfbG9hZF9rZXlfY29tcG9uZW50KGRzYSwgcCwgZHNhX3Rlc3RfMjA0OCk7 CisrCWZpcHNfbG9hZF9rZXlfY29tcG9uZW50KGRzYSwgcSwgZHNhX3Rlc3RfMjA0OCk7CisrCWZp cHNfbG9hZF9rZXlfY29tcG9uZW50KGRzYSwgZywgZHNhX3Rlc3RfMjA0OCk7CisrCWZpcHNfbG9h ZF9rZXlfY29tcG9uZW50KGRzYSwgcHViX2tleSwgZHNhX3Rlc3RfMjA0OCk7CisrCWZpcHNfbG9h ZF9rZXlfY29tcG9uZW50KGRzYSwgcHJpdl9rZXksIGRzYV90ZXN0XzIwNDgpOworKworKwlpZiAo Y29ycnVwdF9kc2EpCisrCQlCTl9zZXRfYml0KGRzYS0+cHViX2tleSwgMjA0Nyk7CisrCisrCWlm ICgocGs9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysKKysJRVZQX1BL RVlfYXNzaWduX0RTQShwaywgZHNhKTsKKysKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3QocGssIE5VTEwsIDAsCisrCQkJCQlOVUxMLCAwLCBFVlBfc2hhMjU2KCksIDAsCisrCQkJCQki RFNBIFNIQTI1NiIpKQorKwkJZ290byBlcnI7CisrCXJldCA9IDE7CisrCisrCWVycjoKKysJaWYg KHBrKQorKwkJRVZQX1BLRVlfZnJlZShwayk7CisrCWVsc2UgaWYgKGRzYSkKKysJCURTQV9mcmVl KGRzYSk7CisrCXJldHVybiByZXQ7CisrCX0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19lbmMuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMv Y3J5cHRvL2ZpcHMvZmlwc19lbmMuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2Zp cHMvZmlwc19lbmMuYy5maXBzCTIwMTItMDItMjkgMTA6MzM6MDIuNzk2Mjk0OTE1ICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX2VuYy5jCTIwMTItMDItMjkg MTA6MzM6MDIuNzk2Mjk0OTE1ICswMTAwCitAQCAtMCwwICsxLDE5MSBAQAorKy8qIGZpcGUvZXZw L2ZpcHNfZW5jLmMgKi8KKysvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChl YXlAY3J5cHRzb2Z0LmNvbSkKKysgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogVGhp cyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisrICogYnkgRXJpYyBZ b3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3Jp dHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKysgKiAKKysgKiBUaGlz IGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFz IGxvbmcgYXMKKysgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBU aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0 aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorKyAqIGxoYXNoLCBERVMsIGV0 Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgor KyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2Ft ZSBjb3B5cmlnaHQgdGVybXMKKysgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRz b24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKiAKKysgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmlj IFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorKyAqIHRoZSBj b2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKysgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBp biBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisrICog YXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKysgKiBUaGlz IGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0 dXAgb3IKKysgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQg d2l0aCB0aGUgcGFja2FnZS4KKysgKiAKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysg KiBhcmUgbWV0OgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluIHRoZQorKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisrICog ICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5Cisr ICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKysgKiAgICBUaGUgd29yZCAn Y3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxp YnJhcnkKKysgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDot KS4KKysgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBh IGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKysgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFw cGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29u ICh0amhAY3J5cHRzb2Z0LmNvbSkiCisrICogCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKysgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRQorKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisrICogRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK KysgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUworKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS SUNUCisrICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKysgKiBTVUNIIERB TUFHRS4KKysgKiAKKysgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBh bnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorKyAqIGRlcml2YXRpdmUgb2YgdGhp cyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBi ZQorKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UK KysgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorKyAqLworKworKyNpbmNs dWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+CisrCisrY29uc3QgRVZQX0NJUEhFUiAqRklQU19nZXRfY2lwaGVyYnluaWQoaW50IG5pZCkK KysJeworKwlzd2l0Y2ggKG5pZCkKKysJCXsKKysJCWNhc2UgTklEX2Flc18xMjhfY2JjOgorKwkJ cmV0dXJuIEVWUF9hZXNfMTI4X2NiYygpOworKworKwkJY2FzZSBOSURfYWVzXzEyOF9jY206Cisr CQlyZXR1cm4gRVZQX2Flc18xMjhfY2NtKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTI4X2NmYjE6 CisrCQlyZXR1cm4gRVZQX2Flc18xMjhfY2ZiMSgpOworKworKwkJY2FzZSBOSURfYWVzXzEyOF9j ZmIxMjg6CisrCQlyZXR1cm4gRVZQX2Flc18xMjhfY2ZiMTI4KCk7CisrCisrCQljYXNlIE5JRF9h ZXNfMTI4X2NmYjg6CisrCQlyZXR1cm4gRVZQX2Flc18xMjhfY2ZiOCgpOworKworKwkJY2FzZSBO SURfYWVzXzEyOF9jdHI6CisrCQlyZXR1cm4gRVZQX2Flc18xMjhfY3RyKCk7CisrCisrCQljYXNl IE5JRF9hZXNfMTI4X2VjYjoKKysJCXJldHVybiBFVlBfYWVzXzEyOF9lY2IoKTsKKysKKysJCWNh c2UgTklEX2Flc18xMjhfZ2NtOgorKwkJcmV0dXJuIEVWUF9hZXNfMTI4X2djbSgpOworKworKwkJ Y2FzZSBOSURfYWVzXzEyOF9vZmIxMjg6CisrCQlyZXR1cm4gRVZQX2Flc18xMjhfb2ZiKCk7Cisr CisrCQljYXNlIE5JRF9hZXNfMTI4X3h0czoKKysJCXJldHVybiBFVlBfYWVzXzEyOF94dHMoKTsK KysKKysJCWNhc2UgTklEX2Flc18xOTJfY2JjOgorKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2NiYygp OworKworKwkJY2FzZSBOSURfYWVzXzE5Ml9jY206CisrCQlyZXR1cm4gRVZQX2Flc18xOTJfY2Nt KCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTkyX2NmYjE6CisrCQlyZXR1cm4gRVZQX2Flc18xOTJf Y2ZiMSgpOworKworKwkJY2FzZSBOSURfYWVzXzE5Ml9jZmIxMjg6CisrCQlyZXR1cm4gRVZQX2Fl c18xOTJfY2ZiMTI4KCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTkyX2NmYjg6CisrCQlyZXR1cm4g RVZQX2Flc18xOTJfY2ZiOCgpOworKworKwkJY2FzZSBOSURfYWVzXzE5Ml9jdHI6CisrCQlyZXR1 cm4gRVZQX2Flc18xOTJfY3RyKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTkyX2VjYjoKKysJCXJl dHVybiBFVlBfYWVzXzE5Ml9lY2IoKTsKKysKKysJCWNhc2UgTklEX2Flc18xOTJfZ2NtOgorKwkJ cmV0dXJuIEVWUF9hZXNfMTkyX2djbSgpOworKworKwkJY2FzZSBOSURfYWVzXzE5Ml9vZmIxMjg6 CisrCQlyZXR1cm4gRVZQX2Flc18xOTJfb2ZiKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMjU2X2Ni YzoKKysJCXJldHVybiBFVlBfYWVzXzI1Nl9jYmMoKTsKKysKKysJCWNhc2UgTklEX2Flc18yNTZf Y2NtOgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2NjbSgpOworKworKwkJY2FzZSBOSURfYWVzXzI1 Nl9jZmIxOgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2NmYjEoKTsKKysKKysJCWNhc2UgTklEX2Fl c18yNTZfY2ZiMTI4OgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2NmYjEyOCgpOworKworKwkJY2Fz ZSBOSURfYWVzXzI1Nl9jZmI4OgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2NmYjgoKTsKKysKKysJ CWNhc2UgTklEX2Flc18yNTZfY3RyOgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2N0cigpOworKwor KwkJY2FzZSBOSURfYWVzXzI1Nl9lY2I6CisrCQlyZXR1cm4gRVZQX2Flc18yNTZfZWNiKCk7Cisr CisrCQljYXNlIE5JRF9hZXNfMjU2X2djbToKKysJCXJldHVybiBFVlBfYWVzXzI1Nl9nY20oKTsK KysKKysJCWNhc2UgTklEX2Flc18yNTZfb2ZiMTI4OgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2X29m YigpOworKworKwkJY2FzZSBOSURfYWVzXzI1Nl94dHM6CisrCQlyZXR1cm4gRVZQX2Flc18yNTZf eHRzKCk7CisrCisrCQljYXNlIE5JRF9kZXNfZWRlX2VjYjoKKysJCXJldHVybiBFVlBfZGVzX2Vk ZSgpOworKworKwkJY2FzZSBOSURfZGVzX2VkZTNfZWNiOgorKwkJcmV0dXJuIEVWUF9kZXNfZWRl MygpOworKworKwkJY2FzZSBOSURfZGVzX2VkZTNfY2JjOgorKwkJcmV0dXJuIEVWUF9kZXNfZWRl M19jYmMoKTsKKysKKysJCWNhc2UgTklEX2Rlc19lZGUzX2NmYjE6CisrCQlyZXR1cm4gRVZQX2Rl c19lZGUzX2NmYjEoKTsKKysKKysJCWNhc2UgTklEX2Rlc19lZGUzX2NmYjY0OgorKwkJcmV0dXJu IEVWUF9kZXNfZWRlM19jZmI2NCgpOworKworKwkJY2FzZSBOSURfZGVzX2VkZTNfY2ZiODoKKysJ CXJldHVybiBFVlBfZGVzX2VkZTNfY2ZiOCgpOworKworKwkJY2FzZSBOSURfZGVzX2VkZTNfb2Zi NjQ6CisrCQlyZXR1cm4gRVZQX2Rlc19lZGUzX29mYigpOworKworKwkJY2FzZSBOSURfZGVzX2Vk ZV9jYmM6CisrCQlyZXR1cm4gRVZQX2Rlc19lZGVfY2JjKCk7CisrCisrCQljYXNlIE5JRF9kZXNf ZWRlX2NmYjY0OgorKwkJcmV0dXJuIEVWUF9kZXNfZWRlX2NmYjY0KCk7CisrCisrCQljYXNlIE5J RF9kZXNfZWRlX29mYjY0OgorKwkJcmV0dXJuIEVWUF9kZXNfZWRlX29mYigpOworKworKwkJZGVm YXVsdDoKKysJCXJldHVybiBOVUxMOworKworKwkJfQorKwl9CisrCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHMuaC5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMv Y3J5cHRvL2ZpcHMvZmlwcy5oCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9m aXBzLmguZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5NzI5NDkyMyArMDEwMAorKysrIG9wZW5z c2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwcy5oCTIwMTItMDItMjkgMTA6MzM6MDIuNzk3 Mjk0OTIzICswMTAwCitAQCAtMCwwICsxLDI3OSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09 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 LworKworKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9G SVBTCisrI2Vycm9yIEZJUFMgaXMgZGlzYWJsZWQuCisrI2VuZGlmCisrCisrI2lmZGVmIE9QRU5T U0xfRklQUworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYK KysKKytzdHJ1Y3QgZHNhX3N0OworK3N0cnVjdCByc2Ffc3Q7Cisrc3RydWN0IGV2cF9wa2V5X3N0 OworK3N0cnVjdCBlbnZfbWRfc3Q7Cisrc3RydWN0IGVudl9tZF9jdHhfc3Q7Cisrc3RydWN0IGV2 cF9jaXBoZXJfc3Q7Cisrc3RydWN0IGV2cF9jaXBoZXJfY3R4X3N0OworK3N0cnVjdCBkaF9tZXRo b2Q7Cisrc3RydWN0IENNQUNfQ1RYX3N0OworK3N0cnVjdCBobWFjX2N0eF9zdDsKKysKKytpbnQg RklQU19tb2R1bGVfbW9kZV9zZXQoaW50IG9ub2ZmLCBjb25zdCBjaGFyICphdXRoKTsKKytpbnQg RklQU19tb2R1bGVfbW9kZSh2b2lkKTsKKytjb25zdCB2b2lkICpGSVBTX3JhbmRfY2hlY2sodm9p ZCk7CisraW50IEZJUFNfc2VsZnRlc3Qodm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfZmFpbGVk KHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X3NoYTEodm9pZCk7CisraW50IEZJUFNfc2VsZnRl c3Rfc2hhMSh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9zaGEyKHZvaWQpOworK3ZvaWQgRklQ U19jb3JydXB0X2Flcyh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9hZXNfY2NtKHZvaWQpOwor K2ludCBGSVBTX3NlbGZ0ZXN0X2Flc19nY20odm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfYWVz X3h0cyh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9hZXModm9pZCk7Cisrdm9pZCBGSVBTX2Nv cnJ1cHRfZGVzKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2Rlcyh2b2lkKTsKKyt2b2lkIEZJ UFNfY29ycnVwdF9yc2Eodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbih2b2lk KTsKKytpbnQgRklQU19zZWxmdGVzdF9yc2Eodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfZHNh KHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X2RzYV9rZXlnZW4odm9pZCk7CisraW50IEZJUFNf c2VsZnRlc3RfZHNhKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X3JuZyh2b2lkKTsKKyt2b2lk IEZJUFNfcm5nX3N0aWNrKHZvaWQpOworK3ZvaWQgRklQU194OTMxX3N0aWNrKGludCBvbm9mZik7 Cisrdm9pZCBGSVBTX2RyYmdfc3RpY2soaW50IG9ub2ZmKTsKKytpbnQgRklQU19zZWxmdGVzdF9y bmcodm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfeDkzMSh2b2lkKTsKKytpbnQgRklQU19zZWxm dGVzdF9obWFjKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2RyYmcodm9pZCk7CisraW50IEZJ UFNfc2VsZnRlc3RfZHJiZ19hbGwodm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfY21hYyh2b2lk KTsKKysKKyt2b2lkIEZJUFNfZ2V0X3RpbWV2ZWModW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25l ZCBsb25nICpwY3RyKTsKKysKKysjZGVmaW5lIEZJUFNfRVJST1JfSUdOT1JFRChhbGcpIE9wZW5T U0xEaWUoX19GSUxFX18sIF9fTElORV9fLCBcCisrCQlhbGcgIiBwcmV2aW91cyBGSVBTIGZvcmJp ZGRlbiBhbGdvcml0aG0gZXJyb3IgaWdub3JlZCIpOworKworK2ludCBmaXBzX3BrZXlfc2lnbmF0 dXJlX3Rlc3Qoc3RydWN0IGV2cF9wa2V5X3N0ICpwa2V5LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKnRicywgaW50IHRic2xlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICprYXQsIHVuc2ln bmVkIGludCBrYXRsZW4sCisrCQkJY29uc3Qgc3RydWN0IGVudl9tZF9zdCAqZGlnZXN0LCB1bnNp Z25lZCBpbnQgbWRfZmxhZ3MsCisrCQkJY29uc3QgY2hhciAqZmFpbF9zdHIpOworKworK2ludCBm aXBzX2NpcGhlcl90ZXN0KHN0cnVjdCBldnBfY2lwaGVyX2N0eF9zdCAqY3R4LAorKwkJCWNvbnN0 IHN0cnVjdCBldnBfY2lwaGVyX3N0ICpjaXBoZXIsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAq a2V5LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKnBsYWludGV4dCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0LAorKwkJ CWludCBsZW4pOworKworK3ZvaWQgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCh2b2lkKTsKKysKKytj b25zdCBzdHJ1Y3QgZW52X21kX3N0ICpGSVBTX2dldF9kaWdlc3RieW5pZChpbnQgbmlkKTsKKysK Kytjb25zdCBzdHJ1Y3QgZXZwX2NpcGhlcl9zdCAqRklQU19nZXRfY2lwaGVyYnluaWQoaW50IG5p ZCk7CisrCisrCisrLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KKysvKiBUaGUgZm9sbG93aW5nIGxp bmVzIGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdl cworKyAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUg c2NyaXB0IGlzIG5leHQgcnVuLgorKyAqLworK3ZvaWQgRVJSX2xvYWRfRklQU19zdHJpbmdzKHZv aWQpOworKworKy8qIEVycm9yIGNvZGVzIGZvciB0aGUgRklQUyBmdW5jdGlvbnMuICovCisrCisr LyogRnVuY3Rpb24gY29kZXMuICovCisrI2RlZmluZSBGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJB TVMJCQkgMTAwCisrI2RlZmluZSBGSVBTX0ZfREhfSU5JVAkJCQkJIDE0OAorKyNkZWZpbmUgRklQ U19GX0RSQkdfUkVTRUVECQkJCSAxNjIKKysjZGVmaW5lIEZJUFNfRl9EU0FfQlVJTFRJTl9QQVJB TUdFTgkJCSAxMDEKKysjZGVmaW5lIEZJUFNfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTjIJCQkgMTA3 CisrI2RlZmluZSBGSVBTX0ZfRFNBX0RPX1NJR04JCQkJIDEwMgorKyNkZWZpbmUgRklQU19GX0RT QV9ET19WRVJJRlkJCQkJIDEwMworKyNkZWZpbmUgRklQU19GX0VDREhfQ09NUFVURV9LRVkJCQkJ IDE2MworKyNkZWZpbmUgRklQU19GX0VDRFNBX0RPX1NJR04JCQkJIDE2NAorKyNkZWZpbmUgRklQ U19GX0VDRFNBX0RPX1ZFUklGWQkJCQkgMTY1CisrI2RlZmluZSBGSVBTX0ZfRUNfS0VZX0dFTkVS QVRFX0tFWQkJCSAxNjYKKysjZGVmaW5lIEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWAkJCSAxMjQK KysjZGVmaW5lIEZJUFNfRl9FVlBfRElHRVNUSU5JVF9FWAkJCSAxMjUKKysjZGVmaW5lIEZJUFNf Rl9GSVBTX0NIRUNLX0RTQQkJCQkgMTA0CisrI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19EU0Ff UFJORwkJCSAxNTEKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0VDCQkJCSAxNDIKKysjZGVm aW5lIEZJUFNfRl9GSVBTX0NIRUNLX0VDX1BSTkcJCQkgMTUyCisrI2RlZmluZSBGSVBTX0ZfRklQ U19DSEVDS19JTkNPUkVfRklOR0VSUFJJTlQJCSAxMDUKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NI RUNLX1JTQQkJCQkgMTA2CisrI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19SU0FfUFJORwkJCSAx NTAKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NJUEhFUgkJCQkgMTYwCisrI2RlZmluZSBGSVBTX0Zf RklQU19DSVBIRVJJTklUCQkJCSAxNDMKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NJUEhFUl9DVFhf Q1RSTAkJCSAxNjEKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RJR0VTVEZJTkFMCQkJCSAxNTgKKysj ZGVmaW5lIEZJUFNfRl9GSVBTX0RJR0VTVElOSVQJCQkJIDEyOAorKyNkZWZpbmUgRklQU19GX0ZJ UFNfRElHRVNUVVBEQVRFCQkJIDE1OQorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19CWVRFUwkJ CQkgMTMxCisrI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX0NIRUNLCQkJCSAxNDYKKysjZGVmaW5l IEZJUFNfRl9GSVBTX0RSQkdfQ1BSTkdfVEVTVAkJCSAxMzIKKysjZGVmaW5lIEZJUFNfRl9GSVBT X0RSQkdfRVJST1JfQ0hFQ0sJCQkgMTM2CisrI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX0dFTkVS QVRFCQkJIDEzNAorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19JTklUCQkJCSAxMzUKKysjZGVm aW5lIEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUJCQkgMTM4CisrI2RlZmluZSBGSVBTX0Zf RklQU19EUkJHX05FVwkJCQkgMTM5CisrI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX1JFU0VFRAkJ CQkgMTQwCisrI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQJCQkgMTQxCisrI2Rl ZmluZSBGSVBTX0ZfRklQU19EU0FfQ0hFQ0sJCS8qIHVudXNlZCAqLwkgMTA3CisrI2RlZmluZSBG SVBTX0ZfRklQU19EU0FfU0lHTl9ESUdFU1QJCQkgMTU0CisrI2RlZmluZSBGSVBTX0ZfRklQU19E U0FfVkVSSUZZX0RJR0VTVAkJCSAxNTUKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0dFVF9FTlRST1BZ CQkJCSAxNDcKKysjZGVmaW5lIEZJUFNfRl9GSVBTX01PREVfU0VUCQkvKiB1bnVzZWQgKi8JIDEw OAorKyNkZWZpbmUgRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VUCQkJIDEwOAorKyNkZWZpbmUg RklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVAkJCSAxMDkKKysjZGVmaW5lIEZJUFNfRl9G SVBTX1JBTkRfQURECQkJCSAxMzcKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfQllURVMJCQkJ IDEyMgorKyNkZWZpbmUgRklQU19GX0ZJUFNfUkFORF9QU0VVRE9fQllURVMJCQkgMTY3CisrI2Rl ZmluZSBGSVBTX0ZfRklQU19SQU5EX1NFRUQJCQkJIDE2OAorKyNkZWZpbmUgRklQU19GX0ZJUFNf UkFORF9TRVRfTUVUSE9ECQkJIDEyNgorKyNkZWZpbmUgRklQU19GX0ZJUFNfUkFORF9TVEFUVVMJ CQkJIDEyNworKyNkZWZpbmUgRklQU19GX0ZJUFNfUlNBX1NJR05fRElHRVNUCQkJIDE1NgorKyNk ZWZpbmUgRklQU19GX0ZJUFNfUlNBX1ZFUklGWV9ESUdFU1QJCQkgMTU3CisrI2RlZmluZSBGSVBT X0ZfRklQU19TRUxGVEVTVF9BRVMJCQkgMTEwCisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVT VF9BRVNfQ0NNCQkJIDE0NQorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0dDTQkJ CSAxMjkKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19YVFMJCQkgMTQ0CisrI2Rl ZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9DTUFDCQkJIDEzMAorKyNkZWZpbmUgRklQU19GX0ZJ UFNfU0VMRlRFU1RfREVTCQkJIDExMQorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfRFNB CQkJIDExMgorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfRUNEU0EJCQkgMTMzCisrI2Rl ZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9ITUFDCQkJIDExMworKyNkZWZpbmUgRklQU19GX0ZJ UFNfU0VMRlRFU1RfUk5HCS8qIHVudXNlZCAqLwkgMTE0CisrI2RlZmluZSBGSVBTX0ZfRklQU19T RUxGVEVTVF9TSEExCQkJIDExNQorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfWDkzMQkJ CSAxMTQKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFVF9QUk5HX0tFWQkJCSAxNTMKKysjZGVmaW5l IEZJUFNfRl9IQVNIX0ZJTkFMCQkJCSAxMjMKKysjZGVmaW5lIEZJUFNfRl9SU0FfQlVJTFRJTl9L RVlHRU4JCQkgMTE2CisrI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9JTklUCQkJCSAxNDkKKysjZGVm aW5lIEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfREVDUllQVAkJCSAxMTcKKysjZGVmaW5lIEZJUFNf Rl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVAkJCSAxMTgKKysjZGVmaW5lIEZJUFNfRl9SU0FfRUFZ X1BVQkxJQ19ERUNSWVBUCQkJIDExOQorKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFVCTElDX0VO Q1JZUFQJCQkgMTIwCisrI2RlZmluZSBGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYCQkJ IDEyMQorKyNkZWZpbmUgRklQU19GX1NTTEVBWV9SQU5EX0JZVEVTCS8qIHVudXNlZCAqLwkgMTIy CisrCisrLyogUmVhc29uIGNvZGVzLiAqLworKyNkZWZpbmUgRklQU19SX0FERElUSU9OQUxfSU5Q VVRfRVJST1JfVU5ERVRFQ1RFRAkgMTUwCisrI2RlZmluZSBGSVBTX1JfQURESVRJT05BTF9JTlBV VF9UT09fTE9ORwkJIDEyNQorKyNkZWZpbmUgRklQU19SX0FMUkVBRFlfSU5TVEFOVElBVEVECQkJ IDEzNAorKyNkZWZpbmUgRklQU19SX0FVVEhFTlRJQ0FUSU9OX0ZBSUxVUkUJCQkgMTUxCisrI2Rl ZmluZSBGSVBTX1JfQ0FOTk9UX1JFQURfRVhFCQkvKiB1bnVzZWQgKi8JIDEwMworKyNkZWZpbmUg RklQU19SX0NBTk5PVF9SRUFEX0VYRV9ESUdFU1QJLyogdW51c2VkICovCSAxMDQKKysjZGVmaW5l IEZJUFNfUl9DT05UUkFESUNUSU5HX0VWSURFTkNFCQkJIDExNAorKyNkZWZpbmUgRklQU19SX0RS QkdfTk9UX0lOSVRJQUxJU0VECQkJIDE1MgorKyNkZWZpbmUgRklQU19SX0RSQkdfU1RVQ0sJCQkJ IDEwMworKyNkZWZpbmUgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRAkJCSAxMDQKKysj ZGVmaW5lIEZJUFNfUl9FTlRST1BZX05PVF9SRVFVRVNURURfRk9SX1JFU0VFRAkJIDEwNQorKyNk ZWZpbmUgRklQU19SX0VOVFJPUFlfU09VUkNFX1NUVUNLCQkJIDE0MgorKyNkZWZpbmUgRklQU19S X0VSUk9SX0lOSVRJQUxJU0lOR19EUkJHCQkJIDExNQorKyNkZWZpbmUgRklQU19SX0VSUk9SX0lO U1RBTlRJQVRJTkdfRFJCRwkJCSAxMjcKKysjZGVmaW5lIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5H X0FERElUSU9OQUxfSU5QVVQJIDEyNAorKyNkZWZpbmUgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdf RU5UUk9QWQkJCSAxMjIKKysjZGVmaW5lIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX05PTkNFCQkJ IDE0MAorKyNkZWZpbmUgRklQU19SX0VYRV9ESUdFU1RfRE9FU19OT1RfTUFUQ0ggICAvKiB1bnVz ZWQgKi8JIDEwNQorKyNkZWZpbmUgRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENICQkg MTEwCisrI2RlZmluZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfTk9OUElDX1JF TE9DQVRFRCAxMTEKKysjZGVmaW5lIEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSF9T RUdNRU5UX0FMSUFTSU5HIDExMgorKyNkZWZpbmUgRklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NF VAkJCSAxMDIKKysjZGVmaW5lIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRAkJCSAxMDYKKysj ZGVmaW5lIEZJUFNfUl9GVU5DVElPTl9FUlJPUgkJCQkgMTE2CisrI2RlZmluZSBGSVBTX1JfR0VO RVJBVEVfRVJST1IJCQkJIDEzNworKyNkZWZpbmUgRklQU19SX0dFTkVSQVRFX0VSUk9SX1VOREVU RUNURUQJCSAxMTgKKysjZGVmaW5lIEZJUFNfUl9JTlNUQU5USUFURV9FUlJPUgkJCSAxMTkKKysj ZGVmaW5lIEZJUFNfUl9JTlNVRkZJQ0lFTlRfU0VDVVJJVFlfU1RSRU5HVEgJCSAxMjAKKysjZGVm aW5lIEZJUFNfUl9JTlRFUk5BTF9FUlJPUgkJCQkgMTIxCisrI2RlZmluZSBGSVBTX1JfSU5WQUxJ RF9LRVlfTEVOR1RICQkJIDEwOQorKyNkZWZpbmUgRklQU19SX0lOVkFMSURfUEFSQU1FVEVSUwkJ CSAxNDQKKysjZGVmaW5lIEZJUFNfUl9JTl9FUlJPUl9TVEFURQkJCQkgMTIzCisrI2RlZmluZSBG SVBTX1JfS0VZX1RPT19TSE9SVAkJCQkgMTA4CisrI2RlZmluZSBGSVBTX1JfTk9OQ0VfRVJST1Jf VU5ERVRFQ1RFRAkJCSAxNDkKKysjZGVmaW5lIEZJUFNfUl9OT05fRklQU19NRVRIT0QJCQkJIDEw MAorKyNkZWZpbmUgRklQU19SX05PUFJfVEVTVDFfRkFJTFVSRQkJCSAxNDUKKysjZGVmaW5lIEZJ UFNfUl9OT1BSX1RFU1QyX0ZBSUxVUkUJCQkgMTQ2CisrI2RlZmluZSBGSVBTX1JfTk9UX0lOU1RB TlRJQVRFRAkJCQkgMTI2CisrI2RlZmluZSBGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQJCQkg MTA3CisrI2RlZmluZSBGSVBTX1JfUEVSU09OQUxJU0FUSU9OX0VSUk9SX1VOREVURUNURUQJCSAx MjgKKysjZGVmaW5lIEZJUFNfUl9QRVJTT05BTElTQVRJT05fU1RSSU5HX1RPT19MT05HCQkgMTI5 CisrI2RlZmluZSBGSVBTX1JfUFJOR19TVFJFTkdUSF9UT09fTE9XCQkJIDE0MworKyNkZWZpbmUg RklQU19SX1BSX1RFU1QxX0ZBSUxVUkUJCQkJIDE0NworKyNkZWZpbmUgRklQU19SX1BSX1RFU1Qy X0ZBSUxVUkUJCQkJIDE0OAorKyNkZWZpbmUgRklQU19SX1JFUVVFU1RfTEVOR1RIX0VSUk9SX1VO REVURUNURUQJCSAxMzAKKysjZGVmaW5lIEZJUFNfUl9SRVFVRVNUX1RPT19MQVJHRV9GT1JfRFJC RwkJIDEzMQorKyNkZWZpbmUgRklQU19SX1JFU0VFRF9DT1VOVEVSX0VSUk9SCQkJIDEzMgorKyNk ZWZpbmUgRklQU19SX1JFU0VFRF9FUlJPUgkJCQkgMTMzCisrI2RlZmluZSBGSVBTX1JfUlNBX0RF Q1JZUFRfRVJST1IJLyogdW51c2VkICovCSAxMTUKKysjZGVmaW5lIEZJUFNfUl9SU0FfRU5DUllQ VF9FUlJPUgkvKiB1bnVzZWQgKi8JIDExNgorKyNkZWZpbmUgRklQU19SX1NFTEZURVNUX0ZBSUxF RAkJCQkgMTAxCisrI2RlZmluZSBGSVBTX1JfU0VMRlRFU1RfRkFJTFVSRQkJCQkgMTM1CisrI2Rl ZmluZSBGSVBTX1JfU1RSRU5HVEhfRVJST1JfVU5ERVRFQ1RFRAkJIDEzNgorKyNkZWZpbmUgRklQ U19SX1RFU1RfRkFJTFVSRQkJCQkgMTE3CisrI2RlZmluZSBGSVBTX1JfVU5JTlNUQU5USUFURV9F UlJPUgkJCSAxNDEKKysjZGVmaW5lIEZJUFNfUl9VTklOU1RBTlRJQVRFX1pFUk9JU0VfRVJST1IJ CSAxMzgKKysjZGVmaW5lIEZJUFNfUl9VTlNVUFBPUlRFRF9EUkJHX1RZUEUJCQkgMTM5CisrI2Rl ZmluZSBGSVBTX1JfVU5TVVBQT1JURURfUExBVEZPUk0JCQkgMTEzCisrCisrI2lmZGVmICBfX2Nw bHVzcGx1cworK30KKysjZW5kaWYKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0 YTMvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJl dGEzL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMS1i ZXRhMy9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYy5maXBzCTIwMTItMDItMjkgMTA6 MzM6MDIuNzk3Mjk0OTIzICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlw cy9maXBzX2htYWNfc2VsZnRlc3QuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5NzI5NDkyMyArMDEw MAorQEAgLTAsMCArMSwxMzcgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykg MjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAq 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 KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5j bHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5T U0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysjaW5jbHVkZSA8 b3BlbnNzbC9obWFjLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworK3R5cGVkZWYgc3RydWN0 IHsKKysJY29uc3QgRVZQX01EICooKmFsZykodm9pZCk7CisrCWNvbnN0IGNoYXIgKmtleSwgKml2 OworKwl1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV07CisrfSBITUFDX0tBVDsK KysKKytzdGF0aWMgY29uc3QgSE1BQ19LQVQgdmVjdG9yW10gPSB7CisrICAgIHsJRVZQX3NoYTEs CisrCS8qIGZyb20gaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL2ZpcHMvZmlwczE5 OC9maXBzLTE5OGEucGRmICovCisrCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCisrCSJTYW1wbGUg IzIiLAorKwl7IDB4MDksMHgyMiwweGQzLDB4NDAsMHg1ZiwweGFhLDB4M2QsMHgxOSwKKysJICAw eDRmLDB4ODIsMHhhNCwweDU4LDB4MzAsMHg3MywweDdkLDB4NWMsCisrCSAgMHhjNiwweGM3LDB4 NWQsMHgyNCB9CisrICAgIH0sCisrICAgIHsJRVZQX3NoYTIyNCwKKysJLyoganVzdCBrZWVwIGV4 dGVuZGluZyB0aGUgYWJvdmUuLi4gKi8KKysJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysJIlNh bXBsZSAjMiIsCisrCXsgMHhkZCwweGVmLDB4MGEsMHg0MCwweGNiLDB4N2QsMHg1MCwweGZiLAor KwkgIDB4NmUsMHhlNiwweGNlLDB4YTEsMHgyMCwweGJhLDB4MjYsMHhhYSwKKysJICAweDA4LDB4 ZjMsMHgwNywweDc1LDB4ODcsMHhiOCwweGFkLDB4MWIsCisrCSAgMHg4YywweDhkLDB4MTIsMHhj NyB9CisrICAgIH0sCisrICAgIHsJRVZQX3NoYTI1NiwKKysJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJD IiwKKysJIlNhbXBsZSAjMiIsCisrCXsgMHhiOCwweGYyLDB4MGQsMHhiNSwweDQxLDB4ZWEsMHg0 MywweDA5LAorKwkgIDB4Y2EsMHg0ZSwweGE5LDB4MzgsMHgwYywweGQwLDB4ZTgsMHgzNCwKKysJ ICAweGY3LDB4MWYsMHhiZSwweDkxLDB4NzQsMHhhMiwweDYxLDB4MzgsCisrCSAgMHgwZCwweGMx LDB4N2UsMHhhZSwweDZhLDB4MzQsMHg1MSwweGQ5IH0KKysgICAgfSwKKysgICAgewlFVlBfc2hh Mzg0LAorKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAorKwkiU2FtcGxlICMyIiwKKysJeyAweDA4 LDB4YmMsMHhiMCwweGRhLDB4NDksMHgxZSwweDg3LDB4YWQsCisrCSAgMHg5YSwweDFkLDB4NmEs MHhjZSwweDIzLDB4YzUsMHgwYiwweGY2LAorKwkgIDB4YjcsMHgxOCwweDA2LDB4YTUsMHg3Nyww eGNkLDB4NDksMHgwNCwKKysJICAweDg5LDB4ZjEsMHhlNiwweDIzLDB4NDQsMHg1MSwweDUxLDB4 OWYsCisrCSAgMHg4NSwweDU2LDB4ODAsMHg3OSwweDBjLDB4YmQsMHg0ZCwweDUwLAorKwkgIDB4 YTQsMHg1ZiwweDI5LDB4ZTMsMHg5MywweGYwLDB4ZTgsMHg3ZiB9CisrICAgIH0sCisrICAgIHsJ RVZQX3NoYTUxMiwKKysJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysJIlNhbXBsZSAjMiIsCisr CXsgMHg4MCwweDlkLDB4NDQsMHgwNSwweDdjLDB4NWIsMHg5NSwweDQxLAorKwkgIDB4MDUsMHhi ZCwweDA0LDB4MTMsMHgxNiwweGRiLDB4MGYsMHhhYywKKysJICAweDQ0LDB4ZDUsMHhhNCwweGQ1 LDB4ZDAsMHg4OSwweDJiLDB4ZDAsCisrCSAgMHg0ZSwweDg2LDB4NjQsMHgxMiwweGMwLDB4OTAs MHg3NywweDY4LAorKwkgIDB4ZjEsMHg4NywweGI3LDB4N2MsMHg0ZiwweGFlLDB4MmMsMHgyZiwK KysJICAweDIxLDB4YTUsMHhiNSwweDY1LDB4OWEsMHg0ZiwweDRiLDB4YTcsCisrCSAgMHg0Nyww eDAyLDB4YTMsMHhkZSwweDliLDB4NTEsMHhmMSwweDQ1LAorKwkgIDB4YmQsMHg0ZiwweDI1LDB4 MjcsMHg0MiwweDk4LDB4OTksMHgwNSB9CisrICAgIH0sCisrfTsKKysKKytpbnQgRklQU19zZWxm dGVzdF9obWFjKCkKKysgICAgeworKyAgICBpbnQgbjsKKysgICAgdW5zaWduZWQgaW50ICAgIG91 dGxlbjsKKysgICAgdW5zaWduZWQgY2hhciAgIG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICBj b25zdCBFVlBfTUQgICAqbWQ7CisrICAgIGNvbnN0IEhNQUNfS0FUICp0OworKworKyAgICBmb3Io bj0wLHQ9dmVjdG9yOyBuPHNpemVvZih2ZWN0b3IpL3NpemVvZih2ZWN0b3JbMF0pOyBuKyssdCsr KQorKwl7CisrCW1kID0gKCp0LT5hbGcpKCk7CisrCUhNQUMobWQsdC0+a2V5LHN0cmxlbih0LT5r ZXkpLAorKwkJKGNvbnN0IHVuc2lnbmVkIGNoYXIgKil0LT5pdixzdHJsZW4odC0+aXYpLAorKwkJ b3V0LCZvdXRsZW4pOworKworKwlpZihtZW1jbXAob3V0LHQtPmthdmFsLG91dGxlbikpCisrCSAg ICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0hNQUMsRklQU19SX1NFTEZU RVNUX0ZBSUxFRCk7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJfQorKyAgICByZXR1cm4g MTsKKysgICAgfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8v Zmlwcy9maXBzX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlw c19sb2NsLmgKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfbG9jbC5o LmZpcHMJMjAxMi0wMi0yOSAxMDozMzowMi43OTcyOTQ5MjMgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfbG9jbC5oCTIwMTItMDItMjkgMTA6MzM6MDIuNzk3 Mjk0OTIzICswMTAwCitAQCAtMCwwICsxLDcxIEBACisrLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5 cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu CisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisr ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisr ICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4g KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNT TCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAq ICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9y Zy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93 bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisr ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICov CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKytleHRl cm4gIkMiIHsKKysjZW5kaWYKKysKKysjZGVmaW5lIEZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkUJ MzIKKysjZGVmaW5lIGZpcHNfbG9hZF9rZXlfY29tcG9uZW50KGtleSwgY29tcCwgcHJlKSBcCisr CWtleS0+Y29tcCA9IEJOX2JpbjJibihwcmUjI18jI2NvbXAsIHNpemVvZihwcmUjI18jI2NvbXAp LCBrZXktPmNvbXApOyBcCisrCWlmICgha2V5LT5jb21wKSBcCisrCQlnb3RvIGVycgorKworKyNk ZWZpbmUgZmlwc19wb3N0X3N0YXJ0ZWQoaWQsIHN1YmlkLCBleCkgMQorKyNkZWZpbmUgZmlwc19w b3N0X3N1Y2Nlc3MoaWQsIHN1YmlkLCBleCkgMQorKyNkZWZpbmUgZmlwc19wb3N0X2ZhaWxlZChp ZCwgc3ViaWQsIGV4KSAxCisrI2RlZmluZSBmaXBzX3Bvc3RfY29ycnVwdChpZCwgc3ViaWQsIGV4 KSAxCisrI2RlZmluZSBmaXBzX3Bvc3Rfc3RhdHVzKCkgMQorKworKyNpZmRlZiAgX19jcGx1c3Bs dXMKKyt9CisrI2VuZGlmCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2Ny eXB0by9maXBzL2ZpcHNfbWQuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMv Zmlwc19tZC5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX21kLmMu ZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5NzI5NDkyMyArMDEwMAorKysrIG9wZW5zc2wtMS4w LjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19tZC5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzk3Mjk0 OTIzICswMTAwCitAQCAtMCwwICsxLDE0NSBAQAorKy8qIGZpcHMvZXZwL2ZpcHNfbWQuYyAqLwor Ky8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29t KQorKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBUaGlzIHBhY2thZ2UgaXMgYW4g U1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKysgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRz b2Z0LmNvbSkuCisrICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNv bmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorKyAqIAorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl IGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworKyAqIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucworKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9u LCBiZSBpdCB0aGUgUkM0LCBSU0EsCisrICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1 c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisrICogaW5jbHVkZWQgd2l0 aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJt cworKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29m dC5jb20pLgorKyAqIAorKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFz IHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisrICogdGhlIGNvZGUgYXJlIG5vdCB0byBi ZSByZW1vdmVkLgorKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJp YyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKysgKiBhcyB0aGUgYXV0aG9yIG9m IHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBm b3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorKyAqIGluIGRv Y3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdl LgorKyAqIAorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisrICog ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl IGRpc3RyaWJ1dGlvbi4KKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKysgKiAgICBtdXN0IGRpc3BsYXkg dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKysgKiAgICAgRXJpYyBZb3Vu ZyAoZWF5QGNyeXB0c29mdC5jb20pIgorKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBj YW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorKyAqICAgIGJl aW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorKyAqIDQuIElmIHlv dSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVy ZW9mKSBmcm9tIAorKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkg eW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQu Y29tKSIKKysgKiAKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcg YGBBUyBJUycnIEFORAorKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisr ICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUKKysgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorKyAqIERBTUFHRVMgKElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTCisrICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKysgKiBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ TiBBTlkgV0FZCisrICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorKyAqIFNVQ0ggREFNQUdFLgorKyAqIAorKyAq IFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2 YWlsYWJsZSB2ZXJzaW9uIG9yCisrICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJl IGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisrICogY29waWVkIGFu ZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorKyAqIFtpbmNsdWRpbmcg dGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5 cmlnaHQgKGMpIDE5OTgtMjAwMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6Cisr ICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJP cGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRv CisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0 dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5z c2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg bWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBw ZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Np b24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBv ZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBh Y2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBB TlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMg Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAq IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKysgKgorKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGlj IHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSku ICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRz b24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKgorKyAqLworKworKy8qIE1pbmltYWwgc3RhbmRh bG9uZSBGSVBTIHZlcnNpb25zIG9mIERpZ2VzdCBvcGVyYXRpb25zICovCisrCisrI2RlZmluZSBP UEVOU1NMX0ZJUFNBUEkKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RyaW5n Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2 cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KKysKKytjb25zdCBFVlBfTUQgKkZJUFNfZ2V0X2RpZ2VzdGJ5bmlkKGludCBuaWQpCisrCXsK KysJc3dpdGNoIChuaWQpCisrCQl7CisrCQljYXNlIE5JRF9zaGExOgorKwkJcmV0dXJuIEVWUF9z aGExKCk7CisrCisrCQljYXNlIE5JRF9zaGEyMjQ6CisrCQlyZXR1cm4gRVZQX3NoYTIyNCgpOwor KworKwkJY2FzZSBOSURfc2hhMjU2OgorKwkJcmV0dXJuIEVWUF9zaGEyNTYoKTsKKysKKysJCWNh c2UgTklEX3NoYTM4NDoKKysJCXJldHVybiBFVlBfc2hhMzg0KCk7CisrCisrCQljYXNlIE5JRF9z aGE1MTI6CisrCQlyZXR1cm4gRVZQX3NoYTUxMigpOworKworKwkJZGVmYXVsdDoKKysJCXJldHVy biBOVUxMOworKwkJfQorKwl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9m aXBzL2ZpcHNfcG9zdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBz X3Bvc3QuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMu ZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5NzI5NDkyMyArMDEwMAorKysrIG9wZW5zc2wtMS4w LjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMJMjAxMi0wMi0yOSAxMDozMzowMi43OTcy OTQ5MjMgKzAxMDAKK0BAIC0wLDAgKzEsMjA1IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5 cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu CisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisr ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisr ICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4g KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNT TCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAq ICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9y Zy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93 bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisr ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICov CisrCisrI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlw dG8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlw c19yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv YmlvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3Jz YS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysj aW5jbHVkZSA8bGltaXRzLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKy8qIFBvd2Vy IG9uIHNlbGYgdGVzdCAoUE9TVCkgc3VwcG9ydCBmdW5jdGlvbnMgKi8KKysKKysjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKworKy8qIFJ1biBhbGwg c2VsZnRlc3RzICovCisraW50IEZJUFNfc2VsZnRlc3Qodm9pZCkKKysJeworKwlpbnQgcnYgPSAx OworKwlpZiAoIUZJUFNfc2VsZnRlc3RfZHJiZygpKQorKwkJcnYgPSAwOworKwlpZiAoIUZJUFNf c2VsZnRlc3RfeDkzMSgpKQorKwkJcnYgPSAwOworKyAgICAJaWYgKCFGSVBTX3NlbGZ0ZXN0X3No YTEoKSkKKysJCXJ2ID0gMDsKKysgICAgCWlmICghRklQU19zZWxmdGVzdF9zaGEyKCkpCisrCQly diA9IDA7CisrCWlmICghRklQU19zZWxmdGVzdF9obWFjKCkpCisrCQlydiA9IDA7CisrCWlmICgh RklQU19zZWxmdGVzdF9jbWFjKCkpCisrCQlydiA9IDA7CisrCWlmICghRklQU19zZWxmdGVzdF9h ZXMoKSkKKysJCXJ2ID0gMDsKKysJaWYgKCFGSVBTX3NlbGZ0ZXN0X2Flc19jY20oKSkKKysJCXJ2 ID0gMDsKKysJaWYgKCFGSVBTX3NlbGZ0ZXN0X2Flc19nY20oKSkKKysJCXJ2ID0gMDsKKysJaWYg KCFGSVBTX3NlbGZ0ZXN0X2Flc194dHMoKSkKKysJCXJ2ID0gMDsKKysJaWYgKCFGSVBTX3NlbGZ0 ZXN0X2RlcygpKQorKwkJcnYgPSAwOworKwlpZiAoIUZJUFNfc2VsZnRlc3RfcnNhKCkpCisrCQly diA9IDA7CisrCWlmICghRklQU19zZWxmdGVzdF9kc2EoKSkKKysJCXJ2ID0gMDsKKysJcmV0dXJu IHJ2OworKwl9CisrCisrLyogR2VuZXJhbGl6ZWQgcHVibGljIGtleSB0ZXN0IHJvdXRpbmUuIFNp Z25zIGFuZCB2ZXJpZmllcyB0aGUgZGF0YQorKyAqIHN1cHBsaWVkIGluIHRicyB1c2luZyBtZXNh Z2UgZGlnZXN0IG1kIGFuZCBzZXR0aW5nIG9wdGlvbiBkaWdlc3QKKysgKiBmbGFncyBtZF9mbGFn cy4gSWYgdGhlICdrYXQnIHBhcmFtZXRlciBpcyBub3QgTlVMTCBpdCB3aWxsCisrICogYWRkaXRp b25hbGx5IGNoZWNrIHRoZSBzaWduYXR1cmUgbWF0Y2hlcyBpdDogYSBrbm93biBhbnN3ZXIgdGVz dAorKyAqIFRoZSBzdHJpbmcgImZhaWxfc3RyIiBpcyB1c2VkIGZvciBpZGVudGlmaWNhdGlvbiBw dXJwb3NlcyBpbiBjYXNlCisrICogb2YgZmFpbHVyZS4gSWYgInBrZXkiIGlzIE5VTEwganVzdCBw ZXJmb3JtIGEgbWVzc2FnZSBkaWdlc3QgY2hlY2suCisrICovCisrCisraW50IGZpcHNfcGtleV9z aWduYXR1cmVfdGVzdChFVlBfUEtFWSAqcGtleSwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICp0 YnMsIGludCB0YnNsZW4sCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0LCB1bnNpZ25lZCBp bnQga2F0bGVuLAorKwkJCWNvbnN0IEVWUF9NRCAqZGlnZXN0LCB1bnNpZ25lZCBpbnQgbWRfZmxh Z3MsCisrCQkJY29uc3QgY2hhciAqZmFpbF9zdHIpCisrCXsJCisrCWludCByZXQgPSAwOworKwl1 bnNpZ25lZCBjaGFyIHNpZ3RtcFsyNTZdLCAqc2lnID0gc2lndG1wOworKwl1bnNpZ25lZCBpbnQg c2lnbGVuOworKwlFVlBfTURfQ1RYIG1jdHg7CisrCUVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Cisr CisrCWlmIChkaWdlc3QgPT0gTlVMTCkKKysJCWRpZ2VzdCA9IEVWUF9zaGEyNTYoKTsKKysKKysJ aWYgKChwa2V5LT50eXBlID09IEVWUF9QS0VZX1JTQSkKKysJCSYmIChSU0Ffc2l6ZShwa2V5LT5w a2V5LnJzYSkgPiBzaXplb2Yoc2lndG1wKSkpCisrCQl7CisrCQlzaWcgPSBPUEVOU1NMX21hbGxv YyhSU0Ffc2l6ZShwa2V5LT5wa2V5LnJzYSkpOworKwkJaWYgKCFzaWcpCisrCQkJeworKwkJCUZJ UFNlcnIoRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVCxFUlJfUl9NQUxMT0NfRkFJTFVS RSk7CisrCQkJcmV0dXJuIDA7CisrCQkJfQorKwkJfQorKworKwlpZiAodGJzbGVuID09IC0xKQor KwkJdGJzbGVuID0gc3RybGVuKChjaGFyICopdGJzKTsKKysKKysJaWYgKG1kX2ZsYWdzKQorKwkJ RVZQX01EX0NUWF9zZXRfZmxhZ3MoJm1jdHgsIG1kX2ZsYWdzKTsKKysKKysJaWYgKCFFVlBfU2ln bkluaXRfZXgoJm1jdHgsIGRpZ2VzdCwgTlVMTCkpCisrCQlnb3RvIGVycm9yOworKwlpZiAoIUVW UF9TaWduVXBkYXRlKCZtY3R4LCB0YnMsIHRic2xlbikpCisrCQlnb3RvIGVycm9yOworKwlpZiAo IUVWUF9TaWduRmluYWwoJm1jdHgsIHNpZywgJnNpZ2xlbiwgcGtleSkpCisrCQlnb3RvIGVycm9y OworKworKwlpZiAoa2F0ICYmICgoc2lnbGVuICE9IGthdGxlbikgfHwgbWVtY21wKGthdCwgc2ln LCBrYXRsZW4pKSkKKysJCWdvdG8gZXJyb3I7CisrCisrCWlmICghRVZQX1ZlcmlmeUluaXRfZXgo Jm1jdHgsIGRpZ2VzdCwgTlVMTCkpCisrCQlnb3RvIGVycm9yOworKwlpZiAoIUVWUF9WZXJpZnlV cGRhdGUoJm1jdHgsIHRicywgdGJzbGVuKSkKKysJCWdvdG8gZXJyb3I7CisrCXJldCA9IEVWUF9W ZXJpZnlGaW5hbCgmbWN0eCwgc2lnLCBzaWdsZW4sIHBrZXkpOworKworKwllcnJvcjoKKysJaWYg KHNpZyAhPSBzaWd0bXApCisrCQlPUEVOU1NMX2ZyZWUoc2lnKTsKKysJRVZQX01EX0NUWF9jbGVh bnVwKCZtY3R4KTsKKysJaWYgKHJldCAhPSAxKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQ U19QS0VZX1NJR05BVFVSRV9URVNULEZJUFNfUl9URVNUX0ZBSUxVUkUpOworKwkJaWYgKGZhaWxf c3RyKQorKwkJCUVSUl9hZGRfZXJyb3JfZGF0YSgyLCAiVHlwZT0iLCBmYWlsX3N0cik7CisrCQly ZXR1cm4gMDsKKysJCX0KKysJcmV0dXJuIDE7CisrCX0KKysKKysvKiBHZW5lcmFsaXplZCBzeW1t ZXRyaWMgY2lwaGVyIHRlc3Qgcm91dGluZS4gRW5jcnlwdCBkYXRhLCB2ZXJpZnkgcmVzdWx0Cisr ICogYWdhaW5zdCBrbm93biBhbnN3ZXIsIGRlY3J5cHQgYW5kIGNvbXBhcmUgd2l0aCBvcmlnaW5h bCBwbGFpbnRleHQuCisrICovCisrCisraW50IGZpcHNfY2lwaGVyX3Rlc3QoRVZQX0NJUEhFUl9D VFggKmN0eCwgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKmtleSwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICppdiwKKysJCQljb25zdCB1bnNpZ25l ZCBjaGFyICpwbGFpbnRleHQsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwK KysJCQlpbnQgbGVuKQorKwl7CisrCXVuc2lnbmVkIGNoYXIgcGx0bXBbRklQU19NQVhfQ0lQSEVS X1RFU1RfU0laRV07CisrCXVuc2lnbmVkIGNoYXIgY2l0bXBbRklQU19NQVhfQ0lQSEVSX1RFU1Rf U0laRV07CisrCisrCU9QRU5TU0xfYXNzZXJ0KGxlbiA8PSBGSVBTX01BWF9DSVBIRVJfVEVTVF9T SVpFKTsKKysJbWVtc2V0KHBsdG1wLCAwLCBGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFKTsKKysJ bWVtc2V0KGNpdG1wLCAwLCBGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFKTsKKysKKysJaWYgKEVW UF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBrZXksIGl2LCAxKSA8PSAwKQorKwkJ cmV0dXJuIDA7CisrCWlmIChFVlBfQ2lwaGVyKGN0eCwgY2l0bXAsIHBsYWludGV4dCwgbGVuKSA8 PSAwKQorKwkJcmV0dXJuIDA7CisrCWlmIChtZW1jbXAoY2l0bXAsIGNpcGhlcnRleHQsIGxlbikp CisrCQlyZXR1cm4gMDsKKysJaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxM LCBrZXksIGl2LCAwKSA8PSAwKQorKwkJcmV0dXJuIDA7CisrCWlmIChFVlBfQ2lwaGVyKGN0eCwg cGx0bXAsIGNpdG1wLCBsZW4pIDw9IDApCisrCQlyZXR1cm4gMDsKKysJaWYgKG1lbWNtcChwbHRt cCwgcGxhaW50ZXh0LCBsZW4pKQorKwkJcmV0dXJuIDA7CisrCXJldHVybiAxOworKwl9CisrI2Vu ZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5j LmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYworLS0tIG9w ZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMuZmlwcwkyMDEyLTAyLTI5 IDEwOjMzOjAyLjc5ODI5NDkzMSArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRv L2ZpcHMvZmlwc19yYW5kLmMJMjAxMi0wMi0yOSAxMDozMzowMi43OTgyOTQ5MzEgKzAxMDAKK0BA IC0wLDAgKzEsNDU3IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDcg 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 VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrLyoKKysgKiBU aGlzIGlzIGEgRklQUyBhcHByb3ZlZCBBRVMgUFJORyBiYXNlZCBvbiBBTlNJIFg5LjMxIEEuMi40 LgorKyAqLworKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlICJlX29zLmgi CisrCisrLyogSWYgd2UgZG9uJ3QgZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQsIHN0cnVj dCB0aW1ldmFsIHdvbid0CisrICAgYmUgZGVmaW5lZCBhbmQgZ2V0dGltZW9mZGF5KCkgd29uJ3Qg YmUgZGVjbGFyZWQgd2l0aCBzdHJpY3QgY29tcGlsZXJzCisrICAgbGlrZSBERUMgQyBpbiBBTlNJ IEMgbW9kZS4gICovCisrI2lmbmRlZiBfWE9QRU5fU09VUkNFX0VYVEVOREVECisrI2RlZmluZSBf WE9QRU5fU09VUkNFX0VYVEVOREVEIDEKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9y YW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2lmICEoZGVmaW5lZChPUEVO U1NMX1NZU19XSU4zMikgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktTKSkKKysjIGluY2x1 ZGUgPHN5cy90aW1lLmg+CisrI2VuZGlmCisrI2lmIGRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JL UykKKysjIGluY2x1ZGUgPHRpbWUuaD4KKysjZW5kaWYKKysjaW5jbHVkZSA8YXNzZXJ0Lmg+Cisr I2lmbmRlZiBPUEVOU1NMX1NZU19XSU4zMgorKyMgaWZkZWYgT1BFTlNTTF9VTklTVEQKKysjICBp bmNsdWRlIE9QRU5TU0xfVU5JU1RECisrIyBlbHNlCisrIyAgaW5jbHVkZSA8dW5pc3RkLmg+Cisr IyBlbmRpZgorKyNlbmRpZgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+CisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKworKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysKKyt2b2lkICpPUEVOU1NMX3N0ZGVycih2b2lkKTsKKysKKysjZGVmaW5lIEFFU19CTE9D S19MRU5HVEgJMTYKKysKKysKKysvKiBBRVMgRklQUyBQUk5HIGltcGxlbWVudGF0aW9uICovCisr CisrdHlwZWRlZiBzdHJ1Y3QgCisrCXsKKysJaW50IHNlZWRlZDsKKysJaW50IGtleWVkOworKwlp bnQgdGVzdF9tb2RlOworKwlpbnQgc2Vjb25kOworKwlpbnQgZXJyb3I7CisrCXVuc2lnbmVkIGxv bmcgY291bnRlcjsKKysJQUVTX0tFWSBrczsKKysJaW50IHZwb3M7CisrCS8qIFRlbXBvcmFyeSBz dG9yYWdlIGZvciBrZXkgaWYgaXQgZXF1YWxzIHNlZWQgbGVuZ3RoICovCisrCXVuc2lnbmVkIGNo YXIgdG1wX2tleVtBRVNfQkxPQ0tfTEVOR1RIXTsKKysJdW5zaWduZWQgY2hhciBWW0FFU19CTE9D S19MRU5HVEhdOworKwl1bnNpZ25lZCBjaGFyIERUW0FFU19CTE9DS19MRU5HVEhdOworKwl1bnNp Z25lZCBjaGFyIGxhc3RbQUVTX0JMT0NLX0xFTkdUSF07CisrCX0gRklQU19QUk5HX0NUWDsKKysK KytzdGF0aWMgRklQU19QUk5HX0NUWCBzY3R4OworKworK3N0YXRpYyBpbnQgZmlwc19wcm5nX2Zh aWwgPSAwOworKworK3ZvaWQgRklQU194OTMxX3N0aWNrKGludCBvbm9mZikKKysJeworKwlmaXBz X3BybmdfZmFpbCA9IG9ub2ZmOworKwl9CisrCisrdm9pZCBGSVBTX3JuZ19zdGljayh2b2lkKQor Kwl7CisrCUZJUFNfeDkzMV9zdGljaygxKTsKKysJfQorKworK3N0YXRpYyB2b2lkIGZpcHNfcmFu ZF9wcm5nX3Jlc2V0KEZJUFNfUFJOR19DVFggKmN0eCkKKysJeworKwljdHgtPnNlZWRlZCA9IDA7 CisrCWN0eC0+a2V5ZWQgPSAwOworKwljdHgtPnRlc3RfbW9kZSA9IDA7CisrCWN0eC0+Y291bnRl ciA9IDA7CisrCWN0eC0+c2Vjb25kID0gMDsKKysJY3R4LT5lcnJvciA9IDA7CisrCWN0eC0+dnBv cyA9IDA7CisrCU9QRU5TU0xfY2xlYW5zZShjdHgtPlYsIEFFU19CTE9DS19MRU5HVEgpOworKwlP UEVOU1NMX2NsZWFuc2UoJmN0eC0+a3MsIHNpemVvZihBRVNfS0VZKSk7CisrCX0KKysJCisrCisr c3RhdGljIGludCBmaXBzX3NldF9wcm5nX2tleShGSVBTX1BSTkdfQ1RYICpjdHgsCisrCQkJY29u c3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQorKwl7CisrCWlmIChG SVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19TRVRf UFJOR19LRVksIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJuIDA7CisrCQl9Cisr CWlmIChrZXlsZW4gIT0gMTYgJiYga2V5bGVuICE9IDI0ICYmIGtleWxlbiAhPSAzMikKKysJCXsK KysJCS8qIGVycm9yOiBpbnZhbGlkIGtleSBzaXplICovCisrCQlyZXR1cm4gMDsKKysJCX0KKysJ QUVTX3NldF9lbmNyeXB0X2tleShrZXksIGtleWxlbiA8PCAzLCAmY3R4LT5rcyk7CisrCWlmIChr ZXlsZW4gPT0gMTYpCisrCQl7CisrCQltZW1jcHkoY3R4LT50bXBfa2V5LCBrZXksIDE2KTsKKysJ CWN0eC0+a2V5ZWQgPSAyOworKwkJfQorKwllbHNlCisrCQljdHgtPmtleWVkID0gMTsKKysJY3R4 LT5zZWVkZWQgPSAwOworKwljdHgtPnNlY29uZCA9IDA7CisrCXJldHVybiAxOworKwl9CisrCisr c3RhdGljIGludCBmaXBzX3NldF9wcm5nX3NlZWQoRklQU19QUk5HX0NUWCAqY3R4LAorKwkJCWNv bnN0IHVuc2lnbmVkIGNoYXIgKnNlZWQsIHVuc2lnbmVkIGludCBzZWVkbGVuKQorKwl7CisrCXVu c2lnbmVkIGludCBpOworKwlpZiAoIWN0eC0+a2V5ZWQpCisrCQlyZXR1cm4gMDsKKysJLyogSW4g dGVzdCBtb2RlIHNlZWQgaXMganVzdCBzdXBwbGllZCBkYXRhICovCisrCWlmIChjdHgtPnRlc3Rf bW9kZSkKKysJCXsKKysJCWlmIChzZWVkbGVuICE9IEFFU19CTE9DS19MRU5HVEgpCisrCQkJcmV0 dXJuIDA7CisrCQltZW1jcHkoY3R4LT5WLCBzZWVkLCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysJCWN0 eC0+c2VlZGVkID0gMTsKKysJCXJldHVybiAxOworKwkJfQorKwkvKiBPdXRzaWRlIHRlc3QgbW9k ZSBYT1Igc3VwcGxpZWQgZGF0YSB3aXRoIGV4aXN0aW5nIHNlZWQgKi8KKysJZm9yIChpID0gMDsg aSA8IHNlZWRsZW47IGkrKykKKysJCXsKKysJCWN0eC0+VltjdHgtPnZwb3MrK10gXj0gc2VlZFtp XTsKKysJCWlmIChjdHgtPnZwb3MgPT0gQUVTX0JMT0NLX0xFTkdUSCkKKysJCQl7CisrCQkJY3R4 LT52cG9zID0gMDsKKysJCQkvKiBTcGVjaWFsIGNhc2UgaWYgZmlyc3Qgc2VlZCBhbmQga2V5IGxl bmd0aCBlcXVhbHMKKysgCQkJICogYmxvY2sgc2l6ZSBjaGVjayBrZXkgYW5kIHNlZWQgZG8gbm90 IG1hdGNoLgorKyAJCQkgKi8gCisrCQkJaWYgKGN0eC0+a2V5ZWQgPT0gMikKKysJCQkJeworKwkJ CQlpZiAoIW1lbWNtcChjdHgtPnRtcF9rZXksIGN0eC0+ViwgMTYpKQorKwkJCQkJeworKwkJCQkJ UkFORGVycihSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVELAorKwkJCQkJCVJBTkRfUl9QUk5HX1NF RURfTVVTVF9OT1RfTUFUQ0hfS0VZKTsKKysJCQkJCXJldHVybiAwOworKwkJCQkJfQorKwkJCQlP UEVOU1NMX2NsZWFuc2UoY3R4LT50bXBfa2V5LCAxNik7CisrCQkJCWN0eC0+a2V5ZWQgPSAxOwor KwkJCQl9CisrCQkJY3R4LT5zZWVkZWQgPSAxOworKwkJCX0KKysJCX0KKysJcmV0dXJuIDE7Cisr CX0KKysKKytzdGF0aWMgaW50IGZpcHNfc2V0X3Rlc3RfbW9kZShGSVBTX1BSTkdfQ1RYICpjdHgp CisrCXsKKysJaWYgKGN0eC0+a2V5ZWQpCisrCQl7CisrCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1NF VF9URVNUX01PREUsUkFORF9SX1BSTkdfS0VZRUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWN0 eC0+dGVzdF9tb2RlID0gMTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytpbnQgRklQU194OTMxX3Rl c3RfbW9kZSh2b2lkKQorKwl7CisrCXJldHVybiBmaXBzX3NldF90ZXN0X21vZGUoJnNjdHgpOwor Kwl9CisrCisraW50IEZJUFNfcmFuZF90ZXN0X21vZGUodm9pZCkKKysJeworKwlyZXR1cm4gZmlw c19zZXRfdGVzdF9tb2RlKCZzY3R4KTsKKysJfQorKworKworK2ludCBGSVBTX3g5MzFfc2V0X2R0 KHVuc2lnbmVkIGNoYXIgKmR0KQorKwl7CisrCWlmICghc2N0eC50ZXN0X21vZGUpCisrCQl7Cisr CQlSQU5EZXJyKFJBTkRfRl9GSVBTX1g5MzFfU0VUX0RULFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RF KTsKKysJCXJldHVybiAwOworKwkJfQorKwltZW1jcHkoc2N0eC5EVCwgZHQsIEFFU19CTE9DS19M RU5HVEgpOworKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBGSVBTX3JhbmRfc2V0X2R0KHVuc2ln bmVkIGNoYXIgKmR0KQorKwl7CisrCWlmICghc2N0eC50ZXN0X21vZGUpCisrCQl7CisrCQlSQU5E ZXJyKFJBTkRfRl9GSVBTX1JBTkRfU0VUX0RULFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFKTsKKysJ CXJldHVybiAwOworKwkJfQorKwltZW1jcHkoc2N0eC5EVCwgZHQsIEFFU19CTE9DS19MRU5HVEgp OworKwlyZXR1cm4gMTsKKysJfQorKworK3ZvaWQgRklQU19nZXRfdGltZXZlYyh1bnNpZ25lZCBj aGFyICpidWYsIHVuc2lnbmVkIGxvbmcgKnBjdHIpCisrCXsKKysjaWZkZWYgT1BFTlNTTF9TWVNf V0lOMzIKKysJRklMRVRJTUUgZnQ7CisrI2VsaWYgZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktT KQorKyAgICAgICAgc3RydWN0IHRpbWVzcGVjIHRzOworKyNlbHNlCisrCXN0cnVjdCB0aW1ldmFs IHR2OworKyNlbmRpZgorKworKyNpZm5kZWYgR0VUUElEX0lTX01FQU5JTkdMRVNTCisrCXVuc2ln bmVkIGxvbmcgcGlkOworKyNlbmRpZgorKworKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgorKwlH ZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgmZnQpOworKwlidWZbMF0gPSAodW5zaWduZWQgY2hhcikg KGZ0LmR3SGlnaERhdGVUaW1lICYgMHhmZik7CisrCWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAo KGZ0LmR3SGlnaERhdGVUaW1lID4+IDgpICYgMHhmZik7CisrCWJ1ZlsyXSA9ICh1bnNpZ25lZCBj aGFyKSAoKGZ0LmR3SGlnaERhdGVUaW1lID4+IDE2KSAmIDB4ZmYpOworKwlidWZbM10gPSAodW5z aWduZWQgY2hhcikgKChmdC5kd0hpZ2hEYXRlVGltZSA+PiAyNCkgJiAweGZmKTsKKysJYnVmWzRd ID0gKHVuc2lnbmVkIGNoYXIpIChmdC5kd0xvd0RhdGVUaW1lICYgMHhmZik7CisrCWJ1Zls1XSA9 ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3TG93RGF0ZVRpbWUgPj4gOCkgJiAweGZmKTsKKysJYnVm WzZdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dEYXRlVGltZSA+PiAxNikgJiAweGZmKTsK KysJYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dEYXRlVGltZSA+PiAyNCkgJiAw eGZmKTsKKysjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpCisrCWNsb2NrX2dldHRp bWUoQ0xPQ0tfUkVBTFRJTUUsICZ0cyk7CisrCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAodHMu dHZfc2VjICYgMHhmZik7CisrCWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHRzLnR2X3NlYyA+ PiA4KSAmIDB4ZmYpOworKwlidWZbMl0gPSAodW5zaWduZWQgY2hhcikgKCh0cy50dl9zZWMgPj4g MTYpICYgMHhmZik7CisrCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHRzLnR2X3NlYyA+PiAy NCkgJiAweGZmKTsKKysJYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpICh0cy50dl9uc2VjICYgMHhm Zik7CisrCWJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHRzLnR2X25zZWMgPj4gOCkgJiAweGZm KTsKKysJYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfbnNlYyA+PiAxNikgJiAweGZm KTsKKysJYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfbnNlYyA+PiAyNCkgJiAweGZm KTsKKysjZWxzZQorKwlnZXR0aW1lb2ZkYXkoJnR2LE5VTEwpOworKwlidWZbMF0gPSAodW5zaWdu ZWQgY2hhcikgKHR2LnR2X3NlYyAmIDB4ZmYpOworKwlidWZbMV0gPSAodW5zaWduZWQgY2hhcikg KCh0di50dl9zZWMgPj4gOCkgJiAweGZmKTsKKysJYnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpICgo dHYudHZfc2VjID4+IDE2KSAmIDB4ZmYpOworKwlidWZbM10gPSAodW5zaWduZWQgY2hhcikgKCh0 di50dl9zZWMgPj4gMjQpICYgMHhmZik7CisrCWJ1Zls0XSA9ICh1bnNpZ25lZCBjaGFyKSAodHYu dHZfdXNlYyAmIDB4ZmYpOworKwlidWZbNV0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl91c2Vj ID4+IDgpICYgMHhmZik7CisrCWJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMg Pj4gMTYpICYgMHhmZik7CisrCWJ1Zls3XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMg Pj4gMjQpICYgMHhmZik7CisrI2VuZGlmCisrCWJ1Zls4XSA9ICh1bnNpZ25lZCBjaGFyKSAoKnBj dHIgJiAweGZmKTsKKysJYnVmWzldID0gKHVuc2lnbmVkIGNoYXIpICgoKnBjdHIgPj4gOCkgJiAw eGZmKTsKKysJYnVmWzEwXSA9ICh1bnNpZ25lZCBjaGFyKSAoKCpwY3RyID4+IDE2KSAmIDB4ZmYp OworKwlidWZbMTFdID0gKHVuc2lnbmVkIGNoYXIpICgoKnBjdHIgPj4gMjQpICYgMHhmZik7Cisr CisrCSgqcGN0cikrKzsKKysKKysKKysjaWZuZGVmIEdFVFBJRF9JU19NRUFOSU5HTEVTUworKwlw aWQ9KHVuc2lnbmVkIGxvbmcpZ2V0cGlkKCk7CisrCWJ1ZlsxMl0gPSAodW5zaWduZWQgY2hhcikg KHBpZCAmIDB4ZmYpOworKwlidWZbMTNdID0gKHVuc2lnbmVkIGNoYXIpICgocGlkID4+IDgpICYg MHhmZik7CisrCWJ1ZlsxNF0gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4gMTYpICYgMHhmZik7 CisrCWJ1ZlsxNV0gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4gMjQpICYgMHhmZik7CisrI2Vu ZGlmCisrICAgIH0KKysKKytzdGF0aWMgaW50IGZpcHNfcmFuZChGSVBTX1BSTkdfQ1RYICpjdHgs CisrCQkJdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBpbnQgb3V0bGVuKQorKwl7CisrCXVu c2lnbmVkIGNoYXIgUltBRVNfQkxPQ0tfTEVOR1RIXSwgSVtBRVNfQkxPQ0tfTEVOR1RIXTsKKysJ dW5zaWduZWQgY2hhciB0bXBbQUVTX0JMT0NLX0xFTkdUSF07CisrCWludCBpOworKwlpZiAoY3R4 LT5lcnJvcikKKysJCXsKKysJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19F UlJPUik7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKCFjdHgtPmtleWVkKQorKwkJeworKwkJ UkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9OT19LRVlfU0VUKTsKKysJCXJldHVybiAw OworKwkJfQorKwlpZiAoIWN0eC0+c2VlZGVkKQorKwkJeworKwkJUkFORGVycihSQU5EX0ZfRklQ U19SQU5ELFJBTkRfUl9QUk5HX05PVF9TRUVERUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWZv ciAoOzspCisrCQl7CisrCQlpZiAoIWN0eC0+dGVzdF9tb2RlKQorKwkJCUZJUFNfZ2V0X3RpbWV2 ZWMoY3R4LT5EVCwgJmN0eC0+Y291bnRlcik7CisrCQlBRVNfZW5jcnlwdChjdHgtPkRULCBJLCAm Y3R4LT5rcyk7CisrCQlmb3IgKGkgPSAwOyBpIDwgQUVTX0JMT0NLX0xFTkdUSDsgaSsrKQorKwkJ CXRtcFtpXSA9IElbaV0gXiBjdHgtPlZbaV07CisrCQlBRVNfZW5jcnlwdCh0bXAsIFIsICZjdHgt PmtzKTsKKysJCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfTEVOR1RIOyBpKyspCisrCQkJdG1w W2ldID0gUltpXSBeIElbaV07CisrCQlBRVNfZW5jcnlwdCh0bXAsIGN0eC0+ViwgJmN0eC0+a3Mp OworKwkJLyogQ29udGludW91cyBQUk5HIHRlc3QgKi8KKysJCWlmIChjdHgtPnNlY29uZCkKKysJ CQl7CisrCQkJaWYgKGZpcHNfcHJuZ19mYWlsKQorKwkJCQltZW1jcHkoY3R4LT5sYXN0LCBSLCBB RVNfQkxPQ0tfTEVOR1RIKTsKKysJCQlpZiAoIW1lbWNtcChSLCBjdHgtPmxhc3QsIEFFU19CTE9D S19MRU5HVEgpKQorKwkJCQl7CisrCSAgICAJCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFO RF9SX1BSTkdfU1RVQ0spOworKwkJCQljdHgtPmVycm9yID0gMTsKKysJCQkJZmlwc19zZXRfc2Vs ZnRlc3RfZmFpbCgpOworKwkJCQlyZXR1cm4gMDsKKysJCQkJfQorKwkJCX0KKysJCW1lbWNweShj dHgtPmxhc3QsIFIsIEFFU19CTE9DS19MRU5HVEgpOworKwkJaWYgKCFjdHgtPnNlY29uZCkKKysJ CQl7CisrCQkJY3R4LT5zZWNvbmQgPSAxOworKwkJCWlmICghY3R4LT50ZXN0X21vZGUpCisrCQkJ CWNvbnRpbnVlOworKwkJCX0KKysKKysJCWlmIChvdXRsZW4gPD0gQUVTX0JMT0NLX0xFTkdUSCkK KysJCQl7CisrCQkJbWVtY3B5KG91dCwgUiwgb3V0bGVuKTsKKysJCQlicmVhazsKKysJCQl9Cisr CisrCQltZW1jcHkob3V0LCBSLCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysJCW91dCArPSBBRVNfQkxP Q0tfTEVOR1RIOworKwkJb3V0bGVuIC09IEFFU19CTE9DS19MRU5HVEg7CisrCQl9CisrCXJldHVy biAxOworKwl9CisrCisrCisraW50IEZJUFNfeDkzMV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNo YXIgKmtleSwgaW50IGtleWxlbikKKysJeworKwlpbnQgcmV0OworKwlDUllQVE9fd19sb2NrKENS WVBUT19MT0NLX1JBTkQpOworKwlyZXQgPSBmaXBzX3NldF9wcm5nX2tleSgmc2N0eCwga2V5LCBr ZXlsZW4pOworKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldHVybiBy ZXQ7CisrCX0KKysKKytpbnQgRklQU19yYW5kX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAq a2V5LCBGSVBTX1JBTkRfU0laRV9UIGtleWxlbikKKysJeworKwlyZXR1cm4gRklQU194OTMxX3Nl dF9rZXkoa2V5LCBrZXlsZW4pOworKwl9CisrCisraW50IEZJUFNfeDkzMV9zZWVkKGNvbnN0IHZv aWQgKnNlZWQsIGludCBzZWVkbGVuKQorKwl7CisrCWludCByZXQ7CisrCUNSWVBUT193X2xvY2so Q1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldCA9IGZpcHNfc2V0X3Bybmdfc2VlZCgmc2N0eCwgc2Vl ZCwgc2VlZGxlbik7CisrCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0 dXJuIHJldDsKKysJfQorKworKworK2ludCBGSVBTX3g5MzFfYnl0ZXModW5zaWduZWQgY2hhciAq b3V0LCBpbnQgY291bnQpCisrCXsKKysJaW50IHJldDsKKysJQ1JZUFRPX3dfbG9jayhDUllQVE9f TE9DS19SQU5EKTsKKysJcmV0ID0gZmlwc19yYW5kKCZzY3R4LCBvdXQsIGNvdW50KTsKKysJQ1JZ UFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXR1cm4gcmV0OworKwl9CisrCisr aW50IEZJUFNfeDkzMV9zdGF0dXModm9pZCkKKysJeworKwlpbnQgcmV0OworKwlDUllQVE9fcl9s b2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXQgPSBzY3R4LnNlZWRlZDsKKysJQ1JZUFRPX3Jf dW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXR1cm4gcmV0OworKwl9CisrCisrdm9pZCBG SVBTX3g5MzFfcmVzZXQodm9pZCkKKysJeworKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JB TkQpOworKwlmaXBzX3JhbmRfcHJuZ19yZXNldCgmc2N0eCk7CisrCUNSWVBUT193X3VubG9jayhD UllQVE9fTE9DS19SQU5EKTsKKysJfQorKworK3N0YXRpYyBpbnQgZmlwc19kb19yYW5kX3NlZWQo Y29uc3Qgdm9pZCAqc2VlZCwgaW50IHNlZWRsZW4pCisrCXsKKysJRklQU194OTMxX3NlZWQoc2Vl ZCwgc2VlZGxlbik7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGludCBmaXBzX2RvX3Jh bmRfYWRkKGNvbnN0IHZvaWQgKnNlZWQsIGludCBzZWVkbGVuLAorKwkJCQkJZG91YmxlIGFkZF9l bnRyb3B5KQorKwl7CisrCUZJUFNfeDkzMV9zZWVkKHNlZWQsIHNlZWRsZW4pOworKwlyZXR1cm4g MTsKKysJfQorKworK3N0YXRpYyBjb25zdCBSQU5EX01FVEhPRCByYW5kX3g5MzFfbWV0aD0KKysg ICAgeworKyAgICBmaXBzX2RvX3JhbmRfc2VlZCwKKysgICAgRklQU194OTMxX2J5dGVzLAorKyAg ICBGSVBTX3g5MzFfcmVzZXQsCisrICAgIGZpcHNfZG9fcmFuZF9hZGQsCisrICAgIEZJUFNfeDkz MV9ieXRlcywKKysgICAgRklQU194OTMxX3N0YXR1cworKyAgICB9OworKworK2NvbnN0IFJBTkRf TUVUSE9EICpGSVBTX3g5MzFfbWV0aG9kKHZvaWQpCisreworKyAgcmV0dXJuICZyYW5kX3g5MzFf bWV0aDsKKyt9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0 by9maXBzL2ZpcHNfcmFuZC5oLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9m aXBzX3JhbmQuaAorLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19yYW5k LmguZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5ODI5NDkzMSArMDEwMAorKysrIG9wZW5zc2wt MS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmgJMjAxMi0wMi0yOSAxMDozMzowMi43 OTgyOTQ5MzEgKzAxMDAKK0BAIC0wLDAgKzEsMTQ1IEBACisrLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBD b3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAq CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz CisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwor KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3Ns Lm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1h eSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVh ciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9u IG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2Yg YW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNr bm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5Z CisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBB UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisr ICovCisrCisrI2lmbmRlZiBIRUFERVJfRklQU19SQU5EX0gKKysjZGVmaW5lIEhFQURFUl9GSVBT X1JBTkRfSAorKworKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9y YW5kLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKyNpZmRlZiAgX19jcGx1c3BsdXMK KytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKytpbnQgRklQU194OTMxX3NldF9rZXkoY29uc3Qg dW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuKTsKKytpbnQgRklQU194OTMxX3NlZWQoY29u c3Qgdm9pZCAqYnVmLCBpbnQgbnVtKTsKKytpbnQgRklQU194OTMxX2J5dGVzKHVuc2lnbmVkIGNo YXIgKm91dCwgaW50IG91dGxlbik7CisrCisraW50IEZJUFNfeDkzMV90ZXN0X21vZGUodm9pZCk7 Cisrdm9pZCBGSVBTX3g5MzFfcmVzZXQodm9pZCk7CisraW50IEZJUFNfeDkzMV9zZXRfZHQodW5z aWduZWQgY2hhciAqZHQpOworKworK2ludCBGSVBTX3g5MzFfc3RhdHVzKHZvaWQpOworKworK2Nv bnN0IFJBTkRfTUVUSE9EICpGSVBTX3g5MzFfbWV0aG9kKHZvaWQpOworKworK3R5cGVkZWYgc3Ry dWN0IGRyYmdfY3R4X3N0IERSQkdfQ1RYOworKy8qIERSQkcgZXh0ZXJuYWwgZmxhZ3MgKi8KKysv KiBGbGFnIGZvciBDVFIgbW9kZSBvbmx5OiB1c2UgZGVyaXZhdGlvbiBmdW5jdGlvbiBjdHJfZGYg Ki8KKysjZGVmaW5lCURSQkdfRkxBR19DVFJfVVNFX0RGCQkweDEKKysvKiBQUk5HIGlzIGluIHRl c3Qgc3RhdGUgKi8KKysjZGVmaW5lCURSQkdfRkxBR19URVNUCQkJMHgyCisrCisrRFJCR19DVFgg KkZJUFNfZHJiZ19uZXcoaW50IHR5cGUsIHVuc2lnbmVkIGludCBmbGFncyk7CisraW50IEZJUFNf ZHJiZ19pbml0KERSQkdfQ1RYICpkY3R4LCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGZsYWdzKTsK KytpbnQgRklQU19kcmJnX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJCQljb25zdCB1 bnNpZ25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xlbik7CisraW50IEZJUFNfZHJiZ19yZXNl ZWQoRFJCR19DVFggKmRjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlu bGVuKTsKKytpbnQgRklQU19kcmJnX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBj aGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCisrCQkJaW50IHByZWRpY3Rpb25fcmVzaXN0YW5jZSwK KysJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbik7CisrCisraW50 IEZJUFNfZHJiZ191bmluc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4KTsKKyt2b2lkIEZJUFNfZHJi Z19mcmVlKERSQkdfQ1RYICpkY3R4KTsKKysKKytpbnQgRklQU19kcmJnX3NldF9jYWxsYmFja3Mo RFJCR19DVFggKmRjdHgsCisrCXNpemVfdCAoKmdldF9lbnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1 bnNpZ25lZCBjaGFyICoqcG91dCwKKysJCQkJaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBz aXplX3QgbWF4X2xlbiksCisrCXZvaWQgKCpjbGVhbnVwX2VudHJvcHkpKERSQkdfQ1RYICpjdHgs IHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pLAorKwlzaXplX3QgZW50cm9weV9ibG9j a2xlbiwKKysJc2l6ZV90ICgqZ2V0X25vbmNlKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFy ICoqcG91dCwKKysJCQkJaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xl biksCisrCXZvaWQgKCpjbGVhbnVwX25vbmNlKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFy ICpvdXQsIHNpemVfdCBvbGVuKSk7CisrCisraW50IEZJUFNfZHJiZ19zZXRfcmFuZF9jYWxsYmFj a3MoRFJCR19DVFggKmRjdHgsCisrCXNpemVfdCAoKmdldF9hZGluKShEUkJHX0NUWCAqY3R4LCB1 bnNpZ25lZCBjaGFyICoqcG91dCksCisrCXZvaWQgKCpjbGVhbnVwX2FkaW4pKERSQkdfQ1RYICpj dHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pLAorKwlpbnQgKCpyYW5kX3NlZWRf Y2IpKERSQkdfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSksCisrCWludCAoKnJh bmRfYWRkX2NiKShEUkJHX0NUWCAqY3R4LAorKwkJCQljb25zdCB2b2lkICpidWYsIGludCBudW0s IGRvdWJsZSBlbnRyb3B5KSk7CisrCisrdm9pZCAqRklQU19kcmJnX2dldF9hcHBfZGF0YShEUkJH X0NUWCAqY3R4KTsKKyt2b2lkIEZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoRFJCR19DVFggKmN0eCwg dm9pZCAqYXBwX2RhdGEpOworK3NpemVfdCBGSVBTX2RyYmdfZ2V0X2Jsb2NrbGVuZ3RoKERSQkdf Q1RYICpkY3R4KTsKKytpbnQgRklQU19kcmJnX2dldF9zdHJlbmd0aChEUkJHX0NUWCAqZGN0eCk7 Cisrdm9pZCBGSVBTX2RyYmdfc2V0X2NoZWNrX2ludGVydmFsKERSQkdfQ1RYICpkY3R4LCBpbnQg aW50ZXJ2YWwpOworK3ZvaWQgRklQU19kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwoRFJCR19DVFgg KmRjdHgsIGludCBpbnRlcnZhbCk7CisrCisraW50IEZJUFNfZHJiZ19oZWFsdGhfY2hlY2soRFJC R19DVFggKmRjdHgpOworKworK0RSQkdfQ1RYICpGSVBTX2dldF9kZWZhdWx0X2RyYmcodm9pZCk7 CisrY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfZHJiZ19tZXRob2Qodm9pZCk7CisrCisrCisraW50 IEZJUFNfcmFuZF9zZXRfbWV0aG9kKGNvbnN0IFJBTkRfTUVUSE9EICptZXRoKTsKKytjb25zdCBS QU5EX01FVEhPRCAqRklQU19yYW5kX2dldF9tZXRob2Qodm9pZCk7CisrCisrdm9pZCBGSVBTX3Jh bmRfc2V0X2JpdHMoaW50IG5iaXRzKTsKKysKKytpbnQgRklQU19yYW5kX3N0cmVuZ3RoKHZvaWQp OworKworKy8qIDEuMC4wIGNvbXBhdCBmdW5jdGlvbnMgKi8KKytpbnQgRklQU19yYW5kX3NldF9r ZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBGSVBTX1JBTkRfU0laRV9UIGtleWxlbik7Cisr aW50IEZJUFNfcmFuZF9zZWVkKGNvbnN0IHZvaWQgKmJ1ZiwgRklQU19SQU5EX1NJWkVfVCBudW0p OworK2ludCBGSVBTX3JhbmRfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBGSVBTX1JBTkRfU0la RV9UIG91dGxlbik7CisraW50IEZJUFNfcmFuZF90ZXN0X21vZGUodm9pZCk7Cisrdm9pZCBGSVBT X3JhbmRfcmVzZXQodm9pZCk7CisraW50IEZJUFNfcmFuZF9zZXRfZHQodW5zaWduZWQgY2hhciAq ZHQpOworK2ludCBGSVBTX3JhbmRfc3RhdHVzKHZvaWQpOworK2NvbnN0IFJBTkRfTUVUSE9EICpG SVBTX3JhbmRfbWV0aG9kKHZvaWQpOworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKyt9CisrI2Vu ZGlmCisrI2VuZGlmCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0 by9maXBzL2ZpcHNfcmFuZF9sY2wuaC5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2Zp cHMvZmlwc19yYW5kX2xjbC5oCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9m aXBzX3JhbmRfbGNsLmguZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5ODI5NDkzMSArMDEwMAor KysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xjbC5oCTIwMTIt MDItMjkgMTA6MzM6MDIuNzk4Mjk0OTMxICswMTAwCitAQCAtMCwwICsxLDIxOSBAQAorKy8qIGZp cHMvcmFuZC9maXBzX3JhbmRfbGNsLmggKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBI ZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0Lgor KyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK KysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRp c3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLyki CisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK KysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAg ICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3 cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisr ICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4g dGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5v cmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wg UFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK KysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5T U0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqLworKworK3R5cGVkZWYgc3Ry dWN0IGRyYmdfaGFzaF9jdHhfc3QgRFJCR19IQVNIX0NUWDsKKyt0eXBlZGVmIHN0cnVjdCBkcmJn X2htYWNfY3R4X3N0IERSQkdfSE1BQ19DVFg7CisrdHlwZWRlZiBzdHJ1Y3QgZHJiZ19jdHJfY3R4 X3N0IERSQkdfQ1RSX0NUWDsKKysKKysvKiA4ODggYml0cyBmcm9tIDEwLjEgdGFibGUgMiAqLwor KyNkZWZpbmUgSEFTSF9QUk5HX01BWF9TRUVETEVOCTExMQorKworK3N0cnVjdCBkcmJnX2hhc2hf Y3R4X3N0CisrCXsKKysJY29uc3QgRVZQX01EICptZDsKKysJRVZQX01EX0NUWCBtY3R4OworKwl1 bnNpZ25lZCBjaGFyIFZbSEFTSF9QUk5HX01BWF9TRUVETEVOXTsKKysJdW5zaWduZWQgY2hhciBD W0hBU0hfUFJOR19NQVhfU0VFRExFTl07CisrCS8qIFRlbXBvcmFyeSB2YWx1ZSBzdG9yYWdlOiBz aG91bGQgYWx3YXlzIGV4Y2VlZCBtYXggZGlnZXN0IGxlbmd0aCAqLworKwl1bnNpZ25lZCBjaGFy IHZ0bXBbSEFTSF9QUk5HX01BWF9TRUVETEVOXTsKKysJfTsKKysKKytzdHJ1Y3QgZHJiZ19obWFj X2N0eF9zdAorKwl7CisrCWNvbnN0IEVWUF9NRCAqbWQ7CisrCUhNQUNfQ1RYIGhjdHg7CisrCXVu c2lnbmVkIGNoYXIgS1tFVlBfTUFYX01EX1NJWkVdOworKwl1bnNpZ25lZCBjaGFyIFZbRVZQX01B WF9NRF9TSVpFXTsKKysJfTsKKysKKytzdHJ1Y3QgZHJiZ19jdHJfY3R4X3N0CisrCXsKKysJQUVT X0tFWSBrczsKKysJc2l6ZV90IGtleWxlbjsKKysJdW5zaWduZWQgY2hhciBLWzMyXTsKKysJdW5z aWduZWQgY2hhciBWWzE2XTsKKysJLyogVGVtcCB2YXJpYWJsZXMgdXNlZCBieSBkZXJpdmF0aW9u IGZ1bmN0aW9uICovCisrCUFFU19LRVkgZGZfa3M7CisrCUFFU19LRVkgZGZfa3hrczsKKysJLyog VGVtcG9yYXJ5IGJsb2NrIHN0b3JhZ2UgdXNlZCBieSBjdHJfZGYgKi8KKysJdW5zaWduZWQgY2hh ciBibHRtcFsxNl07CisrCXNpemVfdCBibHRtcF9wb3M7CisrCXVuc2lnbmVkIGNoYXIgS1hbNDhd OworKwl9OworKworKy8qIERSQkcgaW50ZXJuYWwgZmxhZ3MgKi8KKysKKysvKiBGdW5jdGlvbnMg c2hvdWxkbid0IGNhbGwgZXJyIGxpYnJhcnkgKi8KKysjZGVmaW5lCURSQkdfRkxBR19OT0VSUgkJ CTB4MQorKy8qIEN1c3RvbSByZXNlZWQgY2hlY2tpbmcgKi8KKysjZGVmaW5lCURSQkdfQ1VTVE9N X1JFU0VFRAkJMHgyCisrCisrLyogRFJCRyBzdGF0dXMgdmFsdWVzICovCisrLyogbm90IGluaXRp YWxpc2VkICovCisrI2RlZmluZSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VECTAKKysvKiBvayBh bmQgcmVhZHkgdG8gZ2VuZXJhdGUgcmFuZG9tIGJpdHMgKi8KKysjZGVmaW5lIERSQkdfU1RBVFVT X1JFQURZCQkxCisrLyogcmVzZWVkIHJlcXVpcmVkICovCisrI2RlZmluZSBEUkJHX1NUQVRVU19S RVNFRUQJCTIKKysvKiBmYXRhbCBlcnJvciBjb25kaXRpb24gKi8KKysjZGVmaW5lIERSQkdfU1RB VFVTX0VSUk9SCQkzCisrCisrLyogQSBkZWZhdWx0IG1heGltdW0gbGVuZ3RoOiBsYXJnZXIgdGhh biBhbnkgcmVhc29uYWJsZSB2YWx1ZSB1c2VkIGluIHByYXRpY2UgKi8KKysKKysjZGVmaW5lIERS QkdfTUFYX0xFTkdUSAkJCTB4N2ZmZmZmZjAKKysvKiBNYXhpbXVtIERSQkcgYmxvY2sgbGVuZ3Ro OiBhbGwgbWQgc2l6ZXMgYXJlIGJpZ2dlciB0aGFuIGNpcGhlciBibG9ja3Mgc2l6ZXMKKysgKiBz byB1c2UgbWF4IGRpZ2VzdCBsZW5ndGguCisrICovCisrI2RlZmluZSBEUkJHX01BWF9CTE9DSwkJ CUVWUF9NQVhfTURfU0laRQorKworKyNkZWZpbmUgRFJCR19IRUFMVEhfSU5URVJWQUwJCSgxIDw8 IDI0KQorKworKy8qIERSQkcgY29udGV4dCBzdHJ1Y3R1cmUgKi8KKysKKytzdHJ1Y3QgZHJiZ19j dHhfc3QKKysJeworKwkvKiBGaXJzdCB0eXBlcyBjb21tb24gdG8gYWxsIGltcGxlbWVudGF0aW9u cyAqLworKwkvKiBEUkJHIHR5cGU6IGEgTklEIGZvciB0aGUgdW5kZXJseWluZyBhbGdvcml0aG0g Ki8KKysJaW50IHR5cGU7CisrCS8qIFZhcmlvdXMgZXh0ZXJuYWwgZmxhZ3MgKi8KKysJdW5zaWdu ZWQgaW50IHhmbGFnczsKKysJLyogVmFyaW91cyBpbnRlcm5hbCB1c2Ugb25seSBmbGFncyAqLwor Kwl1bnNpZ25lZCBpbnQgaWZsYWdzOworKwkvKiBVc2VkIGZvciBwZXJpb2RpYyBoZWFsdGggY2hl Y2tzICovCisrCWludCBoZWFsdGhfY2hlY2tfY250LCBoZWFsdGhfY2hlY2tfaW50ZXJ2YWw7Cisr CisrCS8qIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgc2V0dXAgYnkgbWVjaGFuaXNtIGRy YmdfaW5pdCgpIGNhbGwgKi8KKysJaW50IHN0cmVuZ3RoOworKwlzaXplX3QgYmxvY2tsZW5ndGg7 CisrCXNpemVfdCBtYXhfcmVxdWVzdDsKKysKKysJc2l6ZV90IG1pbl9lbnRyb3B5LCBtYXhfZW50 cm9weTsKKysJc2l6ZV90IG1pbl9ub25jZSwgbWF4X25vbmNlOworKwlzaXplX3QgbWF4X3BlcnMs IG1heF9hZGluOworKwl1bnNpZ25lZCBpbnQgcmVzZWVkX2NvdW50ZXI7CisrCXVuc2lnbmVkIGlu dCByZXNlZWRfaW50ZXJ2YWw7CisrCXNpemVfdCBzZWVkbGVuOworKwlpbnQgc3RhdHVzOworKwkv KiBBcHBsaWNhdGlvbiBkYXRhOiB0eXBpY2FsbHkgdXNlZCBieSB0ZXN0IGdldF9lbnRyb3B5ICov CisrCXZvaWQgKmFwcF9kYXRhOworKwkvKiBJbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBzdHJ1Y3R1 cmVzICovCisrCXVuaW9uIAorKwkJeworKwkJRFJCR19IQVNIX0NUWCBoYXNoOworKwkJRFJCR19I TUFDX0NUWCBobWFjOworKwkJRFJCR19DVFJfQ1RYICBjdHI7CisrCQl9IGQ7CisrCS8qIEluaXRp YWxpYXNlIFBSTkcgYW5kIHNldHVwIGNhbGxiYWNrcyBiZWxvdyAqLworKwlpbnQgKCppbml0KShE UkJHX0NUWCAqY3R4LCBpbnQgbmlkLCBpbnQgc2VjdXJpdHksIHVuc2lnbmVkIGludCBmbGFncyk7 CisrCS8qIEludGFudGlhdGUgUFJORyAqLworKwlpbnQgKCppbnN0YW50aWF0ZSkoRFJCR19DVFgg KmN0eCwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50bGVuLAorKwkJ CQljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlbGVuLAorKwkJCQljb25z dCB1bnNpZ25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xlbik7CisrCS8qIHJlc2VlZCAqLwor KwlpbnQgKCpyZXNlZWQpKERSQkdfQ1RYICpjdHgsCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIg KmVudCwgc2l6ZV90IGVudGxlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6 ZV90IGFkaW5sZW4pOworKwkvKiBnZW5lcmF0IG91dHB1dCAqLworKwlpbnQgKCpnZW5lcmF0ZSko RFJCR19DVFggKmN0eCwKKysJCQkJdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAor KwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbik7CisrCS8qIHVu aW5zdGFudGlhdGUgKi8KKysJaW50ICgqdW5pbnN0YW50aWF0ZSkoRFJCR19DVFggKmN0eCk7Cisr CisrCS8qIEVudHJvcHkgc291cmNlIGJsb2NrIGxlbmd0aCAqLworKwlzaXplX3QgZW50cm9weV9i bG9ja2xlbjsKKysKKysJLyogZW50cm9weSBnYXRoZXJpbmcgZnVuY3Rpb24gKi8KKysJc2l6ZV90 ICgqZ2V0X2VudHJvcHkpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAorKwkJ CQlpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKTsKKysJLyogSW5k aWNhdGVzIHdlIGhhdmUgZmluaXNoZWQgd2l0aCBlbnRyb3B5IGJ1ZmZlciAqLworKwl2b2lkICgq Y2xlYW51cF9lbnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVf dCBvbGVuKTsKKysKKysJLyogbm9uY2UgZ2F0aGVyaW5nIGZ1bmN0aW9uICovCisrCXNpemVfdCAo KmdldF9ub25jZSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrCQkJCWlu dCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pOworKwkvKiBJbmRpY2F0 ZXMgd2UgaGF2ZSBmaW5pc2hlZCB3aXRoIG5vbmNlIGJ1ZmZlciAqLworKwl2b2lkICgqY2xlYW51 cF9ub25jZSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbik7 CisrCisrCS8qIENvbnRpbnVvdXMgcmFuZG9tIG51bWJlciB0ZXN0IHRlbXBvcmFyeSBhcmVhICov CisrCS8qIExhc3QgYmxvY2sgKi8JCisrCXVuc2lnbmVkIGNoYXIgbGJbRVZQX01BWF9NRF9TSVpF XTsKKysJLyogc2V0IGlmIGxiIGlzIHZhbGlkICovCisrCWludCBsYl92YWxpZDsKKysKKysJLyog Q2FsbGJhY2tzIHVzZWQgd2hlbiBjYWxsZWQgdGhyb3VnaCBSQU5EIGludGVyZmFjZSAqLworKwkv KiBHZXQgYW55IGFkZGl0aW9uYWwgaW5wdXQgZm9yIGdlbmVyYXRlICovCisrCXNpemVfdCAoKmdl dF9hZGluKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCk7CisrCXZvaWQgKCpj bGVhbnVwX2FkaW4pKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9s ZW4pOworKwkvKiBDYWxsYmFjayBmb3IgUkFORF9zZWVkKCksIFJBTkRfYWRkKCkgKi8KKysJaW50 ICgqcmFuZF9zZWVkX2NiKShEUkJHX0NUWCAqY3R4LCBjb25zdCB2b2lkICpidWYsIGludCBudW0p OworKwlpbnQgKCpyYW5kX2FkZF9jYikoRFJCR19DVFggKmN0eCwKKysJCQkJY29uc3Qgdm9pZCAq YnVmLCBpbnQgbnVtLCBkb3VibGUgZW50cm9weSk7CisrCX07CisrCisrCisraW50IGZpcHNfZHJi Z19jdHJfaW5pdChEUkJHX0NUWCAqZGN0eCk7CisraW50IGZpcHNfZHJiZ19oYXNoX2luaXQoRFJC R19DVFggKmRjdHgpOworK2ludCBmaXBzX2RyYmdfaG1hY19pbml0KERSQkdfQ1RYICpkY3R4KTsK KytpbnQgZmlwc19kcmJnX2thdChEUkJHX0NUWCAqZGN0eCwgaW50IG5pZCwgdW5zaWduZWQgaW50 IGZsYWdzKTsKKytpbnQgZmlwc19kcmJnX2Nwcm5nX3Rlc3QoRFJCR19DVFggKmRjdHgsIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKm91dCk7CisrCisrY29uc3Qgc3RydWN0IGVudl9tZF9zdCAqRklQU19n ZXRfZGlnZXN0YnluaWQoaW50IG5pZCk7CisrCisrY29uc3Qgc3RydWN0IGV2cF9jaXBoZXJfc3Qg KkZJUFNfZ2V0X2NpcGhlcmJ5bmlkKGludCBuaWQpOworKworKyNkZWZpbmUgRklQU19kaWdlc3Rp bml0IEVWUF9EaWdlc3RJbml0CisrI2RlZmluZSBGSVBTX2RpZ2VzdHVwZGF0ZSBFVlBfRGlnZXN0 VXBkYXRlCisrI2RlZmluZSBGSVBTX2RpZ2VzdGZpbmFsIEVWUF9EaWdlc3RGaW5hbAorKyNkZWZp bmUgTV9FVlBfTURfc2l6ZSBFVlBfTURfc2l6ZQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRh My9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2Ny eXB0by9maXBzL2ZpcHNfcmFuZF9saWIuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRv L2ZpcHMvZmlwc19yYW5kX2xpYi5jLmZpcHMJMjAxMi0wMi0yOSAxMDozMzowMi43OTgyOTQ5MzEg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9saWIu YwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5ODI5NDkzMSArMDEwMAorQEAgLTAsMCArMSwxOTEgQEAK KysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9q 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 T0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8u aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFu ZC5oPgorKyNpbmNsdWRlICJlX29zLmgiCisrCisrLyogRklQUyBBUEkgZm9yIFBSTkcgdXNlLiBT aW1pbGFyIHRvIFJBTkQgZnVuY3Rpb25hbGl0eSBidXQgd2l0aG91dAorKyAqIEVOR0lORSBhbmQg YWRkaXRpb25hbCBjaGVja2luZyBmb3Igbm9uLUZJUFMgcmFuZCBtZXRob2RzLgorKyAqLworKwor K3N0YXRpYyBjb25zdCBSQU5EX01FVEhPRCAqZmlwc19yYW5kX21ldGggPSBOVUxMOworK3N0YXRp YyBpbnQgZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPSAwOworK3N0YXRpYyBpbnQgZmlwc19yYW5k X2JpdHMgPSAwOworKworKy8qIEFsbG93cyBhcHBsaWNhdGlvbiB0byBvdmVycmlkZSBudW1iZXIg b2YgYml0cyBhbmQgdXNlcyBub24tRklQUyBtZXRob2RzICovCisrdm9pZCBGSVBTX3JhbmRfc2V0 X2JpdHMoaW50IG5iaXRzKQorKwl7CisrCWZpcHNfcmFuZF9iaXRzID0gbmJpdHM7CisrCX0KKysK KytpbnQgRklQU19yYW5kX3NldF9tZXRob2QoY29uc3QgUkFORF9NRVRIT0QgKm1ldGgpCisrCXsK KysJaWYgKCFmaXBzX3JhbmRfYml0cykKKysJCXsKKysJCWlmIChtZXRoID09IEZJUFNfZHJiZ19t ZXRob2QoKSkKKysJCQlmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9IDE7CisrCQllbHNlIGlmICht ZXRoID09IEZJUFNfeDkzMV9tZXRob2QoKSkKKysJCQlmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9 IDI7CisrCQllbHNlCisrCQkJeworKwkJCWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID0gMDsKKysJ CQlpZiAoRklQU19tb2R1bGVfbW9kZSgpKQorKwkJCQl7CisrCQkJCUZJUFNlcnIoRklQU19GX0ZJ UFNfUkFORF9TRVRfTUVUSE9ELAorKwkJCQkJCUZJUFNfUl9OT05fRklQU19NRVRIT0QpOworKwkJ CQlyZXR1cm4gMDsKKysJCQkJfQorKwkJCX0KKysJCX0KKysJZmlwc19yYW5kX21ldGggPSBtZXRo OworKwlyZXR1cm4gMTsKKysJfQorKworK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfZ2V0 X21ldGhvZCh2b2lkKQorKwl7CisrCXJldHVybiBmaXBzX3JhbmRfbWV0aDsKKysJfQorKworK2Nv bnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfbWV0aG9kKHZvaWQpCisrCXsKKysJcmV0dXJuIEZJ UFNfcmFuZF9nZXRfbWV0aG9kKCk7CisrCX0KKysKKyt2b2lkIEZJUFNfcmFuZF9yZXNldCh2b2lk KQorKwl7CisrCWlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+Y2xlYW51cCkK KysJCWZpcHNfcmFuZF9tZXRoLT5jbGVhbnVwKCk7CisrCX0KKysKKytpbnQgRklQU19yYW5kX3Nl ZWQoY29uc3Qgdm9pZCAqYnVmLCBGSVBTX1JBTkRfU0laRV9UIG51bSkKKysJeworKwlpZiAoIWZp cHNfYXBwcm92ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9kdWxlX21vZGUoKSkKKysJCXsKKysJCUZJ UFNlcnIoRklQU19GX0ZJUFNfUkFORF9TRUVELCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJ CXJldHVybiAwOworKwkJfQorKwlpZiAoZmlwc19yYW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgt PnNlZWQpCisrCQlmaXBzX3JhbmRfbWV0aC0+c2VlZChidWYsbnVtKTsKKysJcmV0dXJuIDE7Cisr CX0KKysKKyt2b2lkIEZJUFNfcmFuZF9hZGQoY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtLCBkb3Vi bGUgZW50cm9weSkKKysJeworKwlpZiAoIWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoICYmIEZJUFNf bW9kdWxlX21vZGUoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfUkFORF9BREQsIEZJ UFNfUl9OT05fRklQU19NRVRIT0QpOworKwkJcmV0dXJuOworKwkJfQorKwlpZiAoZmlwc19yYW5k X21ldGggJiYgZmlwc19yYW5kX21ldGgtPmFkZCkKKysJCWZpcHNfcmFuZF9tZXRoLT5hZGQoYnVm LG51bSxlbnRyb3B5KTsKKysJfQorKworK2ludCBGSVBTX3JhbmRfYnl0ZXModW5zaWduZWQgY2hh ciAqYnVmLCBGSVBTX1JBTkRfU0laRV9UIG51bSkKKysJeworKwlpZiAoIWZpcHNfYXBwcm92ZWRf cmFuZF9tZXRoICYmIEZJUFNfbW9kdWxlX21vZGUoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19G X0ZJUFNfUkFORF9CWVRFUywgRklQU19SX05PTl9GSVBTX01FVEhPRCk7CisrCQlyZXR1cm4gMDsK KysJCX0KKysJaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5ieXRlcykKKysJ CXJldHVybiBmaXBzX3JhbmRfbWV0aC0+Ynl0ZXMoYnVmLG51bSk7CisrCXJldHVybiAwOworKwl9 CisrCisraW50IEZJUFNfcmFuZF9wc2V1ZG9fYnl0ZXModW5zaWduZWQgY2hhciAqYnVmLCBpbnQg bnVtKQorKwl7CisrCWlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVf bW9kZSgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19SQU5EX1BTRVVET19CWVRFUywg RklQU19SX05PTl9GSVBTX01FVEhPRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKGZpcHNf cmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5wc2V1ZG9yYW5kKQorKwkJcmV0dXJuIGZpcHNf cmFuZF9tZXRoLT5wc2V1ZG9yYW5kKGJ1ZixudW0pOworKwlyZXR1cm4gLTE7CisrCX0KKysKKytp bnQgRklQU19yYW5kX3N0YXR1cyh2b2lkKQorKwl7CisrCWlmICghZmlwc19hcHByb3ZlZF9yYW5k X21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQ U19SQU5EX1NUQVRVUywgRklQU19SX05PTl9GSVBTX01FVEhPRCk7CisrCQlyZXR1cm4gMDsKKysJ CX0KKysJaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5zdGF0dXMpCisrCQly ZXR1cm4gZmlwc19yYW5kX21ldGgtPnN0YXR1cygpOworKwlyZXR1cm4gMDsKKysJfQorKworKy8q IFJldHVybiBpbnN0YW50aWF0ZWQgc3RyZW5ndGggb2YgUFJORy4gRm9yIERSQkcgdGhpcyBpcyBh biBpbnRlcm5hbAorKyAqIHBhcmFtZXRlci4gRm9yIFg5LjMxIFBSTkcgaXQgaXMgODAgYml0cyAo ZnJvbSBTUDgwMC0xMzEpLiBBbnkgb3RoZXIKKysgKiB0eXBlIG9mIFBSTkcgaXMgbm90IGFwcHJv dmVkIGFuZCByZXR1cm5zIDAgaW4gRklQUyBtb2RlIGFuZCBtYXhpbXVtCisrICogMjU2IG91dHNp ZGUgRklQUyBtb2RlLgorKyAqLworKworK2ludCBGSVBTX3JhbmRfc3RyZW5ndGgodm9pZCkKKysJ eworKwlpZiAoZmlwc19yYW5kX2JpdHMpCisrCQlyZXR1cm4gZmlwc19yYW5kX2JpdHM7CisrCWlm IChmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9PSAxKQorKwkJcmV0dXJuIEZJUFNfZHJiZ19nZXRf c3RyZW5ndGgoRklQU19nZXRfZGVmYXVsdF9kcmJnKCkpOworKwllbHNlIGlmIChmaXBzX2FwcHJv dmVkX3JhbmRfbWV0aCA9PSAyKQorKwkJcmV0dXJuIDgwOworKwllbHNlIGlmIChmaXBzX2FwcHJv dmVkX3JhbmRfbWV0aCA9PSAwKQorKwkJeworKwkJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSkKKysJ CQlyZXR1cm4gMDsKKysJCWVsc2UKKysJCQlyZXR1cm4gMjU2OworKwkJfQorKwlyZXR1cm4gMDsK KysJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3JhbmRf c2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19yYW5k X3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcmFu ZF9zZWxmdGVzdC5jLmZpcHMJMjAxMi0wMi0yOSAxMDozMzowMi43OTgyOTQ5MzEgKzAxMDAKKysr KyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jCTIw MTItMDItMjkgMTA6MzM6MDIuNzk4Mjk0OTMxICswMTAwCitAQCAtMCwwICsxLDE4MyBAQAorKy8q ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3Qu ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z CisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlv bi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysg KiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11 c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBv cGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3Ig bWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVu CisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4g UmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZv bGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIK KysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVD VCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQ VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJP SkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ TkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VS RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwg REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIg Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD VCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP UiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT VUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNs dWRlICJmaXBzX2xvY2wuaCIKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrCisrCisrdHlw ZWRlZiBzdHJ1Y3QKKysJeworKwl1bnNpZ25lZCBjaGFyIERUWzE2XTsKKysJdW5zaWduZWQgY2hh ciBWWzE2XTsKKysJdW5zaWduZWQgY2hhciBSWzE2XTsKKysJfSBBRVNfUFJOR19UVjsKKysKKysv KiBUaGUgZm9sbG93aW5nIHRlc3QgdmVjdG9ycyBhcmUgdGFrZW4gZGlyZWN0bHkgZnJvbSB0aGUg UkdOVlMgc3BlYyAqLworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xMjhfa2V5WzE2XSA9 CisrCQl7MHhmMywweGIxLDB4NjYsMHg2ZCwweDEzLDB4NjAsMHg3MiwweDQyLAorKwkJIDB4ZWQs MHgwNiwweDFjLDB4YWIsMHhiOCwweGQ0LDB4NjIsMHgwMn07CisrCisrc3RhdGljIEFFU19QUk5H X1RWIGFlc18xMjhfdHYgPSAKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZTYsMHhiMywweGJl LDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKKysJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAs MHhlOSwweDIyLDB4Zjl9LAorKwkJCQkvKiBWICovCisrCQl7MHg4MCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweDU5LDB4NTMsMHgxZSwweGQxLDB4M2IsMHhi MCwweGMwLDB4NTUsCisrCQkgMHg4NCwweDc5LDB4NjYsMHg4NSwweGMxLDB4MmYsMHg3NiwweDQx fQorKwl9OworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xOTJfa2V5WzI0XSA9CisrCQl7 MHgxNSwweGQ4LDB4NzgsMHgwZCwweDYyLDB4ZDMsMHgyNSwweDZlLAorKwkJIDB4NDQsMHg2NCww eDEwLDB4MTMsMHg2MCwweDJiLDB4YTksMHhiYywKKysJCSAweDRhLDB4ZmIsMHhjYSwweGViLDB4 NGMsMHg4YiwweDk5LDB4M2J9OworKworK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMTkyX3R2ID0g CisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSww eDhiLDB4YzEsCisrCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweDRifSwK KysJCQkJLyogViAqLworKwkJezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkv KiBSICovCisrCQl7MHgxNywweDA3LDB4ZDUsMHgyOCwweDE5LDB4NzksMHgxZSwweGVmLAorKwkJ IDB4YTUsMHgwYywweGJmLDB4MjUsMHhlNSwweDU2LDB4YjQsMHg5M30KKysJfTsKKysKKytzdGF0 aWMgdW5zaWduZWQgY2hhciBhZXNfMjU2X2tleVszMl0gPQorKwkJezB4NmQsMHgxNCwweDA2LDB4 NmMsMHhiNiwweGQ4LDB4MjEsMHgyZCwKKysJCSAweDgyLDB4OGQsMHhmYSwweGYyLDB4N2EsMHgw MywweGI3LDB4OWYsCisrCQkgMHgwYywweGM3LDB4M2UsMHhjZCwweDc2LDB4ZWIsMHhlZSwweGI1 LAorKwkJIDB4MjEsMHgwNSwweDhjLDB4NGYsMHgzMSwweDdhLDB4ODAsMHhiYn07CisrCisrc3Rh dGljIEFFU19QUk5HX1RWIGFlc18yNTZfdHYgPQorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHhk YSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAorKwkJIDB4ZjIsMHhhOSwweDRl LDB4MzQsMHg3NCwweDhlLDB4OWUsMHg4OH0sCisrCQkJCS8qIFYgKi8KKysJCXsweDgwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4MzUsMHhjNywweGVmLDB4 YTcsMHg3OCwweDRkLDB4MjksMHhiYywKKysJCSAweDgyLDB4NzksMHg5OSwweGZiLDB4ZDAsMHhi MywweDNiLDB4NzJ9CisrCX07CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfcm5nKCkKKysgICAgewor KyAgICBhZXNfMTkyX3R2LlZbMF0rKzsKKysgICAgfQorKworKyNkZWZpbmUgZmlwc194OTMxX3Rl c3Qoa2V5LCB0dikgXAorKwlkb194OTMxX3Rlc3Qoa2V5LCBzaXplb2Yga2V5LCAmdHYpCisrCisr c3RhdGljIGludCBkb194OTMxX3Rlc3QodW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLAor KwkJCUFFU19QUk5HX1RWICp0dikKKysJeworKwl1bnNpZ25lZCBjaGFyIFJbMTZdLCBWWzE2XTsK KysJaW50IHJ2ID0gMTsKKysJbWVtY3B5KFYsIHR2LT5WLCBzaXplb2YoVikpOworKwlpZiAoIUZJ UFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVuKSkKKysJCXJldHVybiAwOworKwlpZiAoIWZpcHNf cG9zdF9zdGFydGVkKEZJUFNfVEVTVF9YOTMxLCBrZXlsZW4sIE5VTEwpKQorKwkJcmV0dXJuIDE7 CisrCWlmICghZmlwc19wb3N0X2NvcnJ1cHQoRklQU19URVNUX1g5MzEsIGtleWxlbiwgTlVMTCkp CisrCQlWWzBdKys7CisrCUZJUFNfeDkzMV9zZWVkKFYsIDE2KTsKKysJRklQU194OTMxX3NldF9k dCh0di0+RFQpOworKwlGSVBTX3g5MzFfYnl0ZXMoUiwgMTYpOworKwlpZiAobWVtY21wKFIsIHR2 LT5SLCAxNikpCisrCQl7CisrCQlmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9YOTMxLCBrZXls ZW4sIE5VTEwpOworKwkJcnYgPSAwOworKwkJfQorKwllbHNlIGlmICghZmlwc19wb3N0X3N1Y2Nl c3MoRklQU19URVNUX1g5MzEsIGtleWxlbiwgTlVMTCkpCisrCQlyZXR1cm4gMDsKKysJcmV0dXJu IHJ2OworKwl9CisrCisraW50IEZJUFNfc2VsZnRlc3RfeDkzMSgpCisrCXsKKysJaW50IHJ2ID0g MTsKKysJRklQU194OTMxX3Jlc2V0KCk7CisrCWlmICghRklQU194OTMxX3Rlc3RfbW9kZSgpKQor KwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9YOTMxLEZJUFNfUl9TRUxGVEVT VF9GQUlMRUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWlmICghZmlwc194OTMxX3Rlc3QoYWVz XzEyOF9rZXksYWVzXzEyOF90dikpCisrCQlydiA9IDA7CisrCWlmICghZmlwc194OTMxX3Rlc3Qo YWVzXzE5Ml9rZXksIGFlc18xOTJfdHYpKQorKwkJcnYgPSAwOworKwlpZiAoIWZpcHNfeDkzMV90 ZXN0KGFlc18yNTZfa2V5LCBhZXNfMjU2X3R2KSkKKysJCXJ2ID0gMDsKKysJRklQU194OTMxX3Jl c2V0KCk7CisrCWlmICghcnYpCisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1g5MzEs RklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCXJldHVybiBydjsKKysJfQorKworK2ludCBGSVBT X3NlbGZ0ZXN0X3JuZyh2b2lkKQorKwl7CisrCXJldHVybiBGSVBTX3NlbGZ0ZXN0X3g5MzEoKTsK KysJfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlw cy9maXBzX3JhbmR0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2Zp cHNfcmFuZHRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19y YW5kdGVzdC5jLmZpcHMJMjAxMi0wMi0yOSAxMDozMzowMi43OTgyOTQ5MzEgKzAxMDAKKysrKyBv cGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYwkyMDEyLTAyLTI5 IDEwOjMzOjAyLjc5OTI5NDkzOSArMDEwMAorQEAgLTAsMCArMSwyNTAgQEAKKysvKiBDb3B5cmln aHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKysgKiBBbGwg cmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1l bnRhdGlvbiB3cml0dGVuCisrICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgor KyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGgg TmV0c2NhcGVzIFNTTC4KKysgKiAKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVy Y2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKysgKiB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysg KiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhl IFJDNCwgUlNBLAorKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wg Y29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0 cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKysgKiBleGNl cHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysg KiAKKysgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBD b3B5cmlnaHQgbm90aWNlcyBpbgorKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4K KysgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hv dWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisrICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMg b2YgdGhlIGxpYnJhcnkgdXNlZC4KKysgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRl eHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKysgKiBpbiBkb2N1bWVudGF0aW9u IChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKysgKiAKKysg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKyAqICAgIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp b24uCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisrICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRv Z3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisrICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlw dHNvZnQuY29tKSIKKysgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQg b3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKysgKiAgICBiZWluZyB1c2VkIGFy ZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKysgKiA0LiBJZiB5b3UgaW5jbHVkZSBh bnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAK KysgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGlu Y2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisrICog CisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBB TkQKKysgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKyAqIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUg TElBQkxFCisrICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKysgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworKyAqIE9S IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisrICogTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQor KyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU SEUgUE9TU0lCSUxJVFkgT0YKKysgKiBTVUNIIERBTUFHRS4KKysgKiAKKysgKiBUaGUgbGljZW5j ZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVy c2lvbiBvcgorKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAg aS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVy IGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKysgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVi bGljIExpY2VuY2UuXQorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAy MDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlz dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0 CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICog ICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBt YXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3 YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIg YW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNl IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAor KyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwg cGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50Ogor KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNs dWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+ CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrCisrI2luY2x1ZGUgImVfb3MuaCIKKysKKysjaWZuZGVm IE9QRU5TU0xfRklQUworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAg ICBwcmludGYoIk5vIEZJUFMgUkFORCBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30K KysKKysjZWxzZQorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KKysKKyt0eXBlZGVmIHN0cnVjdAorKwl7CisrCXVuc2lnbmVkIGNoYXIgRFRbMTZd OworKwl1bnNpZ25lZCBjaGFyIFZbMTZdOworKwl1bnNpZ25lZCBjaGFyIFJbMTZdOworKwl9IEFF U19QUk5HX01DVDsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X21jdF9r ZXlbMTZdID0KKysJezB4OWYsMHg1YiwweDUxLDB4MjAsMHgwYiwweGYzLDB4MzQsMHhiNSwKKysJ IDB4ZDgsMHgyYiwweGU4LDB4YzMsMHg3MiwweDU1LDB4YzgsMHg0OH07CisrCisrc3RhdGljIGNv bnN0IEFFU19QUk5HX01DVCBhZXNfMTI4X21jdF90diA9IHsKKysJCQkvKiBEVCAqLworKwl7MHg2 MywweDc2LDB4YmIsMHhlNSwweDI5LDB4MDIsMHhiYSwweDNiLAorKwkgMHg2NywweGM5LDB4MjUs MHhmYSwweDcwLDB4MWYsMHgxMSwweGFjfSwKKysJCQkvKiBWICovCisrCXsweDU3LDB4MmMsMHg4 ZSwweDc2LDB4ODcsMHgyNiwweDQ3LDB4OTcsCisrCSAweDdlLDB4NzQsMHhmYiwweGRkLDB4YzQs MHg5NSwweDAxLDB4ZDF9LAorKwkJCS8qIFIgKi8KKysJezB4NDgsMHhlOSwweGJkLDB4MGQsMHgw NiwweGVlLDB4MTgsMHhmYiwKKysJIDB4ZTQsMHg1NywweDkwLDB4ZDUsMHhjMywweGZjLDB4OWIs MHg3M30KKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbWN0X2tl eVsyNF0gPQorKwl7MHhiNywweDZjLDB4MzQsMHhkMSwweDA5LDB4NjcsMHhhYiwweDczLAorKwkg MHg0ZCwweDVhLDB4ZDUsMHgzNCwweDk4LDB4MTYsMHgwYiwweDkxLAorKwkgMHhiYywweDM1LDB4 NTEsMHgxNiwweDZiLDB4YWUsMHg5MywweDhhfTsKKysKKytzdGF0aWMgY29uc3QgQUVTX1BSTkdf TUNUIGFlc18xOTJfbWN0X3R2ID0geworKwkJCS8qIERUICovCisrCXsweDg0LDB4Y2UsMHgyMiww eDdkLDB4OTEsMHg1YSwweGEzLDB4YzksCisrCSAweDg0LDB4M2MsMHgwYSwweGIzLDB4YTksMHg2 MywweDE1LDB4NTJ9LAorKwkJCS8qIFYgKi8KKysJezB4YjYsMHhhZiwweGU2LDB4OGYsMHg5OSww eDllLDB4OTAsMHg2NCwKKysJIDB4ZGQsMHhjNywweDdhLDB4YzEsMHhiYiwweDkwLDB4M2EsMHg2 ZH0sCisrCQkJLyogUiAqLworKwl7MHhmYywweDg1LDB4NjAsMHg5YSwweDI5LDB4NmYsMHhlZiww eDIxLAorKwkgMHhkZCwweDg2LDB4MjAsMHgzMiwweDhhLDB4MjksMHg2ZiwweDQ3fQorK307Cisr Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9tY3Rfa2V5WzMyXSA9CisrCXsw eDliLDB4MDUsMHhjOCwweDY4LDB4ZmYsMHg0NywweGY4LDB4M2EsCisrCSAweGE2LDB4M2EsMHhh OCwweGNiLDB4NGUsMHg3MSwweGIyLDB4ZTAsCisrCSAweGI4LDB4N2UsMHhmMSwweDM3LDB4YjYs MHhiNCwweGY2LDB4NmQsCisrCSAweDg2LDB4MzIsMHhmYywweDFmLDB4NWUsMHgxZCwweDFlLDB4 NTB9OworKworK3N0YXRpYyBjb25zdCBBRVNfUFJOR19NQ1QgYWVzXzI1Nl9tY3RfdHYgPSB7Cisr CQkJLyogRFQgKi8KKysJezB4MzEsMHg2ZSwweDM1LDB4OWEsMHhiMSwweDQ0LDB4ZjAsMHhlZSwK KysJIDB4NjIsMHg2ZCwweDA0LDB4NDYsMHhlMCwweGEzLDB4OTIsMHg0Y30sCisrCQkJLyogViAq LworKwl7MHg0ZiwweGNkLDB4YzEsMHg4NywweDgyLDB4MWYsMHg0ZCwweGExLAorKwkgMHgzZSww eDBlLDB4NTYsMHg0NCwweDU5LDB4ZTgsMHg4MywweGNhfSwKKysJCQkvKiBSICovCisrCXsweGM4 LDB4ODcsMHhjMiwweDYxLDB4NWIsMHhkMCwweGI5LDB4ZTEsCisrCSAweGU3LDB4ZjMsMHg4Yiww eGQ3LDB4NWIsMHhkNSwweGYxLDB4OGR9CisrfTsKKysKKytzdGF0aWMgdm9pZCBkdW1wKGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmIsaW50IG4pCisrICAgIHsKKysgICAgd2hpbGUobi0tID4gMCkKKysJ eworKwlwcmludGYoIiAlMDJ4IiwqYisrKTsKKysJfQorKyAgICB9CisrCisrc3RhdGljIHZvaWQg Y29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFyICpyZXN1bHQsY29uc3QgdW5zaWduZWQgY2hhciAq ZXhwZWN0ZWQsCisrCQkgICAgaW50IG4pCisrICAgIHsKKysgICAgaW50IGk7CisrCisrICAgIGZv cihpPTAgOyBpIDwgbiA7ICsraSkKKysJaWYocmVzdWx0W2ldICE9IGV4cGVjdGVkW2ldKQorKwkg ICAgeworKwkgICAgcHV0cygiUmFuZG9tIHRlc3QgZmFpbGVkLCBnb3Q6Iik7CisrCSAgICBkdW1w KHJlc3VsdCxuKTsKKysJICAgIHB1dHMoIlxuICAgICAgICAgICAgICAgZXhwZWN0ZWQ6Iik7Cisr CSAgICBkdW1wKGV4cGVjdGVkLG4pOworKwkgICAgcHV0Y2hhcignXG4nKTsKKysJICAgIEVYSVQo MSk7CisrCSAgICB9CisrICAgIH0KKysKKysKKytzdGF0aWMgdm9pZCBydW5fdGVzdChjb25zdCB1 bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sCisrCQkJCQkJCWNvbnN0IEFFU19QUk5HX01D VCAqdHYpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBidWZbMTZdLCBkdFsxNl07CisrICAg IGludCBpLCBqOworKyAgICBGSVBTX3g5MzFfcmVzZXQoKTsKKysgICAgRklQU194OTMxX3Rlc3Rf bW9kZSgpOworKyAgICBGSVBTX3g5MzFfc2V0X2tleShrZXksIGtleWxlbik7CisrICAgIEZJUFNf eDkzMV9zZWVkKHR2LT5WLCAxNik7CisrICAgIG1lbWNweShkdCwgdHYtPkRULCAxNik7CisrICAg IGZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKQorKwl7CisrICAgIAlGSVBTX3g5MzFfc2V0X2R0 KGR0KTsKKysJRklQU194OTMxX2J5dGVzKGJ1ZiwgMTYpOworKwkvKiBJbmNyZW1lbnQgRFQgKi8K KysJZm9yIChqID0gMTU7IGogPj0gMDsgai0tKQorKwkJeworKwkJZHRbal0rKzsKKysJCWlmIChk dFtqXSkKKysJCQlicmVhazsKKysJCX0KKysJfQorKworKyAgICBjb21wYXJlKGJ1Zix0di0+Uiwg MTYpOworKyAgICB9CisrCisraW50IG1haW4oKQorKwl7CisrCXJ1bl90ZXN0KGFlc18xMjhfbWN0 X2tleSwgMTYsICZhZXNfMTI4X21jdF90dik7CisrCXByaW50ZigiRklQUyBQUk5HIHRlc3QgMSBk b25lXG4iKTsKKysJcnVuX3Rlc3QoYWVzXzE5Ml9tY3Rfa2V5LCAyNCwgJmFlc18xOTJfbWN0X3R2 KTsKKysJcHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAyIGRvbmVcbiIpOworKwlydW5fdGVzdChhZXNf MjU2X21jdF9rZXksIDMyLCAmYWVzXzI1Nl9tY3RfdHYpOworKwlwcmludGYoIkZJUFMgUFJORyB0 ZXN0IDMgZG9uZVxuIik7CisrCXJldHVybiAwOworKwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBv cGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMuZmlwcyBv cGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMKKy0tLSBv cGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMuZmlwcwky MDEyLTAyLTI5IDEwOjMzOjAyLjc5OTI5NDkzOSArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0 YTMvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5 OTI5NDkzOSArMDEwMAorQEAgLTAsMCArMSw0NDQgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENv cHlyaWdodCAoYykgMjAwMy0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJl c2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoK KysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisr ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMu IEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2Yg dGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xl ZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMg Ik9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQg dG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdy aXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3Bl bnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBh cHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlz c2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25z IG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAg IGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5E IEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElU UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1Qg TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisr ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysg KgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNl bmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNv bmYuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgbltdID0KKysiXHgwMFx4QkJceEY4XHgyRlx4MDlceDA2XHg4Mlx4Q0VceDlDXHgyM1x4 MzhceEFDXHgyQlx4OURceEE4XHg3MSIKKysiXHhGN1x4MzZceDhEXHgwN1x4RUVceEQ0XHgxMFx4 NDNceEE0XHg0MFx4RDZceEI2XHhGMFx4NzRceDU0XHhGNSIKKysiXHgxRlx4QjhceERGXHhCQVx4 QUZceDAzXHg1Q1x4MDJceEFCXHg2MVx4RUFceDQ4XHhDRVx4RUJceDZGXHhDRCIKKysiXHg0OFx4 NzZceEVEXHg1Mlx4MERceDYwXHhFMVx4RUNceDQ2XHgxOVx4NzFceDlEXHg4QVx4NUJceDhCXHg4 MCIKKysiXHg3Rlx4QUZceEI4XHhFMFx4QTNceERGXHhDN1x4MzdceDcyXHgzRVx4RTZceEI0XHhC N1x4RDlceDNBXHgyNSIKKysiXHg4NFx4RUVceDZBXHg2NFx4OURceDA2XHgwOVx4NTNceDc0XHg4 OFx4MzRceEIyXHg0NVx4NDVceDk4XHgzOSIKKysiXHg0RVx4RTBceEFBXHhCMVx4MkRceDdCXHg2 MVx4QTVceDFGXHg1Mlx4N0FceDlBXHg0MVx4RjZceEMxXHg2OCIKKysiXHg3Rlx4RTJceDUzXHg3 Mlx4OThceENBXHgyQVx4OEZceDU5XHg0Nlx4RjhceEU1XHhGRFx4MDlceDFEXHhCRCIKKysiXHhD QiI7CisrCisrc3RhdGljIGludCBjb3JydXB0X3JzYTsKKysKKytzdGF0aWMgaW50IHNldHJzYWtl eShSU0EgKmtleSkKKysgICAgeworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlW10g PSAiXHgxMSI7CisrCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRbXSA9CisrIlx4 MDBceEE1XHhEQVx4RkNceDUzXHg0MVx4RkFceEYyXHg4OVx4QzRceEI5XHg4OFx4REJceDMwXHhD MVx4Q0QiCisrIlx4RjhceDNGXHgzMVx4MjVceDFFXHgwNlx4NjhceEI0XHgyN1x4ODRceDgxXHgz OFx4MDFceDU3XHg5Nlx4NDEiCisrIlx4QjJceDk0XHgxMFx4QjNceEM3XHg5OVx4OERceDZCXHhD NFx4NjVceDc0XHg1RVx4NUNceDM5XHgyNlx4NjkiCisrIlx4RDZceDg3XHgwRFx4QTJceEMwXHg4 Mlx4QTlceDM5XHhFM1x4N0ZceERDXHhCOFx4MkVceEM5XHgzRVx4REEiCisrIlx4QzlceDdGXHhG M1x4QURceDU5XHg1MFx4QUNceENGXHhCQ1x4MTFceDFDXHg3Nlx4RjFceEE5XHg1Mlx4OTQiCisr Ilx4NDRceEU1XHg2QVx4QUZceDY4XHhDNVx4NkNceDA5XHgyQ1x4RDNceDhEXHhDM1x4QkVceEY1 XHhEMlx4MEEiCisrIlx4OTNceDk5XHgyNlx4RURceDRGXHg3NFx4QTFceDNFXHhERFx4RkJceEUx XHhBMVx4Q0VceENDXHg0OFx4OTQiCisrIlx4QUZceDk0XHgyOFx4QzJceEI3XHhCOFx4ODhceDNG XHhFNFx4NDZceDNBXHg0Qlx4QzhceDVCXHgxQ1x4QjMiCisrIlx4QzEiOworKworKyAgICBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBwW10gPQorKyJceDAwXHhFRVx4Q0ZceEFFXHg4MVx4QjFc eEI5XHhCM1x4QzlceDA4XHg4MVx4MEJceDEwXHhBMVx4QjVceDYwIgorKyJceDAxXHg5OVx4RUJc eDlGXHg0NFx4QUVceEY0XHhGRFx4QTRceDkzXHhCOFx4MUFceDlFXHgzRFx4ODRceEY2IgorKyJc eDMyXHgxMlx4NEVceEYwXHgyM1x4NkVceDVEXHgxRVx4M0JceDdFXHgyOFx4RkFceEU3XHhBQVx4 MDRceDBBIgorKyJceDJEXHg1Qlx4MjVceDIxXHg3Nlx4NDVceDlEXHgxRlx4MzlceDc1XHg0MVx4 QkFceDJBXHg1OFx4RkJceDY1IgorKyJceDk5IjsKKysKKysgICAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgcVtdID0KKysiXHgwMFx4QzlceDdGXHhCMVx4RjBceDI3XHhGNFx4NTNceEY2XHgz NFx4MTJceDMzXHhFQVx4QUFceEQxXHhEOSIKKysiXHgzNVx4M0ZceDZDXHg0Mlx4RDBceDg4XHg2 Nlx4QjFceEQwXHg1QVx4MEZceDIwXHgzNVx4MDJceDhCXHg5RCIKKysiXHg4Nlx4OThceDQwXHhC NFx4MTZceDY2XHhCNFx4MkVceDkyXHhFQVx4MERceEEzXHhCNFx4MzJceDA0XHhCNSIKKysiXHhD Rlx4Q0VceDMzXHg1Mlx4NTJceDREXHgwNFx4MTZceEE1XHhBNFx4NDFceEU3XHgwMFx4QUZceDQ2 XHgxNSIKKysiXHgwMyI7CisrCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRtcDFb XSA9CisrIlx4NTRceDQ5XHg0Q1x4QTZceDNFXHhCQVx4MDNceDM3XHhFNFx4RTJceDQwXHgyM1x4 RkNceEQ2XHg5QVx4NUEiCisrIlx4RUJceDA3XHhERFx4RENceDAxXHg4M1x4QTRceEQwXHhBQ1x4 OUJceDU0XHhCMFx4NTFceEYyXHhCMVx4M0UiCisrIlx4RDlceDQ5XHgwOVx4NzVceEVBXHhCN1x4 NzRceDE0XHhGRlx4NTlceEMxXHhGN1x4NjlceDJFXHg5QVx4MkUiCisrIlx4MjBceDJCXHgzOFx4 RkNceDkxXHgwQVx4NDdceDQxXHg3NFx4QURceEM5XHgzQ1x4MUZceDY3XHhDOVx4ODEiOworKwor KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkbXExW10gPQorKyJceDQ3XHgxRVx4MDJc eDkwXHhGRlx4MEFceEYwXHg3NVx4MDNceDUxXHhCN1x4RjhceDc4XHg4Nlx4NENceEE5IgorKyJc eDYxXHhBRFx4QkRceDNBXHg4QVx4N0VceDk5XHgxQ1x4NUNceDA1XHg1Nlx4QTlceDRDXHgzMVx4 NDZceEE3IgorKyJceEY5XHg4MFx4M0ZceDhGXHg2Rlx4OEFceEUzXHg0Mlx4RTlceDMxXHhGRFx4 OEFceEU0XHg3QVx4MjJceDBEIgorKyJceDFCXHg5OVx4QTRceDk1XHg4NFx4OThceDA3XHhGRVx4 MzlceEY5XHgyNFx4NUFceDk4XHgzNlx4REFceDNEIjsKKysgICAgCisrICAgIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGlxbXBbXSA9CisrIlx4MDBceEIwXHg2Q1x4NEZceERBXHhCQlx4NjNc eDAxXHgxOVx4OERceDI2XHg1Qlx4REJceEFFXHg5NFx4MjMiCisrIlx4QjNceDgwXHhGMlx4NzFc eEY3XHgzNFx4NTNceDg4XHg1MFx4OTNceDA3XHg3Rlx4Q0RceDM5XHhFMlx4MTEiCisrIlx4OUZc eEM5XHg4Nlx4MzJceDE1XHg0Rlx4NThceDgzXHhCMVx4NjdceEE5XHg2N1x4QkZceDQwXHgyQlx4 NEUiCisrIlx4OUVceDJFXHgwRlx4OTZceDU2XHhFNlx4OThceEVBXHgzNlx4NjZceEVEXHhGQlx4 MjVceDc5XHg4MFx4MzkiCisrIlx4RjciOworKworKyAgICBrZXktPm4gPSBCTl9iaW4yYm4obiwg c2l6ZW9mKG4pLTEsIGtleS0+bik7CisrICAgIGlmIChjb3JydXB0X3JzYSkKKysJQk5fc2V0X2Jp dChrZXktPm4sIDEwMjQpOworKyAgICBrZXktPmUgPSBCTl9iaW4yYm4oZSwgc2l6ZW9mKGUpLTEs IGtleS0+ZSk7CisrICAgIGtleS0+ZCA9IEJOX2JpbjJibihkLCBzaXplb2YoZCktMSwga2V5LT5k KTsKKysgICAga2V5LT5wID0gQk5fYmluMmJuKHAsIHNpemVvZihwKS0xLCBrZXktPnApOworKyAg ICBrZXktPnEgPSBCTl9iaW4yYm4ocSwgc2l6ZW9mKHEpLTEsIGtleS0+cSk7CisrICAgIGtleS0+ ZG1wMSA9IEJOX2JpbjJibihkbXAxLCBzaXplb2YoZG1wMSktMSwga2V5LT5kbXAxKTsKKysgICAg a2V5LT5kbXExID0gQk5fYmluMmJuKGRtcTEsIHNpemVvZihkbXExKS0xLCBrZXktPmRtcTEpOwor KyAgICBrZXktPmlxbXAgPSBCTl9iaW4yYm4oaXFtcCwgc2l6ZW9mKGlxbXApLTEsIGtleS0+aXFt cCk7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfcnNhKCkK KysgICAgeworKyAgICBjb3JydXB0X3JzYSA9IDE7CisrICAgIH0KKysKKysvKiBLbm93biBBbnN3 ZXIgVGVzdCAoS0FUKSBkYXRhIGZvciB0aGUgYWJvdmUgUlNBIHByaXZhdGUga2V5IHNpZ25pbmcK KysgKiBrYXRfdGJzLgorKyAqLworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF90 YnNbXSA9ICJPcGVuU1NMIEZJUFMgMTQwLTIgUHVibGljIEtleSBSU0EgS0FUIjsKKysKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEExW10gPSB7CisrICAweDJELCAw eEFGLCAweDZFLCAweEMyLCAweDk4LCAweEZCLCAweDhBLCAweEExLCAweEI5LCAweDQ2LCAweERB LCAweDBGLAorKyAgMHgwMSwgMHgxRSwgMHgzNywgMHg5MywgMHhDMiwgMHg1NSwgMHgyNywgMHhF NCwgMHgxRCwgMHhEMiwgMHg5MCwgMHhCQiwKKysgIDB4RjQsIDB4QkYsIDB4NEEsIDB4NzQsIDB4 MzksIDB4NTEsIDB4QkIsIDB4RTgsIDB4MEMsIDB4QjcsIDB4RjgsIDB4RDMsCisrICAweEQxLCAw eERGLCAweEU3LCAweEJFLCAweDgwLCAweDA1LCAweEMzLCAweEI1LCAweEM3LCAweDgzLCAweEQ1 LCAweDRDLAorKyAgMHg3RiwgMHg0OSwgMHhGQiwgMHgzRiwgMHgyOSwgMHg5QiwgMHhFMSwgMHgx MiwgMHg1MSwgMHg2MCwgMHhEMCwgMHhBNywKKysgIDB4MEQsIDB4QTksIDB4MjgsIDB4NTYsIDB4 NzMsIDB4RDksIDB4MDcsIDB4RTMsIDB4NUUsIDB4M0YsIDB4OUIsIDB4RjUsCisrICAweEI2LCAw eEYzLCAweEYyLCAweDVFLCAweDc0LCAweEM5LCAweDgzLCAweDgxLCAweDQ3LCAweEYwLCAweEM1 LCAweDQ1LAorKyAgMHgwQSwgMHhFOSwgMHg4RSwgMHgzOCwgMHhENywgMHgxOCwgMHhDNiwgMHgy QSwgMHgwRiwgMHhGOCwgMHhCNywgMHgzMSwKKysgIDB4RDYsIDB4NTUsIDB4RTQsIDB4NjYsIDB4 NzgsIDB4ODEsIDB4RDQsIDB4RTYsIDB4REIsIDB4OUYsIDB4QkEsIDB4RTgsCisrICAweDIzLCAw eEI1LCAweDdGLCAweERDLCAweDA4LCAweEVBLCAweEQ1LCAweDI2LCAweDFFLCAweDIwLCAweDI1 LCAweDg0LAorKyAgMHgyNiwgMHhDNiwgMHg3OSwgMHhDOSwgMHg5QiwgMHgzRCwgMHg3RSwgMHhB OQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMjI0 W10gPSB7CisrICAweDM5LCAweDRBLCAweDZBLCAweDIwLCAweEJDLCAweEU5LCAweDMzLCAweEVE LCAweEVGLCAweEM1LCAweDU4LCAweEE3LAorKyAgMHhGRSwgMHg4MSwgMHhDNCwgMHgzNiwgMHg1 MCwgMHg5QSwgMHgyQywgMHg4MiwgMHg5OCwgMHgwOCwgMHg5NSwgMHhGQSwKKysgIDB4QjEsIDB4 OUUsIDB4RDIsIDB4NTUsIDB4NjEsIDB4ODcsIDB4MjEsIDB4NTksIDB4ODcsIDB4N0IsIDB4MUYs IDB4NTcsCisrICAweDMwLCAweDlELCAweDBELCAweDRBLCAweDA2LCAweEVCLCAweDUyLCAweDM3 LCAweDU1LCAweDU0LCAweDFDLCAweDg5LAorKyAgMHg4MywgMHg3NSwgMHg1OSwgMHg2NSwgMHg2 NCwgMHg5MCwgMHgyRSwgMHgxNiwgMHhDQywgMHg4NiwgMHgwNSwgMHhFRSwKKysgIDB4QjEsIDB4 RTYsIDB4N0IsIDB4QkEsIDB4MTYsIDB4NzUsIDB4MEQsIDB4MEMsIDB4NjQsIDB4MEIsIDB4QUIs IDB4MjIsCisrICAweDE1LCAweDc4LCAweDZCLCAweDZGLCAweEE0LCAweEZCLCAweDc3LCAweDQw LCAweDY0LCAweDYyLCAweEQxLCAweEI1LAorKyAgMHgzNywgMHgxRSwgMHhFMCwgMHgzRCwgMHhB OCwgMHhGOSwgMHhEMiwgMHhCRCwgMHhBQSwgMHgzOCwgMHgyNCwgMHg0OSwKKysgIDB4NTgsIDB4 RDIsIDB4NzQsIDB4ODUsIDB4RjQsIDB4QjUsIDB4OTMsIDB4OEUsIDB4RjUsIDB4MDMsIDB4RUEs IDB4MkQsCisrICAweEM4LCAweDUyLCAweEZBLCAweENGLCAweDdFLCAweDM1LCAweEIwLCAweDZB LCAweEFGLCAweDk1LCAweEMwLCAweDAwLAorKyAgMHg1NCwgMHg3NiwgMHgzRCwgMHgwQywgMHg5 QywgMHhCMiwgMHhFRSwgMHhDMAorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg a2F0X1JTQV9QU1NfU0hBMjU2W10gPSB7CisrICAweDZELCAweDNELCAweEJFLCAweDhGLCAweDYw LCAweDZELCAweDI1LCAweDE0LCAweEYwLCAweDMxLCAweEUzLCAweDg5LAorKyAgMHgwMCwgMHg5 NywgMHhGQSwgMHg5OSwgMHg3MSwgMHgyOCwgMHhFNSwgMHgxMCwgMHgyNSwgMHg5QSwgMHhGMywg MHg4RiwKKysgIDB4N0IsIDB4QzUsIDB4QTgsIDB4NEEsIDB4NzQsIDB4NTEsIDB4MzYsIDB4RTIs IDB4OEQsIDB4N0QsIDB4NzMsIDB4MjgsCisrICAweEMxLCAweDc3LCAweEM2LCAweDI3LCAweDk3 LCAweDAwLCAweDhCLCAweDAwLCAweEEzLCAweDk2LCAweDczLCAweDRFLAorKyAgMHg3RCwgMHgy RSwgMHgyQywgMHgzNCwgMHg2OCwgMHg4QywgMHg4RSwgMHhERiwgMHg5RCwgMHg0OSwgMHg0Nywg MHgwNSwKKysgIDB4QUIsIDB4RjUsIDB4MDEsIDB4RDYsIDB4ODEsIDB4NDcsIDB4NzAsIDB4RjUs IDB4MUQsIDB4NkQsIDB4MjYsIDB4QkEsCisrICAweDJGLCAweDdBLCAweDU0LCAweDUzLCAweDRF LCAweEVELCAweDcxLCAweEQ5LCAweDVBLCAweEYzLCAweERBLCAweEI2LAorKyAgMHgwQiwgMHg0 NywgMHgzNCwgMHhBRiwgMHg5MCwgMHhEQywgMHhDOCwgMHhEOSwgMHg2RiwgMHg1NiwgMHhDRCwg MHg5RiwKKysgIDB4MjEsIDB4QjcsIDB4N0UsIDB4QUQsIDB4N0MsIDB4MkYsIDB4NzUsIDB4NTAs IDB4NDcsIDB4MTIsIDB4RTQsIDB4NkQsCisrICAweDVGLCAweEI3LCAweDAxLCAweERGLCAweEMz LCAweDExLCAweDZDLCAweEE5LCAweDlFLCAweDQ5LCAweEI5LCAweEY2LAorKyAgMHg3MiwgMHhG NCwgMHhGNiwgMHhFRiwgMHg4OCwgMHgxRSwgMHgyRCwgMHgxQworK307CisrCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMzg0W10gPSB7CisrICAweDQwLCAweEZC LCAweEExLCAweDIxLCAweEY0LCAweEIyLCAweDQwLCAweDlBLCAweEI0LCAweDMxLCAweEE4LCAw eEYyLAorKyAgMHhFQywgMHgxQywgMHhDNCwgMHhDOCwgMHg3QywgMHgyMiwgMHg2NSwgMHg5Qywg MHg1NywgMHg0NSwgMHhDRCwgMHg1RSwKKysgIDB4ODYsIDB4MDAsIDB4RjcsIDB4MjUsIDB4Nzgs IDB4REUsIDB4REMsIDB4N0EsIDB4NzEsIDB4NDQsIDB4OUEsIDB4Q0QsCisrICAweEFBLCAweDI1 LCAweEY0LCAweEIyLCAweEZDLCAweEYwLCAweDc1LCAweEQ5LCAweDJGLCAweDc4LCAweDIzLCAw eDdGLAorKyAgMHg2RiwgMHgwMiwgMHhFRiwgMHhDMSwgMHhBRiwgMHhBNiwgMHgyOCwgMHgxNiwg MHgzMSwgMHhEQywgMHg0MiwgMHg2QywKKysgIDB4QjIsIDB4NDQsIDB4RTUsIDB4NEQsIDB4NjYs IDB4QTIsIDB4RTYsIDB4NzEsIDB4RjMsIDB4QUMsIDB4NEYsIDB4RkIsCisrICAweDkxLCAweENB LCAweEY1LCAweDcwLCAweEVGLCAweDZCLCAweDlELCAweEE0LCAweEVGLCAweEQ5LCAweDNELCAw eDJGLAorKyAgMHgzQSwgMHhCRSwgMHg4OSwgMHgzOCwgMHg1OSwgMHgwMSwgMHhCQSwgMHhEQSwg MHgzMiwgMHhBRCwgMHg0MiwgMHg4OSwKKysgIDB4OTgsIDB4OEIsIDB4MzksIDB4NDQsIDB4RjAs IDB4RkMsIDB4MzgsIDB4QUMsIDB4ODcsIDB4MUYsIDB4Q0EsIDB4NkYsCisrICAweDQ4LCAweEY2 LCAweEFFLCAweEQ3LCAweDQ1LCAweEVFLCAweEFFLCAweDg4LCAweDBFLCAweDYwLCAweEY0LCAw eDU1LAorKyAgMHg0OCwgMHg0NCwgMHhFRSwgMHgxRiwgMHg5MCwgMHgxOCwgMHg0QiwgMHhGMQor K307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBNTEyW10g PSB7CisrICAweDA3LCAweDFFLCAweEQ4LCAweEQ1LCAweDA1LCAweEU4LCAweEU2LCAweEU2LCAw eDU3LCAweEFFLCAweDYzLCAweDhDLAorKyAgMHhDNiwgMHg4MywgMHhCNywgMHhBMCwgMHg1OSwg MHhCQiwgMHhGMiwgMHhDNiwgMHg4RiwgMHgxMiwgMHg1MywgMHg5QSwKKysgIDB4OUIsIDB4NTQs IDB4OUUsIDB4QjMsIDB4QzEsIDB4MUQsIDB4MjMsIDB4NEQsIDB4NTEsIDB4RUQsIDB4OUUsIDB4 REQsCisrICAweDRCLCAweEYzLCAweDQ2LCAweDlCLCAweDZCLCAweEY2LCAweDdDLCAweDI0LCAw eDYwLCAweDc5LCAweDIzLCAweDM5LAorKyAgMHgwMSwgMHgxQywgMHg1MSwgMHhDQiwgMHhEOCwg MHhFOSwgMHg5QSwgMHgwMSwgMHg2NywgMHg1RiwgMHhGRSwgMHhENywKKysgIDB4N0MsIDB4RTMs IDB4N0YsIDB4RUQsIDB4REIsIDB4ODcsIDB4QkIsIDB4RjAsIDB4M0QsIDB4NzgsIDB4NTUsIDB4 NjEsCisrICAweDU3LCAweEUzLCAweDBGLCAweEUzLCAweEQyLCAweDlELCAweDBDLCAweDJBLCAw eDIwLCAweEIwLCAweDg1LCAweDEzLAorKyAgMHhDNSwgMHg0NywgMHgzNCwgMHgwRCwgMHgzMiwg MHgxNSwgMHhDOCwgMHhBRSwgMHg5QSwgMHg2QSwgMHgzOSwgMHg2MywKKysgIDB4MkQsIDB4NjAs IDB4RjUsIDB4NEMsIDB4REYsIDB4OEEsIDB4NDgsIDB4NEIsIDB4QkYsIDB4RjQsIDB4QTgsIDB4 RkUsCisrICAweDc2LCAweEYyLCAweDMyLCAweDFCLCAweDlDLCAweDdDLCAweENBLCAweEZFLCAw eDdGLCAweDgwLCAweEMyLCAweDg4LAorKyAgMHg1QywgMHg5NywgMHg3MCwgMHhCNCwgMHgyNiwg MHhDOSwgMHgxNCwgMHg4QgorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0 X1JTQV9TSEExW10gPSB7CisrICAweDcxLCAweEVFLCAweDFBLCAweEMwLCAweEZFLCAweDAxLCAw eDkzLCAweDU0LCAweDc5LCAweDVDLCAweEYyLCAweDRDLAorKyAgMHg0QSwgMHhGRCwgMHgxQSwg MHgwNSwgMHg4RiwgMHg2NCwgMHhCMSwgMHg2RCwgMHg2MSwgMHgzMywgMHg4RCwgMHg5QiwKKysg IDB4RTcsIDB4RkQsIDB4NjAsIDB4QTMsIDB4ODMsIDB4QjUsIDB4QTMsIDB4NTEsIDB4NTUsIDB4 NzcsIDB4OTAsIDB4Q0YsCisrICAweERDLCAweDIyLCAweDM3LCAweDhFLCAweEQwLCAweEUxLCAw eEFFLCAweDA5LCAweEUzLCAweDNELCAweDFFLCAweEY4LAorKyAgMHg4MCwgMHhEMSwgMHg4Qiwg MHhDMiwgMHhFQywgMHgwQSwgMHhENywgMHg2QiwgMHg4OCwgMHg4QiwgMHg4QiwgMHhBMSwKKysg IDB4MjAsIDB4MjIsIDB4QkUsIDB4NTksIDB4NUIsIDB4RTAsIDB4MjMsIDB4MjQsIDB4QTEsIDB4 NDksIDB4MzAsIDB4QkEsCisrICAweEE5LCAweDlFLCAweEU4LCAweEIxLCAweDhBLCAweDYyLCAw eDE2LCAweEJGLCAweDRFLCAweENBLCAweDJFLCAweDRFLAorKyAgMHhCQywgMHgyOSwgMHhBOCwg MHg2NywgMHgxMywgMHhCNywgMHg5RiwgMHgxRCwgMHgwNCwgMHg0NCwgMHhFNSwgMHg1RiwKKysg IDB4MzUsIDB4MDcsIDB4MTEsIDB4QkMsIDB4RUQsIDB4MTksIDB4MzcsIDB4MjEsIDB4Q0YsIDB4 MjMsIDB4NDgsIDB4MUYsCisrICAweDcyLCAweDA1LCAweERFLCAweEU2LCAweEU4LCAweDdGLCAw eDMzLCAweDhBLCAweDc2LCAweDRCLCAweDJGLCAweDk1LAorKyAgMHhERiwgMHhGMSwgMHg1Riwg MHg4NCwgMHg4MCwgMHhEOSwgMHg0NiwgMHhCNAorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIga2F0X1JTQV9TSEEyMjRbXSA9IHsKKysgIDB4NjIsIDB4QUEsIDB4NzksIDB4QTks IDB4MTgsIDB4MEUsIDB4NUYsIDB4OEMsIDB4QkIsIDB4QjcsIDB4MTUsIDB4RjksCisrICAweDI1 LCAweEJCLCAweEZBLCAweEQ0LCAweDNBLCAweDM0LCAweEVELCAweDlFLCAweEEwLCAweEE5LCAw eDE4LCAweDhELAorKyAgMHg1QiwgMHg1NSwgMHg5QSwgMHg3RSwgMHgxRSwgMHgwOCwgMHgwOCwg MHg2MCwgMHhDNSwgMHgxQSwgMHhDNSwgMHg4OSwKKysgIDB4MDgsIDB4RTIsIDB4MUIsIDB4QkQs IDB4NjIsIDB4NTAsIDB4MTcsIDB4NzYsIDB4MzAsIDB4MkMsIDB4OUUsIDB4Q0QsCisrICAweEE0 LCAweDAyLCAweEFELCAweEIxLCAweDZELCAweDQ0LCAweDZELCAweEQ1LCAweEM2LCAweDQ1LCAw eDQxLCAweEU1LAorKyAgMHhFRSwgMHgxRiwgMHg4RCwgMHg3RSwgMHgwOCwgMHgxNiwgMHhBNiwg MHhFMSwgMHg1RSwgMHgwQiwgMHhBOSwgMHhDQywKKysgIDB4REIsIDB4NTksIDB4NTUsIDB4ODcs IDB4MDksIDB4MjUsIDB4NzAsIDB4ODYsIDB4ODQsIDB4MDIsIDB4QzYsIDB4M0IsCisrICAweDBC LCAweDQ0LCAweDRDLCAweDQ2LCAweDk1LCAweEY0LCAweEY4LCAweDVBLCAweDkxLCAweDI4LCAw eDNFLCAweEIyLAorKyAgMHg1OCwgMHgyRSwgMHgwNiwgMHg0NSwgMHg0OSwgMHhFMCwgMHg5Miwg MHhFMiwgMHhDMCwgMHg2NiwgMHhFNiwgMHgzNSwKKysgIDB4RDksIDB4NzksIDB4N0YsIDB4MTcs IDB4NUUsIDB4MDIsIDB4NzMsIDB4MDQsIDB4NzcsIDB4ODIsIDB4RTYsIDB4REMsCisrICAweDQw LCAweDIxLCAweDg5LCAweDhCLCAweDM3LCAweDNFLCAweDFFLCAweDhECisrfTsKKysKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTI1NltdID0geworKyAgMHgwRCwgMHg1 NSwgMHhFMiwgMHhBQSwgMHg4MSwgMHhEQiwgMHg4RSwgMHg4MiwgMHgwNSwgMHgxNywgMHhBNSwg MHgyMywKKysgIDB4RTcsIDB4M0IsIDB4MUQsIDB4QUYsIDB4RkIsIDB4OEMsIDB4RDAsIDB4ODEs IDB4MjAsIDB4N0IsIDB4QUEsIDB4MjMsCisrICAweDkyLCAweDg3LCAweDhDLCAweEQxLCAweDUz LCAweDg1LCAweDE2LCAweERDLCAweEJFLCAweEFELCAweDZGLCAweDM1LAorKyAgMHg5OCwgMHgy RCwgMHg2OSwgMHg4NCwgMHhCRiwgMHhEOSwgMHg4QSwgMHgwMSwgMHgxNywgMHg1OCwgMHhCMiwg MHg2RSwKKysgIDB4MkMsIDB4NDQsIDB4OUIsIDB4OTAsIDB4RjEsIDB4RkIsIDB4NTEsIDB4RTgs IDB4NkEsIDB4OTAsIDB4MkQsIDB4MTgsCisrICAweDBFLCAweEMwLCAweDkwLCAweDEwLCAweDI0 LCAweEE5LCAweDFELCAweEIzLCAweDU4LCAweDdBLCAweDkxLCAweDMwLAorKyAgMHhCRSwgMHgy MiwgMHhDNywgMHhEMywgMHhFQywgMHhDMywgMHgwOSwgMHg1RCwgMHhCRiwgMHhFMiwgMHg4MCwg MHgzQSwKKysgIDB4N0MsIDB4ODUsIDB4QjQsIDB4QkMsIDB4RDEsIDB4RTksIDB4RjAsIDB4NUMs IDB4REUsIDB4ODEsIDB4QTYsIDB4MzgsCisrICAweEI4LCAweDQyLCAweEJCLCAweDg2LCAweEM1 LCAweDlELCAweENFLCAweDdDLCAweDJDLCAweEVFLCAweEQxLCAweERBLAorKyAgMHgyNywgMHg0 OCwgMHgyQiwgMHhGNSwgMHhBQiwgMHhCOSwgMHhGNywgMHg4MCwgMHhEMSwgMHg5MCwgMHgyNywg MHg5MCwKKysgIDB4QkQsIDB4NDQsIDB4OTcsIDB4NjAsIDB4Q0QsIDB4NTcsIDB4QzAsIDB4N0EK Kyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMzg0W10gPSB7 CisrICAweDFELCAweEUzLCAweDZBLCAweERELCAweDI3LCAweDRDLCAweEMwLCAweEE1LCAweDI3 LCAweEVGLCAweEU2LCAweDFGLAorKyAgMHhEMiwgMHg5MSwgMHg2OCwgMHg1OSwgMHgwNCwgMHhB RSwgMHhCRCwgMHg5OSwgMHg2MywgMHg1NiwgMHg0NywgMHhDNywKKysgIDB4NkYsIDB4MjIsIDB4 MTYsIDB4NDgsIDB4RDAsIDB4RjksIDB4MTgsIDB4QTksIDB4Q0EsIDB4RkEsIDB4NUQsIDB4NUMs CisrICAweEE3LCAweDY1LCAweDUyLCAweDhBLCAweEM4LCAweDQ0LCAweDdFLCAweDg2LCAweDVE LCAweEE5LCAweEE2LCAweDU1LAorKyAgMHg2NSwgMHgzRSwgMHhEOSwgMHgyRCwgMHgwMiwgMHgz OCwgMHhBOCwgMHg3OSwgMHgyOCwgMHg3RiwgMHhCNiwgMHhDRiwKKysgIDB4ODIsIDB4REQsIDB4 N0UsIDB4NTUsIDB4RTEsIDB4QjEsIDB4QkMsIDB4RTIsIDB4MTksIDB4MkIsIDB4MzAsIDB4QzIs CisrICAweDFCLCAweDJCLCAweEIwLCAweDgyLCAweDQ2LCAweEFDLCAweDRCLCAweEQxLCAweEUy LCAweDdELCAweEVCLCAweDhDLAorKyAgMHhGRiwgMHg5NSwgMHhFOSwgMHg2QSwgMHgxQywgMHgz RCwgMHg0RCwgMHhCRiwgMHg4RiwgMHg4QiwgMHg5QywgMHhDRCwKKysgIDB4RUEsIDB4ODUsIDB4 RUUsIDB4MDAsIDB4REMsIDB4MUMsIDB4QTcsIDB4RUIsIDB4RDAsIDB4OEYsIDB4OTksIDB4RjEs CisrICAweDE2LCAweDI4LCAweDI0LCAweDY0LCAweDA0LCAweDM5LCAweDJELCAweDU4LCAweDFF LCAweDM3LCAweERDLCAweDA0LAorKyAgMHhCRCwgMHgzMSwgMHhBMiwgMHgyRiwgMHhCMywgMHgz NSwgMHg1NiwgMHhCRgorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JT QV9TSEE1MTJbXSA9IHsKKysgIDB4NjksIDB4NTIsIDB4MUIsIDB4NTEsIDB4NUUsIDB4MDYsIDB4 Q0EsIDB4OUIsIDB4MTYsIDB4NTEsIDB4NUQsIDB4Q0YsCisrICAweDQ5LCAweDI1LCAweDRBLCAw eEExLCAweDZBLCAweDc3LCAweDRDLCAweDM2LCAweDQwLCAweEY4LCAweEIyLCAweDlBLAorKyAg MHgxNSwgMHhFQSwgMHg1QywgMHhFNSwgMHhFNiwgMHg4MiwgMHhFMCwgMHg4NiwgMHg4MiwgMHg2 QiwgMHgzMiwgMHhGMSwKKysgIDB4MDQsIDB4QzEsIDB4NUEsIDB4MUEsIDB4RUQsIDB4MUUsIDB4 OUEsIDB4QjYsIDB4NEMsIDB4NTQsIDB4OUYsIDB4RDgsCisrICAweDhELCAweENDLCAweEFDLCAw eDhBLCAweEJCLCAweDlDLCAweDgyLCAweDNGLCAweEE2LCAweDUzLCAweDYyLCAweEI1LAorKyAg MHg4MCwgMHhFMiwgMHhCQywgMHhERCwgMHg2NywgMHgyQiwgMHhEOSwgMHgzRiwgMHhFNCwgMHg3 NSwgMHg5MiwgMHg2QiwKKysgIDB4QUYsIDB4NjIsIDB4N0MsIDB4NTIsIDB4RjAsIDB4RUUsIDB4 MzMsIDB4REYsIDB4MUIsIDB4MUQsIDB4NDcsIDB4RTYsCisrICAweDU5LCAweDU2LCAweEE1LCAw eEI5LCAweDVDLCAweEU2LCAweDc3LCAweDc4LCAweDE2LCAweDYzLCAweDg0LCAweDA1LAorKyAg MHg2RiwgMHgwRSwgMHgyQiwgMHgzMSwgMHg5RCwgMHhGNywgMHg3RiwgMHhCMiwgMHg2NCwgMHg3 MSwgMHhFMCwgMHgyRCwKKysgIDB4M0UsIDB4NjIsIDB4Q0UsIDB4QjUsIDB4M0YsIDB4ODgsIDB4 REYsIDB4MkQsIDB4QUIsIDB4OTgsIDB4NjUsIDB4OTEsCisrICAweERGLCAweDcwLCAweDE0LCAw eEE1LCAweDNGLCAweDM2LCAweEFCLCAweDg0CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBMVtdID0geworKyAgMHg4NiwgMHhCNCwgMHgxOCwgMHhC QSwgMHhEMSwgMHg4MCwgMHhCNiwgMHg3QywgMHg0MiwgMHg0NSwgMHg0RCwgMHhERiwKKysgIDB4 RTksIDB4MkQsIDB4RTEsIDB4ODMsIDB4NUYsIDB4QjUsIDB4MkYsIDB4QzksIDB4Q0QsIDB4QzQs IDB4QjIsIDB4NzUsCisrICAweDgwLCAweEE0LCAweEYxLCAweDRBLCAweEU3LCAweDgzLCAweDEy LCAweDFFLCAweDFFLCAweDE0LCAweEI4LCAweEFDLAorKyAgMHgzNSwgMHhFMiwgMHhBQSwgMHgw QiwgMHg1QywgMHhGOCwgMHgzOCwgMHg0RCwgMHgwNCwgMHhFRSwgMHhBOSwgMHg5NywKKysgIDB4 NzAsIDB4RkIsIDB4NUUsIDB4RTcsIDB4QjcsIDB4RTMsIDB4NjIsIDB4MjMsIDB4NEIsIDB4Mzgs IDB4QkUsIDB4RDYsCisrICAweDUzLCAweDE1LCAweEY3LCAweERGLCAweDg3LCAweEI0LCAweDBF LCAweENDLCAweEIxLCAweDFBLCAweDExLCAweDE5LAorKyAgMHhFRSwgMHg1MSwgMHhDQywgMHg5 MiwgMHhERCwgMHhCQywgMHg2MywgMHgyOSwgMHg2MywgMHgwQywgMHg1OSwgMHhENywKKysgIDB4 NkYsIDB4NEMsIDB4M0MsIDB4MzcsIDB4NUIsIDB4MzcsIDB4MDMsIDB4NjEsIDB4N0QsIDB4MjQs IDB4MUMsIDB4OTksCisrICAweDQ4LCAweEFGLCAweDgyLCAweEZFLCAweDMyLCAweDQxLCAweDlC LCAweEIyLCAweERCLCAweEVBLCAweEVELCAweDc2LAorKyAgMHg4RSwgMHg2RSwgMHhDQSwgMHg3 RSwgMHg0RSwgMHgxNCwgMHhCQSwgMHgzMCwgMHg4NCwgMHgxQywgMHhCMywgMHg2NywKKysgIDB4 QTMsIDB4MjksIDB4ODAsIDB4NzAsIDB4NTQsIDB4NjgsIDB4N0QsIDB4NDkKKyt9OworKworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEEyNTZbXSA9IHsKKysgIDB4 N0UsIDB4QTIsIDB4NzcsIDB4RkUsIDB4QjgsIDB4NTQsIDB4OEEsIDB4QzcsIDB4N0YsIDB4NjQs IDB4NTQsIDB4ODksCisrICAweEU1LCAweDUyLCAweDE1LCAweDhFLCAweDUyLCAweDk2LCAweDRF LCAweEE2LCAweDU4LCAweDkyLCAweDFDLCAweERELAorKyAgMHhFQSwgMHhBMiwgMHgyRCwgMHg1 QywgMHhEMSwgMHg2MiwgMHgwMCwgMHg0OSwgMHgwNSwgMHg5NSwgMHg3MywgMHhDRiwKKysgIDB4 MTYsIDB4NzYsIDB4NjgsIDB4RjYsIDB4QzYsIDB4NUUsIDB4ODAsIDB4QjgsIDB4QjgsIDB4N0Is IDB4QzgsIDB4OUIsCisrICAweEM2LCAweDUzLCAweDg4LCAweDI2LCAweDIwLCAweDg4LCAweDcz LCAweEI2LCAweDEzLCAweEI4LCAweEYwLCAweDRCLAorKyAgMHgwMCwgMHg4NSwgMHhGMywgMHhE RCwgMHgwNywgMHg1MCwgMHhFQiwgMHgyMCwgMHhDNCwgMHgzOCwgMHgwRSwgMHg5OCwKKysgIDB4 QUQsIDB4NEUsIDB4NDksIDB4MkMsIDB4RDcsIDB4NjUsIDB4QTUsIDB4MTksIDB4MEUsIDB4NTks IDB4MDEsIDB4RUMsCisrICAweDdFLCAweDc1LCAweDg5LCAweDY5LCAweDJFLCAweDYzLCAweDc2 LCAweDg1LCAweDQ2LCAweDhELCAweEEwLCAweDhDLAorKyAgMHgzMywgMHgxRCwgMHg4MiwgMHg4 QywgMHgwMywgMHhFQSwgMHg2OSwgMHg4OCwgMHgzNSwgMHhBMSwgMHg0MiwgMHhCRCwKKysgIDB4 MjEsIDB4RUQsIDB4OEQsIDB4QkMsIDB4QkMsIDB4REIsIDB4MzAsIDB4RkYsIDB4ODYsIDB4RjAs IDB4NUIsIDB4REMsCisrICAweEUzLCAweEUyLCAweEU4LCAweDBBLCAweDBBLCAweDI5LCAweDk0 LCAweDgwCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFf U0hBMzg0W10gPSB7CisrICAweDVDLCAweDdELCAweDk2LCAweDM1LCAweEVDLCAweDdFLCAweDEx LCAweDM4LCAweEJCLCAweDdCLCAweEVDLCAweDdCLAorKyAgMHhGMiwgMHg4MiwgMHg4RSwgMHg5 OSwgMHhCRCwgMHhFRiwgMHhEOCwgMHhBRSwgMHhENywgMHgzOSwgMHgzNywgMHhDQiwKKysgIDB4 RTYsIDB4NEYsIDB4NUUsIDB4MEEsIDB4MTMsIDB4RTQsIDB4MkUsIDB4NDAsIDB4QjksIDB4QkUs IDB4MkUsIDB4RTMsCisrICAweEVGLCAweDc4LCAweDgzLCAweDE4LCAweDQ0LCAweDM1LCAweDlD LCAweDhFLCAweEQ3LCAweDRBLCAweDYzLCAweEY2LAorKyAgMHg1NywgMHhDMiwgMHhCMCwgMHgw OCwgMHg1MSwgMHg3MywgMHhDRiwgMHhDQSwgMHg5OSwgMHg2NiwgMHhFRSwgMHgzMSwKKysgIDB4 RDgsIDB4NjksIDB4RTksIDB4QUIsIDB4MTMsIDB4MjcsIDB4N0IsIDB4NDEsIDB4MUUsIDB4NkQs IDB4OEQsIDB4RjEsCisrICAweDNFLCAweDlDLCAweDM1LCAweDk1LCAweDU4LCAweERELCAweDJC LCAweEQ1LCAweEEwLCAweDYwLCAweDQxLCAweDc5LAorKyAgMHgyNCwgMHgyMiwgMHhFNCwgMHhC NywgMHhCRiwgMHg0NywgMHg1MywgMHhGNiwgMHgzNCwgMHhENSwgMHg3QywgMHhGRiwKKysgIDB4 MEUsIDB4MDksIDB4RUUsIDB4MkUsIDB4RTIsIDB4MzcsIDB4QjksIDB4REUsIDB4QzUsIDB4MTIs IDB4NDQsIDB4MzUsCisrICAweEVGLCAweDAxLCAweEU2LCAweDVFLCAweDM5LCAweDMxLCAweDJE LCAweDcxLCAweEE1LCAweERDLCAweEM2LCAweDZELAorKyAgMHhFMiwgMHhDRCwgMHg4NSwgMHhE QiwgMHg3MywgMHg4MiwgMHg2NSwgMHgyOAorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIga2F0X1JTQV9YOTMxX1NIQTUxMltdID0geworKyAgMHhBNiwgMHg2NSwgMHhBMiwgMHg3 NywgMHg0RiwgMHhCMywgMHg4NiwgMHhDQiwgMHg2NCwgMHgzQSwgMHhDMSwgMHg2MywKKysgIDB4 RkMsIDB4QTEsIDB4QUEsIDB4Q0IsIDB4OUIsIDB4NzksIDB4REQsIDB4NEIsIDB4RTEsIDB4RDks IDB4REEsIDB4QUMsCisrICAweEU3LCAweDQ3LCAweDA5LCAweEIyLCAweDExLCAweDRCLCAweDhB LCAweEFBLCAweDA1LCAweDlFLCAweDc3LCAweEQ3LAorKyAgMHgzQSwgMHhCRCwgMHg1RSwgMHg1 MywgMHgwOSwgMHg0QSwgMHhFNiwgMHgwRiwgMHg1RSwgMHhGOSwgMHgxNCwgMHgyOCwKKysgIDB4 QTAsIDB4OTksIDB4NzQsIDB4NjQsIDB4NzAsIDB4NEUsIDB4RjIsIDB4RTMsIDB4RkEsIDB4Qzcs IDB4RjgsIDB4QzUsCisrICAweDZFLCAweDJCLCAweDc5LCAweDk2LCAweDBELCAweDBDLCAweEM4 LCAweDEwLCAweDM0LCAweDUzLCAweEQyLCAweEFGLAorKyAgMHgxNywgMHgwRSwgMHhFMCwgMHhC RiwgMHg3OSwgMHhGNiwgMHgwNCwgMHg3MiwgMHgxMCwgMHhFMCwgMHhGNiwgMHhEMCwKKysgIDB4 Q0UsIDB4OEEsIDB4NkYsIDB4QTEsIDB4OTUsIDB4ODksIDB4QkYsIDB4NTgsIDB4OEYsIDB4NDYs IDB4NUYsIDB4MDksCisrICAweDlGLCAweDA5LCAweENBLCAweDg0LCAweDE1LCAweDg1LCAweEUw LCAweEVELCAweDA0LCAweDJELCAweEZCLCAweDdDLAorKyAgMHgzNiwgMHgzNSwgMHgyMSwgMHgz MSwgMHhDMywgMHhGRCwgMHg5MiwgMHg0MiwgMHgxMSwgMHgzMCwgMHg3MSwgMHgxQiwKKysgIDB4 NjAsIDB4ODMsIDB4MTgsIDB4ODgsIDB4QTMsIDB4RjUsIDB4NTksIDB4QzMKKyt9OworKworKwor K2ludCBGSVBTX3NlbGZ0ZXN0X3JzYSgpCisrCXsKKysJaW50IHJldCA9IDA7CisrCVJTQSAqa2V5 OworKwlFVlBfUEtFWSAqcGsgPSBOVUxMOworKworKwlpZiAoKGtleT1SU0FfbmV3KCkpID09IE5V TEwpCisrCQlnb3RvIGVycjsKKysJc2V0cnNha2V5KGtleSk7CisrCWlmICgocGs9RVZQX1BLRVlf bmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysKKysJRVZQX1BLRVlfYXNzaWduX1JTQShw aywga2V5KTsKKysKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMs IHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfU0hBMSwgc2l6ZW9mKGthdF9SU0Ff U0hBMSksCisrCQkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCisrCQkJ CSJSU0EgU0hBMSBQS0NTIzEiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JT QV9TSEEyMjQsIHNpemVvZihrYXRfUlNBX1NIQTIyNCksCisrCQkJCUVWUF9zaGEyMjQoKSwgRVZQ X01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJIlJTQSBTSEEyMjQgUEtDUyMxIikpCisrCQln b3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNp emVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfU0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9T SEEyNTYpLAorKwkJCQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCisr CQkJCSJSU0EgU0hBMjU2IFBLQ1MjMSIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5 X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlr YXRfUlNBX1NIQTM4NCwgc2l6ZW9mKGthdF9SU0FfU0hBMzg0KSwKKysJCQkJRVZQX3NoYTM4NCgp LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAorKwkJCQkiUlNBIFNIQTM4NCBQS0NTIzEiKSkK KysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ri cywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9TSEE1MTIsIHNpemVvZihrYXRf UlNBX1NIQTUxMiksCisrCQkJCUVWUF9zaGE1MTIoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NT MSwKKysJCQkJIlJTQSBTSEE1MTIgUEtDUyMxIikpCisrCQlnb3RvIGVycjsKKysKKysJaWYgKCFm aXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEs CisrCQkJCWthdF9SU0FfUFNTX1NIQTEsIHNpemVvZihrYXRfUlNBX1BTU19TSEExKSwKKysJCQkJ RVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCisrCQkJCSJSU0EgU0hBMSBQU1Mi KSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0 X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9QU1NfU0hBMjI0LCBzaXpl b2Yoa2F0X1JTQV9QU1NfU0hBMjI0KSwKKysJCQkJRVZQX3NoYTIyNCgpLCBFVlBfTURfQ1RYX0ZM QUdfUEFEX1BTUywKKysJCQkJIlJTQSBTSEEyMjQgUFNTIikpCisrCQlnb3RvIGVycjsKKysJaWYg KCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAt IDEsCisrCQkJCWthdF9SU0FfUFNTX1NIQTI1Niwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTI1Niks CisrCQkJCUVWUF9zaGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCisrCQkJCSJSU0Eg U0hBMjU2IFBTUyIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90 ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1BTU19T SEEzODQsIHNpemVvZihrYXRfUlNBX1BTU19TSEEzODQpLAorKwkJCQlFVlBfc2hhMzg0KCksIEVW UF9NRF9DVFhfRkxBR19QQURfUFNTLAorKwkJCQkiUlNBIFNIQTM4NCBQU1MiKSkKKysJCWdvdG8g ZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9m KGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9QU1NfU0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9Q U1NfU0hBNTEyKSwKKysJCQkJRVZQX3NoYTUxMigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywK KysJCQkJIlJTQSBTSEE1MTIgUFNTIikpCisrCQlnb3RvIGVycjsKKysKKysKKysJaWYgKCFmaXBz X3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisr CQkJa2F0X1JTQV9YOTMxX1NIQTEsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBMSksCisrCQkJRVZQ X3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAorKwkJCSJSU0EgU0hBMSBYOTMxIikp CisrCQlnb3RvIGVycjsKKysJLyogTkI6IFNIQTIyNCBub3Qgc3VwcG9ydGVkIGluIFg5LjMxICov CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0 X3RicykgLSAxLAorKwkJCWthdF9SU0FfWDkzMV9TSEEyNTYsIHNpemVvZihrYXRfUlNBX1g5MzFf U0hBMjU2KSwKKysJCQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKKysJ CQkiUlNBIFNIQTI1NiBYOTMxIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJa2F0X1JT QV9YOTMxX1NIQTM4NCwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEEzODQpLAorKwkJCUVWUF9zaGEz ODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAorKwkJCSJSU0EgU0hBMzg0IFg5MzEiKSkK KysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ri cywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQlrYXRfUlNBX1g5MzFfU0hBNTEyLCBzaXplb2Yo a2F0X1JTQV9YOTMxX1NIQTUxMiksCisrCQkJRVZQX3NoYTUxMigpLCBFVlBfTURfQ1RYX0ZMQUdf UEFEX1g5MzEsCisrCQkJIlJTQSBTSEE1MTIgWDkzMSIpKQorKwkJZ290byBlcnI7CisrCisrCisr CXJldCA9IDE7CisrCisrCWVycjoKKysJaWYgKHBrKQorKwkJRVZQX1BLRVlfZnJlZShwayk7Cisr CWVsc2UgaWYgKGtleSkKKysJCVJTQV9mcmVlKGtleSk7CisrCXJldHVybiByZXQ7CisrCX0KKysK KysjZW5kaWYgLyogZGVmIE9QRU5TU0xfRklQUyAqLworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1i ZXRhMy9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRh My9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9j cnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jLmZpcHMJMjAxMi0wMi0yOSAxMDozMzowMi43OTky OTQ5MzkgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcnNh X3g5MzFnLmMJMjAxMi0wMi0yOSAxMDozMzowMi43OTkyOTQ5MzkgKzAxMDAKK0BAIC0wLDAgKzEs MjgyIEBACisrLyogY3J5cHRvL3JzYS9yc2FfZ2VuLmMgKi8KKysvKiBDb3B5cmlnaHQgKEMpIDE5 OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKysgKiBBbGwgcmlnaHRzIHJl c2VydmVkLgorKyAqCisrICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3 cml0dGVuCisrICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorKyAqIFRoZSBp bXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVz IFNTTC4KKysgKiAKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQg bm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKysgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcHBseSB0 byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNB LAorKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRo ZSBTU0wgZG9jdW1lbnRhdGlvbgorKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24g aXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKysgKiBleGNlcHQgdGhhdCB0 aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKiAKKysgKiBD b3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQg bm90aWNlcyBpbgorKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKysgKiBJZiB0 aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdp dmVuIGF0dHJpYnV0aW9uCisrICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxp YnJhcnkgdXNlZC4KKysgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVz c2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKysgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUg b3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKysgKiAKKysgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKyAqICAgIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisrICog My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzIHNvZnR3YXJlCisrICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBz b2Z0d2FyZSB3cml0dGVuIGJ5CisrICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29t KSIKKysgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRo ZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKysgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5 cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKysgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93 cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKysgKiAgICB0 aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4g YWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg d3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisrICogCisrICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKysgKiBB TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKyAqIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisr ICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwKKysgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworKyAqIE9SIFNFUlZJQ0VT OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisrICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorKyAqIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC SUxJVFkgT0YKKysgKiBTVUNIIERBTUFHRS4KKysgKiAKKysgKiBUaGUgbGljZW5jZSBhbmQgZGlz dHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgor KyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlz IGNvZGUgY2Fubm90IHNpbXBseSBiZQorKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIg ZGlzdHJpYnV0aW9uIGxpY2VuY2UKKysgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2Vu Y2UuXQorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4K KysjaW5jbHVkZSA8dGltZS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2lmZGVmIE9QRU5T U0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysKKytleHRlcm4gaW50IGZpcHNf Y2hlY2tfcnNhKFJTQSAqcnNhKTsKKysjZW5kaWYKKysKKysvKiBYOS4zMSBSU0Ega2V5IGRlcml2 YXRpb24gYW5kIGdlbmVyYXRpb24gKi8KKysKKytpbnQgUlNBX1g5MzFfZGVyaXZlX2V4KFJTQSAq cnNhLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLCBCSUdOVU0gKnExLCBCSUdOVU0gKnEyLAorKwkJ CWNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwgY29uc3QgQklHTlVNICpYcCwK KysJCQljb25zdCBCSUdOVU0gKlhxMSwgY29uc3QgQklHTlVNICpYcTIsIGNvbnN0IEJJR05VTSAq WHEsCisrCQkJY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpCisrCXsKKysJQklHTlVNICpy MD1OVUxMLCpyMT1OVUxMLCpyMj1OVUxMLCpyMz1OVUxMOworKwlCTl9DVFggKmN0eD1OVUxMLCpj dHgyPU5VTEw7CisrCisrCWlmICghcnNhKSAKKysJCWdvdG8gZXJyOworKworKwljdHggPSBCTl9D VFhfbmV3KCk7CisrCWlmICghY3R4KSAKKysJCWdvdG8gZXJyOworKwlCTl9DVFhfc3RhcnQoY3R4 KTsKKysKKysJcjAgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCXIxID0gQk5fQ1RYX2dldChjdHgpOwor KwlyMiA9IEJOX0NUWF9nZXQoY3R4KTsKKysJcjMgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCisrCWlm IChyMyA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCWlmICghcnNhLT5lKQorKwkJeworKwkJcnNh LT5lID0gQk5fZHVwKGUpOworKwkJaWYgKCFyc2EtPmUpCisrCQkJZ290byBlcnI7CisrCQl9Cisr CWVsc2UKKysJCWUgPSByc2EtPmU7CisrCisrCS8qIElmIG5vdCBhbGwgcGFyYW1ldGVycyBwcmVz ZW50IG9ubHkgY2FsY3VsYXRlIHdoYXQgd2UgY2FuLgorKwkgKiBUaGlzIGFsbG93cyB0ZXN0IHBy b2dyYW1zIHRvIG91dHB1dCBzZWxlY3RpdmUgcGFyYW1ldGVycy4KKysJICovCisrCisrCWlmIChY cCAmJiAhcnNhLT5wKQorKwkJeworKwkJcnNhLT5wID0gQk5fbmV3KCk7CisrCQlpZiAoIXJzYS0+ cCkKKysJCQlnb3RvIGVycjsKKysKKysJCWlmICghQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgocnNh LT5wLCBwMSwgcDIsCisrCQkJCQlYcCwgWHAxLCBYcDIsIGUsIGN0eCwgY2IpKQorKwkJCWdvdG8g ZXJyOworKwkJfQorKworKwlpZiAoWHEgJiYgIXJzYS0+cSkKKysJCXsKKysJCXJzYS0+cSA9IEJO X25ldygpOworKwkJaWYgKCFyc2EtPnEpCisrCQkJZ290byBlcnI7CisrCQlpZiAoIUJOX1g5MzFf ZGVyaXZlX3ByaW1lX2V4KHJzYS0+cSwgcTEsIHEyLAorKwkJCQkJWHEsIFhxMSwgWHEyLCBlLCBj dHgsIGNiKSkKKysJCQlnb3RvIGVycjsKKysJCX0KKysKKysJaWYgKCFyc2EtPnAgfHwgIXJzYS0+ cSkKKysJCXsKKysJCUJOX0NUWF9lbmQoY3R4KTsKKysJCUJOX0NUWF9mcmVlKGN0eCk7CisrCQly ZXR1cm4gMjsKKysJCX0KKysKKysJLyogU2luY2UgYm90aCBwcmltZXMgYXJlIHNldCB3ZSBjYW4g bm93IGNhbGN1bGF0ZSBhbGwgcmVtYWluaW5nIAorKwkgKiBjb21wb25lbnRzLgorKwkgKi8KKysK KysJLyogY2FsY3VsYXRlIG4gKi8KKysJcnNhLT5uPUJOX25ldygpOworKwlpZiAocnNhLT5uID09 IE5VTEwpCisrCQlnb3RvIGVycjsKKysJaWYgKCFCTl9tdWwocnNhLT5uLHJzYS0+cCxyc2EtPnEs Y3R4KSkKKysJCWdvdG8gZXJyOworKworKwkvKiBjYWxjdWxhdGUgZCAqLworKwlpZiAoIUJOX3N1 YihyMSxyc2EtPnAsQk5fdmFsdWVfb25lKCkpKQorKwkJZ290byBlcnI7CS8qIHAtMSAqLworKwlp ZiAoIUJOX3N1YihyMixyc2EtPnEsQk5fdmFsdWVfb25lKCkpKQorKwkJZ290byBlcnI7CS8qIHEt MSAqLworKwlpZiAoIUJOX211bChyMCxyMSxyMixjdHgpKQorKwkJZ290byBlcnI7CS8qIChwLTEp KHEtMSkgKi8KKysKKysJaWYgKCFCTl9nY2QocjMsIHIxLCByMiwgY3R4KSkKKysJCWdvdG8gZXJy OworKworKwlpZiAoIUJOX2RpdihyMCwgTlVMTCwgcjAsIHIzLCBjdHgpKQorKwkJZ290byBlcnI7 CS8qIExDTSgocC0xKShxLTEpKSAqLworKworKwljdHgyID0gQk5fQ1RYX25ldygpOworKwlpZiAo IWN0eDIpCisrCQlnb3RvIGVycjsKKysKKysJcnNhLT5kPUJOX21vZF9pbnZlcnNlKE5VTEwscnNh LT5lLHIwLGN0eDIpOwkvKiBkICovCisrCWlmIChyc2EtPmQgPT0gTlVMTCkKKysJCWdvdG8gZXJy OworKworKwkvKiBjYWxjdWxhdGUgZCBtb2QgKHAtMSkgKi8KKysJcnNhLT5kbXAxPUJOX25ldygp OworKwlpZiAocnNhLT5kbXAxID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysJaWYgKCFCTl9tb2Qo cnNhLT5kbXAxLHJzYS0+ZCxyMSxjdHgpKQorKwkJZ290byBlcnI7CisrCisrCS8qIGNhbGN1bGF0 ZSBkIG1vZCAocS0xKSAqLworKwlyc2EtPmRtcTE9Qk5fbmV3KCk7CisrCWlmIChyc2EtPmRtcTEg PT0gTlVMTCkKKysJCWdvdG8gZXJyOworKwlpZiAoIUJOX21vZChyc2EtPmRtcTEscnNhLT5kLHIy LGN0eCkpCisrCQlnb3RvIGVycjsKKysKKysJLyogY2FsY3VsYXRlIGludmVyc2Ugb2YgcSBtb2Qg cCAqLworKwlyc2EtPmlxbXA9Qk5fbW9kX2ludmVyc2UoTlVMTCxyc2EtPnEscnNhLT5wLGN0eDIp OworKworKwllcnI6CisrCWlmIChjdHgpCisrCQl7CisrCQlCTl9DVFhfZW5kKGN0eCk7CisrCQlC Tl9DVFhfZnJlZShjdHgpOworKwkJfQorKwlpZiAoY3R4MikKKysJCUJOX0NUWF9mcmVlKGN0eDIp OworKwkvKiBJZiB0aGlzIGlzIHNldCBhbGwgY2FsbHMgc3VjY2Vzc2Z1bCAqLworKwlpZiAocnNh ICYmIHJzYS0+aXFtcCAhPSBOVUxMKQorKwkJcmV0dXJuIDE7CisrCisrCXJldHVybiAwOworKwor Kwl9CisrCisraW50IFJTQV9YOTMxX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMs IGNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKQorKwl7CisrCWludCBvayA9IDA7CisrCUJJ R05VTSAqWHAgPSBOVUxMLCAqWHEgPSBOVUxMOworKwlCTl9DVFggKmN0eCA9IE5VTEw7CisrCisr I2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPmZsYWdzICYg UlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpICYmIAorKwkJKGJpdHMgPCBPUEVOU1NMX1JTQV9GSVBT X01JTl9NT0RVTFVTX0JJVFMpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5 MzFfR0VORVJBVEVfS0VZX0VYLEZJUFNfUl9LRVlfVE9PX1NIT1JUKTsKKysJICAgIHJldHVybiAw OworKwkgICAgfQorKworKwlpZiAoYml0cyAmIDB4ZmYpCisrCSAgICB7CisrCSAgICBGSVBTZXJy KEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgsRklQU19SX0lOVkFMSURfS0VZX0xFTkdU SCk7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysKKysJaWYoRklQU19zZWxmdGVzdF9mYWls ZWQoKSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tF WV9FWCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkgICAgcmV0dXJuIDA7CisrCSAg ICB9CisrI2VuZGlmCisrCisrCWN0eCA9IEJOX0NUWF9uZXcoKTsKKysJaWYgKCFjdHgpCisrCQln b3RvIGVycm9yOworKworKwlCTl9DVFhfc3RhcnQoY3R4KTsKKysJWHAgPSBCTl9DVFhfZ2V0KGN0 eCk7CisrCVhxID0gQk5fQ1RYX2dldChjdHgpOworKwlpZiAoIUJOX1g5MzFfZ2VuZXJhdGVfWHBx KFhwLCBYcSwgYml0cywgY3R4KSkKKysJCWdvdG8gZXJyb3I7CisrCisrCXJzYS0+cCA9IEJOX25l dygpOworKwlyc2EtPnEgPSBCTl9uZXcoKTsKKysJaWYgKCFyc2EtPnAgfHwgIXJzYS0+cSkKKysJ CWdvdG8gZXJyb3I7CisrCisrCS8qIEdlbmVyYXRlIHR3byBwcmltZXMgZnJvbSBYcCwgWHEgKi8K KysKKysJaWYgKCFCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KHJzYS0+cCwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCwgWHAsCisrCQkJCQllLCBjdHgsIGNiKSkKKysJCWdvdG8gZXJyb3I7CisrCisr CWlmICghQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChyc2EtPnEsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwsIFhxLAorKwkJCQkJZSwgY3R4LCBjYikpCisrCQlnb3RvIGVycm9yOworKworKwkvKiBT aW5jZSByc2EtPnAgYW5kIHJzYS0+cSBhcmUgdmFsaWQgdGhpcyBjYWxsIHdpbGwganVzdCBkZXJp dmUKKysJICogcmVtYWluaW5nIFJTQSBjb21wb25lbnRzLgorKwkgKi8KKysKKysJaWYgKCFSU0Ff WDkzMV9kZXJpdmVfZXgocnNhLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorKwkJCQlOVUxMLCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBlLCBjYikpCisrCQlnb3RvIGVycm9yOworKwor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoIWZpcHNfY2hlY2tfcnNhKHJzYSkpCisrCSAgICBn b3RvIGVycm9yOworKyNlbmRpZgorKworKwlvayA9IDE7CisrCisrCWVycm9yOgorKwlpZiAoY3R4 KQorKwkJeworKwkJQk5fQ1RYX2VuZChjdHgpOworKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKKysJCX0K KysKKysJaWYgKG9rKQorKwkJcmV0dXJuIDE7CisrCisrCXJldHVybiAwOworKworKwl9CitkaWZm IC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMu ZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMK Ky0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMu ZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5OTI5NDkzOSArMDEwMAorKysrIG9wZW5zc2wtMS4w LjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19zaGFfc2VsZnRlc3QuYwkyMDEyLTAyLTI5IDEwOjMz OjAyLjc5OTI5NDkzOSArMDEwMAorQEAgLTAsMCArMSwxNDAgQEAKKysvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor KyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6 CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9w ZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIg YXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1p c3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9u cyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAg ICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFO RCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJ VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisr ICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysj ZW5kaWYKKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9zaGEu aD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrc3RhdGljIGNvbnN0IGNoYXIgdGVzdFtdWzYw XT0KKysgICAgeworKyAgICAiIiwKKysgICAgImFiYyIsCisrICAgICJhYmNkYmNkZWNkZWZkZWZn ZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIKKysgICAgfTsKKysKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciByZXRbXVtTSEFfRElHRVNUX0xFTkdUSF09CisrICAg IHsKKysgICAgeyAweGRhLDB4MzksMHhhMywweGVlLDB4NWUsMHg2YiwweDRiLDB4MGQsMHgzMiww eDU1LAorKyAgICAgIDB4YmYsMHhlZiwweDk1LDB4NjAsMHgxOCwweDkwLDB4YWYsMHhkOCwweDA3 LDB4MDkgfSwKKysgICAgeyAweGE5LDB4OTksMHgzZSwweDM2LDB4NDcsMHgwNiwweDgxLDB4NmEs MHhiYSwweDNlLAorKyAgICAgIDB4MjUsMHg3MSwweDc4LDB4NTAsMHhjMiwweDZjLDB4OWMsMHhk MCwweGQ4LDB4OWQgfSwKKysgICAgeyAweDg0LDB4OTgsMHgzZSwweDQ0LDB4MWMsMHgzYiwweGQy LDB4NmUsMHhiYSwweGFlLAorKyAgICAgIDB4NGEsMHhhMSwweGY5LDB4NTEsMHgyOSwweGU1LDB4 ZTUsMHg0NiwweDcwLDB4ZjEgfSwKKysgICAgfTsKKysKKytzdGF0aWMgaW50IGNvcnJ1cHRfc2hh OworKworK3ZvaWQgRklQU19jb3JydXB0X3NoYTEoKQorKyAgICB7CisrICAgIGNvcnJ1cHRfc2hh ID0gMTsKKysgICAgfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTEoKQorKyAgICB7CisrICAg IGludCBuOworKworKyAgICBmb3Iobj0wIDsgbjxzaXplb2YodGVzdCkvc2l6ZW9mKHRlc3RbMF0p IDsgKytuKQorKwl7CisrCXVuc2lnbmVkIGNoYXIgbWRbU0hBX0RJR0VTVF9MRU5HVEhdOworKwor KwlFVlBfRGlnZXN0KHRlc3Rbbl0sc3RybGVuKHRlc3Rbbl0pK2NvcnJ1cHRfc2hhLG1kLCBOVUxM LCBFVlBfc2hhMSgpLCBOVUxMKTsKKysJaWYobWVtY21wKG1kLHJldFtuXSxzaXplb2YgbWQpKQor KwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9TSEExLEZJUFNfUl9T RUxGVEVTVF9GQUlMRUQpOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9CisrCX0KKysgICAgcmV0 dXJuIDE7CisrICAgIH0KKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtc2dfc2hhMjU2 W10gPSB7IDB4ZmEsIDB4NDgsIDB4NTksIDB4MmEsIDB4ZTEsIDB4YWUsIDB4MWYsIDB4MzAsCisr CQkJCQkgICAgMHhmYyB9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRpZ19zaGEyNTZb XSA9IHsgMHhmNywgMHgyNiwgMHhkOCwgMHg5OCwgMHg0NywgMHg5MSwgMHg2OCwgMHg1YiwKKysJ CQkJCSAgICAweDllLCAweDM5LCAweGIyLCAweDU4LCAweGJiLCAweDc1LCAweGJmLCAweDAxLAor KwkJCQkJICAgIDB4MTcsIDB4MGMsIDB4ODQsIDB4MDAsIDB4MDEsIDB4N2EsIDB4OTQsIDB4ODMs CisrCQkJCQkgICAgMHhmMywgMHgwYiwgMHgxNSwgMHg4NCwgMHg0YiwgMHg2OSwgMHg4OCwgMHg4 YSB9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1zZ19zaGE1MTJbXSA9IHsgMHgz NywgMHhkMSwgMHgzNSwgMHg5ZCwgMHgxOCwgMHg0MSwgMHhlOSwgMHhiNywKKysJCQkJCSAgICAw eDZkLCAweDlhLCAweDEzLCAweGRhLCAweDVmLCAweGYzLCAweGJkIH07Cisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgZGlnX3NoYTUxMltdID0geyAweDExLCAweDEzLCAweGM0LCAweDE5LCAw eGVkLCAweDJiLCAweDFkLCAweDE2LAorKwkJCQkJICAgIDB4MTEsIDB4ZWIsIDB4OWIsIDB4YmUs IDB4ZjAsIDB4N2YsIDB4Y2YsIDB4NDQsCisrCQkJCQkgICAgMHg4YiwgMHhkNywgMHg1NywgMHhi ZCwgMHg4ZCwgMHhhOSwgMHgyNSwgMHhiMCwKKysJCQkJCSAgICAweDQ3LCAweDI1LCAweGQ2LCAw eDZjLCAweDlhLCAweDU0LCAweDdmLCAweDhmLAorKwkJCQkJICAgIDB4MGIsIDB4NTMsIDB4MWEs IDB4MTAsIDB4NjgsIDB4MzIsIDB4MDMsIDB4MzgsCisrCQkJCQkgICAgMHg4MiwgMHhjNCwgMHg4 NywgMHhjNCwgMHhlYSwgMHgwZSwgMHhkMSwgMHgwNCwKKysJCQkJCSAgICAweGE5LCAweDk4LCAw eGMxLCAweDA1LCAweGEzLCAweGYzLCAweGY4LCAweGIxLAorKwkJCQkJICAgIDB4YWYsIDB4YmMs IDB4ZDksIDB4NzgsIDB4N2UsIDB4ZWUsIDB4M2QsIDB4NDMgfTsKKysKKytpbnQgRklQU19zZWxm dGVzdF9zaGEyKHZvaWQpCisrCXsKKysJdW5zaWduZWQgY2hhciBtZFtTSEE1MTJfRElHRVNUX0xF TkdUSF07CisrCisrCUVWUF9EaWdlc3QobXNnX3NoYTI1Niwgc2l6ZW9mKG1zZ19zaGEyNTYpLCBt ZCwgTlVMTCwgRVZQX3NoYTI1NigpLCBOVUxMKTsKKysJaWYobWVtY21wKGRpZ19zaGEyNTYsIG1k LCBzaXplb2YoZGlnX3NoYTI1NikpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19NT0RF X1NFVCwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysKKysJ RVZQX0RpZ2VzdChtc2dfc2hhNTEyLCBzaXplb2YobXNnX3NoYTUxMiksIG1kLCBOVUxMLCBFVlBf c2hhNTEyKCksIE5VTEwpOworKwlpZihtZW1jbXAoZGlnX3NoYTUxMiwgbWQsIHNpemVvZihkaWdf c2hhNTEyKSkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX01PREVfU0VULCBGSVBTX1Jf U0VMRlRFU1RfRkFJTEVEKTsKKysJCXJldHVybiAwOworKwkJfQorKworKwlyZXR1cm4gMTsKKysJ fQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9m aXBzX3N0YW5kYWxvbmVfaG1hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlw cy9maXBzX3N0YW5kYWxvbmVfaG1hYy5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8v Zmlwcy9maXBzX3N0YW5kYWxvbmVfaG1hYy5jLmZpcHMJMjAxMi0wMi0yOSAxMDozMzowMi43OTky OTQ5MzkgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfc3Rh bmRhbG9uZV9obWFjLmMJMjAxMi0wMi0yOSAxMDozMzowMi43OTkyOTQ5MzkgKzAxMDAKK0BAIC0w LDAgKzEsMTgwIEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhl IE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisr ICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFs cyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVz dCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAor KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9w ZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2Ug Y29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVu U1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRo b3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2pl Y3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBt dXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhF IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0 ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysKKysjaWZuZGVmIEZJUFNDQU5JU1RFUl9PCisr aW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkgeyByZXR1cm4gMDsgfQorK3ZvaWQgRklQU19zZWxm dGVzdF9jaGVjaygpIHt9Cisrdm9pZCBPUEVOU1NMX2NsZWFuc2Uodm9pZCAqcCxzaXplX3QgbGVu KSB7fQorKyNlbmRpZgorKworKyNpZglkZWZpbmVkKF9faTM4NikgICB8fCBkZWZpbmVkKF9faTM4 Nl9fKSAgIHx8IGRlZmluZWQoX01fSVg4NikgfHwgXAorKwlkZWZpbmVkKF9fSU5URUxfXykgfHwg XAorKwlkZWZpbmVkKF9feDg2XzY0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQo X01fQU1ENjQpIHx8IGRlZmluZWQoX01fWDY0KQorKworK3Vuc2lnbmVkIGludCAgT1BFTlNTTF9p YTMyY2FwX1BbMl07CisrI2VuZGlmCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworK3N0YXRp YyB2b2lkIGhtYWNfaW5pdChTSEEyNTZfQ1RYICptZF9jdHgsU0hBMjU2X0NUWCAqb19jdHgsCisr CQkgICAgICBjb25zdCBjaGFyICprZXkpCisrICAgIHsKKysgICAgc2l6ZV90IGxlbj1zdHJsZW4o a2V5KTsKKysgICAgaW50IGk7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5bWRbSE1BQ19NQVhfTURf Q0JMT0NLXTsKKysgICAgdW5zaWduZWQgY2hhciBwYWRbSE1BQ19NQVhfTURfQ0JMT0NLXTsKKysK KysgICAgaWYgKGxlbiA+IFNIQV9DQkxPQ0spCisrCXsKKysJU0hBMjU2X0luaXQobWRfY3R4KTsK KysJU0hBMjU2X1VwZGF0ZShtZF9jdHgsa2V5LGxlbik7CisrCVNIQTI1Nl9GaW5hbChrZXltZCxt ZF9jdHgpOworKwlsZW49U0hBMjU2X0RJR0VTVF9MRU5HVEg7CisrCX0KKysgICAgZWxzZQorKwlt ZW1jcHkoa2V5bWQsa2V5LGxlbik7CisrICAgIG1lbXNldCgma2V5bWRbbGVuXSwnXDAnLEhNQUNf TUFYX01EX0NCTE9DSy1sZW4pOworKworKyAgICBmb3IoaT0wIDsgaSA8IEhNQUNfTUFYX01EX0NC TE9DSyA7IGkrKykKKysJcGFkW2ldPTB4MzZea2V5bWRbaV07CisrICAgIFNIQTI1Nl9Jbml0KG1k X2N0eCk7CisrICAgIFNIQTI1Nl9VcGRhdGUobWRfY3R4LHBhZCxTSEEyNTZfQ0JMT0NLKTsKKysK KysgICAgZm9yKGk9MCA7IGkgPCBITUFDX01BWF9NRF9DQkxPQ0sgOyBpKyspCisrCXBhZFtpXT0w eDVjXmtleW1kW2ldOworKyAgICBTSEEyNTZfSW5pdChvX2N0eCk7CisrICAgIFNIQTI1Nl9VcGRh dGUob19jdHgscGFkLFNIQTI1Nl9DQkxPQ0spOworKyAgICB9CisrCisrc3RhdGljIHZvaWQgaG1h Y19maW5hbCh1bnNpZ25lZCBjaGFyICptZCxTSEEyNTZfQ1RYICptZF9jdHgsU0hBMjU2X0NUWCAq b19jdHgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBidWZbU0hBMjU2X0RJR0VTVF9MRU5H VEhdOworKworKyAgICBTSEEyNTZfRmluYWwoYnVmLG1kX2N0eCk7CisrICAgIFNIQTI1Nl9VcGRh dGUob19jdHgsYnVmLHNpemVvZiBidWYpOworKyAgICBTSEEyNTZfRmluYWwobWQsb19jdHgpOwor KyAgICB9CisrCisrI2VuZGlmCisrCisraW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCisr ICAgIHsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIHN0YXRpYyBjaGFyIGtleVtdPSJvcmJv RGVKSVRJVGVqc2lycEFET05pdmlycFVrdmFyUCI7CisrICAgIGludCBuLGJpbmFyeT0wOworKwor KyAgICBpZihhcmdjIDwgMikKKysJeworKwlmcHJpbnRmKHN0ZGVyciwiJXMgWzxmaWxlPl0rXG4i LGFyZ3ZbMF0pOworKwlleGl0KDEpOworKwl9CisrCisrICAgIG49MTsKKysgICAgaWYgKCFzdHJj bXAoYXJndltuXSwiLWJpbmFyeSIpKQorKwl7CisrCW4rKzsKKysJYmluYXJ5PTE7CS8qIGVtaXQg YmluYXJ5IGZpbmdlcnByaW50Li4uICovCisrCX0KKysKKysgICAgZm9yKDsgbiA8IGFyZ2MgOyAr K24pCisrCXsKKysJRklMRSAqZj1mb3Blbihhcmd2W25dLCJyYiIpOworKwlTSEEyNTZfQ1RYIG1k X2N0eCxvX2N0eDsKKysJdW5zaWduZWQgY2hhciBtZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07Cisr CWludCBpOworKworKwlpZighZikKKysJICAgIHsKKysJICAgIHBlcnJvcihhcmd2W25dKTsKKysJ ICAgIGV4aXQoMik7CisrCSAgICB9CisrCisrCWhtYWNfaW5pdCgmbWRfY3R4LCZvX2N0eCxrZXkp OworKwlmb3IoIDsgOyApCisrCSAgICB7CisrCSAgICBjaGFyIGJ1ZlsxMDI0XTsKKysJICAgIHNp emVfdCBsPWZyZWFkKGJ1ZiwxLHNpemVvZiBidWYsZik7CisrCisrCSAgICBpZihsID09IDApCisr CQl7CisrCQlpZihmZXJyb3IoZikpCisrCQkgICAgeworKwkJICAgIHBlcnJvcihhcmd2W25dKTsK KysJCSAgICBleGl0KDMpOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICBicmVhazsKKysJCX0K KysJICAgIFNIQTI1Nl9VcGRhdGUoJm1kX2N0eCxidWYsbCk7CisrCSAgICB9CisrCWhtYWNfZmlu YWwobWQsJm1kX2N0eCwmb19jdHgpOworKworKwlpZiAoYmluYXJ5KQorKwkgICAgeworKwkgICAg ZndyaXRlKG1kLFNIQTI1Nl9ESUdFU1RfTEVOR1RILDEsc3Rkb3V0KTsKKysJICAgIGJyZWFrOwkv KiAuLi4gZm9yIHNpbmdsZSghKSBmaWxlICovCisrCSAgICB9CisrCisrLyoJcHJpbnRmKCJITUFD LVNIQTEoJXMpPSAiLGFyZ3Zbbl0pOyAqLworKwlmb3IoaT0wIDsgaSA8IFNIQTI1Nl9ESUdFU1Rf TEVOR1RIIDsgKytpKQorKwkgICAgcHJpbnRmKCIlMDJ4IixtZFtpXSk7CisrCXByaW50ZigiXG4i KTsKKysJfQorKyNlbmRpZgorKyAgICByZXR1cm4gMDsKKysgICAgfQorKworKworZGlmZiAtdXAg b3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYy5maXBzIG9w ZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMKKy0tLSBvcGVu c3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jLmZpcHMJMjAxMi0w Mi0yOSAxMDozMzowMi44MDAyOTQ5NDcgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2Ny eXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jCTIwMTItMDItMjkgMTA6MzM6MDIuODAwMjk0OTQ3 ICswMTAwCitAQCAtMCwwICsxLDU4OCBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0 IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAq CisrICoKKysgKiBUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgYXMgYSB0ZXN0IGRyaXZlciBmb3Ig dGhlIEZJUFMtMTQwIHRlc3RpbmcKKysgKiBsYWIgcGVyZm9ybWluZyBGSVBTLTE0MCB2YWxpZGF0 aW9uLiAgSXQgZGVtb25zdHJhdGVzIHRoZSB1c2Ugb2YgdGhlCisrICogT3BlblNTTCBsaWJyYXJ5 IGl0byBwZXJmb3JtIGEgdmFyaWV0eSBvZiBjb21tb24gY3J5cHRvZ3JhcGhpYworKyAqIGZ1bmN0 aW9ucy4gIEEgcG93ZXItdXAgc2VsZiB0ZXN0IGlzIGRlbW9uc3RyYXRlZCBieSBkZWxpYmVyYXRl bHkKKysgKiBwb2ludGluZyB0byBhbiBpbnZhbGlkIGV4ZWN1dGFibGUgaGFzaAorKyAqCisrICog Q29udHJpYnV0ZWQgYnkgU3RldmUgTWFycXVlc3MuCisrICoKKysgKi8KKysjaW5jbHVkZSA8c3Rk aW8uaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1 ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9h ZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2Eu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysK KysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKysKKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworK2lu dCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisrICAgIHsKKysgICAgcHJpbnRmKCJObyBG SVBTIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrICAgIH0KKysjZWxzZQorKworKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKysvKiBB RVM6IGVuY3J5cHQgYW5kIGRlY3J5cHQga25vd24gcGxhaW50ZXh0LCB2ZXJpZnkgcmVzdWx0IG1h dGNoZXMgb3JpZ2luYWwgcGxhaW50ZXh0CisrKi8KKytzdGF0aWMgaW50IEZJUFNfYWVzX3Rlc3Qo dm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJdW5zaWduZWQgY2hhciBwbHRtcFsxNl07Cisr CXVuc2lnbmVkIGNoYXIgY2l0bXBbMTZdOworKwl1bnNpZ25lZCBjaGFyIGtleVsxNl0gPSB7IDEs MiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2fTsKKysJdW5zaWduZWQgY2hhciBw bGFpbnRleHRbMTZdID0gImV0YW9ucmlzaGRsY3UiOworKwlFVlBfQ0lQSEVSX0NUWCBjdHg7Cisr CUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCWlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4 LCBFVlBfYWVzXzEyOF9lY2IoKSxOVUxMLCBrZXksIE5VTEwsIDEpIDw9IDApCisrCQlnb3RvIGVy cjsKKysJRVZQX0NpcGhlcigmY3R4LCBjaXRtcCwgcGxhaW50ZXh0LCAxNik7CisrCWlmIChFVlBf Q2lwaGVySW5pdF9leCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSxOVUxMLCBrZXksIE5VTEwsIDAp IDw9IDApCisrCQlnb3RvIGVycjsKKysJRVZQX0NpcGhlcigmY3R4LCBwbHRtcCwgY2l0bXAsIDE2 KTsKKysJaWYgKG1lbWNtcChwbHRtcCwgcGxhaW50ZXh0LCAxNikpCisrCQlnb3RvIGVycjsKKysJ cmV0ID0gMTsKKysJZXJyOgorKwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOworKwlyZXR1 cm4gcmV0OworKwl9CisrCisrc3RhdGljIGludCBGSVBTX2RlczNfdGVzdCh2b2lkKQorKwl7Cisr CWludCByZXQgPSAwOworKwl1bnNpZ25lZCBjaGFyIHBsdG1wWzhdOworKwl1bnNpZ25lZCBjaGFy IGNpdG1wWzhdOworKyAgICAJdW5zaWduZWQgY2hhciBrZXlbXSA9IHsgMSwyLDMsNCw1LDYsNyw4 LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsCisrCQkgICAgICAgICAgICAgIDE5LDIwLDIx LDIyLDIzLDI0fTsKKysgICAgCXVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0W10gPSB7ICdlJywgJ3Qn LCAnYScsICdvJywgJ24nLCAncicsICdpJywgJ3MnIH07CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsK KysJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysJaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZj dHgsIEVWUF9kZXNfZWRlM19lY2IoKSxOVUxMLCBrZXksIE5VTEwsIDEpIDw9IDApCisrCQlnb3Rv IGVycjsKKysJRVZQX0NpcGhlcigmY3R4LCBjaXRtcCwgcGxhaW50ZXh0LCA4KTsKKysJaWYgKEVW UF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9kZXNfZWRlM19lY2IoKSxOVUxMLCBrZXksIE5VTEws IDApIDw9IDApCisrCQlnb3RvIGVycjsKKysJRVZQX0NpcGhlcigmY3R4LCBwbHRtcCwgY2l0bXAs IDgpOworKwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIDgpKQorKwkJZ290byBlcnI7Cisr CXJldCA9IDE7CisrCWVycjoKKysJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysJcmV0 dXJuIHJldDsKKysJfQorKworKy8qCisrICogRFNBOiBnZW5lcmF0ZSBrZXlzIGFuZCBzaWduLCB2 ZXJpZnkgaW5wdXQgcGxhaW50ZXh0LgorKyAqLworK3N0YXRpYyBpbnQgRklQU19kc2FfdGVzdChp bnQgYmFkKQorKyAgICB7CisrICAgIERTQSAqZHNhID0gTlVMTDsKKysgICAgRVZQX1BLRVkgcGs7 CisrICAgIHVuc2lnbmVkIGNoYXIgZGdzdFtdID0gImV0YW9ucmlzaGRsYyI7CisrICAgIHVuc2ln bmVkIGNoYXIgYnVmWzYwXTsKKysgICAgdW5zaWduZWQgaW50IHNsZW47CisrICAgIGludCByID0g MDsKKysgICAgRVZQX01EX0NUWCBtY3R4OworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysg ICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKKysgICAgZHNhID0gRFNBX25ldygpOworKyAgICBp ZiAoIWRzYSkKKysJZ290byBlbmQ7CisrICAgIGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNf ZXgoZHNhLCAxMDI0LE5VTEwsMCxOVUxMLE5VTEwsTlVMTCkpCisrCWdvdG8gZW5kOworKyAgICBp ZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKKysJZ290byBlbmQ7CisrICAgIGlmIChiYWQpCisr CSAgICBCTl9hZGRfd29yZChkc2EtPnB1Yl9rZXksIDEpOworKworKyAgICBway50eXBlID0gRVZQ X1BLRVlfRFNBOworKyAgICBway5wa2V5LmRzYSA9IGRzYTsKKysKKysgICAgaWYgKCFFVlBfU2ln bkluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpKQorKwlnb3RvIGVuZDsKKysgICAgaWYg KCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgZGdzdCwgc2l6ZW9mKGRnc3QpIC0gMSkpCisrCWdvdG8g ZW5kOworKyAgICBpZiAoIUVWUF9TaWduRmluYWwoJm1jdHgsIGJ1ZiwgJnNsZW4sICZwaykpCisr CWdvdG8gZW5kOworKworKyAgICBpZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBfZHNz MSgpLCBOVUxMKSkKKysJZ290byBlbmQ7CisrICAgIGlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0 eCwgZGdzdCwgc2l6ZW9mKGRnc3QpIC0gMSkpCisrCWdvdG8gZW5kOworKyAgICByID0gRVZQX1Zl cmlmeUZpbmFsKCZtY3R4LCBidWYsIHNsZW4sICZwayk7CisrICAgIGVuZDoKKysgICAgRVZQX01E X0NUWF9jbGVhbnVwKCZtY3R4KTsKKysgICAgaWYgKGRzYSkKKysgIAkgIERTQV9mcmVlKGRzYSk7 CisrICAgIGlmIChyICE9IDEpCisrCXJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQor KworKy8qCisrICogUlNBOiBnZW5lcmF0ZSBrZXlzIGFuZCBzaWduLCB2ZXJpZnkgaW5wdXQgcGxh aW50ZXh0LgorKyAqLworK3N0YXRpYyBpbnQgRklQU19yc2FfdGVzdChpbnQgYmFkKQorKyAgICB7 CisrICAgIFJTQSAqa2V5OworKyAgICB1bnNpZ25lZCBjaGFyIGlucHV0X3B0ZXh0W10gPSAiZXRh b25yaXNoZGxjIjsKKysgICAgdW5zaWduZWQgY2hhciBidWZbMjU2XTsKKysgICAgdW5zaWduZWQg aW50IHNsZW47CisrICAgIEJJR05VTSAqYm47CisrICAgIEVWUF9NRF9DVFggbWN0eDsKKysgICAg RVZQX1BLRVkgcGs7CisrICAgIGludCByID0gMDsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7 CisrICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7CisrICAgIGtleSA9IFJTQV9uZXcoKTsKKysg ICAgYm4gPSBCTl9uZXcoKTsKKysgICAgaWYgKCFrZXkgfHwgIWJuKQorKwlyZXR1cm4gMDsKKysg ICAgQk5fc2V0X3dvcmQoYm4sIDY1NTM3KTsKKysgICAgaWYgKCFSU0FfZ2VuZXJhdGVfa2V5X2V4 KGtleSwgMTAyNCxibixOVUxMKSkKKysJcmV0dXJuIDA7CisrICAgIEJOX2ZyZWUoYm4pOworKyAg ICBpZiAoYmFkKQorKwkgICAgQk5fYWRkX3dvcmQoa2V5LT5uLCAxKTsKKysKKysgICAgcGsudHlw ZSA9IEVWUF9QS0VZX1JTQTsKKysgICAgcGsucGtleS5yc2EgPSBrZXk7CisrCisrICAgIGlmICgh RVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfc2hhMSgpLCBOVUxMKSkKKysJZ290byBlbmQ7Cisr ICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIGlucHV0X3B0ZXh0LCBzaXplb2YoaW5wdXRf cHRleHQpIC0gMSkpCisrCWdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9TaWduRmluYWwoJm1jdHgs IGJ1ZiwgJnNsZW4sICZwaykpCisrCWdvdG8gZW5kOworKworKyAgICBpZiAoIUVWUF9WZXJpZnlJ bml0X2V4KCZtY3R4LCBFVlBfc2hhMSgpLCBOVUxMKSkKKysJZ290byBlbmQ7CisrICAgIGlmICgh RVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgaW5wdXRfcHRleHQsIHNpemVvZihpbnB1dF9wdGV4dCkg LSAxKSkKKysJZ290byBlbmQ7CisrICAgIHIgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIGJ1Ziwg c2xlbiwgJnBrKTsKKysgICAgZW5kOgorKyAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwor KyAgICBpZiAoa2V5KQorKyAgCSAgICBSU0FfZnJlZShrZXkpOworKyAgICBpZiAociAhPSAxKQor KwlyZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBTSEExOiBnZW5lcmF0 ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAgIHBy ZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX3NoYTFfdGVzdCgp CisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBX0RJR0VTVF9MRU5HVEhdID0K KysgICAgICAgIHsgMHgxMSwgMHhmMSwgMHg5YSwgMHgzYSwgMHhlYywgMHgxYSwgMHgxZSwgMHg4 ZSwgMHg2NSwgMHhkNCwgMHg5YSwgMHgzOCwgMHgwYywgMHg4YiwgMHgxZSwgMHgyYywgMHhlOCwg MHhiMywgMHhjNSwgMHgxOCB9OworKyAgICB1bnNpZ25lZCBjaGFyIHN0cltdID0gImV0YW9ucmlz aGQiOworKworKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQV9ESUdFU1RfTEVOR1RIXTsKKysKKysg ICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghRVZQX0RpZ2VzdChzdHIsc2l6ZW9mKHN0 cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hhMSgpLCBOVUxMKSkgcmV0dXJuIDA7CisrICAgIGlmICht ZW1jbXAobWQsZGlnZXN0LHNpemVvZihtZCkpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJl dHVybiAxOworKyAgICB9CisrCisrLyogU0hBMjU2OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRp Z2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3Qg aGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX3NoYTI1Nl90ZXN0KCkKKysgICAgeworKyAgICB1 bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEEyNTZfRElHRVNUX0xFTkdUSF0gPQorKwl7MHhmNSwgMHg1 MywgMHhjZCwgMHhiOCwgMHhjZiwgMHgxLCAweGVlLCAweDE3LCAweDliLCAweDkzLCAweGM5LCAw eDY4LCAweGMwLCAweGVhLCAweDQwLCAweDkxLAorKwkgMHg2LCAweGVjLCAweDhlLCAweDExLCAw eDk2LCAweGM4LCAweDVkLCAweDFjLCAweGFmLCAweDY0LCAweDIyLCAweGU2LCAweDUwLCAweDRm LCAweDQ3LCAweDU3fTsKKysgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFvbnJpc2hkIjsK KysKKysgICAgdW5zaWduZWQgY2hhciBtZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07CisrCisrICAg IEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNpemVvZihzdHIp IC0gMSxtZCwgTlVMTCwgRVZQX3NoYTI1NigpLCBOVUxMKSkgcmV0dXJuIDA7CisrICAgIGlmICht ZW1jbXAobWQsZGlnZXN0LHNpemVvZihtZCkpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJl dHVybiAxOworKyAgICB9CisrCisrLyogU0hBNTEyOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRp Z2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3Qg aGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX3NoYTUxMl90ZXN0KCkKKysgICAgeworKyAgICB1 bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEE1MTJfRElHRVNUX0xFTkdUSF0gPQorKwl7MHg5OSwgMHhj OSwgMHhlOSwgMHg1YiwgMHg4OCwgMHhkNCwgMHg3OCwgMHg4OCwgMHhkZiwgMHg4OCwgMHg1Ziwg MHg5NCwgMHg3MSwgMHg2NCwgMHgyOCwgMHhjYSwKKysJIDB4MTYsIDB4MWYsIDB4M2QsIDB4ZjQs IDB4MWYsIDB4ZjMsIDB4MGYsIDB4YzUsIDB4MDMsIDB4OTksIDB4YjIsIDB4ZDAsIDB4ZTcsIDB4 MGIsIDB4OTQsIDB4NGEsCisrCSAweDQ1LCAweGQyLCAweDZjLCAweDRmLCAweDIwLCAweDA2LCAw eGVmLCAweDcxLCAweGE5LCAweDI1LCAweDdmLCAweDI0LCAweGIxLCAweGQ5LCAweDQwLCAweDIy LAorKwkgMHg0OSwgMHg1NCwgMHgxMCwgMHhjMiwgMHgyMiwgMHg5ZCwgMHgyNywgMHhmZSwgMHhi ZCwgMHhkNiwgMHhkNiwgMHhlYiwgMHgyZCwgMHg0MiwgMHgxZCwgMHhhM307CisrICAgIHVuc2ln bmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNoZCI7CisrCisrICAgIHVuc2lnbmVkIGNoYXIgbWRb U0hBNTEyX0RJR0VTVF9MRU5HVEhdOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAg aWYgKCFFVlBfRGlnZXN0KHN0cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5VTEwsIEVWUF9zaGE1MTIo KSwgTlVMTCkpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG1kLGRpZ2VzdCxzaXplb2YobWQp KSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIEhN QUMtU0hBMTogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUg dG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQg RklQU19obWFjX3NoYTFfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9 ICJldGFvbnJpc2hkIjsKKysgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsK KysgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KKysJezB4NzMsIDB4 ZjcsIDB4YTAsIDB4NDgsIDB4ZjgsIDB4OTQsIDB4ZWQsIDB4ZGQsIDB4MGEsIDB4ZWEsIDB4ZWEs IDB4NTYsIDB4MWIsIDB4NjEsIDB4MmUsIDB4NzAsCisrCSAweGIyLCAweGZiLCAweGVjLCAweGM2 fTsKKysKKysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAgdW5z aWduZWQgaW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICgh SE1BQyhFVlBfc2hhMSgpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91 dGxlbikpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQorKyAg ICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogSE1BQy1TSEEy MjQ6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtu b3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNf aG1hY19zaGEyMjRfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJl dGFvbnJpc2hkIjsKKysgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKKysg ICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KKysJezB4NzUsIDB4NTgs IDB4ZDUsIDB4YmQsIDB4NTUsIDB4NmQsIDB4ODcsIDB4MGYsIDB4NzUsIDB4ZmYsIDB4YmUsIDB4 MWMsIDB4YjIsIDB4ZjAsIDB4MjAsIDB4MzUsCisrCSAweGU1LCAweDYyLCAweDQ5LCAweGI2LCAw eDk0LCAweGI5LCAweGZjLCAweDY1LCAweDM0LCAweDMzLCAweDNhLCAweDE5fTsKKysKKysgICAg dW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAgdW5zaWduZWQgaW50IG91 dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghSE1BQyhFVlBfc2hh MjI0KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0 dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCisrICAgICAgICByZXR1 cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBITUFDLVNIQTI1NjogZ2VuZXJh dGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBw cmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTI1 Nl90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQi OworKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOworKyAgICB1bnNpZ25l ZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQorKwl7MHhlOSwgMHgxNywgMHhjMSwgMHg3 YiwgMHg0YywgMHg2YiwgMHg3NywgMHhkYSwgMHhkMiwgMHgzMCwgMHgzNiwgMHgwMiwgMHhmNSwg MHg3MiwgMHgzMywgMHg4NywKKysJIDB4OWYsIDB4YzYsIDB4NmUsIDB4N2IsIDB4N2UsIDB4YTgs IDB4ZWEsIDB4YWEsIDB4OWYsIDB4YmEsIDB4ZWUsIDB4NTEsIDB4ZmYsIDB4ZGEsIDB4MjQsIDB4 ZjR9OworKworKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICB1 bnNpZ25lZCBpbnQgb3V0bGVuOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYg KCFITUFDKEVWUF9zaGEyNTYoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0 LCZvdXRsZW4pKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkK KysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIEhNQUMt U0hBMzg0OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0 byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBG SVBTX2htYWNfc2hhMzg0X3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5W10g PSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7 CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9CisrCXsweGIyLCAw eDlkLCAweDQwLCAweDU4LCAweDMyLCAweGM0LCAweGUzLCAweDMxLCAweGI2LCAweDYzLCAweDA4 LCAweDI2LCAweDk5LCAweGVmLCAweDNiLCAweDEwLAorKwkgMHhlMiwgMHhkZiwgMHhmOCwgMHhm ZiwgMHhjNiwgMHhlMSwgMHgwMywgMHgyOSwgMHg4MSwgMHgyYSwgMHgxYiwgMHhhYywgMHhiMCwg MHgwNywgMHgzOSwgMHgwOCwKKysJIDB4ZjMsIDB4OTEsIDB4MzUsIDB4MTEsIDB4NzYsIDB4ZDYs IDB4NGMsIDB4MjAsIDB4ZmIsIDB4NGQsIDB4YzMsIDB4ZjMsIDB4YjgsIDB4OWIsIDB4ODgsIDB4 MWN9OworKworKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICB1 bnNpZ25lZCBpbnQgb3V0bGVuOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYg KCFITUFDKEVWUF9zaGEzODQoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0 LCZvdXRsZW4pKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkK KysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIEhNQUMt U0hBNTEyOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0 byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBG SVBTX2htYWNfc2hhNTEyX3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5W10g PSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7 CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9CisrCXsweGNkLCAw eDNlLCAweGI5LCAweDUxLCAweGI4LCAweGJjLCAweDdmLCAweDlhLCAweDIzLCAweGFmLCAweGYz LCAweDc3LCAweDU5LCAweDg1LCAweGE5LCAweGU2LAorKwkgMHhmNywgMHhkMSwgMHg1MSwgMHg5 NiwgMHgxNywgMHhlMCwgMHg5MiwgMHhkOCwgMHhhNiwgMHgzYiwgMHhjMSwgMHhhZCwgMHg3ZSwg MHgyNCwgMHhjYSwgMHhiMSwKKysJIDB4ZDcsIDB4NzksIDB4MGEsIDB4YTUsIDB4ZWEsIDB4MmMs IDB4MDIsIDB4NTgsIDB4MGIsIDB4YTYsIDB4NTIsIDB4NmIsIDB4NjEsIDB4N2YsIDB4ZWIsIDB4 OWMsCisrCSAweDQ3LCAweDg2LCAweDVkLCAweDc0LCAweDJiLCAweDg4LCAweGRmLCAweGVlLCAw eDQ2LCAweDY5LCAweDk2LCAweDNkLCAweGE2LCAweGQ5LCAweDJhLCAweDUzfTsKKysKKysgICAg dW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAgdW5zaWduZWQgaW50IG91 dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghSE1BQyhFVlBfc2hh NTEyKCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0 dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCisrICAgICAgICByZXR1 cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysKKysvKiBESDogZ2VuZXJhdGUgc2hh cmVkIHBhcmFtZXRlcnMKKysqLworK3N0YXRpYyBpbnQgZGhfdGVzdCgpCisrICAgIHsKKysgICAg REggKmRoOworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgZGggPSBGSVBTX2RoX25ldygp OworKyAgICBpZiAoIWRoKQorKwlyZXR1cm4gMDsKKysgICAgaWYgKCFESF9nZW5lcmF0ZV9wYXJh bWV0ZXJzX2V4KGRoLCAxMDI0LCAyLCBOVUxMKSkKKysJcmV0dXJuIDA7CisrICAgIEZJUFNfZGhf ZnJlZShkaCk7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogWmVyb2l6ZQorKyovCisr c3RhdGljIGludCBaZXJvaXplKCkKKysgICAgeworKyAgICBSU0EgKmtleTsKKysgICAgQklHTlVN ICpibjsKKysgICAgdW5zaWduZWQgY2hhciB1c2Vya2V5WzE2XSA9IAorKwl7IDB4NDgsIDB4NTAs IDB4ZjAsIDB4YTMsIDB4M2EsIDB4ZWQsIDB4ZDMsIDB4YWYsIDB4NmUsIDB4NDcsIDB4N2YsIDB4 ODMsIDB4MDIsIDB4YjEsIDB4MDksIDB4NjggfTsKKysgICAgaW50IGksIG47CisrCisrICAgIGtl eSA9IEZJUFNfcnNhX25ldygpOworKyAgICBibiA9IEJOX25ldygpOworKyAgICBpZiAoIWtleSB8 fCAhYm4pCisrCXJldHVybiAwOworKyAgICBCTl9zZXRfd29yZChibiwgNjU1MzcpOworKyAgICBp ZiAoIVJTQV9nZW5lcmF0ZV9rZXlfZXgoa2V5LCAxMDI0LGJuLE5VTEwpKQorKwlyZXR1cm4gMDsK KysgICAgQk5fZnJlZShibik7CisrICAgIAorKyAgICBuID0gQk5fbnVtX2J5dGVzKGtleS0+ZCk7 CisrICAgIHByaW50ZigiIEdlbmVyYXRlZCAlZCBieXRlIFJTQSBwcml2YXRlIGtleVxuIiwgbik7 CisrICAgIHByaW50ZigiXHRCTiBrZXkgYmVmb3JlIG92ZXJ3cml0aW5nOlxuIik7CisrICAgIGRv X2JuX3ByaW50KHN0ZG91dCwga2V5LT5kKTsKKysgICAgQk5fcmFuZChrZXktPmQsbio4LC0xLDAp OworKyAgICBwcmludGYoIlx0Qk4ga2V5IGFmdGVyIG92ZXJ3cml0aW5nOlxuIik7CisrICAgIGRv X2JuX3ByaW50KHN0ZG91dCwga2V5LT5kKTsKKysKKysgICAgcHJpbnRmKCJcdGNoYXIgYnVmZmVy IGtleSBiZWZvcmUgb3ZlcndyaXRpbmc6IFxuXHRcdCIpOworKyAgICBmb3IoaSA9IDA7IGkgPCBz aXplb2YodXNlcmtleSk7IGkrKykgcHJpbnRmKCIlMDJ4IiwgdXNlcmtleVtpXSk7CisrICAgICAg ICBwcmludGYoIlxuIik7CisrICAgIFJBTkRfYnl0ZXModXNlcmtleSwgc2l6ZW9mIHVzZXJrZXkp OworKyAgICBwcmludGYoIlx0Y2hhciBidWZmZXIga2V5IGFmdGVyIG92ZXJ3cml0aW5nOiBcblx0 XHQiKTsKKysgICAgZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHVzZXJrZXkpOyBpKyspIHByaW50Zigi JTAyeCIsIHVzZXJrZXlbaV0pOworKyAgICAgICAgcHJpbnRmKCJcbiIpOworKworKyAgICByZXR1 cm4gMTsKKysgICAgfQorKworK3N0YXRpYyBpbnQgRXJyb3I7CisrY29uc3QgY2hhciAqIEZhaWwo Y29uc3QgY2hhciAqbXNnKQorKyAgICB7CisrICAgIGRvX3ByaW50X2Vycm9ycygpOworKyAgICBF cnJvcisrOworKyAgICByZXR1cm4gbXNnOyAKKysgICAgfQorKworK2ludCBtYWluKGludCBhcmdj LGNoYXIgKiphcmd2KQorKyAgICB7CisrCisrICAgIGludCBkb19jb3JydXB0X3JzYV9rZXlnZW4g PSAwLCBkb19jb3JydXB0X2RzYV9rZXlnZW4gPSAwOworKyAgICBpbnQgYmFkX3JzYSA9IDAsIGJh ZF9kc2EgPSAwOworKyAgICBpbnQgZG9fcm5nX3N0aWNrID0gMDsKKysgICAgaW50IG5vX2V4aXQg PSAwOworKworKyAgICBwcmludGYoIlx0RklQUy1tb2RlIHRlc3QgYXBwbGljYXRpb25cblxuIik7 CisrCisrICAgIC8qIExvYWQgZW50cm9weSBmcm9tIGV4dGVybmFsIGZpbGUsIGlmIGFueSAqLwor KyAgICBSQU5EX2xvYWRfZmlsZSgiLnJuZCIsIDEwMjQpOworKworKyAgICBpZiAoYXJndlsxXSkg eworKyAgICAgICAgLyogQ29ycnVwdGVkIEtBVCB0ZXN0cyAqLworKyAgICAgICAgaWYgKCFzdHJj bXAoYXJndlsxXSwgImFlcyIpKSB7CisrICAgICAgICAgICAgRklQU19jb3JydXB0X2FlcygpOwor KyAgICAgICAgICAgIHByaW50ZigiQUVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbiB3aXRoIGNvcnJ1 cHRlZCBLQVQuLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJk ZXMiKSkgeworKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kZXMoKTsKKysgICAgICAgICAgICBw cmludGYoIkRFUzMtRUNCIGVuY3J5cHRpb24vZGVjcnlwdGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQu Li5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJkc2EiKSkgewor KyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kc2EoKTsKKysgICAgICAgICAgICBwcmludGYoIkRT QSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQg S0FULi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicnNhIikp IHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfcnNhKCk7CisrICAgICAgICAgICAgcHJpbnRm KCJSU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVw dGVkIEtBVC4uLlxuIik7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJz YWtleSIpKSB7CisrICAgICAgICAgICAgcHJpbnRmKCJSU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNp Z25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleS4uLlxuIik7CisrCSAgICBiYWRf cnNhID0gMTsKKysJICAgIG5vX2V4aXQgPSAxOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21w KGFyZ3ZbMV0sICJyc2FrZXlnZW4iKSkgeworKwkgICAgZG9fY29ycnVwdF9yc2Ffa2V5Z2VuID0g MTsKKysJICAgIG5vX2V4aXQgPSAxOworKyAgICAgICAgICAgIHByaW50ZigiUlNBIGtleSBnZW5l cmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXlnZW4uLi5c biIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJkc2FrZXkiKSkgewor KyAgICAgICAgICAgIHByaW50ZigiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFs aWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXkuLi5cbiIpOworKwkgICAgYmFkX2RzYSA9IDE7Cisr CSAgICBub19leGl0ID0gMTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAi ZHNha2V5Z2VuIikpIHsKKysJICAgIGRvX2NvcnJ1cHRfZHNhX2tleWdlbiA9IDE7CisrCSAgICBu b19leGl0ID0gMTsKKysgICAgICAgICAgICBwcmludGYoIkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQg c2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Z2VuLi4uXG4iKTsKKysgICAg ICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAic2hhMSIpKSB7CisrICAgICAgICAgICAg RklQU19jb3JydXB0X3NoYTEoKTsKKysgICAgICAgICAgICBwcmludGYoIlNIQS0xIGhhc2ggd2l0 aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKKysJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJy bmciKSkgeworKwkgICAgRklQU19jb3JydXB0X3JuZygpOworKwl9IGVsc2UgaWYgKCFzdHJjbXAo YXJndlsxXSwgInJuZ3N0aWNrIikpIHsKKysJICAgIGRvX3JuZ19zdGljayA9IDE7CisrCSAgICBu b19leGl0ID0gMTsKKysJICAgIHByaW50ZigiUk5HIHRlc3Qgd2l0aCBzdHVjayBjb250aW51b3Vz IHRlc3QuLi5cbiIpOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBwcmludGYoIkJh ZCBhcmd1bWVudCBcIiVzXCJcbiIsIGFyZ3ZbMV0pOworKyAgICAgICAgICAgIGV4aXQoMSk7Cisr ICAgICAgICB9CisrCWlmICghbm9fZXhpdCkgeworKyAgICAgICAgCWlmICghRklQU19tb2RlX3Nl dCgxKSkgeworKyAJCSAgICBkb19wcmludF9lcnJvcnMoKTsKKysgICAgICAgIAkgICAgcHJpbnRm KCJQb3dlci11cCBzZWxmIHRlc3QgZmFpbGVkXG4iKTsKKysJCSAgICBleGl0KDEpOworKwkJfQor KyAgICAgICAgCXByaW50ZigiUG93ZXItdXAgc2VsZiB0ZXN0IHN1Y2Nlc3NmdWxcbiIpOworKyAg ICAgICAgCWV4aXQoMCk7CisrCX0KKysgICAgfQorKworKyAgICAvKiBOb24tQXBwcm92ZWQgY3J5 cHRvZ3JhcGhpYyBvcGVyYXRpb24KKysgICAgKi8KKysgICAgcHJpbnRmKCIxLiBOb24tQXBwcm92 ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24gdGVzdC4uLlxuIik7CisrICAgIHByaW50ZigiXHRh LiBJbmNsdWRlZCBhbGdvcml0aG0gKEQtSCkuLi4iKTsKKysgICAgcHJpbnRmKCBkaF90ZXN0KCkg PyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBQb3dl ci11cCBzZWxmIHRlc3QKKysgICAgKi8KKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIHBy aW50ZigiMi4gQXV0b21hdGljIHBvd2VyLXVwIHNlbGYgdGVzdC4uLiIpOworKyAgICBpZiAoIUZJ UFNfbW9kZV9zZXQoMSkpCisrCXsKKysJZG9fcHJpbnRfZXJyb3JzKCk7CisrICAgICAgICBwcmlu dGYoRmFpbCgiRkFJTEVEIVxuIikpOworKwlleGl0KDEpOworKwl9CisrICAgIHByaW50Zigic3Vj Y2Vzc2Z1bFxuIik7CisrICAgIGlmIChkb19jb3JydXB0X2RzYV9rZXlnZW4pCisrICAgICAgICAg ICAgRklQU19jb3JydXB0X2RzYV9rZXlnZW4oKTsKKysgICAgaWYgKGRvX2NvcnJ1cHRfcnNhX2tl eWdlbikKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbigpOworKyAgICBpZiAo ZG9fcm5nX3N0aWNrKQorKyAgICAgICAgICAgIEZJUFNfcm5nX3N0aWNrKCk7CisrCisrICAgIC8q IEFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKysgICAgKi8KKysgICAgcHJpbnRmKCIzLiBBRVMg ZW5jcnlwdGlvbi9kZWNyeXB0aW9uLi4uIik7CisrICAgIHByaW50ZiggRklQU19hZXNfdGVzdCgp ID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogUlNB IGtleSBnZW5lcmF0aW9uIGFuZCBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKysgICAgKi8KKysgICAg cHJpbnRmKCI0LiBSU0Ega2V5IGdlbmVyYXRpb24gYW5kIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4u LiIpOworKyAgICBwcmludGYoIEZJUFNfcnNhX3Rlc3QoYmFkX3JzYSkgPyAic3VjY2Vzc2Z1bFxu IiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBERVMtQ0JDIGVuY3J5cHRpb24v ZGVjcnlwdGlvbgorKyAgICAqLworKyAgICBwcmludGYoIjUuIERFUy1FQ0IgZW5jcnlwdGlvbi9k ZWNyeXB0aW9uLi4uIik7CisrICAgIHByaW50ZiggRklQU19kZXMzX3Rlc3QoKSA/ICJzdWNjZXNz ZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIERTQSBrZXkgZ2VuZXJh dGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24KKysgICAgKi8KKysgICAgcHJpbnRmKCI2LiBE U0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uLi4uIik7CisrICAgIHBy aW50ZiggRklQU19kc2FfdGVzdChiYWRfZHNhKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZB SUxFRCFcbiIpICk7CisrCisrICAgIC8qIFNIQS0xIGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRm KCI3YS4gU0hBLTEgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfc2hhMV90ZXN0KCkgPyAi c3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBTSEEtMjU2 IGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3Yi4gU0hBLTI1NiBoYXNoLi4uIik7CisrICAg IHByaW50ZiggRklQU19zaGEyNTZfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJ TEVEIVxuIikgKTsKKysKKysgICAgLyogU0hBLTUxMiBoYXNoCisrICAgICovCisrICAgIHByaW50 ZigiN2MuIFNIQS01MTIgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfc2hhNTEyX3Rlc3Qo KSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIEhN QUMtU0hBLTEgaGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdkLiBITUFDLVNIQS0xIGhhc2gu Li4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMV90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxu IiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBITUFDLVNIQS0yMjQgaGFzaAor KyAgICAqLworKyAgICBwcmludGYoIjdlLiBITUFDLVNIQS0yMjQgaGFzaC4uLiIpOworKyAgICBw cmludGYoIEZJUFNfaG1hY19zaGEyMjRfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgi RkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogSE1BQy1TSEEtMjU2IGhhc2gKKysgICAgKi8KKysg ICAgcHJpbnRmKCI3Zi4gSE1BQy1TSEEtMjU2IGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBT X2htYWNfc2hhMjU2X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIp ICk7CisrCisrICAgIC8qIEhNQUMtU0hBLTM4NCBoYXNoCisrICAgICovCisrICAgIHByaW50Zigi N2cuIEhNQUMtU0hBLTM4NCBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19obWFjX3NoYTM4 NF90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAg ICAvKiBITUFDLVNIQS01MTIgaGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdoLiBITUFDLVNI QS01MTIgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGE1MTJfdGVzdCgpID8g InN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogTm9uLUFw cHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uCisrICAgICovCisrICAgIHByaW50ZigiOC4g Tm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uIHRlc3QuLi5cbiIpOworKyAgICBw cmludGYoIlx0YS4gSW5jbHVkZWQgYWxnb3JpdGhtIChELUgpLi4uIik7CisrICAgIHByaW50Zigg ZGhfdGVzdCgpID8gInN1Y2Nlc3NmdWwgYXMgZXhwZWN0ZWRcbiIKKysJICAgIDogRmFpbCgiZmFp bGVkIElOQ09SUkVDVExZIVxuIikgKTsKKysKKysgICAgLyogWmVyb2l6YXRpb24KKysgICAgKi8K KysgICAgcHJpbnRmKCI5LiBaZXJvLWl6YXRpb24uLi5cbiIpOworKyAgICBwcmludGYoIFplcm9p emUoKSA/ICJcdHN1Y2Nlc3NmdWwgYXMgZXhwZWN0ZWRcbiIKKysJICAgIDogRmFpbCgiXHRmYWls ZWQgSU5DT1JSRUNUTFkhXG4iKSApOworKworKyAgICBwcmludGYoIlxuQWxsIHRlc3RzIGNvbXBs ZXRlZCB3aXRoICVkIGVycm9yc1xuIiwgRXJyb3IpOworKyAgICByZXR1cm4gRXJyb3IgPyAxIDog MDsKKysgICAgfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlw dG8vZmlwcy9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvTWFr ZWZpbGUKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL01ha2VmaWxlLmZpcHMJ MjAxMi0wMi0yOSAxMDozMzowMi44MDAyOTQ5NDcgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJl dGEzL2NyeXB0by9maXBzL01ha2VmaWxlCTIwMTItMDItMjkgMTA6MzM6MDIuODAwMjk0OTQ3ICsw MTAwCitAQCAtMCwwICsxLDM0MCBAQAorKyMKKysjIE9wZW5TU0wvY3J5cHRvL2ZpcHMvTWFrZWZp bGUKKysjCisrCisrRElSPQlmaXBzCisrVE9QPQkuLi8uLgorK0NDPQljYworK0lOQ0xVREVTPQor K0NGTEFHPS1nCisrTUFLRUZJTEU9CU1ha2VmaWxlCisrQVI9CQlhciByCisrCisrQ0ZMQUdTPSAk KElOQ0xVREVTKSAkKENGTEFHKQorKworK0dFTkVSQUw9TWFrZWZpbGUKKytURVNUPWZpcHNfdGVz dF9zdWl0ZS5jIGZpcHNfcmFuZHRlc3QuYworK0FQUFM9CisrCisrUFJPR1JBTT0gZmlwc19zdGFu ZGFsb25lX2htYWMKKytFWEU9ICQoUFJPR1JBTSkkKEVYRV9FWFQpCisrCisrTElCPSQoVE9QKS9s aWJjcnlwdG8uYQorK0xJQlNSQz1maXBzX2Flc19zZWxmdGVzdC5jIGZpcHNfZGVzX3NlbGZ0ZXN0 LmMgZmlwc19obWFjX3NlbGZ0ZXN0LmMgZmlwc19yYW5kX3NlbGZ0ZXN0LmMgXAorKyAgICBmaXBz X3JzYV9zZWxmdGVzdC5jIGZpcHNfc2hhX3NlbGZ0ZXN0LmMgZmlwcy5jIGZpcHNfZHNhX3NlbGZ0 ZXN0LmMgIGZpcHNfcmFuZC5jIFwKKysgICAgZmlwc19yc2FfeDkzMWcuYyBmaXBzX3Bvc3QuYyBm aXBzX2RyYmdfY3RyLmMgZmlwc19kcmJnX2hhc2guYyBmaXBzX2RyYmdfaG1hYy5jIFwKKysgICAg Zmlwc19kcmJnX2xpYi5jIGZpcHNfZHJiZ19yYW5kLmMgZmlwc19kcmJnX3NlbGZ0ZXN0LmMgZmlw c19yYW5kX2xpYi5jIFwKKysgICAgZmlwc19jbWFjX3NlbGZ0ZXN0LmMgZmlwc19lbmMuYyBmaXBz X21kLmMKKysKKytMSUJPQko9Zmlwc19hZXNfc2VsZnRlc3QubyBmaXBzX2Rlc19zZWxmdGVzdC5v IGZpcHNfaG1hY19zZWxmdGVzdC5vIGZpcHNfcmFuZF9zZWxmdGVzdC5vIFwKKysgICAgZmlwc19y c2Ffc2VsZnRlc3QubyBmaXBzX3NoYV9zZWxmdGVzdC5vIGZpcHMubyBmaXBzX2RzYV9zZWxmdGVz dC5vICBmaXBzX3JhbmQubyBcCisrICAgIGZpcHNfcnNhX3g5MzFnLm8gZmlwc19wb3N0Lm8gZmlw c19kcmJnX2N0ci5vIGZpcHNfZHJiZ19oYXNoLm8gZmlwc19kcmJnX2htYWMubyBcCisrICAgIGZp cHNfZHJiZ19saWIubyBmaXBzX2RyYmdfcmFuZC5vIGZpcHNfZHJiZ19zZWxmdGVzdC5vIGZpcHNf cmFuZF9saWIubyBcCisrICAgIGZpcHNfY21hY19zZWxmdGVzdC5vIGZpcHNfZW5jLm8gZmlwc19t ZC5vCisrCisrTElCQ1JZUFRPPS1MLi4gLWxjcnlwdG8KKysKKytTUkM9ICQoTElCU1JDKSBmaXBz X3N0YW5kYWxvbmVfaG1hYy5jCisrCisrRVhIRUFERVI9IGZpcHMuaCBmaXBzX3JhbmQuaAorK0hF QURFUj0JJChFWEhFQURFUikKKysKKytBTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVS KQorKworK3RvcDoKKysJKGNkIC4uLy4uOyAkKE1BS0UpIERJUlM9Y3J5cHRvIFNESVJTPSQoRElS KSBzdWJfYWxsKQorKworK2FsbDoJbGliIGV4ZQorKworK2xpYjoJJChMSUJPQkopCisrCSQoQVIp ICQoTElCKSAkKExJQk9CSikKKysJJChSQU5MSUIpICQoTElCKSB8fCBlY2hvIE5ldmVyIG1pbmQu CisrCUB0b3VjaCBsaWIKKysKKytleGU6CSQoRVhFKQorKworK2ZpbGVzOgorKwkkKFBFUkwpICQo VE9QKS91dGlsL2ZpbGVzLnBsIE1ha2VmaWxlID4+ICQoVE9QKS9NSU5GTworKworK2xpbmtzOgor KwlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vaW5jbHVkZS9vcGVuc3NsICQo RVhIRUFERVIpCisrCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi90ZXN0ICQo VEVTVCkKKysJQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2FwcHMgJChBUFBT KQorKworK2luc3RhbGw6CisrCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNl dCBieSB0b3AgTWFrZWZpbGUuLi4KKysJQGhlYWRlcmxpc3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkg aW4gJCRoZWFkZXJsaXN0IDsgXAorKwlkbyAgXAorKwkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgp JChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpOyBcCisrCWNobW9kIDY0NCAkKElOU1RB TExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaSApOyBcCisrCWRvbmU7 CisrCisrdGFnczoKKysJY3RhZ3MgJChTUkMpCisrCisrdGVzdHM6CisrCisrbGludDoKKysJbGlu dCAtRExJTlQgJChJTkNMVURFUykgJChTUkMpPmZsdWZmCisrCisrZGVwZW5kOgorKwlAWyAtbiAi JChNQUtFREVQRU5EKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdXBwZXIgTWFrZWZpbGUuLi4KKysJ JChNQUtFREVQRU5EKSAtLSAkKENGTEFHKSAkKElOQ0xVREVTKSAkKERFUEZMQUcpIC0tICQoUFJP R1MpICQoTElCU1JDKQorKworK2RjbGVhbjoKKysJJChQRVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9U IERFTEVURSBUSElTIExJTkUvKSB7cHJpbnQ7IGV4aXQoMCk7fScgJChNQUtFRklMRSkgPk1ha2Vm aWxlLm5ldworKwltdiAtZiBNYWtlZmlsZS5uZXcgJChNQUtFRklMRSkKKysKKytjbGVhbjoKKysJ cm0gLWYgKi5vICoub2JqIGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1 ZmYKKysKKyskKEVYRSk6ICQoUFJPR1JBTSkubworKwlGSVBTX1NIQV9BU009IiI7IGZvciBpIGlu ICQoU0hBMV9BU01fT0JKKSBzaGEyNTYubzsgZG8gRklQU19TSEFfQVNNPSIkJEZJUFNfU0hBX0FT TSAuLi9zaGEvJCRpIiA7IGRvbmU7IFwKKysJJChDQykgLW8gJEAgJChDRkxBR1MpICQoUFJPR1JB TSkubyAkJEZJUFNfU0hBX0FTTQorKworKyMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFr ZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KKysKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisrZmlwcy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwcy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJy LmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZmlwcy5oCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bGNvbmYuaAorK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCisrZmlwcy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytm aXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHMuYyBmaXBzX2xvY2wu aAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrZmlwc19hZXNf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9maXBzLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv bGhhc2guaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpf bWFjLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0 cy5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xj b25mLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bHYuaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5 cC5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFj ay5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgK KytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBm aXBzX2Flc19zZWxmdGVzdC5jCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX2Rlc19zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX2Rlc19zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXJyLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc3RhY2suaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zeW1oYWNrcy5oIGZpcHNfZGVzX3NlbGZ0ZXN0LmMKKytmaXBzX2RyYmdfY3RyLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisr Zmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytmaXBzX2RyYmdfY3RyLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNf cmFuZC5oCisrZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorK2ZpcHNfZHJiZ19jdHIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19kcmJnX2N0ci5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFj a3MuaAorK2ZpcHNfZHJiZ19jdHIubzogZmlwc19kcmJnX2N0ci5jIGZpcHNfcmFuZF9sY2wuaAor K2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYXNuMS5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfZHJiZ19oYXNo Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l dnAuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytm aXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBz X2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2xjb25mLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbHYuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5 cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHJiZ19oYXNoLmMKKytmaXBzX2RyYmdfaGFzaC5vOiBm aXBzX3JhbmRfbGNsLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorK2ZpcHNfZHJiZ19obWFjLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgK KytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXZwLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZmlwcy5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Zp cHNfcmFuZC5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19kcmJnX2htYWMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCisrZmlwc19k cmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19kcmJn X2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX2RyYmdfaG1hYy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2RyYmdfaG1hYy5jCisrZmlw c19kcmJnX2htYWMubzogZmlwc19yYW5kX2xjbC5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorK2ZpcHNf ZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9jcnlwdG8uaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vf b3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2Zp cHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9obWFjLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX2RyYmdf bGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2RyYmdfbGliLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19kcmJnX2xpYi5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAor K2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlw c19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc3ltaGFja3MuaAorK2ZpcHNfZHJiZ19saWIubzogZmlwc19kcmJnX2xpYi5jIGZp cHNfbG9jbC5oIGZpcHNfcmFuZF9sY2wuaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisrZmlwc19kcmJn X3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9jcnlwdG8uaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29z Mi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlw c19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCisrZmlwc19k cmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvbGhhc2guaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v YmpfbWFjLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0 cy5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25m LmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAor K2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc3RhY2suaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z eW1oYWNrcy5oIGZpcHNfZHJiZ19yYW5kLmMKKytmaXBzX2RyYmdfcmFuZC5vOiBmaXBzX3JhbmRf bGNsLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytmaXBzX2Ry Ymdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9maXBzLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2ZpcHNfcmFuZC5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9obWFjLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2xoYXNoLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i al9tYWMuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq ZWN0cy5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3NsY29uZi5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3Nsdi5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v c3NsX3R5cC5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9y YW5kLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVz dGFjay5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFj ay5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNr cy5oIGZpcHNfZHJiZ19zZWxmdGVzdC5jCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IGZpcHNfZHJi Z19zZWxmdGVzdC5oIGZpcHNfbG9jbC5oIGZpcHNfcmFuZF9sY2wuaAorK2ZpcHNfZHNhX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Jpby5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCisr Zmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9ldnAuaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX2RzYV9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19kc2Ffc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfZHNhX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19kc2Ffc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX2RzYV9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNfZHNhX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfZHNhX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19kc2Ffc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kc2Ffc2VsZnRlc3QuYwor K2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IGZpcHNfbG9jbC5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5o CisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAor K2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX2ht YWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorK2ZpcHNfaG1hY19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfaG1hY19zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19obWFjX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2htYWNfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX2htYWNfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX2htYWNfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX2htYWNfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19obWFjX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19obWFjX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfaG1hY19zZWxmdGVz dC5jCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYXNuMS5oCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9i aW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX3Bvc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCisrZmlw c19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXZwLmgKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfcG9z dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmgKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xj b25mLmgKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKKytmaXBzX3Bvc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zdGFjay5oCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5o IGZpcHNfbG9jbC5oIGZpcHNfcG9zdC5jCisrZmlwc19yYW5kLm86IC4uLy4uL2Vfb3MuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYWVzLmgKKytmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX3JhbmQubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5o CisrZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXZwLmgKKytmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX3JhbmQubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2Zp cHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2xjb25mLmgKKytmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2 LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX3JhbmQubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgK KytmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3N5bWhhY2tzLmgKKytmaXBzX3JhbmQubzogZmlwc19sb2NsLmggZmlwc19yYW5k LmMKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YWVzLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKytmaXBzX3Jh bmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXZwLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisr Zmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19y YW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19yYW5kX2xp Yi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfcmFuZF9saWIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX3JhbmRfbGliLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5k LmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAor K2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKKytmaXBzX3JhbmRfbGliLm86IGZpcHNfcmFuZF9saWIu YworK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfcmFuZF9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2ZpcHMuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Zmlwc19yYW5kLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2htYWMuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhh c2guaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21h Yy5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3Rz LmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xj b25mLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5z c2x2LmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xf dHlwLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQu aAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNr LmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgK KytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgg Zmlwc19sb2NsLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogZmlwc19yYW5kX3NlbGZ0ZXN0LmMK KytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfcnNh X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lcnIuaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19yc2Ffc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9yc2EuaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3N5bWhhY2tzLmggZmlwc19yc2Ffc2VsZnRlc3QuYworK2ZpcHNfcnNhX3g5MzFnLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5o CisrZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrZmlwc19yc2FfeDkz MWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv bGhhc2guaAorK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns Y29uZi5oCisrZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2 LmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc3RhY2suaAorK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zeW1oYWNrcy5oIGZpcHNfcnNhX3g5MzFnLmMKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK2Zp cHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNf c2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19zaGFfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX3NoYV9zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19zaGFfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19zaGFfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAor K2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZp cHNfc2hhX3NlbGZ0ZXN0LmMKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ht YWMvaG1hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vaG1hYy9obWFjLmMKKy0t LSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9obWFjL2htYWMuYy5maXBzCTIwMTEtMDYtMTIg MTc6MDc6MjYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8v aG1hYy9obWFjLmMJMjAxMi0wMi0yOSAxMDozMzowMi44MDAyOTQ5NDcgKzAxMDAKK0BAIC04MSwx MSArODEsNiBAQCBpbnQgSE1BQ19Jbml0X2V4KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHZvCisgCQkJ RVZQZXJyKEVWUF9GX0hNQUNfSU5JVF9FWCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpOworIAkJ CXJldHVybiAwOworIAkJCX0KKy0JCS8qIE90aGVyIGFsZ29yaXRobSBibG9ja2luZyB3aWxsIGJl IGRvbmUgaW4gRklQU19jbWFjX2luaXQsCistCQkgKiB2aWEgRklQU19obWFjX2luaXRfZXgoKS4K Ky0JCSAqLworLQkJaWYgKCFpbXBsICYmICFjdHgtPmlfY3R4LmVuZ2luZSkKKy0JCQlyZXR1cm4g RklQU19obWFjX2luaXRfZXgoY3R4LCBrZXksIGxlbiwgbWQsIE5VTEwpOworIAkJfQorICNlbmRp ZgorIAorQEAgLTk5LDYgKzk0LDEzIEBAIGludCBITUFDX0luaXRfZXgoSE1BQ19DVFggKmN0eCwg Y29uc3Qgdm8KKyAKKyAJaWYgKGtleSAhPSBOVUxMKQorIAkJeworKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysJCWlmIChGSVBTX21vZGUoKSAmJiAhKG1kLT5mbGFncyAmIEVWUF9NRF9GTEFHX0ZJUFMp CisrCQkmJiAoIShjdHgtPm1kX2N0eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19B TExPVykKKysJCSB8fCAhKGN0eC0+aV9jdHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJ UFNfQUxMT1cpCisrCQkgfHwgIShjdHgtPm9fY3R4LmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05P Tl9GSVBTX0FMTE9XKSkpCisrCQkJZ290byBlcnI7CisrI2VuZGlmCisgCQlyZXNldD0xOworIAkJ aj1FVlBfTURfYmxvY2tfc2l6ZShtZCk7CisgCQlPUEVOU1NMX2Fzc2VydChqIDw9IChpbnQpc2l6 ZW9mKGN0eC0+a2V5KSk7CitAQCAtMTU1LDEwICsxNTcsNiBAQCBpbnQgSE1BQ19Jbml0KEhNQUNf Q1RYICpjdHgsIGNvbnN0IHZvaWQKKyAKKyBpbnQgSE1BQ19VcGRhdGUoSE1BQ19DVFggKmN0eCwg Y29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGxlbikKKyAJeworLSNpZmRlZiBPUEVO U1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmlfY3R4LmVuZ2luZSkKKy0JCXJl dHVybiBGSVBTX2htYWNfdXBkYXRlKGN0eCwgZGF0YSwgbGVuKTsKKy0jZW5kaWYKKyAJcmV0dXJu IEVWUF9EaWdlc3RVcGRhdGUoJmN0eC0+bWRfY3R4LGRhdGEsbGVuKTsKKyAJfQorIAorQEAgLTE2 NiwxMCArMTY0LDYgQEAgaW50IEhNQUNfRmluYWwoSE1BQ19DVFggKmN0eCwgdW5zaWduZWQgYwor IAl7CisgCXVuc2lnbmVkIGludCBpOworIAl1bnNpZ25lZCBjaGFyIGJ1ZltFVlBfTUFYX01EX1NJ WkVdOworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmlf Y3R4LmVuZ2luZSkKKy0JCXJldHVybiBGSVBTX2htYWNfZmluYWwoY3R4LCBtZCwgbGVuKTsKKy0j ZW5kaWYKKyAKKyAJaWYgKCFFVlBfRGlnZXN0RmluYWxfZXgoJmN0eC0+bWRfY3R4LGJ1ZiwmaSkp CisgCQlnb3RvIGVycjsKK0BAIC0yMDksMTMgKzIwMyw2IEBAIGludCBITUFDX0NUWF9jb3B5KEhN QUNfQ1RYICpkY3R4LCBITUFDX0MKKyAKKyB2b2lkIEhNQUNfQ1RYX2NsZWFudXAoSE1BQ19DVFgg KmN0eCkKKyAJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpICYmICFj dHgtPmlfY3R4LmVuZ2luZSkKKy0JCXsKKy0JCUZJUFNfaG1hY19jdHhfY2xlYW51cChjdHgpOwor LQkJcmV0dXJuOworLQkJfQorLSNlbmRpZgorIAlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eC0+aV9j dHgpOworIAlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eC0+b19jdHgpOworIAlFVlBfTURfQ1RYX2Ns ZWFudXAoJmN0eC0+bWRfY3R4KTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRv L21kMi9tZDJfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vbWQyL21kMl9k Z3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9tZDIvbWQyX2Rnc3QuYy5maXBz CTIwMTEtMDYtMDEgMTU6Mzk6NDMuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMS1i ZXRhMy9jcnlwdG8vbWQyL21kMl9kZ3N0LmMJMjAxMi0wMi0yOSAxMDozMzowMi44MDAyOTQ5NDcg KzAxMDAKK0BAIC02Miw2ICs2MiwxMSBAQAorICNpbmNsdWRlIDxvcGVuc3NsL21kMi5oPgorICNp bmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+ CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5k aWYKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyAKKyBjb25zdCBjaGFyIE1EMl92ZXJz aW9uW109Ik1EMiIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorQEAgLTExNiw3ICsxMjEsNyBA QCBjb25zdCBjaGFyICpNRDJfb3B0aW9ucyh2b2lkKQorIAkJcmV0dXJuKCJtZDIoaW50KSIpOwor IAl9CisgCistZmlwc19tZF9pbml0KE1EMikKKytub25maXBzX21kX2luaXQoTUQyKQorIAl7Cisg CWMtPm51bT0wOworIAltZW1zZXQoYy0+c3RhdGUsMCxzaXplb2YgYy0+c3RhdGUpOworZGlmZiAt dXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMuZmlwcyBvcGVuc3Ns LTEuMC4xLWJldGEzL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0 YTMvY3J5cHRvL21kNC9tZDRfZGdzdC5jLmZpcHMJMjAxMS0wNi0wMSAxNTozOTo0My4wMDAwMDAw MDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYwky MDEyLTAyLTI5IDEwOjMzOjAyLjgwMTI5NDk1NiArMDEwMAorQEAgLTcxLDcgKzcxLDcgQEAgY29u c3QgY2hhciBNRDRfdmVyc2lvbltdPSJNRDQiIE9QRU5TU0xfVgorICNkZWZpbmUgSU5JVF9EQVRB X0MgKHVuc2lnbmVkIGxvbmcpMHg5OGJhZGNmZUwKKyAjZGVmaW5lIElOSVRfREFUQV9EICh1bnNp Z25lZCBsb25nKTB4MTAzMjU0NzZMCisgCistZmlwc19tZF9pbml0KE1ENCkKKytub25maXBzX21k X2luaXQoTUQ0KQorIAl7CisgCW1lbXNldCAoYywwLHNpemVvZigqYykpOworIAljLT5BPUlOSVRf REFUQV9BOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vbWQ1L21kNV9kZ3N0 LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYworLS0tIG9w ZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL21kNS9tZDVfZGdzdC5jLmZpcHMJMjAxMS0wNi0wMSAx NTozOTo0My4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9t ZDUvbWQ1X2Rnc3QuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjgwMTI5NDk1NiArMDEwMAorQEAgLTcx LDcgKzcxLDcgQEAgY29uc3QgY2hhciBNRDVfdmVyc2lvbltdPSJNRDUiIE9QRU5TU0xfVgorICNk ZWZpbmUgSU5JVF9EQVRBX0MgKHVuc2lnbmVkIGxvbmcpMHg5OGJhZGNmZUwKKyAjZGVmaW5lIElO SVRfREFUQV9EICh1bnNpZ25lZCBsb25nKTB4MTAzMjU0NzZMCisgCistZmlwc19tZF9pbml0KE1E NSkKKytub25maXBzX21kX2luaXQoTUQ1KQorIAl7CisgCW1lbXNldCAoYywwLHNpemVvZigqYykp OworIAljLT5BPUlOSVRfREFUQV9BOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlw dG8vbWRjMi9tZGMyZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vbWRjMi9t ZGMyZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vbWRjMi9tZGMyZGdzdC5j LmZpcHMJMjAxMS0wNi0wMSAxNTozOTo0NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEu MC4xLWJldGEzL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMJMjAxMi0wMi0yOSAxMDozMzowMi44MDEy OTQ5NTYgKzAxMDAKK0BAIC03Niw3ICs3Niw3IEBACisgCQkJKigoYykrKyk9KHVuc2lnbmVkIGNo YXIpKCgobCk+PjI0TCkmMHhmZikpCisgCisgc3RhdGljIHZvaWQgbWRjMl9ib2R5KE1EQzJfQ1RY ICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGxlbik7CistZmlwc19tZF9pbml0 KE1EQzIpCisrbm9uZmlwc19tZF9pbml0KE1EQzIpCisgCXsKKyAJYy0+bnVtPTA7CisgCWMtPnBh ZF90eXBlPTE7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9vX2luaXQuYy5m aXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL29faW5pdC5jCistLS0gb3BlbnNzbC0xLjAu MS1iZXRhMy9jcnlwdG8vb19pbml0LmMuZmlwcwkyMDExLTA1LTI2IDE2OjE5OjE5LjAwMDAwMDAw MCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL29faW5pdC5jCTIwMTItMDIt MjkgMTA6MzM6MDIuODAxMjk0OTU2ICswMTAwCitAQCAtNTUsMjggKzU1LDYzIEBACisgI2luY2x1 ZGUgPGVfb3MuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyAjaWZkZWYgT1BFTlNTTF9G SVBTCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyNp bmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSA8ZXJybm8u aD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorICNp bmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysKKysjZGVmaW5lIEZJUFNfTU9ERV9TV0lUQ0hfRklM RSAiL3Byb2Mvc3lzL2NyeXB0by9maXBzX2VuYWJsZWQiCisrCisrc3RhdGljIHZvaWQgaW5pdF9m aXBzX21vZGUodm9pZCkKKysJeworKwljaGFyIGJ1ZlsyXSA9ICIwIjsKKysJaW50IGZkOworKwkK KysJaWYgKGdldGVudigiT1BFTlNTTF9GT1JDRV9GSVBTX01PREUiKSAhPSBOVUxMKQorKwkJewor KwkJYnVmWzBdID0gJzEnOworKwkJfQorKwllbHNlIGlmICgoZmQgPSBvcGVuKEZJUFNfTU9ERV9T V0lUQ0hfRklMRSwgT19SRE9OTFkpKSA+PSAwKQorKwkJeworKwkJd2hpbGUgKHJlYWQoZmQsIGJ1 Ziwgc2l6ZW9mKGJ1ZikpIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7CisrCQljbG9zZShmZCk7Cisr CQl9CisrCS8qIEZhaWx1cmUgcmVhZGluZyB0aGUgZmlwcyBtb2RlIHN3aXRjaCBmaWxlIG1lYW5z IGp1c3Qgbm90CisrCSAqIHN3aXRjaGluZyBpbnRvIEZJUFMgbW9kZS4gV2Ugd291bGQgYnJlYWsg dG9vIG1hbnkgdGhpbmdzCisrCSAqIG90aGVyd2lzZS4gCisrCSAqLworKwkKKysJaWYgKGJ1Zlsw XSA9PSAnMScpCisrCQl7CisrCQlGSVBTX21vZGVfc2V0KDEpOworKwkJfQorKwl9CisgI2VuZGlm CisgCisgLyogUGVyZm9ybSBhbnkgZXNzZW50aWFsIE9wZW5TU0wgaW5pdGlhbGl6YXRpb24gb3Bl cmF0aW9ucy4KKyAgKiBDdXJyZW50bHkgb25seSBzZXRzIEZJUFMgY2FsbGJhY2tzCisgICovCisg Cistdm9pZCBPUEVOU1NMX2luaXQodm9pZCkKKyt2b2lkIE9QRU5TU0xfaW5pdF9saWJyYXJ5KHZv aWQpCisgCXsKKyAJc3RhdGljIGludCBkb25lID0gMDsKKyAJaWYgKGRvbmUpCisgCQlyZXR1cm47 CisgCWRvbmUgPSAxOworICNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JRklQU19zZXRfbG9ja2luZ19j YWxsYmFja3MoQ1JZUFRPX2xvY2ssIENSWVBUT19hZGRfbG9jayk7CistCUZJUFNfc2V0X2Vycm9y X2NhbGxiYWNrcyhFUlJfcHV0X2Vycm9yLCBFUlJfYWRkX2Vycm9yX3ZkYXRhKTsKKy0JRklQU19z ZXRfbWFsbG9jX2NhbGxiYWNrcyhDUllQVE9fbWFsbG9jLCBDUllQVE9fZnJlZSk7CisgCVJBTkRf aW5pdF9maXBzKCk7CisrCWluaXRfZmlwc19tb2RlKCk7CisgI2VuZGlmCisgI2lmIDAKKyAJZnBy aW50ZihzdGRlcnIsICJDYWxsZWQgT1BFTlNTTF9pbml0XG4iKTsKKyAjZW5kaWYKKyAJfQorIAor K3ZvaWQgT1BFTlNTTF9pbml0KHZvaWQpCisrCXsKKysJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsK KysJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vb3BlbnNzbGNvbmYuaC5p bi5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL29wZW5zc2xjb25mLmguaW4KKy0tLSBv cGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9vcGVuc3NsY29uZi5oLmluLmZpcHMJMjAwNS0xMi0x NiAxMTozNzoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0 by9vcGVuc3NsY29uZi5oLmluCTIwMTItMDItMjkgMTA6MzM6MDIuODAxMjk0OTU2ICswMTAwCitA QCAtMSw1ICsxLDIwIEBACisgLyogY3J5cHRvL29wZW5zc2xjb25mLmguaW4gKi8KKyAKKysjaWZk ZWYgT1BFTlNTTF9ET0lOR19NQUtFREVQRU5ECisrCisrLyogSW5jbHVkZSBhbnkgc3ltYm9scyBo ZXJlIHRoYXQgaGF2ZSB0byBiZSBleHBsaWNpdGx5IHNldCB0byBlbmFibGUgYSBmZWF0dXJlCisr ICogdGhhdCBzaG91bGQgYmUgdmlzaWJsZSB0byBtYWtlZGVwZW5kLgorKyAqCisrICogW091ciAi bWFrZSBkZXBlbmQiIGRvZXNuJ3QgYWN0dWFsbHkgbG9vayBhdCB0aGlzLCB3ZSB1c2UgYWN0dWFs IGJ1aWxkIHNldHRpbmdzCisrICogaW5zdGVhZDsgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgdG8g cmVtb3ZlIHN1YmRpcmVjdG9yaWVzIHdpdGggZGlzYWJsZWQgYWxnb3JpdGhtcy5dCisrICovCisr CisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysjZGVmaW5lIE9QRU5TU0xfRklQUworKyNlbmRpZgor KworKyNlbmRpZgorKworIC8qIEdlbmVyYXRlIDgwMzg2IGNvZGU/ICovCisgI3VuZGVmIEkzODZf T05MWQorIAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vcGtjczEyL3AxMl9j cnQuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3BrY3MxMi9wMTJfY3J0LmMKKy0t LSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9wa2NzMTIvcDEyX2NydC5jLmZpcHMJMjAwOS0w My0wOSAxNDowODowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2Ny eXB0by9wa2NzMTIvcDEyX2NydC5jCTIwMTItMDItMjkgMTA6MzM6MDIuODAxMjk0OTU2ICswMTAw CitAQCAtNTksNiArNTksMTAgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSAiY3J5 cHRsaWIuaCIKKyAjaW5jbHVkZSA8b3BlbnNzbC9wa2NzMTIuaD4KKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworIAorIAorIHN0YXRp YyBpbnQgcGtjczEyX2FkZF9iYWcoU1RBQ0tfT0YoUEtDUzEyX1NBRkVCQUcpICoqcGJhZ3MsIFBL Q1MxMl9TQUZFQkFHICpiYWcpOworQEAgLTkwLDcgKzk0LDE0IEBAIFBLQ1MxMiAqUEtDUzEyX2Ny ZWF0ZShjaGFyICpwYXNzLCBjaGFyICoKKyAKKyAJLyogU2V0IGRlZmF1bHRzICovCisgCWlmICgh bmlkX2NlcnQpCisrCQl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJaWYgKEZJUFNfbW9kZSgp KQorKwkJCW5pZF9jZXJ0ID0gTklEX3BiZV9XaXRoU0hBMUFuZDNfS2V5X1RyaXBsZURFU19DQkM7 CisrCQllbHNlCisrI2VuZGlmCisgCQluaWRfY2VydCA9IE5JRF9wYmVfV2l0aFNIQTFBbmQ0MEJp dFJDMl9DQkM7CisrCQl9CisgCWlmICghbmlkX2tleSkKKyAJCW5pZF9rZXkgPSBOSURfcGJlX1dp dGhTSEExQW5kM19LZXlfVHJpcGxlREVTX0NCQzsKKyAJaWYgKCFpdGVyKQorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vcmFuZC9tZF9yYW5kLmMuZmlwcyBvcGVuc3NsLTEuMC4x LWJldGEzL2NyeXB0by9yYW5kL21kX3JhbmQuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5 cHRvL3JhbmQvbWRfcmFuZC5jLmZpcHMJMjAxMS0wMS0yNiAxNTo1NToyMy4wMDAwMDAwMDAgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9yYW5kL21kX3JhbmQuYwkyMDEyLTAy LTI5IDEwOjMzOjAyLjgwMTI5NDk1NiArMDEwMAorQEAgLTM4OSw3ICszODksMTAgQEAgc3RhdGlj IGludCBzc2xlYXlfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaAorIAlDUllQVE9fd191bmxvY2soQ1JZ UFRPX0xPQ0tfUkFORDIpOworIAljcnlwdG9fbG9ja19yYW5kID0gMTsKKyAKKy0JaWYgKCFpbml0 aWFsaXplZCkKKysJLyogYWx3YXlzIHBvbGwgZm9yIGV4dGVybmFsIGVudHJvcHkgaW4gRklQUyBt b2RlLCBkcmJnIHByb3ZpZGVzIHRoZSAKKysJICogZXhwYW5zaW9uCisrCSAqLworKwlpZiAoIWlu aXRpYWxpemVkIHx8IEZJUFNfbW9kdWxlX21vZGUoKSkgCisgCQl7CisgCQlSQU5EX3BvbGwoKTsK KyAJCWluaXRpYWxpemVkID0gMTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRv L3JhbmQvcmFuZC5oLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vcmFuZC9yYW5kLmgK Ky0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9yYW5kL3JhbmQuaC5maXBzCTIwMTItMDIt MjkgMTA6MzM6MDIuMjgzMjkwNTA0ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlw dG8vcmFuZC9yYW5kLmgJMjAxMi0wMi0yOSAxMDozMzowMi44MDIyOTQ5NjUgKzAxMDAKK0BAIC0x MzMsMTUgKzEzMywzMyBAQCB2b2lkIEVSUl9sb2FkX1JBTkRfc3RyaW5ncyh2b2lkKTsKKyAvKiBF cnJvciBjb2RlcyBmb3IgdGhlIFJBTkQgZnVuY3Rpb25zLiAqLworIAorIC8qIEZ1bmN0aW9uIGNv ZGVzLiAqLworKyNkZWZpbmUgUkFORF9GX0VOR19SQU5EX0dFVF9SQU5EX01FVEhPRAkJCSAxMDgK KysjZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkQJCQkJIDEwMworKyNkZWZpbmUgUkFORF9GX0ZJUFNf UkFORF9CWVRFUwkJCQkgMTAyCisrI2RlZmluZSBSQU5EX0ZfRklQU19SQU5EX1NFVF9EVAkJCQkg MTA2CisrI2RlZmluZSBSQU5EX0ZfRklQU19YOTMxX1NFVF9EVAkJCQkgMTA2CisrI2RlZmluZSBS QU5EX0ZfRklQU19TRVRfRFQJCQkJIDEwNAorKyNkZWZpbmUgUkFORF9GX0ZJUFNfU0VUX1BSTkdf U0VFRAkJCSAxMDcKKysjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9URVNUX01PREUJCQkgMTA1Cisg I2RlZmluZSBSQU5EX0ZfUkFORF9HRVRfUkFORF9NRVRIT0QJCQkgMTAxCistI2RlZmluZSBSQU5E X0ZfUkFORF9JTklUX0ZJUFMJCQkJIDEwMgorKyNkZWZpbmUgUkFORF9GX1JBTkRfSU5JVF9GSVBT CQkJCSAxMDkKKyAjZGVmaW5lIFJBTkRfRl9TU0xFQVlfUkFORF9CWVRFUwkJCSAxMDAKKyAKKyAv KiBSZWFzb24gY29kZXMuICovCistI2RlZmluZSBSQU5EX1JfRVJST1JfSU5JVElBTElTSU5HX0RS QkcJCQkgMTAyCistI2RlZmluZSBSQU5EX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHCQkJIDEw MworLSNkZWZpbmUgUkFORF9SX05PX0ZJUFNfUkFORE9NX01FVEhPRF9TRVQJCSAxMDEKKysjZGVm aW5lIFJBTkRfUl9FUlJPUl9JTklUSUFMSVNJTkdfRFJCRwkJCSAxMTIKKysjZGVmaW5lIFJBTkRf Ul9FUlJPUl9JTlNUQU5USUFUSU5HX0RSQkcJCQkgMTEzCisrI2RlZmluZSBSQU5EX1JfTk9OX0ZJ UFNfTUVUSE9ECQkJCSAxMDUKKysjZGVmaW5lIFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFCQkJCSAx MDYKKysjZGVmaW5lIFJBTkRfUl9OT19GSVBTX1JBTkRPTV9NRVRIT0RfU0VUCQkgMTExCisrI2Rl ZmluZSBSQU5EX1JfTk9fS0VZX1NFVAkJCQkgMTA3CisrI2RlZmluZSBSQU5EX1JfUFJOR19BU0tJ TkdfRk9SX1RPT19NVUNICQkJIDEwMQorKyNkZWZpbmUgUkFORF9SX1BSTkdfRVJST1IJCQkJIDEw OAorKyNkZWZpbmUgUkFORF9SX1BSTkdfS0VZRUQJCQkJIDEwOQorKyNkZWZpbmUgUkFORF9SX1BS TkdfTk9UX1JFS0VZRUQJCQkJIDEwMgorKyNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1JFU0VFREVE CQkJIDEwMworICNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1NFRURFRAkJCQkgMTAwCisrI2RlZmlu ZSBSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENIX0tFWQkJIDExMAorKyNkZWZpbmUgUkFO RF9SX1BSTkdfU1RVQ0sJCQkJIDEwNAorIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKyB9CitkaWZm IC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYy5maXBzIG9w ZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jCistLS0gb3BlbnNzbC0x LjAuMS1iZXRhMy9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMuZmlwcwkyMDExLTA2LTAxIDE1OjM5 OjQ0LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3JpcGVt ZC9ybWRfZGdzdC5jCTIwMTItMDItMjkgMTA6MzM6MDIuODAyMjk0OTY1ICswMTAwCitAQCAtNzAs NyArNzAsNyBAQCBjb25zdCBjaGFyIFJNRDE2MF92ZXJzaW9uW109IlJJUEUtTUQxNjAiCisgICAg ICB2b2lkIHJpcGVtZDE2MF9ibG9jayhSSVBFTUQxNjBfQ1RYICpjLCB1bnNpZ25lZCBsb25nICpw LHNpemVfdCBudW0pOworICMgIGVuZGlmCisgCistZmlwc19tZF9pbml0KFJJUEVNRDE2MCkKKytu b25maXBzX21kX2luaXQoUklQRU1EMTYwKQorIAl7CisgCW1lbXNldCAoYywwLHNpemVvZigqYykp OworIAljLT5BPVJJUEVNRDE2MF9BOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlw dG8vcnNhL3JzYV9jcnB0LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9yc2EvcnNh X2NycHQuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3JzYS9yc2FfY3JwdC5jLmZp cHMJMjAxMS0wNi0wMiAyMDoyMjo0Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4x LWJldGEzL2NyeXB0by9yc2EvcnNhX2NycHQuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjgwMjI5NDk2 NSArMDEwMAorQEAgLTkwLDEwICs5MCw5IEBAIGludCBSU0FfcHJpdmF0ZV9lbmNyeXB0KGludCBm bGVuLCBjb25zdAorIAkgICAgIFJTQSAqcnNhLCBpbnQgcGFkZGluZykKKyAJeworICNpZmRlZiBP UEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJT QV9GTEFHX0ZJUFNfTUVUSE9EKQorLQkJCSYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9G SVBTX0FMTE9XKSkKKysJaWYoRklQU19tb2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdf Tk9OX0ZJUFNfQUxMT1cpKQorIAkJeworLQkJUlNBZXJyKFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZ UFQsIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QpOworKwkJUlNBZXJyKFJTQV9GX1JTQV9QUklW QVRFX0VOQ1JZUFQsIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUpOwor IAkJcmV0dXJuIC0xOworIAkJfQorICNlbmRpZgorQEAgLTExOCwxMCArMTE3LDkgQEAgaW50IFJT QV9wdWJsaWNfZGVjcnlwdChpbnQgZmxlbiwgY29uc3QgdQorIAkgICAgIFJTQSAqcnNhLCBpbnQg cGFkZGluZykKKyAJeworICNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpICYm ICEocnNhLT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQorLQkJCSYmICEocnNh LT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKysJaWYoRklQU19tb2RlKCkgJiYg IShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorIAkJeworLQkJUlNBZXJy KFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7Cisr CQlSU0FlcnIoUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9PUEVSQVRJT05fTk9UX0FM TE9XRURfSU5fRklQU19NT0RFKTsKKyAJCXJldHVybiAtMTsKKyAJCX0KKyAjZW5kaWYKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3JzYS9yc2FfZWF5LmMuZmlwcyBvcGVuc3Ns LTEuMC4xLWJldGEzL2NyeXB0by9yc2EvcnNhX2VheS5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRh My9jcnlwdG8vcnNhL3JzYV9lYXkuYy5maXBzCTIwMTEtMTAtMTkgMTY6NTg6NTkuMDAwMDAwMDAw ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vcnNhL3JzYV9lYXkuYwkyMDEy LTAyLTI5IDEwOjMzOjAyLjgwMjI5NDk2NSArMDEwMAorQEAgLTExNCw2ICsxMTQsMTAgQEAKKyAj aW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorICNpbmNs dWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorICNp Zm5kZWYgUlNBX05VTEwKKyAKK0BAIC0xMzgsNyArMTQyLDcgQEAgc3RhdGljIFJTQV9NRVRIT0Qg cnNhX3BrY3MxX2VheV9tZXRoPXsKKyAJQk5fbW9kX2V4cF9tb250LCAvKiBYWFggcHJvYmFibHkg d2Ugc2hvdWxkIG5vdCB1c2UgTW9udGdvbWVyeSBpZiAgZSA9PSAzICovCisgCVJTQV9lYXlfaW5p dCwKKyAJUlNBX2VheV9maW5pc2gsCistCTAsIC8qIGZsYWdzICovCisrCVJTQV9GTEFHX0ZJUFNf TUVUSE9ELCAvKiBmbGFncyAqLworIAlOVUxMLAorIAkwLCAvKiByc2Ffc2lnbiAqLworIAkwLCAv KiByc2FfdmVyaWZ5ICovCitAQCAtMTU4LDYgKzE2MiwyNCBAQCBzdGF0aWMgaW50IFJTQV9lYXlf cHVibGljX2VuY3J5cHQoaW50IGZsCisgCXVuc2lnbmVkIGNoYXIgKmJ1Zj1OVUxMOworIAlCTl9D VFggKmN0eD1OVUxMOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19tb2RlKCkp CisrCQl7CisrCQlpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCQl7CisrCQkJRklQU2Vy cihGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlM RUQpOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysKKysJCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0Ff RkxBR19OT05fRklQU19BTExPVykKKysJCQkmJiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5T U0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQkJeworKwkJCVJTQWVycihSU0FfRl9S U0FfRUFZX1BVQkxJQ19FTkNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJCXJl dHVybiAtMTsKKysJCQl9CisrCQl9CisrI2VuZGlmCisrCisgCWlmIChCTl9udW1fYml0cyhyc2Et Pm4pID4gT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUykKKyAJCXsKKyAJCVJTQWVycihSU0Ff Rl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBULCBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7CitAQCAt MzYxLDYgKzM4MywyNCBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9lbmNyeXB0KGludCBm CisgCUJJR05VTSAqdW5ibGluZCA9IE5VTEw7CisgCUJOX0JMSU5ESU5HICpibGluZGluZyA9IE5V TEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkpCisrCQl7Cisr CQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9S U0FfRUFZX1BSSVZBVEVfRU5DUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJ CXJldHVybiAtMTsKKysJCQl9CisrCisrCQlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9O X0ZJUFNfQUxMT1cpCisrCQkJJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9G SVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJCXsKKysJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9Q UklWQVRFX0VOQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQkJcmV0dXJuIC0x OworKwkJCX0KKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBO VUxMKSBnb3RvIGVycjsKKyAJQk5fQ1RYX3N0YXJ0KGN0eCk7CisgCWYgICA9IEJOX0NUWF9nZXQo Y3R4KTsKK0BAIC01MDQsNiArNTQ0LDI0IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wcml2YXRlX2Rl Y3J5cHQoaW50IGYKKyAJQklHTlVNICp1bmJsaW5kID0gTlVMTDsKKyAJQk5fQkxJTkRJTkcgKmJs aW5kaW5nID0gTlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUo KSkKKysJCXsKKysJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQkJeworKwkJCUZJUFNl cnIoRklQU19GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZB SUxFRCk7CisrCQkJcmV0dXJuIC0xOworKwkJCX0KKysKKysJCWlmICghKHJzYS0+ZmxhZ3MgJiBS U0FfRkxBR19OT05fRklQU19BTExPVykKKysJCQkmJiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9Q RU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQkJeworKwkJCVJTQWVycihSU0Ff Rl9SU0FfRUFZX1BSSVZBVEVfREVDUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJ CQlyZXR1cm4gLTE7CisrCQkJfQorKwkJfQorKyNlbmRpZgorKworIAlpZigoY3R4ID0gQk5fQ1RY X25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKKyAJQk5fQ1RYX3N0YXJ0KGN0eCk7CisgCWYgICA9 IEJOX0NUWF9nZXQoY3R4KTsKK0BAIC02MzksNiArNjk3LDI0IEBAIHN0YXRpYyBpbnQgUlNBX2Vh eV9wdWJsaWNfZGVjcnlwdChpbnQgZmwKKyAJdW5zaWduZWQgY2hhciAqYnVmPU5VTEw7CisgCUJO X0NUWCAqY3R4PU5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2Rl KCkpCisrCQl7CisrCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJCXsKKysJCQlGSVBT ZXJyKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZB SUxFRCk7CisrCQkJZ290byBlcnI7CisrCQkJfQorKworKwkJaWYgKCEocnNhLT5mbGFncyAmIFJT QV9GTEFHX05PTl9GSVBTX0FMTE9XKQorKwkJCSYmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BF TlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCQl7CisrCQkJUlNBZXJyKFJTQV9G X1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQkJ cmV0dXJuIC0xOworKwkJCX0KKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKEJOX251bV9iaXRzKHJz YS0+bikgPiBPUEVOU1NMX1JTQV9NQVhfTU9EVUxVU19CSVRTKQorIAkJeworIAkJUlNBZXJyKFJT QV9GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX01PRFVMVVNfVE9PX0xBUkdFKTsKK0BA IC04NDcsMTIgKzkyMywxMiBAQCBzdGF0aWMgaW50IFJTQV9lYXlfbW9kX2V4cChCSUdOVU0gKnIw LCBjCisgCWlmICghQk5fbW9kKHIwLHByMSxyc2EtPnAsY3R4KSkgZ290byBlcnI7CisgCisgCS8q IElmIHAgPCBxIGl0IGlzIG9jY2FzaW9uYWxseSBwb3NzaWJsZSBmb3IgdGhlIGNvcnJlY3Rpb24g b2YKKy0gICAgICAgICAqIGFkZGluZyAncCcgaWYgcjAgaXMgbmVnYXRpdmUgYWJvdmUgdG8gbGVh dmUgdGhlIHJlc3VsdCBzdGlsbAorKwkgKiBhZGRpbmcgJ3AnIGlmIHIwIGlzIG5lZ2F0aXZlIGFi b3ZlIHRvIGxlYXZlIHRoZSByZXN1bHQgc3RpbGwKKyAJICogbmVnYXRpdmUuIFRoaXMgY2FuIGJy ZWFrIHRoZSBwcml2YXRlIGtleSBvcGVyYXRpb25zOiB0aGUgZm9sbG93aW5nCisgCSAqIHNlY29u ZCBjb3JyZWN0aW9uIHNob3VsZCAqYWx3YXlzKiBjb3JyZWN0IHRoaXMgcmFyZSBvY2N1cnJlbmNl LgorIAkgKiBUaGlzIHdpbGwgKm5ldmVyKiBoYXBwZW4gd2l0aCBPcGVuU1NMIGdlbmVyYXRlZCBr ZXlzIGJlY2F1c2UKKy0gICAgICAgICAqIHRoZXkgZW5zdXJlIHAgPiBxIFtzdGV2ZV0KKy0gICAg ICAgICAqLworKwkgKiB0aGV5IGVuc3VyZSBwID4gcSBbc3RldmVdCisrCSAqLworIAlpZiAoQk5f aXNfbmVnYXRpdmUocjApKQorIAkJaWYgKCFCTl9hZGQocjAscjAscnNhLT5wKSkgZ290byBlcnI7 CisgCWlmICghQk5fbXVsKHIxLHIwLHJzYS0+cSxjdHgpKSBnb3RvIGVycjsKK0BAIC04OTcsNiAr OTczLDkgQEAgZXJyOgorIAorIHN0YXRpYyBpbnQgUlNBX2VheV9pbml0KFJTQSAqcnNhKQorIAl7 CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlm CisgCXJzYS0+ZmxhZ3N8PVJTQV9GTEFHX0NBQ0hFX1BVQkxJQ3xSU0FfRkxBR19DQUNIRV9QUklW QVRFOworIAlyZXR1cm4oMSk7CisgCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5 cHRvL3JzYS9yc2FfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9yc2EvcnNh X2Vyci5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vcnNhL3JzYV9lcnIuYy5maXBz CTIwMTEtMTAtMTAgMDE6MTM6NTAuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMS1i ZXRhMy9jcnlwdG8vcnNhL3JzYV9lcnIuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjgwMjI5NDk2NSAr MDEwMAorQEAgLTEyMSw2ICsxMjEsOCBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFJTQV9zdHJf ZnVuY3RzW109Cisge0VSUl9GVU5DKFJTQV9GX1JTQV9QVUJMSUNfRU5DUllQVCksCSJSU0FfcHVi bGljX2VuY3J5cHQifSwKKyB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BVQl9ERUNPREUpLAkiUlNBX1BV Ql9ERUNPREUifSwKKyB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVFVQX0JMSU5ESU5HKSwJIlJTQV9z ZXR1cF9ibGluZGluZyJ9LAorK3tFUlJfRlVOQyhSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVUSE9E KSwJIlJTQV9zZXRfZGVmYXVsdF9tZXRob2QifSwKKyt7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVF9N RVRIT0QpLAkiUlNBX3NldF9tZXRob2QifSwKKyB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NJR04pLAki UlNBX3NpZ24ifSwKKyB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NJR05fQVNOMV9PQ1RFVF9TVFJJTkcp LAkiUlNBX3NpZ25fQVNOMV9PQ1RFVF9TVFJJTkcifSwKKyB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1ZF UklGWSksCSJSU0FfdmVyaWZ5In0sCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0 by9yc2EvcnNhX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vcnNhL3JzYV9n ZW4uYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3JzYS9yc2FfZ2VuLmMuZmlwcwky MDExLTA2LTA5IDE1OjE4OjA3LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0 YTMvY3J5cHRvL3JzYS9yc2FfZ2VuLmMJMjAxMi0wMi0yOSAxMDozMzowMi44MDMyOTQ5NzQgKzAx MDAKK0BAIC02OSw2ICs2OSw3OCBAQAorICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorICNpZmRl ZiBPUEVOU1NMX0ZJUFMKKyAjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrCisrc3RhdGljIGludCBm aXBzX3JzYV9wYWlyd2lzZV9mYWlsID0gMDsKKysKKyt2b2lkIEZJUFNfY29ycnVwdF9yc2Ffa2V5 Z2VuKHZvaWQpCisrCXsKKysJZmlwc19yc2FfcGFpcndpc2VfZmFpbCA9IDE7CisrCX0KKysKKytp bnQgZmlwc19jaGVja19yc2EoUlNBICpyc2EpCisrCXsKKysJY29uc3QgdW5zaWduZWQgY2hhciB0 YnNbXSA9ICJSU0EgUGFpcndpc2UgQ2hlY2sgRGF0YSI7CisrCXVuc2lnbmVkIGNoYXIgKmN0YnVm ID0gTlVMTCwgKnB0YnVmID0gTlVMTDsKKysJaW50IGxlbiwgcmV0ID0gMDsKKysJRVZQX1BLRVkg KnBrOworKworKwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQorKwkJZ290byBlcnI7 CisrCisrCUVWUF9QS0VZX3NldDFfUlNBKHBrLCByc2EpOworKworKwkvKiBQZXJmb3JtIHBhaXJ3 aXNlIGNvbnNpc3RlbmN5IHNpZ25hdHVyZSB0ZXN0ICovCisrCWlmICghZmlwc19wa2V5X3NpZ25h dHVyZV90ZXN0KHBrLCB0YnMsIC0xLAorKwkJCU5VTEwsIDAsIEVWUF9zaGExKCksIEVWUF9NRF9D VFhfRkxBR19QQURfUEtDUzEsIE5VTEwpCisrCQl8fCAhZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0 KHBrLCB0YnMsIC0xLAorKwkJCU5VTEwsIDAsIEVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19Q QURfWDkzMSwgTlVMTCkKKysJCXx8ICFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywg LTEsCisrCQkJTlVMTCwgMCwgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsIE5V TEwpKQorKwkJZ290byBlcnI7CisrCS8qIE5vdyBwZXJmb3JtIHBhaXJ3aXNlIGNvbnNpc3RlbmN5 IGVuY3J5cHQvZGVjcnlwdCB0ZXN0ICovCisrCWN0YnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX3Np emUocnNhKSk7CisrCWlmICghY3RidWYpCisrCQlnb3RvIGVycjsKKysKKysJbGVuID0gUlNBX3B1 YmxpY19lbmNyeXB0KHNpemVvZih0YnMpIC0gMSwgdGJzLCBjdGJ1ZiwgcnNhLCBSU0FfUEtDUzFf UEFERElORyk7CisrCWlmIChsZW4gPD0gMCkKKysJCWdvdG8gZXJyOworKwkvKiBDaGVjayBjaXBo ZXJ0ZXh0IGRvZXNuJ3QgbWF0Y2ggcGxhaW50ZXh0ICovCisrCWlmICgobGVuID09IChzaXplb2Yo dGJzKSAtIDEpKSAmJiAhbWVtY21wKHRicywgY3RidWYsIGxlbikpCisrCQlnb3RvIGVycjsKKysJ cHRidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShyc2EpKTsKKysKKysJaWYgKCFwdGJ1ZikK KysJCWdvdG8gZXJyOworKwlsZW4gPSBSU0FfcHJpdmF0ZV9kZWNyeXB0KGxlbiwgY3RidWYsIHB0 YnVmLCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsKKysJaWYgKGxlbiAhPSAoc2l6ZW9mKHRicykg LSAxKSkKKysJCWdvdG8gZXJyOworKwlpZiAobWVtY21wKHB0YnVmLCB0YnMsIGxlbikpCisrCQln b3RvIGVycjsKKysKKysJcmV0ID0gMTsKKysKKysJaWYgKCFwdGJ1ZikKKysJCWdvdG8gZXJyOwor KwkKKysJZXJyOgorKwlpZiAocmV0ID09IDApCisrCQl7CisrCQlmaXBzX3NldF9zZWxmdGVzdF9m YWlsKCk7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0NIRUNLX1JTQSxGSVBTX1JfUEFJUldJU0Vf VEVTVF9GQUlMRUQpOworKwkJfQorKworKwlpZiAoY3RidWYpCisrCQlPUEVOU1NMX2ZyZWUoY3Ri dWYpOworKwlpZiAocHRidWYpCisrCQlPUEVOU1NMX2ZyZWUocHRidWYpOworKwlpZiAocGspCisr CQlFVlBfUEtFWV9mcmVlKHBrKTsKKysKKysJcmV0dXJuIHJldDsKKysJfQorICNlbmRpZgorIAor IHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVN ICplX3ZhbHVlLCBCTl9HRU5DQiAqY2IpOworQEAgLTgxLDcgKzE1Myw3IEBAIHN0YXRpYyBpbnQg cnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLAorIGludCBSU0FfZ2VuZXJhdGVfa2V5X2V4KFJT QSAqcnNhLCBpbnQgYml0cywgQklHTlVNICplX3ZhbHVlLCBCTl9HRU5DQiAqY2IpCisgCXsKKyAj aWZkZWYgT1BFTlNTTF9GSVBTCistCWlmIChGSVBTX21vZGUoKSAmJiAhKHJzYS0+bWV0aC0+Zmxh Z3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkKKysJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSAmJiAh KHJzYS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkKKyAJCQkmJiAhKHJzYS0+ ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCisgCQl7CisgCQlSU0FlcnIoUlNBX0Zf UlNBX0dFTkVSQVRFX0tFWV9FWCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7CitAQCAtOTAs MTAgKzE2Miw2IEBAIGludCBSU0FfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYmkKKyAj ZW5kaWYKKyAJaWYocnNhLT5tZXRoLT5yc2Ffa2V5Z2VuKQorIAkJcmV0dXJuIHJzYS0+bWV0aC0+ cnNhX2tleWdlbihyc2EsIGJpdHMsIGVfdmFsdWUsIGNiKTsKKy0jaWZkZWYgT1BFTlNTTF9GSVBT CistCWlmIChGSVBTX21vZGUoKSkKKy0JCXJldHVybiBGSVBTX3JzYV9nZW5lcmF0ZV9rZXlfZXgo cnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7CistI2VuZGlmCisgCXJldHVybiByc2FfYnVpbHRpbl9r ZXlnZW4ocnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7CisgCX0KKyAKK0BAIC0xMDUsNiArMTczLDIz IEBAIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLAorIAlpbnQgYml0c3As Yml0c3Esb2s9IC0xLG49MDsKKyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrCWlmIChGSVBTX21vZHVsZV9tb2RlKCkpCisrCQl7CisrCQlpZihGSVBTX3NlbGZ0 ZXN0X2ZhaWxlZCgpKQorKwkgICAgCXsKKysJCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfQlVJTFRJ Tl9LRVlHRU4sRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAgIAlyZXR1cm4gMDsK KysJICAgIAl9CisrCisrCQlpZiAoYml0cyA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNf QklUUykKKysJCSAgICB7CisrCQkgICAgRklQU2VycihGSVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VO LEZJUFNfUl9LRVlfVE9PX1NIT1JUKTsKKysJCSAgICByZXR1cm4gMDsKKysJCSAgICB9CisrCQl9 CisrI2VuZGlmCisrCisgCWN0eD1CTl9DVFhfbmV3KCk7CisgCWlmIChjdHggPT0gTlVMTCkgZ290 byBlcnI7CisgCUJOX0NUWF9zdGFydChjdHgpOworQEAgLTIxNiw2ICszMDEsMTcgQEAgc3RhdGlj IGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsCisgCQlwID0gcnNhLT5wOworIAlpZiAo IUJOX21vZF9pbnZlcnNlKHJzYS0+aXFtcCxyc2EtPnEscCxjdHgpKSBnb3RvIGVycjsKKyAKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZHVsZV9tb2RlKCkpCisrCQl7CisrCQlp ZiAoZmlwc19yc2FfcGFpcndpc2VfZmFpbCkKKysJCQlCTl9hZGRfd29yZChyc2EtPm4sIDEpOwor KworKwkJaWYoIWZpcHNfY2hlY2tfcnNhKHJzYSkpCisrCQkgICAgZ290byBlcnI7CisrCQl9Cisr I2VuZGlmCisrCisgCW9rPTE7CisgZXJyOgorIAlpZiAob2sgPT0gLTEpCitkaWZmIC11cCBvcGVu c3NsLTEuMC4xLWJldGEzL2NyeXB0by9yc2EvcnNhLmguZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEz L2NyeXB0by9yc2EvcnNhLmgKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9yc2EvcnNh LmguZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAyLjU3NzI5MzAzMCArMDEwMAorKysrIG9wZW5zc2wt MS4wLjEtYmV0YTMvY3J5cHRvL3JzYS9yc2EuaAkyMDEyLTAyLTI5IDEwOjMzOjAyLjgwMzI5NDk3 NCArMDEwMAorQEAgLTE2NCw2ICsxNjQsOCBAQCBzdHJ1Y3QgcnNhX3N0CisgIyBkZWZpbmUgT1BF TlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUwkxNjM4NAorICNlbmRpZgorIAorKyNkZWZpbmUgT1BF TlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKKysKKyAjaWZuZGVmIE9QRU5TU0xf UlNBX1NNQUxMX01PRFVMVVNfQklUUworICMgZGVmaW5lIE9QRU5TU0xfUlNBX1NNQUxMX01PRFVM VVNfQklUUwkzMDcyCisgI2VuZGlmCitAQCAtMjkwLDYgKzI5MiwxMSBAQCBSU0EgKglSU0FfZ2Vu ZXJhdGVfa2V5KGludCBiaXRzLCB1bnNpZ25lCisgCisgLyogTmV3IHZlcnNpb24gKi8KKyBpbnQJ UlNBX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIEJJR05VTSAqZSwgQk5fR0VO Q0IgKmNiKTsKKytpbnQgUlNBX1g5MzFfZGVyaXZlX2V4KFJTQSAqcnNhLCBCSUdOVU0gKnAxLCBC SUdOVU0gKnAyLCBCSUdOVU0gKnExLCBCSUdOVU0gKnEyLAorKwkJCWNvbnN0IEJJR05VTSAqWHAx LCBjb25zdCBCSUdOVU0gKlhwMiwgY29uc3QgQklHTlVNICpYcCwKKysJCQljb25zdCBCSUdOVU0g KlhxMSwgY29uc3QgQklHTlVNICpYcTIsIGNvbnN0IEJJR05VTSAqWHEsCisrCQkJY29uc3QgQklH TlVNICplLCBCTl9HRU5DQiAqY2IpOworK2ludCBSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgoUlNB ICpyc2EsIGludCBiaXRzLCBjb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7CisgCisgaW50 CVJTQV9jaGVja19rZXkoY29uc3QgUlNBICopOworIAkvKiBuZXh0IDQgcmV0dXJuIC0xIG9uIGVy cm9yICovCitAQCAtNDg3LDcgKzQ5NCw3IEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9p ZCk7CisgI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfTk9ORQkJCSAxMDcKKyAjZGVmaW5l IFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9PQUVQCQkgMTIxCisgI2RlZmluZSBSU0FfRl9S U0FfUEFERElOR19BRERfUEtDUzFfUFNTCQkJIDEyNQorLSNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJ TkdfQUREX1BLQ1MxX1BTU19NR0YxCQkgMTQ4CisrI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19B RERfUEtDUzFfUFNTX01HRjEJCSAxNTgKKyAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9Q S0NTMV9UWVBFXzEJCSAxMDgKKyAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9U WVBFXzIJCSAxMDkKKyAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9TU0xWMjMJCQkgMTEw CitAQCAtNTAwLDIwICs1MDcsMjIgQEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsK KyAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0NIRUNLX1g5MzEJCQkgMTI4CisgI2RlZmluZSBS U0FfRl9SU0FfUFJJTlQJCQkJCSAxMTUKKyAjZGVmaW5lIFJTQV9GX1JTQV9QUklOVF9GUAkJCQkg MTE2CistI2RlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9ERUNSWVBUCQkJIDE1MAorLSNkZWZpbmUg UlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVAkJCSAxNTEKKysjZGVmaW5lIFJTQV9GX1JTQV9QUklW QVRFX0RFQ1JZUFQJCQkgMTU3CisrI2RlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBUCQkJ IDE0OAorICNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZfREVDT0RFCQkJCSAxMzcKKyAjZGVmaW5lIFJT QV9GX1JTQV9QUklWX0VOQ09ERQkJCQkgMTM4CistI2RlZmluZSBSU0FfRl9SU0FfUFVCTElDX0RF Q1JZUFQJCQkgMTUyCisrI2RlZmluZSBSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQJCQkgMTQ5Cisg I2RlZmluZSBSU0FfRl9SU0FfUFVCTElDX0VOQ1JZUFQJCQkgMTUzCisgI2RlZmluZSBSU0FfRl9S U0FfUFVCX0RFQ09ERQkJCQkgMTM5CisgI2RlZmluZSBSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcJ CQkgMTM2CisrI2RlZmluZSBSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVUSE9ECQkJIDE1MAorKyNk ZWZpbmUgUlNBX0ZfUlNBX1NFVF9NRVRIT0QJCQkJIDE1MQorICNkZWZpbmUgUlNBX0ZfUlNBX1NJ R04JCQkJCSAxMTcKKyAjZGVmaW5lIFJTQV9GX1JTQV9TSUdOX0FTTjFfT0NURVRfU1RSSU5HCQkg MTE4CisgI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZCQkJCSAxMTkKKyAjZGVmaW5lIFJTQV9GX1JT QV9WRVJJRllfQVNOMV9PQ1RFVF9TVFJJTkcJCSAxMjAKKyAjZGVmaW5lIFJTQV9GX1JTQV9WRVJJ RllfUEtDUzFfUFNTCQkJIDEyNgorLSNkZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWV9QS0NTMV9QU1Nf TUdGMQkJCSAxNDkKKysjZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNTX01HRjEJCQkg MTUyCisgCisgLyogUmVhc29uIGNvZGVzLiAqLworICNkZWZpbmUgUlNBX1JfQUxHT1JJVEhNX01J U01BVENICQkJIDEwMAorQEAgLTU0MiwyMSArNTUxLDIyIEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0 cmluZ3Modm9pZCk7CisgI2RlZmluZSBSU0FfUl9JTlZBTElEX01HRjFfTUQJCQkJIDE1NgorICNk ZWZpbmUgUlNBX1JfSU5WQUxJRF9QQURESU5HCQkJCSAxMzgKKyAjZGVmaW5lIFJTQV9SX0lOVkFM SURfUEFERElOR19NT0RFCQkJIDE0MQorLSNkZWZpbmUgUlNBX1JfSU5WQUxJRF9QU1NfUEFSQU1F VEVSUwkJCSAxNDkKKysjZGVmaW5lIFJTQV9SX0lOVkFMSURfUFNTX1BBUkFNRVRFUlMJCQkgMTU3 CisgI2RlZmluZSBSU0FfUl9JTlZBTElEX1BTU19TQUxUTEVOCQkJIDE0NgorLSNkZWZpbmUgUlNB X1JfSU5WQUxJRF9TQUxUX0xFTkdUSAkJCSAxNTAKKysjZGVmaW5lIFJTQV9SX0lOVkFMSURfU0FM VF9MRU5HVEgJCQkgMTU4CisgI2RlZmluZSBSU0FfUl9JTlZBTElEX1RSQUlMRVIJCQkJIDEzOQor ICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9YOTMxX0RJR0VTVAkJCSAxNDIKKyAjZGVmaW5lIFJTQV9S X0lRTVBfTk9UX0lOVkVSU0VfT0ZfUQkJCSAxMjYKKyAjZGVmaW5lIFJTQV9SX0tFWV9TSVpFX1RP T19TTUFMTAkJCSAxMjAKKyAjZGVmaW5lIFJTQV9SX0xBU1RfT0NURVRfSU5WQUxJRAkJCSAxMzQK KyAjZGVmaW5lIFJTQV9SX01PRFVMVVNfVE9PX0xBUkdFCQkJCSAxMDUKKy0jZGVmaW5lIFJTQV9S X05PTl9GSVBTX1JTQV9NRVRIT0QJCQkgMTU3CisrI2RlZmluZSBSU0FfUl9OT05fRklQU19SU0Ff TUVUSE9ECQkJIDE0OQorKyNkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxNDkKKyAj ZGVmaW5lIFJTQV9SX05PX1BVQkxJQ19FWFBPTkVOVAkJCSAxNDAKKyAjZGVmaW5lIFJTQV9SX05V TExfQkVGT1JFX0JMT0NLX01JU1NJTkcJCQkgMTEzCisgI2RlZmluZSBSU0FfUl9OX0RPRVNfTk9U X0VRVUFMX1BfUQkJCSAxMjcKKyAjZGVmaW5lIFJTQV9SX09BRVBfREVDT0RJTkdfRVJST1IJCQkg MTIxCistI2RlZmluZSBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFCSAx NTgKKysjZGVmaW5lIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUJIDE1 MAorICNkZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05PVF9TVVBQT1JURURfRk9SX1RISVNfS0VZVFlQ RQkgMTQ4CisgI2RlZmluZSBSU0FfUl9QQURESU5HX0NIRUNLX0ZBSUxFRAkJCSAxMTQKKyAjZGVm aW5lIFJTQV9SX1BfTk9UX1BSSU1FCQkJCSAxMjgKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0 YTMvY3J5cHRvL3JzYS9yc2FfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9y c2EvcnNhX2xpYi5jCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vcnNhL3JzYV9saWIu Yy5maXBzCTIwMTEtMDYtMjAgMjE6NDE6MTMuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0x LjAuMS1iZXRhMy9jcnlwdG8vcnNhL3JzYV9saWIuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjgwMzI5 NDk3NCArMDEwMAorQEAgLTg0LDYgKzg0LDEzIEBAIFJTQSAqUlNBX25ldyh2b2lkKQorIAorIHZv aWQgUlNBX3NldF9kZWZhdWx0X21ldGhvZChjb25zdCBSU0FfTUVUSE9EICptZXRoKQorIAl7Cisr I2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgIShtZXRoLT5mbGFncyAm IFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkKKysJCXsKKysJCVJTQWVycihSU0FfRl9SU0FfU0VUX0RF RkFVTFRfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0QpOworKwkJcmV0dXJuOworKwkJfQor KyNlbmRpZgorIAlkZWZhdWx0X1JTQV9tZXRoID0gbWV0aDsKKyAJfQorIAorQEAgLTkxLDE4ICs5 OCwxMSBAQCBjb25zdCBSU0FfTUVUSE9EICpSU0FfZ2V0X2RlZmF1bHRfbWV0aG9kCisgCXsKKyAJ aWYgKGRlZmF1bHRfUlNBX21ldGggPT0gTlVMTCkKKyAJCXsKKy0jaWZkZWYgT1BFTlNTTF9GSVBT CistCQlpZiAoRklQU19tb2RlKCkpCistCQkJcmV0dXJuIEZJUFNfcnNhX3BrY3MxX3NzbGVheSgp OworLQkJZWxzZQorLQkJCXJldHVybiBSU0FfUEtDUzFfU1NMZWF5KCk7CistI2Vsc2UKKyAjaWZk ZWYgUlNBX05VTEwKKyAJCWRlZmF1bHRfUlNBX21ldGg9UlNBX251bGxfbWV0aG9kKCk7CisgI2Vs c2UKKyAJCWRlZmF1bHRfUlNBX21ldGg9UlNBX1BLQ1MxX1NTTGVheSgpOworICNlbmRpZgorLSNl bmRpZgorIAkJfQorIAorIAlyZXR1cm4gZGVmYXVsdF9SU0FfbWV0aDsKK0BAIC0xMTgsNiArMTE4 LDEzIEBAIGludCBSU0Ffc2V0X21ldGhvZChSU0EgKnJzYSwgY29uc3QgUlNBX00KKyAJLyogTkI6 IFRoZSBjYWxsZXIgaXMgc3BlY2lmaWNhbGx5IHNldHRpbmcgYSBtZXRob2QsIHNvIGl0J3Mgbm90 IHVwIHRvIHVzCisgCSAqIHRvIGRlYWwgd2l0aCB3aGljaCBFTkdJTkUgaXQgY29tZXMgZnJvbS4g Ki8KKyAJY29uc3QgUlNBX01FVEhPRCAqbXRtcDsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlm IChGSVBTX21vZGUoKSAmJiAhKG1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQor KwkJeworKwkJUlNBZXJyKFJTQV9GX1JTQV9TRVRfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRI T0QpOworKwkJcmV0dXJuIDA7CisrCQl9CisrI2VuZGlmCisgCW10bXAgPSByc2EtPm1ldGg7Cisg CWlmIChtdG1wLT5maW5pc2gpIG10bXAtPmZpbmlzaChyc2EpOworICNpZm5kZWYgT1BFTlNTTF9O T19FTkdJTkUKK0BAIC0xNzAsNiArMTc3LDE4IEBAIFJTQSAqUlNBX25ld19tZXRob2QoRU5HSU5F ICplbmdpbmUpCisgCQkJfQorIAkJfQorICNlbmRpZgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJ aWYgKEZJUFNfbW9kZSgpICYmICEocmV0LT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVU SE9EKSkKKysJCXsKKysJCVJTQWVycihSU0FfRl9SU0FfTkVXX01FVEhPRCwgUlNBX1JfTk9OX0ZJ UFNfTUVUSE9EKTsKKysjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisrCQlpZiAocmV0LT5lbmdp bmUpCisrCQkJRU5HSU5FX2ZpbmlzaChyZXQtPmVuZ2luZSk7CisrI2VuZGlmCisrCQlPUEVOU1NM X2ZyZWUocmV0KTsKKysJCXJldHVybiBOVUxMOworKwkJfQorKyNlbmRpZgorIAorIAlyZXQtPnBh ZD0wOworIAlyZXQtPnZlcnNpb249MDsKK0BAIC0xODgsNyArMjA3LDcgQEAgUlNBICpSU0FfbmV3 X21ldGhvZChFTkdJTkUgKmVuZ2luZSkKKyAJcmV0LT5ibGluZGluZz1OVUxMOworIAlyZXQtPm10 X2JsaW5kaW5nPU5VTEw7CisgCXJldC0+YmlnbnVtX2RhdGE9TlVMTDsKKy0JcmV0LT5mbGFncz1y ZXQtPm1ldGgtPmZsYWdzICYgflJTQV9GTEFHX05PTl9GSVBTX0FMTE9XOworKwlyZXQtPmZsYWdz PXJldC0+bWV0aC0+ZmxhZ3M7CisgCWlmICghQ1JZUFRPX25ld19leF9kYXRhKENSWVBUT19FWF9J TkRFWF9SU0EsIHJldCwgJnJldC0+ZXhfZGF0YSkpCisgCQl7CisgI2lmbmRlZiBPUEVOU1NMX05P X0VOR0lORQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vcnNhL3JzYV9wbWV0 aC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vcnNhL3JzYV9wbWV0aC5jCistLS0g b3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vcnNhL3JzYV9wbWV0aC5jLmZpcHMJMjAxMi0wMi0x NSAxNToxNDowMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0 by9yc2EvcnNhX3BtZXRoLmMJMjAxMi0wMi0yOSAxMDozNDo1Ni4yOTAzMjAwNDYgKzAxMDAKK0BA IC0yMDYsMjIgKzIwNiw2IEBAIHN0YXRpYyBpbnQgcGtleV9yc2Ffc2lnbihFVlBfUEtFWV9DVFgg KmMKKyAJCQkJCVJTQV9SX0lOVkFMSURfRElHRVNUX0xFTkdUSCk7CisgCQkJcmV0dXJuIC0xOwor IAkJCX0KKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCQlpZiAocmV0ID4gMCkKKy0JCQl7CistCQkJ dW5zaWduZWQgaW50IHNsZW47CistCQkJcmV0ID0gRklQU19yc2Ffc2lnbl9kaWdlc3QocnNhLCB0 YnMsIHRic2xlbiwgcmN0eC0+bWQsCistCQkJCQkJCXJjdHgtPnBhZF9tb2RlLAorLQkJCQkJCQly Y3R4LT5zYWx0bGVuLAorLQkJCQkJCQlyY3R4LT5tZ2YxbWQsCistCQkJCQkJCXNpZywgJnNsZW4p OworLQkJCWlmIChyZXQgPiAwKQorLQkJCQkqc2lnbGVuID0gc2xlbjsKKy0JCQllbHNlCistCQkJ CSpzaWdsZW4gPSAwOworLQkJCXJldHVybiByZXQ7CistCQkJfQorLSNlbmRpZgorIAorIAkJaWYg KEVWUF9NRF90eXBlKHJjdHgtPm1kKSA9PSBOSURfbWRjMikKKyAJCQl7CitAQCAtMzU0LDE5ICsz MzgsNiBAQCBzdGF0aWMgaW50IHBrZXlfcnNhX3ZlcmlmeShFVlBfUEtFWV9DVFgKKyAjZW5kaWYK KyAJaWYgKHJjdHgtPm1kKQorIAkJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JCWlmIChydiA+ IDApCistCQkJeworLQkJCXJldHVybiBGSVBTX3JzYV92ZXJpZnlfZGlnZXN0KHJzYSwKKy0JCQkJ CQkJdGJzLCB0YnNsZW4sCistCQkJCQkJCXJjdHgtPm1kLAorLQkJCQkJCQlyY3R4LT5wYWRfbW9k ZSwKKy0JCQkJCQkJcmN0eC0+c2FsdGxlbiwKKy0JCQkJCQkJcmN0eC0+bWdmMW1kLAorLQkJCQkJ CQlzaWcsIHNpZ2xlbik7CistCQkJCQkJCQorLQkJCX0KKy0jZW5kaWYKKyAJCWlmIChyY3R4LT5w YWRfbW9kZSA9PSBSU0FfUEtDUzFfUEFERElORykKKyAJCQlyZXR1cm4gUlNBX3ZlcmlmeShFVlBf TURfdHlwZShyY3R4LT5tZCksIHRicywgdGJzbGVuLAorIAkJCQkJc2lnLCBzaWdsZW4sIHJzYSk7 CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9yc2EvcnNhX3NpZ24uYy5maXBz IG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jCistLS0gb3BlbnNzbC0x LjAuMS1iZXRhMy9jcnlwdG8vcnNhL3JzYV9zaWduLmMuZmlwcwkyMDEyLTAyLTE1IDE1OjAwOjA5 LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3JzYS9yc2Ff c2lnbi5jCTIwMTItMDItMjkgMTA6Mzc6NTQuOTE2ODU3NDI0ICswMTAwCitAQCAtMTM4LDcgKzEz OCw4IEBAIGludCBSU0Ffc2lnbihpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2gKKyAJCWkyZF9Y NTA5X1NJRygmc2lnLCZwKTsKKyAJCXM9dG1wczsKKyAJfQorLQlpPVJTQV9wcml2YXRlX2VuY3J5 cHQoaSxzLHNpZ3JldCxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOworKwkvKiBOQjogY2FsbCB1bmRl cmx5aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9pZCBGSVBTIGJsb2NraW5nICovCisrCWkgPSBy c2EtPm1ldGgtPnJzYV9wcml2X2VuYyA/IHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jKGkscyxzaWdy ZXQscnNhLFJTQV9QS0NTMV9QQURESU5HKSA6IDA7CisgCWlmIChpIDw9IDApCisgCQlyZXQ9MDsK KyAJZWxzZQorQEAgLTE3OCw4ICsxNzksOCBAQCBpbnQgaW50X3JzYV92ZXJpZnkoaW50IGR0eXBl LCBjb25zdCB1bnNpCisgCisgCWlmKChkdHlwZSA9PSBOSURfbWQ1X3NoYTEpICYmIHJtKQorIAkJ eworLQkJaSA9IFJTQV9wdWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbiwKKy0JCQkJCXNpZ2J1Zixy bSxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOworKwkJaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMg PyByc2EtPm1ldGgtPnJzYV9wdWJfZGVjKChpbnQpc2lnbGVuLAorKwkJCQkJc2lnYnVmLHJtLHJz YSxSU0FfUEtDUzFfUEFERElORykgOiAwOworIAkJaWYgKGkgPD0gMCkKKyAJCQlyZXR1cm4gMDsK KyAJCSpwcm1fbGVuID0gaTsKK0BAIC0xOTYsNyArMTk3LDggQEAgaW50IGludF9yc2FfdmVyaWZ5 KGludCBkdHlwZSwgY29uc3QgdW5zaQorIAkJCVJTQWVycihSU0FfRl9JTlRfUlNBX1ZFUklGWSxS U0FfUl9JTlZBTElEX01FU1NBR0VfTEVOR1RIKTsKKyAJCQlnb3RvIGVycjsKKyAJfQorLQlpPVJT QV9wdWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BLQ1MxX1BBRERJ TkcpOworKwkvKiBOQjogY2FsbCB1bmRlcmx5aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9pZCBG SVBTIGJsb2NraW5nICovCisrCWkgPSByc2EtPm1ldGgtPnJzYV9wdWJfZGVjID8gcnNhLT5tZXRo LT5yc2FfcHViX2RlYygoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BLQ1MxX1BBRERJTkcp IDogMDsKKyAKKyAJaWYgKGkgPD0gMCkgZ290byBlcnI7CisgCS8qIE9kZGJhbGwgTURDMiBjYXNl OiBzaWduYXR1cmUgY2FuIGJlIE9DVEVUIFNUUklORy4KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEt YmV0YTMvY3J5cHRvL3NoYS9zaGEyNTYuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRv L3NoYS9zaGEyNTYuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3NoYS9zaGEyNTYu Yy5maXBzCTIwMTEtMDYtMDEgMTU6Mzk6NDQuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0x LjAuMS1iZXRhMy9jcnlwdG8vc2hhL3NoYTI1Ni5jCTIwMTItMDItMjkgMTA6MzM6MDIuODA0Mjk0 OTgzICswMTAwCitAQCAtMTIsMTIgKzEyLDE5IEBACisgCisgI2luY2x1ZGUgPG9wZW5zc2wvY3J5 cHRvLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUwor KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSA8b3BlbnNz bC9vcGVuc3Nsdi5oPgorIAorIGNvbnN0IGNoYXIgU0hBMjU2X3ZlcnNpb25bXT0iU0hBLTI1NiIg T1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorIGZpcHNfbWRfaW5pdF9jdHgoU0hBMjI0LCBTSEEy NTYpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsK KysjZW5kaWYKKyAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMtPmhbMF09MHhjMTA1OWVk OFVMOwljLT5oWzFdPTB4MzY3Y2Q1MDdVTDsKKyAJYy0+aFsyXT0weDMwNzBkZDE3VUw7CWMtPmhb M109MHhmNzBlNTkzOVVMOworQEAgLTI5LDYgKzM2LDkgQEAgZmlwc19tZF9pbml0X2N0eChTSEEy MjQsIFNIQTI1NikKKyAKKyBmaXBzX21kX2luaXQoU0hBMjU2KQorIAl7CisrI2lmZGVmIE9QRU5T U0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCW1lbXNldCAoYyww LHNpemVvZigqYykpOworIAljLT5oWzBdPTB4NmEwOWU2NjdVTDsJYy0+aFsxXT0weGJiNjdhZTg1 VUw7CisgCWMtPmhbMl09MHgzYzZlZjM3MlVMOwljLT5oWzNdPTB4YTU0ZmY1M2FVTDsKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3NoYS9zaGE1MTIuYy5maXBzIG9wZW5zc2wt MS4wLjEtYmV0YTMvY3J5cHRvL3NoYS9zaGE1MTIuYworLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMv Y3J5cHRvL3NoYS9zaGE1MTIuYy5maXBzCTIwMTEtMTEtMTQgMjE6NTg6MDEuMDAwMDAwMDAwICsw MTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vc2hhL3NoYTUxMi5jCTIwMTItMDIt MjkgMTA6MzM6MDIuODA0Mjk0OTgzICswMTAwCitAQCAtNSw2ICs1LDEwIEBACisgICogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKyAgKi8KKyAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgI2lm ICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTUxMikK KyAvKgorICAqIElNUExFTUVOVEFUSU9OIE5PVEVTLgorQEAgLTYxLDYgKzY1LDkgQEAgY29uc3Qg Y2hhciBTSEE1MTJfdmVyc2lvbltdPSJTSEEtNTEyIiBPUAorIAorIGZpcHNfbWRfaW5pdF9jdHgo U0hBMzg0LCBTSEE1MTIpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRl c3RfY2hlY2soKTsKKysjZW5kaWYKKyAJYy0+aFswXT1VNjQoMHhjYmJiOWQ1ZGMxMDU5ZWQ4KTsK KyAJYy0+aFsxXT1VNjQoMHg2MjlhMjkyYTM2N2NkNTA3KTsKKyAJYy0+aFsyXT1VNjQoMHg5MTU5 MDE1YTMwNzBkZDE3KTsKK0BAIC03Nyw2ICs4NCw5IEBAIGZpcHNfbWRfaW5pdF9jdHgoU0hBMzg0 LCBTSEE1MTIpCisgCisgZmlwc19tZF9pbml0KFNIQTUxMikKKyAJeworKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAljLT5oWzBdPVU2NCgw eDZhMDllNjY3ZjNiY2M5MDgpOworIAljLT5oWzFdPVU2NCgweGJiNjdhZTg1ODRjYWE3M2IpOwor IAljLT5oWzJdPVU2NCgweDNjNmVmMzcyZmU5NGY4MmIpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAu MS1iZXRhMy9jcnlwdG8vc2hhL3NoYS5oLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8v c2hhL3NoYS5oCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vc2hhL3NoYS5oLmZpcHMJ MjAxMi0wMi0yOSAxMDozMzowMi4xMDgyODg5OTcgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJl dGEzL2NyeXB0by9zaGEvc2hhLmgJMjAxMi0wMi0yOSAxMDozMzowMi44MDQyOTQ5ODMgKzAxMDAK K0BAIC0xMTYsOSArMTE2LDYgQEAgdW5zaWduZWQgY2hhciAqU0hBKGNvbnN0IHVuc2lnbmVkIGNo YXIgKgorIHZvaWQgU0hBX1RyYW5zZm9ybShTSEFfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFy ICpkYXRhKTsKKyAjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMQorLSNpZmRlZiBPUEVO U1NMX0ZJUFMKKy1pbnQgcHJpdmF0ZV9TSEExX0luaXQoU0hBX0NUWCAqYyk7CistI2VuZGlmCisg aW50IFNIQTFfSW5pdChTSEFfQ1RYICpjKTsKKyBpbnQgU0hBMV9VcGRhdGUoU0hBX0NUWCAqYywg Y29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CisgaW50IFNIQTFfRmluYWwodW5zaWduZWQg Y2hhciAqbWQsIFNIQV9DVFggKmMpOworQEAgLTE0MSwxMCArMTM4LDYgQEAgdHlwZWRlZiBzdHJ1 Y3QgU0hBMjU2c3RhdGVfc3QKKyAJfSBTSEEyNTZfQ1RYOworIAorICNpZm5kZWYgT1BFTlNTTF9O T19TSEEyNTYKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistaW50IHByaXZhdGVfU0hBMjI0X0luaXQo U0hBMjU2X0NUWCAqYyk7CistaW50IHByaXZhdGVfU0hBMjU2X0luaXQoU0hBMjU2X0NUWCAqYyk7 CistI2VuZGlmCisgaW50IFNIQTIyNF9Jbml0KFNIQTI1Nl9DVFggKmMpOworIGludCBTSEEyMjRf VXBkYXRlKFNIQTI1Nl9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworIGlu dCBTSEEyMjRfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQTI1Nl9DVFggKmMpOworQEAgLTE5 MiwxMCArMTg1LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgU0hBNTEyc3RhdGVfc3QKKyAjZW5kaWYKKyAK KyAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCistI2lmZGVmIE9QRU5TU0xfRklQUworLWludCBw cml2YXRlX1NIQTM4NF9Jbml0KFNIQTUxMl9DVFggKmMpOworLWludCBwcml2YXRlX1NIQTUxMl9J bml0KFNIQTUxMl9DVFggKmMpOworLSNlbmRpZgorIGludCBTSEEzODRfSW5pdChTSEE1MTJfQ1RY ICpjKTsKKyBpbnQgU0hBMzg0X1VwZGF0ZShTSEE1MTJfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRh LCBzaXplX3QgbGVuKTsKKyBpbnQgU0hBMzg0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEE1 MTJfQ1RYICpjKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3NoYS9zaGFf bG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vc2hhL3NoYV9sb2NsLmgKKy0t LSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9zaGEvc2hhX2xvY2wuaC5maXBzCTIwMTItMDIt MjkgMTA6MzM6MDIuMTE0Mjg5MDUxICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlw dG8vc2hhL3NoYV9sb2NsLmgJMjAxMi0wMi0yOSAxMDozMzowMi44MDQyOTQ5ODMgKzAxMDAKK0BA IC0xMjMsMTEgKzEyMywxNCBAQCB2b2lkIHNoYTFfYmxvY2tfZGF0YV9vcmRlciAoU0hBX0NUWCAq YywKKyAjZGVmaW5lIElOSVRfREFUQV9oNCAweGMzZDJlMWYwVUwKKyAKKyAjaWZkZWYgU0hBXzAK Ky1maXBzX21kX2luaXQoU0hBKQorK25vbmZpcHNfbWRfaW5pdChTSEEpCisgI2Vsc2UKKyBmaXBz X21kX2luaXRfY3R4KFNIQTEsIFNIQSkKKyAjZW5kaWYKKyAJeworKyNpZiBkZWZpbmVkKFNIQV8x KSAmJiBkZWZpbmVkKE9QRU5TU0xfRklQUykKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNl bmRpZgorIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKKyAJYy0+aDA9SU5JVF9EQVRBX2gwOwor IAljLT5oMT1JTklUX0RBVEFfaDE7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0 by93aHJscG9vbC93cF9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by93aHJs cG9vbC93cF9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by93aHJscG9vbC93 cF9kZ3N0LmMuZmlwcwkyMDExLTA2LTAxIDE1OjM5OjQ1LjAwMDAwMDAwMCArMDIwMAorKysrIG9w ZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYwkyMDEyLTAyLTI5IDEw OjMzOjAyLjgwNTI5NDk5MiArMDEwMAorQEAgLTU1LDcgKzU1LDcgQEAKKyAjaW5jbHVkZSA8b3Bl bnNzbC9jcnlwdG8uaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgCistZmlwc19tZF9pbml0KFdI SVJMUE9PTCkKKytub25maXBzX21kX2luaXQoV0hJUkxQT09MKQorIAl7CisgCW1lbXNldCAoYyww LHNpemVvZigqYykpOworIAlyZXR1cm4oMSk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEz L01ha2VmaWxlLm9yZy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvTWFrZWZpbGUub3JnCistLS0g b3BlbnNzbC0xLjAuMS1iZXRhMy9NYWtlZmlsZS5vcmcuZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAy Ljc0NjI5NDQ4NCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvTWFrZWZpbGUub3JnCTIw MTItMDItMjkgMTA6MzM6MDIuODA1Mjk0OTkyICswMTAwCitAQCAtMTM2LDYgKzEzNiw5IEBAIEZJ UFNDQU5MSUI9CisgCisgQkFTRUFERFI9CisgCisrIyBOb24tZW1wdHkgaWYgRklQUyBlbmFibGVk CisrRklQUz0KKysKKyBESVJTPSAgIGNyeXB0byBzc2wgZW5naW5lcyBhcHBzIHRlc3QgdG9vbHMK KyBFTkdESVJTPSBjY2dvc3QKKyBTSExJQkRJUlM9IGNyeXB0byBzc2wKK0BAIC0xNDgsNyArMTUx LDcgQEAgU0RJUlM9ICBcCisgCWJuIGVjIHJzYSBkc2EgZWNkc2EgZGggZWNkaCBkc28gZW5naW5l IFwKKyAJYnVmZmVyIGJpbyBzdGFjayBsaGFzaCByYW5kIGVyciBcCisgCWV2cCBhc24xIHBlbSB4 NTA5IHg1MDl2MyBjb25mIHR4dF9kYiBwa2NzNyBwa2NzMTIgY29tcCBvY3NwIHVpIGtyYjUgXAor LQljbXMgcHF1ZXVlIHRzIGpwYWtlIHNycCBzdG9yZSBjbWFjCisrCWNtcyBwcXVldWUgdHMganBh a2Ugc3JwIHN0b3JlIGNtYWMgZmlwcworICMga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGFib3ZlIGxp c3QgaXMgYWRqdXN0ZWQgYnkgLi9Db25maWd1cmUKKyAjIGFjY29yZGluZyB0byBuby14eHggYXJn dW1lbnRzLi4uCisgCitAQCAtMjM3LDYgKzI0MCw3IEBAIEJVSUxERU5WPQlQTEFURk9STT0nJChQ TEFURk9STSknIFBST0NFU1MKKyAJCUZJUFNMSUJESVI9JyR7RklQU0xJQkRJUn0nCQkJXAorIAkJ RklQU0RJUj0nJHtGSVBTRElSfScJCQkJXAorIAkJRklQU0NBTkxJQj0iJCR7RklQU0NBTkxJQjot JChGSVBTQ0FOTElCKX0iCVwKKysJCUZJUFM9IiQke0ZJUFM6LSQoRklQUyl9IglcCisgCQlUSElT PSQke1RISVM6LSRAfSBNQUtFRklMRT1NYWtlZmlsZSBNQUtFT1ZFUlJJREVTPQorICMgTUFLRU9W RVJSSURFUz0gZWZmZWN0aXZlbHkgImVxdWFsaXplcyIgR05VLWlzaCBhbmQgU3lzVi1pc2ggbWFr ZSBmbGF2b3JzLAorICMgd2hpY2ggaW4gdHVybiBlbGltaW5hdGVzIGFtYmlndWl0aWVzIGluIHZh cmlhYmxlIHRyZWF0bWVudCB3aXRoIC1lLgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9z c2wvc3NsX2FsZ3MuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvc3NsL3NzbF9hbGdzLmMKKy0t LSBvcGVuc3NsLTEuMC4xLWJldGEzL3NzbC9zc2xfYWxncy5jLmZpcHMJMjAxMi0wMS0xNSAxNDo0 Mjo1MC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEzL3NzbC9zc2xfYWxn cy5jCTIwMTItMDItMjkgMTA6MzM6MDIuODA1Mjk0OTkyICswMTAwCitAQCAtNjQsNiArNjQsMTIg QEAKKyBpbnQgU1NMX2xpYnJhcnlfaW5pdCh2b2lkKQorIAl7CisgCisrI2lmZGVmIE9QRU5TU0xf RklQUworKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOworKwlpZiAoIUZJUFNfbW9kZSgpKQorKwkJ eworKyNlbmRpZgorKworICNpZm5kZWYgT1BFTlNTTF9OT19ERVMKKyAJRVZQX2FkZF9jaXBoZXIo RVZQX2Rlc19jYmMoKSk7CisgCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7CitA QCAtMTM2LDYgKzE0Miw1MCBAQCBpbnQgU1NMX2xpYnJhcnlfaW5pdCh2b2lkKQorIAlFVlBfYWRk X2RpZ2VzdChFVlBfc2hhKCkpOworIAlFVlBfYWRkX2RpZ2VzdChFVlBfZHNzKCkpOworICNlbmRp ZgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCX0KKysJZWxzZQorKwkJeworKyNpZm5kZWYgT1BF TlNTTF9OT19ERVMKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NiYygpKTsKKysjZW5k aWYKKysjaWZuZGVmIE9QRU5TU0xfTk9fQUVTCisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4 X2NiYygpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2JjKCkpOworKwlFVlBfYWRk X2NpcGhlcihFVlBfYWVzXzI1Nl9jYmMoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4 X2djbSgpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfZ2NtKCkpOworKyNlbmRpZgor KyNpZm5kZWYgT1BFTlNTTF9OT19NRDUKKysJLyogbmVlZGVkIGV2ZW4gaW4gdGhlIEZJUFMgbW9k ZSBmb3IgVExTIE1BQyAqLworKwlFVlBfYWRkX2RpZ2VzdChFVlBfbWQ1KCkpOworKwlFVlBfYWRk X2RpZ2VzdF9hbGlhcyhTTl9tZDUsInNzbDItbWQ1Iik7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFz KFNOX21kNSwic3NsMy1tZDUiKTsKKysjZW5kaWYKKysjaWZuZGVmIE9QRU5TU0xfTk9fU0hBCisr CUVWUF9hZGRfZGlnZXN0KEVWUF9zaGExKCkpOyAvKiBSU0Egd2l0aCBzaGExICovCisrCUVWUF9h ZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTEsInNzbDMtc2hhMSIpOworKwlFVlBfYWRkX2RpZ2VzdF9h bGlhcyhTTl9zaGExV2l0aFJTQUVuY3J5cHRpb24sU05fc2hhMVdpdGhSU0EpOworKyNlbmRpZgor KyNpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTIyNCgp KTsKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTI1NigpKTsKKysjZW5kaWYKKysjaWZuZGVmIE9Q RU5TU0xfTk9fU0hBNTEyCisrCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEzODQoKSk7CisrCUVWUF9h ZGRfZGlnZXN0KEVWUF9zaGE1MTIoKSk7CisrI2VuZGlmCisrI2lmICFkZWZpbmVkKE9QRU5TU0xf Tk9fU0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0RTQSkKKysJRVZQX2FkZF9kaWdlc3QoRVZQ X2RzczEoKSk7IC8qIERTQSB3aXRoIHNoYTEgKi8KKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05f ZHNhV2l0aFNIQTEsU05fZHNhV2l0aFNIQTFfMik7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNO X2RzYVdpdGhTSEExLCJEU1MxIik7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhT SEExLCJkc3MxIik7CisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX0VDRFNBCisrCUVWUF9h ZGRfZGlnZXN0KEVWUF9lY2RzYSgpKTsKKysjZW5kaWYKKysJCX0KKysjZW5kaWYKKyAjaWZuZGVm IE9QRU5TU0xfTk9fQ09NUAorIAkvKiBUaGlzIHdpbGwgaW5pdGlhbGlzZSB0aGUgYnVpbHQtaW4g Y29tcHJlc3Npb24gYWxnb3JpdGhtcy4KKyAJICAgVGhlIHZhbHVlIHJldHVybmVkIGlzIGEgU1RB Q0tfT0YoU1NMX0NPTVApLCBidXQgdGhhdCBjYW4KCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4x LWJldGEzLXMzOTB4YnVpbGQucGF0Y2ggYi9vcGVuc3NsLTEuMC4xLWJldGEzLXMzOTB4YnVpbGQu cGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkzN2UyZgotLS0gL2Rl di9udWxsCisrKyBiL29wZW5zc2wtMS4wLjEtYmV0YTMtczM5MHhidWlsZC5wYXRjaApAQCAtMCww ICsxLDI2IEBACitkaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9yYzQvYXNtL3Jj NC1zMzkweC5wbC5zMzkweGJ1aWxkIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3JjNC9hc20v cmM0LXMzOTB4LnBsCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vcmM0L2FzbS9yYzQt czM5MHgucGwuczM5MHhidWlsZAkyMDEyLTAyLTI5IDE3OjQwOjMwLjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3JjNC9hc20vcmM0LXMzOTB4LnBsCTIwMTIt MDItMjkgMjA6MDM6MzkuNjQyMTgyOTA2ICswMTAwCitAQCAtMTcxLDEwICsxNzEsMTAgQEAgJGlr ZXk9IiVyNyI7CisgJGlpbnA9IiVyOCI7CisgCisgJGNvZGUuPTw8X19fOworLS5nbG9ibAlSQzRf c2V0X2tleQorLS50eXBlCVJDNF9zZXRfa2V5LFxAZnVuY3Rpb24KKysuZ2xvYmwJcHJpdmF0ZV9S QzRfc2V0X2tleQorKy50eXBlCXByaXZhdGVfUkM0X3NldF9rZXksXEBmdW5jdGlvbgorIC5hbGln bgk2NAorLVJDNF9zZXRfa2V5OgorK3ByaXZhdGVfUkM0X3NldF9rZXk6CisgCXN0bSR7Z30JJXI2 LCVyOCw2KiRTSVpFX1QoJHNwKQorIAlsaGkJJGNudCwyNTYKKyAJbGEJJGlkeCwwKCVyMCkKK0BA IC0yMTAsNyArMjEwLDcgQEAgUkM0X3NldF9rZXk6CisgLkxkb25lOgorIAlsbSR7Z30JJXI2LCVy OCw2KiRTSVpFX1QoJHNwKQorIAlicgkkcnAKKy0uc2l6ZQlSQzRfc2V0X2tleSwuLVJDNF9zZXRf a2V5CisrLnNpemUJcHJpdmF0ZV9SQzRfc2V0X2tleSwuLXByaXZhdGVfUkM0X3NldF9rZXkKKyAK KyBfX18KKyB9CgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMS1iZXRhMy12ZXJzaW9uLnBhdGNo IGIvb3BlbnNzbC0xLjAuMS1iZXRhMy12ZXJzaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjlkYWU4YzgKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuc3NsLTEuMC4x LWJldGEzLXZlcnNpb24ucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMS1iZXRhMy9jcnlwdG8vY3ZlcnNpb24uYy52ZXJzaW9uIG9wZW5zc2wtMS4wLjEtYmV0YTMv Y3J5cHRvL2N2ZXJzaW9uLmMKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9jdmVyc2lv bi5jLnZlcnNpb24JMjAwNC0wNC0xOSAyMDowOToyMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVu c3NsLTEuMC4xLWJldGEzL2NyeXB0by9jdmVyc2lvbi5jCTIwMTItMDItMjkgMTE6NTM6NTAuNjUw MzgwMjM0ICswMTAwCitAQCAtMTEwLDggKzExMCwxNSBAQCBjb25zdCBjaGFyICpTU0xlYXlfdmVy c2lvbihpbnQgdCkKKyAJcmV0dXJuKCJub3QgYXZhaWxhYmxlIik7CisgCX0KKyAKKy11bnNpZ25l ZCBsb25nIFNTTGVheSh2b2lkKQorK3Vuc2lnbmVkIGxvbmcgX29yaWdpbmFsX1NTTGVheSh2b2lk KQorKwl7CisrCXJldHVybigweDEwMDAwMDAzKTsKKysJfQorKworK3Vuc2lnbmVkIGxvbmcgX2N1 cnJlbnRfU1NMZWF5KHZvaWQpCisgCXsKKyAJcmV0dXJuKFNTTEVBWV9WRVJTSU9OX05VTUJFUik7 CisgCX0KKyAKKytfX2FzbV9fKCIuc3ltdmVyIF9vcmlnaW5hbF9TU0xlYXksU1NMZWF5QCIpOwor K19fYXNtX18oIi5zeW12ZXIgX2N1cnJlbnRfU1NMZWF5LFNTTGVheUBAT1BFTlNTTF8xLjAuMSIp OworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vb3BlbnNzbHYuaC52ZXJzaW9u IG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL29wZW5zc2x2LmgKKy0tLSBvcGVuc3NsLTEuMC4x LWJldGEzL2NyeXB0by9vcGVuc3Nsdi5oLnZlcnNpb24JMjAxMi0wMi0yOSAxMTo1Mzo0OS45NTIz NzQyNjEgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9vcGVuc3Nsdi5oCTIw MTItMDItMjkgMTE6NTM6NTAuNjUwMzgwMjM0ICswMTAwCitAQCAtMjUsNyArMjUsNyBAQAorICAq IChQcmlvciB0byAwLjkuNWEgYmV0YTEsIGEgZGlmZmVyZW50IHNjaGVtZSB3YXMgdXNlZDogTU1O TkZGUkJCIGZvcgorICAqICBtYWpvciBtaW5vciBmaXggZmluYWwgcGF0Y2gvYmV0YSkKKyAgKi8K Ky0jZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIJMHgxMDAwMTAwM0wKKysjZGVmaW5lIE9Q RU5TU0xfVkVSU0lPTl9OVU1CRVIJMHgxMDAwMTAwZkwKKyAjaWZkZWYgT1BFTlNTTF9GSVBTCisg I2RlZmluZSBPUEVOU1NMX1ZFUlNJT05fVEVYVAkiT3BlblNTTCAxLjAuMS1maXBzLWJldGEzIDIz IEZlYiAyMDEyIgorICNlbHNlCitAQCAtODMsNyArODMsNyBAQAorICAqIHNob3VsZCBvbmx5IGtl ZXAgdGhlIHZlcnNpb25zIHRoYXQgYXJlIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggdGhlIGN1cnJl bnQuCisgICovCisgI2RlZmluZSBTSExJQl9WRVJTSU9OX0hJU1RPUlkgIiIKKy0jZGVmaW5lIFNI TElCX1ZFUlNJT05fTlVNQkVSICIxLjAuMCIKKysjZGVmaW5lIFNITElCX1ZFUlNJT05fTlVNQkVS ICIxLjAuMSIKKyAKKyAKKyAjZW5kaWYgLyogSEVBREVSX09QRU5TU0xWX0ggKi8KK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjEtYmV0YTMvTWFrZWZpbGUuc2hhcmVkLnZlcnNpb24gb3BlbnNzbC0xLjAu MS1iZXRhMy9NYWtlZmlsZS5zaGFyZWQKKy0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL01ha2VmaWxl LnNoYXJlZC52ZXJzaW9uCTIwMTItMDItMjkgMTE6NTM6NTAuNTExMzc5MDQzICswMTAwCisrKysg b3BlbnNzbC0xLjAuMS1iZXRhMy9NYWtlZmlsZS5zaGFyZWQJMjAxMi0wMi0yOSAxMTo1NDo0Ny43 OTQ4NjkyMzYgKzAxMDAKK0BAIC0xNTEsNyArMTUxLDcgQEAgRE9fR05VX1NPPSQoQ0FMQ19WRVJT SU9OUyk7IFwKKyAJU0hMSUJfU1VGRklYPTsgXAorIAlBTExTWU1TRkxBR1M9Jy1XbCwtLXdob2xl LWFyY2hpdmUnOyBcCisgCU5PQUxMU1lNU0ZMQUdTPSctV2wsLS1uby13aG9sZS1hcmNoaXZlJzsg XAorLQlTSEFSRURGTEFHUz0iJChDRkxBR1MpICQoU0hBUkVEX0xERkxBR1MpIC1zaGFyZWQgLVds LC1Cc3ltYm9saWMgLVdsLC1zb25hbWU9JCRTSExJQiQkU0hMSUJfU09WRVIkJFNITElCX1NVRkZJ WCIKKysJU0hBUkVERkxBR1M9IiQoQ0ZMQUdTKSAkKFNIQVJFRF9MREZMQUdTKSAtc2hhcmVkIC1X bCwtQnN5bWJvbGljIC1XbCwtLWRlZmF1bHQtc3ltdmVyLC0tdmVyc2lvbi1zY3JpcHQ9dmVyc2lv bi5tYXAgLVdsLC1zb25hbWU9JCRTSExJQiQkU0hMSUJfU09WRVIkJFNITElCX1NVRkZJWCIKKyAK KyBET19HTlVfQVBQPUxERkxBR1M9IiQoQ0ZMQUdTKSIKKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjEtYmV0YTMvdmVyc2lvbi5tYXAudmVyc2lvbiBvcGVuc3NsLTEuMC4xLWJldGEzL3ZlcnNpb24u bWFwCistLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy92ZXJzaW9uLm1hcC52ZXJzaW9uCTIwMTItMDIt MjkgMTE6NTM6NTAuNjUxMzgwMjQyICswMTAwCisrKysgb3BlbnNzbC0xLjAuMS1iZXRhMy92ZXJz aW9uLm1hcAkyMDEyLTAyLTI5IDExOjU1OjI4LjExMDIxNDIzMiArMDEwMAorQEAgLTAsMCArMSw3 IEBACisrT1BFTlNTTF8xLjAuMSB7CisrICAgIGdsb2JhbDoKKysJICAgIFNTTGVheTsKKysgICAg bG9jYWw6CisrCSAgICBfb3JpZ2luYWwqOworKwkgICAgX2N1cnJlbnQqOworK307CgpkaWZmIC0t Z2l0IGEvb3BlbnNzbC5zcGVjIGIvb3BlbnNzbC5zcGVjCmluZGV4IGExY2NkYzMuLjI0ODQ0NjQg MTAwNjQ0Ci0tLSBhL29wZW5zc2wuc3BlYworKysgYi9vcGVuc3NsLnNwZWMKQEAgLTE4LDE0ICsx OCwxNSBAQAogIyBhbHNvIGJlIGhhbmRsZWQgaW4gb3BlbnNzbGNvbmYtbmV3LmguCiAlZGVmaW5l IG11bHRpbGliX2FyY2hlcyAle2l4ODZ9IGlhNjQgcHBjIHBwYzY0IHMzOTAgczM5MHggc3BhcmN2 OSBzcGFyYzY0IHg4Nl82NAogCi1TdW1tYXJ5OiBBIGdlbmVyYWwgcHVycG9zZSBjcnlwdG9ncmFw aHkgbGlicmFyeSB3aXRoIFRMUyBpbXBsZW1lbnRhdGlvbgorU3VtbWFyeTogVXRpbGl0aWVzIGZy b20gdGhlIGdlbmVyYWwgcHVycG9zZSBjcnlwdG9ncmFwaHkgbGlicmFyeSB3aXRoIFRMUyBpbXBs ZW1lbnRhdGlvbgogTmFtZTogb3BlbnNzbAogVmVyc2lvbjogMS4wLjEKLVJlbGVhc2U6IDAuMS5i ZXRhMiV7P2Rpc3R9CitSZWxlYXNlOiAwLjIuYmV0YTMlez9kaXN0fQorRXBvY2g6IDEKICMgV2Ug aGF2ZSB0byByZW1vdmUgY2VydGFpbiBwYXRlbnRlZCBhbGdvcml0aG1zIGZyb20gdGhlIG9wZW5z c2wgc291cmNlCiAjIHRhcmJhbGwgd2l0aCB0aGUgaG9iYmxlLW9wZW5zc2wgc2NyaXB0IHdoaWNo IGlzIGluY2x1ZGVkIGJlbG93LgogIyBUaGUgb3JpZ2luYWwgb3BlbnNzbCB1cHN0cmVhbSB0YXJi YWxsIGNhbm5vdCBiZSBzaGlwcGVkIGluIHRoZSAuc3JjLnJwbS4KLVNvdXJjZTogb3BlbnNzbC0l e3ZlcnNpb259LWJldGEyLXVzYS50YXIueHoKK1NvdXJjZTogb3BlbnNzbC0le3ZlcnNpb259LWJl dGEzLXVzYS50YXIueHoKIFNvdXJjZTE6IGhvYmJsZS1vcGVuc3NsCiBTb3VyY2UyOiBNYWtlZmls ZS5jZXJ0aWZpY2F0ZQogU291cmNlNjogbWFrZS1kdW1teS1jZXJ0CkBAIC00Miw4ICs0Myw3IEBA IFBhdGNoNjogb3BlbnNzbC0wLjkuOGItdGVzdC11c2UtbG9jYWxob3N0LnBhdGNoCiBQYXRjaDc6 IG9wZW5zc2wtMS4wLjAtdGltZXpvbmUucGF0Y2gKICMgQnVnIGZpeGVzCiBQYXRjaDIzOiBvcGVu c3NsLTEuMC4wLWJldGE0LWRlZmF1bHQtcGF0aHMucGF0Y2gKLVBhdGNoMjQ6IG9wZW5zc2wtMC45 LjhqLWJhZC1taW1lLnBhdGNoCi1QYXRjaDI2OiBvcGVuc3NsLTEuMC4wYS1sb2FkLWNlcnRzLnBh dGNoCitQYXRjaDI0OiBvcGVuc3NsLTEuMC4xLWJldGEzLXMzOTB4YnVpbGQucGF0Y2gKICMgRnVu Y3Rpb25hbGl0eSBjaGFuZ2VzCiBQYXRjaDMzOiBvcGVuc3NsLTEuMC4wLWJldGE0LWNhLWRpci5w YXRjaAogUGF0Y2gzNDogb3BlbnNzbC0wLjkuNi14NTA5LnBhdGNoCkBAIC01MSwxOSArNTEsMTcg QEAgUGF0Y2gzNTogb3BlbnNzbC0wLjkuOGotdmVyc2lvbi1hZGQtZW5naW5lcy5wYXRjaAogUGF0 Y2gzNjogb3BlbnNzbC0xLjAuMGUtZG9jLW5vZW9mLnBhdGNoCiBQYXRjaDM4OiBvcGVuc3NsLTEu MC4xLWJldGEyLXNzbC1vcC1hbGwucGF0Y2gKIFBhdGNoMzk6IG9wZW5zc2wtMS4wLjEtYmV0YTIt aXB2Ni1hcHBzLnBhdGNoCi1QYXRjaDQwOiBvcGVuc3NsLTEuMC4xLWJldGEyLWZpcHMucGF0Y2gK LVBhdGNoNDI6IG9wZW5zc2wtMS4wLjEtYmV0YTItbm8tc3JwLnBhdGNoCitQYXRjaDQwOiBvcGVu c3NsLTEuMC4xLWJldGEzLWZpcHMucGF0Y2gKIFBhdGNoNDU6IG9wZW5zc2wtMC45LjhqLWVudi1u b3psaWIucGF0Y2gKIFBhdGNoNDc6IG9wZW5zc2wtMS4wLjAtYmV0YTUtcmVhZG1lLXdhcm5pbmcu cGF0Y2gKIFBhdGNoNDk6IG9wZW5zc2wtMS4wLjAtYmV0YTQtYWxnby1kb2MucGF0Y2gKIFBhdGNo NTA6IG9wZW5zc2wtMS4wLjEtYmV0YTItZHRsczEtYWJpLnBhdGNoCi1QYXRjaDUxOiBvcGVuc3Ns LTEuMC4xLWJldGEyLXZlcnNpb24ucGF0Y2gKK1BhdGNoNTE6IG9wZW5zc2wtMS4wLjEtYmV0YTMt dmVyc2lvbi5wYXRjaAogUGF0Y2g1Njogb3BlbnNzbC0xLjAuMGMtcnNhLXg5MzEucGF0Y2gKIFBh dGNoNTg6IG9wZW5zc2wtMS4wLjEtYmV0YTItZmlwcy1tZDUtYWxsb3cucGF0Y2gKIFBhdGNoNjA6 IG9wZW5zc2wtMS4wLjBkLWFwcHMtZGdzdC5wYXRjaAogUGF0Y2g2Mzogb3BlbnNzbC0xLjAuMGQt eG1wcC1zdGFydHRscy5wYXRjaAogUGF0Y2g2NTogb3BlbnNzbC0xLjAuMGUtY2hpbC1maXhlcy5w YXRjaAotUGF0Y2g2Nzogb3BlbnNzbC0xLjAuMGUtcGtnY29uZmlnLXByaXZhdGUucGF0Y2gKICMg QmFja3BvcnRlZCBmaXhlcyBpbmNsdWRpbmcgc2VjdXJpdHkgZml4ZXMKIFBhdGNoODE6IG9wZW5z c2wtMS4wLjEtYmV0YTItcGFkbG9jazY0LnBhdGNoCiAKQEAgLTczLDcgKzcxLDggQEAgVVJMOiBo dHRwOi8vd3d3Lm9wZW5zc2wub3JnLwogQnVpbGRSb290OiAle190bXBwYXRofS8le25hbWV9LSV7 dmVyc2lvbn0tcm9vdAogQnVpbGRSZXF1aXJlczogY29yZXV0aWxzLCBrcmI1LWRldmVsLCBwZXJs LCBzZWQsIHpsaWItZGV2ZWwsIC91c3IvYmluL2NtcAogQnVpbGRSZXF1aXJlczogL3Vzci9iaW4v cmVuYW1lCi1SZXF1aXJlczogY29yZXV0aWxzLCBjYS1jZXJ0aWZpY2F0ZXMgPj0gMjAwOC01CitS ZXF1aXJlczogY29yZXV0aWxzLCBtYWtlCitSZXF1aXJlczogJXtuYW1lfS1saWJzJXs/X2lzYX0g PSAle2Vwb2NofTole3ZlcnNpb259LSV7cmVsZWFzZX0KIAogJWRlc2NyaXB0aW9uCiBUaGUgT3Bl blNTTCB0b29sa2l0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIHNlY3VyZSBjb21tdW5pY2F0aW9ucyBi ZXR3ZWVuCkBAIC04MSwxMCArODAsMjEgQEAgbWFjaGluZXMuIE9wZW5TU0wgaW5jbHVkZXMgYSBj ZXJ0aWZpY2F0ZSBtYW5hZ2VtZW50IHRvb2wgYW5kIHNoYXJlZAogbGlicmFyaWVzIHdoaWNoIHBy b3ZpZGUgdmFyaW91cyBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMgYW5kCiBwcm90b2NvbHMuCiAK KyVwYWNrYWdlIGxpYnMKK1N1bW1hcnk6IEEgZ2VuZXJhbCBwdXJwb3NlIGNyeXB0b2dyYXBoeSBs aWJyYXJ5IHdpdGggVExTIGltcGxlbWVudGF0aW9uCitHcm91cDogU3lzdGVtIEVudmlyb25tZW50 L0xpYnJhcmllcworUmVxdWlyZXM6IGNhLWNlcnRpZmljYXRlcyA+PSAyMDA4LTUKKworJWRlc2Ny aXB0aW9uIGxpYnMKK09wZW5TU0wgaXMgYSB0b29sa2l0IGZvciBzdXBwb3J0aW5nIGNyeXB0b2dy YXBoeS4gVGhlIG9wZW5zc2wtbGlicworcGFja2FnZSBjb250YWlucyB0aGUgbGlicmFyaWVzIHRo YXQgYXJlIHVzZWQgYnkgdmFyaW91cyBhcHBsaWNhdGlvbnMgd2hpY2gKK3N1cHBvcnQgY3J5cHRv Z3JhcGhpYyBhbGdvcml0aG1zIGFuZCBwcm90b2NvbHMuCisKICVwYWNrYWdlIGRldmVsCiBTdW1t YXJ5OiBGaWxlcyBmb3IgZGV2ZWxvcG1lbnQgb2YgYXBwbGljYXRpb25zIHdoaWNoIHdpbGwgdXNl IE9wZW5TU0wKIEdyb3VwOiBEZXZlbG9wbWVudC9MaWJyYXJpZXMKLVJlcXVpcmVzOiAle25hbWV9 ID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9LCBrcmI1LWRldmVsLCB6bGliLWRldmVsCitSZXF1aXJl czogJXtuYW1lfS1saWJzJXs/X2lzYX0gPSAle2Vwb2NofTole3ZlcnNpb259LSV7cmVsZWFzZX0K K1JlcXVpcmVzOiBrcmI1LWRldmVsJXs/X2lzYX0sIHpsaWItZGV2ZWwlez9faXNhfQogUmVxdWly ZXM6IHBrZ2NvbmZpZwogCiAlZGVzY3JpcHRpb24gZGV2ZWwKQEAgLTk1LDcgKzEwNSw3IEBAIHN1 cHBvcnQgdmFyaW91cyBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMgYW5kIHByb3RvY29scy4KICVw YWNrYWdlIHN0YXRpYwogU3VtbWFyeTogIExpYnJhcmllcyBmb3Igc3RhdGljIGxpbmtpbmcgb2Yg YXBwbGljYXRpb25zIHdoaWNoIHdpbGwgdXNlIE9wZW5TU0wKIEdyb3VwOiBEZXZlbG9wbWVudC9M aWJyYXJpZXMKLVJlcXVpcmVzOiAle25hbWV9LWRldmVsID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9 CitSZXF1aXJlczogJXtuYW1lfS1kZXZlbCV7P19pc2F9ID0gJXtlcG9jaH06JXt2ZXJzaW9ufS0l e3JlbGVhc2V9CiAKICVkZXNjcmlwdGlvbiBzdGF0aWMKIE9wZW5TU0wgaXMgYSB0b29sa2l0IGZv ciBzdXBwb3J0aW5nIGNyeXB0b2dyYXBoeS4gVGhlIG9wZW5zc2wtc3RhdGljCkBAIC0xMDcsNyAr MTE3LDcgQEAgcHJvdG9jb2xzLgogU3VtbWFyeTogUGVybCBzY3JpcHRzIHByb3ZpZGVkIHdpdGgg T3BlblNTTAogR3JvdXA6IEFwcGxpY2F0aW9ucy9JbnRlcm5ldAogUmVxdWlyZXM6IHBlcmwKLVJl cXVpcmVzOiAle25hbWV9ID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CitSZXF1aXJlczogJXtuYW1l fSV7P19pc2F9ID0gJXtlcG9jaH06JXt2ZXJzaW9ufS0le3JlbGVhc2V9CiAKICVkZXNjcmlwdGlv biBwZXJsCiBPcGVuU1NMIGlzIGEgdG9vbGtpdCBmb3Igc3VwcG9ydGluZyBjcnlwdG9ncmFwaHku IFRoZSBvcGVuc3NsLXBlcmwKQEAgLTExNSw3ICsxMjUsNyBAQCBwYWNrYWdlIHByb3ZpZGVzIFBl cmwgc2NyaXB0cyBmb3IgY29udmVydGluZyBjZXJ0aWZpY2F0ZXMgYW5kIGtleXMKIGZyb20gb3Ro ZXIgZm9ybWF0cyB0byB0aGUgZm9ybWF0cyB1c2VkIGJ5IHRoZSBPcGVuU1NMIHRvb2xraXQuCiAK ICVwcmVwCi0lc2V0dXAgLXEgLW4gJXtuYW1lfS0le3ZlcnNpb259LWJldGEyCislc2V0dXAgLXEg LW4gJXtuYW1lfS0le3ZlcnNpb259LWJldGEzCiAKICMgVGhlIGhvYmJsZV9vcGVuc3NsIGlzIGNh bGxlZCBoZXJlIHJlZHVuZGFudGx5LCBqdXN0IHRvIGJlIHN1cmUuCiAjIFRoZSB0YXJiYWxsIGhh cyBhbHJlYWR5IHRoZSBzb3VyY2VzIHJlbW92ZWQuCkBAIC0xMjgsOCArMTM4LDcgQEAgZnJvbSBv dGhlciBmb3JtYXRzIHRvIHRoZSBmb3JtYXRzIHVzZWQgYnkgdGhlIE9wZW5TU0wgdG9vbGtpdC4K ICVwYXRjaDcgLXAxIC1iIC50aW1lem9uZQogCiAlcGF0Y2gyMyAtcDEgLWIgLmRlZmF1bHQtcGF0 aHMKLSVwYXRjaDI0IC1wMSAtYiAuYmFkLW1pbWUKLSVwYXRjaDI2IC1wMSAtYiAubG9hZC1jZXJ0 cworJXBhdGNoMjQgLXAxIC1iIC5zMzkweGJ1aWxkCiAKICVwYXRjaDMzIC1wMSAtYiAuY2EtZGly CiAlcGF0Y2gzNCAtcDEgLWIgLng1MDkKQEAgLTEzOCw3ICsxNDcsNiBAQCBmcm9tIG90aGVyIGZv cm1hdHMgdG8gdGhlIGZvcm1hdHMgdXNlZCBieSB0aGUgT3BlblNTTCB0b29sa2l0LgogJXBhdGNo MzggLXAxIC1iIC5vcC1hbGwKICVwYXRjaDM5IC1wMSAtYiAuaXB2Ni1hcHBzCiAlcGF0Y2g0MCAt cDEgLWIgLmZpcHMKLSVwYXRjaDQyIC1wMSAtYiAubm8tc3JwCiAlcGF0Y2g0NSAtcDEgLWIgLmVu di1ub3psaWIKICVwYXRjaDQ3IC1wMSAtYiAud2FybmluZwogJXBhdGNoNDkgLXAxIC1iIC5hbGdv LWRvYwpAQCAtMTQ5LDcgKzE1Nyw2IEBAIGZyb20gb3RoZXIgZm9ybWF0cyB0byB0aGUgZm9ybWF0 cyB1c2VkIGJ5IHRoZSBPcGVuU1NMIHRvb2xraXQuCiAlcGF0Y2g2MCAtcDEgLWIgLmRnc3QKICVw YXRjaDYzIC1wMSAtYiAuc3RhcnR0bHMKICVwYXRjaDY1IC1wMSAtYiAuY2hpbAotJXBhdGNoNjcg LXAxIC1iIC5wcml2YXRlCiAKICVwYXRjaDgxIC1wMSAtYiAucGFkbG9jazY0CiAjIE1vZGlmeSB0 aGUgdmFyaW91cyBwZXJsIHNjcmlwdHMgdG8gcmVmZXJlbmNlIHBlcmwgaW4gdGhlIHJpZ2h0IGxv Y2F0aW9uLgpAQCAtMTg0LDcgKzE5MSw3IEBAIHNzbGFyY2g9bGludXgtYWxwaGEtZ2NjCiBzc2xh cmNoPSJsaW51eC1nZW5lcmljMzIgLURCX0VORElBTiIKICVlbmRpZgogJWlmYXJjaCBzMzkweAot c3NsYXJjaD0ibGludXgtczM5MHgiCitzc2xhcmNoPSJsaW51eDY0LXMzOTB4IgogJWVuZGlmCiAl aWZhcmNoICV7YXJtfSBzaDMgc2g0CiBzc2xhcmNoPWxpbnV4LWdlbmVyaWMzMgpAQCAtMjAyLDcg KzIwOSw5IEBAIHNzbGFyY2g9bGludXgtZ2VuZXJpYzMyCiAKICMgQWRkIC1XYSwtLW5vZXhlY3N0 YWNrIGhlcmUgc28gdGhhdCBsaWJjcnlwdG8ncyBhc3NlbWJsZXIgbW9kdWxlcyB3aWxsIGJlCiAj IG1hcmtlZCBhcyBub3QgcmVxdWlyaW5nIGFuIGV4ZWN1dGFibGUgc3RhY2suCi1SUE1fT1BUX0ZM QUdTPSIkUlBNX09QVF9GTEFHUyAtV2EsLS1ub2V4ZWNzdGFjayIKKyMgQWxzbyBhZGQgLURQVVJJ RlkgdG8gbWFrZSB1c2luZyB2YWxncmluZCB3aXRoIG9wZW5zc2wgZWFzaWVyIGFzIHdlIGRvIG5v dAorIyB3YW50IHRvIGRlcGVuZCBvbiB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYXMgYSBzb3Vy Y2Ugb2YgZW50cm9weSBhbnl3YXkuCitSUE1fT1BUX0ZMQUdTPSIkUlBNX09QVF9GTEFHUyAtV2Es LS1ub2V4ZWNzdGFjayAtRFBVUklGWSIKIG1ha2UgZGVwZW5kCiBtYWtlIGFsbAogCkBAIC0yNDMs NiArMjUyLDggQEAgbWFrZSAtQyB0ZXN0IGFwcHMgdGVzdHMKICAgICBsbiAtc2YgLmxpYnNzbC5z by4le3ZlcnNpb259LmhtYWMgJFJQTV9CVUlMRF9ST09UJXtfbGliZGlyfS8ubGlic3NsLnNvLiV7 c292ZXJzaW9ufS5obWFjIFwKICV7bmlsfQogCislZGVmaW5lIF9fcHJvdmlkZXNfZXhjbHVkZV9m cm9tICV7X2xpYmRpcn0vb3BlbnNzbAorCiAlaW5zdGFsbAogWyAiJFJQTV9CVUlMRF9ST09UIiAh PSAiLyIgXSAmJiBybSAtcmYgJFJQTV9CVUlMRF9ST09UCiAjIEluc3RhbGwgT3BlblNTTC4KQEAg LTM0OSwxMSArMzYwLDggQEAgcm0gLXJmICRSUE1fQlVJTERfUk9PVC8le19saWJkaXJ9L2ZpcHNj YW5pc3Rlci4qCiAlZG9jIGRvYy9vcGVuc3NsX2J1dHRvbi5odG1sIGRvYy9vcGVuc3NsX2J1dHRv bi5naWYKICVkb2MgZG9jL3NzbGVheS50eHQKICVkb2MgUkVBRE1FLkZJUFMKLSVkaXIgJXtfc3lz Y29uZmRpcn0vcGtpL3RscwotJWRpciAle19zeXNjb25mZGlyfS9wa2kvdGxzL2NlcnRzCiAle19z eXNjb25mZGlyfS9wa2kvdGxzL2NlcnRzL21ha2UtZHVtbXktY2VydAogJXtfc3lzY29uZmRpcn0v cGtpL3Rscy9jZXJ0cy9NYWtlZmlsZQotJWRpciAle19zeXNjb25mZGlyfS9wa2kvdGxzL21pc2MK ICV7X3N5c2NvbmZkaXJ9L3BraS90bHMvbWlzYy9DQQogJWRpciAle19zeXNjb25mZGlyfS9wa2kv Q0EKICVkaXIgJXtfc3lzY29uZmRpcn0vcGtpL0NBL3ByaXZhdGUKQEAgLTM2MSwxMSArMzY5LDE5 IEBAIHJtIC1yZiAkUlBNX0JVSUxEX1JPT1QvJXtfbGliZGlyfS9maXBzY2FuaXN0ZXIuKgogJWRp ciAle19zeXNjb25mZGlyfS9wa2kvQ0EvY3JsCiAlZGlyICV7X3N5c2NvbmZkaXJ9L3BraS9DQS9u ZXdjZXJ0cwogJXtfc3lzY29uZmRpcn0vcGtpL3Rscy9taXNjL2NfKgotJXtfc3lzY29uZmRpcn0v cGtpL3Rscy9wcml2YXRlCislYXR0cigwNzU1LHJvb3Qscm9vdCkgJXtfYmluZGlyfS9vcGVuc3Ns CislYXR0cigwNjQ0LHJvb3Qscm9vdCkgJXtfbWFuZGlyfS9tYW4xKi9bQUJELVphYmNkLXpdKgor JWF0dHIoMDY0NCxyb290LHJvb3QpICV7X21hbmRpcn0vbWFuNSovKgorJWF0dHIoMDY0NCxyb290 LHJvb3QpICV7X21hbmRpcn0vbWFuNyovKgogCislZmlsZXMgbGlicworJWRlZmF0dHIoLSxyb290 LHJvb3QpCislZG9jIExJQ0VOU0UKKyVkaXIgJXtfc3lzY29uZmRpcn0vcGtpL3RscworJWRpciAl e19zeXNjb25mZGlyfS9wa2kvdGxzL2NlcnRzCislZGlyICV7X3N5c2NvbmZkaXJ9L3BraS90bHMv bWlzYworJWRpciAle19zeXNjb25mZGlyfS9wa2kvdGxzL3ByaXZhdGUKICVjb25maWcobm9yZXBs YWNlKSAle19zeXNjb25mZGlyfS9wa2kvdGxzL29wZW5zc2wuY25mCi0KLSVhdHRyKDA3NTUscm9v dCxyb290KSAle19iaW5kaXJ9L29wZW5zc2wKICVhdHRyKDA3NTUscm9vdCxyb290KSAvJXtfbGli fS9saWJjcnlwdG8uc28uJXt2ZXJzaW9ufQogJWF0dHIoMDc1NSxyb290LHJvb3QpIC8le19saWJ9 L2xpYmNyeXB0by5zby4le3NvdmVyc2lvbn0KICVhdHRyKDA3NTUscm9vdCxyb290KSAle19saWJk aXJ9L2xpYnNzbC5zby4le3ZlcnNpb259CkBAIC0zNzMsOSArMzg5LDYgQEAgcm0gLXJmICRSUE1f QlVJTERfUk9PVC8le19saWJkaXJ9L2ZpcHNjYW5pc3Rlci4qCiAlYXR0cigwNjQ0LHJvb3Qscm9v dCkgLyV7X2xpYn0vLmxpYmNyeXB0by5zby4qLmhtYWMKICVhdHRyKDA2NDQscm9vdCxyb290KSAl e19saWJkaXJ9Ly5saWJzc2wuc28uKi5obWFjCiAlYXR0cigwNzU1LHJvb3Qscm9vdCkgJXtfbGli ZGlyfS9vcGVuc3NsCi0lYXR0cigwNjQ0LHJvb3Qscm9vdCkgJXtfbWFuZGlyfS9tYW4xKi9bQUJE LVphYmNkLXpdKgotJWF0dHIoMDY0NCxyb290LHJvb3QpICV7X21hbmRpcn0vbWFuNSovKgotJWF0 dHIoMDY0NCxyb290LHJvb3QpICV7X21hbmRpcn0vbWFuNyovKgogCiAlZmlsZXMgZGV2ZWwKICVk ZWZhdHRyKC0scm9vdCxyb290KQpAQCAtMzk1LDExICs0MDgsMjEgQEAgcm0gLXJmICRSUE1fQlVJ TERfUk9PVC8le19saWJkaXJ9L2ZpcHNjYW5pc3Rlci4qCiAle19zeXNjb25mZGlyfS9wa2kvdGxz L21pc2MvKi5wbAogJXtfc3lzY29uZmRpcn0vcGtpL3Rscy9taXNjL3RzZ2V0CiAKLSVwb3N0IC1w IC9zYmluL2xkY29uZmlnCislcG9zdCBsaWJzIC1wIC9zYmluL2xkY29uZmlnCiAKLSVwb3N0dW4g LXAgL3NiaW4vbGRjb25maWcKKyVwb3N0dW4gbGlicyAtcCAvc2Jpbi9sZGNvbmZpZwogCiAlY2hh bmdlbG9nCisqIFdlZCBGZWIgMjkgMjAxMiBUb21hcyBNcmF6IDx0bXJhekByZWRoYXQuY29tPiAx LjAuMS0wLjIuYmV0YTMKKy0gZXBvY2ggYnVtcGVkIHRvIDEgZHVlIHRvIHJldmVydCB0byAxLjAu MGcgb24gRmVkb3JhIDE3CistIG5ldyB1cHN0cmVhbSByZWxlYXNlIGZyb20gdGhlIDEuMC4xIGJy YW5jaAorLSBmaXggczM5MHggYnVpbGQgKCM3OTg0MTEpCistIHZlcnNpb25pbmcgZm9yIHRoZSBT U0xlYXkgc3ltYm9sICgjNzk0OTUwKQorLSBhZGQgLURQVVJJRlkgdG8gYnVpbGQgZmxhZ3MgKCM3 OTczMjMpCistIGZpbHRlciBlbmdpbmUgcHJvdmlkZXMKKy0gc3BsaXQgdGhlIGxpYnJhcmllcyB0 byBhIHNlcGFyYXRlIC1saWJzIHBhY2thZ2UKKy0gYWRkIG1ha2UgdG8gcmVxdWlyZXMgb24gdGhl IGJhc2UgcGFja2FnZSAoIzc4MzQ0NikKKwogKiBUdWUgRmViICA3IDIwMTIgVG9tYXMgTXJheiA8 dG1yYXpAcmVkaGF0LmNvbT4gMS4wLjEtMC4xLmJldGEyCiAtIG5ldyB1cHN0cmVhbSByZWxlYXNl IGZyb20gdGhlIDEuMC4xIGJyYW5jaCwgQUJJIGNvbXBhdGlibGUKIC0gYWRkIGRvY3VtZW50YXRp b24gZm9yIHRoZSAtbm9faWduX2VvZiBvcHRpb24KCmRpZmYgLS1naXQgYS9zb3VyY2VzIGIvc291 cmNlcwppbmRleCAxYjU1NmI3Li5mNjEzZTFiIDEwMDY0NAotLS0gYS9zb3VyY2VzCisrKyBiL3Nv dXJjZXMKQEAgLTEgKzEgQEAKLTA4Y2ZmNWQ0MDI0YWI4ZmYxYTUyZDI2MWQ3ZDQ5NjIzICBvcGVu c3NsLTEuMC4xLWJldGEyLXVzYS50YXIueHoKKzMxMTJkNTZiODI4YzQ0MjU4ZjM0ZDZhYjU0NDc0 ZGE4ICBvcGVuc3NsLTEuMC4xLWJldGEzLXVzYS50YXIueHoK