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 fixing multiple security issues Date: Tue, 09 Jun 2026 12:43:30 GMT Message-ID: <178100901020.1.3206252043769129040.rpms-openssl-7e7e3f299f41@fedoraproject.org> List-ID: X-Git-Repo: rpms/openssl X-Git-Branch: rebase_40beta X-Git-Rev: 7e7e3f299f4184b89482c50d577da5b1ef4b19cb QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvb3BlbnNzbApCcmFu Y2ggOiByZWJhc2VfNDBiZXRhCkNvbW1pdCA6IDdlN2UzZjI5OWY0MTg0Yjg5NDgyYzUwZDU3N2Rh NWIxZWY0YjE5Y2IKQXV0aG9yIDogVG9tYXMgTXJheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5vcmc+ CkRhdGUgICA6IDIwMTUtMDEtMDlUMTA6NTQ6NTErMDE6MDAKU3RhdHMgIDogKzIxMjMxLy0yMTIx NCBpbiAxNSBmaWxlKHMpClVSTCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3JnL3Jw bXMvb3BlbnNzbC9jLzdlN2UzZjI5OWY0MTg0Yjg5NDgyYzUwZDU3N2RhNWIxZWY0YjE5Y2I/YnJh bmNoPXJlYmFzZV80MGJldGEKCkxvZzoKbmV3IHVwc3RyZWFtIHJlbGVhc2UgZml4aW5nIG11bHRp cGxlIHNlY3VyaXR5IGlzc3VlcwoKLS0tCmRpZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIvLmdpdGln bm9yZQppbmRleCA3ZDUxY2Y3Li41OTlkYjhlIDEwMDY0NAotLS0gYS8uZ2l0aWdub3JlCisrKyBi Ly5naXRpZ25vcmUKQEAgLTE3LDMgKzE3LDQgQEAgb3BlbnNzbC0xLjAuMGEtdXNhLnRhci5iejIK IC9vcGVuc3NsLTEuMC4xaC1ob2JibGVkLnRhci54egogL29wZW5zc2wtMS4wLjFpLWhvYmJsZWQu dGFyLnh6CiAvb3BlbnNzbC0xLjAuMWotaG9iYmxlZC50YXIueHoKKy9vcGVuc3NsLTEuMC4xay1o b2JibGVkLnRhci54egoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjEtYmV0YTItZHRsczEtYWJp LnBhdGNoIGIvb3BlbnNzbC0xLjAuMS1iZXRhMi1kdGxzMS1hYmkucGF0Y2gKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDZhNTU2YmUuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMS1i ZXRhMi1kdGxzMS1hYmkucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1kaWZm IC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL3NzbC9kdGxzMS5oLmR0bHMxLWFiaSBvcGVuc3NsLTEu MC4xLWJldGEyL3NzbC9kdGxzMS5oCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMi9zc2wvZHRsczEu aC5kdGxzMS1hYmkJMjAxMi0wMi0wNiAxNzowNzozNC42MzAzMzYxMTggKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4xLWJldGEyL3NzbC9kdGxzMS5oCTIwMTItMDItMDYgMTc6MTA6MDguOTU2NjIzNzA3 ICswMTAwCi1AQCAtMjIyLDkgKzIyMiw2IEBAIHR5cGVkZWYgc3RydWN0IGR0bHMxX3N0YXRlX3N0 Ci0gCSAqLwotIAlyZWNvcmRfcHF1ZXVlIGJ1ZmZlcmVkX2FwcF9kYXRhOwotIAotLQkvKiBJcyBz ZXQgd2hlbiBsaXN0ZW5pbmcgZm9yIG5ldyBjb25uZWN0aW9ucyB3aXRoIGR0bHMxX2xpc3Rlbigp ICovCi0tCXVuc2lnbmVkIGludCBsaXN0ZW47Ci0tCi0gCXVuc2lnbmVkIGludCBtdHU7IC8qIG1h eCBEVExTIHBhY2tldCBzaXplICovCi0gCi0gCXN0cnVjdCBobV9oZWFkZXJfc3Qgd19tc2dfaGRy OwotQEAgLTI0OCw2ICsyNDUsOSBAQCB0eXBlZGVmIHN0cnVjdCBkdGxzMV9zdGF0ZV9zdAotIAl1 bnNpZ25lZCBpbnQgcmV0cmFuc21pdHRpbmc7Ci0gCXVuc2lnbmVkIGludCBjaGFuZ2VfY2lwaGVy X3NwZWNfb2s7Ci0gCi0rCS8qIElzIHNldCB3aGVuIGxpc3RlbmluZyBmb3IgbmV3IGNvbm5lY3Rp b25zIHdpdGggZHRsczFfbGlzdGVuKCkgKi8KLSsJdW5zaWduZWQgaW50IGxpc3RlbjsKLSsKLSAj aWZuZGVmIE9QRU5TU0xfTk9fU0NUUAotIAkvKiB1c2VkIHdoZW4gU1NMX1NUX1hYX0ZMVVNIIGlz IGVudGVyZWQgKi8KLSAJaW50IG5leHRfc3RhdGU7CgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAu MS1iZXRhMi1wYWRsb2NrNjQucGF0Y2ggYi9vcGVuc3NsLTEuMC4xLWJldGEyLXBhZGxvY2s2NC5w YXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI3ZjdkYS4uMDAwMDAwMAotLS0g YS9vcGVuc3NsLTEuMC4xLWJldGEyLXBhZGxvY2s2NC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0x LDE5MyArMCwwIEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEyL2VuZ2luZXMvZV9wYWRs b2NrLmMucGFkbG9jazY0IG9wZW5zc2wtMS4wLjEtYmV0YTIvZW5naW5lcy9lX3BhZGxvY2suYwot LS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvZW5naW5lcy9lX3BhZGxvY2suYy5wYWRsb2NrNjQJMjAx MS0wNi0yMSAxODo0MjoxNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEy L2VuZ2luZXMvZV9wYWRsb2NrLmMJMjAxMi0wMi0wNiAyMDoxODo1Mi4wMzk1Mzc3OTkgKzAxMDAK LUBAIC0xMDEsNyArMTAxLDEwIEBACi0gICAgY29tcGlsZXIgY2hvaWNlIGlzIGxpbWl0ZWQgdG8g R0NDIGFuZCBNaWNyb3NvZnQgQy4gKi8KLSAjdW5kZWYgQ09NUElMRV9IV19QQURMT0NLCi0gI2lm ICFkZWZpbmVkKEkzODZfT05MWSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19JTkxJTkVfQVNNKQot LSMgaWYgKGRlZmluZWQoX19HTlVDX18pICYmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVk KF9faTM4NikpKSB8fCBcCi0rIyBpZiAoZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18+PTIg JiYgXAotKwkoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2kzODYpIHx8IFwKLSsJIGRl ZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX3g4Nl82NCkpIFwKLSsgICAgICkgfHwgXAot ICAgICAgKGRlZmluZWQoX01TQ19WRVIpICYmIGRlZmluZWQoX01fSVg4NikpCi0gIyAgZGVmaW5l IENPTVBJTEVfSFdfUEFETE9DSwotICMgZW5kaWYKLUBAIC0xMzcsNyArMTQwLDcgQEAgdm9pZCBF TkdJTkVfbG9hZF9wYWRsb2NrICh2b2lkKQotICMgZW5kaWYKLSAjZWxpZiBkZWZpbmVkKF9fR05V Q19fKQotICMgaWZuZGVmIGFsbG9jYQotLSMgIGRlZmluZSBhbGxvY2EocykgX19idWlsdGluX2Fs bG9jYShzKQotKyMgIGRlZmluZSBhbGxvY2EocykgX19idWlsdGluX2FsbG9jYSgocykpCi0gIyBl bmRpZgotICNlbmRpZgotIAotQEAgLTMwNCw2ICszMDcsNyBAQCBzdGF0aWMgdm9sYXRpbGUgc3Ry dWN0IHBhZGxvY2tfY2lwaGVyX2RhCi0gICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotICAqLwotICNpZiBkZWZpbmVkKF9fR05VQ19fKSAm JiBfX0dOVUNfXz49MgotKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9faTM4NikK LSAvKgotICAqIEFzIGZvciBleGNlc3NpdmUgInB1c2ggJWVieCIvInBvcCAlZWJ4IiBmb3VuZCBh bGwgb3Zlci4KLSAgKiBXaGVuIGdlbmVyYXRpbmcgcG9zaXRpb24taW5kZXBlbmRlbnQgY29kZSBH Q0Mgd29uJ3QgbGV0Ci1AQCAtMzgzLDIxICszODcsNiBAQCBwYWRsb2NrX2F2YWlsYWJsZSh2b2lk KQotIAlyZXR1cm4gcGFkbG9ja191c2VfYWNlICsgcGFkbG9ja191c2Vfcm5nOwotIH0KLSAKLS0j aWZuZGVmIE9QRU5TU0xfTk9fQUVTCi0tLyogT3VyIG93biBodG9ubCgpL250b2hsKCkgKi8KLS1z dGF0aWMgaW5saW5lIHZvaWQKLS1wYWRsb2NrX2Jzd2FwbChBRVNfS0VZICprcykKLS17Ci0tCXNp emVfdCBpID0gc2l6ZW9mKGtzLT5yZF9rZXkpL3NpemVvZihrcy0+cmRfa2V5WzBdKTsKLS0JdW5z aWduZWQgaW50ICprZXkgPSBrcy0+cmRfa2V5OwotLQotLQl3aGlsZSAoaS0tKSB7Ci0tCQlhc20g dm9sYXRpbGUgKCJic3dhcGwgJTAiIDogIityIigqa2V5KSk7Ci0tCQlrZXkrKzsKLS0JfQotLX0K LS0jZW5kaWYKLS0KLSAvKiBGb3JjZSBrZXkgcmVsb2FkIGZyb20gbWVtb3J5IHRvIHRoZSBDUFUg bWljcm9jb2RlLgotICAgIExvYWRpbmcgRUZMQUdTIGZyb20gdGhlIHN0YWNrIGNsZWFycyBFRkxB R1NbMzBdIAotICAgIHdoaWNoIGRvZXMgdGhlIHRyaWNrLiAqLwotQEAgLTQ1NSwxMiArNDQ0LDEy NyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKm5hbWUoc2l6ZV90IGNudCwJCVwKLSAJCTogImVkeCIs ICJjYyIsICJtZW1vcnkiKTsJXAotIAlyZXR1cm4gaXY7CQkJCVwKLSB9Ci0rI2VuZGlmCi0rCi0r I2VsaWYgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9feDg2XzY0KQotKwotKy8qIExv YWQgc3VwcG9ydGVkIGZlYXR1cmVzIG9mIHRoZSBDUFUgdG8gc2VlIGlmCi0rICAgdGhlIFBhZExv Y2sgaXMgYXZhaWxhYmxlLiAqLwotK3N0YXRpYyBpbnQKLStwYWRsb2NrX2F2YWlsYWJsZSh2b2lk KQotK3sKLSsJY2hhciB2ZW5kb3Jfc3RyaW5nWzE2XTsKLSsJdW5zaWduZWQgaW50IGVheCwgZWR4 OwotIAotKwkvKiBBcmUgd2UgcnVubmluZyBvbiB0aGUgQ2VudGF1ciAoVklBKSBDUFU/ICovCi0r CWVheCA9IDB4MDAwMDAwMDA7Ci0rCXZlbmRvcl9zdHJpbmdbMTJdID0gMDsKLSsJYXNtIHZvbGF0 aWxlICgKLSsJCSJjcHVpZFxuIgotKwkJIm1vdmwJJSVlYngsKCUxKVxuIgotKwkJIm1vdmwJJSVl ZHgsNCglMSlcbiIKLSsJCSJtb3ZsCSUlZWN4LDgoJTEpXG4iCi0rCQk6ICIrYSIoZWF4KSA6ICJy Iih2ZW5kb3Jfc3RyaW5nKSA6ICJyYngiLCAicmN4IiwgInJkeCIpOwotKwlpZiAoc3RyY21wKHZl bmRvcl9zdHJpbmcsICJDZW50YXVySGF1bHMiKSAhPSAwKQotKwkJcmV0dXJuIDA7Ci0rCi0rCS8q IENoZWNrIGZvciBDZW50YXVyIEV4dGVuZGVkIEZlYXR1cmUgRmxhZ3MgcHJlc2VuY2UgKi8KLSsJ ZWF4ID0gMHhDMDAwMDAwMDsKLSsJYXNtIHZvbGF0aWxlICgiY3B1aWQiCi0rCQk6ICIrYSIoZWF4 KSA6IDogInJieCIsICJyY3giLCAicmR4Iik7Ci0rCWlmIChlYXggPCAweEMwMDAwMDAxKQotKwkJ cmV0dXJuIDA7Ci0rCi0rCS8qIFJlYWQgdGhlIENlbnRhdXIgRXh0ZW5kZWQgRmVhdHVyZSBGbGFn cyAqLwotKwllYXggPSAweEMwMDAwMDAxOwotKwlhc20gdm9sYXRpbGUgKCJjcHVpZCIKLSsJCTog IithIihlYXgpLCAiPWQiKGVkeCkgOiA6ICJyYngiLCAicmN4Iik7Ci0rCi0rCS8qIEZpbGwgdXAg c29tZSBmbGFncyAqLwotKwlwYWRsb2NrX3VzZV9hY2UgPSAoKGVkeCAmICgweDM8PDYpKSA9PSAo MHgzPDw2KSk7Ci0rCXBhZGxvY2tfdXNlX3JuZyA9ICgoZWR4ICYgKDB4Mzw8MikpID09ICgweDM8 PDIpKTsKLSsKLSsJcmV0dXJuIHBhZGxvY2tfdXNlX2FjZSArIHBhZGxvY2tfdXNlX3JuZzsKLSt9 Ci0rCi0rLyogRm9yY2Uga2V5IHJlbG9hZCBmcm9tIG1lbW9yeSB0byB0aGUgQ1BVIG1pY3JvY29k ZS4KLSsgICBMb2FkaW5nIEVGTEFHUyBmcm9tIHRoZSBzdGFjayBjbGVhcnMgRUZMQUdTWzMwXSAK LSsgICB3aGljaCBkb2VzIHRoZSB0cmljay4gKi8KLStzdGF0aWMgaW5saW5lIHZvaWQKLStwYWRs b2NrX3JlbG9hZF9rZXkodm9pZCkKLSt7Ci0rCWFzbSB2b2xhdGlsZSAoInB1c2hmcTsgcG9wZnEi KTsKLSt9Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX05PX0FFUwotKy8qCi0rICogVGhpcyBpcyBoZXVy aXN0aWMga2V5IGNvbnRleHQgdHJhY2luZy4gQXQgZmlyc3Qgb25lCi0rICogYmVsaWV2ZXMgdGhh dCBvbmUgc2hvdWxkIHVzZSBhdG9taWMgc3dhcCBpbnN0cnVjdGlvbnMsCi0rICogYnV0IGl0J3Mg bm90IGFjdHVhbGx5IG5lY2Vzc2FyeS4gUG9pbnQgaXMgdGhhdCBpZgotKyAqIHBhZGxvY2tfc2F2 ZWRfY29udGV4dCB3YXMgY2hhbmdlZCBieSBhbm90aGVyIHRocmVhZAotKyAqIGFmdGVyIHdlJ3Zl IHJlYWQgaXQgYW5kIGJlZm9yZSB3ZSBjb21wYXJlIGl0IHdpdGggY2RhdGEsCi0rICogb3VyIGtl eSAqc2hhbGwqIGJlIHJlbG9hZGVkIHVwb24gdGhyZWFkIGNvbnRleHQgc3dpdGNoCi0rICogYW5k IHdlIGFyZSB0aGVyZWZvcmUgc2V0IGluIGVpdGhlciBjYXNlLi4uCi0rICovCi0rc3RhdGljIGlu bGluZSB2b2lkCi0rcGFkbG9ja192ZXJpZnlfY29udGV4dChzdHJ1Y3QgcGFkbG9ja19jaXBoZXJf ZGF0YSAqY2RhdGEpCi0rewotKwlhc20gdm9sYXRpbGUgKAotKwkicHVzaGZxXG4iCi0rIglidGwJ JDMwLCglJXJzcClcbiIKLSsiCWpuYwkxZlxuIgotKyIJY21wcQklMiwlMVxuIgotKyIJamUJMWZc biIKLSsiCXBvcGZxXG4iCi0rIglzdWJxCSQ4LCUlcnNwXG4iCi0rIjE6CWFkZHEJJDgsJSVyc3Bc biIKLSsiCW1vdnEJJTIsJTAiCi0rCToiK20iKHBhZGxvY2tfc2F2ZWRfY29udGV4dCkKLSsJOiAi ciIocGFkbG9ja19zYXZlZF9jb250ZXh0KSwgInIiKGNkYXRhKSA6ICJjYyIpOwotK30KLSsKLSsv KiBUZW1wbGF0ZSBmb3IgcGFkbG9ja194Y3J5cHRfKiBtb2RlcyAqLwotKy8qIEJJRyBGQVQgV0FS TklORzogCi0rICogCVRoZSBvZmZzZXRzIHVzZWQgd2l0aCAnbGVhbCcgaW5zdHJ1Y3Rpb25zCi0r ICogCWRlc2NyaWJlIGl0ZW1zIG9mIHRoZSAncGFkbG9ja19jaXBoZXJfZGF0YScKLSsgKiAJc3Ry dWN0dXJlLgotKyAqLwotKyNkZWZpbmUgUEFETE9DS19YQ1JZUFRfQVNNKG5hbWUscmVwX3hjcnlw dCkJXAotK3N0YXRpYyBpbmxpbmUgdm9pZCAqbmFtZShzaXplX3QgY250LAkJXAotKwlzdHJ1Y3Qg cGFkbG9ja19jaXBoZXJfZGF0YSAqY2RhdGEsCVwKLSsJdm9pZCAqb3V0LCBjb25zdCB2b2lkICpp bnApIAkJXAotK3sJdm9pZCAqaXY7IAkJCQlcCi0rCWFzbSB2b2xhdGlsZSAoICJsZWFxCTE2KCUw KSwlJXJkeFxuIglcCi0rCQkiCWxlYXEJMzIoJTApLCUlcmJ4XG4iCVwKLSsJCQlyZXBfeGNyeXB0 ICJcbiIJCVwKLSsJCTogIj1hIihpdiksICI9YyIoY250KSwgIj1EIihvdXQpLCAiPVMiKGlucCkg XAotKwkJOiAiMCIoY2RhdGEpLCAiMSIoY250KSwgIjIiKG91dCksICIzIihpbnApICBcCi0rCQk6 ICJyYngiLCAicmR4IiwgImNjIiwgIm1lbW9yeSIpOwlcCi0rCXJldHVybiBpdjsJCQkJXAotK30K LSsjZW5kaWYKLSsKLSsjZW5kaWYJLyogY3B1ICovCi0rCi0rI2lmbmRlZiBPUEVOU1NMX05PX0FF UwotIC8qIEdlbmVyYXRlIGFsbCBmdW5jdGlvbnMgd2l0aCBhcHByb3ByaWF0ZSBvcGNvZGVzICov Ci0gUEFETE9DS19YQ1JZUFRfQVNNKHBhZGxvY2tfeGNyeXB0X2VjYiwgIi5ieXRlIDB4ZjMsMHgw ZiwweGE3LDB4YzgiKQkvKiByZXAgeGNyeXB0ZWNiICovCi0gUEFETE9DS19YQ1JZUFRfQVNNKHBh ZGxvY2tfeGNyeXB0X2NiYywgIi5ieXRlIDB4ZjMsMHgwZiwweGE3LDB4ZDAiKQkvKiByZXAgeGNy eXB0Y2JjICovCi0gUEFETE9DS19YQ1JZUFRfQVNNKHBhZGxvY2tfeGNyeXB0X2NmYiwgIi5ieXRl IDB4ZjMsMHgwZiwweGE3LDB4ZTAiKQkvKiByZXAgeGNyeXB0Y2ZiICovCi0gUEFETE9DS19YQ1JZ UFRfQVNNKHBhZGxvY2tfeGNyeXB0X29mYiwgIi5ieXRlIDB4ZjMsMHgwZiwweGE3LDB4ZTgiKQkv KiByZXAgeGNyeXB0b2ZiICovCi0rCi0rLyogT3VyIG93biBodG9ubCgpL250b2hsKCkgKi8KLStz dGF0aWMgaW5saW5lIHZvaWQKLStwYWRsb2NrX2Jzd2FwbChBRVNfS0VZICprcykKLSt7Ci0rCXNp emVfdCBpID0gc2l6ZW9mKGtzLT5yZF9rZXkpL3NpemVvZihrcy0+cmRfa2V5WzBdKTsKLSsJdW5z aWduZWQgaW50ICprZXkgPSBrcy0+cmRfa2V5OwotKwotKwl3aGlsZSAoaS0tKSB7Ci0rCQlhc20g dm9sYXRpbGUgKCJic3dhcGwgJTAiIDogIityIigqa2V5KSk7Ci0rCQlrZXkrKzsKLSsJfQotK30K LSAjZW5kaWYKLSAKLSAvKiBUaGUgUk5HIGNhbGwgaXRzZWxmICovCi1AQCAtNDkxLDggKzU5NSw4 IEBAIHBhZGxvY2tfeHN0b3JlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGludAotIHN0YXRpYyBpbmxp bmUgdW5zaWduZWQgY2hhciAqCi0gcGFkbG9ja19tZW1jcHkodm9pZCAqZHN0LGNvbnN0IHZvaWQg KnNyYyxzaXplX3QgbikKLSB7Ci0tCWxvbmcgICAgICAgKmQ9ZHN0OwotLQljb25zdCBsb25nICpz PXNyYzsKLSsJc2l6ZV90ICAgICAgICpkPWRzdDsKLSsJY29uc3Qgc2l6ZV90ICpzPXNyYzsKLSAK LSAJbiAvPSBzaXplb2YoKmQpOwotIAlkbyB7ICpkKysgPSAqcysrOyB9IHdoaWxlICgtLW4pOwoK ZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjFlLWVjYy1zdWl0ZWIucGF0Y2ggYi9vcGVuc3NsLTEu MC4xZS1lY2Mtc3VpdGViLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzg3 YjAwLi4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjFlLWVjYy1zdWl0ZWIucGF0Y2gKKysrIC9k ZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWUvYXBwcy9z cGVlZC5jLnN1aXRlYiBvcGVuc3NsLTEuMC4xZS9hcHBzL3NwZWVkLmMKLS0tLSBvcGVuc3NsLTEu MC4xZS9hcHBzL3NwZWVkLmMuc3VpdGViCTIwMTMtMTEtMDggMTg6MDI6NTMuODE1MjI5NzA2ICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMWUvYXBwcy9zcGVlZC5jCTIwMTMtMTEtMDggMTg6MDQ6NDcu MDE2NzI0Mjk3ICswMTAwCi1AQCAtOTY2LDQ5ICs5NjYsMjMgQEAgaW50IE1BSU4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQotIAkJZWxzZQotICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19FQ0RT QQotLQkJICAgICBpZiAoc3RyY21wKCphcmd2LCJlY2RzYXAxNjAiKSA9PSAwKSBlY2RzYV9kb2l0 W1JfRUNfUDE2MF09MjsKLS0JCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiZWNkc2FwMTkyIikgPT0g MCkgZWNkc2FfZG9pdFtSX0VDX1AxOTJdPTI7Ci0tCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsImVj ZHNhcDIyNCIpID09IDApIGVjZHNhX2RvaXRbUl9FQ19QMjI0XT0yOwotLQkJZWxzZSBpZiAoc3Ry Y21wKCphcmd2LCJlY2RzYXAyNTYiKSA9PSAwKSBlY2RzYV9kb2l0W1JfRUNfUDI1Nl09MjsKLSsJ CWlmIChzdHJjbXAoKmFyZ3YsImVjZHNhcDI1NiIpID09IDApIGVjZHNhX2RvaXRbUl9FQ19QMjU2 XT0yOwotIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCJlY2RzYXAzODQiKSA9PSAwKSBlY2RzYV9k b2l0W1JfRUNfUDM4NF09MjsKLSAJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiZWNkc2FwNTIxIikg PT0gMCkgZWNkc2FfZG9pdFtSX0VDX1A1MjFdPTI7Ci0tCQllbHNlIGlmIChzdHJjbXAoKmFyZ3Ys ImVjZHNhazE2MyIpID09IDApIGVjZHNhX2RvaXRbUl9FQ19LMTYzXT0yOwotLQkJZWxzZSBpZiAo c3RyY21wKCphcmd2LCJlY2RzYWsyMzMiKSA9PSAwKSBlY2RzYV9kb2l0W1JfRUNfSzIzM109MjsK LS0JCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiZWNkc2FrMjgzIikgPT0gMCkgZWNkc2FfZG9pdFtS X0VDX0syODNdPTI7Ci0tCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsImVjZHNhazQwOSIpID09IDAp IGVjZHNhX2RvaXRbUl9FQ19LNDA5XT0yOwotLQkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCJlY2Rz YWs1NzEiKSA9PSAwKSBlY2RzYV9kb2l0W1JfRUNfSzU3MV09MjsKLS0JCWVsc2UgaWYgKHN0cmNt cCgqYXJndiwiZWNkc2FiMTYzIikgPT0gMCkgZWNkc2FfZG9pdFtSX0VDX0IxNjNdPTI7Ci0tCQll bHNlIGlmIChzdHJjbXAoKmFyZ3YsImVjZHNhYjIzMyIpID09IDApIGVjZHNhX2RvaXRbUl9FQ19C MjMzXT0yOwotLQkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCJlY2RzYWIyODMiKSA9PSAwKSBlY2Rz YV9kb2l0W1JfRUNfQjI4M109MjsKLS0JCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiZWNkc2FiNDA5 IikgPT0gMCkgZWNkc2FfZG9pdFtSX0VDX0I0MDldPTI7Ci0tCQllbHNlIGlmIChzdHJjbXAoKmFy Z3YsImVjZHNhYjU3MSIpID09IDApIGVjZHNhX2RvaXRbUl9FQ19CNTcxXT0yOwotIAkJZWxzZSBp ZiAoc3RyY21wKCphcmd2LCJlY2RzYSIpID09IDApCi0gCQkJewotLQkJCWZvciAoaT0wOyBpIDwg RUNfTlVNOyBpKyspCi0rCQkJZm9yIChpPVJfRUNfUDI1NjsgaSA8PSBSX0VDX1A1MjE7IGkrKykK LSAJCQkJZWNkc2FfZG9pdFtpXT0xOwotIAkJCX0KLSAJCWVsc2UKLSAjZW5kaWYKLSAjaWZuZGVm IE9QRU5TU0xfTk9fRUNESAotLQkJICAgICBpZiAoc3RyY21wKCphcmd2LCJlY2RocDE2MCIpID09 IDApIGVjZGhfZG9pdFtSX0VDX1AxNjBdPTI7Ci0tCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsImVj ZGhwMTkyIikgPT0gMCkgZWNkaF9kb2l0W1JfRUNfUDE5Ml09MjsKLS0JCWVsc2UgaWYgKHN0cmNt cCgqYXJndiwiZWNkaHAyMjQiKSA9PSAwKSBlY2RoX2RvaXRbUl9FQ19QMjI0XT0yOwotLQkJZWxz ZSBpZiAoc3RyY21wKCphcmd2LCJlY2RocDI1NiIpID09IDApIGVjZGhfZG9pdFtSX0VDX1AyNTZd PTI7Ci0rCQlpZiAoc3RyY21wKCphcmd2LCJlY2RocDI1NiIpID09IDApIGVjZGhfZG9pdFtSX0VD X1AyNTZdPTI7Ci0gCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsImVjZGhwMzg0IikgPT0gMCkgZWNk aF9kb2l0W1JfRUNfUDM4NF09MjsKLSAJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiZWNkaHA1MjEi KSA9PSAwKSBlY2RoX2RvaXRbUl9FQ19QNTIxXT0yOwotLQkJZWxzZSBpZiAoc3RyY21wKCphcmd2 LCJlY2RoazE2MyIpID09IDApIGVjZGhfZG9pdFtSX0VDX0sxNjNdPTI7Ci0tCQllbHNlIGlmIChz dHJjbXAoKmFyZ3YsImVjZGhrMjMzIikgPT0gMCkgZWNkaF9kb2l0W1JfRUNfSzIzM109MjsKLS0J CWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiZWNkaGsyODMiKSA9PSAwKSBlY2RoX2RvaXRbUl9FQ19L MjgzXT0yOwotLQkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCJlY2RoazQwOSIpID09IDApIGVjZGhf ZG9pdFtSX0VDX0s0MDldPTI7Ci0tCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsImVjZGhrNTcxIikg PT0gMCkgZWNkaF9kb2l0W1JfRUNfSzU3MV09MjsKLS0JCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwi ZWNkaGIxNjMiKSA9PSAwKSBlY2RoX2RvaXRbUl9FQ19CMTYzXT0yOwotLQkJZWxzZSBpZiAoc3Ry Y21wKCphcmd2LCJlY2RoYjIzMyIpID09IDApIGVjZGhfZG9pdFtSX0VDX0IyMzNdPTI7Ci0tCQll bHNlIGlmIChzdHJjbXAoKmFyZ3YsImVjZGhiMjgzIikgPT0gMCkgZWNkaF9kb2l0W1JfRUNfQjI4 M109MjsKLS0JCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiZWNkaGI0MDkiKSA9PSAwKSBlY2RoX2Rv aXRbUl9FQ19CNDA5XT0yOwotLQkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCJlY2RoYjU3MSIpID09 IDApIGVjZGhfZG9pdFtSX0VDX0I1NzFdPTI7Ci0gCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsImVj ZGgiKSA9PSAwKQotIAkJCXsKLS0JCQlmb3IgKGk9MDsgaSA8IEVDX05VTTsgaSsrKQotKwkJCWZv ciAoaT1SX0VDX1AyNTY7IGkgPD0gUl9FQ19QNTIxOyBpKyspCi0gCQkJCWVjZGhfZG9pdFtpXT0x OwotIAkJCX0KLSAJCWVsc2UKLUBAIC0xMDk3LDE1ICsxMDcxLDExIEBAIGludCBNQUlOKGludCBh cmdjLCBjaGFyICoqYXJndikKLSAJCQlCSU9fcHJpbnRmKGJpb19lcnIsImRzYTUxMiAgIGRzYTEw MjQgIGRzYTIwNDhcbiIpOwotICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQotLQkJ CUJJT19wcmludGYoYmlvX2VyciwiZWNkc2FwMTYwIGVjZHNhcDE5MiBlY2RzYXAyMjQgZWNkc2Fw MjU2IGVjZHNhcDM4NCBlY2RzYXA1MjFcbiIpOwotLQkJCUJJT19wcmludGYoYmlvX2VyciwiZWNk c2FrMTYzIGVjZHNhazIzMyBlY2RzYWsyODMgZWNkc2FrNDA5IGVjZHNhazU3MVxuIik7Ci0tCQkJ QklPX3ByaW50ZihiaW9fZXJyLCJlY2RzYWIxNjMgZWNkc2FiMjMzIGVjZHNhYjI4MyBlY2RzYWI0 MDkgZWNkc2FiNTcxXG4iKTsKLSsJCQlCSU9fcHJpbnRmKGJpb19lcnIsImVjZHNhcDI1NiBlY2Rz YXAzODQgZWNkc2FwNTIxXG4iKTsKLSAJCQlCSU9fcHJpbnRmKGJpb19lcnIsImVjZHNhXG4iKTsK LSAjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRUNESAotLQkJCUJJT19wcmludGYoYmlvX2Vy ciwiZWNkaHAxNjAgIGVjZGhwMTkyICBlY2RocDIyNCAgZWNkaHAyNTYgIGVjZGhwMzg0ICBlY2Ro cDUyMVxuIik7Ci0tCQkJQklPX3ByaW50ZihiaW9fZXJyLCJlY2RoazE2MyAgZWNkaGsyMzMgIGVj ZGhrMjgzICBlY2RoazQwOSAgZWNkaGs1NzFcbiIpOwotLQkJCUJJT19wcmludGYoYmlvX2Vyciwi ZWNkaGIxNjMgIGVjZGhiMjMzICBlY2RoYjI4MyAgZWNkaGI0MDkgIGVjZGhiNTcxXG4iKTsKLSsJ CQlCSU9fcHJpbnRmKGJpb19lcnIsImVjZGhwMjU2ICBlY2RocDM4NCBlY2RocDUyMVxuIik7Ci0g CQkJQklPX3ByaW50ZihiaW9fZXJyLCJlY2RoXG4iKTsKLSAjZW5kaWYKLSAKLUBAIC0xMTg0LDEx ICsxMTU0LDExIEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAJCSAgICBpZiAo IUZJUFNfbW9kZSgpIHx8IGkgIT0gUl9EU0FfNTEyKQotIAkJCWRzYV9kb2l0W2ldPTE7Ci0gI2lm bmRlZiBPUEVOU1NMX05PX0VDRFNBCi0tCQlmb3IgKGk9MDsgaTxFQ19OVU07IGkrKykKLSsJCWZv ciAoaT1SX0VDX1AyNTY7IGkgPD0gUl9FQ19QNTIxOyBpKyspCi0gCQkJZWNkc2FfZG9pdFtpXT0x OwotICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19FQ0RICi0tCQlmb3IgKGk9MDsgaTxFQ19O VU07IGkrKykKLSsJCWZvciAoaT1SX0VDX1AyNTY7IGkgPD0gUl9FQ19QNTIxOyBpKyspCi0gCQkJ ZWNkaF9kb2l0W2ldPTE7Ci0gI2VuZGlmCi0gCQl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xZS9z c2wvdDFfbGliLmMuc3VpdGViIG9wZW5zc2wtMS4wLjFlL3NzbC90MV9saWIuYwotLS0tIG9wZW5z c2wtMS4wLjFlL3NzbC90MV9saWIuYy5zdWl0ZWIJMjAxMy0wMi0xMSAxNjoyNjowNC4wMDAwMDAw MDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xZS9zc2wvdDFfbGliLmMJMjAxMy0xMS0wOCAxODow NToyNy41NTE2MTc1NTQgKzAxMDAKLUBAIC0yMDQsMzEgKzIwNCw5IEBAIHN0YXRpYyBpbnQgbmlk X2xpc3RbXSA9Ci0gCi0gc3RhdGljIGludCBwcmVmX2xpc3RbXSA9Ci0gCXsKLS0JCU5JRF9zZWN0 NTcxcjEsIC8qIHNlY3Q1NzFyMSAoMTQpICovIAotLQkJTklEX3NlY3Q1NzFrMSwgLyogc2VjdDU3 MWsxICgxMykgKi8gCi0gCQlOSURfc2VjcDUyMXIxLCAvKiBzZWNwNTIxcjEgKDI1KSAqLwkKLS0J CU5JRF9zZWN0NDA5azEsIC8qIHNlY3Q0MDlrMSAoMTEpICovIAotLQkJTklEX3NlY3Q0MDlyMSwg Lyogc2VjdDQwOXIxICgxMikgKi8KLSAJCU5JRF9zZWNwMzg0cjEsIC8qIHNlY3AzODRyMSAoMjQp ICovCi0tCQlOSURfc2VjdDI4M2sxLCAvKiBzZWN0MjgzazEgKDkpICovCi0tCQlOSURfc2VjdDI4 M3IxLCAvKiBzZWN0MjgzcjEgKDEwKSAqLyAKLS0JCU5JRF9zZWNwMjU2azEsIC8qIHNlY3AyNTZr MSAoMjIpICovIAotIAkJTklEX1g5XzYyX3ByaW1lMjU2djEsIC8qIHNlY3AyNTZyMSAoMjMpICov IAotLQkJTklEX3NlY3QyMzlrMSwgLyogc2VjdDIzOWsxICg4KSAqLyAKLS0JCU5JRF9zZWN0MjMz azEsIC8qIHNlY3QyMzNrMSAoNikgKi8KLS0JCU5JRF9zZWN0MjMzcjEsIC8qIHNlY3QyMzNyMSAo NykgKi8gCi0tCQlOSURfc2VjcDIyNGsxLCAvKiBzZWNwMjI0azEgKDIwKSAqLyAKLS0JCU5JRF9z ZWNwMjI0cjEsIC8qIHNlY3AyMjRyMSAoMjEpICovCi0tCQlOSURfc2VjdDE5M3IxLCAvKiBzZWN0 MTkzcjEgKDQpICovIAotLQkJTklEX3NlY3QxOTNyMiwgLyogc2VjdDE5M3IyICg1KSAqLyAKLS0J CU5JRF9zZWNwMTkyazEsIC8qIHNlY3AxOTJrMSAoMTgpICovCi0tCQlOSURfWDlfNjJfcHJpbWUx OTJ2MSwgLyogc2VjcDE5MnIxICgxOSkgKi8gCi0tCQlOSURfc2VjdDE2M2sxLCAvKiBzZWN0MTYz azEgKDEpICovCi0tCQlOSURfc2VjdDE2M3IxLCAvKiBzZWN0MTYzcjEgKDIpICovCi0tCQlOSURf c2VjdDE2M3IyLCAvKiBzZWN0MTYzcjIgKDMpICovCi0tCQlOSURfc2VjcDE2MGsxLCAvKiBzZWNw MTYwazEgKDE1KSAqLwotLQkJTklEX3NlY3AxNjByMSwgLyogc2VjcDE2MHIxICgxNikgKi8gCi0t CQlOSURfc2VjcDE2MHIyLCAvKiBzZWNwMTYwcjIgKDE3KSAqLyAKLSAJfTsKLSAKLSBpbnQgdGxz MV9lY19jdXJ2ZV9pZDJuaWQoaW50IGN1cnZlX2lkKQoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4w LjFpLXRydXN0ZWQtZmlyc3QucGF0Y2ggYi9vcGVuc3NsLTEuMC4xaS10cnVzdGVkLWZpcnN0LnBh dGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTFmMzZkLi4wMDAwMDAwCi0tLSBh L29wZW5zc2wtMS4wLjFpLXRydXN0ZWQtZmlyc3QucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwz MzAgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWkvYXBwcy9hcHBzLmMudHJ1c3RlZC1m aXJzdCBvcGVuc3NsLTEuMC4xaS9hcHBzL2FwcHMuYwotLS0tIG9wZW5zc2wtMS4wLjFpL2FwcHMv YXBwcy5jLnRydXN0ZWQtZmlyc3QJMjAxNC0wOC0wNiAyMzoxMDo1Ni4wMDAwMDAwMDAgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4xaS9hcHBzL2FwcHMuYwkyMDE0LTA4LTA3IDEzOjU0OjI3Ljc1MTEw MzQwNSArMDIwMAotQEAgLTIzNjUsNiArMjM2NSw4IEBAIGludCBhcmdzX3ZlcmlmeShjaGFyICoq KnBhcmdzLCBpbnQgKnBhcmcKLSAJCWZsYWdzIHw9IFg1MDlfVl9GTEFHX05PVElGWV9QT0xJQ1k7 Ci0gCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLWNoZWNrX3NzX3NpZyIpKQotIAkJZmxhZ3MgfD0g WDUwOV9WX0ZMQUdfQ0hFQ0tfU1NfU0lHTkFUVVJFOwotKwllbHNlIGlmICghc3RyY21wKGFyZywg Ii10cnVzdGVkX2ZpcnN0IikpCi0rCQlmbGFncyB8PSBYNTA5X1ZfRkxBR19UUlVTVEVEX0ZJUlNU OwotIAllbHNlCi0gCQlyZXR1cm4gMDsKLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFpL2FwcHMv Y21zLmMudHJ1c3RlZC1maXJzdCBvcGVuc3NsLTEuMC4xaS9hcHBzL2Ntcy5jCi0tLS0gb3BlbnNz bC0xLjAuMWkvYXBwcy9jbXMuYy50cnVzdGVkLWZpcnN0CTIwMTQtMDgtMDYgMjM6MTA6NTYuMDAw MDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWkvYXBwcy9jbXMuYwkyMDE0LTA4LTA3IDEz OjU0OjI3Ljc1MTEwMzQwNSArMDIwMAotQEAgLTY0Miw2ICs2NDIsNyBAQCBpbnQgTUFJTihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCi0gCQlCSU9fcHJpbnRmIChiaW9fZXJyLCAiLXRleHQgICAgICAg ICAgaW5jbHVkZSBvciBkZWxldGUgdGV4dCBNSU1FIGhlYWRlcnNcbiIpOwotIAkJQklPX3ByaW50 ZiAoYmlvX2VyciwgIi1DQXBhdGggZGlyICAgIHRydXN0ZWQgY2VydGlmaWNhdGVzIGRpcmVjdG9y eVxuIik7Ci0gCQlCSU9fcHJpbnRmIChiaW9fZXJyLCAiLUNBZmlsZSBmaWxlICAgdHJ1c3RlZCBj ZXJ0aWZpY2F0ZXMgZmlsZVxuIik7Ci0rCQlCSU9fcHJpbnRmIChiaW9fZXJyLCAiLXRydXN0ZWRf Zmlyc3QgdXNlIHRydXN0ZWQgY2VydGlmaWNhdGVzIGZpcnN0IHdoZW4gYnVpbGRpbmcgdGhlIHRy dXN0IGNoYWluXG4iKTsKLSAJCUJJT19wcmludGYgKGJpb19lcnIsICItY3JsX2NoZWNrICAgICBj aGVjayByZXZvY2F0aW9uIHN0YXR1cyBvZiBzaWduZXIncyBjZXJ0aWZpY2F0ZSB1c2luZyBDUkxz XG4iKTsKLSAJCUJJT19wcmludGYgKGJpb19lcnIsICItY3JsX2NoZWNrX2FsbCBjaGVjayByZXZv Y2F0aW9uIHN0YXR1cyBvZiBzaWduZXIncyBjZXJ0aWZpY2F0ZSBjaGFpbiB1c2luZyBDUkxzXG4i KTsKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xaS9h cHBzL29jc3AuYy50cnVzdGVkLWZpcnN0IG9wZW5zc2wtMS4wLjFpL2FwcHMvb2NzcC5jCi0tLS0g b3BlbnNzbC0xLjAuMWkvYXBwcy9vY3NwLmMudHJ1c3RlZC1maXJzdAkyMDE0LTA4LTA2IDIzOjEw OjU2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFpL2FwcHMvb2NzcC5jCTIwMTQt MDgtMDcgMTM6NTQ6MjcuNzUyMTAzNDA5ICswMjAwCi1AQCAtNjA1LDYgKzYwNSw3IEBAIGludCBN QUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAJCUJJT19wcmludGYgKGJpb19lcnIsICItcGF0 aCAgICAgICAgICAgICAgcGF0aCB0byB1c2UgaW4gT0NTUCByZXF1ZXN0XG4iKTsKLSAJCUJJT19w cmludGYgKGJpb19lcnIsICItQ0FwYXRoIGRpciAgICAgICAgdHJ1c3RlZCBjZXJ0aWZpY2F0ZXMg ZGlyZWN0b3J5XG4iKTsKLSAJCUJJT19wcmludGYgKGJpb19lcnIsICItQ0FmaWxlIGZpbGUgICAg ICAgdHJ1c3RlZCBjZXJ0aWZpY2F0ZXMgZmlsZVxuIik7Ci0rCQlCSU9fcHJpbnRmIChiaW9fZXJy LCAiLXRydXN0ZWRfZmlyc3QgICAgIHVzZSB0cnVzdGVkIGNlcnRpZmljYXRlcyBmaXJzdCB3aGVu IGJ1aWxkaW5nIHRoZSB0cnVzdCBjaGFpblxuIik7Ci0gCQlCSU9fcHJpbnRmIChiaW9fZXJyLCAi LVZBZmlsZSBmaWxlICAgICAgIHZhbGlkYXRvciBjZXJ0aWZpY2F0ZXMgZmlsZVxuIik7Ci0gCQlC SU9fcHJpbnRmIChiaW9fZXJyLCAiLXZhbGlkaXR5X3BlcmlvZCBuIG1heGltdW0gdmFsaWRpdHkg ZGlzY3JlcGFuY3kgaW4gc2Vjb25kc1xuIik7Ci0gCQlCSU9fcHJpbnRmIChiaW9fZXJyLCAiLXN0 YXR1c19hZ2UgbiAgICAgIG1heGltdW0gc3RhdHVzIGFnZSBpbiBzZWNvbmRzXG4iKTsKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjFpL2FwcHMvc19jbGllbnQuYy50cnVzdGVkLWZpcnN0IG9wZW5zc2wt MS4wLjFpL2FwcHMvc19jbGllbnQuYwotLS0tIG9wZW5zc2wtMS4wLjFpL2FwcHMvc19jbGllbnQu Yy50cnVzdGVkLWZpcnN0CTIwMTQtMDgtMDcgMTM6NTQ6MjcuNzUyMTAzNDA5ICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMWkvYXBwcy9zX2NsaWVudC5jCTIwMTQtMDgtMDcgMTU6MDY6MjguNDQzOTE4 MDU1ICswMjAwCi1AQCAtMjk5LDYgKzI5OSw3IEBAIHN0YXRpYyB2b2lkIHNjX3VzYWdlKHZvaWQp Ci0gCUJJT19wcmludGYoYmlvX2VyciwiIC1wYXNzIGFyZyAgICAgLSBwcml2YXRlIGtleSBmaWxl IHBhc3MgcGhyYXNlIHNvdXJjZVxuIik7Ci0gCUJJT19wcmludGYoYmlvX2VyciwiIC1DQXBhdGgg YXJnICAgLSBQRU0gZm9ybWF0IGRpcmVjdG9yeSBvZiBDQSdzXG4iKTsKLSAJQklPX3ByaW50Zihi aW9fZXJyLCIgLUNBZmlsZSBhcmcgICAtIFBFTSBmb3JtYXQgZmlsZSBvZiBDQSdzXG4iKTsKLSsJ QklPX3ByaW50ZihiaW9fZXJyLCIgLXRydXN0ZWRfZmlyc3QgLSBVc2UgdHJ1c3RlZCBDQSdzIGZp cnN0IHdoZW4gYnVpbGRpbmcgdGhlIHRydXN0IGNoYWluXG4iKTsKLSAJQklPX3ByaW50ZihiaW9f ZXJyLCIgLXJlY29ubmVjdCAgICAtIERyb3AgYW5kIHJlLW1ha2UgdGhlIGNvbm5lY3Rpb24gd2l0 aCB0aGUgc2FtZSBTZXNzaW9uLUlEXG4iKTsKLSAJQklPX3ByaW50ZihiaW9fZXJyLCIgLXBhdXNl ICAgICAgICAtIHNsZWVwKDEpIGFmdGVyIGVhY2ggcmVhZCgyKSBhbmQgd3JpdGUoMikgc3lzdGVt IGNhbGxcbiIpOwotIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtcHJleGl0ICAgICAgIC0gcHJpbnQg c2Vzc2lvbiBpbmZvcm1hdGlvbiBldmVuIG9uIGNvbm5lY3Rpb24gZmFpbHVyZVxuIik7Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4xaS9hcHBzL3NtaW1lLmMudHJ1c3RlZC1maXJzdCBvcGVuc3NsLTEu MC4xaS9hcHBzL3NtaW1lLmMKLS0tLSBvcGVuc3NsLTEuMC4xaS9hcHBzL3NtaW1lLmMudHJ1c3Rl ZC1maXJzdAkyMDE0LTA4LTA2IDIzOjEwOjU2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wt MS4wLjFpL2FwcHMvc21pbWUuYwkyMDE0LTA4LTA3IDEzOjU0OjI3Ljc1MzEwMzQxNCArMDIwMAot QEAgLTQ3OSw2ICs0NzksNyBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0gCQlC SU9fcHJpbnRmIChiaW9fZXJyLCAiLXRleHQgICAgICAgICAgaW5jbHVkZSBvciBkZWxldGUgdGV4 dCBNSU1FIGhlYWRlcnNcbiIpOwotIAkJQklPX3ByaW50ZiAoYmlvX2VyciwgIi1DQXBhdGggZGly ICAgIHRydXN0ZWQgY2VydGlmaWNhdGVzIGRpcmVjdG9yeVxuIik7Ci0gCQlCSU9fcHJpbnRmIChi aW9fZXJyLCAiLUNBZmlsZSBmaWxlICAgdHJ1c3RlZCBjZXJ0aWZpY2F0ZXMgZmlsZVxuIik7Ci0r CQlCSU9fcHJpbnRmIChiaW9fZXJyLCAiLXRydXN0ZWRfZmlyc3QgdXNlIHRydXN0ZWQgY2VydGlm aWNhdGVzIGZpcnN0IHdoZW4gYnVpbGRpbmcgdGhlIHRydXN0IGNoYWluXG4iKTsKLSAJCUJJT19w cmludGYgKGJpb19lcnIsICItY3JsX2NoZWNrICAgICBjaGVjayByZXZvY2F0aW9uIHN0YXR1cyBv ZiBzaWduZXIncyBjZXJ0aWZpY2F0ZSB1c2luZyBDUkxzXG4iKTsKLSAJCUJJT19wcmludGYgKGJp b19lcnIsICItY3JsX2NoZWNrX2FsbCBjaGVjayByZXZvY2F0aW9uIHN0YXR1cyBvZiBzaWduZXIn cyBjZXJ0aWZpY2F0ZSBjaGFpbiB1c2luZyBDUkxzXG4iKTsKLSAjaWZuZGVmIE9QRU5TU0xfTk9f RU5HSU5FCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xaS9hcHBzL3Nfc2VydmVyLmMudHJ1c3RlZC1m aXJzdCBvcGVuc3NsLTEuMC4xaS9hcHBzL3Nfc2VydmVyLmMKLS0tLSBvcGVuc3NsLTEuMC4xaS9h cHBzL3Nfc2VydmVyLmMudHJ1c3RlZC1maXJzdAkyMDE0LTA4LTA3IDEzOjU0OjI3LjcxODEwMzI0 MSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFpL2FwcHMvc19zZXJ2ZXIuYwkyMDE0LTA4LTA3IDEz OjU0OjI3Ljc1MzEwMzQxNCArMDIwMAotQEAgLTUwMiw2ICs1MDIsNyBAQCBzdGF0aWMgdm9pZCBz dl91c2FnZSh2b2lkKQotIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtc3RhdGUgICAgICAgIC0gUHJp bnQgdGhlIFNTTCBzdGF0ZXNcbiIpOwotIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtQ0FwYXRoIGFy ZyAgIC0gUEVNIGZvcm1hdCBkaXJlY3Rvcnkgb2YgQ0Enc1xuIik7Ci0gCUJJT19wcmludGYoYmlv X2VyciwiIC1DQWZpbGUgYXJnICAgLSBQRU0gZm9ybWF0IGZpbGUgb2YgQ0Enc1xuIik7Ci0rCUJJ T19wcmludGYoYmlvX2VyciwiIC10cnVzdGVkX2ZpcnN0IC0gVXNlIHRydXN0ZWQgQ0EncyBmaXJz dCB3aGVuIGJ1aWxkaW5nIHRoZSB0cnVzdCBjaGFpblxuIik7Ci0gCUJJT19wcmludGYoYmlvX2Vy ciwiIC1ub2NlcnQgICAgICAgLSBEb24ndCB1c2UgYW55IGNlcnRpZmljYXRlcyAoQW5vbi1ESClc biIpOwotIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtY2lwaGVyIGFyZyAgIC0gcGxheSB3aXRoICdv cGVuc3NsIGNpcGhlcnMnIHRvIHNlZSB3aGF0IGdvZXMgaGVyZVxuIik7Ci0gCUJJT19wcmludGYo YmlvX2VyciwiIC1zZXJ2ZXJwcmVmICAgLSBVc2Ugc2VydmVyJ3MgY2lwaGVyIHByZWZlcmVuY2Vz XG4iKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFpL2FwcHMvc190aW1lLmMudHJ1c3RlZC1maXJz dCBvcGVuc3NsLTEuMC4xaS9hcHBzL3NfdGltZS5jCi0tLS0gb3BlbnNzbC0xLjAuMWkvYXBwcy9z X3RpbWUuYy50cnVzdGVkLWZpcnN0CTIwMTQtMDgtMDcgMTM6NTQ6MjcuNDMyMTAxODIzICswMjAw Ci0rKysgb3BlbnNzbC0xLjAuMWkvYXBwcy9zX3RpbWUuYwkyMDE0LTA4LTA3IDEzOjU0OjI3Ljc1 MzEwMzQxNCArMDIwMAotQEAgLTE3OSw2ICsxNzksNyBAQCBzdGF0aWMgdm9pZCBzX3RpbWVfdXNh Z2Uodm9pZCkKLSAgICAgICAgICAgICAgICAgZmlsZSBpZiBub3Qgc3BlY2lmaWVkIGJ5IHRoaXMg b3B0aW9uXG5cCi0gLUNBcGF0aCBhcmcgICAtIFBFTSBmb3JtYXQgZGlyZWN0b3J5IG9mIENBJ3Nc blwKLSAtQ0FmaWxlIGFyZyAgIC0gUEVNIGZvcm1hdCBmaWxlIG9mIENBJ3NcblwKLSstdHJ1c3Rl ZF9maXJzdCAtIFVzZSB0cnVzdGVkIENBJ3MgZmlyc3Qgd2hlbiBidWlsZGluZyB0aGUgdHJ1c3Qg Y2hhaW5cblwKLSAtY2lwaGVyICAgICAgIC0gcHJlZmVycmVkIGNpcGhlciB0byB1c2UsIHBsYXkg d2l0aCAnb3BlbnNzbCBjaXBoZXJzJ1xuXG4iOwotIAotIAlwcmludGYoICJ1c2FnZTogc190aW1l IDxhcmdzPlxuXG4iICk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xaS9hcHBzL3RzLmMudHJ1c3Rl ZC1maXJzdCBvcGVuc3NsLTEuMC4xaS9hcHBzL3RzLmMKLS0tLSBvcGVuc3NsLTEuMC4xaS9hcHBz L3RzLmMudHJ1c3RlZC1maXJzdAkyMDE0LTA4LTA3IDEzOjU0OjI3LjcwNzEwMzE4NiArMDIwMAot KysrIG9wZW5zc2wtMS4wLjFpL2FwcHMvdHMuYwkyMDE0LTA4LTA3IDEzOjU0OjI3Ljc1MzEwMzQx NCArMDIwMAotQEAgLTM4Myw3ICszODMsNyBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCi0gCQkgICAidHMgLXZlcmlmeSBbLWRhdGEgZmlsZV90b19oYXNoXSBbLWRpZ2VzdCBkaWdl c3RfYnl0ZXNdICIKLSAJCSAgICJbLXF1ZXJ5ZmlsZSByZXF1ZXN0LnRzcV0gIgotIAkJICAgIi1p biByZXNwb25zZS50c3IgWy10b2tlbl9pbl0gIgotLQkJICAgIi1DQXBhdGggY2FfcGF0aCAtQ0Fm aWxlIGNhX2ZpbGUucGVtICIKLSsJCSAgICItQ0FwYXRoIGNhX3BhdGggLUNBZmlsZSBjYV9maWxl LnBlbSAtdHJ1c3RlZF9maXJzdCIKLSAJCSAgICItdW50cnVzdGVkIGNlcnRfZmlsZS5wZW1cbiIp OwotICBjbGVhbnVwOgotIAkvKiBDbGVhbiB1cC4gKi8KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFp L2FwcHMvdmVyaWZ5LmMudHJ1c3RlZC1maXJzdCBvcGVuc3NsLTEuMC4xaS9hcHBzL3ZlcmlmeS5j Ci0tLS0gb3BlbnNzbC0xLjAuMWkvYXBwcy92ZXJpZnkuYy50cnVzdGVkLWZpcnN0CTIwMTQtMDgt MDYgMjM6MTA6NTYuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWkvYXBwcy92ZXJp ZnkuYwkyMDE0LTA4LTA3IDEzOjU0OjI3Ljc1NDEwMzQxOSArMDIwMAotQEAgLTIzNyw3ICsyMzcs NyBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0gCi0gZW5kOgotIAlpZiAocmV0 ID09IDEpIHsKLS0JCUJJT19wcmludGYoYmlvX2VyciwidXNhZ2U6IHZlcmlmeSBbLXZlcmJvc2Vd IFstQ0FwYXRoIHBhdGhdIFstQ0FmaWxlIGZpbGVdIFstcHVycG9zZSBwdXJwb3NlXSBbLWNybF9j aGVja10iKTsKLSsJCUJJT19wcmludGYoYmlvX2VyciwidXNhZ2U6IHZlcmlmeSBbLXZlcmJvc2Vd IFstQ0FwYXRoIHBhdGhdIFstQ0FmaWxlIGZpbGVdIFstdHJ1c3RlZF9maXJzdF0gWy1wdXJwb3Nl IHB1cnBvc2VdIFstY3JsX2NoZWNrXSIpOwotIAkJQklPX3ByaW50ZihiaW9fZXJyLCIgWy1hdHRp bWUgdGltZXN0YW1wXSIpOwotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSAJCUJJT19wcmlu dGYoYmlvX2VyciwiIFstZW5naW5lIGVdIik7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xaS9jcnlw dG8veDUwOS94NTA5X3ZmeS5jLnRydXN0ZWQtZmlyc3Qgb3BlbnNzbC0xLjAuMWkvY3J5cHRvL3g1 MDkveDUwOV92ZnkuYwotLS0tIG9wZW5zc2wtMS4wLjFpL2NyeXB0by94NTA5L3g1MDlfdmZ5LmMu dHJ1c3RlZC1maXJzdAkyMDE0LTA4LTA3IDEzOjU0OjI3LjcxNjEwMzIzMSArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjFpL2NyeXB0by94NTA5L3g1MDlfdmZ5LmMJMjAxNC0wOC0wNyAxMzo1NDoyNy43 NTQxMDM0MTkgKzAyMDAKLUBAIC0yMDcsNiArMjA3LDIxIEBAIGludCBYNTA5X3ZlcmlmeV9jZXJ0 KFg1MDlfU1RPUkVfQ1RYICpjdHgKLSAKLSAJCS8qIElmIHdlIGFyZSBzZWxmIHNpZ25lZCwgd2Ug YnJlYWsgKi8KLSAJCWlmIChjdHgtPmNoZWNrX2lzc3VlZChjdHgsIHgseCkpIGJyZWFrOwotKwkJ LyogSWYgYXNrZWQgc2VlIGlmIHdlIGNhbiBmaW5kIGlzc3VlciBpbiB0cnVzdGVkIHN0b3JlIGZp cnN0ICovCi0rCQlpZiAoY3R4LT5wYXJhbS0+ZmxhZ3MgJiBYNTA5X1ZfRkxBR19UUlVTVEVEX0ZJ UlNUKQotKwkJCXsKLSsJCQlvayA9IGN0eC0+Z2V0X2lzc3VlcigmeHRtcCwgY3R4LCB4KTsKLSsJ CQlpZiAob2sgPCAwKQotKwkJCQlyZXR1cm4gb2s7Ci0rCQkJLyogSWYgc3VjY2Vzc2Z1bCBmb3Ig bm93IGZyZWUgdXAgY2VydCBzbyBpdAotKwkJCSAqIHdpbGwgYmUgcGlja2VkIHVwIGFnYWluIGxh dGVyLgotKwkJCSAqLwotKwkJCWlmIChvayA+IDApCi0rCQkJCXsKLSsJCQkJWDUwOV9mcmVlKHh0 bXApOwotKwkJCQlicmVhazsKLSsJCQkJfQotKwkJCX0KLSAKLSAJCS8qIElmIHdlIHdlcmUgcGFz c2VkIGEgY2VydCBjaGFpbiwgdXNlIGl0IGZpcnN0ICovCi0gCQlpZiAoY3R4LT51bnRydXN0ZWQg IT0gTlVMTCkKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFpL2NyeXB0by94NTA5L3g1MDlfdmZ5Lmgu dHJ1c3RlZC1maXJzdCBvcGVuc3NsLTEuMC4xaS9jcnlwdG8veDUwOS94NTA5X3ZmeS5oCi0tLS0g b3BlbnNzbC0xLjAuMWkvY3J5cHRvL3g1MDkveDUwOV92ZnkuaC50cnVzdGVkLWZpcnN0CTIwMTQt MDgtMDcgMTM6NTQ6MjcuMzYwMTAxNDY2ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWkvY3J5cHRv L3g1MDkveDUwOV92ZnkuaAkyMDE0LTA4LTA3IDEzOjU0OjI3Ljc1NDEwMzQxOSArMDIwMAotQEAg LTM4OSw2ICszODksOCBAQCB2b2lkIFg1MDlfU1RPUkVfQ1RYX3NldF9kZXB0aChYNTA5X1NUT1JF Ci0gI2RlZmluZSBYNTA5X1ZfRkxBR19VU0VfREVMVEFTCQkJMHgyMDAwCi0gLyogQ2hlY2sgc2Vs ZnNpZ25lZCBDQSBzaWduYXR1cmUgKi8KLSAjZGVmaW5lIFg1MDlfVl9GTEFHX0NIRUNLX1NTX1NJ R05BVFVSRQkJMHg0MDAwCi0rLyogVXNlIHRydXN0ZWQgc3RvcmUgZmlyc3QgKi8KLSsjZGVmaW5l IFg1MDlfVl9GTEFHX1RSVVNURURfRklSU1QJCTB4ODAwMAotIAotIAotICNkZWZpbmUgWDUwOV9W UF9GTEFHX0RFRkFVTFQJCQkweDEKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFpL2RvYy9hcHBzL2Nt cy5wb2QudHJ1c3RlZC1maXJzdCBvcGVuc3NsLTEuMC4xaS9kb2MvYXBwcy9jbXMucG9kCi0tLS0g b3BlbnNzbC0xLjAuMWkvZG9jL2FwcHMvY21zLnBvZC50cnVzdGVkLWZpcnN0CTIwMTQtMDgtMDYg MjM6MTA6NTYuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWkvZG9jL2FwcHMvY21z LnBvZAkyMDE0LTA4LTA3IDEzOjU0OjI3Ljc1NDEwMzQxOSArMDIwMAotQEAgLTM1LDYgKzM1LDcg QEAgQjxvcGVuc3NsPiBCPGNtcz4KLSBbQjwtcHJpbnQ+XQotIFtCPC1DQWZpbGUgZmlsZT5dCi0g W0I8LUNBcGF0aCBkaXI+XQotK1tCPC10cnVzdGVkX2ZpcnN0Pl0KLSBbQjwtbWQgZGlnZXN0Pl0K LSBbQjwtW2NpcGhlcl0+XQotIFtCPC1ub2ludGVybj5dCi1AQCAtMjQzLDYgKzI0NCwxMiBAQCBC PC12ZXJpZnk+LiBUaGlzIGRpcmVjdG9yeSBtdXN0IGJlIGEgc3RhCi0gaXMgYSBoYXNoIG9mIGVh Y2ggc3ViamVjdCBuYW1lICh1c2luZyBCPHg1MDkgLWhhc2g+KSBzaG91bGQgYmUgbGlua2VkCi0g dG8gZWFjaCBjZXJ0aWZpY2F0ZS4KLSAKLSs9aXRlbSBCPC10cnVzdGVkX2ZpcnN0PgotKwotK1Vz ZSBjZXJ0aWZpY2F0ZXMgaW4gQ0EgZmlsZSBvciBDQSBkaXJlY3RvcnkgYmVmb3JlIHVudHJ1c3Rl ZCBjZXJ0aWZpY2F0ZXMKLStmcm9tIHRoZSBtZXNzYWdlIHdoZW4gYnVpbGRpbmcgdGhlIHRydXN0 IGNoYWluIHRvIHZlcmlmeSBjZXJ0aWZpY2F0ZXMuCi0rVGhpcyBpcyBtYWlubHkgdXNlZnVsIGlu IGVudmlyb25tZW50cyB3aXRoIEJyaWRnZSBDQSBvciBDcm9zcy1DZXJ0aWZpZWQgQ0FzLgotKwot ID1pdGVtIEI8LW1kIGRpZ2VzdD4KLSAKLSBkaWdlc3QgYWxnb3JpdGhtIHRvIHVzZSB3aGVuIHNp Z25pbmcgb3IgcmVzaWduaW5nLiBJZiBub3QgcHJlc2VudCB0aGVuIHRoZQotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWkvZG9jL2FwcHMvb2NzcC5wb2QudHJ1c3RlZC1maXJzdCBvcGVuc3NsLTEuMC4x aS9kb2MvYXBwcy9vY3NwLnBvZAotLS0tIG9wZW5zc2wtMS4wLjFpL2RvYy9hcHBzL29jc3AucG9k LnRydXN0ZWQtZmlyc3QJMjAxNC0wOC0wNyAxMzo1NDoyNy43MDgxMDMxOTEgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4xaS9kb2MvYXBwcy9vY3NwLnBvZAkyMDE0LTA4LTA3IDEzOjU0OjI3Ljc1NTEw MzQyNCArMDIwMAotQEAgLTI5LDYgKzI5LDcgQEAgQjxvcGVuc3NsPiBCPG9jc3A+Ci0gW0I8LXBh dGg+XQotIFtCPC1DQXBhdGggZGlyPl0KLSBbQjwtQ0FmaWxlIGZpbGU+XQotK1tCPC10cnVzdGVk X2ZpcnN0Pl0KLSBbQjwtVkFmaWxlIGZpbGU+XQotIFtCPC12YWxpZGl0eV9wZXJpb2Qgbj5dCi0g W0I8LXN0YXR1c19hZ2Ugbj5dCi1AQCAtMTM4LDYgKzEzOSwxMyBAQCBvciAiLyIgYnkgZGVmYXVs dC4KLSBmaWxlIG9yIHBhdGhuYW1lIGNvbnRhaW5pbmcgdHJ1c3RlZCBDQSBjZXJ0aWZpY2F0ZXMu IFRoZXNlIGFyZSB1c2VkIHRvIHZlcmlmeQotIHRoZSBzaWduYXR1cmUgb24gdGhlIE9DU1AgcmVz cG9uc2UuCi0gCi0rPWl0ZW0gQjwtdHJ1c3RlZF9maXJzdD4KLSsKLStVc2UgY2VydGlmaWNhdGVz IGluIENBIGZpbGUgb3IgQ0EgZGlyZWN0b3J5IG92ZXIgY2VydGlmaWNhdGVzIHByb3ZpZGVkCi0r aW4gdGhlIHJlc3BvbnNlIG9yIHJlc2lkaW5nIGluIG90aGVyIGNlcnRpZmljYXRlcyBmaWxlIHdo ZW4gYnVpbGRpbmcgdGhlIHRydXN0Ci0rY2hhaW4gdG8gdmVyaWZ5IHJlc3BvbmRlciBjZXJ0aWZp Y2F0ZS4KLStUaGlzIGlzIG1haW5seSB1c2VmdWwgaW4gZW52aXJvbm1lbnRzIHdpdGggQnJpZGdl IENBIG9yIENyb3NzLUNlcnRpZmllZCBDQXMuCi0rCi0gPWl0ZW0gQjwtdmVyaWZ5X290aGVyIGZp bGU+Ci0gCi0gZmlsZSBjb250YWluaW5nIGFkZGl0aW9uYWwgY2VydGlmaWNhdGVzIHRvIHNlYXJj aCB3aGVuIGF0dGVtcHRpbmcgdG8gbG9jYXRlCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xaS9kb2Mv YXBwcy9zX2NsaWVudC5wb2QudHJ1c3RlZC1maXJzdCBvcGVuc3NsLTEuMC4xaS9kb2MvYXBwcy9z X2NsaWVudC5wb2QKLS0tLSBvcGVuc3NsLTEuMC4xaS9kb2MvYXBwcy9zX2NsaWVudC5wb2QudHJ1 c3RlZC1maXJzdAkyMDE0LTA4LTA3IDEzOjU0OjI3LjcyNjEwMzI4MSArMDIwMAotKysrIG9wZW5z c2wtMS4wLjFpL2RvYy9hcHBzL3NfY2xpZW50LnBvZAkyMDE0LTA4LTA3IDEzOjU0OjI3Ljc1NTEw MzQyNCArMDIwMAotQEAgLTE5LDYgKzE5LDcgQEAgQjxvcGVuc3NsPiBCPHNfY2xpZW50PgotIFtC PC1wYXNzIGFyZz5dCi0gW0I8LUNBcGF0aCBkaXJlY3Rvcnk+XQotIFtCPC1DQWZpbGUgZmlsZW5h bWU+XQotK1tCPC10cnVzdGVkX2ZpcnN0Pl0KLSBbQjwtcmVjb25uZWN0Pl0KLSBbQjwtcGF1c2U+ XQotIFtCPC1zaG93Y2VydHM+XQotQEAgLTEyMSw3ICsxMjIsNyBAQCBhbHNvIHVzZWQgd2hlbiBi dWlsZGluZyB0aGUgY2xpZW50IGNlcnRpCi0gQSBmaWxlIGNvbnRhaW5pbmcgdHJ1c3RlZCBjZXJ0 aWZpY2F0ZXMgdG8gdXNlIGR1cmluZyBzZXJ2ZXIgYXV0aGVudGljYXRpb24KLSBhbmQgdG8gdXNl IHdoZW4gYXR0ZW1wdGluZyB0byBidWlsZCB0aGUgY2xpZW50IGNlcnRpZmljYXRlIGNoYWluLgot IAotLT1pdGVtIEI8LXB1cnBvc2UsIC1pZ25vcmVfY3JpdGljYWwsIC1pc3N1ZXJfY2hlY2tzLCAt Y3JsX2NoZWNrLCAtY3JsX2NoZWNrX2FsbCwgLXBvbGljeV9jaGVjaywgLWV4dGVuZGVkX2NybCwg LXg1MDlfc3RyaWN0LCAtcG9saWN5IC1jaGVja19zc19zaWc+Ci0rPWl0ZW0gQjwtcHVycG9zZSwg LWlnbm9yZV9jcml0aWNhbCwgLWlzc3Vlcl9jaGVja3MsIC1jcmxfY2hlY2ssIC1jcmxfY2hlY2tf YWxsLCAtcG9saWN5X2NoZWNrLCAtZXh0ZW5kZWRfY3JsLCAteDUwOV9zdHJpY3QsIC1wb2xpY3kg LWNoZWNrX3NzX3NpZywgLXRydXN0ZWRfZmlyc3Q+Ci0gCi0gU2V0IHZhcmlvdXMgY2VydGlmaWNh dGUgY2hhaW4gdmFsaWFkaXRpb24gb3B0aW9uLiBTZWUgdGhlCi0gTDxCPHZlcmlmeT58dmVyaWZ5 KDEpPiBtYW51YWwgcGFnZSBmb3IgZGV0YWlscy4KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFpL2Rv Yy9hcHBzL3NtaW1lLnBvZC50cnVzdGVkLWZpcnN0IG9wZW5zc2wtMS4wLjFpL2RvYy9hcHBzL3Nt aW1lLnBvZAotLS0tIG9wZW5zc2wtMS4wLjFpL2RvYy9hcHBzL3NtaW1lLnBvZC50cnVzdGVkLWZp cnN0CTIwMTQtMDctMjIgMjE6NDM6MTEuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MWkvZG9jL2FwcHMvc21pbWUucG9kCTIwMTQtMDgtMDcgMTM6NTQ6MjcuNzU1MTAzNDI0ICswMjAw Ci1AQCAtMTUsNiArMTUsOSBAQCBCPG9wZW5zc2w+IEI8c21pbWU+Ci0gW0I8LXBrN291dD5dCi0g W0I8LVtjaXBoZXJdPl0KLSBbQjwtaW4gZmlsZT5dCi0rW0I8LUNBZmlsZSBmaWxlPl0KLStbQjwt Q0FwYXRoIGRpcj5dCi0rW0I8LXRydXN0ZWRfZmlyc3Q+XQotIFtCPC1jZXJ0ZmlsZSBmaWxlPl0K LSBbQjwtc2lnbmVyIGZpbGU+XQotIFtCPC1yZWNpcCAgZmlsZT5dCi1AQCAtMTQ2LDYgKzE0OSwx MiBAQCBCPC12ZXJpZnk+LiBUaGlzIGRpcmVjdG9yeSBtdXN0IGJlIGEgc3RhCi0gaXMgYSBoYXNo IG9mIGVhY2ggc3ViamVjdCBuYW1lICh1c2luZyBCPHg1MDkgLWhhc2g+KSBzaG91bGQgYmUgbGlu a2VkCi0gdG8gZWFjaCBjZXJ0aWZpY2F0ZS4KLSAKLSs9aXRlbSBCPC10cnVzdGVkX2ZpcnN0Pgot KwotK1VzZSBjZXJ0aWZpY2F0ZXMgaW4gQ0EgZmlsZSBvciBDQSBkaXJlY3Rvcnkgb3ZlciBjZXJ0 aWZpY2F0ZXMgcHJvdmlkZWQKLStpbiB0aGUgbWVzc2FnZSB3aGVuIGJ1aWxkaW5nIHRoZSB0cnVz dCBjaGFpbiB0byB2ZXJpZnkgYSBjZXJ0aWZpY2F0ZS4KLStUaGlzIGlzIG1haW5seSB1c2VmdWwg aW4gZW52aXJvbm1lbnRzIHdpdGggQnJpZGdlIENBIG9yIENyb3NzLUNlcnRpZmllZCBDQXMuCi0r Ci0gPWl0ZW0gQjwtbWQgZGlnZXN0PgotIAotIGRpZ2VzdCBhbGdvcml0aG0gdG8gdXNlIHdoZW4g c2lnbmluZyBvciByZXNpZ25pbmcuIElmIG5vdCBwcmVzZW50IHRoZW4gdGhlCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4xaS9kb2MvYXBwcy9zX3NlcnZlci5wb2QudHJ1c3RlZC1maXJzdCBvcGVuc3Ns LTEuMC4xaS9kb2MvYXBwcy9zX3NlcnZlci5wb2QKLS0tLSBvcGVuc3NsLTEuMC4xaS9kb2MvYXBw cy9zX3NlcnZlci5wb2QudHJ1c3RlZC1maXJzdAkyMDE0LTA4LTA3IDEzOjU0OjI3LjcyNjEwMzI4 MSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFpL2RvYy9hcHBzL3Nfc2VydmVyLnBvZAkyMDE0LTA4 LTA3IDE1OjA3OjEyLjMxNTA5OTU3NyArMDIwMAotQEAgLTMzLDYgKzMzLDcgQEAgQjxvcGVuc3Ns PiBCPHNfc2VydmVyPgotIFtCPC1zdGF0ZT5dCi0gW0I8LUNBcGF0aCBkaXJlY3Rvcnk+XQotIFtC PC1DQWZpbGUgZmlsZW5hbWU+XQotK1tCPC10cnVzdGVkX2ZpcnN0Pl0KLSBbQjwtbm9jZXJ0Pl0K LSBbQjwtY2lwaGVyIGNpcGhlcmxpc3Q+XQotIFtCPC1zZXJ2ZXJwcmVmPl0KLUBAIC0xNzgsNiAr MTc5LDEyIEBAIGFuZCB0byB1c2Ugd2hlbiBhdHRlbXB0aW5nIHRvIGJ1aWxkIHRoZQotIGlzIGFs c28gdXNlZCBpbiB0aGUgbGlzdCBvZiBhY2NlcHRhYmxlIGNsaWVudCBDQXMgcGFzc2VkIHRvIHRo ZSBjbGllbnQgd2hlbgotIGEgY2VydGlmaWNhdGUgaXMgcmVxdWVzdGVkLgotIAotKz1pdGVtIEI8 LXRydXN0ZWRfZmlyc3Q+Ci0rCi0rVXNlIGNlcnRpZmljYXRlcyBpbiBDQSBmaWxlIG9yIENBIGRp cmVjdG9yeSBiZWZvcmUgb3RoZXIgY2VydGlmaWNhdGVzIAotK3doZW4gYnVpbGRpbmcgdGhlIHRy dXN0IGNoYWluIHRvIHZlcmlmeSBjbGllbnQgY2VydGlmaWNhdGVzLgotK1RoaXMgaXMgbWFpbmx5 IHVzZWZ1bCBpbiBlbnZpcm9ubWVudHMgd2l0aCBCcmlkZ2UgQ0Egb3IgQ3Jvc3MtQ2VydGlmaWVk IENBcy4KLSsKLSA9aXRlbSBCPC1zdGF0ZT4KLSAKLSBwcmludHMgb3V0IHRoZSBTU0wgc2Vzc2lv biBzdGF0ZXMuCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xaS9kb2MvYXBwcy9zX3RpbWUucG9kLnRy dXN0ZWQtZmlyc3Qgb3BlbnNzbC0xLjAuMWkvZG9jL2FwcHMvc190aW1lLnBvZAotLS0tIG9wZW5z c2wtMS4wLjFpL2RvYy9hcHBzL3NfdGltZS5wb2QudHJ1c3RlZC1maXJzdAkyMDE0LTA3LTIyIDIx OjQxOjIzLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFpL2RvYy9hcHBzL3NfdGlt ZS5wb2QJMjAxNC0wOC0wNyAxMzo1NDoyNy43NTUxMDM0MjQgKzAyMDAKLUBAIC0xNCw2ICsxNCw3 IEBAIEI8b3BlbnNzbD4gQjxzX3RpbWU+Ci0gW0I8LWtleSBmaWxlbmFtZT5dCi0gW0I8LUNBcGF0 aCBkaXJlY3Rvcnk+XQotIFtCPC1DQWZpbGUgZmlsZW5hbWU+XQotK1tCPC10cnVzdGVkX2ZpcnN0 Pl0KLSBbQjwtcmV1c2U+XQotIFtCPC1uZXc+XQotIFtCPC12ZXJpZnkgZGVwdGg+XQotQEAgLTc2 LDYgKzc3LDEyIEBAIGFsc28gdXNlZCB3aGVuIGJ1aWxkaW5nIHRoZSBjbGllbnQgY2VydGkKLSBB IGZpbGUgY29udGFpbmluZyB0cnVzdGVkIGNlcnRpZmljYXRlcyB0byB1c2UgZHVyaW5nIHNlcnZl ciBhdXRoZW50aWNhdGlvbgotIGFuZCB0byB1c2Ugd2hlbiBhdHRlbXB0aW5nIHRvIGJ1aWxkIHRo ZSBjbGllbnQgY2VydGlmaWNhdGUgY2hhaW4uCi0gCi0rPWl0ZW0gQjwtdHJ1c3RlZF9maXJzdD4K LSsKLStVc2UgY2VydGlmaWNhdGVzIGluIENBIGZpbGUgb3IgQ0EgZGlyZWN0b3J5IG92ZXIgdGhl IGNlcnRpZmljYXRlcyBwcm92aWRlZAotK2J5IHRoZSBzZXJ2ZXIgd2hlbiBidWlsZGluZyB0aGUg dHJ1c3QgY2hhaW4gdG8gdmVyaWZ5IHNlcnZlciBjZXJ0aWZpY2F0ZS4KLStUaGlzIGlzIG1haW5s eSB1c2VmdWwgaW4gZW52aXJvbm1lbnRzIHdpdGggQnJpZGdlIENBIG9yIENyb3NzLUNlcnRpZmll ZCBDQXMuCi0rCi0gPWl0ZW0gQjwtbmV3PgotIAotIHBlcmZvcm1zIHRoZSB0aW1pbmcgdGVzdCB1 c2luZyBhIG5ldyBzZXNzaW9uIElEIGZvciBlYWNoIGNvbm5lY3Rpb24uCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4xaS9kb2MvYXBwcy90cy5wb2QudHJ1c3RlZC1maXJzdCBvcGVuc3NsLTEuMC4xaS9k b2MvYXBwcy90cy5wb2QKLS0tLSBvcGVuc3NsLTEuMC4xaS9kb2MvYXBwcy90cy5wb2QudHJ1c3Rl ZC1maXJzdAkyMDE0LTA3LTIyIDIxOjQxOjIzLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wt MS4wLjFpL2RvYy9hcHBzL3RzLnBvZAkyMDE0LTA4LTA3IDEzOjU0OjI3Ljc1NjEwMzQyOSArMDIw MAotQEAgLTQ2LDYgKzQ2LDcgQEAgQjwtdmVyaWZ5PgotIFtCPC10b2tlbl9pbj5dCi0gW0I8LUNB cGF0aD4gdHJ1c3RlZF9jZXJ0X3BhdGhdCi0gW0I8LUNBZmlsZT4gdHJ1c3RlZF9jZXJ0cy5wZW1d Ci0rW0I8LXRydXN0ZWRfZmlyc3Q+XQotIFtCPC11bnRydXN0ZWQ+IGNlcnRfZmlsZS5wZW1dCi0g Ci0gPWhlYWQxIERFU0NSSVBUSU9OCi1AQCAtMzI0LDYgKzMyNSwxMiBAQCBMPHZlcmlmeSgxKXx2 ZXJpZnkoMSk+IGZvciBhZGRpdGlvbmFsIGRlCi0gb3IgQjwtQ0FwYXRoPiBtdXN0IGJlIHNwZWNp ZmllZC4KLSAoT3B0aW9uYWwpCi0gCi0rPWl0ZW0gQjwtdHJ1c3RlZF9maXJzdD4KLSsKLStVc2Ug Y2VydGlmaWNhdGVzIGluIENBIGZpbGUgb3IgQ0EgZGlyZWN0b3J5IGJlZm9yZSBvdGhlciBjZXJ0 aWZpY2F0ZXMKLSt3aGVuIGJ1aWxkaW5nIHRoZSB0cnVzdCBjaGFpbiB0byB2ZXJpZnkgY2VydGlm aWNhdGVzLgotK1RoaXMgaXMgbWFpbmx5IHVzZWZ1bCBpbiBlbnZpcm9ubWVudHMgd2l0aCBCcmlk Z2UgQ0Egb3IgQ3Jvc3MtQ2VydGlmaWVkIENBcy4KLSsKLSA9aXRlbSBCPC11bnRydXN0ZWQ+IGNl cnRfZmlsZS5wZW0KLSAKLSBTZXQgb2YgYWRkaXRpb25hbCB1bnRydXN0ZWQgY2VydGlmaWNhdGVz IGluIFBFTSBmb3JtYXQgd2hpY2ggbWF5IGJlCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xaS9kb2Mv YXBwcy92ZXJpZnkucG9kLnRydXN0ZWQtZmlyc3Qgb3BlbnNzbC0xLjAuMWkvZG9jL2FwcHMvdmVy aWZ5LnBvZAotLS0tIG9wZW5zc2wtMS4wLjFpL2RvYy9hcHBzL3ZlcmlmeS5wb2QudHJ1c3RlZC1m aXJzdAkyMDE0LTA4LTA2IDIzOjEwOjU2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4w LjFpL2RvYy9hcHBzL3ZlcmlmeS5wb2QJMjAxNC0wOC0wNyAxMzo1NDoyNy43NTYxMDM0MjkgKzAy MDAKLUBAIC05LDYgKzksNyBAQCB2ZXJpZnkgLSBVdGlsaXR5IHRvIHZlcmlmeSBjZXJ0aWZpY2F0 ZXMuCi0gQjxvcGVuc3NsPiBCPHZlcmlmeT4KLSBbQjwtQ0FwYXRoIGRpcmVjdG9yeT5dCi0gW0I8 LUNBZmlsZSBmaWxlPl0KLStbQjwtdHJ1c3RlZF9maXJzdD5dCi0gW0I8LXB1cnBvc2UgcHVycG9z ZT5dCi0gW0I8LXBvbGljeSBhcmc+XQotIFtCPC1pZ25vcmVfY3JpdGljYWw+XQotQEAgLTU2LDYg KzU3LDEyIEBAIGluIFBFTSBmb3JtYXQgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyLgotIEEgZmlsZSBv ZiB1bnRydXN0ZWQgY2VydGlmaWNhdGVzLiBUaGUgZmlsZSBzaG91bGQgY29udGFpbiBtdWx0aXBs ZSBjZXJ0aWZpY2F0ZXMKLSBpbiBQRU0gZm9ybWF0IGNvbmNhdGVuYXRlZCB0b2dldGhlci4KLSAK LSs9aXRlbSBCPC10cnVzdGVkX2ZpcnN0PgotKwotK1VzZSBjZXJ0aWZpY2F0ZXMgaW4gQ0EgZmls ZSBvciBDQSBkaXJlY3RvcnkgYmVmb3JlIHRoZSBjZXJ0aWZpY2F0ZXMgaW4gdGhlIHVudHJ1c3Rl ZAotK2ZpbGUgd2hlbiBidWlsZGluZyB0aGUgdHJ1c3QgY2hhaW4gdG8gdmVyaWZ5IGNlcnRpZmlj YXRlcy4KLStUaGlzIGlzIG1haW5seSB1c2VmdWwgaW4gZW52aXJvbm1lbnRzIHdpdGggQnJpZGdl IENBIG9yIENyb3NzLUNlcnRpZmllZCBDQXMuCi0rCi0gPWl0ZW0gQjwtcHVycG9zZSBwdXJwb3Nl PgotIAotIFRoZSBpbnRlbmRlZCB1c2UgZm9yIHRoZSBjZXJ0aWZpY2F0ZS4gSWYgdGhpcyBvcHRp b24gaXMgbm90IHNwZWNpZmllZCwKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4xai1lcGhlbWVy YWwta2V5LXNpemUucGF0Y2ggYi9vcGVuc3NsLTEuMC4xai1lcGhlbWVyYWwta2V5LXNpemUucGF0 Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZThkYmIuLjAwMDAwMDAKLS0tIGEv b3BlbnNzbC0xLjAuMWotZXBoZW1lcmFsLWtleS1zaXplLnBhdGNoCisrKyAvZGV2L251bGwKQEAg LTEsMTM1ICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2FwcHMvc19hcHBzLmguZXBo ZW1lcmFsIG9wZW5zc2wtMS4wLjFqL2FwcHMvc19hcHBzLmgKLS0tLSBvcGVuc3NsLTEuMC4xai9h cHBzL3NfYXBwcy5oLmVwaGVtZXJhbAkyMDE0LTEwLTE2IDEzOjMyOjMwLjc3MjgxNzU5MSArMDIw MAotKysrIG9wZW5zc2wtMS4wLjFqL2FwcHMvc19hcHBzLmgJMjAxNC0xMC0xNiAxMzozMjozMC44 NjU4MTk2OTEgKzAyMDAKLUBAIC0xNTYsNiArMTU2LDcgQEAgaW50IE1TX0NBTExCQUNLIHZlcmlm eV9jYWxsYmFjayhpbnQgb2ssCi0gaW50IHNldF9jZXJ0X3N0dWZmKFNTTF9DVFggKmN0eCwgY2hh ciAqY2VydF9maWxlLCBjaGFyICprZXlfZmlsZSk7Ci0gaW50IHNldF9jZXJ0X2tleV9zdHVmZihT U0xfQ1RYICpjdHgsIFg1MDkgKmNlcnQsIEVWUF9QS0VZICprZXkpOwotICNlbmRpZgotK2ludCBz c2xfcHJpbnRfdG1wX2tleShCSU8gKm91dCwgU1NMICpzKTsKLSBpbnQgaW5pdF9jbGllbnQoaW50 ICpzb2NrLCBjaGFyICpzZXJ2ZXIsIGNoYXIgKnBvcnQsIGludCB0eXBlKTsKLSBpbnQgc2hvdWxk X3JldHJ5KGludCBpKTsKLSBpbnQgZXh0cmFjdF9ob3N0X3BvcnQoY2hhciAqc3RyLGNoYXIgKipo b3N0X3B0cixjaGFyICoqcG9ydF9wdHIpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovYXBwcy9z X2NiLmMuZXBoZW1lcmFsIG9wZW5zc2wtMS4wLjFqL2FwcHMvc19jYi5jCi0tLS0gb3BlbnNzbC0x LjAuMWovYXBwcy9zX2NiLmMuZXBoZW1lcmFsCTIwMTQtMTAtMTUgMTQ6NTM6MzkuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovYXBwcy9zX2NiLmMJMjAxNC0xMC0xNiAxMzozMjoz MC44NjU4MTk2OTEgKzAyMDAKLUBAIC0zMzgsNiArMzM4LDM4IEBAIHZvaWQgTVNfQ0FMTEJBQ0sg YXBwc19zc2xfaW5mb19jYWxsYmFjaygKLSAJCX0KLSAJfQotIAotK2ludCBzc2xfcHJpbnRfdG1w X2tleShCSU8gKm91dCwgU1NMICpzKQotKwl7Ci0rCUVWUF9QS0VZICprZXk7Ci0rCWlmICghU1NM X2dldF9zZXJ2ZXJfdG1wX2tleShzLCAma2V5KSkKLSsJCXJldHVybiAxOwotKwlCSU9fcHV0cyhv dXQsICJTZXJ2ZXIgVGVtcCBLZXk6ICIpOwotKwlzd2l0Y2ggKEVWUF9QS0VZX2lkKGtleSkpCi0r CQl7Ci0rCWNhc2UgRVZQX1BLRVlfUlNBOgotKwkJQklPX3ByaW50ZihvdXQsICJSU0EsICVkIGJp dHNcbiIsIEVWUF9QS0VZX2JpdHMoa2V5KSk7Ci0rCQlicmVhazsKLSsKLSsJY2FzZSBFVlBfUEtF WV9ESDoKLSsJCUJJT19wcmludGYob3V0LCAiREgsICVkIGJpdHNcbiIsIEVWUF9QS0VZX2JpdHMo a2V5KSk7Ci0rCQlicmVhazsKLSsKLSsJY2FzZSBFVlBfUEtFWV9FQzoKLSsJCQl7Ci0rCQkJRUNf S0VZICplYyA9IEVWUF9QS0VZX2dldDFfRUNfS0VZKGtleSk7Ci0rCQkJaW50IG5pZDsKLSsJCQlj b25zdCBjaGFyICpjbmFtZTsKLSsJCQluaWQgPSBFQ19HUk9VUF9nZXRfY3VydmVfbmFtZShFQ19L RVlfZ2V0MF9ncm91cChlYykpOwotKwkJCUVDX0tFWV9mcmVlKGVjKTsKLSsJCQljbmFtZSA9IE9C Sl9uaWQyc24obmlkKTsKLSsJCQlCSU9fcHJpbnRmKG91dCwgIkVDREgsICVzLCAlZCBiaXRzXG4i LAotKwkJCQkJCWNuYW1lLCBFVlBfUEtFWV9iaXRzKGtleSkpOwotKwkJCX0KLSsJCX0KLSsJRVZQ X1BLRVlfZnJlZShrZXkpOwotKwlyZXR1cm4gMTsKLSsJfQotKwkJCi0gCi0gdm9pZCBNU19DQUxM QkFDSyBtc2dfY2IoaW50IHdyaXRlX3AsIGludCB2ZXJzaW9uLCBpbnQgY29udGVudF90eXBlLCBj b25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4sIFNTTCAqc3NsLCB2b2lkICphcmcpCi0gCXsKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2FwcHMvc19jbGllbnQuYy5lcGhlbWVyYWwgb3BlbnNzbC0x LjAuMWovYXBwcy9zX2NsaWVudC5jCi0tLS0gb3BlbnNzbC0xLjAuMWovYXBwcy9zX2NsaWVudC5j LmVwaGVtZXJhbAkyMDE0LTEwLTE2IDEzOjMyOjMwLjg2MDgxOTU3OCArMDIwMAotKysrIG9wZW5z c2wtMS4wLjFqL2FwcHMvc19jbGllbnQuYwkyMDE0LTEwLTE2IDEzOjMyOjMwLjg2NTgxOTY5MSAr MDIwMAotQEAgLTIwNDQsNiArMjA0NCw4IEBAIHN0YXRpYyB2b2lkIHByaW50X3N0dWZmKEJJTyAq YmlvLCBTU0wgKnMKLSAJCQlCSU9fd3JpdGUoYmlvLCJcbiIsMSk7Ci0gCQkJfQotIAotKwkJc3Ns X3ByaW50X3RtcF9rZXkoYmlvLCBzKTsKLSsKLSAJCUJJT19wcmludGYoYmlvLCItLS1cblNTTCBo YW5kc2hha2UgaGFzIHJlYWQgJWxkIGJ5dGVzIGFuZCB3cml0dGVuICVsZCBieXRlc1xuIiwKLSAJ CQlCSU9fbnVtYmVyX3JlYWQoU1NMX2dldF9yYmlvKHMpKSwKLSAJCQlCSU9fbnVtYmVyX3dyaXR0 ZW4oU1NMX2dldF93YmlvKHMpKSk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xai9zc2wvc3NsLmgu ZXBoZW1lcmFsIG9wZW5zc2wtMS4wLjFqL3NzbC9zc2wuaAotLS0tIG9wZW5zc2wtMS4wLjFqL3Nz bC9zc2wuaC5lcGhlbWVyYWwJMjAxNC0xMC0xNiAxMzozMjozMC44NTE4MTkzNzUgKzAyMDAKLSsr KyBvcGVuc3NsLTEuMC4xai9zc2wvc3NsLmgJMjAxNC0xMC0xNiAxMzozMzoyMy4yMzMwMDE5MDMg KzAyMDAKLUBAIC0xNTg1LDYgKzE1ODUsNyBAQCBERUNMQVJFX1BFTV9ydyhTU0xfU0VTU0lPTiwg U1NMX1NFU1NJT04pCi0gI2RlZmluZSBTU0xfQ1RSTF9HRVRfRVhUUkFfQ0hBSU5fQ0VSVFMJCTgy Ci0gI2RlZmluZSBTU0xfQ1RSTF9DTEVBUl9FWFRSQV9DSEFJTl9DRVJUUwk4MwotIAotKyNkZWZp bmUgU1NMX0NUUkxfR0VUX1NFUlZFUl9UTVBfS0VZCQkxMDkKLSAjZGVmaW5lIFNTTF9DVFJMX0NI RUNLX1BST1RPX1ZFUlNJT04JCTExOQotIAotICNkZWZpbmUgRFRMU3YxX2dldF90aW1lb3V0KHNz bCwgYXJnKSBcCi1AQCAtMTYyOCw2ICsxNjI5LDkgQEAgREVDTEFSRV9QRU1fcncoU1NMX1NFU1NJ T04sIFNTTF9TRVNTSU9OKQotICNkZWZpbmUgU1NMX0NUWF9jbGVhcl9leHRyYV9jaGFpbl9jZXJ0 cyhjdHgpIFwKLSAJU1NMX0NUWF9jdHJsKGN0eCxTU0xfQ1RSTF9DTEVBUl9FWFRSQV9DSEFJTl9D RVJUUywwLE5VTEwpCi0gCi0rI2RlZmluZSBTU0xfZ2V0X3NlcnZlcl90bXBfa2V5KHMsIHBrKSBc Ci0rCVNTTF9jdHJsKHMsU1NMX0NUUkxfR0VUX1NFUlZFUl9UTVBfS0VZLDAscGspCi0rCi0gI2lm bmRlZiBPUEVOU1NMX05PX0JJTwotIEJJT19NRVRIT0QgKkJJT19mX3NzbCh2b2lkKTsKLSBCSU8g KkJJT19uZXdfc3NsKFNTTF9DVFggKmN0eCxpbnQgY2xpZW50KTsKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjFqL3NzbC9zM19saWIuYy5lcGhlbWVyYWwgb3BlbnNzbC0xLjAuMWovc3NsL3MzX2xpYi5j Ci0tLS0gb3BlbnNzbC0xLjAuMWovc3NsL3MzX2xpYi5jLmVwaGVtZXJhbAkyMDE0LTEwLTE2IDEz OjMyOjMwLjg2NjgxOTcxMyArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFqL3NzbC9zM19saWIuYwky MDE0LTEwLTE2IDEzOjM0OjA4LjkxODAzMzI2MiArMDIwMAotQEAgLTMzNTYsNiArMzM1Niw0NSBA QCBsb25nIHNzbDNfY3RybChTU0wgKnMsIGludCBjbWQsIGxvbmcgbGFyCi0gCi0gI2VuZGlmIC8q ICFPUEVOU1NMX05PX1RMU0VYVCAqLwotIAotKwljYXNlIFNTTF9DVFJMX0dFVF9TRVJWRVJfVE1Q X0tFWToKLSsJCWlmIChzLT5zZXJ2ZXIgfHwgIXMtPnNlc3Npb24gfHwgIXMtPnNlc3Npb24tPnNl c3NfY2VydCkKLSsJCQlyZXR1cm4gMDsKLSsJCWVsc2UKLSsJCQl7Ci0rCQkJU0VTU19DRVJUICpz YzsKLSsJCQlFVlBfUEtFWSAqcHRtcDsKLSsJCQlpbnQgcnYgPSAwOwotKwkJCXNjID0gcy0+c2Vz c2lvbi0+c2Vzc19jZXJ0OwotKyNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1JTQSkgJiYgIWRlZmlu ZWQoT1BFTlNTTF9OT19ESCkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19FQykKLSsJCQlpZiAoIXNj LT5wZWVyX3JzYV90bXAgJiYgIXNjLT5wZWVyX2RoX3RtcAotKwkJCQkJCQkmJiAhc2MtPnBlZXJf ZWNkaF90bXApCi0rCQkJCXJldHVybiAwOwotKyNlbmRpZgotKwkJCXB0bXAgPSBFVlBfUEtFWV9u ZXcoKTsKLSsJCQlpZiAoIXB0bXApCi0rCQkJCXJldHVybiAwOwotKwkJCWlmICgwKTsKLSsjaWZu ZGVmIE9QRU5TU0xfTk9fUlNBCi0rCQkJZWxzZSBpZiAoc2MtPnBlZXJfcnNhX3RtcCkKLSsJCQkJ cnYgPSBFVlBfUEtFWV9zZXQxX1JTQShwdG1wLCBzYy0+cGVlcl9yc2FfdG1wKTsKLSsjZW5kaWYK LSsjaWZuZGVmIE9QRU5TU0xfTk9fREgKLSsJCQllbHNlIGlmIChzYy0+cGVlcl9kaF90bXApCi0r CQkJCXJ2ID0gRVZQX1BLRVlfc2V0MV9ESChwdG1wLCBzYy0+cGVlcl9kaF90bXApOwotKyNlbmRp ZgotKyNpZm5kZWYgT1BFTlNTTF9OT19FQ0RICi0rCQkJZWxzZSBpZiAoc2MtPnBlZXJfZWNkaF90 bXApCi0rCQkJCXJ2ID0gRVZQX1BLRVlfc2V0MV9FQ19LRVkocHRtcCwgc2MtPnBlZXJfZWNkaF90 bXApOwotKyNlbmRpZgotKwkJCWlmIChydikKLSsJCQkJewotKwkJCQkqKEVWUF9QS0VZICoqKXBh cmcgPSBwdG1wOwotKwkJCQlyZXR1cm4gMTsKLSsJCQkJfQotKwkJCUVWUF9QS0VZX2ZyZWUocHRt cCk7Ci0rCQkJcmV0dXJuIDA7Ci0rCQkJfQotKwotIAljYXNlIFNTTF9DVFJMX0NIRUNLX1BST1RP X1ZFUlNJT046Ci0gCQkvKiBGb3IgbGlicmFyeS1pbnRlcm5hbCB1c2U7IGNoZWNrcyB0aGF0IHRo ZSBjdXJyZW50IHByb3RvY29sCi0gCQkgKiBpcyB0aGUgaGlnaGVzdCBlbmFibGVkIHZlcnNpb24g KGFjY29yZGluZyB0byBzLT5jdHgtPm1ldGhvZCwKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4x ai1maXBzLnBhdGNoIGIvb3BlbnNzbC0xLjAuMWotZmlwcy5wYXRjaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggZGZmNmFjYS4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4xai1maXBz LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjA0MDAgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWovYXBwcy9zcGVlZC5jLmZpcHMgb3BlbnNzbC0xLjAuMWovYXBwcy9zcGVlZC5jCi0t LS0gb3BlbnNzbC0xLjAuMWovYXBwcy9zcGVlZC5jLmZpcHMJMjAxNC0xMC0xNSAxNDo1MzozOS4w MDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xai9hcHBzL3NwZWVkLmMJMjAxNC0xMC0x NiAxMzoxOTozNS4wODQzMDYwODUgKzAyMDAKLUBAIC0xOTUsNyArMTk1LDYgQEAKLSAjaWZkZWYg T1BFTlNTTF9ET0lOR19NQUtFREVQRU5ECi0gI3VuZGVmIEFFU19zZXRfZW5jcnlwdF9rZXkKLSAj dW5kZWYgQUVTX3NldF9kZWNyeXB0X2tleQotLSN1bmRlZiBERVNfc2V0X2tleV91bmNoZWNrZWQK LSAjZW5kaWYKLSAjZGVmaW5lIEJGX3NldF9rZXkJcHJpdmF0ZV9CRl9zZXRfa2V5Ci0gI2RlZmlu ZSBDQVNUX3NldF9rZXkJcHJpdmF0ZV9DQVNUX3NldF9rZXkKLUBAIC0yMDMsNyArMjAyLDYgQEAK LSAjZGVmaW5lIFNFRURfc2V0X2tleQlwcml2YXRlX1NFRURfc2V0X2tleQotICNkZWZpbmUgUkMy X3NldF9rZXkJcHJpdmF0ZV9SQzJfc2V0X2tleQotICNkZWZpbmUgUkM0X3NldF9rZXkJcHJpdmF0 ZV9SQzRfc2V0X2tleQotLSNkZWZpbmUgREVTX3NldF9rZXlfdW5jaGVja2VkCXByaXZhdGVfREVT X3NldF9rZXlfdW5jaGVja2VkCi0gI2RlZmluZSBBRVNfc2V0X2VuY3J5cHRfa2V5CXByaXZhdGVf QUVTX3NldF9lbmNyeXB0X2tleQotICNkZWZpbmUgQUVTX3NldF9kZWNyeXB0X2tleQlwcml2YXRl X0FFU19zZXRfZGVjcnlwdF9rZXkKLSAjZGVmaW5lIENhbWVsbGlhX3NldF9rZXkJcHJpdmF0ZV9D YW1lbGxpYV9zZXRfa2V5Ci1AQCAtOTQxLDcgKzkzOSwxMiBAQCBpbnQgTUFJTihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCi0gI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotIAkJCWlmIChzdHJjbXAoKmFy Z3YsInJzYSIpID09IDApCi0gCQkJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCQkJaWYgKCFG SVBTX21vZGUoKSkKLSsjZW5kaWYKLSsJCQkJewotIAkJCXJzYV9kb2l0W1JfUlNBXzUxMl09MTsK LSsJCQkJfQotIAkJCXJzYV9kb2l0W1JfUlNBXzEwMjRdPTE7Ci0gCQkJcnNhX2RvaXRbUl9SU0Ff MjA0OF09MTsKLSAJCQlyc2FfZG9pdFtSX1JTQV80MDk2XT0xOwotQEAgLTk1MSw3ICs5NTQsMTIg QEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotICNpZm5kZWYgT1BFTlNTTF9OT19E U0EKLSAJCQlpZiAoc3RyY21wKCphcmd2LCJkc2EiKSA9PSAwKQotIAkJCXsKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rCQkJCWlmICghRklQU19tb2RlKCkpCi0rI2VuZGlmCi0rCQkJCXsKLSAJCQlk c2FfZG9pdFtSX0RTQV81MTJdPTE7Ci0rCQkJCX0KLSAJCQlkc2FfZG9pdFtSX0RTQV8xMDI0XT0x OwotIAkJCWRzYV9kb2l0W1JfRFNBXzIwNDhdPTE7Ci0gCQkJfQotQEAgLTExNjIsMTIgKzExNzAs MTggQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotIAkJewotIAkJZm9yIChpPTA7 IGk8QUxHT1JfTlVNOyBpKyspCi0gCQkJewotLQkJCWlmIChpICE9IERfRVZQKQotKwkJCWlmIChp ICE9IERfRVZQICYmCi0rCQkJICAgICghRklQU19tb2RlKCkgfHwgKGkgIT0gRF9XSElSTFBPT0wg JiYKLSsJCQkJaSAhPSBEX01EMiAmJiBpICE9IERfTUQ0ICYmCi0rCQkJCWkgIT0gRF9NRDUgJiYg aSAhPSBEX01EQzIgJiYKLSsJCQkJaSAhPSBEX1JNRDE2MCkpKQotIAkJCQlkb2l0W2ldPTE7Ci0g CQkJfQotIAkJZm9yIChpPTA7IGk8UlNBX05VTTsgaSsrKQotKwkJICAgIGlmICghRklQU19tb2Rl KCkgfHwgaSAhPSBSX1JTQV81MTIpCi0gCQkJcnNhX2RvaXRbaV09MTsKLSAJCWZvciAoaT0wOyBp PERTQV9OVU07IGkrKykKLSsJCSAgICBpZiAoIUZJUFNfbW9kZSgpIHx8IGkgIT0gUl9EU0FfNTEy KQotIAkJCWRzYV9kb2l0W2ldPTE7Ci0gI2lmbmRlZiBPUEVOU1NMX05PX0VDRFNBCi0gCQlmb3Ig KGk9MDsgaTxFQ19OVU07IGkrKykKLUBAIC0xMjI2LDMwICsxMjQwLDU0IEBAIGludCBNQUlOKGlu dCBhcmdjLCBjaGFyICoqYXJndikKLSAJQUVTX3NldF9lbmNyeXB0X2tleShrZXkzMiwyNTYsJmFl c19rczMpOwotICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19DQU1FTExJQQotKwlpZiAoZG9p dFtEX0NCQ18xMjhfQ01MXSB8fCBkb2l0W0RfQ0JDXzE5Ml9DTUxdIHx8IGRvaXRbRF9DQkNfMjU2 X0NNTF0pCi0rCSAgICB7Ci0gCUNhbWVsbGlhX3NldF9rZXkoa2V5MTYsMTI4LCZjYW1lbGxpYV9r czEpOwotIAlDYW1lbGxpYV9zZXRfa2V5KGNrZXkyNCwxOTIsJmNhbWVsbGlhX2tzMik7Ci0gCUNh bWVsbGlhX3NldF9rZXkoY2tleTMyLDI1NiwmY2FtZWxsaWFfa3MzKTsKLSsJICAgIH0KLSAjZW5k aWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fSURFQQotKwlpZiAoZG9pdFtEX0NCQ19JREVBXSkKLSsJ ICAgIHsKLSAJaWRlYV9zZXRfZW5jcnlwdF9rZXkoa2V5MTYsJmlkZWFfa3MpOwotKwkgICAgfQot ICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19TRUVECi0rCWlmIChkb2l0W0RfQ0JDX1NFRURd KQotKwkgICAgewotIAlTRUVEX3NldF9rZXkoa2V5MTYsJnNlZWRfa3MpOwotKwkgICAgfQotICNl bmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19SQzQKLSsJaWYgKGRvaXRbRF9SQzRdKQotKwkgICAg ewotIAlSQzRfc2V0X2tleSgmcmM0X2tzLDE2LGtleTE2KTsKLSsJICAgIH0KLSAjZW5kaWYKLSAj aWZuZGVmIE9QRU5TU0xfTk9fUkMyCi0rCWlmIChkb2l0W0RfQ0JDX1JDMl0pCi0rCSAgICB7Ci0g CVJDMl9zZXRfa2V5KCZyYzJfa3MsMTYsa2V5MTYsMTI4KTsKLSsJICAgIH0KLSAjZW5kaWYKLSAj aWZuZGVmIE9QRU5TU0xfTk9fUkM1Ci0rCWlmIChkb2l0W0RfQ0JDX1JDNV0pCi0rCSAgICB7Ci0g CVJDNV8zMl9zZXRfa2V5KCZyYzVfa3MsMTYsa2V5MTYsMTIpOwotKwkgICAgfQotICNlbmRpZgot ICNpZm5kZWYgT1BFTlNTTF9OT19CRgotKwlpZiAoZG9pdFtEX0NCQ19CRl0pCi0rCSAgICB7Ci0g CUJGX3NldF9rZXkoJmJmX2tzLDE2LGtleTE2KTsKLSsJICAgIH0KLSAjZW5kaWYKLSAjaWZuZGVm IE9QRU5TU0xfTk9fQ0FTVAotKwlpZiAoZG9pdFtEX0NCQ19DQVNUXSkKLSsJICAgIHsKLSAJQ0FT VF9zZXRfa2V5KCZjYXN0X2tzLDE2LGtleTE2KTsKLSsJICAgIH0KLSAjZW5kaWYKLSAjaWZuZGVm IE9QRU5TU0xfTk9fUlNBCi0gCW1lbXNldChyc2FfYywwLHNpemVvZihyc2FfYykpOwotQEAgLTE1 NjQsNiArMTYwMiw3IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAJCUhNQUNf Q1RYIGhjdHg7Ci0gCi0gCQlITUFDX0NUWF9pbml0KCZoY3R4KTsKLSsJCUhNQUNfQ1RYX3NldF9m bGFncygmaGN0eCwgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKLSAJCUhNQUNfSW5p dF9leCgmaGN0eCwodW5zaWduZWQgY2hhciAqKSJUaGlzIGlzIGEga2V5Li4uIiwKLSAJCQkxNixF VlBfbWQ1KCksIE5VTEwpOwotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovQ29uZmlndXJlLmZp cHMgb3BlbnNzbC0xLjAuMWovQ29uZmlndXJlCi0tLS0gb3BlbnNzbC0xLjAuMWovQ29uZmlndXJl LmZpcHMJMjAxNC0xMC0xNiAxMzoxOTozNS4wNTYzMDU0NTIgKzAyMDAKLSsrKyBvcGVuc3NsLTEu MC4xai9Db25maWd1cmUJMjAxNC0xMC0xNiAxMzoxOTozNS4wODQzMDYwODUgKzAyMDAKLUBAIC05 OTgsMTEgKzk5OCw2IEBAIGlmIChkZWZpbmVkKCRkaXNhYmxlZHsibWQ1In0pIHx8IGRlZmluZWQK LSAJJGRpc2FibGVkeyJzc2wyIn0gPSAiZm9yY2VkIjsKLSAJfQotIAotLWlmICgkZmlwcyAmJiAk Zmlwc2xpYmRpciBlcSAiIikKLS0JewotLQkkZmlwc2xpYmRpciA9ICRmaXBzZGlyIC4gIi9saWIv IjsKLS0JfQotLQotICMgUlNBWCBFTkdJTkUgc2V0cyBkZWZhdWx0IG5vbi1GSVBTIFJTQSBtZXRo b2QuCi0gaWYgKCRmaXBzKQotIAl7Ci1AQCAtMTQ3Nyw3ICsxNDcyLDYgQEAgJGNmbGFncy49IiAt RE9QRU5TU0xfQk5fQVNNX0dGMm0iIGlmICgkYgotIGlmICgkZmlwcykKLSAJewotIAkkb3BlbnNz bF9vdGhlcl9kZWZpbmVzLj0iI2RlZmluZSBPUEVOU1NMX0ZJUFNcbiI7Ci0tCSRjZmxhZ3MgLj0g IiAtSVwkKEZJUFNESVIpL2luY2x1ZGUiOwotIAl9Ci0gCi0gJGNwdWlkX29iaj0ibWVtX2Nsci5v Igl1bmxlc3MgKCRjcHVpZF9vYmogPX4gL1wubyQvKTsKLUBAIC0xNjY0LDkgKzE2NTgsMTIgQEAg d2hpbGUgKDxJTj4pCi0gCi0gCXMvXkZJUFNESVI9LiovRklQU0RJUj0kZmlwc2Rpci87Ci0gCXMv XkZJUFNMSUJESVI9LiovRklQU0xJQkRJUj0kZmlwc2xpYmRpci87Ci0tCXMvXkZJUFNDQU5MSUI9 LiovRklQU0NBTkxJQj1saWJjcnlwdG8vIGlmICRmaXBzOwotIAlzL15CQVNFQUREUj0uKi9CQVNF QUREUj0kYmFzZWFkZHIvOwotIAotKwlpZiAoJGZpcHMpCi0rCQl7Ci0rCQlzL15GSVBTPS4qL0ZJ UFM9eWVzLzsKLSsJCX0KLSAJcy9eU0hMSUJfVEFSR0VUPS4qL1NITElCX1RBUkdFVD0kc2hhcmVk X3RhcmdldC87Ci0gCXMvXlNITElCX01BUks9LiovU0hMSUJfTUFSSz0kc2hhcmVkX21hcmsvOwot IAlzL15TSEFSRURfTElCUz0uKi9TSEFSRURfTElCUz1cJChTSEFSRURfQ1JZUFRPKSBcJChTSEFS RURfU1NMKS8gaWYgKCEkbm9fc2hhcmVkKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0 by9hZXMvYWVzX21pc2MuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9hZXMvYWVzX21pc2Mu YwotLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9hZXMvYWVzX21pc2MuYy5maXBzCTIwMTQtMTAt MTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2Fl cy9hZXNfbWlzYy5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDg1MzA2MTA3ICswMjAwCi1AQCAtNjks MTcgKzY5LDExIEBAIGNvbnN0IGNoYXIgKkFFU19vcHRpb25zKHZvaWQpIHsKLSBpbnQgQUVTX3Nl dF9lbmNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0 cywKLSAJCQlBRVNfS0VZICprZXkpCi0gCXsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWZpcHNf Y2lwaGVyX2Fib3J0KEFFUyk7Ci0tI2VuZGlmCi0gCXJldHVybiBwcml2YXRlX0FFU19zZXRfZW5j cnlwdF9rZXkodXNlcktleSwgYml0cywga2V5KTsKLSAJfQotIAotIGludCBBRVNfc2V0X2RlY3J5 cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAotIAkJ CUFFU19LRVkgKmtleSkKLSAJewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JZmlwc19jaXBoZXJf YWJvcnQoQUVTKTsKLS0jZW5kaWYKLSAJcmV0dXJuIHByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tl eSh1c2VyS2V5LCBiaXRzLCBrZXkpOwotIAl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlw dG8vY21hYy9jbWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vY21hYy9jbWFjLmMKLS0t LSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vY21hYy9jbWFjLmMuZmlwcwkyMDE0LTEwLTE1IDE0OjUz OjM5LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9jbWFjL2NtYWMu YwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA4NTMwNjEwNyArMDIwMAotQEAgLTEwNywxMyArMTA3LDYg QEAgQ01BQ19DVFggKkNNQUNfQ1RYX25ldyh2b2lkKQotIAotIHZvaWQgQ01BQ19DVFhfY2xlYW51 cChDTUFDX0NUWCAqY3R4KQotIAl7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQlpZiAoRklQU19t b2RlKCkgJiYgIWN0eC0+Y2N0eC5lbmdpbmUpCi0tCQl7Ci0tCQlGSVBTX2NtYWNfY3R4X2NsZWFu dXAoY3R4KTsKLS0JCXJldHVybjsKLS0JCX0KLS0jZW5kaWYKLSAJRVZQX0NJUEhFUl9DVFhfY2xl YW51cCgmY3R4LT5jY3R4KTsKLSAJT1BFTlNTTF9jbGVhbnNlKGN0eC0+dGJsLCBFVlBfTUFYX0JM T0NLX0xFTkdUSCk7Ci0gCU9QRU5TU0xfY2xlYW5zZShjdHgtPmsxLCBFVlBfTUFYX0JMT0NLX0xF TkdUSCk7Ci1AQCAtMTY0LDExICsxNTcsNiBAQCBpbnQgQ01BQ19Jbml0KENNQUNfQ1RYICpjdHgs IGNvbnN0IHZvaWQKLSAJCQlFVlBlcnIoRVZQX0ZfQ01BQ19JTklULCBFVlBfUl9ESVNBQkxFRF9G T1JfRklQUyk7Ci0gCQkJcmV0dXJuIDA7Ci0gCQkJfQotLQkJLyogT3RoZXIgYWxnb3JpdGhtIGJs b2NraW5nIHdpbGwgYmUgZG9uZSBpbiBGSVBTX2NtYWNfaW5pdCwKLS0JCSAqIHZpYSBGSVBTX2Np cGhlcmluaXQoKS4KLS0JCSAqLwotLQkJaWYgKCFpbXBsICYmICFjdHgtPmNjdHguZW5naW5lKQot LQkJCXJldHVybiBGSVBTX2NtYWNfaW5pdChjdHgsIGtleSwga2V5bGVuLCBjaXBoZXIsIE5VTEwp OwotIAkJfQotICNlbmRpZgotIAkvKiBBbGwgemVyb3MgbWVhbnMgcmVzdGFydCAqLwotQEAgLTIx NiwxMCArMjA0LDYgQEAgaW50IENNQUNfVXBkYXRlKENNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaQot IAl7Ci0gCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgPSBpbjsKLSAJc2l6ZV90IGJsOwotLSNp ZmRlZiBPUEVOU1NMX0ZJUFMKLS0JaWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmNjdHguZW5naW5l KQotLQkJcmV0dXJuIEZJUFNfY21hY191cGRhdGUoY3R4LCBpbiwgZGxlbik7Ci0tI2VuZGlmCi0g CWlmIChjdHgtPm5sYXN0X2Jsb2NrID09IC0xKQotIAkJcmV0dXJuIDA7Ci0gCWlmIChkbGVuID09 IDApCi1AQCAtMjYxLDEwICsyNDUsNiBAQCBpbnQgQ01BQ19VcGRhdGUoQ01BQ19DVFggKmN0eCwg Y29uc3Qgdm9pCi0gaW50IENNQUNfRmluYWwoQ01BQ19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAq b3V0LCBzaXplX3QgKnBvdXRsZW4pCi0gCXsKLSAJaW50IGksIGJsLCBsYjsKLS0jaWZkZWYgT1BF TlNTTF9GSVBTCi0tCWlmIChGSVBTX21vZGUoKSAmJiAhY3R4LT5jY3R4LmVuZ2luZSkKLS0JCXJl dHVybiBGSVBTX2NtYWNfZmluYWwoY3R4LCBvdXQsIHBvdXRsZW4pOwotLSNlbmRpZgotIAlpZiAo Y3R4LT5ubGFzdF9ibG9jayA9PSAtMSkKLSAJCXJldHVybiAwOwotIAlibCA9IEVWUF9DSVBIRVJf Q1RYX2Jsb2NrX3NpemUoJmN0eC0+Y2N0eCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlw dG8vY3J5cHRvLmguZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vY3J5cHRvLmgKLS0tLSBvcGVu c3NsLTEuMC4xai9jcnlwdG8vY3J5cHRvLmguZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM0LjkxODMw MjMzNyArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9jcnlwdG8uaAkyMDE0LTEwLTE2 IDEzOjE5OjM1LjA4NTMwNjEwNyArMDIwMAotQEAgLTU1MywyNCArNTUzLDI5IEBAIGludCBGSVBT X21vZGVfc2V0KGludCByKTsKLSB2b2lkIE9QRU5TU0xfaW5pdCh2b2lkKTsKLSAKLSAjZGVmaW5l IGZpcHNfbWRfaW5pdChhbGcpIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBhbGcpCi0rI2RlZmluZSBu b25maXBzX21kX2luaXQoYWxnKSBub25maXBzX21kX2luaXRfY3R4KGFsZywgYWxnKQotKyNkZWZp bmUgZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBcCi0rCWludCBhbGcjI19Jbml0KGN4IyNfQ1RY ICpjKQotIAotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0jZGVmaW5lIGZpcHNfbWRfaW5pdF9jdHgo YWxnLCBjeCkgXAotKyNkZWZpbmUgbm9uZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBcCi0gCWlu dCBhbGcjI19Jbml0KGN4IyNfQ1RYICpjKSBcCi0gCXsgXAotIAlpZiAoRklQU19tb2RlKCkpIE9w ZW5TU0xEaWUoX19GSUxFX18sIF9fTElORV9fLCBcCi0tCQkiTG93IGxldmVsIEFQSSBjYWxsIHRv IGRpZ2VzdCAiICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQUyBtb2RlISIpOyBcCi0rCQkiRGlnZXN0 ICIgI2FsZyAiIGZvcmJpZGRlbiBpbiBGSVBTIG1vZGUhIik7IFwKLSAJcmV0dXJuIHByaXZhdGVf IyNhbGcjI19Jbml0KGMpOyBcCi0gCX0gXAotIAlpbnQgcHJpdmF0ZV8jI2FsZyMjX0luaXQoY3gj I19DVFggKmMpCi0gCi0gI2RlZmluZSBmaXBzX2NpcGhlcl9hYm9ydChhbGcpIFwKLSAJaWYgKEZJ UFNfbW9kZSgpKSBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAotLQkJIkxvdyBsZXZl bCBBUEkgY2FsbCB0byBjaXBoZXIgIiAjYWxnICIgZm9yYmlkZGVuIGluIEZJUFMgbW9kZSEiKQot KwkJIkNpcGhlciAiICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQUyBtb2RlISIpCi0rCi0rLyogZGll IGlmIEZJUFMgc2VsZnRlc3QgZmFpbGVkICovCi0rdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKHZv aWQpOwotIAotICNlbHNlCi0tI2RlZmluZSBmaXBzX21kX2luaXRfY3R4KGFsZywgY3gpIFwKLS0J aW50IGFsZyMjX0luaXQoY3gjI19DVFggKmMpCi0rI2RlZmluZSBub25maXBzX21kX2luaXRfY3R4 KGFsZywgY3gpIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkKLSAjZGVmaW5lIGZpcHNfY2lwaGVy X2Fib3J0KGFsZykgd2hpbGUoMCkKLSAjZW5kaWYKLSAKLUBAIC01ODcsNiArNTkyLDkgQEAgaW50 IENSWVBUT19tZW1jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3QgdgotICAqLwotIHZvaWQgRVJSX2xv YWRfQ1JZUFRPX3N0cmluZ3Modm9pZCk7Ci0gCi0rI2RlZmluZSBPUEVOU1NMX0hBVkVfSU5JVAkx Ci0rdm9pZCBPUEVOU1NMX2luaXRfbGlicmFyeSh2b2lkKTsKLSsKLSAvKiBFcnJvciBjb2RlcyBm b3IgdGhlIENSWVBUTyBmdW5jdGlvbnMuICovCi0gCi0gLyogRnVuY3Rpb24gY29kZXMuICovCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZGVzL2Rlcy5oLmZpcHMgb3BlbnNzbC0xLjAu MWovY3J5cHRvL2Rlcy9kZXMuaAotLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kZXMvZGVzLmgu ZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM0Ljk2NzMwMzQ0MyArMDIwMAotKysrIG9wZW5zc2wtMS4w LjFqL2NyeXB0by9kZXMvZGVzLmgJMjAxNC0xMC0xNiAxMzoxOTozNS4wODUzMDYxMDcgKzAyMDAK LUBAIC0yMjQsOSArMjI0LDYgQEAgaW50IERFU19zZXRfa2V5KGNvbnN0X0RFU19jYmxvY2sgKmtl eSxERQotIGludCBERVNfa2V5X3NjaGVkKGNvbnN0X0RFU19jYmxvY2sgKmtleSxERVNfa2V5X3Nj aGVkdWxlICpzY2hlZHVsZSk7Ci0gaW50IERFU19zZXRfa2V5X2NoZWNrZWQoY29uc3RfREVTX2Ni bG9jayAqa2V5LERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKLSB2b2lkIERFU19zZXRfa2V5 X3VuY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1 bGUpOwotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS12b2lkIHByaXZhdGVfREVTX3NldF9rZXlfdW5j aGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSxERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7 Ci0tI2VuZGlmCi0gdm9pZCBERVNfc3RyaW5nX3RvX2tleShjb25zdCBjaGFyICpzdHIsREVTX2Ni bG9jayAqa2V5KTsKLSB2b2lkIERFU19zdHJpbmdfdG9fMmtleXMoY29uc3QgY2hhciAqc3RyLERF U19jYmxvY2sgKmtleTEsREVTX2NibG9jayAqa2V5Mik7Ci0gdm9pZCBERVNfY2ZiNjRfZW5jcnlw dChjb25zdCB1bnNpZ25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsbG9uZyBsZW5ndGgs Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZGVzL3NldF9rZXkuYy5maXBzIG9wZW5z c2wtMS4wLjFqL2NyeXB0by9kZXMvc2V0X2tleS5jCi0tLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRv L2Rlcy9zZXRfa2V5LmMuZmlwcwkyMDE0LTEwLTE1IDE0OjUzOjM5LjAwMDAwMDAwMCArMDIwMAot KysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kZXMvc2V0X2tleS5jCTIwMTQtMTAtMTYgMTM6MTk6 MzUuMDg1MzA2MTA3ICswMjAwCi1AQCAtMzM2LDEzICszMzYsNiBAQCBpbnQgREVTX3NldF9rZXlf Y2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrCi0gCX0KLSAKLSB2b2lkIERFU19zZXRfa2V5X3VuY2hl Y2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKQot LSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JewotLQlmaXBzX2NpcGhlcl9hYm9ydChERVMpOwotLQlw cml2YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tlZChrZXksIHNjaGVkdWxlKTsKLS0JfQotLXZvaWQg cHJpdmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LCBERVNf a2V5X3NjaGVkdWxlICpzY2hlZHVsZSkKLS0jZW5kaWYKLSAJewotIAlzdGF0aWMgY29uc3QgaW50 IHNoaWZ0czJbMTZdPXswLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwfTsKLSAJcmVnaXN0 ZXIgREVTX0xPTkcgYyxkLHQscyx0MjsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9k aC9kaF9nZW4uYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kaC9kaF9nZW4uYwotLS0tIG9w ZW5zc2wtMS4wLjFqL2NyeXB0by9kaC9kaF9nZW4uYy5maXBzCTIwMTQtMTAtMTUgMTQ6NTM6Mzku MDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2RoL2RoX2dlbi5jCTIw MTQtMTAtMTYgMTM6MTk6MzUuMDg1MzA2MTA3ICswMjAwCi1AQCAtODQsMTEgKzg0LDYgQEAgaW50 IERIX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoREggKnJldCwgaQotICNlbmRpZgotIAlpZihyZXQt Pm1ldGgtPmdlbmVyYXRlX3BhcmFtcykKLSAJCXJldHVybiByZXQtPm1ldGgtPmdlbmVyYXRlX3Bh cmFtcyhyZXQsIHByaW1lX2xlbiwgZ2VuZXJhdG9yLCBjYik7Ci0tI2lmZGVmIE9QRU5TU0xfRklQ UwotLQlpZiAoRklQU19tb2RlKCkpCi0tCQlyZXR1cm4gRklQU19kaF9nZW5lcmF0ZV9wYXJhbWV0 ZXJzX2V4KHJldCwgcHJpbWVfbGVuLAotLQkJCQkJCQlnZW5lcmF0b3IsIGNiKTsKLS0jZW5kaWYK LSAJcmV0dXJuIGRoX2J1aWx0aW5fZ2VucGFyYW1zKHJldCwgcHJpbWVfbGVuLCBnZW5lcmF0b3Is IGNiKTsKLSAJfQotIAotQEAgLTEyMyw2ICsxMTgsMjAgQEAgc3RhdGljIGludCBkaF9idWlsdGlu X2dlbnBhcmFtcyhESCAqcmV0LAotIAlpbnQgZyxvaz0gLTE7Ci0gCUJOX0NUWCAqY3R4PU5VTEw7 Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQot KwkJewotKwkJRklQU2VycihGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMsRklQU19SX0ZJUFNf U0VMRlRFU1RfRkFJTEVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwotKwlpZiAoRklQU19tb2Rl KCkgJiYgKHByaW1lX2xlbiA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKLSsJ CXsKLSsJCURIZXJyKERIX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMsIERIX1JfS0VZX1NJWkVfVE9P X1NNQUxMKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKyNlbmRpZgotKwotIAljdHg9Qk5fQ1RYX25l dygpOwotIAlpZiAoY3R4ID09IE5VTEwpIGdvdG8gZXJyOwotIAlCTl9DVFhfc3RhcnQoY3R4KTsK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kaC9kaC5oLmZpcHMgb3BlbnNzbC0xLjAu MWovY3J5cHRvL2RoL2RoLmgKLS0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZGgvZGguaC5maXBz CTIwMTQtMTAtMTYgMTM6MTk6MzQuODg3MzAxNjM3ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWov Y3J5cHRvL2RoL2RoLmgJMjAxNC0xMC0xNiAxMzoxOTozNS4wODYzMDYxMzAgKzAyMDAKLUBAIC03 Nyw2ICs3Nyw4IEBACi0gIyBkZWZpbmUgT1BFTlNTTF9ESF9NQVhfTU9EVUxVU19CSVRTCTEwMDAw Ci0gI2VuZGlmCi0gCi0rI2RlZmluZSBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAx MDI0Ci0rCi0gI2RlZmluZSBESF9GTEFHX0NBQ0hFX01PTlRfUCAgICAgMHgwMQotICNkZWZpbmUg REhfRkxBR19OT19FWFBfQ09OU1RUSU1FIDB4MDIgLyogbmV3IHdpdGggMC45LjdoOyB0aGUgYnVp bHQtaW4gREgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGltcGxl bWVudGF0aW9uIG5vdyB1c2VzIGNvbnN0YW50IHRpbWUKLUBAIC0yMTAsNiArMjEyLDcgQEAgaW50 CURIX2NoZWNrKGNvbnN0IERIICpkaCxpbnQgKmNvZGVzKTsKLSBpbnQJREhfY2hlY2tfcHViX2tl eShjb25zdCBESCAqZGgsY29uc3QgQklHTlVNICpwdWJfa2V5LCBpbnQgKmNvZGVzKTsKLSBpbnQJ REhfZ2VuZXJhdGVfa2V5KERIICpkaCk7Ci0gaW50CURIX2NvbXB1dGVfa2V5KHVuc2lnbmVkIGNo YXIgKmtleSxjb25zdCBCSUdOVU0gKnB1Yl9rZXksREggKmRoKTsKLStpbnQJREhfY29tcHV0ZV9r ZXlfcGFkZGVkKHVuc2lnbmVkIGNoYXIgKmtleSxjb25zdCBCSUdOVU0gKnB1Yl9rZXksREggKmRo KTsKLSBESCAqCWQyaV9ESHBhcmFtcyhESCAqKmEsY29uc3QgdW5zaWduZWQgY2hhciAqKnBwLCBs b25nIGxlbmd0aCk7Ci0gaW50CWkyZF9ESHBhcmFtcyhjb25zdCBESCAqYSx1bnNpZ25lZCBjaGFy ICoqcHApOwotICNpZm5kZWYgT1BFTlNTTF9OT19GUF9BUEkKLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjFqL2NyeXB0by9kaC9kaF9rZXkuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kaC9kaF9r ZXkuYwotLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kaC9kaF9rZXkuYy5maXBzCTIwMTQtMTAt MTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2Ro L2RoX2tleS5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDg2MzA2MTMwICswMjAwCi1AQCAtNjEsNiAr NjEsOSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmFu ZC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAKLSBzdGF0aWMgaW50IGdlbmVyYXRl X2tleShESCAqZGgpOwotIHN0YXRpYyBpbnQgY29tcHV0ZV9rZXkodW5zaWduZWQgY2hhciAqa2V5 LCBjb25zdCBCSUdOVU0gKnB1Yl9rZXksIERIICpkaCk7Ci1AQCAtOTcsNiArMTAwLDIxIEBAIGlu dCBESF9jb21wdXRlX2tleSh1bnNpZ25lZCBjaGFyICprZXksIGMKLSAJcmV0dXJuIGRoLT5tZXRo LT5jb21wdXRlX2tleShrZXksIHB1Yl9rZXksIGRoKTsKLSAJfQotIAotK2ludCBESF9jb21wdXRl X2tleV9wYWRkZWQodW5zaWduZWQgY2hhciAqa2V5LCBjb25zdCBCSUdOVU0gKnB1Yl9rZXksIERI ICpkaCkKLSsJewotKwlpbnQgcnYsIHBhZDsKLSsJcnYgPSBESF9jb21wdXRlX2tleShrZXksIHB1 Yl9rZXksIGRoKTsKLSsJaWYgKHJ2IDw9IDApCi0rCQlyZXR1cm4gcnY7Ci0rCXBhZCA9IEJOX251 bV9ieXRlcyhkaC0+cCkgLSBydjsKLSsJaWYgKHBhZCA+IDApCi0rCQl7Ci0rCQltZW1tb3ZlKGtl eSArIHBhZCwga2V5LCBydik7Ci0rCQltZW1zZXQoa2V5LCAwLCBwYWQpOwotKwkJfQotKwlyZXR1 cm4gcnYgKyBwYWQ7Ci0rCX0KLSsKLSBzdGF0aWMgREhfTUVUSE9EIGRoX29zc2wgPSB7Ci0gIk9w ZW5TU0wgREggTWV0aG9kIiwKLSBnZW5lcmF0ZV9rZXksCi1AQCAtMTA0LDcgKzEyMiw3IEBAIGNv bXB1dGVfa2V5LAotIGRoX2JuX21vZF9leHAsCi0gZGhfaW5pdCwKLSBkaF9maW5pc2gsCi0tMCwK LStESF9GTEFHX0ZJUFNfTUVUSE9ELAotIE5VTEwsCi0gTlVMTAotIH07Ci1AQCAtMTIzLDYgKzE0 MSwxNCBAQCBzdGF0aWMgaW50IGdlbmVyYXRlX2tleShESCAqZGgpCi0gCUJOX01PTlRfQ1RYICpt b250PU5VTEw7Ci0gCUJJR05VTSAqcHViX2tleT1OVUxMLCpwcml2X2tleT1OVUxMOwotIAotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0cyhkaC0+ cCkgPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlESGVycihE SF9GX0dFTkVSQVRFX0tFWSwgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJcmV0dXJuIDA7 Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWN0eCA9IEJOX0NUWF9uZXcoKTsKLSAJaWYgKGN0eCA9PSBO VUxMKSBnb3RvIGVycjsKLSAKLUBAIC0yMTMsNiArMjM5LDEzIEBAIHN0YXRpYyBpbnQgY29tcHV0 ZV9rZXkodW5zaWduZWQgY2hhciAqa2UKLSAJCURIZXJyKERIX0ZfQ09NUFVURV9LRVksREhfUl9N T0RVTFVTX1RPT19MQVJHRSk7Ci0gCQlnb3RvIGVycjsKLSAJCX0KLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZGgtPnApIDwgT1BFTlNTTF9E SF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJREhlcnIoREhfRl9DT01QVVRFX0tF WSwgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlm Ci0gCi0gCWN0eCA9IEJOX0NUWF9uZXcoKTsKLSAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVycjsK LUBAIC0yODAsNiArMzEzLDkgQEAgc3RhdGljIGludCBkaF9ibl9tb2RfZXhwKGNvbnN0IERIICpk aCwgQgotIAotIHN0YXRpYyBpbnQgZGhfaW5pdChESCAqZGgpCi0gCXsKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJZGgtPmZsYWdzIHw9 IERIX0ZMQUdfQ0FDSEVfTU9OVF9QOwotIAlyZXR1cm4oMSk7Ci0gCX0KLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjFqL2NyeXB0by9kaC9kaF9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9k aC9kaF9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kaC9kaF9saWIuYy5maXBzCTIw MTQtMTAtMTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5 cHRvL2RoL2RoX2xpYi5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDg2MzA2MTMwICswMjAwCi1AQCAt ODEsMTQgKzgxLDcgQEAgY29uc3QgREhfTUVUSE9EICpESF9nZXRfZGVmYXVsdF9tZXRob2Qodgot IAl7Ci0gCWlmKCFkZWZhdWx0X0RIX21ldGhvZCkKLSAJCXsKLS0jaWZkZWYgT1BFTlNTTF9GSVBT Ci0tCQlpZiAoRklQU19tb2RlKCkpCi0tCQkJcmV0dXJuIEZJUFNfZGhfb3BlbnNzbCgpOwotLQkJ ZWxzZQotLQkJCXJldHVybiBESF9PcGVuU1NMKCk7Ci0tI2Vsc2UKLSAJCWRlZmF1bHRfREhfbWV0 aG9kID0gREhfT3BlblNTTCgpOwotLSNlbmRpZgotIAkJfQotIAlyZXR1cm4gZGVmYXVsdF9ESF9t ZXRob2Q7Ci0gCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kc2EvZHNhX2Vyci5j LmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2RzYS9kc2FfZXJyLmMKLS0tLSBvcGVuc3NsLTEu MC4xai9jcnlwdG8vZHNhL2RzYV9lcnIuYy5maXBzCTIwMTQtMTAtMTUgMTQ6NTM6MzkuMDAwMDAw MDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2RzYS9kc2FfZXJyLmMJMjAxNC0x MC0xNiAxMzoxOTozNS4wODYzMDYxMzAgKzAyMDAKLUBAIC03NCw2ICs3NCw4IEBAIHN0YXRpYyBF UlJfU1RSSU5HX0RBVEEgRFNBX3N0cl9mdW5jdHNbXT0KLSB7RVJSX0ZVTkMoRFNBX0ZfRE9fRFNB X1BSSU5UKSwJIkRPX0RTQV9QUklOVCJ9LAotIHtFUlJfRlVOQyhEU0FfRl9EU0FQQVJBTVNfUFJJ TlQpLAkiRFNBcGFyYW1zX3ByaW50In0sCi0ge0VSUl9GVU5DKERTQV9GX0RTQVBBUkFNU19QUklO VF9GUCksCSJEU0FwYXJhbXNfcHJpbnRfZnAifSwKLSt7RVJSX0ZVTkMoRFNBX0ZfRFNBX0JVSUxU SU5fS0VZR0VOKSwJImRzYV9idWlsdGluX2tleWdlbiJ9LAotK3tFUlJfRlVOQyhEU0FfRl9EU0Ff QlVJTFRJTl9QQVJBTUdFTiksCSJkc2FfYnVpbHRpbl9wYXJhbWdlbiJ9LAotIHtFUlJfRlVOQyhE U0FfRl9EU0FfRE9fU0lHTiksCSJEU0FfZG9fc2lnbiJ9LAotIHtFUlJfRlVOQyhEU0FfRl9EU0Ff RE9fVkVSSUZZKSwJIkRTQV9kb192ZXJpZnkifSwKLSB7RVJSX0ZVTkMoRFNBX0ZfRFNBX0dFTkVS QVRFX0tFWSksCSJEU0FfZ2VuZXJhdGVfa2V5In0sCi1AQCAtMTA2LDYgKzEwOCw4IEBAIHN0YXRp YyBFUlJfU1RSSU5HX0RBVEEgRFNBX3N0cl9yZWFzb25zW10KLSB7RVJSX1JFQVNPTihEU0FfUl9E QVRBX1RPT19MQVJHRV9GT1JfS0VZX1NJWkUpLCJkYXRhIHRvbyBsYXJnZSBmb3Iga2V5IHNpemUi fSwKLSB7RVJSX1JFQVNPTihEU0FfUl9ERUNPREVfRVJST1IpICAgICAgICAgICwiZGVjb2RlIGVy cm9yIn0sCi0ge0VSUl9SRUFTT04oRFNBX1JfSU5WQUxJRF9ESUdFU1RfVFlQRSkgICAsImludmFs aWQgZGlnZXN0IHR5cGUifSwKLSt7RVJSX1JFQVNPTihEU0FfUl9LRVlfU0laRV9JTlZBTElEKSAg ICAgICwia2V5IHNpemUgaW52YWxpZCJ9LAotK3tFUlJfUkVBU09OKERTQV9SX0tFWV9TSVpFX1RP T19TTUFMTCkgICAgLCJrZXkgc2l6ZSB0b28gc21hbGwifSwKLSB7RVJSX1JFQVNPTihEU0FfUl9N SVNTSU5HX1BBUkFNRVRFUlMpICAgICwibWlzc2luZyBwYXJhbWV0ZXJzIn0sCi0ge0VSUl9SRUFT T04oRFNBX1JfTU9EVUxVU19UT09fTEFSR0UpICAgICAsIm1vZHVsdXMgdG9vIGxhcmdlIn0sCi0g e0VSUl9SRUFTT04oRFNBX1JfTkVFRF9ORVdfU0VUVVBfVkFMVUVTKSAsIm5lZWQgbmV3IHNldHVw IHZhbHVlcyJ9LAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2RzYS9kc2FfZ2VuLmMu ZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZHNhL2RzYV9nZW4uYwotLS0tIG9wZW5zc2wtMS4w LjFqL2NyeXB0by9kc2EvZHNhX2dlbi5jLmZpcHMJMjAxNC0xMC0xNSAxNDo1MzozOS4wMDAwMDAw MDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZHNhL2RzYV9nZW4uYwkyMDE0LTEw LTE2IDEzOjE5OjM1LjA4NjMwNjEzMCArMDIwMAotQEAgLTg1LDYgKzg1LDE0IEBACi0gI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgotICNlbmRpZgotIAotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0r c3RhdGljIGludCBGSVBTX2RzYV9nZW5lcmF0ZV9wcShCTl9DVFggKmN0eCwgc2l6ZV90IGJpdHMs IHNpemVfdCBxYml0cywKLSsJCWNvbnN0IEVWUF9NRCAqZXZwbWQsIHVuc2lnbmVkIGNoYXIgKnNl ZWQsIGludCBzZWVkX2xlbiwKLSsJCUJJR05VTSAqKnBfcmV0LCBCSUdOVU0gKipxX3JldCwgaW50 ICpjb3VudGVyX3JldCwgQk5fR0VOQ0IgKmNiKTsKLStzdGF0aWMgaW50IEZJUFNfZHNhX2dlbmVy YXRlX2coQk5fQ1RYICpjdHgsIEJJR05VTSAqcCwgQklHTlVNICpxLAotKwkJQklHTlVNICoqZ19y ZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpOwotKyNlbmRpZgotKwotIGlu dCBEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChEU0EgKnJldCwgaW50IGJpdHMsCi0gCQljb25z dCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBpbnQgc2VlZF9sZW4sCi0gCQlpbnQgKmNvdW50ZXJf cmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKQotQEAgLTEwMCwxNCArMTA4 LDYgQEAgaW50IERTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KERTQSAqcmV0LAotIAlpZihyZXQt Pm1ldGgtPmRzYV9wYXJhbWdlbikKLSAJCXJldHVybiByZXQtPm1ldGgtPmRzYV9wYXJhbWdlbihy ZXQsIGJpdHMsIHNlZWRfaW4sIHNlZWRfbGVuLAotIAkJCQljb3VudGVyX3JldCwgaF9yZXQsIGNi KTsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWVsc2UgaWYgKEZJUFNfbW9kZSgpKQotLQkJewot LQkJcmV0dXJuIEZJUFNfZHNhX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgocmV0LCBiaXRzLCAKLS0J CQkJCQkJc2VlZF9pbiwgc2VlZF9sZW4sCi0tCQkJCQkJCWNvdW50ZXJfcmV0LCBoX3JldCwgY2Ip OwotLQkJfQotLSNlbmRpZgotIAllbHNlCi0gCQl7Ci0gCQljb25zdCBFVlBfTUQgKmV2cG1kOwot QEAgLTEyNSwyNyArMTI1LDExOSBAQCBpbnQgRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoRFNB ICpyZXQsCi0gCQkJfQotIAotIAkJcmV0dXJuIGRzYV9idWlsdGluX3BhcmFtZ2VuKHJldCwgYml0 cywgcWJpdHMsIGV2cG1kLAotLQkJCXNlZWRfaW4sIHNlZWRfbGVuLCBOVUxMLCBjb3VudGVyX3Jl dCwgaF9yZXQsIGNiKTsKLSsJCQkJc2VlZF9pbiwgc2VlZF9sZW4sIGNvdW50ZXJfcmV0LCBoX3Jl dCwgY2IpOwotIAkJfQotIAl9Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK2ludCBGSVBTX2Rz YV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAot Kwljb25zdCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBzaXpl X3Qgc2VlZF9sZW4sCi0rCWludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBC Tl9HRU5DQiAqY2IpCi0rCXsKLSsJcmV0dXJuIGRzYV9idWlsdGluX3BhcmFtZ2VuKHJldCwgYml0 cywgcWJpdHMsCi0rCQlldnBtZCwgc2VlZF9pbiwgc2VlZF9sZW4sCi0rCQljb3VudGVyX3JldCwg aF9yZXQsIGNiKTsKLSsJfQotKyNlbmRpZgotKwotIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihE U0EgKnJldCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKLSAJY29uc3QgRVZQX01EICpldnBt ZCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwgc2l6ZV90IHNlZWRfbGVuLAotLQl1bnNp Z25lZCBjaGFyICpzZWVkX291dCwKLSAJaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAq aF9yZXQsIEJOX0dFTkNCICpjYikKLSAJewotIAlpbnQgb2s9MDsKLSAJdW5zaWduZWQgY2hhciBz ZWVkW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKLSsJQklHTlVNICpnPU5VTEwsKnE9TlVMTCwqcD1O VUxMOwotKwlzaXplX3QgcXNpemUgPSBxYml0cyA+PiAzOwotKwlCTl9DVFggKmN0eD1OVUxMOwot KwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJ ICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOLAotKwkJICAg IEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICBnb3RvIGVycjsKLSsJICAgIH0K LSsKLSsJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSAmJgotKwkgICAgKGJpdHMgIT0gMTAyNCB8fCBx Yml0cyAhPSAxNjApICYmCi0rCSAgICAoYml0cyAhPSAyMDQ4IHx8IHFiaXRzICE9IDIyNCkgJiYK LSsJICAgIChiaXRzICE9IDIwNDggfHwgcWJpdHMgIT0gMjU2KSAmJgotKwkgICAgKGJpdHMgIT0g MzA3MiB8fCBxYml0cyAhPSAyNTYpKQotKwkJewotKwkJRFNBZXJyKERTQV9GX0RTQV9CVUlMVElO X1BBUkFNR0VOLCBEU0FfUl9LRVlfU0laRV9JTlZBTElEKTsKLSsJCWdvdG8gZXJyOwotKwkJfQot KyNlbmRpZgotKwlpZiAoc2VlZF9sZW4gJiYgKHNlZWRfbGVuIDwgKHNpemVfdClxc2l6ZSkpCi0r CQlzZWVkX2luID0gTlVMTDsJCS8qIHNlZWQgYnVmZmVyIHRvbyBzbWFsbCAtLSBpZ25vcmUgKi8K LSsJaWYgKHNlZWRfbGVuID4gc2l6ZW9mKHNlZWQpKSAKLSsJCXNlZWRfbGVuID0gc2l6ZW9mKHNl ZWQpOwkvKiBBcHAuIDIuMiBvZiBGSVBTIFBVQiAxODYgYWxsb3dzIGxhcmdlciBTRUVELAotKwkJ CQkJCSAqIGJ1dCBvdXIgaW50ZXJuYWwgYnVmZmVycyBhcmUgcmVzdHJpY3RlZCB0byAyNTYgYml0 cyovCi0rCWlmIChzZWVkX2luICE9IE5VTEwpCi0rCQltZW1jcHkoc2VlZCwgc2VlZF9pbiwgc2Vl ZF9sZW4pOwotKwllbHNlCi0rCQlzZWVkX2xlbiA9IDA7Ci0rCi0rCWlmICgoY3R4PUJOX0NUWF9u ZXcoKSkgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwotKwlCTl9DVFhfc3RhcnQoY3R4KTsKLSsK LSsJaWYgKCFGSVBTX2RzYV9nZW5lcmF0ZV9wcShjdHgsIGJpdHMsIHFiaXRzLCBldnBtZCwKLSsJ CXNlZWQsIHNlZWRfbGVuLCAmcCwgJnEsIGNvdW50ZXJfcmV0LCBjYikpCi0rCQlnb3RvIGVycjsK LSsKLSsJaWYgKCFGSVBTX2RzYV9nZW5lcmF0ZV9nKGN0eCwgcCwgcSwgJmcsIGhfcmV0LCBjYikp Ci0rCQlnb3RvIGVycjsKLSsKLSsJb2s9MTsKLStlcnI6Ci0rCWlmIChvaykKLSsJCXsKLSsJCWlm KHJldC0+cCkKLSsJCQl7Ci0rCQkJQk5fZnJlZShyZXQtPnApOwotKwkJCXJldC0+cCA9IE5VTEw7 Ci0rCQkJfQotKwkJaWYocmV0LT5xKQotKwkJCXsKLSsJCQlCTl9mcmVlKHJldC0+cSk7Ci0rCQkJ cmV0LT5xID0gTlVMTDsKLSsJCQl9Ci0rCQlpZihyZXQtPmcpCi0rCQkJewotKwkJCUJOX2ZyZWUo cmV0LT5nKTsKLSsJCQlyZXQtPmcgPSBOVUxMOwotKwkJCX0KLSsJCXJldC0+cD1CTl9kdXAocCk7 Ci0rCQlyZXQtPnE9Qk5fZHVwKHEpOwotKwkJcmV0LT5nPUJOX2R1cChnKTsKLSsJCWlmIChyZXQt PnAgPT0gTlVMTCB8fCByZXQtPnEgPT0gTlVMTCB8fCByZXQtPmcgPT0gTlVMTCkKLSsJCQlvaz0w OwotKwkJfQotKwlpZihjdHgpCi0rCQl7Ci0rCQlCTl9DVFhfZW5kKGN0eCk7Ci0rCQlCTl9DVFhf ZnJlZShjdHgpOwotKwkJfQotKwlyZXR1cm4gb2s7Ci0rCX0KLSsKLSsjaWZuZGVmIE9QRU5TU0xf RklQUwotK3N0YXRpYwotKyNlbmRpZgotK2ludCBGSVBTX2RzYV9nZW5lcmF0ZV9wcShCTl9DVFgg KmN0eCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKLSsJCWNvbnN0IEVWUF9NRCAqZXZwbWQs IHVuc2lnbmVkIGNoYXIgKnNlZWQsIGludCBzZWVkX2xlbiwKLSsJCUJJR05VTSAqKnBfcmV0LCBC SUdOVU0gKipxX3JldCwgaW50ICpjb3VudGVyX3JldCwgQk5fR0VOQ0IgKmNiKQotKwl7Ci0rCWlu dCBvaz0wOwotIAl1bnNpZ25lZCBjaGFyIG1kW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKLS0JdW5z aWduZWQgY2hhciBidWZbU0hBMjU2X0RJR0VTVF9MRU5HVEhdLGJ1ZjJbU0hBMjU2X0RJR0VTVF9M RU5HVEhdOwotKwl1bnNpZ25lZCBjaGFyIGJ1ZltTSEEyNTZfRElHRVNUX0xFTkdUSF07Ci0gCUJJ R05VTSAqcjAsKlcsKlgsKmMsKnRlc3Q7Ci0tCUJJR05VTSAqZz1OVUxMLCpxPU5VTEwsKnA9TlVM TDsKLS0JQk5fTU9OVF9DVFggKm1vbnQ9TlVMTDsKLS0JaW50IGksIGssIG49MCwgbT0wLCBxc2l6 ZSA9IHFiaXRzID4+IDM7Ci0rCUJJR05VTSAqcT1OVUxMLCpwPU5VTEw7Ci0rCWludCBpLCBrLCBi LCBuPTAsIG09MCwgcXNpemUgPSBxYml0cyA+PiAzOwotIAlpbnQgY291bnRlcj0wOwotIAlpbnQg cj0wOwotLQlCTl9DVFggKmN0eD1OVUxMOwotLQl1bnNpZ25lZCBpbnQgaD0yOwotIAotIAlpZiAo cXNpemUgIT0gU0hBX0RJR0VTVF9MRU5HVEggJiYgcXNpemUgIT0gU0hBMjI0X0RJR0VTVF9MRU5H VEggJiYKLSAJICAgIHFzaXplICE9IFNIQTI1Nl9ESUdFU1RfTEVOR1RIKQotQEAgLTE1Myw1MSAr MjQ1LDQzIEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KLSAJCXJl dHVybiAwOwotIAotIAlpZiAoZXZwbWQgPT0gTlVMTCkKLS0JCS8qIHVzZSBTSEExIGFzIGRlZmF1 bHQgKi8KLS0JCWV2cG1kID0gRVZQX3NoYTEoKTsKLSsJICAgIHsKLSsJCWlmIChxYml0cyA8PSAx NjApCi0rCQkJZXZwbWQgPSBFVlBfc2hhMSgpOwotKwkJZWxzZSBpZiAocWJpdHMgPD0gMjI0KQot KwkJCWV2cG1kID0gRVZQX3NoYTIyNCgpOwotKwkJZWxzZQotKwkJCWV2cG1kID0gRVZQX3NoYTI1 NigpOwotKwkgICAgfQotIAotIAlpZiAoYml0cyA8IDUxMikKLSAJCWJpdHMgPSA1MTI7Ci0gCi0g CWJpdHMgPSAoYml0cys2MykvNjQqNjQ7Ci0gCi0tCS8qIE5COiBzZWVkX2xlbiA9PSAwIGlzIHNw ZWNpYWwgY2FzZTogY29weSBnZW5lcmF0ZWQgc2VlZCB0bwotLSAJICogc2VlZF9pbiBpZiBpdCBp cyBub3QgTlVMTC4KLS0gCSAqLwotLQlpZiAoc2VlZF9sZW4gJiYgKHNlZWRfbGVuIDwgKHNpemVf dClxc2l6ZSkpCi0tCQlzZWVkX2luID0gTlVMTDsJCS8qIHNlZWQgYnVmZmVyIHRvbyBzbWFsbCAt LSBpZ25vcmUgKi8KLS0JaWYgKHNlZWRfbGVuID4gKHNpemVfdClxc2l6ZSkgCi0tCQlzZWVkX2xl biA9IHFzaXplOwkvKiBBcHAuIDIuMiBvZiBGSVBTIFBVQiAxODYgYWxsb3dzIGxhcmdlciBTRUVE LAotLQkJCQkJICogYnV0IG91ciBpbnRlcm5hbCBidWZmZXJzIGFyZSByZXN0cmljdGVkIHRvIDE2 MCBiaXRzKi8KLS0JaWYgKHNlZWRfaW4gIT0gTlVMTCkKLS0JCW1lbWNweShzZWVkLCBzZWVkX2lu LCBzZWVkX2xlbik7Ci0tCi0tCWlmICgoY3R4PUJOX0NUWF9uZXcoKSkgPT0gTlVMTCkKLS0JCWdv dG8gZXJyOwotLQotLQlpZiAoKG1vbnQ9Qk5fTU9OVF9DVFhfbmV3KCkpID09IE5VTEwpCi0tCQln b3RvIGVycjsKLS0KLS0JQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0gCXIwID0gQk5fQ1RYX2dldChjdHgp OwotLQlnID0gQk5fQ1RYX2dldChjdHgpOwotIAlXID0gQk5fQ1RYX2dldChjdHgpOwotLQlxID0g Qk5fQ1RYX2dldChjdHgpOwotKwkqcV9yZXQgPSBxID0gQk5fQ1RYX2dldChjdHgpOwotIAlYID0g Qk5fQ1RYX2dldChjdHgpOwotIAljID0gQk5fQ1RYX2dldChjdHgpOwotLQlwID0gQk5fQ1RYX2dl dChjdHgpOwotKwkqcF9yZXQgPSBwID0gQk5fQ1RYX2dldChjdHgpOwotIAl0ZXN0ID0gQk5fQ1RY X2dldChjdHgpOwotIAotIAlpZiAoIUJOX2xzaGlmdCh0ZXN0LEJOX3ZhbHVlX29uZSgpLGJpdHMt MSkpCi0gCQlnb3RvIGVycjsKLSAKLSsJLyogc3RlcCAzIG4gPSBcbGNlaWwgYml0cyAvIHFiaXRz IFxyY2VpbCAtIDEgKi8KLSsJbiA9IChiaXRzK3FiaXRzLTEpL3FiaXRzIC0gMTsKLSsJLyogc3Rl cCA0IGIgPSBiaXRzIC0gMSAtIG4gKiBxYml0cyAqLwotKwliID0gYml0cyAtIDEgLSBuKnFiaXRz OwotKwotIAlmb3IgKDs7KQotIAkJewotIAkJZm9yICg7OykgLyogZmluZCBxICovCi0gCQkJewot IAkJCWludCBzZWVkX2lzX3JhbmRvbTsKLSAKLS0JCQkvKiBzdGVwIDEgKi8KLSsJCQkvKiBzdGVw IDUgZ2VuZXJhdGUgc2VlZCAqLwotIAkJCWlmKCFCTl9HRU5DQl9jYWxsKGNiLCAwLCBtKyspKQot IAkJCQlnb3RvIGVycjsKLSAKLUBAIC0yMTIsMzAgKzI5NiwxOCBAQCBpbnQgZHNhX2J1aWx0aW5f cGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCi0gCQkJCXNlZWRfbGVuPTA7IC8qIHVzZSByYW5kb20g c2VlZCBpZiAnc2VlZF9pbicgdHVybnMgb3V0IHRvIGJlIGJhZCovCi0gCQkJCX0KLSAJCQltZW1j cHkoYnVmICwgc2VlZCwgcXNpemUpOwotLQkJCW1lbWNweShidWYyLCBzZWVkLCBxc2l6ZSk7Ci0t CQkJLyogcHJlY29tcHV0ZSAiU0VFRCArIDEiIGZvciBzdGVwIDc6ICovCi0tCQkJZm9yIChpID0g cXNpemUtMTsgaSA+PSAwOyBpLS0pCi0tCQkJCXsKLS0JCQkJYnVmW2ldKys7Ci0tCQkJCWlmIChi dWZbaV0gIT0gMCkKLS0JCQkJCWJyZWFrOwotLQkJCQl9Ci0gCi0tCQkJLyogc3RlcCAyICovCi0r CQkJLyogc3RlcCA2IFUgPSBoYXNoKHNlZWQpICovCi0gCQkJaWYgKCFFVlBfRGlnZXN0KHNlZWQs IHFzaXplLCBtZCwgICBOVUxMLCBldnBtZCwgTlVMTCkpCi0gCQkJCWdvdG8gZXJyOwotLQkJCWlm ICghRVZQX0RpZ2VzdChidWYsICBxc2l6ZSwgYnVmMiwgTlVMTCwgZXZwbWQsIE5VTEwpKQotLQkJ CQlnb3RvIGVycjsKLS0JCQlmb3IgKGkgPSAwOyBpIDwgcXNpemU7IGkrKykKLS0JCQkJbWRbaV1e PWJ1ZjJbaV07Ci0gCi0tCQkJLyogc3RlcCAzICovCi0rCQkJLyogc3RlcCA3IHEgPSAyXihxYml0 cy0xKSArIFUgKyAxIC0gKFUgbW9kIDIpICovCi0gCQkJbWRbMF0gfD0gMHg4MDsKLSAJCQltZFtx c2l6ZS0xXSB8PSAweDAxOwotIAkJCWlmICghQk5fYmluMmJuKG1kLCBxc2l6ZSwgcSkpCi0gCQkJ CWdvdG8gZXJyOwotIAotLQkJCS8qIHN0ZXAgNCAqLwotKwkJCS8qIHN0ZXAgOCB0ZXN0IGZvciBw cmltZSAoNjQgcm91bmQgb2YgUmFiaW4tTWlsbGVyKSAqLwotIAkJCXIgPSBCTl9pc19wcmltZV9m YXN0dGVzdF9leChxLCBEU1NfcHJpbWVfY2hlY2tzLCBjdHgsCi0gCQkJCQlzZWVkX2lzX3JhbmRv bSwgY2IpOwotIAkJCWlmIChyID4gMCkKLUBAIC0yNDMsMjcgKzMxNSwyMiBAQCBpbnQgZHNhX2J1 aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCi0gCQkJaWYgKHIgIT0gMCkKLSAJCQkJZ290 byBlcnI7Ci0gCi0tCQkJLyogZG8gYSBjYWxsYmFjayBjYWxsICovCi0tCQkJLyogc3RlcCA1ICov Ci0gCQkJfQotIAotIAkJaWYoIUJOX0dFTkNCX2NhbGwoY2IsIDIsIDApKSBnb3RvIGVycjsKLSAJ CWlmKCFCTl9HRU5DQl9jYWxsKGNiLCAzLCAwKSkgZ290byBlcnI7Ci0gCi0tCQkvKiBzdGVwIDYg Ki8KLSsJCS8qIHN0ZXAgMTEgKi8KLSAJCWNvdW50ZXI9MDsKLS0JCS8qICJvZmZzZXQgPSAyIiAq LwotLQotLQkJbj0oYml0cy0xKS8xNjA7Ci0rCQkvKiAib2Zmc2V0ID0gMSIgKi8KLSAKLSAJCWZv ciAoOzspCi0gCQkJewotIAkJCWlmICgoY291bnRlciAhPSAwKSAmJiAhQk5fR0VOQ0JfY2FsbChj YiwgMCwgY291bnRlcikpCi0gCQkJCWdvdG8gZXJyOwotIAotLQkJCS8qIHN0ZXAgNyAqLwotKwkJ CS8qIHN0ZXAgMTEuMSwgMTEuMiBvYnRhaW4gVyAqLwotIAkJCUJOX3plcm8oVyk7Ci0tCQkJLyog bm93ICdidWYnIGNvbnRhaW5zICJTRUVEICsgb2Zmc2V0IC0gMSIgKi8KLSAJCQlmb3IgKGs9MDsg azw9bjsgaysrKQotIAkJCQl7Ci0gCQkJCS8qIG9idGFpbiAiU0VFRCArIG9mZnNldCArIGsiIGJ5 IGluY3JlbWVudGluZzogKi8KLUBAIC0yNzgsMjggKzM0NSwzMCBAQCBpbnQgZHNhX2J1aWx0aW5f cGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCi0gCQkJCQkJCQkJTlVMTCkpCi0gCQkJCQlnb3RvIGVy cjsKLSAKLS0JCQkJLyogc3RlcCA4ICovCi0gCQkJCWlmICghQk5fYmluMmJuKG1kLCBxc2l6ZSwg cjApKQotIAkJCQkJZ290byBlcnI7Ci0tCQkJCWlmICghQk5fbHNoaWZ0KHIwLHIwLChxc2l6ZSA8 PCAzKSprKSkgZ290byBlcnI7Ci0rCQkJCWlmIChrID09IG4pCi0rCQkJCQlCTl9tYXNrX2JpdHMo cjAsYik7Ci0rCQkJCWlmICghQk5fbHNoaWZ0KHIwLHIwLHFiaXRzKmspKSBnb3RvIGVycjsKLSAJ CQkJaWYgKCFCTl9hZGQoVyxXLHIwKSkgZ290byBlcnI7Ci0gCQkJCX0KLSAKLS0JCQkvKiBtb3Jl IG9mIHN0ZXAgOCAqLwotLQkJCWlmICghQk5fbWFza19iaXRzKFcsYml0cy0xKSkgZ290byBlcnI7 Ci0rCQkJLyogc3RlcCAxMS4zIFggPSBXICsgMl4oTC0xKSAqLwotIAkJCWlmICghQk5fY29weShY LFcpKSBnb3RvIGVycjsKLSAJCQlpZiAoIUJOX2FkZChYLFgsdGVzdCkpIGdvdG8gZXJyOwotIAot LQkJCS8qIHN0ZXAgOSAqLwotKwkJCS8qIHN0ZXAgMTEuNCBjID0gWCBtb2QgMipxICovCi0gCQkJ aWYgKCFCTl9sc2hpZnQxKHIwLHEpKSBnb3RvIGVycjsKLSAJCQlpZiAoIUJOX21vZChjLFgscjAs Y3R4KSkgZ290byBlcnI7Ci0rCi0rCQkJLyogc3RlcCAxMS41IHAgPSBYIC0gKGMgLSAxKSAqLwot IAkJCWlmICghQk5fc3ViKHIwLGMsQk5fdmFsdWVfb25lKCkpKSBnb3RvIGVycjsKLSAJCQlpZiAo IUJOX3N1YihwLFgscjApKSBnb3RvIGVycjsKLSAKLS0JCQkvKiBzdGVwIDEwICovCi0rCQkJLyog c3RlcCAxMS42ICovCi0gCQkJaWYgKEJOX2NtcChwLHRlc3QpID49IDApCi0gCQkJCXsKLS0JCQkJ Lyogc3RlcCAxMSAqLwotKwkJCQkvKiBzdGVwIDExLjcgKi8KLSAJCQkJciA9IEJOX2lzX3ByaW1l X2Zhc3R0ZXN0X2V4KHAsIERTU19wcmltZV9jaGVja3MsCi0gCQkJCQkJY3R4LCAxLCBjYik7Ci0g CQkJCWlmIChyID4gMCkKLUBAIC0zMDgsMTkgKzM3Nyw0NSBAQCBpbnQgZHNhX2J1aWx0aW5fcGFy YW1nZW4oRFNBICpyZXQsIHNpemVfCi0gCQkJCQlnb3RvIGVycjsKLSAJCQkJfQotIAotLQkJCS8q IHN0ZXAgMTMgKi8KLSsJCQkvKiBzdGVwIDExLjkgKi8KLSAJCQljb3VudGVyKys7Ci0gCQkJLyog Im9mZnNldCA9IG9mZnNldCArIG4gKyAxIiAqLwotIAotLQkJCS8qIHN0ZXAgMTQgKi8KLS0JCQlp ZiAoY291bnRlciA+PSA0MDk2KSBicmVhazsKLSsJCQkvKiBzdGVwIDEyICovCi0rCQkJaWYgKGNv dW50ZXIgPj0gNCpiaXRzKSBicmVhazsKLSAJCQl9Ci0gCQl9Ci0gZW5kOgotIAlpZighQk5fR0VO Q0JfY2FsbChjYiwgMiwgMSkpCi0gCQlnb3RvIGVycjsKLSAKLS0JLyogV2Ugbm93IG5lZWQgdG8g Z2VuZXJhdGUgZyAqLwotKwlvaz0xOwotK2VycjoKLSsJaWYgKG9rKQotKwkJewotKwkJaWYgKGNv dW50ZXJfcmV0ICE9IE5VTEwpICpjb3VudGVyX3JldD1jb3VudGVyOwotKwkJfQotKwlyZXR1cm4g b2s7Ci0rCX0KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotK3N0YXRpYwotKyNlbmRpZgotK2lu dCBGSVBTX2RzYV9nZW5lcmF0ZV9nKEJOX0NUWCAqY3R4LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwK LSsJCUJJR05VTSAqKmdfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKQot Kwl7Ci0rCWludCBvaz0wOwotKwlCSUdOVU0gKnIwLCAqdGVzdCwgKmcgPSBOVUxMOwotKwlCTl9N T05UX0NUWCAqbW9udDsKLSsJdW5zaWduZWQgaW50IGg9MjsKLSsKLSsJaWYgKChtb250PUJOX01P TlRfQ1RYX25ldygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCi0rCXIwID0gQk5fQ1RYX2dl dChjdHgpOwotKwkqZ19yZXQgPSBnID0gQk5fQ1RYX2dldChjdHgpOwotKwl0ZXN0ID0gQk5fQ1RY X2dldChjdHgpOwotKwotIAkvKiBTZXQgcjA9KHAtMSkvcSAqLwotIAlpZiAoIUJOX3N1Yih0ZXN0 LHAsQk5fdmFsdWVfb25lKCkpKSBnb3RvIGVycjsKLSAJaWYgKCFCTl9kaXYocjAsTlVMTCx0ZXN0 LHEsY3R4KSkgZ290byBlcnI7Ci1AQCAtMzQ0LDI2ICs0MzksNyBAQCBlbmQ6Ci0gZXJyOgotIAlp ZiAob2spCi0gCQl7Ci0tCQlpZihyZXQtPnApIEJOX2ZyZWUocmV0LT5wKTsKLS0JCWlmKHJldC0+ cSkgQk5fZnJlZShyZXQtPnEpOwotLQkJaWYocmV0LT5nKSBCTl9mcmVlKHJldC0+Zyk7Ci0tCQly ZXQtPnA9Qk5fZHVwKHApOwotLQkJcmV0LT5xPUJOX2R1cChxKTsKLS0JCXJldC0+Zz1CTl9kdXAo Zyk7Ci0tCQlpZiAocmV0LT5wID09IE5VTEwgfHwgcmV0LT5xID09IE5VTEwgfHwgcmV0LT5nID09 IE5VTEwpCi0tCQkJewotLQkJCW9rPTA7Ci0tCQkJZ290byBlcnI7Ci0tCQkJfQotLQkJaWYgKGNv dW50ZXJfcmV0ICE9IE5VTEwpICpjb3VudGVyX3JldD1jb3VudGVyOwotIAkJaWYgKGhfcmV0ICE9 IE5VTEwpICpoX3JldD1oOwotLQkJaWYgKHNlZWRfb3V0KQotLQkJCW1lbWNweShzZWVkX291dCwg c2VlZCwgcXNpemUpOwotLQkJfQotLQlpZihjdHgpCi0tCQl7Ci0tCQlCTl9DVFhfZW5kKGN0eCk7 Ci0tCQlCTl9DVFhfZnJlZShjdHgpOwotIAkJfQotIAlpZiAobW9udCAhPSBOVUxMKSBCTl9NT05U X0NUWF9mcmVlKG1vbnQpOwotIAlyZXR1cm4gb2s7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xai9j cnlwdG8vZHNhL2RzYS5oLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2RzYS9kc2EuaAotLS0t IG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kc2EvZHNhLmguZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM0 Ljc5MTI5OTQ3MCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kc2EvZHNhLmgJMjAx NC0xMC0xNiAxMzoxOTozNS4wODczMDYxNTIgKzAyMDAKLUBAIC04OCw2ICs4OCw4IEBACi0gIyBk ZWZpbmUgT1BFTlNTTF9EU0FfTUFYX01PRFVMVVNfQklUUwkxMDAwMAotICNlbmRpZgotIAotKyNk ZWZpbmUgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKLSsKLSAjZGVmaW5l IERTQV9GTEFHX0NBQ0hFX01PTlRfUAkweDAxCi0gI2RlZmluZSBEU0FfRkxBR19OT19FWFBfQ09O U1RUSU1FICAgICAgIDB4MDIgLyogbmV3IHdpdGggMC45LjdoOyB0aGUgYnVpbHQtaW4gRFNBCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW1wbGVtZW50 YXRpb24gbm93IHVzZXMgY29uc3RhbnQgdGltZQotQEAgLTI2NCw2ICsyNjYsMTcgQEAgaW50CURT QV9wcmludF9mcChGSUxFICpicCwgY29uc3QgRFNBICp4LAotIERIICpEU0FfZHVwX0RIKGNvbnN0 IERTQSAqcik7Ci0gI2VuZGlmCi0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK2ludCBGSVBTX2Rz YV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAot Kwljb25zdCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBzaXpl X3Qgc2VlZF9sZW4sCi0rCWludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBC Tl9HRU5DQiAqY2IpOwotK2ludCBGSVBTX2RzYV9nZW5lcmF0ZV9wcShCTl9DVFggKmN0eCwgc2l6 ZV90IGJpdHMsIHNpemVfdCBxYml0cywKLSsJCWNvbnN0IEVWUF9NRCAqZXZwbWQsIHVuc2lnbmVk IGNoYXIgKnNlZWQsIGludCBzZWVkX2xlbiwKLSsJCUJJR05VTSAqKnBfcmV0LCBCSUdOVU0gKipx X3JldCwgaW50ICpjb3VudGVyX3JldCwgQk5fR0VOQ0IgKmNiKTsKLStpbnQgRklQU19kc2FfZ2Vu ZXJhdGVfZyhCTl9DVFggKmN0eCwgQklHTlVNICpwLCBCSUdOVU0gKnEsCi0rCQlCSUdOVU0gKipn X3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYik7Ci0rI2VuZGlmCi0rCi0g I2RlZmluZSBFVlBfUEtFWV9DVFhfc2V0X2RzYV9wYXJhbWdlbl9iaXRzKGN0eCwgbmJpdHMpIFwK LSAJRVZQX1BLRVlfQ1RYX2N0cmwoY3R4LCBFVlBfUEtFWV9EU0EsIEVWUF9QS0VZX09QX1BBUkFN R0VOLCBcCi0gCQkJCUVWUF9QS0VZX0NUUkxfRFNBX1BBUkFNR0VOX0JJVFMsIG5iaXRzLCBOVUxM KQotQEAgLTI4NSwxMCArMjk4LDEzIEBAIHZvaWQgRVJSX2xvYWRfRFNBX3N0cmluZ3Modm9pZCk7 Ci0gI2RlZmluZSBEU0FfRl9ET19EU0FfUFJJTlQJCQkJIDEwNAotICNkZWZpbmUgRFNBX0ZfRFNB UEFSQU1TX1BSSU5UCQkJCSAxMDAKLSAjZGVmaW5lIERTQV9GX0RTQVBBUkFNU19QUklOVF9GUAkJ CSAxMDEKLSsjZGVmaW5lIERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTgkJCSAxMjQKLSsjZGVmaW5l IERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOCQkJIDEyMwotICNkZWZpbmUgRFNBX0ZfRFNBX0RP X1NJR04JCQkJIDExMgotICNkZWZpbmUgRFNBX0ZfRFNBX0RPX1ZFUklGWQkJCQkgMTEzCi0tI2Rl ZmluZSBEU0FfRl9EU0FfR0VORVJBVEVfS0VZCQkJCSAxMjQKLS0jZGVmaW5lIERTQV9GX0RTQV9H RU5FUkFURV9QQVJBTUVURVJTX0VYCQkgMTIzCi0rI2RlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVf S0VZCQkJCSAxMjYKLSsjZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9QQVJBTUVURVJTX0VYCQkg MTI3Ci0rI2RlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVfUEFSQU1FVEVSUwkvKiB1bnVzZWQgKi8J IDEyNQotICNkZWZpbmUgRFNBX0ZfRFNBX05FV19NRVRIT0QJCQkJIDEwMwotICNkZWZpbmUgRFNB X0ZfRFNBX1BBUkFNX0RFQ09ERQkJCQkgMTE5Ci0gI2RlZmluZSBEU0FfRl9EU0FfUFJJTlRfRlAJ CQkJIDEwNQotQEAgLTMxNCwxMSArMzMwLDE1IEBAIHZvaWQgRVJSX2xvYWRfRFNBX3N0cmluZ3Mo dm9pZCk7Ci0gI2RlZmluZSBEU0FfUl9EQVRBX1RPT19MQVJHRV9GT1JfS0VZX1NJWkUJCSAxMDAK LSAjZGVmaW5lIERTQV9SX0RFQ09ERV9FUlJPUgkJCQkgMTA0Ci0gI2RlZmluZSBEU0FfUl9JTlZB TElEX0RJR0VTVF9UWVBFCQkJIDEwNgotKyNkZWZpbmUgRFNBX1JfS0VZX1NJWkVfSU5WQUxJRAkJ CQkgMTEzCi0rI2RlZmluZSBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwJCQkgMTEwCi0gI2RlZmlu ZSBEU0FfUl9NSVNTSU5HX1BBUkFNRVRFUlMJCQkgMTAxCi0gI2RlZmluZSBEU0FfUl9NT0RVTFVT X1RPT19MQVJHRQkJCQkgMTAzCi0tI2RlZmluZSBEU0FfUl9ORUVEX05FV19TRVRVUF9WQUxVRVMJ CQkgMTEwCi0rI2RlZmluZSBEU0FfUl9ORUVEX05FV19TRVRVUF9WQUxVRVMJCQkgMTEyCi0gI2Rl ZmluZSBEU0FfUl9OT05fRklQU19EU0FfTUVUSE9ECQkJIDExMQotKyNkZWZpbmUgRFNBX1JfTk9O X0ZJUFNfTUVUSE9ECQkJCSAxMTEKLSAjZGVmaW5lIERTQV9SX05PX1BBUkFNRVRFUlNfU0VUCQkJ CSAxMDcKLSsjZGVmaW5lIERTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUg LyogdW51c2VkICovIDExMgotICNkZWZpbmUgRFNBX1JfUEFSQU1FVEVSX0VOQ09ESU5HX0VSUk9S CQkJIDEwNQotIAotICNpZmRlZiAgX19jcGx1c3BsdXMKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFq L2NyeXB0by9kc2EvZHNhX2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2RzYS9kc2Ff a2V5LmMKLS0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZHNhL2RzYV9rZXkuYy5maXBzCTIwMTQt MTAtMTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRv L2RzYS9kc2Ffa2V5LmMJMjAxNC0xMC0xNiAxMzoxOTozNS4wODczMDYxNTIgKzAyMDAKLUBAIC02 Niw2ICs2NiwzNSBAQAotIAotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLSAjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rCi0rc3RhdGljIGludCBmaXBz X2NoZWNrX2RzYShEU0EgKmRzYSkKLSsJewotKwlFVlBfUEtFWSAqcGs7Ci0rCXVuc2lnbmVkIGNo YXIgdGJzW10gPSAiRFNBIFBhaXJ3aXNlIENoZWNrIERhdGEiOwotKwlpbnQgcmV0ID0gMDsKLSsK LSsJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwotKwlF VlBfUEtFWV9zZXQxX0RTQShwaywgZHNhKTsKLSsKLSsJaWYgKGZpcHNfcGtleV9zaWduYXR1cmVf dGVzdChwaywgdGJzLCAtMSwgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCkpCi0rCQlyZXQgPSAxOwot KwotKwllcnI6Ci0rCWlmIChyZXQgPT0gMCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNf Q0hFQ0tfRFNBLEZJUFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxFRCk7Ci0rCQlmaXBzX3NldF9zZWxm dGVzdF9mYWlsKCk7Ci0rCQl9Ci0rCi0rCWlmIChwaykKLSsJCUVWUF9QS0VZX2ZyZWUocGspOwot KwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0gI2VuZGlmCi0gCi0gc3RhdGljIGludCBkc2FfYnVp bHRpbl9rZXlnZW4oRFNBICpkc2EpOwotQEAgLTgyLDEwICsxMTEsNiBAQCBpbnQgRFNBX2dlbmVy YXRlX2tleShEU0EgKmRzYSkKLSAjZW5kaWYKLSAJaWYoZHNhLT5tZXRoLT5kc2Ffa2V5Z2VuKQot IAkJcmV0dXJuIGRzYS0+bWV0aC0+ZHNhX2tleWdlbihkc2EpOwotLSNpZmRlZiBPUEVOU1NMX0ZJ UFMKLS0JaWYgKEZJUFNfbW9kZSgpKQotLQkJcmV0dXJuIEZJUFNfZHNhX2dlbmVyYXRlX2tleShk c2EpOwotLSNlbmRpZgotIAlyZXR1cm4gZHNhX2J1aWx0aW5fa2V5Z2VuKGRzYSk7Ci0gCX0KLSAK LUBAIC05NSw2ICsxMjAsMTUgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpk c2EpCi0gCUJOX0NUWCAqY3R4PU5VTEw7Ci0gCUJJR05VTSAqcHViX2tleT1OVUxMLCpwcml2X2tl eT1OVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmICEo ZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQotKwkJJiYgKEJOX251bV9iaXRz KGRzYS0+cCkgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJ RFNBZXJyKERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTiwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxM KTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKyNlbmRpZgotKwotIAlpZiAoKGN0eD1CTl9DVFhfbmV3 KCkpID09IE5VTEwpIGdvdG8gZXJyOwotIAotIAlpZiAoZHNhLT5wcml2X2tleSA9PSBOVUxMKQot QEAgLTEzMyw2ICsxNjcsMTQgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpk c2EpCi0gCi0gCWRzYS0+cHJpdl9rZXk9cHJpdl9rZXk7Ci0gCWRzYS0+cHViX2tleT1wdWJfa2V5 OwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19tb2RlKCkgJiYgIWZpcHNfY2hlY2tf ZHNhKGRzYSkpCi0rCQl7Ci0rCQlkc2EtPnB1Yl9rZXkgPSBOVUxMOwotKwkJZHNhLT5wcml2X2tl eSA9IE5VTEw7Ci0rCSAgICAJZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0gCW9rPTE7Ci0gCi0g ZXJyOgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2RzYS9kc2FfbGliLmMuZmlwcyBv cGVuc3NsLTEuMC4xai9jcnlwdG8vZHNhL2RzYV9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjFqL2Ny eXB0by9kc2EvZHNhX2xpYi5jLmZpcHMJMjAxNC0xMC0xNSAxNDo1MzozOS4wMDAwMDAwMDAgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZHNhL2RzYV9saWIuYwkyMDE0LTEwLTE2IDEz OjE5OjM1LjA4NzMwNjE1MiArMDIwMAotQEAgLTg3LDE0ICs4Nyw3IEBAIGNvbnN0IERTQV9NRVRI T0QgKkRTQV9nZXRfZGVmYXVsdF9tZXRob2QKLSAJewotIAlpZighZGVmYXVsdF9EU0FfbWV0aG9k KQotIAkJewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JCWlmIChGSVBTX21vZGUoKSkKLS0JCQly ZXR1cm4gRklQU19kc2Ffb3BlbnNzbCgpOwotLQkJZWxzZQotLQkJCXJldHVybiBEU0FfT3BlblNT TCgpOwotLSNlbHNlCi0gCQlkZWZhdWx0X0RTQV9tZXRob2QgPSBEU0FfT3BlblNTTCgpOwotLSNl bmRpZgotIAkJfQotIAlyZXR1cm4gZGVmYXVsdF9EU0FfbWV0aG9kOwotIAl9Ci1kaWZmIC11cCBv cGVuc3NsLTEuMC4xai9jcnlwdG8vZHNhL2RzYV9sb2NsLmguZmlwcyBvcGVuc3NsLTEuMC4xai9j cnlwdG8vZHNhL2RzYV9sb2NsLmgKLS0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZHNhL2RzYV9s b2NsLmguZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM0Ljc5MjI5OTQ5MyArMDIwMAotKysrIG9wZW5z c2wtMS4wLjFqL2NyeXB0by9kc2EvZHNhX2xvY2wuaAkyMDE0LTEwLTE2IDEzOjE5OjM1LjA4NzMw NjE1MiArMDIwMAotQEAgLTU2LDUgKzU2LDQgQEAKLSAKLSBpbnQgZHNhX2J1aWx0aW5fcGFyYW1n ZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCi0gCWNvbnN0IEVWUF9NRCAq ZXZwbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIHNpemVfdCBzZWVkX2xlbiwKLS0J dW5zaWduZWQgY2hhciAqc2VlZF9vdXQsCi0gCWludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxv bmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRv L2RzYS9kc2Ffb3NzbC5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2RzYS9kc2Ffb3NzbC5j Ci0tLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2RzYS9kc2Ffb3NzbC5jLmZpcHMJMjAxNC0xMC0x NSAxNDo1MzozOS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZHNh L2RzYV9vc3NsLmMJMjAxNC0xMC0xNiAxMzoxOTozNS4wODczMDYxNTIgKzAyMDAKLUBAIC02NSw2 ICs2NSw5IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wv cmFuZC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2FzbjEuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotIHN0YXRpYyBEU0FfU0lH ICpkc2FfZG9fc2lnbihjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBpbnQgZGxlbiwgRFNBICpk c2EpOwotIHN0YXRpYyBpbnQgZHNhX3NpZ25fc2V0dXAoRFNBICpkc2EsIEJOX0NUWCAqY3R4X2lu LCBCSUdOVU0gKipraW52cCwgQklHTlVNICoqcnApOwotQEAgLTgyLDcgKzg1LDcgQEAgTlVMTCwg LyogZHNhX21vZF9leHAsICovCi0gTlVMTCwgLyogZHNhX2JuX21vZF9leHAsICovCi0gZHNhX2lu aXQsCi0gZHNhX2ZpbmlzaCwKLS0wLAotK0RTQV9GTEFHX0ZJUFNfTUVUSE9ELAotIE5VTEwsCi0g TlVMTCwKLSBOVUxMCi1AQCAtMTM4LDYgKzE0MSwyMSBAQCBzdGF0aWMgRFNBX1NJRyAqZHNhX2Rv X3NpZ24oY29uc3QgdW5zaWduCi0gCURTQV9TSUcgKnJldD1OVUxMOwotIAlpbnQgbm9yZWRvID0g MDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkp Ci0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9EU0FfRE9fU0lHTixGSVBTX1JfRklQU19T RUxGVEVTVF9GQUlMRUQpOwotKwkgICAgcmV0dXJuIE5VTEw7Ci0rCSAgICB9Ci0rCi0rCWlmIChG SVBTX21vZGUoKSAmJiAhKGRzYS0+ZmxhZ3MgJiBEU0FfRkxBR19OT05fRklQU19BTExPVykgCi0r CQkmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNf QklUUykpCi0rCQl7Ci0rCQlEU0FlcnIoRFNBX0ZfRFNBX0RPX1NJR04sIERTQV9SX0tFWV9TSVpF X1RPT19TTUFMTCk7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJQk5faW5p dCgmbSk7Ci0gCUJOX2luaXQoJnhyKTsKLSAKLUBAIC0zMjUsNiArMzQzLDIxIEBAIHN0YXRpYyBp bnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZAotIAkJcmV0dXJuIC0xOwotIAkJfQotIAot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAg IHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0RTQV9ET19WRVJJRlksRklQU19SX0ZJUFNfU0VMRlRF U1RfRkFJTEVEKTsKLSsJICAgIHJldHVybiAtMTsKLSsJICAgIH0KLSsKLSsJaWYgKEZJUFNfbW9k ZSgpICYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSAKLSsJCSYmIChC Tl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkK LSsJCXsKLSsJCURTQWVycihEU0FfRl9EU0FfRE9fVkVSSUZZLCBEU0FfUl9LRVlfU0laRV9UT09f U01BTEwpOwotKwkJcmV0dXJuIC0xOwotKwkJfQotKyNlbmRpZgotKwotIAlpZiAoQk5fbnVtX2Jp dHMoZHNhLT5wKSA+IE9QRU5TU0xfRFNBX01BWF9NT0RVTFVTX0JJVFMpCi0gCQl7Ci0gCQlEU0Fl cnIoRFNBX0ZfRFNBX0RPX1ZFUklGWSxEU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7Ci1AQCAtMzk5 LDYgKzQzMiw5IEBAIHN0YXRpYyBpbnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZAotIAot IHN0YXRpYyBpbnQgZHNhX2luaXQoRFNBICpkc2EpCi0gewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAlkc2EtPmZsYWdzfD1EU0FfRkxB R19DQUNIRV9NT05UX1A7Ci0gCXJldHVybigxKTsKLSB9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4x ai9jcnlwdG8vZHNhL2RzYV9wbWV0aC5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2RzYS9k c2FfcG1ldGguYwotLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kc2EvZHNhX3BtZXRoLmMuZmlw cwkyMDE0LTEwLTE1IDE0OjUzOjM5LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFq L2NyeXB0by9kc2EvZHNhX3BtZXRoLmMJMjAxNC0xMC0xNiAxMzoxOTozNS4wODczMDYxNTIgKzAy MDAKLUBAIC0yNTUsNyArMjU1LDcgQEAgc3RhdGljIGludCBwa2V5X2RzYV9wYXJhbWdlbihFVlBf UEtFWV9DVAotIAlpZiAoIWRzYSkKLSAJCXJldHVybiAwOwotIAlyZXQgPSBkc2FfYnVpbHRpbl9w YXJhbWdlbihkc2EsIGRjdHgtPm5iaXRzLCBkY3R4LT5xYml0cywgZGN0eC0+cG1kLAotLQkgICAg ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBwY2IpOwot KwkgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCBOVUxMLCBwY2IpOwot IAlpZiAocmV0KQotIAkJRVZQX1BLRVlfYXNzaWduX0RTQShwa2V5LCBkc2EpOwotIAllbHNlCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZHNhL2RzYXRlc3QuYy5maXBzIG9wZW5zc2wt MS4wLjFqL2NyeXB0by9kc2EvZHNhdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2Rz YS9kc2F0ZXN0LmMuZmlwcwkyMDE0LTEwLTE1IDE0OjUxOjA2LjAwMDAwMDAwMCArMDIwMAotKysr IG9wZW5zc2wtMS4wLjFqL2NyeXB0by9kc2EvZHNhdGVzdC5jCTIwMTQtMTAtMTYgMTM6MTk6MzUu MDg4MzA2MTc1ICswMjAwCi1AQCAtOTYsMzYgKzk2LDQxIEBAIHN0YXRpYyBpbnQgTVNfQ0FMTEJB Q0sgZHNhX2NiKGludCBwLCBpbnQKLSAvKiBzZWVkLCBvdXRfcCwgb3V0X3EsIG91dF9nIGFyZSB0 YWtlbiBmcm9tIHRoZSB1cGRhdGVkIEFwcGVuZGl4IDUgdG8KLSAgKiBGSVBTIFBVQiAxODYgYW5k IGFsc28gYXBwZWFyIGluIEFwcGVuZGl4IDUgdG8gRklQUyBQSUIgMTg2LTEgKi8KLSBzdGF0aWMg dW5zaWduZWQgY2hhciBzZWVkWzIwXT17Ci0tCTB4ZDUsMHgwMSwweDRlLDB4NGIsMHg2MCwweGVm LDB4MmIsMHhhOCwweGI2LDB4MjEsMHgxYiwweDQwLAotLQkweDYyLDB4YmEsMHgzMiwweDI0LDB4 ZTAsMHg0MiwweDdkLDB4ZDMsCi0rCTB4MDIsMHg0NywweDExLDB4OTIsMHgxMSwweDg4LDB4Qzgs MHhGQiwweEFGLDB4NDgsMHg0QywweDYyLAotKwkweERGLDB4QTUsMHhCRSwweEEwLDB4QTQsMHgz QywweDU2LDB4RTMsCi0gCX07Ci0gCi0gc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X3BbXT17Ci0t CTB4OGQsMHhmMiwweGE0LDB4OTQsMHg0OSwweDIyLDB4NzYsMHhhYSwKLS0JMHgzZCwweDI1LDB4 NzUsMHg5YiwweGIwLDB4NjgsMHg2OSwweGNiLAotLQkweGVhLDB4YzAsMHhkOCwweDNhLDB4ZmIs MHg4ZCwweDBjLDB4ZjcsCi0tCTB4Y2IsMHhiOCwweDMyLDB4NGYsMHgwZCwweDc4LDB4ODIsMHhl NSwKLS0JMHhkMCwweDc2LDB4MmYsMHhjNSwweGI3LDB4MjEsMHgwZSwweGFmLAotLQkweGMyLDB4 ZTksMHhhZCwweGFjLDB4MzIsMHhhYiwweDdhLDB4YWMsCi0tCTB4NDksMHg2OSwweDNkLDB4ZmIs MHhmOCwweDM3LDB4MjQsMHhjMiwKLS0JMHhlYywweDA3LDB4MzYsMHhlZSwweDMxLDB4YzgsMHgw MiwweDkxLAotKwkweEFDLDB4Q0IsMHgxRSwweDYzLDB4NjAsMHg2OSwweDBDLDB4RkIsMHgwNiww eDE5LDB4NjgsMHgzRSwKLSsJMHhBNSwweDAxLDB4NUEsMHhBMiwweDE1LDB4NUMsMHhFMiwweDk5 LDB4MkQsMHhENSwweDMwLDB4OTksCi0rCTB4N0UsMHg1RiwweDhELDB4RTIsMHhGNywweEM2LDB4 MkUsMHg4RCwweEEzLDB4OUYsMHg1OCwweEFELAotKwkweEQ2LDB4QTksMHg3RCwweDBFLDB4MEQs MHg5NSwweDUzLDB4QTYsMHg3MSwweDNBLDB4REUsMHhBQiwKLSsJMHhBQywweEU5LDB4RjQsMHgz NiwweDU1LDB4OUUsMHhCOSwweEQ2LDB4OTMsMHhCRiwweEYzLDB4MTgsCi0rCTB4MUMsMHgxNCww eDdCLDB4QTUsMHg0MiwweDJFLDB4Q0QsMHgwMCwweEVCLDB4MzUsMHgzQiwweDFCLAotKwkweEE4 LDB4NTEsMHhCQiwweEUxLDB4NTgsMHg0MiwweDg1LDB4ODQsMHgyMiwweEE3LDB4OTcsMHg1RSwK LSsJMHg5OSwweDZGLDB4MzgsMHgyMCwweEJELDB4OUQsMHhCNiwweEQ5LDB4MzMsMHgzNywweDJB LDB4RkQsCi0rCTB4QkIsMHhENCwweEJDLDB4MEMsMHgyQSwweDY3LDB4Q0IsMHg5RiwweEJCLDB4 REYsMHhGOSwweDkzLAotKwkweEFBLDB4RDYsMHhGMCwweEQ2LDB4OTUsMHgwQiwweDVELDB4NjUs MHgxNCwweEQwLDB4MTgsMHg5RCwKLSsJMHhDNiwweEFGLDB4RjAsMHhDNiwweDM3LDB4N0MsMHhG MywweDVGLAotIAl9OwotIAotIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9xW109ewotLQkweGM3 LDB4NzMsMHgyMSwweDhjLDB4NzMsMHg3ZSwweGM4LDB4ZWUsCi0tCTB4OTksMHgzYiwweDRmLDB4 MmQsMHhlZCwweDMwLDB4ZjQsMHg4ZSwKLS0JMHhkYSwweGNlLDB4OTEsMHg1ZiwKLSsJMHhFMyww eDhFLDB4NUUsMHg2RCwweEJGLDB4MkIsMHg3OSwweEY4LDB4QzUsMHg0QiwweDg5LDB4OEIsCi0r CTB4QkEsMHgyRCwweDkxLDB4QzMsMHg2QywweDgwLDB4QUMsMHg4NywKLSAJfTsKLSAKLSBzdGF0 aWMgdW5zaWduZWQgY2hhciBvdXRfZ1tdPXsKLS0JMHg2MiwweDZkLDB4MDIsMHg3OCwweDM5LDB4 ZWEsMHgwYSwweDEzLAotLQkweDQxLDB4MzEsMHg2MywweGE1LDB4NWIsMHg0YywweGI1LDB4MDAs Ci0tCTB4MjksMHg5ZCwweDU1LDB4MjIsMHg5NSwweDZjLDB4ZWYsMHhjYiwKLS0JMHgzYiwweGZm LDB4MTAsMHhmMywweDk5LDB4Y2UsMHgyYywweDJlLAotLQkweDcxLDB4Y2IsMHg5ZCwweGU1LDB4 ZmEsMHgyNCwweGJhLDB4YmYsCi0tCTB4NTgsMHhlNSwweGI3LDB4OTUsMHgyMSwweDkyLDB4NWMs MHg5YywKLS0JMHhjNCwweDJlLDB4OWYsMHg2ZiwweDQ2LDB4NGIsMHgwOCwweDhjLAotLQkweGM1 LDB4NzIsMHhhZiwweDUzLDB4ZTYsMHhkNywweDg4LDB4MDIsCi0rCTB4NDIsMHg0QSwweDA0LDB4 NEUsMHg3OSwweEI0LDB4OTksMHg3RiwweEZELDB4NTgsMHgzNiwweDJDLAotKwkweDFCLDB4NUYs MHgxOCwweDdFLDB4MEQsMHhDQywweEFCLDB4ODEsMHhDOSwweDVELDB4MTAsMHhDRSwKLSsJMHg0 RSwweDgwLDB4N0UsMHg1OCwweEI0LDB4MzQsMHgzRiwweEE3LDB4NDUsMHhDNywweEFBLDB4MzYs Ci0rCTB4MjQsMHg0MiwweEE5LDB4M0IsMHhFOCwweDBFLDB4MDQsMHgwMiwweDJELDB4RkIsMHhB NiwweDEzLAotKwkweEI5LDB4QjUsMHgxNSwweEE1LDB4NTYsMHgwNywweDM1LDB4RTQsMHgwMyww eEI2LDB4NzksMHg3QywKLSsJMHg2MiwweERELDB4REYsMHgzRiwweDcxLDB4M0EsMHg5RCwweDhC LDB4QzQsMHhGNiwweEU3LDB4MUQsCi0rCTB4NTIsMHhBOCwweEE5LDB4NDMsMHgxRCwweDMzLDB4 NTEsMHg4OCwweDM5LDB4QkQsMHg3MywweEU5LAotKwkweDVGLDB4QkUsMHg4MiwweDQ5LDB4Mjcs MHhFNiwweEI1LDB4NTMsMHhDMSwweDM4LDB4QUMsMHgyRiwKLSsJMHg2RCwweDk3LDB4NkMsMHhF QiwweDY3LDB4QzEsMHg1RiwweDY3LDB4RjgsMHgzNSwweDA1LDB4NUUsCi0rCTB4RDUsMHg2OCww eDgwLDB4QUEsMHg5NiwweENBLDB4MEIsMHg4QSwweEU2LDB4RjEsMHhCMSwweDQxLAotKwkweEM2 LDB4NzUsMHg5NCwweDBBLDB4MEEsMHgyQSwweEZBLDB4MjksCi0gCX07Ci0gCi0gc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc3RyMVtdPSIxMjM0NTY3ODkwMTIzNDU2Nzg5MCI7Ci1AQCAtMTU3 LDcgKzE2Miw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAJQklPX3ByaW50 ZihiaW9fZXJyLCJ0ZXN0IGdlbmVyYXRpb24gb2YgRFNBIHBhcmFtZXRlcnNcbiIpOwotIAotIAlC Tl9HRU5DQl9zZXQoJmNiLCBkc2FfY2IsIGJpb19lcnIpOwotLQlpZigoKGRzYSA9IERTQV9uZXco KSkgPT0gTlVMTCkgfHwgIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgNTEyLAotKwlp ZigoKGRzYSA9IERTQV9uZXcoKSkgPT0gTlVMTCkgfHwgIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJz X2V4KGRzYSwgMTAyNCwKLSAJCQkJc2VlZCwgMjAsICZjb3VudGVyLCAmaCwgJmNiKSkKLSAJCWdv dG8gZW5kOwotIAotQEAgLTE3MCw5ICsxNzUsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCi0gCUJJT19wcmludGYoYmlvX2VyciwiXG5jb3VudGVyPSVkIGg9JWxkXG4iLGNvdW50 ZXIsaCk7Ci0gCQkKLSAJRFNBX3ByaW50KGJpb19lcnIsZHNhLDApOwotLQlpZiAoY291bnRlciAh PSAxMDUpIAotKwlpZiAoY291bnRlciAhPSAyMzkpIAotIAkJewotLQkJQklPX3ByaW50ZihiaW9f ZXJyLCJjb3VudGVyIHNob3VsZCBiZSAxMDVcbiIpOwotKwkJQklPX3ByaW50ZihiaW9fZXJyLCJj b3VudGVyIHNob3VsZCBiZSAyMzlcbiIpOwotIAkJZ290byBlbmQ7Ci0gCQl9Ci0gCWlmIChoICE9 IDIpCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYy5maXBz IG9wZW5zc2wtMS4wLjFqL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jCi0tLS0gb3BlbnNzbC0xLjAu MWovY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMuZmlwcwkyMDE0LTEwLTE1IDE0OjUzOjM5LjAwMDAw MDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jCTIw MTQtMTAtMTYgMTM6MTk6MzUuMDg4MzA2MTc1ICswMjAwCi1AQCAtNTgsMTEgKzU4LDI1IEBACi0g Ci0gI2luY2x1ZGUgImNyeXB0bGliLmgiCi0gI2luY2x1ZGUgImVuZ19pbnQuaCIKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotIHZv aWQgRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzKHZvaWQpCi0gCXsKLSAJLyogU29tZSBFTkdJ TkVzIG5lZWQgdGhpcyAqLwotIAlPUEVOU1NMX2NwdWlkX3NldHVwKCk7Ci0rI2lmZGVmIE9QRU5T U0xfRklQUwotKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOwotKwlpZiAoRklQU19tb2RlKCkpIHsK LSsJCS8qIFdlIGFsbG93IGxvYWRpbmcgZHluYW1pYyBlbmdpbmUgYXMgYSB0aGlyZCBwYXJ0eQot KwkJICAgZW5naW5lIG1pZ2h0IGJlIEZJUFMgdmFsaWRhdGVkLgotKwkJICAgVXNlciBpcyBkaXNh bGxvd2VkIHRvIGxvYWQgbm9uLXZhbGlkYXRlZCBlbmdpbmVzCi0rCQkgICBieSBzZWN1cml0eSBw b2xpY3kuICovCi0rCQlFTkdJTkVfbG9hZF9keW5hbWljKCk7Ci0rCQlyZXR1cm47Ci0rCX0KLSsj ZW5kaWYKLSAjaWYgMAotIAkvKiBUaGVyZSdzIG5vIGxvbmdlciBhbnkgbmVlZCBmb3IgYW4gIm9w ZW5zc2wiIEVOR0lORSB1bmxlc3MsIG9uZSBkYXksCi0gCSAqIGl0IGlzIHRoZSAqb25seSogd2F5 IGZvciBzdGFuZGFyZCBidWlsdGluIGltcGxlbWVudGF0aW9ucyB0byBiZSBiZQotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9jX2FsbGMuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2Ny eXB0by9ldnAvY19hbGxjLmMKLS0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2NfYWxsYy5j LmZpcHMJMjAxNC0xMC0xNSAxNDo1MzozOS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEu MC4xai9jcnlwdG8vZXZwL2NfYWxsYy5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDg4MzA2MTc1ICsw MjAwCi1AQCAtNjUsNiArNjUsMTEgQEAKLSB2b2lkIE9wZW5TU0xfYWRkX2FsbF9jaXBoZXJzKHZv aWQpCi0gCXsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCU9QRU5TU0xfaW5pdF9saWJyYXJ5 KCk7Ci0rCWlmKCFGSVBTX21vZGUoKSkgCi0rCQl7Ci0rI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NM X05PX0RFUwotIAlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2NmYigpKTsKLSAJRVZQX2FkZF9jaXBo ZXIoRVZQX2Rlc19jZmIxKCkpOwotQEAgLTIyNyw0ICsyMzIsNjAgQEAgdm9pZCBPcGVuU1NMX2Fk ZF9hbGxfY2lwaGVycyh2b2lkKQotIAlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9jYW1lbGxpYV8y NTZfY2JjLCJDQU1FTExJQTI1NiIpOwotIAlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9jYW1lbGxp YV8yNTZfY2JjLCJjYW1lbGxpYTI1NiIpOwotICNlbmRpZgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJCX0KLSsJZWxzZQotKwkJewotKyNpZm5kZWYgT1BFTlNTTF9OT19ERVMKLSsJRVZQX2FkZF9j aXBoZXIoRVZQX2Rlc19lZGVfY2ZiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNf Y2ZiKCkpOwotKwotKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZV9vZmIoKSk7Ci0rCUVWUF9h ZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19vZmIoKSk7Ci0rCi0rCUVWUF9hZGRfY2lwaGVyKEVWUF9k ZXNfZWRlX2NiYygpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NiYygpKTsKLSsJ RVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fZGVzX2VkZTNfY2JjLCJERVMzIik7Ci0rCUVWUF9hZGRf Y2lwaGVyX2FsaWFzKFNOX2Rlc19lZGUzX2NiYywiZGVzMyIpOwotKwotKwlFVlBfYWRkX2NpcGhl cihFVlBfZGVzX2VkZSgpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzKCkpOwotKyNl bmRpZgotKwotKyNpZm5kZWYgT1BFTlNTTF9OT19BRVMKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Fl c18xMjhfZWNiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jYmMoKSk7Ci0rCUVW UF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NmYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Fl c18xMjhfY2ZiMSgpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2ZiOCgpKTsKLSsJ RVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfb2ZiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBf YWVzXzEyOF9jdHIoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2djbSgpKTsKLSsJ RVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfeHRzKCkpOwotKwlFVlBfYWRkX2NpcGhlcl9hbGlh cyhTTl9hZXNfMTI4X2NiYywiQUVTMTI4Iik7Ci0rCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Fl c18xMjhfY2JjLCJhZXMxMjgiKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfZWNiKCkp OwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jYmMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVy KEVWUF9hZXNfMTkyX2NmYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2ZiMSgp KTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2ZiOCgpKTsKLSsJRVZQX2FkZF9jaXBo ZXIoRVZQX2Flc18xOTJfb2ZiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jdHIo KSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2djbSgpKTsKLSsJRVZQX2FkZF9jaXBo ZXJfYWxpYXMoU05fYWVzXzE5Ml9jYmMsIkFFUzE5MiIpOwotKwlFVlBfYWRkX2NpcGhlcl9hbGlh cyhTTl9hZXNfMTkyX2NiYywiYWVzMTkyIik7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2 X2VjYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2JjKCkpOwotKwlFVlBfYWRk X2NpcGhlcihFVlBfYWVzXzI1Nl9jZmIoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2 X2NmYjEoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NmYjgoKSk7Ci0rCUVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMjU2X29mYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18y NTZfY3RyKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9nY20oKSk7Ci0rCUVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMjU2X3h0cygpKTsKLSsJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05f YWVzXzI1Nl9jYmMsIkFFUzI1NiIpOwotKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMjU2 X2NiYywiYWVzMjU2Iik7Ci0rI2VuZGlmCi0rCQl9Ci0rI2VuZGlmCi0gCX0KLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvY19hbGxkLmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlw dG8vZXZwL2NfYWxsZC5jCi0tLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9jX2FsbGQuYy5m aXBzCTIwMTQtMTAtMTUgMTQ6NTE6MDYuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MWovY3J5cHRvL2V2cC9jX2FsbGQuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA4ODMwNjE3NSArMDIw MAotQEAgLTY0LDYgKzY0LDExIEBACi0gCi0gdm9pZCBPcGVuU1NMX2FkZF9hbGxfZGlnZXN0cyh2 b2lkKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlPUEVOU1NMX2luaXRfbGlicmFyeSgp OwotKwlpZiAoIUZJUFNfbW9kZSgpKQotKwkJewotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9O T19NRDQKLSAJRVZQX2FkZF9kaWdlc3QoRVZQX21kNCgpKTsKLSAjZW5kaWYKLUBAIC0xMTEsNCAr MTE2LDMyIEBAIHZvaWQgT3BlblNTTF9hZGRfYWxsX2RpZ2VzdHModm9pZCkKLSAjaWZuZGVmIE9Q RU5TU0xfTk9fV0hJUkxQT09MCi0gCUVWUF9hZGRfZGlnZXN0KEVWUF93aGlybHBvb2woKSk7Ci0g I2VuZGlmCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJfQotKwllbHNlCi0rCQl7Ci0rI2lmICFk ZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTEpCi0rCUVW UF9hZGRfZGlnZXN0KEVWUF9zaGExKCkpOwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGEx LCJzc2wzLXNoYTEiKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMVdpdGhSU0FFbmNy eXB0aW9uLFNOX3NoYTFXaXRoUlNBKTsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fRFNBCi0rCUVWUF9h ZGRfZGlnZXN0KEVWUF9kc3MxKCkpOwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRo U0hBMSxTTl9kc2FXaXRoU0hBMV8yKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0 aFNIQTEsIkRTUzEiKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsImRz czEiKTsKLSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fRUNEU0EKLSsJRVZQX2FkZF9kaWdl c3QoRVZQX2VjZHNhKCkpOwotKyNlbmRpZgotKyNlbmRpZgotKyNpZm5kZWYgT1BFTlNTTF9OT19T SEEyNTYKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTIyNCgpKTsKLSsJRVZQX2FkZF9kaWdlc3Qo RVZQX3NoYTI1NigpKTsKLSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCi0rCUVW UF9hZGRfZGlnZXN0KEVWUF9zaGEzODQoKSk7Ci0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGE1MTIo KSk7Ci0rI2VuZGlmCi0rCQl9Ci0rI2VuZGlmCi0gCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFq L2NyeXB0by9ldnAvZGlnZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2RpZ2Vz dC5jCi0tLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9kaWdlc3QuYy5maXBzCTIwMTQtMTAt MTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2 cC9kaWdlc3QuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA4ODMwNjE3NSArMDIwMAotQEAgLTE0Miw5 ICsxNDIsNTAgQEAgaW50IEVWUF9EaWdlc3RJbml0KEVWUF9NRF9DVFggKmN0eCwgY29ucwotIAly ZXR1cm4gRVZQX0RpZ2VzdEluaXRfZXgoY3R4LCB0eXBlLCBOVUxMKTsKLSAJfQotIAotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsKLSsvKiBUaGUgcHVycG9zZSBvZiB0aGVzZSBpcyB0byB0cmFwIHBy b2dyYW1zIHRoYXQgYXR0ZW1wdCB0byB1c2Ugbm9uIEZJUFMKLSsgKiBhbGdvcml0aG1zIGluIEZJ UFMgbW9kZSBhbmQgaWdub3JlIHRoZSBlcnJvcnMuCi0rICovCi0rCi0rc3RhdGljIGludCBiYWRf aW5pdChFVlBfTURfQ1RYICpjdHgpCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgaW5p dCIpOyByZXR1cm4gMDt9Ci0rCi0rc3RhdGljIGludCBiYWRfdXBkYXRlKEVWUF9NRF9DVFggKmN0 eCxjb25zdCB2b2lkICpkYXRhLHNpemVfdCBjb3VudCkKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQo IkRpZ2VzdCB1cGRhdGUiKTsgcmV0dXJuIDA7fQotKwotK3N0YXRpYyBpbnQgYmFkX2ZpbmFsKEVW UF9NRF9DVFggKmN0eCx1bnNpZ25lZCBjaGFyICptZCkKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQo IkRpZ2VzdCBGaW5hbCIpOyByZXR1cm4gMDt9Ci0rCi0rc3RhdGljIGNvbnN0IEVWUF9NRCBiYWRf bWQgPQotKwl7Ci0rCTAsCi0rCTAsCi0rCTAsCi0rCTAsCi0rCWJhZF9pbml0LAotKwliYWRfdXBk YXRlLAotKwliYWRfZmluYWwsCi0rCU5VTEwsCi0rCU5VTEwsCi0rCU5VTEwsCi0rCTAsCi0rCXsw LDAsMCwwfSwKLSsJfTsKLSsKLSsjZW5kaWYKLSsKLSBpbnQgRVZQX0RpZ2VzdEluaXRfZXgoRVZQ X01EX0NUWCAqY3R4LCBjb25zdCBFVlBfTUQgKnR5cGUsIEVOR0lORSAqaW1wbCkKLSAJewotIAlF VlBfTURfQ1RYX2NsZWFyX2ZsYWdzKGN0eCxFVlBfTURfQ1RYX0ZMQUdfQ0xFQU5FRCk7Ci0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJewotKwkJ RklQU2VycihGSVBTX0ZfRVZQX0RJR0VTVElOSVRfRVgsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJ TEVEKTsKLSsJCWN0eC0+ZGlnZXN0ID0gJmJhZF9tZDsKLSsJCXJldHVybiAwOwotKwkJfQotKyNl bmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSAJLyogV2hldGhlciBpdCdzIG5pY2Ug b3Igbm90LCAiSW5pdHMiIGNhbiBiZSB1c2VkIG9uICJGaW5hbCInZCBjb250ZXh0cwotIAkgKiBz byB0aGlzIGNvbnRleHQgbWF5IGFscmVhZHkgaGF2ZSBhbiBFTkdJTkUhIFRyeSB0byBhdm9pZCBy ZWxlYXNpbmcKLUBAIC0yMDEsNiArMjQyLDE4IEBAIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBf TURfQ1RYICpjdHgsIGMKLSAjZW5kaWYKLSAJaWYgKGN0eC0+ZGlnZXN0ICE9IHR5cGUpCi0gCQl7 Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJaWYgKEZJUFNfbW9kZSgpKQotKwkJCXsKLSsJCQlp ZiAoISh0eXBlLT5mbGFncyAmIEVWUF9NRF9GTEFHX0ZJUFMpIAotKwkJCSAmJiAhKGN0eC0+Zmxh Z3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQotKwkJCQl7Ci0rCQkJCUVWUGVy cihFVlBfRl9FVlBfRElHRVNUSU5JVF9FWCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpOwotKwkJ CQljdHgtPmRpZ2VzdCA9ICZiYWRfbWQ7Ci0rCQkJCXJldHVybiAwOwotKwkJCQl9Ci0rCQkJfQot KyNlbmRpZgotIAkJaWYgKGN0eC0+ZGlnZXN0ICYmIGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSkKLSAJ CQlPUEVOU1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsKLSAJCWN0eC0+ZGlnZXN0PXR5cGU7Ci1AQCAt MjI5LDI2ICsyODIsMTUgQEAgc2tpcF90b19pbml0OgotIAkJfQotIAlpZiAoY3R4LT5mbGFncyAm IEVWUF9NRF9DVFhfRkxBR19OT19JTklUKQotIAkJcmV0dXJuIDE7Ci0tI2lmZGVmIE9QRU5TU0xf RklQUwotLQlpZiAoRklQU19tb2RlKCkpCi0tCQl7Ci0tCQlpZiAoRklQU19kaWdlc3Rpbml0KGN0 eCwgdHlwZSkpCi0tCQkJcmV0dXJuIDE7Ci0tCQlPUEVOU1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsK LS0JCWN0eC0+bWRfZGF0YSA9IE5VTEw7Ci0tCQlyZXR1cm4gMDsKLS0JCX0KLS0jZW5kaWYKLSAJ cmV0dXJuIGN0eC0+ZGlnZXN0LT5pbml0KGN0eCk7Ci0gCX0KLSAKLSBpbnQgRVZQX0RpZ2VzdFVw ZGF0ZShFVlBfTURfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBjb3VudCkKLSAJ ewotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JcmV0dXJuIEZJUFNfZGlnZXN0dXBkYXRlKGN0eCwg ZGF0YSwgY291bnQpOwotLSNlbHNlCi0tCXJldHVybiBjdHgtPnVwZGF0ZShjdHgsZGF0YSxjb3Vu dCk7Ci0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSAjZW5kaWYKLSsJcmV0dXJuIGN0eC0+dXBk YXRlKGN0eCxkYXRhLGNvdW50KTsKLSAJfQotIAotIC8qIFRoZSBjYWxsZXIgY2FuIGFzc3VtZSB0 aGF0IHRoaXMgcmVtb3ZlcyBhbnkgc2VjcmV0IGRhdGEgZnJvbSB0aGUgY29udGV4dCAqLwotQEAg LTI2MywxMSArMzA1LDExIEBAIGludCBFVlBfRGlnZXN0RmluYWwoRVZQX01EX0NUWCAqY3R4LCB1 bnMKLSAvKiBUaGUgY2FsbGVyIGNhbiBhc3N1bWUgdGhhdCB0aGlzIHJlbW92ZXMgYW55IHNlY3Jl dCBkYXRhIGZyb20gdGhlIGNvbnRleHQgKi8KLSBpbnQgRVZQX0RpZ2VzdEZpbmFsX2V4KEVWUF9N RF9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqbWQsIHVuc2lnbmVkIGludCAqc2l6ZSkKLSAJewot LSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JcmV0dXJuIEZJUFNfZGlnZXN0ZmluYWwoY3R4LCBtZCwg c2l6ZSk7Ci0tI2Vsc2UKLSAJaW50IHJldDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJ UFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJT1BFTlNTTF9hc3NlcnQoY3R4LT5kaWdl c3QtPm1kX3NpemUgPD0gRVZQX01BWF9NRF9TSVpFKTsKLSAJcmV0PWN0eC0+ZGlnZXN0LT5maW5h bChjdHgsbWQpOwotIAlpZiAoc2l6ZSAhPSBOVUxMKQotQEAgLTI3OSw3ICszMjEsNiBAQCBpbnQg RVZQX0RpZ2VzdEZpbmFsX2V4KEVWUF9NRF9DVFggKmN0eCwKLSAJCX0KLSAJbWVtc2V0KGN0eC0+ bWRfZGF0YSwwLGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSk7Ci0gCXJldHVybiByZXQ7Ci0tI2VuZGlm Ci0gCX0KLSAKLSBpbnQgRVZQX01EX0NUWF9jb3B5KEVWUF9NRF9DVFggKm91dCwgY29uc3QgRVZQ X01EX0NUWCAqaW4pCi1AQCAtMzc2LDcgKzQxNyw2IEBAIHZvaWQgRVZQX01EX0NUWF9kZXN0cm95 KEVWUF9NRF9DVFggKmN0eCkKLSAvKiBUaGlzIGNhbGwgZnJlZXMgcmVzb3VyY2VzIGFzc29jaWF0 ZWQgd2l0aCB0aGUgY29udGV4dCAqLwotIGludCBFVlBfTURfQ1RYX2NsZWFudXAoRVZQX01EX0NU WCAqY3R4KQotIAl7Ci0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSAJLyogRG9uJ3QgYXNzdW1lIGN0 eC0+bWRfZGF0YSB3YXMgY2xlYW5lZCBpbiBFVlBfRGlnZXN0X0ZpbmFsLAotIAkgKiBiZWNhdXNl IHNvbWV0aW1lcyBvbmx5IGNvcGllcyBvZiB0aGUgY29udGV4dCBhcmUgZXZlciBmaW5hbGlzZWQu Ci0gCSAqLwotQEAgLTM4OSw3ICs0MjksNiBAQCBpbnQgRVZQX01EX0NUWF9jbGVhbnVwKEVWUF9N RF9DVFggKmN0eCkKLSAJCU9QRU5TU0xfY2xlYW5zZShjdHgtPm1kX2RhdGEsY3R4LT5kaWdlc3Qt PmN0eF9zaXplKTsKLSAJCU9QRU5TU0xfZnJlZShjdHgtPm1kX2RhdGEpOwotIAkJfQotLSNlbmRp ZgotIAlpZiAoY3R4LT5wY3R4KQotIAkJRVZQX1BLRVlfQ1RYX2ZyZWUoY3R4LT5wY3R4KTsKLSAj aWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi1AQCAtMzk4LDkgKzQzNyw2IEBAIGludCBFVlBfTURf Q1RYX2NsZWFudXAoRVZQX01EX0NUWCAqY3R4KQotIAkJICogZnVuY3Rpb25hbCByZWZlcmVuY2Ug d2UgaGVsZCBmb3IgdGhpcyByZWFzb24uICovCi0gCQlFTkdJTkVfZmluaXNoKGN0eC0+ZW5naW5l KTsKLSAjZW5kaWYKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCUZJUFNfbWRfY3R4X2NsZWFudXAo Y3R4KTsKLS0jZW5kaWYKLSAJbWVtc2V0KGN0eCwnXDAnLHNpemVvZiAqY3R4KTsKLSAKLSAJcmV0 dXJuIDE7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2VfYWVzLmMuZmlwcyBv cGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2VfYWVzLmMKLS0tLSBvcGVuc3NsLTEuMC4xai9jcnlw dG8vZXZwL2VfYWVzLmMuZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA0ODMwNTI3MiArMDIwMAot KysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvZV9hZXMuYwkyMDE0LTEwLTE2IDEzOjE5OjM1 LjA4OTMwNjE5OCArMDIwMAotQEAgLTU2LDcgKzU2LDYgQEAKLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+ Ci0gI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+Ci0gI2luY2x1ZGUgImV2cF9sb2NsLmgiCi0tI2lm bmRlZiBPUEVOU1NMX0ZJUFMKLSAjaW5jbHVkZSAibW9kZXNfbGNsLmgiCi0gI2luY2x1ZGUgPG9w ZW5zc2wvcmFuZC5oPgotIAotQEAgLTczMCw3ICs3MjksNyBAQCBzdGF0aWMgaW50IGFlc19nY21f Y3RybChFVlBfQ0lQSEVSX0NUWCAqCi0gCQlpZiAoYXJnIDw9IDApCi0gCQkJcmV0dXJuIDA7Ci0g I2lmZGVmIE9QRU5TU0xfRklQUwotLQkJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSAmJiAhKGMtPmZs YWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykKLSsJCWlmIChGSVBTX21vZGUoKSAm JiAhKGMtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykKLSAJCQkJCQkgJiYg YXJnIDwgMTIpCi0gCQkJcmV0dXJuIDA7Ci0gI2VuZGlmCi1AQCAtMTE4OSw3ICsxMTg4LDcgQEAg c3RhdGljIGludCBhZXNfeHRzX2NpcGhlcihFVlBfQ0lQSEVSX0NUWAotIAkJcmV0dXJuIDA7Ci0g I2lmZGVmIE9QRU5TU0xfRklQUwotIAkvKiBSZXF1aXJlbWVudCBvZiBTUDgwMC0zOEUgKi8KLS0J aWYgKEZJUFNfbW9kdWxlX21vZGUoKSAmJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05P Tl9GSVBTX0FMTE9XKSAmJgotKwlpZiAoRklQU19tb2RlKCkgJiYgIShjdHgtPmZsYWdzICYgRVZQ X0NJUEhfRkxBR19OT05fRklQU19BTExPVykgJiYKLSAJCQkobGVuID4gKDFVTDw8MjApKjE2KSkK LSAJCXsKLSAJCUVWUGVycihFVlBfRl9BRVNfWFRTX0NJUEhFUiwgRVZQX1JfVE9PX0xBUkdFKTsK LUBAIC0xMzg2LDQgKzEzODUsMyBAQCBCTE9DS19DSVBIRVJfY3VzdG9tKE5JRF9hZXMsMTkyLDEs MTIsY2NtCi0gQkxPQ0tfQ0lQSEVSX2N1c3RvbShOSURfYWVzLDI1NiwxLDEyLGNjbSxDQ00sRVZQ X0NJUEhfRkxBR19GSVBTfENVU1RPTV9GTEFHUykKLSAKLSAjZW5kaWYKLS0jZW5kaWYKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvZV9kZXMzLmMuZmlwcyBvcGVuc3NsLTEuMC4x ai9jcnlwdG8vZXZwL2VfZGVzMy5jCi0tLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9lX2Rl czMuYy5maXBzCTIwMTQtMTAtMTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNz bC0xLjAuMWovY3J5cHRvL2V2cC9lX2RlczMuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA4OTMwNjE5 OCArMDIwMAotQEAgLTY1LDggKzY1LDYgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLSAj aW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0gCi0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLS0KLSBz dGF0aWMgaW50IGRlc19lZGVfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5z aWduZWQgY2hhciAqa2V5LAotIAkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdixpbnQgZW5j KTsKLSAKLUBAIC0yMDgsOSArMjA2LDkgQEAgc3RhdGljIGludCBkZXNfZWRlM19jZmI4X2NpcGhl cihFVlBfQ0lQSAotICAgICB9Ci0gCi0gQkxPQ0tfQ0lQSEVSX2RlZnMoZGVzX2VkZSwgREVTX0VE RV9LRVksIE5JRF9kZXNfZWRlLCA4LCAxNiwgOCwgNjQsCi0tCQkJRVZQX0NJUEhfUkFORF9LRVks IGRlc19lZGVfaW5pdF9rZXksIE5VTEwsIAotLQkJCUVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0t CQkJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKLSsJCUVWUF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBI X0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKLSsJCQlkZXNfZWRlX2luaXRf a2V5LAotKwkJCU5VTEwsIE5VTEwsIE5VTEwsCi0gCQkJZGVzM19jdHJsKQotIAotICNkZWZpbmUg ZGVzX2VkZTNfY2ZiNjRfY2lwaGVyIGRlc19lZGVfY2ZiNjRfY2lwaGVyCi1AQCAtMjE5LDIxICsy MTcsMjEgQEAgQkxPQ0tfQ0lQSEVSX2RlZnMoZGVzX2VkZSwgREVTX0VERV9LRVksCi0gI2RlZmlu ZSBkZXNfZWRlM19lY2JfY2lwaGVyIGRlc19lZGVfZWNiX2NpcGhlcgotIAotIEJMT0NLX0NJUEhF Ul9kZWZzKGRlc19lZGUzLCBERVNfRURFX0tFWSwgTklEX2Rlc19lZGUzLCA4LCAyNCwgOCwgNjQs Ci0tCQkJRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LCBOVUxMLCAKLS0JCQlF VlBfQ0lQSEVSX3NldF9hc24xX2l2LAotLQkJCUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0rCQlF VlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxU X0FTTjEsCi0rCQkJZGVzX2VkZTNfaW5pdF9rZXksCi0rCQkJTlVMTCwgTlVMTCwgTlVMTCwKLSAJ CQlkZXMzX2N0cmwpCi0gCi0gQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9L RVksTklEX2Rlc19lZGUzLDI0LDgsMSwKLS0JCSAgICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19l ZGUzX2luaXRfa2V5LE5VTEwsCi0tCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkg ICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0rCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQ SF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCi0rCQkgICAgIGRlc19lZGUz X2luaXRfa2V5LAotKwkJICAgICBOVUxMLCBOVUxMLCBOVUxMLAotIAkJICAgICBkZXMzX2N0cmwp Ci0gCi0gQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9LRVksTklEX2Rlc19l ZGUzLDI0LDgsOCwKLS0JCSAgICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5 LE5VTEwsCi0tCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkgICAgIEVWUF9DSVBI RVJfZ2V0X2FzbjFfaXYsCi0rCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8 RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCi0rCQkgICAgIGRlc19lZGUzX2luaXRfa2V5LAot KwkJICAgICBOVUxMLCBOVUxMLCBOVUxMLAotIAkJICAgICBkZXMzX2N0cmwpCi0gCi0gc3RhdGlj IGludCBkZXNfZWRlX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmtleSwKLUBAIC0zMTMsNCArMzExLDMgQEAgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Rl c19lZGUzKHZvaWQpCi0gCXJldHVybiAmZGVzX2VkZTNfZWNiOwotIH0KLSAjZW5kaWYKLS0jZW5k aWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvZV9udWxsLmMuZmlwcyBvcGVu c3NsLTEuMC4xai9jcnlwdG8vZXZwL2VfbnVsbC5jCi0tLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRv L2V2cC9lX251bGwuYy5maXBzCTIwMTQtMTAtMTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCi0r Kysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9lX251bGwuYwkyMDE0LTEwLTE2IDEzOjE5OjM1 LjA4OTMwNjE5OCArMDIwMAotQEAgLTYxLDggKzYxLDYgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0gCi0tI2lmbmRlZiBPUEVOU1NM X0ZJUFMKLS0KLSBzdGF0aWMgaW50IG51bGxfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwg Y29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotIAljb25zdCB1bnNpZ25lZCBjaGFyICppdixpbnQg ZW5jKTsKLSBzdGF0aWMgaW50IG51bGxfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2ln bmVkIGNoYXIgKm91dCwKLUBAIC03MSw3ICs2OSw3IEBAIHN0YXRpYyBjb25zdCBFVlBfQ0lQSEVS IG5fY2lwaGVyPQotIAl7Ci0gCU5JRF91bmRlZiwKLSAJMSwwLDAsCi0tCTAsCi0rCUVWUF9DSVBI X0ZMQUdfRklQUywKLSAJbnVsbF9pbml0X2tleSwKLSAJbnVsbF9jaXBoZXIsCi0gCU5VTEwsCi1A QCAtMTAxLDQgKzk5LDMgQEAgc3RhdGljIGludCBudWxsX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAq YwotIAkJbWVtY3B5KChjaGFyICopb3V0LChjb25zdCBjaGFyICopaW4saW5sKTsKLSAJcmV0dXJu IDE7Ci0gCX0KLS0jZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvZXZw X2VuYy5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9ldnBfZW5jLmMKLS0tLSBvcGVu c3NsLTEuMC4xai9jcnlwdG8vZXZwL2V2cF9lbmMuYy5maXBzCTIwMTQtMTAtMTUgMTQ6NTM6Mzku MDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9ldnBfZW5jLmMJ MjAxNC0xMC0xNiAxMzoyMTo1Ny4wNjQ1MTEzNTAgKzAyMDAKLUBAIC03MCwxNyArNzAsNTggQEAK LSAjaW5jbHVkZSAiY29uc3RhbnRfdGltZV9sb2NsLmgiCi0gI2luY2x1ZGUgImV2cF9sb2NsLmgi Ci0gCi0tI2lmZGVmIE9QRU5TU0xfRklQUwotLSNkZWZpbmUgTV9kb19jaXBoZXIoY3R4LCBvdXQs IGluLCBpbmwpIEZJUFNfY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKQotLSNlbHNlCi0gI2RlZmlu ZSBNX2RvX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCkgY3R4LT5jaXBoZXItPmRvX2NpcGhlcihj dHgsIG91dCwgaW4sIGlubCkKLS0jZW5kaWYKLSAKLSAKLSBjb25zdCBjaGFyIEVWUF92ZXJzaW9u W109IkVWUCIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsKLSsvKiBUaGUgcHVycG9zZSBvZiB0aGVzZSBpcyB0byB0cmFwIHByb2dyYW1zIHRoYXQgYXR0 ZW1wdCB0byB1c2Ugbm9uIEZJUFMKLSsgKiBhbGdvcml0aG1zIGluIEZJUFMgbW9kZSBhbmQgaWdu b3JlIHRoZSBlcnJvcnMuCi0rICovCi0rCi0rc3RhdGljIGludCBiYWRfaW5pdChFVlBfQ0lQSEVS X0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCi0rCQkgICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqaXYsIGludCBlbmMpCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgaW5p dCIpOyByZXR1cm4gMDt9Ci0rCi0rc3RhdGljIGludCBiYWRfZG9fY2lwaGVyKEVWUF9DSVBIRVJf Q1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLSsJCQkgY29uc3QgdW5zaWduZWQgY2hhciAq aW4sIHVuc2lnbmVkIGludCBpbmwpCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgdXBk YXRlIik7IHJldHVybiAwO30KLSsKLSsvKiBOQjogbm8gY2xlYW51cCBiZWNhdXNlIGl0IGlzIGFs bG93ZWQgYWZ0ZXIgZmFpbGVkIGluaXQgKi8KLSsKLStzdGF0aWMgaW50IGJhZF9zZXRfYXNuMShF VlBfQ0lQSEVSX0NUWCAqY3R4LCBBU04xX1RZUEUgKnR5cCkKLSsJeyBGSVBTX0VSUk9SX0lHTk9S RUQoIkNpcGhlciBzZXRfYXNuMSIpOyByZXR1cm4gMDt9Ci0rc3RhdGljIGludCBiYWRfZ2V0X2Fz bjEoRVZQX0NJUEhFUl9DVFggKmN0eCwgQVNOMV9UWVBFICp0eXApCi0rCXsgRklQU19FUlJPUl9J R05PUkVEKCJDaXBoZXIgZ2V0X2FzbjEiKTsgcmV0dXJuIDA7fQotK3N0YXRpYyBpbnQgYmFkX2N0 cmwoRVZQX0NJUEhFUl9DVFggKmN0eCwgaW50IHR5cGUsIGludCBhcmcsIHZvaWQgKnB0cikKLSsJ eyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBjdHJsIik7IHJldHVybiAwO30KLSsKLStzdGF0 aWMgY29uc3QgRVZQX0NJUEhFUiBiYWRfY2lwaGVyID0KLSsJewotKwkwLAotKwkwLAotKwkwLAot KwkwLAotKwkwLAotKwliYWRfaW5pdCwKLSsJYmFkX2RvX2NpcGhlciwKLSsJTlVMTCwKLSsJMCwK LSsJYmFkX3NldF9hc24xLAotKwliYWRfZ2V0X2FzbjEsCi0rCWJhZF9jdHJsLAotKwlOVUxMCi0r CX07Ci0rCi0rI2VuZGlmCi0rCi0gdm9pZCBFVlBfQ0lQSEVSX0NUWF9pbml0KEVWUF9DSVBIRVJf Q1RYICpjdHgpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hl Y2soKTsKLSsjZW5kaWYKLSAJbWVtc2V0KGN0eCwwLHNpemVvZihFVlBfQ0lQSEVSX0NUWCkpOwot IAkvKiBjdHgtPmNpcGhlcj1OVUxMOyAqLwotIAl9Ci1AQCAtMTEyLDYgKzE1MywxNCBAQCBpbnQg RVZQX0NpcGhlckluaXRfZXgoRVZQX0NJUEhFUl9DVFggKmN0Ci0gCQkJZW5jID0gMTsKLSAJCWN0 eC0+ZW5jcnlwdCA9IGVuYzsKLSAJCX0KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNf c2VsZnRlc3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9FVlBfQ0lQSEVSSU5J VF9FWCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJY3R4LT5jaXBoZXIgPSAmYmFk X2NpcGhlcjsKLSsJCXJldHVybiAwOwotKwkJfQotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9O T19FTkdJTkUKLSAJLyogV2hldGhlciBpdCdzIG5pY2Ugb3Igbm90LCAiSW5pdHMiIGNhbiBiZSB1 c2VkIG9uICJGaW5hbCInZCBjb250ZXh0cwotIAkgKiBzbyB0aGlzIGNvbnRleHQgbWF5IGFscmVh ZHkgaGF2ZSBhbiBFTkdJTkUhIFRyeSB0byBhdm9pZCByZWxlYXNpbmcKLUBAIC0xNzAsMTAgKzIx OSw2IEBAIGludCBFVlBfQ2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKLSAJCQljdHgt PmVuZ2luZSA9IE5VTEw7Ci0gI2VuZGlmCi0gCi0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQkJaWYg KEZJUFNfbW9kZSgpKQotLQkJCXJldHVybiBGSVBTX2NpcGhlcmluaXQoY3R4LCBjaXBoZXIsIGtl eSwgaXYsIGVuYyk7Ci0tI2VuZGlmCi0gCQljdHgtPmNpcGhlcj1jaXBoZXI7Ci0gCQlpZiAoY3R4 LT5jaXBoZXItPmN0eF9zaXplKQotIAkJCXsKLUBAIC0yMDcsMTAgKzI1Miw2IEBAIGludCBFVlBf Q2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5H SU5FCi0gc2tpcF90b19pbml0OgotICNlbmRpZgotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JaWYg KEZJUFNfbW9kZSgpKQotLQkJcmV0dXJuIEZJUFNfY2lwaGVyaW5pdChjdHgsIGNpcGhlciwga2V5 LCBpdiwgZW5jKTsKLS0jZW5kaWYKLSAJLyogd2UgYXNzdW1lIGJsb2NrIHNpemUgaXMgYSBwb3dl ciBvZiAyIGluICpjcnlwdFVwZGF0ZSAqLwotIAlPUEVOU1NMX2Fzc2VydChjdHgtPmNpcGhlci0+ YmxvY2tfc2l6ZSA9PSAxCi0gCSAgICB8fCBjdHgtPmNpcGhlci0+YmxvY2tfc2l6ZSA9PSA4Ci1A QCAtMjUwLDYgKzI5MSwyMiBAQCBza2lwX3RvX2luaXQ6Ci0gCQl9Ci0gCX0KLSAKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rCS8qIEFmdGVyICdrZXknIGlzIHNldCBubyBmdXJ0aGVyIHBhcmFtZXRl cnMgY2hhbmdlcyBhcmUgcGVybWlzc2libGUuCi0rCSAqIFNvIG9ubHkgY2hlY2sgZm9yIG5vbiBG SVBTIGVuYWJsaW5nIGF0IHRoaXMgcG9pbnQuCi0rCSAqLwotKwlpZiAoa2V5ICYmIEZJUFNfbW9k ZSgpKQotKwkJewotKwkJaWYgKCEoY3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfRkxBR19G SVBTKQotKwkJCSYgIShjdHgtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykp Ci0rCQkJewotKwkJCUVWUGVycihFVlBfRl9FVlBfQ0lQSEVSSU5JVF9FWCwgRVZQX1JfRElTQUJM RURfRk9SX0ZJUFMpOwotKwkJCWN0eC0+Y2lwaGVyID0gJmJhZF9jaXBoZXI7Ci0rCQkJcmV0dXJu IDA7Ci0rCQkJfQotKwkJfQotKyNlbmRpZgotKwotIAlpZihrZXkgfHwgKGN0eC0+Y2lwaGVyLT5m bGFncyAmIEVWUF9DSVBIX0FMV0FZU19DQUxMX0lOSVQpKSB7Ci0gCQlpZighY3R4LT5jaXBoZXIt PmluaXQoY3R4LGtleSxpdixlbmMpKSByZXR1cm4gMDsKLSAJfQotQEAgLTU3NSw3ICs2MzIsNiBA QCB2b2lkIEVWUF9DSVBIRVJfQ1RYX2ZyZWUoRVZQX0NJUEhFUl9DVFgKLSAKLSBpbnQgRVZQX0NJ UEhFUl9DVFhfY2xlYW51cChFVlBfQ0lQSEVSX0NUWCAqYykKLSAJewotLSNpZm5kZWYgT1BFTlNT TF9GSVBTCi0gCWlmIChjLT5jaXBoZXIgIT0gTlVMTCkKLSAJCXsKLSAJCWlmKGMtPmNpcGhlci0+ Y2xlYW51cCAmJiAhYy0+Y2lwaGVyLT5jbGVhbnVwKGMpKQotQEAgLTU4NiwxNiArNjQyLDEyIEBA IGludCBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKEVWUF9DSVBIRVJfQ1QKLSAJCX0KLSAJaWYgKGMt PmNpcGhlcl9kYXRhKQotIAkJT1BFTlNTTF9mcmVlKGMtPmNpcGhlcl9kYXRhKTsKLS0jZW5kaWYK LSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0gCWlmIChjLT5lbmdpbmUpCi0gCQkvKiBUaGUg RVZQX0NJUEhFUiB3ZSB1c2VkIGJlbG9uZ3MgdG8gYW4gRU5HSU5FLCByZWxlYXNlIHRoZQotIAkJ ICogZnVuY3Rpb25hbCByZWZlcmVuY2Ugd2UgaGVsZCBmb3IgdGhpcyByZWFzb24uICovCi0gCQlF TkdJTkVfZmluaXNoKGMtPmVuZ2luZSk7Ci0gI2VuZGlmCi0tI2lmZGVmIE9QRU5TU0xfRklQUwot LQlGSVBTX2NpcGhlcl9jdHhfY2xlYW51cChjKTsKLS0jZW5kaWYKLSAJbWVtc2V0KGMsMCxzaXpl b2YoRVZQX0NJUEhFUl9DVFgpKTsKLSAJcmV0dXJuIDE7Ci0gCX0KLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjFqL2NyeXB0by9ldnAvZXZwLmguZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2V2 cC5oCi0tLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9ldnAuaC5maXBzCTIwMTQtMTAtMTYg MTM6MTk6MzQuOTQwMzAyODM0ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9l dnAuaAkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5MDMwNjIyMCArMDIwMAotQEAgLTc1LDYgKzc1LDEw IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0gI2VuZGlmCi0gCi0rI2lmZGVmIE9QRU5T U0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAvKgotICNk ZWZpbmUgRVZQX1JDMl9LRVlfU0laRQkJMTYKLSAjZGVmaW5lIEVWUF9SQzRfS0VZX1NJWkUJCTE2 Ci1AQCAtMjgyLDEwICsyODYsNiBAQCBzdHJ1Y3QgZW52X21kX2N0eF9zdAotIAkJCQkJCSogY2xl YW5lZCAqLwotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1JFVVNFCQkweDAwMDQgLyogRG9uJ3Qg ZnJlZSB1cCBjdHgtPm1kX2RhdGEKLSAJCQkJCQkqIGluIEVWUF9NRF9DVFhfY2xlYW51cCAqLwot LS8qIEZJUFMgYW5kIHBhZCBvcHRpb25zIGFyZSBpZ25vcmVkIGluIDEuMC4wLCBkZWZpbml0aW9u cyBhcmUgaGVyZQotLSAqIHNvIHdlIGRvbid0IGFjY2lkZW50YWxseSByZXVzZSB0aGUgdmFsdWVz IGZvciBvdGhlciBwdXJwb3Nlcy4KLS0gKi8KLS0KLSAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19O T05fRklQU19BTExPVwkweDAwMDgJLyogQWxsb3cgdXNlIG9mIG5vbiBGSVBTIGRpZ2VzdAotIAkJ CQkJCSAqIGluIEZJUFMgbW9kZSAqLwotIAotQEAgLTI5Nyw2ICsyOTcsMTAgQEAgc3RydWN0IGVu dl9tZF9jdHhfc3QKLSAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEJMHgwMAkvKiBQ S0NTIzEgdjEuNSBtb2RlICovCi0gI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEJMHgx MAkvKiBYOS4zMSBtb2RlICovCi0gI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUwkJMHgy MAkvKiBQU1MgbW9kZSAqLwotKyNkZWZpbmUgTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NBTFQoY3R4 KSBcCi0rCQkoKGN0eC0+ZmxhZ3M+PjE2KSAmMHhGRkZGKSAvKiBzZWVkIGxlbmd0aCAqLwotKyNk ZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTgkweEZGRkYJLyogc2FsdCBsZW4gc2FtZSBh cyBkaWdlc3QgKi8KLSsjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQwkweEZGRkUJLyog c2FsdCBtYXggb3IgYXV0byByZWNvdmVyZWQgKi8KLSAKLSAjZGVmaW5lIEVWUF9NRF9DVFhfRkxB R19OT19JTklUCQkweDAxMDAgLyogRG9uJ3QgaW5pdGlhbGl6ZSBtZF9kYXRhICovCi0gCi1AQCAt MzQ4LDE1ICszNTIsMTUgQEAgc3RydWN0IGV2cF9jaXBoZXJfc3QKLSAvKiBjaXBoZXIgaGFuZGxl cyByYW5kb20ga2V5IGdlbmVyYXRpb24gKi8KLSAjZGVmaW5lIAlFVlBfQ0lQSF9SQU5EX0tFWQkJ MHgyMDAKLSAvKiBjaXBoZXIgaGFzIGl0cyBvd24gYWRkaXRpb25hbCBjb3B5aW5nIGxvZ2ljICov Ci0tI2RlZmluZSAJRVZQX0NJUEhfQ1VTVE9NX0NPUFkJCTB4NDAwCi0rI2RlZmluZSAJRVZQX0NJ UEhfQ1VTVE9NX0NPUFkJCTB4NDAwMAotIC8qIEFsbG93IHVzZSBkZWZhdWx0IEFTTjEgZ2V0L3Nl dCBpdiAqLwotICNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xCTB4MTAwMAotIC8q IEJ1ZmZlciBsZW5ndGggaW4gYml0cyBub3QgYnl0ZXM6IENGQjEgbW9kZSBvbmx5ICovCi0gI2Rl ZmluZQkJRVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUwkweDIwMDAKLSAvKiBOb3RlIGlmIHN1aXRh YmxlIGZvciB1c2UgaW4gRklQUyBtb2RlICovCi0tI2RlZmluZQkJRVZQX0NJUEhfRkxBR19GSVBT CQkweDQwMDAKLSsjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0ZJUFMJCTB4NDAwCi0gLyogQWxsb3cg bm9uIEZJUFMgY2lwaGVyIGluIEZJUFMgbW9kZSAqLwotLSNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdf Tk9OX0ZJUFNfQUxMT1cJMHg4MDAwCi0rI2RlZmluZQkJRVZQX0NJUEhfRkxBR19OT05fRklQU19B TExPVwkweDgwMAotIC8qIENpcGhlciBoYW5kbGVzIGFueSBhbmQgYWxsIHBhZGRpbmcgbG9naWMg YXMgd2VsbAotICAqIGFzIGZpbmFsaXNhdGlvbi4KLSAgKi8KLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjFqL2NyeXB0by9ldnAvZXZwX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9l dnBfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2V2cF9saWIuYy5maXBzCTIw MTQtMTAtMTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5 cHRvL2V2cC9ldnBfbGliLmMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTAzMDYyMjAgKzAyMDAKLUBA IC0xOTAsNiArMTkwLDkgQEAgaW50IEVWUF9DSVBIRVJfQ1RYX2Jsb2NrX3NpemUoY29uc3QgRVZQ XwotIAotIGludCBFVlBfQ2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIg Km91dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCi0gCXsKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJ cmV0dXJuIGN0eC0+Y2lwaGVyLT5kb19jaXBoZXIoY3R4LG91dCxpbixpbmwpOwotIAl9Ci0gCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL2V2cF9sb2NsLmguZmlwcyBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vZXZwL2V2cF9sb2NsLmgKLS0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8v ZXZwL2V2cF9sb2NsLmguZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM0LjkzMzMwMjY3NiArMDIwMAot KysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvZXZwX2xvY2wuaAkyMDE0LTEwLTE2IDEzOjE5 OjM1LjA5MDMwNjIyMCArMDIwMAotQEAgLTI1OCwxMCArMjU4LDkgQEAgY29uc3QgRVZQX0NJUEhF UiAqRVZQXyMjY25hbWUjI19lY2Iodm9pZAotIAlCTE9DS19DSVBIRVJfZnVuY19jZmIoY2lwaGVy IyNfIyNrZXlzaXplLGNwcmVmaXgsY2JpdHMsa3N0cnVjdCxrc2NoZWQpIFwKLSAJQkxPQ0tfQ0lQ SEVSX2RlZl9jZmIoY2lwaGVyIyNfIyNrZXlzaXplLGtzdHJ1Y3QsIFwKLSAJCQkgICAgIE5JRF8j I2NpcGhlciMjXyMja2V5c2l6ZSwga2V5c2l6ZS84LCBpdl9sZW4sIGNiaXRzLCBcCi0tCQkJICAg ICAwLCBjaXBoZXIjI19pbml0X2tleSwgTlVMTCwgXAotLQkJCSAgICAgRVZQX0NJUEhFUl9zZXRf YXNuMV9pdiwgXAotLQkJCSAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwgXAotLQkJCSAgICAg TlVMTCkKLSsJCQkgICAgIEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLCBcCi0rCQkJICAgICBj aXBoZXIjI19pbml0X2tleSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKLSsKLSAKLSBzdHJ1Y3Qg ZXZwX3BrZXlfY3R4X3N0Ci0gCXsKLUBAIC0zNjcsMTEgKzM2Niw2IEBAIGludCBQS0NTNV92Ml9Q QktERjJfa2V5aXZnZW4oRVZQX0NJUEhFUl8KLSAjZGVmaW5lIE1EMl9Jbml0CXByaXZhdGVfTUQy X0luaXQKLSAjZGVmaW5lIE1EQzJfSW5pdAlwcml2YXRlX01EQzJfSW5pdAotICNkZWZpbmUgU0hB X0luaXQJcHJpdmF0ZV9TSEFfSW5pdAotLSNkZWZpbmUgU0hBMV9Jbml0CXByaXZhdGVfU0hBMV9J bml0Ci0tI2RlZmluZSBTSEEyMjRfSW5pdAlwcml2YXRlX1NIQTIyNF9Jbml0Ci0tI2RlZmluZSBT SEEyNTZfSW5pdAlwcml2YXRlX1NIQTI1Nl9Jbml0Ci0tI2RlZmluZSBTSEEzODRfSW5pdAlwcml2 YXRlX1NIQTM4NF9Jbml0Ci0tI2RlZmluZSBTSEE1MTJfSW5pdAlwcml2YXRlX1NIQTUxMl9Jbml0 Ci0gCi0gI2RlZmluZSBCRl9zZXRfa2V5CXByaXZhdGVfQkZfc2V0X2tleQotICNkZWZpbmUgQ0FT VF9zZXRfa2V5CXByaXZhdGVfQ0FTVF9zZXRfa2V5Ci1AQCAtMzc5LDcgKzM3Myw2IEBAIGludCBQ S0NTNV92Ml9QQktERjJfa2V5aXZnZW4oRVZQX0NJUEhFUl8KLSAjZGVmaW5lIFNFRURfc2V0X2tl eQlwcml2YXRlX1NFRURfc2V0X2tleQotICNkZWZpbmUgUkMyX3NldF9rZXkJcHJpdmF0ZV9SQzJf c2V0X2tleQotICNkZWZpbmUgUkM0X3NldF9rZXkJcHJpdmF0ZV9SQzRfc2V0X2tleQotLSNkZWZp bmUgREVTX3NldF9rZXlfdW5jaGVja2VkCXByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2VkCi0g I2RlZmluZSBDYW1lbGxpYV9zZXRfa2V5CXByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleQotIAotICNl bmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9NYWtlZmlsZS5maXBzIG9w ZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvTWFrZWZpbGUKLS0tLSBvcGVuc3NsLTEuMC4xai9jcnlw dG8vZXZwL01ha2VmaWxlLmZpcHMJMjAxNC0xMC0xNSAxNDo1NDozOS4wMDAwMDAwMDAgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL01ha2VmaWxlCTIwMTQtMTAtMTYgMTM6MTk6 MzUuMDkwMzA2MjIwICswMjAwCi1AQCAtMjgsNyArMjgsNyBAQCBMSUJTUkM9IGVuY29kZS5jIGRp Z2VzdC5jIGV2cF9lbmMuYyBldnBfCi0gCWJpb19tZC5jIGJpb19iNjQuYyBiaW9fZW5jLmMgZXZw X2Vyci5jIGVfbnVsbC5jIFwKLSAJY19hbGwuYyBjX2FsbGMuYyBjX2FsbGQuYyBldnBfbGliLmMg YmlvX29rLmMgXAotIAlldnBfcGtleS5jIGV2cF9wYmUuYyBwNV9jcnB0LmMgcDVfY3JwdDIuYyBc Ci0tCWVfb2xkLmMgcG1ldGhfbGliLmMgcG1ldGhfZm4uYyBwbWV0aF9nbi5jIG1fc2lndmVyLmMg ZXZwX2ZpcHMuYwlcCi0rCWVfb2xkLmMgcG1ldGhfbGliLmMgcG1ldGhfZm4uYyBwbWV0aF9nbi5j IG1fc2lndmVyLmMgXAotIAllX2Flc19jYmNfaG1hY19zaGExLmMgZV9yYzRfaG1hY19tZDUuYwot IAotIExJQk9CSj0JZW5jb2RlLm8gZGlnZXN0Lm8gZXZwX2VuYy5vIGV2cF9rZXkubyBldnBfYWNu Zi5vIGV2cF9jbmYubyBcCi1AQCAtNDEsNyArNDEsNyBAQCBMSUJPQko9CWVuY29kZS5vIGRpZ2Vz dC5vIGV2cF9lbmMubyBldnBfCi0gCWJpb19tZC5vIGJpb19iNjQubyBiaW9fZW5jLm8gZXZwX2Vy ci5vIGVfbnVsbC5vIFwKLSAJY19hbGwubyBjX2FsbGMubyBjX2FsbGQubyBldnBfbGliLm8gYmlv X29rLm8gXAotIAlldnBfcGtleS5vIGV2cF9wYmUubyBwNV9jcnB0Lm8gcDVfY3JwdDIubyBcCi0t CWVfb2xkLm8gcG1ldGhfbGliLm8gcG1ldGhfZm4ubyBwbWV0aF9nbi5vIG1fc2lndmVyLm8gZXZw X2ZpcHMubyBcCi0rCWVfb2xkLm8gcG1ldGhfbGliLm8gcG1ldGhfZm4ubyBwbWV0aF9nbi5vIG1f c2lndmVyLm8gXAotIAllX2Flc19jYmNfaG1hY19zaGExLm8gZV9yYzRfaG1hY19tZDUubwotIAot IFNSQz0gJChMSUJTUkMpCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL21fZHNz LmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL21fZHNzLmMKLS0tLSBvcGVuc3NsLTEu MC4xai9jcnlwdG8vZXZwL21fZHNzLmMuZmlwcwkyMDE0LTEwLTE1IDE0OjUzOjM5LjAwMDAwMDAw MCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvbV9kc3MuYwkyMDE0LTEwLTE2 IDEzOjE5OjM1LjA5MDMwNjIyMCArMDIwMAotQEAgLTY2LDcgKzY2LDYgQEAKLSAjZW5kaWYKLSAK LSAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBCi0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSAKLSBzdGF0 aWMgaW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQotIAl7IHJldHVybiBTSEExX0luaXQoY3R4LT5t ZF9kYXRhKTsgfQotQEAgLTgyLDcgKzgxLDcgQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBkc2FfbWQ9 Ci0gCU5JRF9kc2FXaXRoU0hBLAotIAlOSURfZHNhV2l0aFNIQSwKLSAJU0hBX0RJR0VTVF9MRU5H VEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNULAotKwlFVlBfTURfRkxBR19QS0VZX0RJR0VT VHxFVlBfTURfRkxBR19GSVBTLAotIAlpbml0LAotIAl1cGRhdGUsCi0gCWZpbmFsLAotQEAgLTk4 LDQgKzk3LDMgQEAgY29uc3QgRVZQX01EICpFVlBfZHNzKHZvaWQpCi0gCXJldHVybigmZHNhX21k KTsKLSAJfQotICNlbmRpZgotLSNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRv L2V2cC9tX2RzczEuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvbV9kc3MxLmMKLS0t LSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL21fZHNzMS5jLmZpcHMJMjAxNC0xMC0xNSAxNDo1 MzozOS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL21fZHNz MS5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDkxMzA2MjQzICswMjAwCi1AQCAtNjgsOCArNjgsNiBA QAotICNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotICNlbmRpZgotIAotLSNpZm5kZWYgT1BFTlNT TF9GSVBTIAotLQotIHN0YXRpYyBpbnQgaW5pdChFVlBfTURfQ1RYICpjdHgpCi0gCXsgcmV0dXJu IFNIQTFfSW5pdChjdHgtPm1kX2RhdGEpOyB9Ci0gCi1AQCAtODQsNyArODIsNyBAQCBzdGF0aWMg Y29uc3QgRVZQX01EIGRzczFfbWQ9Ci0gCU5JRF9kc2EsCi0gCU5JRF9kc2FXaXRoU0hBMSwKLSAJ U0hBX0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNULAotKwlFVlBfTURf RkxBR19QS0VZX0RJR0VTVHxFVlBfTURfRkxBR19GSVBTLAotIAlpbml0LAotIAl1cGRhdGUsCi0g CWZpbmFsLAotQEAgLTEwMCw0ICs5OCwzIEBAIGNvbnN0IEVWUF9NRCAqRVZQX2RzczEodm9pZCkK LSAJcmV0dXJuKCZkc3MxX21kKTsKLSAJfQotICNlbmRpZgotLSNlbmRpZgotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWovY3J5cHRvL2V2cC9tX21kMi5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRv L2V2cC9tX21kMi5jCi0tLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9tX21kMi5jLmZpcHMJ MjAxNC0xMC0xNSAxNDo1MTowNi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xai9j cnlwdG8vZXZwL21fbWQyLmMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTEzMDYyNDMgKzAyMDAKLUBA IC02OCw2ICs2OCw3IEBACi0gI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotICNpbmNsdWRlIDxvcGVu c3NsL3JzYS5oPgotICNlbmRpZgotKyNpbmNsdWRlICJldnBfbG9jbC5oIgotIAotIHN0YXRpYyBp bnQgaW5pdChFVlBfTURfQ1RYICpjdHgpCi0gCXsgcmV0dXJuIE1EMl9Jbml0KGN0eC0+bWRfZGF0 YSk7IH0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvbV9zaGExLmMuZmlwcyBv cGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL21fc2hhMS5jCi0tLS0gb3BlbnNzbC0xLjAuMWovY3J5 cHRvL2V2cC9tX3NoYTEuYy5maXBzCTIwMTQtMTAtMTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAw Ci0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2cC9tX3NoYTEuYwkyMDE0LTEwLTE2IDEzOjE5 OjM1LjA5MTMwNjI0MyArMDIwMAotQEAgLTU5LDggKzU5LDYgQEAKLSAjaW5jbHVkZSA8c3RkaW8u aD4KLSAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSAKLS0jaWZuZGVmIE9QRU5TU0xfRklQUwotLQot ICNpZm5kZWYgT1BFTlNTTF9OT19TSEEKLSAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLUBA IC04NSw3ICs4Myw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMV9tZD0KLSAJTklEX3NoYTEs Ci0gCU5JRF9zaGExV2l0aFJTQUVuY3J5cHRpb24sCi0gCVNIQV9ESUdFU1RfTEVOR1RILAotLQlF VlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJT RU5ULAotKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElH QUxHSURfQUJTRU5UfAotKwkJRVZQX01EX0ZMQUdfRklQUywKLSAJaW5pdCwKLSAJdXBkYXRlLAot IAlmaW5hbCwKLUBAIC0xMjIsNyArMTIxLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEyMjRf bWQ9Ci0gCU5JRF9zaGEyMjQsCi0gCU5JRF9zaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiwKLSAJU0hB MjI0X0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxF VlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCi0rCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJ R05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8Ci0rCQlFVlBfTURfRkxBR19GSVBT LAotIAlpbml0MjI0LAotIAl1cGRhdGUyNTYsCi0gCWZpbmFsMjU2LAotQEAgLTE0MSw3ICsxNDEs OCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTI1Nl9tZD0KLSAJTklEX3NoYTI1NiwKLSAJTklE X3NoYTI1NldpdGhSU0FFbmNyeXB0aW9uLAotIAlTSEEyNTZfRElHRVNUX0xFTkdUSCwKLS0JRVZQ X01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VO VCwKLSsJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FM R0lEX0FCU0VOVHwKLSsJCUVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQyNTYsCi0gCXVwZGF0ZTI1 NiwKLSAJZmluYWwyNTYsCi1AQCAtMTcyLDcgKzE3Myw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQg c2hhMzg0X21kPQotIAlOSURfc2hhMzg0LAotIAlOSURfc2hhMzg0V2l0aFJTQUVuY3J5cHRpb24s Ci0gCVNIQTM4NF9ESUdFU1RfTEVOR1RILAotLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdO QVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAotKwlFVlBfTURfRkxBR19QS0VZX01F VEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAotKwkJRVZQX01EX0ZM QUdfRklQUywKLSAJaW5pdDM4NCwKLSAJdXBkYXRlNTEyLAotIAlmaW5hbDUxMiwKLUBAIC0xOTEs NyArMTkzLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGE1MTJfbWQ9Ci0gCU5JRF9zaGE1MTIs Ci0gCU5JRF9zaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiwKLSAJU0hBNTEyX0RJR0VTVF9MRU5HVEgs Ci0tCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJ RF9BQlNFTlQsCi0rCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxB R19ESUdBTEdJRF9BQlNFTlR8Ci0rCQlFVlBfTURfRkxBR19GSVBTLAotIAlpbml0NTEyLAotIAl1 cGRhdGU1MTIsCi0gCWZpbmFsNTEyLAotQEAgLTIwNiw0ICsyMDksMyBAQCBjb25zdCBFVlBfTUQg KkVWUF9zaGE1MTIodm9pZCkKLSAJeyByZXR1cm4oJnNoYTUxMl9tZCk7IH0KLSAjZW5kaWYJLyog aWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyICovCi0gCi0tI2VuZGlmCi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vZXZwL3Bfc2lnbi5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2V2 cC9wX3NpZ24uYwotLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvcF9zaWduLmMuZmlwcwky MDE0LTEwLTE1IDE0OjUzOjM5LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFqL2Ny eXB0by9ldnAvcF9zaWduLmMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTEzMDYyNDMgKzAyMDAKLUBA IC02MSw2ICs2MSw3IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0gI2luY2x1ZGUgPG9w ZW5zc2wvb2JqZWN0cy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9yc2EuaD4KLSAKLSAjaWZkZWYgdW5kZWYKLSB2b2lkIEVWUF9TaWduSW5pdChFVlBf TURfQ1RYICpjdHgsIEVWUF9NRCAqdHlwZSkKLUBAIC0xMDMsNiArMTA0LDIyIEBAIGludCBFVlBf U2lnbkZpbmFsKEVWUF9NRF9DVFggKmN0eCwgdW5zaWcKLSAJCQlnb3RvIGVycjsKLSAJCWlmIChF VlBfUEtFWV9DVFhfc2V0X3NpZ25hdHVyZV9tZChwa2N0eCwgY3R4LT5kaWdlc3QpIDw9IDApCi0g CQkJZ290byBlcnI7Ci0rCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfWDkz MSkKLSsJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1g5MzFf UEFERElORykgPD0gMCkKLSsJCQkJZ290byBlcnI7Ci0rCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9N RF9DVFhfRkxBR19QQURfUFNTKQotKwkJCXsKLSsJCQlpbnQgc2FsdGxlbjsKLSsJCQlpZiAoRVZQ X1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1BLQ1MxX1BTU19QQURESU5HKSA8 PSAwKQotKwkJCQlnb3RvIGVycjsKLSsJCQlzYWx0bGVuID0gTV9FVlBfTURfQ1RYX0ZMQUdfUFNT X1NBTFQoY3R4KTsKLSsJCQlpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVO KQotKwkJCQlzYWx0bGVuID0gLTE7Ci0rCQkJZWxzZSBpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RY X0ZMQUdfUFNTX01SRUMpCi0rCQkJCXNhbHRsZW4gPSAtMjsKLSsJCQlpZiAoRVZQX1BLRVlfQ1RY X3NldF9yc2FfcHNzX3NhbHRsZW4ocGtjdHgsIHNhbHRsZW4pIDw9IDApCi0rCQkJCWdvdG8gZXJy OwotKwkJCX0KLSAJCWlmIChFVlBfUEtFWV9zaWduKHBrY3R4LCBzaWdyZXQsICZzbHRtcCwgbSwg bV9sZW4pIDw9IDApCi0gCQkJZ290byBlcnI7Ci0gCQkqc2lnbGVuID0gc2x0bXA7Ci1kaWZmIC11 cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMuZmlwcyBvcGVuc3NsLTEuMC4x ai9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMKLS0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZXZwL3Bf dmVyaWZ5LmMuZmlwcwkyMDE0LTEwLTE1IDE0OjUzOjM5LjAwMDAwMDAwMCArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjFqL2NyeXB0by9ldnAvcF92ZXJpZnkuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5 MTMwNjI0MyArMDIwMAotQEAgLTYxLDYgKzYxLDcgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wveDUw OS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotIAotIGludCBFVlBfVmVyaWZ5RmluYWwo RVZQX01EX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWdidWYsCi0gCSAgICAgdW5z aWduZWQgaW50IHNpZ2xlbiwgRVZQX1BLRVkgKnBrZXkpCi1AQCAtODgsNiArODksMjIgQEAgaW50 IEVWUF9WZXJpZnlGaW5hbChFVlBfTURfQ1RYICpjdHgsIGNvbgotIAkJCWdvdG8gZXJyOwotIAkJ aWYgKEVWUF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJlX21kKHBrY3R4LCBjdHgtPmRpZ2VzdCkgPD0g MCkKLSAJCQlnb3RvIGVycjsKLSsJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BB RF9YOTMxKQotKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0Ff WDkzMV9QQURESU5HKSA8PSAwKQotKwkJCQlnb3RvIGVycjsKLSsJCWlmIChjdHgtPmZsYWdzICYg RVZQX01EX0NUWF9GTEFHX1BBRF9QU1MpCi0rCQkJewotKwkJCWludCBzYWx0bGVuOwotKwkJCWlm IChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfUEtDUzFfUFNTX1BBRERJ TkcpIDw9IDApCi0rCQkJCWdvdG8gZXJyOwotKwkJCXNhbHRsZW4gPSBNX0VWUF9NRF9DVFhfRkxB R19QU1NfU0FMVChjdHgpOwotKwkJCWlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1Nf TURMRU4pCi0rCQkJCXNhbHRsZW4gPSAtMTsKLSsJCQllbHNlIGlmIChzYWx0bGVuID09IEVWUF9N RF9DVFhfRkxBR19QU1NfTVJFQykKLSsJCQkJc2FsdGxlbiA9IC0yOwotKwkJCWlmIChFVlBfUEtF WV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxlbihwa2N0eCwgc2FsdGxlbikgPD0gMCkKLSsJCQkJZ290 byBlcnI7Ci0rCQkJfQotIAkJaSA9IEVWUF9QS0VZX3ZlcmlmeShwa2N0eCwgc2lnYnVmLCBzaWds ZW4sIG0sIG1fbGVuKTsKLSAJCWVycjoKLSAJCUVWUF9QS0VZX0NUWF9mcmVlKHBrY3R4KTsKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYy5maXBz IG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYwotLS0tIG9wZW5z c2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYy5maXBzCTIwMTQtMTAtMTYg MTM6MTk6MzUuMDkyMzA2MjY1ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX2Flc2F2cy5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDkyMzA2MjY1ICswMjAwCi1A QCAtMCwwICsxLDkzOSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA0 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 IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKy8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rICBOSVNUIEFFUyBBbGdvcml0 aG0gVmFsaWRhdGlvbiBTdWl0ZQotKyAgVGVzdCBQcm9ncmFtCi0rCi0rICBEb25hdGVkIHRvIE9w ZW5TU0wgYnk6Ci0rICBWLU9ORSBDb3Jwb3JhdGlvbgotKyAgMjAyNTAgQ2VudHVyeSBCbHZkLCBT dWl0ZSAzMDAKLSsgIEdlcm1hbnRvd24sIE1EIDIwODc0Ci0rICBVLlMuQS4KLSsgIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotKyNpbmNsdWRlIDxz dGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2lu Y2x1ZGUgPGVycm5vLmg+Ci0rI2luY2x1ZGUgPGFzc2VydC5oPgotKyNpbmNsdWRlIDxjdHlwZS5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0r I2luY2x1ZGUgImVfb3MuaCIKLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgQUVTIHN1 cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotKyNkZWZpbmUgQUVT X0JMT0NLX1NJWkUgMTYKLSsKLSsjZGVmaW5lIFZFUkJPU0UgMAotKwotKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotK2ludCBBRVNUZXN0KEVW UF9DSVBIRVJfQ1RYICpjdHgsCi0rCSAgICBjaGFyICphbW9kZSwgaW50IGFrZXlzeiwgdW5zaWdu ZWQgY2hhciAqYUtleSwgCi0rCSAgICB1bnNpZ25lZCBjaGFyICppVmVjLCAKLSsJICAgIGludCBk aXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJICAgIHVuc2lnbmVkIGNoYXIg KnBsYWludGV4dCwgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwgaW50IGxlbikKLSsgICAgewot KyAgICBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIgPSBOVUxMOwotKwotKyAgICBpZiAoc3RyY2Fz ZWNtcChhbW9kZSwgIkNCQyIpID09IDApCi0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0r CQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NiYygpOwotKwkJYnJlYWs7Ci0r Ci0rCQljYXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NiYygpOwotKwkJYnJlYWs7 Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2NiYygpOwotKwkJYnJl YWs7Ci0rCQl9Ci0rCi0rCX0KLSsgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkVDQiIp ID09IDApCi0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNp cGhlciA9IEVWUF9hZXNfMTI4X2VjYigpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJ CWNpcGhlciA9IEVWUF9hZXNfMTkyX2VjYigpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoK LSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2VjYigpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCX0KLSsg ICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNGQjEyOCIpID09IDApCi0rCXsKLSsJc3dp dGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4 X2NmYjEyOCgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9h ZXNfMTkyX2NmYjEyOCgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNpcGhlciA9 IEVWUF9hZXNfMjU2X2NmYjEyOCgpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCi0rCX0KLSsgICAgZWxz ZSBpZiAoc3RybmNhc2VjbXAoYW1vZGUsICJPRkIiLCAzKSA9PSAwKQotKwl7Ci0rCXN3aXRjaCAo YWtleXN6KQotKwkJewotKwkJY2FzZSAxMjg6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9vZmIo KTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9v ZmIoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAyNTY6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzI1 Nl9vZmIoKTsKLSsJCWJyZWFrOwotKwkJfQotKwl9Ci0rICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAo YW1vZGUsIkNGQjEiKSkKLSsJewotKwlzd2l0Y2ggKGFrZXlzeikKLSsJCXsKLSsJCWNhc2UgMTI4 OgotKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2ZiMSgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNl IDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NmYjEoKTsKLSsJCWJyZWFrOwotKwotKwkJ Y2FzZSAyNTY6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jZmIxKCk7Ci0rCQlicmVhazsKLSsJ CX0KLSsJfQotKyAgICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkI4IikpCi0rCXsKLSsJ c3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNf MTI4X2NmYjgoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBFVlBf YWVzXzE5Ml9jZmI4KCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMjU2OgotKwkJY2lwaGVyID0g RVZQX2Flc18yNTZfY2ZiOCgpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCX0KLSsgICAgZWxzZQotKwl7 Ci0rCXByaW50ZigiVW5rbm93biBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwlyZXR1cm4gMDsKLSsJ fQotKyAgICBpZiAoIWNpcGhlcikKLSsJewotKwlwcmludGYoIkludmFsaWQga2V5IHNpemU6ICVk XG4iLCBha2V5c3opOwotKwlyZXR1cm4gMDsgCi0rCX0KLSsgICAgaWYgKEVWUF9DaXBoZXJJbml0 X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBhS2V5LCBpVmVjLCBkaXIpIDw9IDApCi0rCXJldHVybiAw OwotKyAgICBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQotKwlNX0VWUF9DSVBIRVJfQ1RY X3NldF9mbGFncyhjdHgsIEVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpOwotKyAgICBpZiAoZGly KQotKwkJRVZQX0NpcGhlcihjdHgsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgbGVuKTsKLSsJZWxz ZQotKwkJRVZQX0NpcGhlcihjdHgsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKLSsgICAg cmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKi8KLStjaGFyICp0X3RhZ1syXSA9IHsiUExBSU5URVhUIiwgIkNJUEhF UlRFWFQifTsKLStjaGFyICp0X21vZGVbNl0gPSB7IkNCQyIsIkVDQiIsIk9GQiIsIkNGQjEiLCJD RkI4IiwiQ0ZCMTI4In07Ci0rZW51bSBNb2RlIHtDQkMsIEVDQiwgT0ZCLCBDRkIxLCBDRkI4LCBD RkIxMjh9OwotK2VudW0gWENyeXB0IHtYREVDUllQVCwgWEVOQ1JZUFR9OwotKwotKy8qPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0qLwotKy8qICBNb250ZSBDYXJsbyBUZXN0cyAgICAgICAg ICAqLwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotKy8qI2RlZmluZSBn YihhLGIpICgoKGEpWyhiKS84XSA+PiAoKGIpJTgpKSYxKSovCi0rLyojZGVmaW5lIHNiKGEsYix2 KSAoKGEpWyhiKS84XT0oKGEpWyhiKS84XSZ+KDEgPDwgKChiKSU4KSkpfCghISh2KSA8PCAoKGIp JTgpKSkqLwotKwotKyNkZWZpbmUgZ2IoYSxiKSAoKChhKVsoYikvOF0gPj4gKDctKGIpJTgpKSYx KQotKyNkZWZpbmUgc2IoYSxiLHYpICgoYSlbKGIpLzhdPSgoYSlbKGIpLzhdJn4oMSA8PCAoNy0o YiklOCkpKXwoISEodikgPDwgKDctKGIpJTgpKSkKLSsKLStpbnQgZG9fbWN0KGNoYXIgKmFtb2Rl LCAKLSsJICAgaW50IGFrZXlzeiwgdW5zaWduZWQgY2hhciAqYUtleSx1bnNpZ25lZCBjaGFyICpp VmVjLAotKwkgICBpbnQgZGlyLCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBpbnQgbGVuLAotKwkgICBG SUxFICpyZnApCi0rICAgIHsKLSsgICAgaW50IHJldCA9IDA7Ci0rICAgIHVuc2lnbmVkIGNoYXIg a2V5WzEwMV1bMzJdOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2WzEwMV1bQUVTX0JMT0NLX1NJWkVd OwotKyAgICB1bnNpZ25lZCBjaGFyIHB0ZXh0WzEwMDFdWzMyXTsKLSsgICAgdW5zaWduZWQgY2hh ciBjdGV4dFsxMDAxXVszMl07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs2NCs0XTsK LSsgICAgaW50IGksIGosIG4sIG4xLCBuMjsKLSsgICAgaW50IGltb2RlID0gMCwgbmtleXN6ID0g YWtleXN6Lzg7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhFUl9DVFhf aW5pdCgmY3R4KTsKLSsKLSsgICAgaWYgKGxlbiA+IDMyKQotKwl7Ci0rCXByaW50ZigiXG4+Pj4+ IExlbmd0aCBleGNlZWRzIDMyIGZvciAlcyAlZCA8PDw8XG5cbiIsIAotKwkgICAgICAgYW1vZGUs IGFrZXlzeik7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICBmb3IgKGltb2RlID0gMDsgaW1vZGUg PCA2OyArK2ltb2RlKQotKwlpZiAoc3RyY21wKGFtb2RlLCB0X21vZGVbaW1vZGVdKSA9PSAwKQot KwkgICAgYnJlYWs7Ci0rICAgIGlmIChpbW9kZSA9PSA2KQotKwl7IAotKwlwcmludGYoIlVucmVj b2duaXplZCBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsKLSsgICAg bWVtY3B5KGtleVswXSwgYUtleSwgbmtleXN6KTsKLSsgICAgaWYgKGlWZWMpCi0rCW1lbWNweShp dlswXSwgaVZlYywgQUVTX0JMT0NLX1NJWkUpOwotKyAgICBpZiAoZGlyID09IFhFTkNSWVBUKQot KwltZW1jcHkocHRleHRbMF0sIHRleHQsIGxlbik7Ci0rICAgIGVsc2UKLSsJbWVtY3B5KGN0ZXh0 WzBdLCB0ZXh0LCBsZW4pOwotKyAgICBmb3IgKGkgPSAwOyBpIDwgMTAwOyArK2kpCi0rCXsKLSsJ LyogcHJpbnRmKCJJdGVyYXRpb24gJWRcbiIsIGkpOyAqLwotKwlpZiAoaSA+IDApCi0rCSAgICB7 Ci0rCSAgICBmcHJpbnRmKHJmcCwiQ09VTlQgPSAlZFxuIixpKTsKLSsJICAgIE91dHB1dFZhbHVl KCJLRVkiLGtleVtpXSxua2V5c3oscmZwLDApOwotKwkgICAgaWYgKGltb2RlICE9IEVDQikgIC8q IEVDQiAqLwotKwkJT3V0cHV0VmFsdWUoIklWIixpdltpXSxBRVNfQkxPQ0tfU0laRSxyZnAsMCk7 Ci0rCSAgICAvKiBPdXRwdXQgQ2lwaGVydGV4dCB8IFBsYWludGV4dCAqLwotKwkgICAgT3V0cHV0 VmFsdWUodF90YWdbZGlyXjFdLGRpciA/IHB0ZXh0WzBdIDogY3RleHRbMF0sbGVuLHJmcCwKLSsJ CQlpbW9kZSA9PSBDRkIxKTsKLSsJICAgIH0KLSsJZm9yIChqID0gMDsgaiA8IDEwMDA7ICsraikK LSsJICAgIHsKLSsJICAgIHN3aXRjaCAoaW1vZGUpCi0rCQl7Ci0rCSAgICBjYXNlIEVDQjoKLSsJ CWlmIChqID09IDApCi0rCQkgICAgeyAvKiBzZXQgdXAgZW5jcnlwdGlvbiAqLwotKwkJICAgIHJl dCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwga2V5W2ldLCBOVUxMLCAKLSsJCQkJICBk aXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBwdGV4dFtqXSwgY3Rl eHRbal0sIGxlbik7Ci0rCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJCQltZW1jcHkocHRl eHRbaisxXSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJCW1lbWNweShjdGV4dFtq KzFdLCBwdGV4dFtqXSwgbGVuKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAg IGlmIChkaXIgPT0gWEVOQ1JZUFQpCi0rCQkJewotKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRb al0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqXSwgbGVu KTsKLSsJCQl9Ci0rCQkgICAgZWxzZQotKwkJCXsKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0 W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbal0sIGxl bik7Ci0rCQkJfQotKwkJICAgIH0KLSsJCWJyZWFrOwotKwotKwkgICAgY2FzZSBDQkM6Ci0rCSAg ICBjYXNlIE9GQjogIAotKwkgICAgY2FzZSBDRkIxMjg6Ci0rCQlpZiAoaiA9PSAwKQotKwkJICAg IHsKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGtleVtpXSwgaXZb aV0sIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwotKwkJCQkg IHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQot KwkJCW1lbWNweShwdGV4dFtqKzFdLCBpdltpXSwgbGVuKTsKLSsJCSAgICBlbHNlCi0rCQkJbWVt Y3B5KGN0ZXh0W2orMV0sIGl2W2ldLCBsZW4pOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7 Ci0rCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJCQl7Ci0rCQkJRVZQX0NpcGhlcigmY3R4 LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7Ci0rCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0 W2otMV0sIGxlbik7Ci0rCQkJfQotKwkJICAgIGVsc2UKLSsJCQl7Ci0rCQkJRVZQX0NpcGhlcigm Y3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0 ZXh0W2otMV0sIGxlbik7Ci0rCQkJfQotKwkJICAgIH0KLSsJCWJyZWFrOwotKwotKwkgICAgY2Fz ZSBDRkI4OgotKwkJaWYgKGogPT0gMCkKLSsJCSAgICB7Ci0rCQkgICAgcmV0ID0gQUVTVGVzdCgm Y3R4LCBhbW9kZSwgYWtleXN6LCBrZXlbaV0sIGl2W2ldLCAKLSsJCQkJICBkaXIsICAvKiAwID0g ZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7 Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZiAoZGlyID09IFhFTkNSWVBU KQotKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJICAg IGVsc2UKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJ CSAgICB9Ci0rCQlpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJICAgIHsKLSsJCSAgICBpZiAoaiA8 IDE2KQotKwkJCW1lbWNweShwdGV4dFtqKzFdLCAmaXZbaV1bal0sIGxlbik7Ci0rCQkgICAgZWxz ZQotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqLTE2XSwgbGVuKTsKLSsJCSAgICB9Ci0r CQllbHNlCi0rCQkgICAgewotKwkJICAgIGlmIChqIDwgMTYpCi0rCQkJbWVtY3B5KGN0ZXh0W2or MV0sICZpdltpXVtqXSwgbGVuKTsKLSsJCSAgICBlbHNlCi0rCQkJbWVtY3B5KGN0ZXh0W2orMV0s IHB0ZXh0W2otMTZdLCBsZW4pOwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwotKwkgICAgY2FzZSBD RkIxOgotKwkJaWYoaiA9PSAwKQotKwkJICAgIHsKLSsjaWYgMAotKwkJICAgIC8qIGNvbXBlbnNh dGUgZm9yIHdyb25nIGVuZGlhbm5lc3Mgb2YgaW5wdXQgZmlsZSAqLwotKwkJICAgIGlmKGkgPT0g MCkKLSsJCQlwdGV4dFswXVswXTw8PTc7Ci0rI2VuZGlmCi0rCQkgICAgcmV0ID0gQUVTVGVzdCgm Y3R4LGFtb2RlLGFrZXlzeixrZXlbaV0saXZbaV0sZGlyLAotKwkJCQlwdGV4dFtqXSwgY3RleHRb al0sIGxlbik7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZiAoZGlyID09 IFhFTkNSWVBUKQotKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4p OwotKwkJICAgIGVsc2UKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwg bGVuKTsKLSsKLSsJCSAgICB9Ci0rCQlpZihkaXIgPT0gWEVOQ1JZUFQpCi0rCQkgICAgewotKwkJ ICAgIGlmKGogPCAxMjgpCi0rCQkJc2IocHRleHRbaisxXSwwLGdiKGl2W2ldLGopKTsKLSsJCSAg ICBlbHNlCi0rCQkJc2IocHRleHRbaisxXSwwLGdiKGN0ZXh0W2otMTI4XSwwKSk7Ci0rCQkgICAg fQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZihqIDwgMTI4KQotKwkJCXNiKGN0ZXh0W2or MV0sMCxnYihpdltpXSxqKSk7Ci0rCQkgICAgZWxzZQotKwkJCXNiKGN0ZXh0W2orMV0sMCxnYihw dGV4dFtqLTEyOF0sMCkpOwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwkJfQotKwkgICAgfQotKwkt LWo7IC8qIHJlc2V0IHRvIGxhc3Qgb2YgcmFuZ2UgKi8KLSsJLyogT3V0cHV0IENpcGhlcnRleHQg fCBQbGFpbnRleHQgKi8KLSsJT3V0cHV0VmFsdWUodF90YWdbZGlyXSxkaXIgPyBjdGV4dFtqXSA6 IHB0ZXh0W2pdLGxlbixyZnAsCi0rCQkgICAgaW1vZGUgPT0gQ0ZCMSk7Ci0rCWZwcmludGYocmZw LCAiXG4iKTsgIC8qIGFkZCBzZXBhcmF0b3IgKi8KLSsKLSsJLyogQ29tcHV0ZSBuZXh0IEtFWSAq LwotKwlpZiAoZGlyID09IFhFTkNSWVBUKQotKwkgICAgewotKwkgICAgaWYgKGltb2RlID09IENG QjgpCi0rCQl7IC8qIGN0ID0gQ1Rbai0xNV0gfHwgQ1Rbai0xNF0gfHwgLi4uIHx8IENUW2pdICov Ci0rCQlmb3IgKG4xID0gMCwgbjIgPSBua2V5c3otMTsgbjEgPCBua2V5c3o7ICsrbjEsIC0tbjIp Ci0rCQkgICAgY2lwaGVydGV4dFtuMV0gPSBjdGV4dFtqLW4yXVswXTsKLSsJCX0KLSsJICAgIGVs c2UgaWYoaW1vZGUgPT0gQ0ZCMSkKLSsJCXsKLSsJCWZvcihuMT0wLG4yPWFrZXlzei0xIDsgbjEg PCBha2V5c3ogOyArK24xLC0tbjIpCi0rCQkgICAgc2IoY2lwaGVydGV4dCxuMSxnYihjdGV4dFtq LW4yXSwwKSk7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQlzd2l0Y2ggKGFrZXlzeikKLSsJCSAgICB7 Ci0rCQljYXNlIDEyODoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3RleHRbal0sIDE2KTsK LSsJCSAgICBicmVhazsKLSsJCWNhc2UgMTkyOgotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBj dGV4dFtqLTFdKzgsIDgpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzgsIGN0ZXh0W2pdLCAx Nik7Ci0rCQkgICAgYnJlYWs7Ci0rCQljYXNlIDI1NjoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4 dCwgY3RleHRbai0xXSwgMTYpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzE2LCBjdGV4dFtq XSwgMTYpOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJICAgIH0KLSsJZWxzZQotKwkgICAg ewotKwkgICAgaWYgKGltb2RlID09IENGQjgpCi0rCQl7IC8qIGN0ID0gQ1Rbai0xNV0gfHwgQ1Rb ai0xNF0gfHwgLi4uIHx8IENUW2pdICovCi0rCQlmb3IgKG4xID0gMCwgbjIgPSBua2V5c3otMTsg bjEgPCBua2V5c3o7ICsrbjEsIC0tbjIpCi0rCQkgICAgY2lwaGVydGV4dFtuMV0gPSBwdGV4dFtq LW4yXVswXTsKLSsJCX0KLSsJICAgIGVsc2UgaWYoaW1vZGUgPT0gQ0ZCMSkKLSsJCXsKLSsJCWZv cihuMT0wLG4yPWFrZXlzei0xIDsgbjEgPCBha2V5c3ogOyArK24xLC0tbjIpCi0rCQkgICAgc2Io Y2lwaGVydGV4dCxuMSxnYihwdGV4dFtqLW4yXSwwKSk7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQlz d2l0Y2ggKGFrZXlzeikKLSsJCSAgICB7Ci0rCQljYXNlIDEyODoKLSsJCSAgICBtZW1jcHkoY2lw aGVydGV4dCwgcHRleHRbal0sIDE2KTsKLSsJCSAgICBicmVhazsKLSsJCWNhc2UgMTkyOgotKwkJ ICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBwdGV4dFtqLTFdKzgsIDgpOwotKwkJICAgIG1lbWNweShj aXBoZXJ0ZXh0KzgsIHB0ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJlYWs7Ci0rCQljYXNlIDI1NjoK LSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgcHRleHRbai0xXSwgMTYpOwotKwkJICAgIG1lbWNw eShjaXBoZXJ0ZXh0KzE2LCBwdGV4dFtqXSwgMTYpOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0K LSsJICAgIH0KLSsJLyogQ29tcHV0ZSBuZXh0IGtleTogS2V5W2krMV0gPSBLZXlbaV0geG9yIGN0 ICovCi0rCWZvciAobiA9IDA7IG4gPCBua2V5c3o7ICsrbikKLSsJICAgIGtleVtpKzFdW25dID0g a2V5W2ldW25dIF4gY2lwaGVydGV4dFtuXTsKLSsJCi0rCS8qIENvbXB1dGUgbmV4dCBJViBhbmQg dGV4dCAqLwotKwlpZiAoZGlyID09IFhFTkNSWVBUKQotKwkgICAgewotKwkgICAgc3dpdGNoIChp bW9kZSkKLSsJCXsKLSsJICAgIGNhc2UgRUNCOgotKwkJbWVtY3B5KHB0ZXh0WzBdLCBjdGV4dFtq XSwgQUVTX0JMT0NLX1NJWkUpOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENCQzoKLSsJICAgIGNh c2UgT0ZCOgotKwkgICAgY2FzZSBDRkIxMjg6Ci0rCQltZW1jcHkoaXZbaSsxXSwgY3RleHRbal0s IEFFU19CTE9DS19TSVpFKTsKLSsJCW1lbWNweShwdGV4dFswXSwgY3RleHRbai0xXSwgQUVTX0JM T0NLX1NJWkUpOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENGQjg6Ci0rCQkvKiBJVltpKzFdID0g Y3QgKi8KLSsJCWZvciAobjEgPSAwLCBuMiA9IDE1OyBuMSA8IDE2OyArK24xLCAtLW4yKQotKwkJ ICAgIGl2W2krMV1bbjFdID0gY3RleHRbai1uMl1bMF07Ci0rCQlwdGV4dFswXVswXSA9IGN0ZXh0 W2otMTZdWzBdOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENGQjE6Ci0rCQlmb3IobjE9MCxuMj0x MjcgOyBuMSA8IDEyOCA7ICsrbjEsLS1uMikKLSsJCSAgICBzYihpdltpKzFdLG4xLGdiKGN0ZXh0 W2otbjJdLDApKTsKLSsJCXB0ZXh0WzBdWzBdPWN0ZXh0W2otMTI4XVswXSYweDgwOwotKwkJYnJl YWs7Ci0rCQl9Ci0rCSAgICB9Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAgIHN3aXRjaCAoaW1vZGUp Ci0rCQl7Ci0rCSAgICBjYXNlIEVDQjoKLSsJCW1lbWNweShjdGV4dFswXSwgcHRleHRbal0sIEFF U19CTE9DS19TSVpFKTsKLSsJCWJyZWFrOwotKwkgICAgY2FzZSBDQkM6Ci0rCSAgICBjYXNlIE9G QjoKLSsJICAgIGNhc2UgQ0ZCMTI4OgotKwkJbWVtY3B5KGl2W2krMV0sIHB0ZXh0W2pdLCBBRVNf QkxPQ0tfU0laRSk7Ci0rCQltZW1jcHkoY3RleHRbMF0sIHB0ZXh0W2otMV0sIEFFU19CTE9DS19T SVpFKTsKLSsJCWJyZWFrOwotKwkgICAgY2FzZSBDRkI4OgotKwkJZm9yIChuMSA9IDAsIG4yID0g MTU7IG4xIDwgMTY7ICsrbjEsIC0tbjIpCi0rCQkgICAgaXZbaSsxXVtuMV0gPSBwdGV4dFtqLW4y XVswXTsKLSsJCWN0ZXh0WzBdWzBdID0gcHRleHRbai0xNl1bMF07Ci0rCQlicmVhazsKLSsJICAg IGNhc2UgQ0ZCMToKLSsJCWZvcihuMT0wLG4yPTEyNyA7IG4xIDwgMTI4IDsgKytuMSwtLW4yKQot KwkJICAgIHNiKGl2W2krMV0sbjEsZ2IocHRleHRbai1uMl0sMCkpOwotKwkJY3RleHRbMF1bMF09 cHRleHRbai0xMjhdWzBdJjB4ODA7Ci0rCQlicmVhazsKLSsJCX0KLSsJICAgIH0KLSsJfQotKyAg ICAKLSsgICAgcmV0dXJuIHJldDsKLSsgICAgfQotKwotKy8qPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KLSsgICMgQ29uZmlnIGluZm8gZm9yIHYtb25lCi0rICAjIEFFU1ZTIE1NVCB0ZXN0IGRh dGEgZm9yIEVDQgotKyAgIyBTdGF0ZSA6IEVuY3J5cHQgYW5kIERlY3J5cHQKLSsgICMgS2V5IExl bmd0aCA6IDI1NgotKyAgIyBGcmkgQXVnIDMwIDA0OjA3OjIyIFBNCi0rICAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKi8KLSsKLStpbnQgcHJvY19maWxlKGNoYXIgKnJxZmlsZSwgY2hhciAq cnNwZmlsZSkKLSsgICAgewotKyAgICBjaGFyIGFmblsyNTZdLCByZm5bMjU2XTsKLSsgICAgRklM RSAqYWZwID0gTlVMTCwgKnJmcCA9IE5VTEw7Ci0rICAgIGNoYXIgaWJ1ZlsyMDQ4XTsKLSsgICAg Y2hhciB0YnVmWzIwNDhdOwotKyAgICBpbnQgaWxlbiwgbGVuLCByZXQgPSAwOwotKyAgICBjaGFy IGFsZ29bOF0gPSAiIjsKLSsgICAgY2hhciBhbW9kZVs4XSA9ICIiOwotKyAgICBjaGFyIGF0ZXN0 WzhdID0gIiI7Ci0rICAgIGludCBha2V5c3ogPSAwOwotKyAgICB1bnNpZ25lZCBjaGFyIGlWZWNb MjBdLCBhS2V5WzQwXTsKLSsgICAgaW50IGRpciA9IC0xLCBlcnIgPSAwLCBzdGVwID0gMDsKLSsg ICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMjA0OF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lw aGVydGV4dFsyMDQ4XTsKLSsgICAgY2hhciAqcnA7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsK LSsgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgaWYgKCFycWZpbGUgfHwg ISgqcnFmaWxlKSkKLSsJewotKwlwcmludGYoIk5vIHJlcSBmaWxlXG4iKTsKLSsJcmV0dXJuIC0x OwotKwl9Ci0rICAgIHN0cmNweShhZm4sIHJxZmlsZSk7Ci0rCi0rICAgIGlmICgoYWZwID0gZm9w ZW4oYWZuLCAiciIpKSA9PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTog JXMsICVzXG4iLCAKLSsJICAgICAgIGFmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJcmV0dXJuIC0x OwotKwl9Ci0rICAgIGlmICghcnNwZmlsZSkKLSsJewotKwlzdHJjcHkocmZuLGFmbik7Ci0rCXJw PXN0cnN0cihyZm4sInJlcS8iKTsKLSsjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsJaWYgKCFy cCkKLSsJICAgIHJwPXN0cnN0cihyZm4sInJlcVxcIik7Ci0rI2VuZGlmCi0rCWFzc2VydChycCk7 Ci0rCW1lbWNweShycCwicnNwIiwzKTsKLSsJcnAgPSBzdHJzdHIocmZuLCAiLnJlcSIpOwotKwlt ZW1jcHkocnAsICIucnNwIiwgNCk7Ci0rCXJzcGZpbGUgPSByZm47Ci0rCX0KLSsgICAgaWYgKChy ZnAgPSBmb3Blbihyc3BmaWxlLCAidyIpKSA9PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90 IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKLSsJICAgICAgIHJmbiwgc3RyZXJyb3IoZXJybm8pKTsK LSsJZmNsb3NlKGFmcCk7Ci0rCWFmcCA9IE5VTEw7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICB3 aGlsZSAoIWVyciAmJiAoZmdldHMoaWJ1Ziwgc2l6ZW9mKGlidWYpLCBhZnApKSAhPSBOVUxMKQot Kwl7Ci0rCXRpZHlfbGluZSh0YnVmLCBpYnVmKTsKLSsJaWxlbiA9IHN0cmxlbihpYnVmKTsKLSsJ LyogICAgICBwcmludGYoInN0ZXA9JWQgaWJ1Zj0lcyIsc3RlcCxpYnVmKTsgKi8KLSsJc3dpdGNo IChzdGVwKQotKwkgICAgewotKwljYXNlIDA6ICAvKiByZWFkIHByZWFtYmxlICovCi0rCSAgICBp ZiAoaWJ1ZlswXSA9PSAnXG4nKQotKwkJeyAvKiBlbmQgb2YgcHJlYW1ibGUgKi8KLSsJCWlmICgo KmFsZ28gPT0gJ1wwJykgfHwKLSsJCSAgICAoKmFtb2RlID09ICdcMCcpIHx8Ci0rCQkgICAgKGFr ZXlzeiA9PSAwKSkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJNaXNzaW5nIEFsZ29yaXRobSwg TW9kZSBvciBLZXlTaXplICglcy8lcy8lZClcbiIsCi0rCQkJICAgYWxnbyxhbW9kZSxha2V5c3op OwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBm cHV0cyhpYnVmLCByZnApOwotKwkJICAgICsrIHN0ZXA7Ci0rCQkgICAgfQotKwkJfQotKwkgICAg ZWxzZSBpZiAoaWJ1ZlswXSAhPSAnIycpCi0rCQl7Ci0rCQlwcmludGYoIkludmFsaWQgcHJlYW1i bGUgaXRlbTogJXNcbiIsIGlidWYpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJ CXsgLyogcHJvY2VzcyBwcmVhbWJsZSAqLwotKwkJY2hhciAqeHAsICpwcCA9IGlidWYrMjsKLSsJ CWludCBuOwotKwkJaWYgKGFrZXlzeikKLSsJCSAgICB7IC8qIGluc2VydCBjdXJyZW50IHRpbWUg JiBkYXRlICovCi0rCQkgICAgdGltZV90IHJ0aW0gPSB0aW1lKDApOwotKwkJICAgIGZwcmludGYo cmZwLCAiIyAlcyIsIGN0aW1lKCZydGltKSk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsK LSsJCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJICAgIGlmIChzdHJuY21wKHBwLCAiQUVTVlMg IiwgNikgPT0gMCkKLSsJCQl7Ci0rCQkJc3RyY3B5KGFsZ28sICJBRVMiKTsKLSsJCQkvKiBnZXQg dGVzdCB0eXBlICovCi0rCQkJcHAgKz0gNjsKLSsJCQl4cCA9IHN0cmNocihwcCwgJyAnKTsKLSsJ CQluID0geHAtcHA7Ci0rCQkJc3RybmNweShhdGVzdCwgcHAsIG4pOwotKwkJCWF0ZXN0W25dID0g J1wwJzsKLSsJCQkvKiBnZXQgbW9kZSAqLwotKwkJCXhwID0gc3RycmNocihwcCwgJyAnKTsgLyog Z2V0IG1vZGUiICovCi0rCQkJbiA9IHN0cmxlbih4cCsxKS0xOwotKwkJCXN0cm5jcHkoYW1vZGUs IHhwKzEsIG4pOwotKwkJCWFtb2RlW25dID0gJ1wwJzsKLSsJCQkvKiBhbW9kZVszXSA9ICdcMCc7 ICovCi0rCQkJaWYgKFZFUkJPU0UpCi0rCQkJCXByaW50ZigiVGVzdCA9ICVzLCBNb2RlID0gJXNc biIsIGF0ZXN0LCBhbW9kZSk7Ci0rCQkJfQotKwkJICAgIGVsc2UgaWYgKHN0cm5jYXNlY21wKHBw LCAiS2V5IExlbmd0aCA6ICIsIDEzKSA9PSAwKQotKwkJCXsKLSsJCQlha2V5c3ogPSBhdG9pKHBw KzEzKTsKLSsJCQlpZiAoVkVSQk9TRSkKLSsJCQkJcHJpbnRmKCJLZXkgc2l6ZSA9ICVkXG4iLCBh a2V5c3opOwotKwkJCX0KLSsJCSAgICB9Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSAx OiAgLyogW0VOQ1JZUFRdIHwgW0RFQ1JZUFRdICovCi0rCSAgICBpZiAoaWJ1ZlswXSA9PSAnWycp Ci0rCQl7Ci0rCQlmcHV0cyhpYnVmLCByZnApOwotKwkJKytzdGVwOwotKwkJaWYgKHN0cm5jYXNl Y21wKGlidWYsICJbRU5DUllQVF0iLCA5KSA9PSAwKQotKwkJICAgIGRpciA9IDE7Ci0rCQllbHNl IGlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0RFQ1JZUFRdIiwgOSkgPT0gMCkKLSsJCSAgICBkaXIg PSAwOwotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQga2V5d29yZDog JXNcbiIsIGlidWYpOwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJYnJlYWs7Ci0rCQl9 Ci0rCSAgICBlbHNlIGlmIChkaXIgPT0gLTEpCi0rCQl7Ci0rCQllcnIgPSAxOwotKwkJcHJpbnRm KCJNaXNzaW5nIEVOQ1JZUFQvREVDUllQVCBrZXl3b3JkXG4iKTsKLSsJCWJyZWFrOwotKwkJfQot KwkgICAgZWxzZSAKLSsJCXN0ZXAgPSAyOwotKwotKwljYXNlIDI6IC8qIEtFWSA9IHh4eHggKi8K LSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZigqaWJ1ZiA9PSAnXG4nKQotKwkJYnJl YWs7Ci0rCSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQgPSAiLDgpKQotKwkJYnJlYWs7 Ci0rCi0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIktFWSA9ICIsIDYpICE9IDApCi0rCQl7 Ci0rCQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBl bHNlCi0rCQl7Ci0rCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzYsIGFLZXkpOwotKwkJaWYg KGxlbiA8IDApCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOwotKwkJ ICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJLRVki LCBhS2V5LCBsZW4pOwotKwkJaWYgKHN0cmNtcChhbW9kZSwgIkVDQiIpID09IDApCi0rCQkgICAg ewotKwkJICAgIG1lbXNldChpVmVjLCAwLCBzaXplb2YoaVZlYykpOwotKwkJICAgIHN0ZXAgPSAo ZGlyKT8gNDogNTsgIC8qIG5vIGl2ZWMgZm9yIEVDQiAqLwotKwkJICAgIH0KLSsJCWVsc2UKLSsJ CSAgICArK3N0ZXA7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSAzOiAvKiBJViA9IHh4 eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1 ZiwgIklWID0gIiwgNSkgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBJVlxuIik7Ci0r CQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJbGVuID0gaGV4MmJpbigoY2hh ciopaWJ1Zis1LCBpVmVjKTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmlu dGYoIkludmFsaWQgSVZcbiIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAg ICB9Ci0rCQlQcmludFZhbHVlKCJJViIsIGlWZWMsIGxlbik7Ci0rCQlzdGVwID0gKGRpcik/IDQ6 IDU7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSA0OiAvKiBQTEFJTlRFWFQgPSB4eHh4 ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYs ICJQTEFJTlRFWFQgPSAiLCAxMikgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBQTEFJ TlRFWFRcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWludCBu biA9IHN0cmxlbihpYnVmKzEyKTsKLSsJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKLSsJCSAg ICBsZW49YmludDJiaW4oaWJ1ZisxMixubi0xLHBsYWludGV4dCk7Ci0rCQllbHNlCi0rCQkgICAg bGVuPWhleDJiaW4oaWJ1ZisxMiwgcGxhaW50ZXh0KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAg IHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgUExBSU5URVhUOiAlcyIsIGlidWYrMTIpOwotKwkJ ICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlpZiAobGVuID49IHNpemVv ZihwbGFpbnRleHQpKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkJ1ZmZlciBvdmVyZmxvd1xu Iik7Ci0rCQkgICAgfQotKwkJUHJpbnRWYWx1ZSgiUExBSU5URVhUIiwgKHVuc2lnbmVkIGNoYXIq KXBsYWludGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSA9PSAwKSAgLyog TW9udGUgQ2FybG8gVGVzdCAqLwotKwkJICAgIHsKLSsJCSAgICBpZihkb19tY3QoYW1vZGUsIGFr ZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJICAgICAgZGlyLCAodW5zaWduZWQgY2hhciopcGxhaW50 ZXh0LCBsZW4sIAotKwkJCSAgICAgIHJmcCkgPCAwKQotKwkJCUVYSVQoMSk7Ci0rCQkgICAgfQot KwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5 c3osIGFLZXksIGlWZWMsIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlw dCAqLwotKwkJCQkgIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCSAgICBPdXRwdXRW YWx1ZSgiQ0lQSEVSVEVYVCIsY2lwaGVydGV4dCxsZW4scmZwLAotKwkJCQkhc3RyY21wKGFtb2Rl LCJDRkIxIikpOwotKwkJICAgIH0KLSsJCXN0ZXAgPSA2OwotKwkJfQotKwkgICAgYnJlYWs7Ci0r Ci0rCWNhc2UgNTogLyogQ0lQSEVSVEVYVCA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJm cCk7Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIkNJUEhFUlRFWFQgPSAiLCAxMykgIT0g MCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0K LSsJICAgIGVsc2UKLSsJCXsKLSsJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKLSsJCSAgICBs ZW49YmludDJiaW4oaWJ1ZisxMyxzdHJsZW4oaWJ1ZisxMyktMSxjaXBoZXJ0ZXh0KTsKLSsJCWVs c2UKLSsJCSAgICBsZW4gPSBoZXgyYmluKGlidWYrMTMsY2lwaGVydGV4dCk7Ci0rCQlpZiAobGVu IDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIENJUEhFUlRFWFRcbiIpOwot KwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCi0rCQlQcmludFZhbHVl KCJDSVBIRVJURVhUIiwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYXRlc3QsICJN Q1QiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVzdCAqLwotKwkJICAgIHsKLSsJCSAgICBkb19t Y3QoYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJICAgZGlyLCBjaXBoZXJ0ZXh0LCBs ZW4sIHJmcCk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICByZXQgPSBBRVNU ZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAotKwkJCQkgIGRpciwgIC8qIDAg PSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIHBsYWludGV4dCwgY2lwaGVydGV4dCwg bGVuKTsKLSsJCSAgICBPdXRwdXRWYWx1ZSgiUExBSU5URVhUIiwodW5zaWduZWQgY2hhciAqKXBs YWludGV4dCxsZW4scmZwLAotKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOwotKwkJICAgIH0K LSsJCXN0ZXAgPSA2OwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgNjoKLSsJICAgIGlm IChpYnVmWzBdICE9ICdcbicpCi0rCQl7Ci0rCQllcnIgPSAxOwotKwkJcHJpbnRmKCJNaXNzaW5n IHRlcm1pbmF0b3JcbiIpOwotKwkJfQotKwkgICAgZWxzZSBpZiAoc3RyY21wKGF0ZXN0LCAiTUNU IikgIT0gMCkKLSsJCXsgLyogTUNUIGFscmVhZHkgYWRkZWQgdGVybWluYXRpbmcgbmwgKi8KLSsJ CWZwdXRzKGlidWYsIHJmcCk7Ci0rCQl9Ci0rCSAgICBzdGVwID0gMTsKLSsJICAgIGJyZWFrOwot KwkgICAgfQotKwl9Ci0rICAgIGlmIChyZnApCi0rCWZjbG9zZShyZnApOwotKyAgICBpZiAoYWZw KQotKwlmY2xvc2UoYWZwKTsKLSsgICAgcmV0dXJuIGVycjsKLSsgICAgfQotKwotKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsgIFByb2Nlc3Nl cyBlaXRoZXIgYSBzaW5nbGUgZmlsZSBvciAKLSsgIGEgc2V0IG9mIGZpbGVzIHdob3NlIG5hbWVz IGFyZSBwYXNzZWQgaW4gYSBmaWxlLgotKyAgQSBzaW5nbGUgZmlsZSBpcyBzcGVjaWZpZWQgYXM6 Ci0rICAgIGFlc190ZXN0IC1mIHh4eC5yZXEKLSsgIEEgc2V0IG9mIGZpbGVzIGlzIHNwZWNpZmll ZCBhczoKLSsgICAgYWVzX3Rlc3QgLWQgeHh4eHgueHh4Ci0rICBUaGUgZGVmYXVsdCBpczogLWQg cmVxLnR4dAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKi8KLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rICAgIHsKLSsgICAgY2hh ciAqcnFsaXN0ID0gInJlcS50eHQiLCAqcnNwZmlsZSA9IE5VTEw7Ci0rICAgIEZJTEUgKmZwID0g TlVMTDsKLSsgICAgY2hhciBmblsyNTBdID0gIiIsIHJmblsyNTZdID0gIiI7Ci0rICAgIGludCBm X29wdCA9IDAsIGRfb3B0ID0gMTsKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmKCFG SVBTX21vZGVfc2V0KDEpKQotKwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKwlFWElUKDEpOwot Kwl9Ci0rI2VuZGlmCi0rICAgIGlmIChhcmdjID4gMSkKLSsJewotKwlpZiAoc3RyY2FzZWNtcChh cmd2WzFdLCAiLWQiKSA9PSAwKQotKwkgICAgewotKwkgICAgZF9vcHQgPSAxOwotKwkgICAgfQot KwllbHNlIGlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZiIpID09IDApCi0rCSAgICB7Ci0rCSAg ICBmX29wdCA9IDE7Ci0rCSAgICBkX29wdCA9IDA7Ci0rCSAgICB9Ci0rCWVsc2UKLSsJICAgIHsK LSsJICAgIHByaW50ZigiSW52YWxpZCBwYXJhbWV0ZXI6ICVzXG4iLCBhcmd2WzFdKTsKLSsJICAg IHJldHVybiAwOwotKwkgICAgfQotKwlpZiAoYXJnYyA8IDMpCi0rCSAgICB7Ci0rCSAgICBwcmlu dGYoIk1pc3NpbmcgcGFyYW1ldGVyXG4iKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwlp ZiAoZF9vcHQpCi0rCSAgICBycWxpc3QgPSBhcmd2WzJdOwotKwllbHNlCi0rCSAgICB7Ci0rCSAg ICBzdHJjcHkoZm4sIGFyZ3ZbMl0pOwotKwkgICAgcnNwZmlsZSA9IGFyZ3ZbM107Ci0rCSAgICB9 Ci0rCX0KLSsgICAgaWYgKGRfb3B0KQotKwl7IC8qIGxpc3Qgb2YgZmlsZXMgKGRpcmVjdG9yeSkg Ki8KLSsJaWYgKCEoZnAgPSBmb3BlbihycWxpc3QsICJyIikpKQotKwkgICAgewotKwkgICAgcHJp bnRmKCJDYW5ub3Qgb3BlbiByZXEgbGlzdCBmaWxlXG4iKTsKLSsJICAgIHJldHVybiAtMTsKLSsJ ICAgIH0KLSsJd2hpbGUgKGZnZXRzKGZuLCBzaXplb2YoZm4pLCBmcCkpCi0rCSAgICB7Ci0rCSAg ICBzdHJ0b2soZm4sICJcclxuIik7Ci0rCSAgICBzdHJjcHkocmZuLCBmbik7Ci0rCSAgICBpZiAo VkVSQk9TRSkKLSsJCXByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIHJmbik7Ci0rCSAgICBpZiAo cHJvY19maWxlKHJmbiwgcnNwZmlsZSkpCi0rCQl7Ci0rCQlwcmludGYoIj4+PiBQcm9jZXNzaW5n IGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwgcmZuKTsKLSsJCUVYSVQoMSk7Ci0rCQl9Ci0rCSAgICB9 Ci0rCWZjbG9zZShmcCk7Ci0rCX0KLSsgICAgZWxzZSAvKiBzaW5nbGUgZmlsZSAqLwotKwl7Ci0r CWlmIChWRVJCT1NFKQotKwkgICAgcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgZm4pOwotKwlp ZiAocHJvY19maWxlKGZuLCByc3BmaWxlKSkKLSsJICAgIHsKLSsJICAgIHByaW50ZigiPj4+IFBy b2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCBmbik7Ci0rCSAgICB9Ci0rCX0KLSsgICAg RVhJVCgwKTsKLSsgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19jbWFjdGVzdC5jLmZpcHMgb3BlbnNz bC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2NtYWN0ZXN0LmMKLS0tLSBvcGVuc3NsLTEu MC4xai9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfY21hY3Rlc3QuYy5maXBzCTIwMTQtMTAtMTYgMTM6 MTk6MzUuMDkyMzA2MjY1ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX2NtYWN0ZXN0LmMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTIzMDYyNjUgKzAyMDAKLUBA IC0wLDAgKzEsNTE3IEBACi0rLyogZmlwc19jbWFjdGVzdC5jICovCi0rLyogV3JpdHRlbiBieSBE ciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0r ICogcHJvamVjdCAyMDA1LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChj KSAyMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0r ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0r ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNv ZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8v d3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtp dCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lv biwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50Ogot KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAq Ci0rICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRl biBieSBFcmljIFlvdW5nCi0rICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29m dC5jb20pLgotKyAqCi0rICovCi0rCi0rI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKLSsKLSsjaW5j bHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvY21hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIENN QUMgc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rc3RhdGlj IGludCBjbWFjX3Rlc3QoY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxFICpvdXQsIEZJTEUg KmluLAotKwlpbnQgbW9kZSwgaW50IEtsZW5fY291bnRzX2tleXMsIGludCBrbm93bl9rZXlsZW4p OwotK3N0YXRpYyBpbnQgcHJpbnRfY21hY19nZW4oY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBG SUxFICpvdXQsCi0rCQl1bnNpZ25lZCBjaGFyICpLZXksIGludCBLbGVuLAotKwkJdW5zaWduZWQg Y2hhciAqTXNnLCBpbnQgTXNnbGVuLAotKwkJaW50IFRsZW4pOwotK3N0YXRpYyBpbnQgcHJpbnRf Y21hY192ZXIoY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxFICpvdXQsCi0rCQl1bnNpZ25l ZCBjaGFyICpLZXksIGludCBLbGVuLAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTXNnbGVu LAotKwkJdW5zaWduZWQgY2hhciAqTWFjLCBpbnQgTWFjbGVuLAotKwkJaW50IFRsZW4pOwotKwot KyNpZmRlZiBGSVBTX0FMR1ZTCi0raW50IGZpcHNfY21hY3Rlc3RfbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCi0rI2Vsc2UKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rI2Vu ZGlmCi0rCXsKLSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsJaW50IG1vZGUgPSAw OwkJLyogMCA9PiBHZW5lcmF0ZSwgMSA9PiBWZXJpZnkgKi8KLSsJaW50IEtsZW5fY291bnRzX2tl eXMgPSAwOyAvKiAwID0+IEtsZW4gaXMgc2l6ZSBvZiBvbmUga2V5Ci0rCQkJCSAgICAgMSA9PiBL bGVuIGlzIGFtb3VudCBvZiBrZXlzCi0rCQkJCSAgKi8KLSsJaW50IGtub3duX2tleWxlbiA9IDA7 CS8qIE9ubHkgc2V0IHdoZW4gS2xlbl9jb3VudHNfa2V5cyA9IDEgKi8KLSsJY29uc3QgRVZQX0NJ UEhFUiAqY2lwaGVyID0gMDsKLSsJaW50IHJldCA9IDE7Ci0rCWZpcHNfYWxndGVzdF9pbml0KCk7 Ci0rCi0rCXdoaWxlIChhcmdjID4gMSAmJiBhcmd2WzFdWzBdID09ICctJykKLSsJCXsKLSsJCXN3 aXRjaCAoYXJndlsxXVsxXSkKLSsJCQl7Ci0rCQljYXNlICdhJzoKLSsJCQl7Ci0rCQkJY2hhciAq cCA9ICZhcmd2WzFdWzJdOwotKwkJCWlmICgqcCA9PSAnXDAnKQotKwkJCQl7Ci0rCQkJCWlmIChh cmdjIDw9IDIpCi0rCQkJCQl7Ci0rCQkJCQlmcHJpbnRmKHN0ZGVyciwgIk9wdGlvbiAlcyBuZWVk cyBhIHZhbHVlXG4iLCBhcmd2WzFdKTsKLSsJCQkJCWdvdG8gZW5kOwotKwkJCQkJfQotKwkJCQlh cmd2Kys7Ci0rCQkJCWFyZ2MtLTsKLSsJCQkJcCA9ICZhcmd2WzFdWzBdOwotKwkJCQl9Ci0rCQkJ aWYgKCFzdHJjbXAocCwgImFlczEyOCIpKQotKwkJCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jYmMo KTsKLSsJCQllbHNlIGlmICghc3RyY21wKHAsICJhZXMxOTIiKSkKLSsJCQkJY2lwaGVyID0gRVZQ X2Flc18xOTJfY2JjKCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcChwLCAiYWVzMjU2IikpCi0rCQkJ CWNpcGhlciA9IEVWUF9hZXNfMjU2X2NiYygpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAocCwgInRk ZWEzIikgfHwgIXN0cmNtcChwLCAidGRlczMiKSkKLSsJCQkJewotKwkJCQljaXBoZXIgPSBFVlBf ZGVzX2VkZTNfY2JjKCk7Ci0rCQkJCUtsZW5fY291bnRzX2tleXMgPSAxOwotKwkJCQlrbm93bl9r ZXlsZW4gPSA4OwotKwkJCQl9Ci0rCQkJZWxzZQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJy LCAiVW5rbm93biBhbGdvcml0aG0gJXNcbiIsIHApOwotKwkJCQlnb3RvIGVuZDsKLSsJCQkJfQot KwkJCX0KLSsJCQlicmVhazsKLSsJCWNhc2UgJ2cnOgotKwkJCW1vZGUgPSAwOwotKwkJCWJyZWFr OwotKwkJY2FzZSAndic6Ci0rCQkJbW9kZSA9IDE7Ci0rCQkJYnJlYWs7Ci0rCQlkZWZhdWx0Ogot KwkJCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBvcHRpb24gJXNcbiIsIGFyZ3ZbMV0pOwotKwkJ CWdvdG8gZW5kOwotKwkJCX0KLSsJCWFyZ3YrKzsKLSsJCWFyZ2MtLTsKLSsJCX0KLSsJaWYgKGFy Z2MgPT0gMSkKLSsJCWluID0gc3RkaW47Ci0rCWVsc2UKLSsJCWluID0gZm9wZW4oYXJndlsxXSwg InIiKTsKLSsKLSsJaWYgKGFyZ2MgPCAyKQotKwkJb3V0ID0gc3Rkb3V0OwotKwllbHNlCi0rCQlv dXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOwotKwotKwlpZiAoIWluKQotKwkJewotKwkJZnByaW50 ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3Rv IGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFvdXQpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZB VEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0K LSsKLSsJaWYgKCFjbWFjX3Rlc3QoY2lwaGVyLCBvdXQsIGluLCBtb2RlLAotKwkJCUtsZW5fY291 bnRzX2tleXMsIGtub3duX2tleWxlbikpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFM IGNtYWMgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwll bHNlCi0rCQlyZXQgPSAwOwotKwotKwllbmQ6Ci0rCi0rCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4p KQotKwkJZmNsb3NlKGluKTsKLSsJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCi0rCQlmY2xv c2Uob3V0KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJfQotKwotKyNkZWZpbmUgQ01BQ19URVNU X01BWExJTkVMRU4JMTUwMDAwCi0rCi0raW50IGNtYWNfdGVzdChjb25zdCBFVlBfQ0lQSEVSICpj aXBoZXIsIEZJTEUgKm91dCwgRklMRSAqaW4sCi0rCWludCBtb2RlLCBpbnQgS2xlbl9jb3VudHNf a2V5cywgaW50IGtub3duX2tleWxlbikKLSsJewotKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYs ICpwLCAqcTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwl1bnNpZ25lZCBjaGFyICoqS2V5 cyA9IE5VTEwsICpNc2cgPSBOVUxMLCAqTWFjID0gTlVMTDsKLSsJdW5zaWduZWQgY2hhciAqS2V5 ID0gTlVMTDsKLSsJaW50IENvdW50LCBLbGVuLCBNbGVuLCBUbGVuOwotKwlsb25nIEtleWxlbiwg TXNnbGVuLCBNYWNsZW47Ci0rCWludCByZXQgPSAwOwotKwlpbnQgbG51bSA9IDA7Ci0rCi0rCW9s aW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoQ01BQ19URVNUX01BWExJTkVMRU4pOwotKwlsaW5lYnVm ID0gT1BFTlNTTF9tYWxsb2MoQ01BQ19URVNUX01BWExJTkVMRU4pOwotKwotKwlpZiAoIWxpbmVi dWYgfHwgIW9saW5lYnVmKQotKwkJZ290byBlcnJvcjsKLSsKLSsJQ291bnQgPSAtMTsKLSsJS2xl biA9IC0xOwotKwlNbGVuID0gLTE7Ci0rCVRsZW4gPSAtMTsKLSsKLSsJd2hpbGUgKGZnZXRzKG9s aW5lYnVmLCBDTUFDX1RFU1RfTUFYTElORUxFTiwgaW4pKQotKwkJewotKwkJbG51bSsrOwotKwkJ c3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKLSsJCWtleXdvcmQgPSBsaW5lYnVmOwotKwkJLyog U2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikq a2V5d29yZCkpCi0rCQkJa2V5d29yZCsrOwotKwotKwkJLyogU2tpcCBjb21tZW50cyAqLwotKwkJ aWYgKGtleXdvcmRbMF0gPT0gJyMnKQotKwkJCXsKLSsJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91 dCkgPCAwKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsKLSsJCS8q IExvb2sgZm9yID0gc2lnbiAqLwotKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkJ LyogSWYgbm8gPSBvciBzdGFydHMgd2l0aCBbIChmb3IgW0w9MjBdIGxpbmUpIGp1c3QgY29weSAq LwotKwkJaWYgKCFwKQotKwkJCXsKLSsJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQot KwkJCQlnb3RvIGVycm9yOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsKLSsJCXEgPSBwIC0gMTsK LSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVu c2lnbmVkIGNoYXIpKnEpKQotKwkJCSpxLS0gPSAwOwotKwotKwkJKnAgPSAwOwotKwkJdmFsdWUg PSBwICsgMTsKLSsKLSsJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJ CXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCi0rCQkJdmFsdWUrKzsKLSsK LSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCQlwID0gdmFsdWUg KyBzdHJsZW4odmFsdWUpIC0gMTsKLSsKLSsJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2Uo KHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAwOwotKwotKwkJaWYgKCFzdHJjbXAoa2V5 d29yZCwgIkNvdW50IikpCi0rCQkJewotKwkJCWlmIChDb3VudCAhPSAtMSkKLSsJCQkJZ290byBw YXJzZV9lcnJvcjsKLSsJCQlDb3VudCA9IGF0b2kodmFsdWUpOwotKwkJCWlmIChDb3VudCA8IDAp Ci0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCAiS2xlbiIpKQotKwkJCXsKLSsJCQlpZiAoS2xlbiAhPSAtMSkKLSsJCQkJZ290byBwYXJz ZV9lcnJvcjsKLSsJCQlLbGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQkJaWYgKEtsZW4gPCAwKQotKwkJ CQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCWlmIChLbGVuX2NvdW50c19rZXlzKQotKwkJCQl7Ci0r CQkJCUtleXMgPSBPUEVOU1NMX21hbGxvYyhzaXplb2YoKktleXMpICogS2xlbik7Ci0rCQkJCW1l bXNldChLZXlzLCAnXDAnLCBzaXplb2YoKktleXMpICogS2xlbik7Ci0rCQkJCX0KLSsJCQllbHNl Ci0rCQkJCXsKLSsJCQkJS2V5cyA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZigqS2V5cykpOwotKwkJ CQltZW1zZXQoS2V5cywgJ1wwJywgc2l6ZW9mKCpLZXlzKSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQll bHNlIGlmICghc3RyY21wKGtleXdvcmQsICJNbGVuIikpCi0rCQkJewotKwkJCWlmIChNbGVuICE9 IC0xKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCU1sZW4gPSBhdG9pKHZhbHVlKTsKLSsJ CQlpZiAoTWxlbiA8IDApCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBp ZiAoIXN0cmNtcChrZXl3b3JkLCAiVGxlbiIpKQotKwkJCXsKLSsJCQlpZiAoVGxlbiAhPSAtMSkK LSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlUbGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQkJaWYg KFRsZW4gPCAwKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwgIktleSIpICYmICFLbGVuX2NvdW50c19rZXlzKQotKwkJCXsKLSsJCQlp ZiAoS2V5c1swXSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlLZXlzWzBdID0gaGV4MmJp bl9tKHZhbHVlLCAmS2V5bGVuKTsKLSsJCQlpZiAoIUtleXNbMF0pCi0rCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cm5jbXAoa2V5d29yZCwgIktleSIsIDMpICYm IEtsZW5fY291bnRzX2tleXMpCi0rCQkJewotKwkJCWludCBrZXludW0gPSBhdG9pKGtleXdvcmQg KyAzKTsKLSsJCQlpZiAoIWtleW51bSB8fCBrZXludW0gPiBLbGVuIHx8IEtleXNba2V5bnVtLTFd KQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCUtleXNba2V5bnVtLTFdID0gaGV4MmJpbl9t KHZhbHVlLCAmS2V5bGVuKTsKLSsJCQlpZiAoIUtleXNba2V5bnVtLTFdKQotKwkJCQlnb3RvIHBh cnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQot KwkJCXsKLSsJCQlpZiAoTXNnKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCU1zZyA9IGhl eDJiaW5fbSh2YWx1ZSwgJk1zZ2xlbik7Ci0rCQkJaWYgKCFNc2cpCi0rCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTWFjIikpCi0rCQkJ ewotKwkJCWlmIChtb2RlID09IDApCi0rCQkJCWNvbnRpbnVlOwotKwkJCWlmIChNYWMpCi0rCQkJ CWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJTWFjID0gaGV4MmJpbl9tKHZhbHVlLCAmTWFjbGVuKTsK LSsJCQlpZiAoIU1hYykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlm ICghc3RyY21wKGtleXdvcmQsICJSZXN1bHQiKSkKLSsJCQl7Ci0rCQkJaWYgKG1vZGUgPT0gMSkK LSsJCQkJY29udGludWU7Ci0rCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlCi0r CQkJZ290byBwYXJzZV9lcnJvcjsKLSsKLSsJCWZwdXRzKG9saW5lYnVmLCBvdXQpOwotKwotKwkJ aWYgKEtleXMgJiYgTXNnICYmICghbW9kZSB8fCBNYWMpICYmIChUbGVuID4gMCkgJiYgKEtsZW4g PiAwKSkKLSsJCQl7Ci0rCQkJaWYgKEtsZW5fY291bnRzX2tleXMpCi0rCQkJCXsKLSsJCQkJaW50 IHg7Ci0rCQkJCUtleSA9IE9QRU5TU0xfbWFsbG9jKEtsZW4gKiBrbm93bl9rZXlsZW4pOwotKwkJ CQlmb3IgKHggPSAwOyB4IDwgS2xlbjsgeCsrKQotKwkJCQkJewotKwkJCQkJbWVtY3B5KEtleSAr IHggKiBrbm93bl9rZXlsZW4sCi0rCQkJCQkJS2V5c1t4XSwga25vd25fa2V5bGVuKTsKLSsJCQkJ CU9QRU5TU0xfZnJlZShLZXlzW3hdKTsKLSsJCQkJCX0KLSsJCQkJS2xlbiAqPSBrbm93bl9rZXls ZW47Ci0rCQkJCX0KLSsJCQllbHNlCi0rCQkJCXsKLSsJCQkJS2V5ID0gT1BFTlNTTF9tYWxsb2Mo S2xlbik7Ci0rCQkJCW1lbWNweShLZXksIEtleXNbMF0sIEtsZW4pOwotKwkJCQlPUEVOU1NMX2Zy ZWUoS2V5c1swXSk7Ci0rCQkJCX0KLSsJCQlPUEVOU1NMX2ZyZWUoS2V5cyk7Ci0rCi0rCQkJc3dp dGNoKG1vZGUpCi0rCQkJCXsKLSsJCQljYXNlIDA6Ci0rCQkJCWlmICghcHJpbnRfY21hY19nZW4o Y2lwaGVyLCBvdXQsCi0rCQkJCQkJS2V5LCBLbGVuLAotKwkJCQkJCU1zZywgTWxlbiwKLSsJCQkJ CQlUbGVuKSkKLSsJCQkJCWdvdG8gZXJyb3I7Ci0rCQkJCWJyZWFrOwotKwkJCWNhc2UgMToKLSsJ CQkJaWYgKCFwcmludF9jbWFjX3ZlcihjaXBoZXIsIG91dCwKLSsJCQkJCQlLZXksIEtsZW4sCi0r CQkJCQkJTXNnLCBNbGVuLAotKwkJCQkJCU1hYywgTWFjbGVuLAotKwkJCQkJCVRsZW4pKQotKwkJ CQkJZ290byBlcnJvcjsKLSsJCQkJYnJlYWs7Ci0rCQkJCX0KLSsKLSsJCQlPUEVOU1NMX2ZyZWUo S2V5KTsKLSsJCQlLZXkgPSBOVUxMOwotKwkJCU9QRU5TU0xfZnJlZShNc2cpOwotKwkJCU1zZyA9 IE5VTEw7Ci0rCQkJT1BFTlNTTF9mcmVlKE1hYyk7Ci0rCQkJTWFjID0gTlVMTDsKLSsJCQlLbGVu ID0gLTE7Ci0rCQkJTWxlbiA9IC0xOwotKwkJCVRsZW4gPSAtMTsKLSsJCQlDb3VudCA9IC0xOwot KwkJCX0KLSsJCX0KLSsKLSsKLSsJcmV0ID0gMTsKLSsKLSsKLSsJZXJyb3I6Ci0rCi0rCWlmIChv bGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVmKQotKwkJ T1BFTlNTTF9mcmVlKGxpbmVidWYpOwotKwlpZiAoS2V5KQotKwkJT1BFTlNTTF9mcmVlKEtleSk7 Ci0rCWlmIChNc2cpCi0rCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJaWYgKE1hYykKLSsJCU9QRU5T U0xfZnJlZShNYWMpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwlwYXJzZV9lcnJvcjoKLSsKLSsJ ZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIs IGxudW0pOwotKwotKwlnb3RvIGVycm9yOwotKwotKwl9Ci0rCi0rc3RhdGljIGludCBwcmludF9j bWFjX2dlbihjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIEZJTEUgKm91dCwKLSsJCXVuc2lnbmVk IGNoYXIgKktleSwgaW50IEtsZW4sCi0rCQl1bnNpZ25lZCBjaGFyICpNc2csIGludCBNbGVuLAot KwkJaW50IFRsZW4pCi0rCXsKLSsJaW50IHJjLCBpOwotKwlzaXplX3QgcmVzbGVuOwotKwl1bnNp Z25lZCBjaGFyIHJlc1sxMjhdOwotKwlDTUFDX0NUWCAqY21hY19jdHggPSBDTUFDX0NUWF9uZXco KTsKLSsKLSsJQ01BQ19Jbml0KGNtYWNfY3R4LCBLZXksIEtsZW4sIGNpcGhlciwgMCk7Ci0rCUNN QUNfVXBkYXRlKGNtYWNfY3R4LCBNc2csIE1sZW4pOwotKwlpZiAoIUNNQUNfRmluYWwoY21hY19j dHgsIHJlcywgJnJlc2xlbikpCi0rCQl7Ci0rCQlmcHV0cygiRXJyb3IgY2FsY3VsYXRpbmcgQ01B Q1xuIiwgc3RkZXJyKTsKLSsJCXJjID0gMDsKLSsJCX0KLSsJZWxzZSBpZiAoVGxlbiA+IChpbnQp cmVzbGVuKQotKwkJewotKwkJZnB1dHMoIlBhcmFtZXRlciBlcnJvciwgVGxlbiA+IENNQUMgbGVu Z3RoXG4iLCBzdGRlcnIpOwotKwkJcmMgPSAwOwotKwkJfQotKwllbHNlCi0rCQl7Ci0rCQlmcHV0 cygiTWFjID0gIiwgb3V0KTsKLSsJCWZvciAoaSA9IDA7IGkgPCBUbGVuOyBpKyspCi0rCQkJZnBy aW50ZihvdXQsICIlMDJ4IiwgcmVzW2ldKTsKLSsJCWZwdXRzKFJFU1BfRU9MLCBvdXQpOwotKwkJ cmMgPSAxOwotKwkJfQotKwlDTUFDX0NUWF9mcmVlKGNtYWNfY3R4KTsKLSsJcmV0dXJuIHJjOwot Kwl9Ci0rCi0rc3RhdGljIGludCBwcmludF9jbWFjX3Zlcihjb25zdCBFVlBfQ0lQSEVSICpjaXBo ZXIsIEZJTEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKktleSwgaW50IEtsZW4sCi0rCQl1bnNp Z25lZCBjaGFyICpNc2csIGludCBNbGVuLAotKwkJdW5zaWduZWQgY2hhciAqTWFjLCBpbnQgTWFj bGVuLAotKwkJaW50IFRsZW4pCi0rCXsKLSsJaW50IHJjID0gMTsKLSsJc2l6ZV90IHJlc2xlbjsK LSsJdW5zaWduZWQgY2hhciByZXNbMTI4XTsKLSsJQ01BQ19DVFggKmNtYWNfY3R4ID0gQ01BQ19D VFhfbmV3KCk7Ci0rCi0rCUNNQUNfSW5pdChjbWFjX2N0eCwgS2V5LCBLbGVuLCBjaXBoZXIsIDAp OwotKwlDTUFDX1VwZGF0ZShjbWFjX2N0eCwgTXNnLCBNbGVuKTsKLSsJaWYgKCFDTUFDX0ZpbmFs KGNtYWNfY3R4LCByZXMsICZyZXNsZW4pKQotKwkJewotKwkJZnB1dHMoIkVycm9yIGNhbGN1bGF0 aW5nIENNQUNcbiIsIHN0ZGVycik7Ci0rCQlyYyA9IDA7Ci0rCQl9Ci0rCWVsc2UgaWYgKFRsZW4g PiAoaW50KXJlc2xlbikKLSsJCXsKLSsJCWZwdXRzKCJQYXJhbWV0ZXIgZXJyb3IsIFRsZW4gPiBD TUFDIGxlbmd0aFxuIiwgc3RkZXJyKTsKLSsJCXJjID0gMDsKLSsJCX0KLSsJZWxzZSBpZiAoVGxl biAhPSBNYWNsZW4pCi0rCQl7Ci0rCQlmcHV0cygiUGFyYW1ldGVyIGVycm9yLCBUbGVuICE9IHJl c3VsdGluZyBNYWMgbGVuZ3RoXG4iLCBzdGRlcnIpOwotKwkJcmMgPSAwOwotKwkJfQotKwllbHNl Ci0rCQl7Ci0rCQlpZiAoIW1lbWNtcChNYWMsIHJlcywgTWFjbGVuKSkKLSsJCQlmcHV0cygiUmVz dWx0ID0gUCIgUkVTUF9FT0wsIG91dCk7Ci0rCQllbHNlCi0rCQkJZnB1dHMoIlJlc3VsdCA9IEYi IFJFU1BfRU9MLCBvdXQpOwotKwkJfQotKwlDTUFDX0NUWF9mcmVlKGNtYWNfY3R4KTsKLSsJcmV0 dXJuIHJjOwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX2Rlc21vdnMuYwotLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMv Zmlwc19kZXNtb3ZzLmMuZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5MjMwNjI2NSArMDIwMAot KysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMJMjAxNC0x MC0xNiAxMzoxOTozNS4wOTIzMDYyNjUgKzAyMDAKLUBAIC0wLDAgKzEsNzAyIEBACi0rLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsg KiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgot KyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQu IFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBu b3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5z c2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkg Ik9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsg KiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRp c3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93 aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAq Ci0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBg QVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBP U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNU IE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAot KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgotKyAqCi0rICovCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KLSsgIE5JU1QgREVTIE1vZGVzIG9mIE9wZXJhdGlvbiBWYWxpZGF0aW9uIFN5 c3RlbQotKyAgVGVzdCBQcm9ncmFtCi0rCi0rICBCYXNlZCBvbiB0aGUgQUVTIFZhbGlkYXRpb24g U3VpdGUsIHdoaWNoIHdhczoKLSsgIERvbmF0ZWQgdG8gT3BlblNTTCBieToKLSsgIFYtT05FIENv cnBvcmF0aW9uCi0rICAyMDI1MCBDZW50dXJ5IEJsdmQsIFN1aXRlIDMwMAotKyAgR2VybWFudG93 biwgTUQgMjA4NzQKLSsgIFUuUy5BLgotKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0 ZGxpYi5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8ZXJybm8uaD4KLSsjaW5j bHVkZSA8YXNzZXJ0Lmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv ZGVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4u aD4KLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSAiZV9vcy5oIgotKwot KyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBERVMgc3VwcG9ydFxuIik7Ci0rICAgIHJldHVy bigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2lu Y2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rI2RlZmluZSBERVNfQkxPQ0tfU0laRSA4Ci0rCi0rI2Rl ZmluZSBWRVJCT1NFIDAKLSsKLStpbnQgREVTVGVzdChFVlBfQ0lQSEVSX0NUWCAqY3R4LAotKwkg ICAgY2hhciAqYW1vZGUsIGludCBha2V5c3osIHVuc2lnbmVkIGNoYXIgKmFLZXksIAotKwkgICAg dW5zaWduZWQgY2hhciAqaVZlYywgCi0rCSAgICBpbnQgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEg PSBlbmNyeXB0ICovCi0rCSAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGNoYXIgKmlu LCBpbnQgbGVuKQotKyAgICB7Ci0rICAgIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciA9IE5VTEw7 Ci0rCi0rICAgIGlmIChha2V5c3ogIT0gMTkyKQotKwl7Ci0rCXByaW50ZigiSW52YWxpZCBrZXkg c2l6ZTogJWRcbiIsIGFrZXlzeik7Ci0rCUVYSVQoMSk7Ci0rCX0KLSsKLSsgICAgaWYgKHN0cmNh c2VjbXAoYW1vZGUsICJDQkMiKSA9PSAwKQotKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2JjKCk7 Ci0rICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJFQ0IiKSA9PSAwKQotKwljaXBoZXIg PSBFVlBfZGVzX2VkZTNfZWNiKCk7Ci0rICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJD RkI2NCIpID09IDApCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jZmI2NCgpOwotKyAgICBlbHNl IGlmIChzdHJuY2FzZWNtcChhbW9kZSwgIk9GQiIsIDMpID09IDApCi0rCWNpcGhlciA9IEVWUF9k ZXNfZWRlM19vZmIoKTsKLSsgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCOCIpKQot KwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2ZiOCgpOwotKyAgICBlbHNlIGlmKCFzdHJjYXNlY21w KGFtb2RlLCJDRkIxIikpCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jZmIxKCk7Ci0rICAgIGVs c2UKLSsJewotKwlwcmludGYoIlVua25vd24gbW9kZTogJXNcbiIsIGFtb2RlKTsKLSsJRVhJVCgx KTsKLSsJfQotKwotKyAgICBpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEws IGFLZXksIGlWZWMsIGRpcikgPD0gMCkKLSsJcmV0dXJuIDA7Ci0rICAgIGlmKCFzdHJjYXNlY21w KGFtb2RlLCJDRkIxIikpCi0rCU1fRVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzKGN0eCwgRVZQX0NJ UEhfRkxBR19MRU5HVEhfQklUUyk7Ci0rICAgIEVWUF9DaXBoZXIoY3R4LCBvdXQsIGluLCBsZW4p OwotKwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotK3ZvaWQgRGVidWdWYWx1ZShjaGFyICp0 YWcsIHVuc2lnbmVkIGNoYXIgKnZhbCwgaW50IGxlbikKLSsgICAgewotKyAgICBjaGFyIG9idWZb MjA0OF07Ci0rICAgIGludCBvbGVuOwotKyAgICBvbGVuID0gYmluMmhleCh2YWwsIGxlbiwgb2J1 Zik7Ci0rICAgIHByaW50ZigiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOwotKyAgICB9 Ci0rCi0rdm9pZCBzaGlmdGluKHVuc2lnbmVkIGNoYXIgKmRzdCx1bnNpZ25lZCBjaGFyICpzcmMs aW50IG5iaXRzKQotKyAgICB7Ci0rICAgIGludCBuOwotKwotKyAgICAvKiBtb3ZlIHRoZSBieXRl cy4uLiAqLwotKyAgICBtZW1tb3ZlKGRzdCxkc3QrbmJpdHMvOCwzKjgtbmJpdHMvOCk7Ci0rICAg IC8qIGFwcGVuZCBuZXcgZGF0YSAqLwotKyAgICBtZW1jcHkoZHN0KzMqOC1uYml0cy84LHNyYywo bmJpdHMrNykvOCk7Ci0rICAgIC8qIGxlZnQgc2hpZnQgdGhlIGJpdHMgKi8KLSsgICAgaWYobmJp dHMlOCkKLSsJZm9yKG49MCA7IG4gPCAzKjggOyArK24pCi0rCSAgICBkc3Rbbl09KGRzdFtuXSA8 PCAobmJpdHMlOCkpfChkc3RbbisxXSA+PiAoOC1uYml0cyU4KSk7Ci0rICAgIH0JCi0rCi0rLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0rY2hhciAq dF90YWdbMl0gPSB7IlBMQUlOVEVYVCIsICJDSVBIRVJURVhUIn07Ci0rY2hhciAqdF9tb2RlWzZd ID0geyJDQkMiLCJFQ0IiLCJPRkIiLCJDRkIxIiwiQ0ZCOCIsIkNGQjY0In07Ci0rZW51bSBNb2Rl IHtDQkMsIEVDQiwgT0ZCLCBDRkIxLCBDRkI4LCBDRkI2NH07Ci0raW50IFNpemVzWzZdPXs2NCw2 NCw2NCwxLDgsNjR9OwotKwotK3ZvaWQgZG9fbWN0KGNoYXIgKmFtb2RlLCAKLSsJICAgIGludCBh a2V5c3osIGludCBudW1rZXlzLCB1bnNpZ25lZCBjaGFyICpha2V5LHVuc2lnbmVkIGNoYXIgKml2 ZWMsCi0rCSAgICBpbnQgZGlyLCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBpbnQgbGVuLAotKwkgICAg RklMRSAqcmZwKQotKyAgICB7Ci0rICAgIGludCBpLGltb2RlOwotKyAgICB1bnNpZ25lZCBjaGFy IG5rWzQqOF07IC8qIGxvbmdlc3Qga2V5KzggKi8KLSsgICAgdW5zaWduZWQgY2hhciB0ZXh0MFs4 XTsKLSsKLSsgICAgZm9yIChpbW9kZT0wIDsgaW1vZGUgPCA2IDsgKytpbW9kZSkKLSsJaWYoIXN0 cmNtcChhbW9kZSx0X21vZGVbaW1vZGVdKSkKLSsJICAgIGJyZWFrOwotKyAgICBpZiAoaW1vZGUg PT0gNikKLSsJeyAKLSsJcHJpbnRmKCJVbnJlY29nbml6ZWQgbW9kZTogJXNcbiIsIGFtb2RlKTsK LSsJRVhJVCgxKTsKLSsJfQotKwotKyAgICBmb3IoaT0wIDsgaSA8IDQwMCA7ICsraSkKLSsJewot KwlpbnQgajsKLSsJaW50IG47Ci0rCWludCBrcD1ha2V5c3ovNjQ7Ci0rCXVuc2lnbmVkIGNoYXIg b2xkX2l2WzhdOwotKwlFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rCUVWUF9DSVBIRVJfQ1RYX2luaXQo JmN0eCk7Ci0rCi0rCWZwcmludGYocmZwLCJcbkNPVU5UID0gJWRcbiIsaSk7Ci0rCWlmKGtwID09 IDEpCi0rCSAgICBPdXRwdXRWYWx1ZSgiS0VZIixha2V5LDgscmZwLDApOwotKwllbHNlCi0rCSAg ICBmb3Iobj0wIDsgbiA8IGtwIDsgKytuKQotKwkJewotKwkJZnByaW50ZihyZnAsIktFWSVkIixu KzEpOwotKwkJT3V0cHV0VmFsdWUoIiIsYWtleStuKjgsOCxyZnAsMCk7Ci0rCQl9Ci0rCi0rCWlm KGltb2RlICE9IEVDQikKLSsJICAgIE91dHB1dFZhbHVlKCJJViIsaXZlYyw4LHJmcCwwKTsKLSsJ T3V0cHV0VmFsdWUodF90YWdbZGlyXjFdLHRleHQsbGVuLHJmcCxpbW9kZSA9PSBDRkIxKTsKLSsj aWYgMAotKwkvKiBjb21wZW5zYXRlIGZvciBlbmRpYW5uZXNzICovCi0rCWlmKGltb2RlID09IENG QjEpCi0rCSAgICB0ZXh0WzBdPDw9NzsKLSsjZW5kaWYKLSsJbWVtY3B5KHRleHQwLHRleHQsOCk7 Ci0rCi0rCWZvcihqPTAgOyBqIDwgMTAwMDAgOyArK2opCi0rCSAgICB7Ci0rCSAgICB1bnNpZ25l ZCBjaGFyIG9sZF90ZXh0WzhdOwotKwotKwkgICAgbWVtY3B5KG9sZF90ZXh0LHRleHQsOCk7Ci0r CSAgICBpZihqID09IDApCi0rCQl7Ci0rCQltZW1jcHkob2xkX2l2LGl2ZWMsOCk7Ci0rCQlERVNU ZXN0KCZjdHgsYW1vZGUsYWtleXN6LGFrZXksaXZlYyxkaXIsdGV4dCx0ZXh0LGxlbik7Ci0rCQl9 Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQltZW1jcHkob2xkX2l2LGN0eC5pdiw4KTsKLSsJCUVWUF9D aXBoZXIoJmN0eCx0ZXh0LHRleHQsbGVuKTsKLSsJCX0KLSsJICAgIGlmKGogPT0gOTk5OSkKLSsJ CXsKLSsJCU91dHB1dFZhbHVlKHRfdGFnW2Rpcl0sdGV4dCxsZW4scmZwLGltb2RlID09IENGQjEp OwotKwkJLyoJCW1lbWNweShpdmVjLHRleHQsOCk7ICovCi0rCQl9Ci0rCSAgICAvKgkgICAgRGVi dWdWYWx1ZSgiaXYiLGN0eC5pdiw4KTsgKi8KLSsJICAgIC8qIGFjY3VtdWxhdGUgbWF0ZXJpYWwg Zm9yIHRoZSBuZXh0IGtleSAqLwotKwkgICAgc2hpZnRpbihuayx0ZXh0LFNpemVzW2ltb2RlXSk7 Ci0rCSAgICAvKgkgICAgRGVidWdWYWx1ZSgibmsiLG5rLDI0KTsqLwotKwkgICAgaWYoKGRpciAm JiAoaW1vZGUgPT0gQ0ZCMSB8fCBpbW9kZSA9PSBDRkI4IHx8IGltb2RlID09IENGQjY0Ci0rCQkJ fHwgaW1vZGUgPT0gQ0JDKSkgfHwgaW1vZGUgPT0gT0ZCKQotKwkJbWVtY3B5KHRleHQsb2xkX2l2 LDgpOwotKwotKwkgICAgaWYoIWRpciAmJiAoaW1vZGUgPT0gQ0ZCMSB8fCBpbW9kZSA9PSBDRkI4 IHx8IGltb2RlID09IENGQjY0KSkKLSsJCXsKLSsJCS8qIHRoZSB0ZXN0IHNwZWNpZmllcyB1c2lu ZyB0aGUgb3V0cHV0IG9mIHRoZSByYXcgREVTIG9wZXJhdGlvbgotKwkJICAgd2hpY2ggd2UgZG9u J3QgaGF2ZSwgc28gcmVjb25zdHJ1Y3QgaXQuLi4gKi8KLSsJCWZvcihuPTAgOyBuIDwgOCA7ICsr bikKLSsJCSAgICB0ZXh0W25dXj1vbGRfdGV4dFtuXTsKLSsJCX0KLSsJICAgIH0KLSsJZm9yKG49 MCA7IG4gPCA4IDsgKytuKQotKwkgICAgYWtleVtuXV49bmtbMTYrbl07Ci0rCWZvcihuPTAgOyBu IDwgOCA7ICsrbikKLSsJICAgIGFrZXlbOCtuXV49bmtbOCtuXTsKLSsJZm9yKG49MCA7IG4gPCA4 IDsgKytuKQotKwkgICAgYWtleVsxNituXV49bmtbbl07Ci0rCWlmKG51bWtleXMgPCAzKQotKwkg ICAgbWVtY3B5KCZha2V5WzIqOF0sYWtleSw4KTsKLSsJaWYobnVta2V5cyA8IDIpCi0rCSAgICBt ZW1jcHkoJmFrZXlbOF0sYWtleSw4KTsKLSsJREVTX3NldF9vZGRfcGFyaXR5KChERVNfY2Jsb2Nr ICopYWtleSk7Ci0rCURFU19zZXRfb2RkX3Bhcml0eSgoREVTX2NibG9jayAqKShha2V5KzgpKTsK LSsJREVTX3NldF9vZGRfcGFyaXR5KChERVNfY2Jsb2NrICopKGFrZXkrMTYpKTsKLSsJbWVtY3B5 KGl2ZWMsY3R4Lml2LDgpOwotKwotKwkvKiBwb2ludGxlc3MgZXhlcmNpc2UgLSB0aGUgZmluYWwg dGV4dCBkb2Vzbid0IGRlcGVuZCBvbiB0aGUKLSsJICAgaW5pdGlhbCB0ZXh0IGluIE9GQiBtb2Rl LCBzbyB3aG8gY2FyZXMgd2hhdCBpdCBpcz8gKFdobwotKwkgICBkZXNpZ25lZCB0aGVzZSB0ZXN0 cz8pICovCi0rCWlmKGltb2RlID09IE9GQikKLSsJICAgIGZvcihuPTAgOyBuIDwgOCA7ICsrbikK LSsJCXRleHRbbl09dGV4dDBbbl1eb2xkX2l2W25dOwotKwl9Ci0rICAgIH0KLSsgICAgCi0raW50 IHByb2NfZmlsZShjaGFyICpycWZpbGUsIGNoYXIgKnJzcGZpbGUpCi0rICAgIHsKLSsgICAgY2hh ciBhZm5bMjU2XSwgcmZuWzI1Nl07Ci0rICAgIEZJTEUgKmFmcCA9IE5VTEwsICpyZnAgPSBOVUxM OwotKyAgICBjaGFyIGlidWZbMjA0OF0sIHRidWZbMjA0OF07Ci0rICAgIGludCBpbGVuLCBsZW4s IHJldCA9IDA7Ci0rICAgIGNoYXIgYW1vZGVbOF0gPSAiIjsKLSsgICAgY2hhciBhdGVzdFsxMDBd ID0gIiI7Ci0rICAgIGludCBha2V5c3o9MDsKLSsgICAgdW5zaWduZWQgY2hhciBpVmVjWzIwXSwg YUtleVs0MF07Ci0rICAgIGludCBkaXIgPSAtMSwgZXJyID0gMCwgc3RlcCA9IDA7Ci0rICAgIHVu c2lnbmVkIGNoYXIgcGxhaW50ZXh0WzIwNDhdOwotKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRl eHRbMjA0OF07Ci0rICAgIGNoYXIgKnJwOwotKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rICAg IGludCBudW1rZXlzPTE7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rICAg IGlmICghcnFmaWxlIHx8ICEoKnJxZmlsZSkpCi0rCXsKLSsJcHJpbnRmKCJObyByZXEgZmlsZVxu Iik7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICBzdHJjcHkoYWZuLCBycWZpbGUpOwotKwotKyAg ICBpZiAoKGFmcCA9IGZvcGVuKGFmbiwgInIiKSkgPT0gTlVMTCkKLSsJewotKwlwcmludGYoIkNh bm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCi0rCSAgICAgICBhZm4sIHN0cmVycm9yKGVycm5v KSk7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICBpZiAoIXJzcGZpbGUpCi0rCXsKLSsJc3RyY3B5 KHJmbixhZm4pOwotKwlycD1zdHJzdHIocmZuLCJyZXEvIik7Ci0rI2lmZGVmIE9QRU5TU0xfU1lT X1dJTjMyCi0rCWlmICghcnApCi0rCSAgICBycD1zdHJzdHIocmZuLCJyZXFcXCIpOwotKyNlbmRp ZgotKwlhc3NlcnQocnApOwotKwltZW1jcHkocnAsInJzcCIsMyk7Ci0rCXJwID0gc3Ryc3RyKHJm biwgIi5yZXEiKTsKLSsJbWVtY3B5KHJwLCAiLnJzcCIsIDQpOwotKwlyc3BmaWxlID0gcmZuOwot Kwl9Ci0rICAgIGlmICgocmZwID0gZm9wZW4ocnNwZmlsZSwgInciKSkgPT0gTlVMTCkKLSsJewot KwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCi0rCSAgICAgICByZm4sIHN0 cmVycm9yKGVycm5vKSk7Ci0rCWZjbG9zZShhZnApOwotKwlhZnAgPSBOVUxMOwotKwlyZXR1cm4g LTE7Ci0rCX0KLSsgICAgd2hpbGUgKCFlcnIgJiYgKGZnZXRzKGlidWYsIHNpemVvZihpYnVmKSwg YWZwKSkgIT0gTlVMTCkKLSsJewotKwl0aWR5X2xpbmUodGJ1ZiwgaWJ1Zik7Ci0rCWlsZW4gPSBz dHJsZW4oaWJ1Zik7Ci0rCS8qCXByaW50Zigic3RlcD0lZCBpYnVmPSVzIixzdGVwLGlidWYpOyov Ci0rCWlmKHN0ZXAgPT0gMyAmJiAhc3RyY21wKGFtb2RlLCJFQ0IiKSkKLSsJICAgIHsKLSsJICAg IG1lbXNldChpVmVjLCAwLCBzaXplb2YoaVZlYykpOwotKwkgICAgc3RlcCA9IChkaXIpPyA0OiA1 OyAgLyogbm8gaXZlYyBmb3IgRUNCICovCi0rCSAgICB9Ci0rCXN3aXRjaCAoc3RlcCkKLSsJICAg IHsKLSsJY2FzZSAwOiAgLyogcmVhZCBwcmVhbWJsZSAqLwotKwkgICAgaWYgKGlidWZbMF0gPT0g J1xuJykKLSsJCXsgLyogZW5kIG9mIHByZWFtYmxlICovCi0rCQlpZiAoKmFtb2RlID09ICdcMCcp Ci0rCQkgICAgewotKwkJICAgIHByaW50ZigiTWlzc2luZyBNb2RlXG4iKTsKLSsJCSAgICBlcnIg PSAxOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgZnB1dHMoaWJ1ZiwgcmZw KTsKLSsJCSAgICArKyBzdGVwOwotKwkJICAgIH0KLSsJCX0KLSsJICAgIGVsc2UgaWYgKGlidWZb MF0gIT0gJyMnKQotKwkJewotKwkJcHJpbnRmKCJJbnZhbGlkIHByZWFtYmxlIGl0ZW06ICVzXG4i LCBpYnVmKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7IC8qIHByb2Nlc3Mg cHJlYW1ibGUgKi8KLSsJCWNoYXIgKnhwLCAqcHAgPSBpYnVmKzI7Ci0rCQlpbnQgbjsKLSsJCWlm KCphbW9kZSkKLSsJCSAgICB7IC8qIGluc2VydCBjdXJyZW50IHRpbWUgJiBkYXRlICovCi0rCQkg ICAgdGltZV90IHJ0aW0gPSB0aW1lKDApOwotKwkJICAgIGZwcmludGYocmZwLCAiIyAlcyIsIGN0 aW1lKCZydGltKSk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBmcHV0cyhp YnVmLCByZnApOwotKwkJICAgIGlmKCFzdHJuY21wKHBwLCJJTlZFUlNFICIsOCkgfHwgIXN0cm5j bXAocHAsIkRFUyAiLDQpCi0rCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlRERVMgIiw1KQotKwkJ ICAgICAgIHx8ICFzdHJuY21wKHBwLCJQRVJNVVRBVElPTiAiLDEyKQotKwkJICAgICAgIHx8ICFz dHJuY21wKHBwLCJTVUJTVElUVVRJT04gIiwxMykKLSsJCSAgICAgICB8fCAhc3RybmNtcChwcCwi VkFSSUFCTEUgIiw5KSkKLSsJCQl7Ci0rCQkJLyogZ2V0IHRlc3QgdHlwZSAqLwotKwkJCWlmKCFz dHJuY21wKHBwLCJERVMgIiw0KSkKLSsJCQkgICAgcHArPTQ7Ci0rCQkJZWxzZSBpZighc3RybmNt cChwcCwiVERFUyAiLDUpKQotKwkJCSAgICBwcCs9NTsKLSsJCQl4cCA9IHN0cmNocihwcCwgJyAn KTsKLSsJCQluID0geHAtcHA7Ci0rCQkJc3RybmNweShhdGVzdCwgcHAsIG4pOwotKwkJCWF0ZXN0 W25dID0gJ1wwJzsKLSsJCQkvKiBnZXQgbW9kZSAqLwotKwkJCXhwID0gc3RycmNocihwcCwgJyAn KTsgLyogZ2V0IG1vZGUiICovCi0rCQkJbiA9IHN0cmxlbih4cCsxKS0xOwotKwkJCXN0cm5jcHko YW1vZGUsIHhwKzEsIG4pOwotKwkJCWFtb2RlW25dID0gJ1wwJzsKLSsJCQkvKiBhbW9kZVszXSA9 ICdcMCc7ICovCi0rCQkJaWYgKFZFUkJPU0UpCi0rCQkJCXByaW50ZigiVGVzdD0lcywgTW9kZT0l c1xuIixhdGVzdCxhbW9kZSk7Ci0rCQkJfQotKwkJICAgIH0KLSsJCX0KLSsJICAgIGJyZWFrOwot KwotKwljYXNlIDE6ICAvKiBbRU5DUllQVF0gfCBbREVDUllQVF0gKi8KLSsJICAgIGlmKGlidWZb MF0gPT0gJ1xuJykKLSsJCWJyZWFrOwotKwkgICAgaWYgKGlidWZbMF0gPT0gJ1snKQotKwkJewot KwkJZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCSsrc3RlcDsKLSsJCWlmIChzdHJuY2FzZWNtcChpYnVm LCAiW0VOQ1JZUFRdIiwgOSkgPT0gMCkKLSsJCSAgICBkaXIgPSAxOwotKwkJZWxzZSBpZiAoc3Ry bmNhc2VjbXAoaWJ1ZiwgIltERUNSWVBUXSIsIDkpID09IDApCi0rCQkgICAgZGlyID0gMDsKLSsJ CWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIGtleXdvcmQ6ICVzXG4iLCBp YnVmKTsKLSsJCSAgICBlcnIgPSAxOwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwkJfQotKwkgICAg ZWxzZSBpZiAoZGlyID09IC0xKQotKwkJewotKwkJZXJyID0gMTsKLSsJCXByaW50ZigiTWlzc2lu ZyBFTkNSWVBUL0RFQ1JZUFQga2V5d29yZFxuIik7Ci0rCQlicmVhazsKLSsJCX0KLSsJICAgIGVs c2UgCi0rCQlzdGVwID0gMjsKLSsKLSsJY2FzZSAyOiAvKiBLRVkgPSB4eHh4ICovCi0rCSAgICBp ZigqaWJ1ZiA9PSAnXG4nKQotKwkJewotKwkgICAgICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQli cmVhazsKLSsgICAgICAgICAgICAgICAgfQotKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIkNP VU5UID0gIiw4KSkKLSsJCXsKLSsJICAgICAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJYnJlYWs7 Ci0rICAgICAgICAgICAgICAgIH0KLSsJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJDT1VOVD0i LDYpKQotKwkJewotKwkgICAgICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQlicmVhazsKLSsgICAg ICAgICAgICAgICAgfQotKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIk51bUtleXMgPSAiLDEw KSkKLSsJCXsKLSsJCW51bWtleXM9YXRvaShpYnVmKzEwKTsKLSsJCWJyZWFrOwotKwkJfQotKwkg IAotKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJL RVkgPSAiLDYpKQotKwkJewotKwkJYWtleXN6PTY0OwotKwkJbGVuID0gaGV4MmJpbigoY2hhciop aWJ1Zis2LCBhS2V5KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYo IkludmFsaWQgS0VZXG4iKTsKLSsJCSAgICBlcnI9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9 Ci0rCQlQcmludFZhbHVlKCJLRVkiLCBhS2V5LCBsZW4pOwotKwkJKytzdGVwOwotKwkJfQotKwkg ICAgZWxzZSBpZighc3RybmNhc2VjbXAoaWJ1ZiwiS0VZcyA9ICIsNykpCi0rCQl7Ci0rCQlha2V5 c3o9NjQqMzsKLSsJCWxlbj1oZXgyYmluKGlidWYrNyxhS2V5KTsKLSsJCWlmKGxlbiAhPSA4KQot KwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsKLSsJCSAgICBlcnI9MTsK LSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQltZW1jcHkoYUtleSs4LGFLZXksOCk7Ci0rCQlt ZW1jcHkoYUtleSsxNixhS2V5LDgpOwotKwkJaWJ1Zls0XT0nXDAnOwotKwkJUHJpbnRWYWx1ZSgi S0VZcyIsYUtleSxsZW4pOwotKwkJKytzdGVwOwotKwkJfQotKwkgICAgZWxzZSBpZighc3RybmNh c2VjbXAoaWJ1ZiwiS0VZIiwzKSkKLSsJCXsKLSsJCWludCBuPWlidWZbM10tJzEnOwotKwotKwkJ YWtleXN6PTY0KjM7Ci0rCQlsZW49aGV4MmJpbihpYnVmKzcsYUtleStuKjgpOwotKwkJaWYobGVu ICE9IDgpCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOwotKwkJICAg IGVycj0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCWlidWZbNF09J1wwJzsKLSsJCVBy aW50VmFsdWUoaWJ1ZixhS2V5LGxlbik7Ci0rCQlpZihuID09IDIpCi0rCQkgICAgKytzdGVwOwot KwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7Ci0rCQll cnIgPSAxOwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgMzogLyogSVYgPSB4eHh4ICov Ci0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJJ ViA9ICIsIDUpICE9IDApCi0rCQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgSVZcbiIpOwotKwkJZXJy ID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWli dWYrNSwgaVZlYyk7Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJ bnZhbGlkIElWXG4iKTsKLSsJCSAgICBlcnIgPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQot KwkJUHJpbnRWYWx1ZSgiSVYiLCBpVmVjLCBsZW4pOwotKwkJc3RlcCA9IChkaXIpPyA0OiA1Owot KwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgNDogLyogUExBSU5URVhUID0geHh4eCAqLwot KwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiUExB SU5URVhUID0gIiwgMTIpICE9IDApCi0rCQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgUExBSU5URVhU XG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlpbnQgbm4gPSBz dHJsZW4oaWJ1ZisxMik7Ci0rCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCi0rCQkgICAgbGVu PWJpbnQyYmluKGlidWYrMTIsbm4tMSxwbGFpbnRleHQpOwotKwkJZWxzZQotKwkJICAgIGxlbj1o ZXgyYmluKGlidWYrMTIsIHBsYWludGV4dCk7Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0r CQkgICAgcHJpbnRmKCJJbnZhbGlkIFBMQUlOVEVYVDogJXMiLCBpYnVmKzEyKTsKLSsJCSAgICBl cnIgPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJaWYgKGxlbiA+PSBzaXplb2YocGxh aW50ZXh0KSkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJCdWZmZXIgb3ZlcmZsb3dcbiIpOwot KwkJICAgIH0KLSsJCVByaW50VmFsdWUoIlBMQUlOVEVYVCIsICh1bnNpZ25lZCBjaGFyKilwbGFp bnRleHQsIGxlbik7Ci0rCQlpZiAoc3RyY21wKGF0ZXN0LCAiTW9udGUiKSA9PSAwKSAgLyogTW9u dGUgQ2FybG8gVGVzdCAqLwotKwkJICAgIHsKLSsJCSAgICBkb19tY3QoYW1vZGUsYWtleXN6LG51 bWtleXMsYUtleSxpVmVjLGRpcixwbGFpbnRleHQsbGVuLHJmcCk7Ci0rCQkgICAgfQotKwkJZWxz ZQotKwkJICAgIHsKLSsJCSAgICBhc3NlcnQoZGlyID09IDEpOwotKwkJICAgIHJldCA9IERFU1Rl c3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJCSAgZGlyLCAgLyogMCA9 IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCi0rCQkJCSAgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBs ZW4pOwotKwkJICAgIE91dHB1dFZhbHVlKCJDSVBIRVJURVhUIixjaXBoZXJ0ZXh0LGxlbixyZnAs Ci0rCQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7Ci0rCQkgICAgfQotKwkJc3RlcCA9IDY7Ci0r CQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSA1OiAvKiBDSVBIRVJURVhUID0geHh4eCAqLwot KwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiQ0lQ SEVSVEVYVCA9ICIsIDEzKSAhPSAwKQotKwkJewotKwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7 Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJaWYoIXN0cmNtcChhbW9k ZSwiQ0ZCMSIpKQotKwkJICAgIGxlbj1iaW50MmJpbihpYnVmKzEzLHN0cmxlbihpYnVmKzEzKS0x LGNpcGhlcnRleHQpOwotKwkJZWxzZQotKwkJICAgIGxlbiA9IGhleDJiaW4oaWJ1ZisxMyxjaXBo ZXJ0ZXh0KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFs aWQgQ0lQSEVSVEVYVFxuIik7Ci0rCQkgICAgZXJyID0xOwotKwkJICAgIGJyZWFrOwotKwkJICAg IH0KLSsJCQotKwkJUHJpbnRWYWx1ZSgiQ0lQSEVSVEVYVCIsIGNpcGhlcnRleHQsIGxlbik7Ci0r CQlpZiAoc3RyY21wKGF0ZXN0LCAiTW9udGUiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVzdCAq LwotKwkJICAgIHsKLSsJCSAgICBkb19tY3QoYW1vZGUsIGFrZXlzeiwgbnVta2V5cywgYUtleSwg aVZlYywgCi0rCQkJICAgZGlyLCBjaXBoZXJ0ZXh0LCBsZW4sIHJmcCk7Ci0rCQkgICAgfQotKwkJ ZWxzZQotKwkJICAgIHsKLSsJCSAgICBhc3NlcnQoZGlyID09IDApOwotKwkJICAgIHJldCA9IERF U1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJCSAgZGlyLCAgLyog MCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCi0rCQkJCSAgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0 LCBsZW4pOwotKwkJICAgIE91dHB1dFZhbHVlKCJQTEFJTlRFWFQiLCh1bnNpZ25lZCBjaGFyICop cGxhaW50ZXh0LGxlbixyZnAsCi0rCQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7Ci0rCQkgICAg fQotKwkJc3RlcCA9IDY7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSA2OgotKwkgICAg aWYgKGlidWZbMF0gIT0gJ1xuJykKLSsJCXsKLSsJCWVyciA9IDE7Ci0rCQlwcmludGYoIk1pc3Np bmcgdGVybWluYXRvclxuIik7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmIChzdHJjbXAoYXRlc3QsICJN Q1QiKSAhPSAwKQotKwkJeyAvKiBNQ1QgYWxyZWFkeSBhZGRlZCB0ZXJtaW5hdGluZyBubCAqLwot KwkJZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCX0KLSsJICAgIHN0ZXAgPSAxOwotKwkgICAgYnJlYWs7 Ci0rCSAgICB9Ci0rCX0KLSsgICAgaWYgKHJmcCkKLSsJZmNsb3NlKHJmcCk7Ci0rICAgIGlmIChh ZnApCi0rCWZjbG9zZShhZnApOwotKyAgICByZXR1cm4gZXJyOwotKyAgICB9Ci0rCi0rLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKyAgUHJvY2Vz c2VzIGVpdGhlciBhIHNpbmdsZSBmaWxlIG9yIAotKyAgYSBzZXQgb2YgZmlsZXMgd2hvc2UgbmFt ZXMgYXJlIHBhc3NlZCBpbiBhIGZpbGUuCi0rICBBIHNpbmdsZSBmaWxlIGlzIHNwZWNpZmllZCBh czoKLSsgICAgYWVzX3Rlc3QgLWYgeHh4LnJlcQotKyAgQSBzZXQgb2YgZmlsZXMgaXMgc3BlY2lm aWVkIGFzOgotKyAgICBhZXNfdGVzdCAtZCB4eHh4eC54eHgKLSsgIFRoZSBkZWZhdWx0IGlzOiAt ZCByZXEudHh0Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0qLwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsgICAgewotKyAgICBj aGFyICpycWxpc3QgPSAicmVxLnR4dCIsICpyc3BmaWxlID0gTlVMTDsKLSsgICAgRklMRSAqZnAg PSBOVUxMOwotKyAgICBjaGFyIGZuWzI1MF0gPSAiIiwgcmZuWzI1Nl0gPSAiIjsKLSsgICAgaW50 IGZfb3B0ID0gMCwgZF9vcHQgPSAxOwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYo IUZJUFNfbW9kZV9zZXQoMSkpCi0rCXsKLSsJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCUVYSVQoMSk7 Ci0rCX0KLSsjZW5kaWYKLSsgICAgaWYgKGFyZ2MgPiAxKQotKwl7Ci0rCWlmIChzdHJjYXNlY21w KGFyZ3ZbMV0sICItZCIpID09IDApCi0rCSAgICB7Ci0rCSAgICBkX29wdCA9IDE7Ci0rCSAgICB9 Ci0rCWVsc2UgaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1mIikgPT0gMCkKLSsJICAgIHsKLSsJ ICAgIGZfb3B0ID0gMTsKLSsJICAgIGRfb3B0ID0gMDsKLSsJICAgIH0KLSsJZWxzZQotKwkgICAg ewotKwkgICAgcHJpbnRmKCJJbnZhbGlkIHBhcmFtZXRlcjogJXNcbiIsIGFyZ3ZbMV0pOwotKwkg ICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCWlmIChhcmdjIDwgMykKLSsJICAgIHsKLSsJICAgIHBy aW50ZigiTWlzc2luZyBwYXJhbWV0ZXJcbiIpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0r CWlmIChkX29wdCkKLSsJICAgIHJxbGlzdCA9IGFyZ3ZbMl07Ci0rCWVsc2UKLSsJICAgIHsKLSsJ ICAgIHN0cmNweShmbiwgYXJndlsyXSk7Ci0rCSAgICByc3BmaWxlID0gYXJndlszXTsKLSsJICAg IH0KLSsJfQotKyAgICBpZiAoZF9vcHQpCi0rCXsgLyogbGlzdCBvZiBmaWxlcyAoZGlyZWN0b3J5 KSAqLwotKwlpZiAoIShmcCA9IGZvcGVuKHJxbGlzdCwgInIiKSkpCi0rCSAgICB7Ci0rCSAgICBw cmludGYoIkNhbm5vdCBvcGVuIHJlcSBsaXN0IGZpbGVcbiIpOwotKwkgICAgcmV0dXJuIC0xOwot KwkgICAgfQotKwl3aGlsZSAoZmdldHMoZm4sIHNpemVvZihmbiksIGZwKSkKLSsJICAgIHsKLSsJ ICAgIHN0cnRvayhmbiwgIlxyXG4iKTsKLSsJICAgIHN0cmNweShyZm4sIGZuKTsKLSsJICAgIHBy aW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIHJmbik7Ci0rCSAgICBpZiAocHJvY19maWxlKHJmbiwg cnNwZmlsZSkpCi0rCQl7Ci0rCQlwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVz IDw8PFxuIiwgcmZuKTsKLSsJCUVYSVQoMSk7Ci0rCQl9Ci0rCSAgICB9Ci0rCWZjbG9zZShmcCk7 Ci0rCX0KLSsgICAgZWxzZSAvKiBzaW5nbGUgZmlsZSAqLwotKwl7Ci0rCWlmIChWRVJCT1NFKQot KwkJcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgZm4pOwotKwlpZiAocHJvY19maWxlKGZuLCBy c3BmaWxlKSkKLSsJICAgIHsKLSsJICAgIHByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZv cjogJXMgPDw8XG4iLCBmbik7Ci0rCSAgICB9Ci0rCX0KLSsgICAgRVhJVCgwKTsKLSsgICAgcmV0 dXJuIDA7Ci0rICAgIH0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0 by9maXBzL2NhdnMvZmlwc19kaHZzLmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9j YXZzL2ZpcHNfZGh2cy5jCi0tLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2cy9maXBz X2RodnMuYy5maXBzCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDkzMzA2Mjg4ICswMjAwCi0rKysgb3Bl bnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RodnMuYwkyMDE0LTEwLTE2IDEzOjE5 OjM1LjA5MzMwNjI4OCArMDIwMAotQEAgLTAsMCArMSwyOTIgQEAKLSsvKiBmaXBzL2RoL2ZpcHNf ZGh2cy5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVu c3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJp 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 PT09PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSsKLSsjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQot KyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJ UFMKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgREggc3VwcG9ydFxuIik7Ci0rICAgIHJldHVy bigwKTsKLSt9Ci0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4K LSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLStzdGF0aWMgY29uc3QgRVZQX01EICpwYXJz ZV9tZChjaGFyICpsaW5lKQotKwl7Ci0rCWNoYXIgKnA7Ci0rCWlmIChsaW5lWzBdICE9ICdbJyB8 fCBsaW5lWzFdICE9ICdGJykKLSsJCXJldHVybiBOVUxMOwotKwlwID0gc3RyY2hyKGxpbmUsICct Jyk7Ci0rCWlmICghcCkKLSsJCXJldHVybiBOVUxMOwotKwlsaW5lID0gcCArIDE7Ci0rCXAgPSBz dHJjaHIobGluZSwgJ10nKTsKLSsJaWYgKCFwKQotKwkJcmV0dXJuIE5VTEw7Ci0rCSpwID0gMDsK LSsJcCA9IGxpbmU7Ci0rCXdoaWxlKGlzc3BhY2UoKnApKQotKwkJcCsrOwotKwlpZiAoIXN0cmNt cChwLCAiU0hBMSIpKQotKwkJcmV0dXJuIEVWUF9zaGExKCk7Ci0rCWVsc2UgaWYgKCFzdHJjbXAo cCwgIlNIQTIyNCIpKQotKwkJcmV0dXJuIEVWUF9zaGEyMjQoKTsKLSsJZWxzZSBpZiAoIXN0cmNt cChwLCAiU0hBMjU2IikpCi0rCQlyZXR1cm4gRVZQX3NoYTI1NigpOwotKwllbHNlIGlmICghc3Ry Y21wKHAsICJTSEEzODQiKSkKLSsJCXJldHVybiBFVlBfc2hhMzg0KCk7Ci0rCWVsc2UgaWYgKCFz dHJjbXAocCwgIlNIQTUxMiIpKQotKwkJcmV0dXJuIEVWUF9zaGE1MTIoKTsKLSsJZWxzZQotKwkJ cmV0dXJuIE5VTEw7Ci0rCX0KLSsKLStzdGF0aWMgdm9pZCBvdXRwdXRfWmhhc2goRklMRSAqb3V0 LCBpbnQgZXhvdXQsCi0rCQkJCURIICpkaCwgQklHTlVNICpwZWVya2V5LCBjb25zdCBFVlBfTUQg Km1kLAotKwkJCQl1bnNpZ25lZCBjaGFyICpyaGFzaCwgc2l6ZV90IHJoYXNobGVuKQotKwl7Ci0r CXVuc2lnbmVkIGNoYXIgKlo7Ci0rCXVuc2lnbmVkIGNoYXIgY2hhc2hbRVZQX01BWF9NRF9TSVpF XTsKLSsJaW50IFpsZW47Ci0rCWlmIChyaGFzaCA9PSBOVUxMKQotKwkJewotKwkJcmhhc2hsZW4g PSBNX0VWUF9NRF9zaXplKG1kKTsKLSsJCWlmICghREhfZ2VuZXJhdGVfa2V5KGRoKSkKLSsJCQll eGl0ICgxKTsKLSsJCWRvX2JuX3ByaW50X25hbWUob3V0LCAiWWVwaGVtSVVUIiwgZGgtPnB1Yl9r ZXkpOwotKwkJaWYgKGV4b3V0KQotKwkJCWRvX2JuX3ByaW50X25hbWUob3V0LCAiWGVwaGVtSVVU IiwgZGgtPnByaXZfa2V5KTsKLSsJCX0KLSsJWiA9IE9QRU5TU0xfbWFsbG9jKEJOX251bV9ieXRl cyhkaC0+cCkpOwotKwlpZiAoIVopCi0rCQlleGl0KDEpOwotKwlabGVuID0gREhfY29tcHV0ZV9r ZXlfcGFkZGVkKFosIHBlZXJrZXksIGRoKTsKLSsJaWYgKGV4b3V0KQotKwkJT3V0cHV0VmFsdWUo IloiLCBaLCBabGVuLCBvdXQsIDApOwotKwlGSVBTX2RpZ2VzdChaLCBabGVuLCBjaGFzaCwgTlVM TCwgbWQpOwotKwlPdXRwdXRWYWx1ZShyaGFzaCA/ICJJVVRIYXNoWloiIDogIkhhc2haWiIsIGNo YXNoLCByaGFzaGxlbiwgb3V0LCAwKTsKLSsJaWYgKHJoYXNoKQotKwkJewotKwkJZnByaW50Zihv dXQsICJSZXN1bHQgPSAlc1xuIiwKLSsJCQkJbWVtY21wKGNoYXNoLCByaGFzaCwgcmhhc2hsZW4p ID8gIkYiIDogIlAiKTsKLSsJCX0KLSsJZWxzZQotKwkJewotKwkJQk5fY2xlYXJfZnJlZShkaC0+ cHJpdl9rZXkpOwotKwkJQk5fY2xlYXJfZnJlZShkaC0+cHViX2tleSk7Ci0rCQlkaC0+cHJpdl9r ZXkgPSBOVUxMOwotKwkJZGgtPnB1Yl9rZXkgPSBOVUxMOwotKwkJfQotKwlPUEVOU1NMX2NsZWFu c2UoWiwgWmxlbik7Ci0rCU9QRU5TU0xfZnJlZShaKTsKLSsJfQotKwotKyNpZmRlZiBGSVBTX0FM R1ZTCi0raW50IGZpcHNfZGh2c19tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsjZWxzZQot K2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsjZW5kaWYKLSsJewotKwljaGFyICoq YXJncyA9IGFyZ3YgKyAxOwotKwlpbnQgYXJnbiA9IGFyZ2MgLSAxOwotKwlGSUxFICppbiwgKm91 dDsKLSsJY2hhciBidWZbMjA0OF0sIGxidWZbMjA0OF07Ci0rCXVuc2lnbmVkIGNoYXIgKnJoYXNo OwotKwlsb25nIHJoYXNobGVuOwotKwlESCAqZGggPSBOVUxMOwotKwljb25zdCBFVlBfTUQgKm1k ID0gTlVMTDsKLSsJQklHTlVNICpwZWVya2V5ID0gTlVMTDsKLSsJY2hhciAqa2V5d29yZCA9IE5V TEwsICp2YWx1ZSA9IE5VTEw7Ci0rCWludCBkb192ZXJpZnkgPSAtMSwgZXhvdXQgPSAwOwotKwot KwlmaXBzX2FsZ3Rlc3RfaW5pdCgpOwotKwotKwlpZiAoYXJnbiAmJiAhc3RyY21wKCphcmdzLCAi ZGh2ZXIiKSkKLSsJCXsKLSsJCWRvX3ZlcmlmeSA9IDE7Ci0rCQlhcmdzKys7Ci0rCQlhcmduLS07 Ci0rCQl9Ci0rCWVsc2UgaWYgKGFyZ24gJiYgIXN0cmNtcCgqYXJncywgImRoZ2VuIikpCi0rCQl7 Ci0rCQlkb192ZXJpZnkgPSAwOwotKwkJYXJncysrOwotKwkJYXJnbi0tOwotKwkJfQotKwotKwlp ZiAoYXJnbiAmJiAhc3RyY21wKCphcmdzLCAiLWV4b3V0IikpCi0rCQl7Ci0rCQlleG91dCA9IDE7 Ci0rCQlhcmdzKys7Ci0rCQlhcmduLS07Ci0rCQl9Ci0rCi0rCWlmIChkb192ZXJpZnkgPT0gLTEp Ci0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwiJXMgW2RodmVyfGRoZ2VufF0gWy1leG91dF0gKGlu ZmlsZSBvdXRmaWxlKVxuIixhcmd2WzBdKTsKLSsJCWV4aXQoMSk7Ci0rCQl9Ci0rCi0rCWlmIChh cmduID09IDIpCi0rCQl7Ci0rCQlpbiA9IGZvcGVuKCphcmdzLCAiciIpOwotKwkJaWYgKCFpbikK LSsJCQl7Ci0rCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIGlucHV0IGZpbGVcbiIp OwotKwkJCWV4aXQoMSk7Ci0rCQkJfQotKwkJb3V0ID0gZm9wZW4oYXJnc1sxXSwgInciKTsKLSsJ CWlmICghb3V0KQotKwkJCXsKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgb3V0 cHV0IGZpbGVcbiIpOwotKwkJCWV4aXQoMSk7Ci0rCQkJfQotKwkJfQotKwllbHNlIGlmIChhcmdu ID09IDApCi0rCQl7Ci0rCQlpbiA9IHN0ZGluOwotKwkJb3V0ID0gc3Rkb3V0OwotKwkJfQotKwll bHNlCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwiJXMgW2RodmVyfGRoZ2VufF0gWy1leG91dF0g KGluZmlsZSBvdXRmaWxlKVxuIixhcmd2WzBdKTsKLSsJCWV4aXQoMSk7Ci0rCQl9Ci0rCi0rCWRo ID0gRklQU19kaF9uZXcoKTsKLSsKLSsJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGlu KSAhPSBOVUxMKQotKwkJewotKwkJZnB1dHMoYnVmLCBvdXQpOwotKwkJaWYgKHN0cmxlbihidWYp ID4gNiAmJiAhc3RybmNtcChidWYsICJbRiIsIDIpKQotKwkJCXsKLSsJCQltZCA9IHBhcnNlX21k KGJ1Zik7Ci0rCQkJaWYgKG1kID09IE5VTEwpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJ aWYgKGRoKQotKwkJCQlGSVBTX2RoX2ZyZWUoZGgpOwotKwkJCWRoID0gRklQU19kaF9uZXcoKTsK LSsJCQljb250aW51ZTsKLSsJCQl9Ci0rCQlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1 ZSwgbGJ1ZiwgYnVmKSkKLSsJCQljb250aW51ZTsKLSsJCWlmICghc3RyY21wKGtleXdvcmQsICJQ IikpCi0rCQkJewotKwkJCWlmICghZG9faGV4MmJuKCZkaC0+cCwgdmFsdWUpKQotKwkJCQlnb3Rv IHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlEiKSkK LSsJCQl7Ci0rCQkJaWYgKCFkb19oZXgyYm4oJmRoLT5xLCB2YWx1ZSkpCi0rCQkJCWdvdG8gcGFy c2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiRyIpKQotKwkJ CXsKLSsJCQlpZiAoIWRvX2hleDJibigmZGgtPmcsIHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9l cnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJYZXBoZW1JVVQiKSkK LSsJCQl7Ci0rCQkJaWYgKCFkb19oZXgyYm4oJmRoLT5wcml2X2tleSwgdmFsdWUpKQotKwkJCQln b3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlll cGhlbUlVVCIpKQotKwkJCXsKLSsJCQlpZiAoIWRvX2hleDJibigmZGgtPnB1Yl9rZXksIHZhbHVl KSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJZZXBoZW1DQVZTIikpCi0rCQkJewotKwkJCWlmICghZG9faGV4MmJuKCZwZWVya2V5 LCB2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJaWYgKGRvX3ZlcmlmeSA9PSAw KQotKwkJCQlvdXRwdXRfWmhhc2gob3V0LCBleG91dCwgZGgsIHBlZXJrZXksIG1kLAotKwkJCQkJ CQlOVUxMLCAwKTsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJDQVZTSGFz aFpaIikpCi0rCQkJewotKwkJCWlmICghbWQpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJ cmhhc2ggPSBoZXgyYmluX20odmFsdWUsICZyaGFzaGxlbik7Ci0rCQkJaWYgKCFyaGFzaCB8fCBy aGFzaGxlbiAhPSBNX0VWUF9NRF9zaXplKG1kKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJ CQlvdXRwdXRfWmhhc2gob3V0LCBleG91dCwgZGgsIHBlZXJrZXksIG1kLAotKwkJCQkJCQlyaGFz aCwgcmhhc2hsZW4pOwotKwkJCX0KLSsJCX0KLSsJaWYgKGluICYmIGluICE9IHN0ZGluKQotKwkJ ZmNsb3NlKGluKTsKLSsJaWYgKG91dCAmJiBvdXQgIT0gc3Rkb3V0KQotKwkJZmNsb3NlKG91dCk7 Ci0rCXJldHVybiAwOwotKwlwYXJzZV9lcnJvcjoKLSsJZnByaW50ZihzdGRlcnIsICJFcnJvciBQ YXJzaW5nIHJlcXVlc3QgZmlsZVxuIik7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsKLSsjZW5kaWYKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19kcmJndnMuYy5maXBz IG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19kcmJndnMuYwotLS0tIG9wZW5z c2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19kcmJndnMuYy5maXBzCTIwMTQtMTAtMTYg MTM6MTk6MzUuMDkzMzA2Mjg4ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX2RyYmd2cy5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDkzMzA2Mjg4ICswMjAwCi1A QCAtMCwwICsxLDQxNiBAQAotKy8qIGZpcHMvcmFuZC9maXBzX2RyYmd2cy5jICovCi0rLyogV3Jp dHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBP cGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdo dCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsg KgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp bgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0 aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAg ICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0 cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRv b2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAg ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdp dGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1p c3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAq Ci0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBj YWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWly IG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9w ZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3 aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBS RVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JT IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU Ci0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK LSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LSsgKi8KLSsKLSsKLSsjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQotKyNpbmNsdWRlIDxvcGVuc3Ns L29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8c3Rk aW8uaD4KLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rewotKyAgICBwcmlu dGYoIk5vIEZJUFMgRFJCRyBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsjZWxz ZQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFu ZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5o PgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsKLSsjaW5jbHVk ZSAiZmlwc191dGwuaCIKLSsKLStzdGF0aWMgaW50IGRwYXJzZV9tZChjaGFyICpzdHIpCi0rCXsK LSsJc3dpdGNoKGF0b2koc3RyICsgNSkpCi0rCQl7Ci0rCQljYXNlIDE6Ci0rCQlyZXR1cm4gTklE X3NoYTE7Ci0rCi0rCQljYXNlIDIyNDoKLSsJCXJldHVybiBOSURfc2hhMjI0OwotKwotKwkJY2Fz ZSAyNTY6Ci0rCQlyZXR1cm4gTklEX3NoYTI1NjsKLSsKLSsJCWNhc2UgMzg0OgotKwkJcmV0dXJu IE5JRF9zaGEzODQ7Ci0rCi0rCQljYXNlIDUxMjoKLSsJCXJldHVybiBOSURfc2hhNTEyOwotKwot KwkJfQotKwotKwlyZXR1cm4gTklEX3VuZGVmOwotKwl9Ci0rCi0rc3RhdGljIGludCBwYXJzZV9l YyhjaGFyICpzdHIpCi0rCXsKLSsJaW50IGN1cnZlX25pZCwgbWRfbmlkOwotKwljaGFyICptZDsK LSsJbWQgPSBzdHJjaHIoc3RyLCAnICcpOwotKwlpZiAoIW1kKQotKwkJcmV0dXJuIE5JRF91bmRl ZjsKLSsJaWYgKCFzdHJuY21wKHN0ciwgIltQLTI1NiIsIDYpKQotKwkJY3VydmVfbmlkID0gTklE X1g5XzYyX3ByaW1lMjU2djE7Ci0rCWVsc2UgaWYgKCFzdHJuY21wKHN0ciwgIltQLTM4NCIsIDYp KQotKwkJY3VydmVfbmlkID0gTklEX3NlY3AzODRyMTsKLSsJZWxzZSBpZiAoIXN0cm5jbXAoc3Ry LCAiW1AtNTIxIiwgNikpCi0rCQljdXJ2ZV9uaWQgPSBOSURfc2VjcDUyMXIxOwotKwllbHNlCi0r CQlyZXR1cm4gTklEX3VuZGVmOwotKwltZF9uaWQgPSBkcGFyc2VfbWQobWQpOwotKwlpZiAobWRf bmlkID09IE5JRF91bmRlZikKLSsJCXJldHVybiBOSURfdW5kZWY7Ci0rCXJldHVybiAoY3VydmVf bmlkIDw8IDE2KSB8IG1kX25pZDsKLSsJfQotKwotK3N0YXRpYyBpbnQgcGFyc2VfYWVzKGNoYXIg KnN0ciwgaW50ICpwZGYpCi0rCXsKLSsKLSsJaWYgKCFzdHJuY21wKHN0ciArIDksICJubyIsIDIp KQotKwkJKnBkZiA9IDA7Ci0rCWVsc2UKLSsJCSpwZGYgPSBEUkJHX0ZMQUdfQ1RSX1VTRV9ERjsK LSsKLSsJc3dpdGNoKGF0b2koc3RyICsgNSkpCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCXJldHVy biBOSURfYWVzXzEyOF9jdHI7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCXJldHVybiBOSURfYWVzXzE5 Ml9jdHI7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCXJldHVybiBOSURfYWVzXzI1Nl9jdHI7Ci0rCi0r CQlkZWZhdWx0OgotKwkJcmV0dXJuIE5JRF91bmRlZjsKLSsKLSsJCX0KLSsJfQotKwotK3R5cGVk ZWYgc3RydWN0IAotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgKmVudDsKLSsJc2l6ZV90IGVudGxlbjsK LSsJdW5zaWduZWQgY2hhciAqbm9uY2U7Ci0rCXNpemVfdCBub25jZWxlbjsKLSsJfSBURVNUX0VO VDsKLSsKLStzdGF0aWMgc2l6ZV90IHRlc3RfZW50cm9weShEUkJHX0NUWCAqZGN0eCwgdW5zaWdu ZWQgY2hhciAqKnBvdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50 cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQotKwl7Ci0rCVRFU1RfRU5UICp0 ID0gRklQU19kcmJnX2dldF9hcHBfZGF0YShkY3R4KTsKLSsJKnBvdXQgPSAodW5zaWduZWQgY2hh ciAqKXQtPmVudDsKLSsJcmV0dXJuIHQtPmVudGxlbjsKLSsJfQotKwotK3N0YXRpYyBzaXplX3Qg dGVzdF9ub25jZShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNp emVfdCBtYXhfbGVuKQotKwl7Ci0rCVRFU1RfRU5UICp0ID0gRklQU19kcmJnX2dldF9hcHBfZGF0 YShkY3R4KTsKLSsJKnBvdXQgPSAodW5zaWduZWQgY2hhciAqKXQtPm5vbmNlOwotKwlyZXR1cm4g dC0+bm9uY2VsZW47Ci0rCX0KLSsKLSsjaWZkZWYgRklQU19BTEdWUwotK2ludCBmaXBzX2RyYmd2 c19tYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQotKyNlbHNlCi0raW50IG1haW4oaW50IGFyZ2Ms Y2hhciAqKmFyZ3YpCi0rI2VuZGlmCi0rCXsKLSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVM TDsKLSsJRFJCR19DVFggKmRjdHggPSBOVUxMOwotKwlURVNUX0VOVCB0OwotKwlpbnQgciwgbmlk ID0gMDsKLSsJaW50IHByID0gMDsKLSsJY2hhciBidWZbMjA0OF0sIGxidWZbMjA0OF07Ci0rCXVu c2lnbmVkIGNoYXIgcmFuZG91dFsyMDQ4XTsKLSsJY2hhciAqa2V5d29yZCA9IE5VTEwsICp2YWx1 ZSA9IE5VTEw7Ci0rCi0rCXVuc2lnbmVkIGNoYXIgKmVudCA9IE5VTEwsICpub25jZSA9IE5VTEws ICpwZXJzID0gTlVMTCwgKmFkaW4gPSBOVUxMOwotKwlsb25nIGVudGxlbiwgbm9uY2VsZW4sIHBl cnNsZW4sIGFkaW5sZW47Ci0rCWludCBkZiA9IDA7Ci0rCi0rCWVudW0gZHR5cGUgeyBEUkJHX05P TkUsIERSQkdfQ1RSLCBEUkJHX0hBU0gsIERSQkdfSE1BQywgRFJCR19EVUFMX0VDIH0KLSsJCWRy YmdfdHlwZSA9IERSQkdfTk9ORTsKLSsKLSsJaW50IHJhbmRvdXRsZW4gPSAwOwotKwotKwlpbnQg Z2VuID0gMDsKLSsKLSsJZmlwc19hbGd0ZXN0X2luaXQoKTsKLSsKLSsJaWYgKGFyZ2MgPT0gMykK LSsJCXsKLSsJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKLSsJCWlmICghaW4pCi0rCQkJewot KwkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBpbnB1dCBmaWxlXG4iKTsKLSsJCQll eGl0KDEpOwotKwkJCX0KLSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7Ci0rCQlpZiAoIW91 dCkKLSsJCQl7Ci0rCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIG91dHB1dCBmaWxl XG4iKTsKLSsJCQlleGl0KDEpOwotKwkJCX0KLSsJCX0KLSsJZWxzZSBpZiAoYXJnYyA9PSAxKQot KwkJewotKwkJaW4gPSBzdGRpbjsKLSsJCW91dCA9IHN0ZG91dDsKLSsJCX0KLSsJZWxzZQotKwkJ ewotKwkJZnByaW50ZihzdGRlcnIsIiVzIChpbmZpbGUgb3V0ZmlsZSlcbiIsYXJndlswXSk7Ci0r CQlleGl0KDEpOwotKwkJfQotKwotKwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgaW4p ICE9IE5VTEwpCi0rCQl7Ci0rCQlmcHV0cyhidWYsIG91dCk7Ci0rCQlpZiAoZHJiZ190eXBlID09 IERSQkdfTk9ORSkKLSsJCQl7Ci0rCQkJaWYgKHN0cnN0cihidWYsICJDVFJfRFJCRyIpKQotKwkJ CQlkcmJnX3R5cGUgPSBEUkJHX0NUUjsKLSsJCQllbHNlIGlmIChzdHJzdHIoYnVmLCAiSGFzaF9E UkJHIikpCi0rCQkJCWRyYmdfdHlwZSA9IERSQkdfSEFTSDsKLSsJCQllbHNlIGlmIChzdHJzdHIo YnVmLCAiSE1BQ19EUkJHIikpCi0rCQkJCWRyYmdfdHlwZSA9IERSQkdfSE1BQzsKLSsJCQllbHNl IGlmIChzdHJzdHIoYnVmLCAiRHVhbF9FQ19EUkJHIikpCi0rCQkJCWRyYmdfdHlwZSA9IERSQkdf RFVBTF9FQzsKLSsJCQllbHNlCi0rCQkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCWlmIChzdHJsZW4o YnVmKSA+IDQgJiYgIXN0cm5jbXAoYnVmLCAiW1NIQS0iLCA1KSkKLSsJCQl7Ci0rCQkJbmlkID0g ZHBhcnNlX21kKGJ1Zik7Ci0rCQkJaWYgKG5pZCA9PSBOSURfdW5kZWYpCi0rCQkJCWV4aXQoMSk7 Ci0rCQkJaWYgKGRyYmdfdHlwZSA9PSBEUkJHX0hNQUMpCi0rCQkJCXsKLSsJCQkJc3dpdGNoIChu aWQpCi0rCQkJCQl7Ci0rCQkJCQljYXNlIE5JRF9zaGExOgotKwkJCQkJbmlkID0gTklEX2htYWNX aXRoU0hBMTsKLSsJCQkJCWJyZWFrOwotKwotKwkJCQkJY2FzZSBOSURfc2hhMjI0OgotKwkJCQkJ bmlkID0gTklEX2htYWNXaXRoU0hBMjI0OwotKwkJCQkJYnJlYWs7Ci0rCi0rCQkJCQljYXNlIE5J RF9zaGEyNTY6Ci0rCQkJCQluaWQgPSBOSURfaG1hY1dpdGhTSEEyNTY7Ci0rCQkJCQlicmVhazsK LSsKLSsJCQkJCWNhc2UgTklEX3NoYTM4NDoKLSsJCQkJCW5pZCA9IE5JRF9obWFjV2l0aFNIQTM4 NDsKLSsJCQkJCWJyZWFrOwotKwotKwkJCQkJY2FzZSBOSURfc2hhNTEyOgotKwkJCQkJbmlkID0g TklEX2htYWNXaXRoU0hBNTEyOwotKwkJCQkJYnJlYWs7Ci0rCi0rCQkJCQlkZWZhdWx0OgotKwkJ CQkJZXhpdCgxKTsKLSsJCQkJCX0KLSsJCQkJfQotKwkJCX0KLSsJCWlmIChzdHJsZW4oYnVmKSA+ IDEyICYmICFzdHJuY21wKGJ1ZiwgIltBRVMtIiwgNSkpCi0rCQkJewotKwkJCW5pZCA9IHBhcnNl X2FlcyhidWYsICZkZik7Ci0rCQkJaWYgKG5pZCA9PSBOSURfdW5kZWYpCi0rCQkJCWV4aXQoMSk7 Ci0rCQkJfQotKwkJaWYgKHN0cmxlbihidWYpID4gMTIgJiYgIXN0cm5jbXAoYnVmLCAiW1AtIiwg MykpCi0rCQkJewotKwkJCW5pZCA9IHBhcnNlX2VjKGJ1Zik7Ci0rCQkJaWYgKG5pZCA9PSBOSURf dW5kZWYpCi0rCQkJCWV4aXQoMSk7Ci0rCQkJfQotKwkJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3Jk LCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQkJY29udGludWU7Ci0rCi0rCQlpZiAoIXN0cmNtcChr ZXl3b3JkLCAiW1ByZWRpY3Rpb25SZXNpc3RhbmNlIikpCi0rCQkJewotKwkJCWlmICghc3RyY21w KHZhbHVlLCAiVHJ1ZV0iKSkKLSsJCQkJcHIgPSAxOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFs dWUsICJGYWxzZV0iKSkKLSsJCQkJcHIgPSAwOwotKwkJCWVsc2UKLSsJCQkJZXhpdCgxKTsKLSsJ CQl9Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiRW50cm9weUlucHV0IikpCi0rCQkJewot KwkJCWVudCA9IGhleDJiaW5fbSh2YWx1ZSwgJmVudGxlbik7Ci0rCQkJdC5lbnQgPSBlbnQ7Ci0r CQkJdC5lbnRsZW4gPSBlbnRsZW47Ci0rCQkJfQotKwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwg Ik5vbmNlIikpCi0rCQkJewotKwkJCW5vbmNlID0gaGV4MmJpbl9tKHZhbHVlLCAmbm9uY2VsZW4p OwotKwkJCXQubm9uY2UgPSBub25jZTsKLSsJCQl0Lm5vbmNlbGVuID0gbm9uY2VsZW47Ci0rCQkJ fQotKwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIlBlcnNvbmFsaXphdGlvblN0cmluZyIpKQot KwkJCXsKLSsJCQlwZXJzID0gaGV4MmJpbl9tKHZhbHVlLCAmcGVyc2xlbik7Ci0rCQkJaWYgKG5p ZCA9PSAwKQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiRFJCRyB0eXBlIG5vdCByZWNv Z25pc2VkIVxuIik7Ci0rCQkJCWV4aXQgKDEpOwotKwkJCQl9Ci0rCQkJZGN0eCA9IEZJUFNfZHJi Z19uZXcobmlkLCBkZiB8IERSQkdfRkxBR19URVNUKTsKLSsJCQlpZiAoIWRjdHgpCi0rCQkJCWV4 aXQgKDEpOwotKwkJCUZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKGRjdHgsIHRlc3RfZW50cm9weSwg MCwgMCwKLSsJCQkJCQkJdGVzdF9ub25jZSwgMCk7Ci0rCQkJRklQU19kcmJnX3NldF9hcHBfZGF0 YShkY3R4LCAmdCk7Ci0rCQkJcmFuZG91dGxlbiA9IChpbnQpRklQU19kcmJnX2dldF9ibG9ja2xl bmd0aChkY3R4KTsKLSsJCQlyID0gRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHBlcnMsIHBl cnNsZW4pOwotKwkJCWlmICghcikKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9y IGluc3RhbnRpYXRpbmcgRFJCR1xuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQlPUEVO U1NMX2ZyZWUocGVycyk7Ci0rCQkJT1BFTlNTTF9mcmVlKGVudCk7Ci0rCQkJT1BFTlNTTF9mcmVl KG5vbmNlKTsKLSsJCQllbnQgPSBub25jZSA9IHBlcnMgPSBOVUxMOwotKwkJCWdlbiA9IDA7Ci0r CQkJfQotKwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkFkZGl0aW9uYWxJbnB1dCIpKQotKwkJ CXsKLSsJCQlhZGluID0gaGV4MmJpbl9tKHZhbHVlLCAmYWRpbmxlbik7Ci0rCQkJaWYgKHByKQot KwkJCQljb250aW51ZTsKLSsJCQlyID0gRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQs IHJhbmRvdXRsZW4sIDAsCi0rCQkJCQkJCQlhZGluLCBhZGlubGVuKTsKLSsJCQlpZiAoIXIpCi0r CQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBnZW5lcmF0aW5nIERSQkcgYml0c1xu Iik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQlpZiAoIXIpCi0rCQkJCWV4aXQoMSk7Ci0r CQkJT1BFTlNTTF9mcmVlKGFkaW4pOwotKwkJCWFkaW4gPSBOVUxMOwotKwkJCWdlbisrOwotKwkJ CX0KLSsKLSsJCWlmIChwcikKLSsJCQl7Ci0rCQkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkVudHJv cHlJbnB1dFBSIikpCi0rCQkJCXsKLSsJCQkJZW50ID0gaGV4MmJpbl9tKHZhbHVlLCAmZW50bGVu KTsKLSsJCQkJdC5lbnQgPSBlbnQ7Ci0rCQkJCXQuZW50bGVuID0gZW50bGVuOwotKwkJCQlyID0g RklQU19kcmJnX2dlbmVyYXRlKGRjdHgsCi0rCQkJCQkJCXJhbmRvdXQsIHJhbmRvdXRsZW4sCi0r CQkJCQkJCTEsIGFkaW4sIGFkaW5sZW4pOwotKwkJCQlpZiAoIXIpCi0rCQkJCQl7Ci0rCQkJCQlm cHJpbnRmKHN0ZGVyciwKLSsJCQkJCQkiRXJyb3IgZ2VuZXJhdGluZyBEUkJHIGJpdHNcbiIpOwot KwkJCQkJZXhpdCgxKTsKLSsJCQkJCX0KLSsJCQkJT1BFTlNTTF9mcmVlKGFkaW4pOwotKwkJCQlP UEVOU1NMX2ZyZWUoZW50KTsKLSsJCQkJYWRpbiA9IGVudCA9IE5VTEw7Ci0rCQkJCWdlbisrOwot KwkJCQl9Ci0rCQkJfQotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkVudHJvcHlJbnB1dFJlc2Vl ZCIpKQotKwkJCXsKLSsJCQllbnQgPSBoZXgyYmluX20odmFsdWUsICZlbnRsZW4pOwotKwkJCXQu ZW50ID0gZW50OwotKwkJCXQuZW50bGVuID0gZW50bGVuOwotKwkJCX0KLSsJCWlmICghc3RyY21w KGtleXdvcmQsICJBZGRpdGlvbmFsSW5wdXRSZXNlZWQiKSkKLSsJCQl7Ci0rCQkJYWRpbiA9IGhl eDJiaW5fbSh2YWx1ZSwgJmFkaW5sZW4pOwotKwkJCUZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgYWRp biwgYWRpbmxlbik7Ci0rCQkJT1BFTlNTTF9mcmVlKGVudCk7Ci0rCQkJT1BFTlNTTF9mcmVlKGFk aW4pOwotKwkJCWVudCA9IGFkaW4gPSBOVUxMOwotKwkJCX0KLSsJCWlmIChnZW4gPT0gMikKLSsJ CQl7Ci0rCQkJT3V0cHV0VmFsdWUoIlJldHVybmVkQml0cyIsIHJhbmRvdXQsIHJhbmRvdXRsZW4s Ci0rCQkJCQkJCQkJb3V0LCAwKTsKLSsJCQlGSVBTX2RyYmdfZnJlZShkY3R4KTsKLSsJCQlkY3R4 ID0gTlVMTDsKLSsJCQlnZW4gPSAwOwotKwkJCX0KLSsKLSsJCX0KLSsJaWYgKGluICYmIGluICE9 IHN0ZGluKQotKwkJZmNsb3NlKGluKTsKLSsJaWYgKG91dCAmJiBvdXQgIT0gc3Rkb3V0KQotKwkJ ZmNsb3NlKG91dCk7Ci0rCXJldHVybiAwOwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4xai9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMuYy5maXBzIG9wZW5zc2wtMS4w LjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19kc3N2cy5jCi0tLS0gb3BlbnNzbC0xLjAuMWovY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMuZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5MzMw NjI4OCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19kc3N2 cy5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDkzMzA2Mjg4ICswMjAwCi1AQCAtMCwwICsxLDUzNyBA QAotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NM X0ZJUFMKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgRFNBIHN1cHBvcnRcbiIpOwotKyAgICBy ZXR1cm4oMCk7Ci0rfQotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9kc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUg PHN0cmluZy5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5o IgotKwotK3N0YXRpYyB2b2lkIHBibihjb25zdCBjaGFyICpuYW1lLCBCSUdOVU0gKmJuKQotKwl7 Ci0rCWludCBsZW4sIGk7Ci0rCXVuc2lnbmVkIGNoYXIgKnRtcDsKLSsJbGVuID0gQk5fbnVtX2J5 dGVzKGJuKTsKLSsJdG1wID0gT1BFTlNTTF9tYWxsb2MobGVuKTsKLSsJaWYgKCF0bXApCi0rCQl7 Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKLSsJCXJl dHVybjsKLSsJCX0KLSsJQk5fYm4yYmluKGJuLCB0bXApOwotKwlwcmludGYoIiVzID0gIiwgbmFt ZSk7Ci0rCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLSsJCXByaW50ZigiJTAyWCIsIHRtcFtp XSk7Ci0rCWZwdXRzKCJcbiIsIHN0ZG91dCk7Ci0rCU9QRU5TU0xfZnJlZSh0bXApOwotKwlyZXR1 cm47Ci0rCX0KLSsKLSt2b2lkIHByaW1lcygpCi0rICAgIHsKLSsgICAgY2hhciBidWZbMTAyNDBd OwotKyAgICBjaGFyIGxidWZbMTAyNDBdOwotKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0r Ci0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0r CWZwdXRzKGJ1ZixzdGRvdXQpOwotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwg bGJ1ZiwgYnVmKSkKLSsJCWNvbnRpbnVlOwotKwlpZighc3RyY21wKGtleXdvcmQsIlByaW1lIikp Ci0rCSAgICB7Ci0rCSAgICBCSUdOVU0gKnBwOwotKwotKwkgICAgcHA9Qk5fbmV3KCk7Ci0rCSAg ICBkb19oZXgyYm4oJnBwLHZhbHVlKTsKLSsJICAgIHByaW50ZigicmVzdWx0PSAlY1xuIiwKLSsJ CSAgIEJOX2lzX3ByaW1lX2V4KHBwLDIwLE5VTEwsTlVMTCkgPyAnUCcgOiAnRicpOwotKwkgICAg fQkgICAgCi0rCX0KLSsgICAgfQotKwotK3ZvaWQgcHFnKCkKLSsgICAgewotKyAgICBjaGFyIGJ1 ZlsxMDI0XTsKLSsgICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICBjaGFyICprZXl3b3JkLCAqdmFs dWU7Ci0rICAgIGludCBubW9kPTA7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVm LHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVl LCBsYnVmLCBidWYpKQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsK LSsJCX0KLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICBubW9kPWF0b2kodmFs dWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTiIpKQotKwkgICAgewotKwkgICAgaW50 IG49YXRvaSh2YWx1ZSk7Ci0rCi0rCSAgICBwcmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsK LSsKLSsJICAgIHdoaWxlKG4tLSkKLSsJCXsKLSsJCXVuc2lnbmVkIGNoYXIgc2VlZFsyMF07Ci0r CQlEU0EgKmRzYTsKLSsJCWludCBjb3VudGVyOwotKwkJdW5zaWduZWQgbG9uZyBoOwotKwkJZHNh ID0gRklQU19kc2FfbmV3KCk7Ci0rCi0rCQlpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4 KGRzYSwgbm1vZCxzZWVkLDAsJmNvdW50ZXIsJmgsTlVMTCkpCi0rCQkJewotKwkJCWRvX3ByaW50 X2Vycm9ycygpOwotKwkJCWV4aXQoMSk7Ci0rCQkJfQotKwkJcGJuKCJQIixkc2EtPnApOwotKwkJ cGJuKCJRIixkc2EtPnEpOwotKwkJcGJuKCJHIixkc2EtPmcpOwotKwkJcHYoIlNlZWQiLHNlZWQs MjApOwotKwkJcHJpbnRmKCJjID0gJWRcbiIsY291bnRlcik7Ci0rCQlwcmludGYoIkggPSAlbHhc biIsaCk7Ci0rCQlwdXRjKCdcbicsc3Rkb3V0KTsKLSsJCX0KLSsJICAgIH0KLSsJZWxzZQotKwkg ICAgZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCX0KLSsgICAgfQotKwotK3ZvaWQgcHFndmVyKCkKLSsg ICAgewotKyAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICBj aGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rICAgIEJJR05VTSAqcCA9IE5VTEwsICpxID0gTlVMTCwg KmcgPSBOVUxMOwotKyAgICBpbnQgY291bnRlciwgY291bnRlcjI7Ci0rICAgIHVuc2lnbmVkIGxv bmcgaCwgaDI7Ci0rICAgIERTQSAqZHNhPU5VTEw7Ci0rICAgIGludCBubW9kPTA7Ci0rICAgIHVu c2lnbmVkIGNoYXIgc2VlZFsxMDI0XTsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBi dWYsc3RkaW4pICE9IE5VTEwpCi0rCXsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFs dWUsIGxidWYsIGJ1ZikpCi0rCQl7Ci0rCQlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJCWNvbnRpbnVl OwotKwkJfQotKwlmcHV0cyhidWYsIHN0ZG91dCk7Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiW21v ZCIpKQotKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQs IlAiKSkKLSsJICAgIHA9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQs IlEiKSkKLSsJICAgIHE9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQs IkciKSkKLSsJICAgIGc9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQs IlNlZWQiKSkKLSsJICAgIHsKLSsJICAgIGludCBzbGVuID0gaGV4MmJpbih2YWx1ZSwgc2VlZCk7 Ci0rCSAgICBpZiAoc2xlbiAhPSAyMCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiU2VlZCBw YXJzZSBsZW5ndGggZXJyb3JcbiIpOwotKwkJZXhpdCAoMSk7Ci0rCQl9Ci0rCSAgICB9Ci0rCWVs c2UgaWYoIXN0cmNtcChrZXl3b3JkLCJjIikpCi0rCSAgICBjb3VudGVyID1hdG9pKGJ1Zis0KTsK LSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkgiKSkKLSsJICAgIHsKLSsJICAgIGggPSBhdG9p KHZhbHVlKTsKLSsJICAgIGlmICghcCB8fCAhcSB8fCAhZykKLSsJCXsKLSsJCWZwcmludGYoc3Rk ZXJyLCAiUGFyc2UgRXJyb3JcbiIpOwotKwkJZXhpdCAoMSk7Ci0rCQl9Ci0rCSAgICBkc2EgPSBG SVBTX2RzYV9uZXcoKTsKLSsJICAgIGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNh LCBubW9kLHNlZWQsMjAgLCZjb3VudGVyMiwmaDIsTlVMTCkpCi0rCQkJewotKwkJCWRvX3ByaW50 X2Vycm9ycygpOwotKwkJCWV4aXQoMSk7Ci0rCQkJfQotKyAgICAgICAgICAgIGlmIChCTl9jbXAo ZHNhLT5wLCBwKSB8fCBCTl9jbXAoZHNhLT5xLCBxKSB8fCBCTl9jbXAoZHNhLT5nLCBnKQotKwkJ fHwgKGNvdW50ZXIgIT0gY291bnRlcjIpIHx8IChoICE9IGgyKSkKLSsJICAgIAlwcmludGYoIlJl c3VsdCA9IEZcbiIpOwotKwkgICAgZWxzZQotKwkgICAgCXByaW50ZigiUmVzdWx0ID0gUFxuIik7 Ci0rCSAgICBCTl9mcmVlKHApOwotKwkgICAgQk5fZnJlZShxKTsKLSsJICAgIEJOX2ZyZWUoZyk7 Ci0rCSAgICBwID0gTlVMTDsKLSsJICAgIHEgPSBOVUxMOwotKwkgICAgZyA9IE5VTEw7Ci0rCSAg ICBGSVBTX2RzYV9mcmVlKGRzYSk7Ci0rCSAgICBkc2EgPSBOVUxMOwotKwkgICAgfQotKwl9Ci0r ICAgIH0KLSsKLSsvKiBLZXlwYWlyIHZlcmlmaWNhdGlvbiByb3V0aW5lLiBOQjogdGhpcyBpc24n dCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBGSVBTMTQwLTIKLSsgKiBhbGdvcml0aG0gdGVzdHMuIEl0 IGlzIGFuIGFkZGl0aW9uYWwgdGVzdCB0byBwZXJmb3JtIHNhbml0eSBjaGVja3Mgb24gdGhlCi0r ICogb3V0cHV0IG9mIHRoZSBLZXlQYWlyIHRlc3QuCi0rICovCi0rCi0rc3RhdGljIGludCBkc3Nf cGFyYW1jaGVjayhpbnQgbm1vZCwgQklHTlVNICpwLCBCSUdOVU0gKnEsIEJJR05VTSAqZywKLSsJ CQkJCQkJQk5fQ1RYICpjdHgpCi0rICAgIHsKLSsgICAgQklHTlVNICpyZW0gPSBOVUxMOwotKyAg ICBpZiAoQk5fbnVtX2JpdHMocCkgIT0gbm1vZCkKLSsJcmV0dXJuIDA7Ci0rICAgIGlmIChCTl9u dW1fYml0cyhxKSAhPSAxNjApCi0rCXJldHVybiAwOwotKyAgICBpZiAoQk5faXNfcHJpbWVfZXgo cCwgQk5fcHJpbWVfY2hlY2tzLCBjdHgsIE5VTEwpICE9IDEpCi0rCXJldHVybiAwOwotKyAgICBp ZiAoQk5faXNfcHJpbWVfZXgocSwgQk5fcHJpbWVfY2hlY2tzLCBjdHgsIE5VTEwpICE9IDEpCi0r CXJldHVybiAwOwotKyAgICByZW0gPSBCTl9uZXcoKTsKLSsgICAgaWYgKCFCTl9tb2QocmVtLCBw LCBxLCBjdHgpIHx8ICFCTl9pc19vbmUocmVtKQotKyAgICAJfHwgKEJOX2NtcChnLCBCTl92YWx1 ZV9vbmUoKSkgPD0gMCkKLSsJfHwgIUJOX21vZF9leHAocmVtLCBnLCBxLCBwLCBjdHgpIHx8ICFC Tl9pc19vbmUocmVtKSkKLSsJewotKwlCTl9mcmVlKHJlbSk7Ci0rCXJldHVybiAwOwotKwl9Ci0r ICAgIC8qIFRvZG86IGNoZWNrIGcgKi8KLSsgICAgQk5fZnJlZShyZW0pOwotKyAgICByZXR1cm4g MTsKLSsgICAgfQotKwotK3ZvaWQga2V5dmVyKCkKLSsgICAgewotKyAgICBjaGFyIGJ1ZlsxMDI0 XTsKLSsgICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0r ICAgIEJJR05VTSAqcCA9IE5VTEwsICpxID0gTlVMTCwgKmcgPSBOVUxMLCAqWCA9IE5VTEwsICpZ ID0gTlVMTDsKLSsgICAgQklHTlVNICpZMjsKLSsgICAgQk5fQ1RYICpjdHggPSBOVUxMOwotKyAg ICBpbnQgbm1vZD0wLCBwYXJhbWNoZWNrID0gMDsKLSsKLSsgICAgY3R4ID0gQk5fQ1RYX25ldygp OwotKyAgICBZMiA9IEJOX25ldygpOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1 ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1 ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJY29udGludWU7 Ci0rCQl9Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkgICAgewotKwkgICAgaWYg KHApCi0rCQlCTl9mcmVlKHApOwotKwkgICAgcCA9IE5VTEw7Ci0rCSAgICBpZiAocSkKLSsJCUJO X2ZyZWUocSk7Ci0rCSAgICBxID0gTlVMTDsKLSsJICAgIGlmIChnKQotKwkJQk5fZnJlZShnKTsK LSsJICAgIGcgPSBOVUxMOwotKwkgICAgcGFyYW1jaGVjayA9IDA7Ci0rCSAgICBubW9kPWF0b2ko dmFsdWUpOwotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUCIpKQotKwkgICAg cD1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIpKQotKwkgICAg cT1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRyIpKQotKwkgICAg Zz1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiWCIpKQotKwkgICAg WD1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiWSIpKQotKwkgICAg ewotKwkgICAgWT1oZXgyYm4odmFsdWUpOwotKwkgICAgaWYgKCFwIHx8ICFxIHx8ICFnIHx8ICFY IHx8ICFZKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJQYXJzZSBFcnJvclxuIik7Ci0rCQll eGl0ICgxKTsKLSsJCX0KLSsJICAgIHBibigiUCIscCk7Ci0rCSAgICBwYm4oIlEiLHEpOwotKwkg ICAgcGJuKCJHIixnKTsKLSsJICAgIHBibigiWCIsWCk7Ci0rCSAgICBwYm4oIlkiLFkpOwotKwkg ICAgaWYgKCFwYXJhbWNoZWNrKQotKwkJewotKwkJaWYgKGRzc19wYXJhbWNoZWNrKG5tb2QsIHAs IHEsIGcsIGN0eCkpCi0rCQkJcGFyYW1jaGVjayA9IDE7Ci0rCQllbHNlCi0rCQkJcGFyYW1jaGVj ayA9IC0xOwotKwkJfQotKwkgICAgaWYgKHBhcmFtY2hlY2sgIT0gMSkKLSsJICAgCXByaW50Zigi UmVzdWx0ID0gRlxuIik7Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlpZiAoIUJOX21vZF9leHAoWTIs IGcsIFgsIHAsIGN0eCkgfHwgQk5fY21wKFkyLCBZKSkKLSsJICAgIAkJcHJpbnRmKCJSZXN1bHQg PSBGXG4iKTsKLSsJICAgICAgICBlbHNlCi0rCSAgICAJCXByaW50ZigiUmVzdWx0ID0gUFxuIik7 Ci0rCQl9Ci0rCSAgICBCTl9mcmVlKFgpOwotKwkgICAgQk5fZnJlZShZKTsKLSsJICAgIFggPSBO VUxMOwotKwkgICAgWSA9IE5VTEw7Ci0rCSAgICB9Ci0rCX0KLSsJaWYgKHApCi0rCSAgICBCTl9m cmVlKHApOwotKwlpZiAocSkKLSsJICAgIEJOX2ZyZWUocSk7Ci0rCWlmIChnKQotKwkgICAgQk5f ZnJlZShnKTsKLSsJaWYgKFkyKQotKwkgICAgQk5fZnJlZShZMik7Ci0rICAgIH0KLSsKLSt2b2lk IGtleXBhaXIoKQotKyAgICB7Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFyIGxidWZb MTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgaW50IG5tb2Q9MDsKLSsK LSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0rCXsKLSsJ aWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQl7Ci0rCQlm cHV0cyhidWYsc3Rkb3V0KTsKLSsJCWNvbnRpbnVlOwotKwkJfQotKwlpZighc3RyY21wKGtleXdv cmQsIlttb2QiKSkKLSsJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChr ZXl3b3JkLCJOIikpCi0rCSAgICB7Ci0rCSAgICBEU0EgKmRzYTsKLSsJICAgIGludCBuPWF0b2ko dmFsdWUpOwotKwotKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7Ci0rCSAgICBk c2EgPSBGSVBTX2RzYV9uZXcoKTsKLSsJICAgIGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNf ZXgoZHNhLCBubW9kLE5VTEwsMCxOVUxMLE5VTEwsTlVMTCkpCi0rCQl7Ci0rCQlkb19wcmludF9l cnJvcnMoKTsKLSsJCWV4aXQoMSk7Ci0rCQl9Ci0rCSAgICBwYm4oIlAiLGRzYS0+cCk7Ci0rCSAg ICBwYm4oIlEiLGRzYS0+cSk7Ci0rCSAgICBwYm4oIkciLGRzYS0+Zyk7Ci0rCSAgICBwdXRjKCdc bicsc3Rkb3V0KTsKLSsKLSsJICAgIHdoaWxlKG4tLSkKLSsJCXsKLSsJCWlmICghRFNBX2dlbmVy YXRlX2tleShkc2EpKQotKwkJCXsKLSsJCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCQlleGl0KDEp OwotKwkJCX0KLSsKLSsJCXBibigiWCIsZHNhLT5wcml2X2tleSk7Ci0rCQlwYm4oIlkiLGRzYS0+ cHViX2tleSk7Ci0rCQlwdXRjKCdcbicsc3Rkb3V0KTsKLSsJCX0KLSsJICAgIH0KLSsJfQotKyAg ICB9Ci0rCi0rdm9pZCBzaWdnZW4oKQotKyAgICB7Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAg ICBjaGFyIGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgaW50 IG5tb2Q9MDsKLSsgICAgRFNBICpkc2E9TlVMTDsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNp emVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0rCXsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3Jk LCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQl7Ci0rCQlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJCWNv bnRpbnVlOwotKwkJfQotKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKLSsJICAgIHsKLSsJ ICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0rCSAgICBwcmludGYoIlttb2QgPSAlZF1cblxuIixubW9k KTsKLSsJICAgIGlmIChkc2EpCi0rCQlGSVBTX2RzYV9mcmVlKGRzYSk7Ci0rCSAgICBkc2EgPSBG SVBTX2RzYV9uZXcoKTsKLSsJICAgIGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNh LCBubW9kLE5VTEwsMCxOVUxMLE5VTEwsTlVMTCkpCi0rCQl7Ci0rCQlkb19wcmludF9lcnJvcnMo KTsKLSsJCWV4aXQoMSk7Ci0rCQl9Ci0rCSAgICBwYm4oIlAiLGRzYS0+cCk7Ci0rCSAgICBwYm4o IlEiLGRzYS0+cSk7Ci0rCSAgICBwYm4oIkciLGRzYS0+Zyk7Ci0rCSAgICBwdXRjKCdcbicsc3Rk b3V0KTsKLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk1zZyIpKQotKwkgICAg ewotKwkgICAgdW5zaWduZWQgY2hhciBtc2dbMTAyNF07Ci0rCSAgICB1bnNpZ25lZCBjaGFyIHNi dWZbNjBdOwotKwkgICAgdW5zaWduZWQgaW50IHNsZW47Ci0rCSAgICBpbnQgbjsKLSsJICAgIEVW UF9QS0VZIHBrOwotKwkgICAgRVZQX01EX0NUWCBtY3R4OwotKwkgICAgRFNBX1NJRyAqc2lnOwot KwkgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKLSsKLSsJICAgIG49aGV4MmJpbih2YWx1ZSxt c2cpOwotKwkgICAgcHYoIk1zZyIsbXNnLG4pOwotKwotKwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVf a2V5KGRzYSkpCi0rCQl7Ci0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCWV4aXQoMSk7Ci0rCQl9 Ci0rCSAgICBway50eXBlID0gRVZQX1BLRVlfRFNBOwotKwkgICAgcGsucGtleS5kc2EgPSBkc2E7 Ci0rCSAgICBwYm4oIlkiLGRzYS0+cHViX2tleSk7Ci0rCi0rCSAgICBFVlBfU2lnbkluaXRfZXgo Jm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpOwotKwkgICAgRVZQX1NpZ25VcGRhdGUoJm1jdHgsIG1z Zywgbik7Ci0rCSAgICBFVlBfU2lnbkZpbmFsKCZtY3R4LCBzYnVmLCAmc2xlbiwgJnBrKTsKLSsK LSsJICAgIHNpZyA9IERTQV9TSUdfbmV3KCk7Ci0rCSAgICBGSVBTX2RzYV9zaWdfZGVjb2RlKHNp Zywgc2J1Ziwgc2xlbik7Ci0rCi0rCSAgICBwYm4oIlIiLHNpZy0+cik7Ci0rCSAgICBwYm4oIlMi LHNpZy0+cyk7Ci0rCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKLSsJICAgIERTQV9TSUdfZnJlZShz aWcpOwotKwkgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKLSsJICAgIH0KLSsJfQotKwlp ZiAoZHNhKQotKwkJRklQU19kc2FfZnJlZShkc2EpOwotKyAgICB9Ci0rCi0rdm9pZCBzaWd2ZXIo KQotKyAgICB7Ci0rICAgIERTQSAqZHNhPU5VTEw7Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAg ICBjaGFyIGxidWZbMTAyNF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgbXNnWzEwMjRdOwotKyAgICBj aGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rICAgIGludCBubW9kPTAsIG49MDsKLSsgICAgRFNBX1NJ RyBzZywgKnNpZyA9ICZzZzsKLSsKLSsgICAgc2lnLT5yID0gTlVMTDsKLSsgICAgc2lnLT5zID0g TlVMTDsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwp Ci0rCXsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0r CQl7Ci0rCQlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJCWNvbnRpbnVlOwotKwkJfQotKwlpZighc3Ry Y21wKGtleXdvcmQsIlttb2QiKSkKLSsJICAgIHsKLSsJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0r CSAgICBpZihkc2EpCi0rCQlGSVBTX2RzYV9mcmVlKGRzYSk7Ci0rCSAgICBkc2E9RklQU19kc2Ff bmV3KCk7Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJQIikpCi0rCSAgICBk c2EtPnA9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlEiKSkKLSsJ ICAgIGRzYS0+cT1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRyIp KQotKwkgICAgewotKwkgICAgZHNhLT5nPWhleDJibih2YWx1ZSk7Ci0rCi0rCSAgICBwcmludGYo Ilttb2QgPSAlZF1cblxuIixubW9kKTsKLSsJICAgIHBibigiUCIsZHNhLT5wKTsKLSsJICAgIHBi bigiUSIsZHNhLT5xKTsKLSsJICAgIHBibigiRyIsZHNhLT5nKTsKLSsJICAgIHB1dGMoJ1xuJyxz dGRvdXQpOwotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTXNnIikpCi0rCSAg ICB7Ci0rCSAgICBuPWhleDJiaW4odmFsdWUsbXNnKTsKLSsJICAgIHB2KCJNc2ciLG1zZyxuKTsK LSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlkiKSkKLSsJICAgIGRzYS0+cHVi X2tleT1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUiIpKQotKwkg ICAgc2lnLT5yPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJTIikp Ci0rCSAgICB7Ci0rCSAgICBFVlBfTURfQ1RYIG1jdHg7Ci0rCSAgICBFVlBfUEtFWSBwazsKLSsJ ICAgIHVuc2lnbmVkIGNoYXIgc2lnYnVmWzYwXTsKLSsJICAgIHVuc2lnbmVkIGludCBzbGVuOwot KwkgICAgaW50IHI7Ci0rCSAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOwotKwkgICAgcGsudHlw ZSA9IEVWUF9QS0VZX0RTQTsKLSsJICAgIHBrLnBrZXkuZHNhID0gZHNhOwotKwkgICAgc2lnLT5z PWhleDJibih2YWx1ZSk7Ci0rCQotKwkgICAgcGJuKCJZIixkc2EtPnB1Yl9rZXkpOwotKwkgICAg cGJuKCJSIixzaWctPnIpOwotKwkgICAgcGJuKCJTIixzaWctPnMpOwotKwotKwkgICAgc2xlbiA9 IEZJUFNfZHNhX3NpZ19lbmNvZGUoc2lnYnVmLCBzaWcpOwotKwkgICAgRVZQX1ZlcmlmeUluaXRf ZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpOwotKwkgICAgRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0 eCwgbXNnLCBuKTsKLSsJICAgIHIgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIHNpZ2J1Ziwgc2xl biwgJnBrKTsKLSsJICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0rCQotKwkgICAgcHJp bnRmKCJSZXN1bHQgPSAlY1xuIiwgciA9PSAxID8gJ1AnIDogJ0YnKTsKLSsJICAgIHB1dGMoJ1xu JyxzdGRvdXQpOwotKwkgICAgfQotKwl9Ci0rICAgIH0KLSsKLStpbnQgbWFpbihpbnQgYXJnYyxj aGFyICoqYXJndikKLSsgICAgewotKyAgICBpZihhcmdjICE9IDIpCi0rCXsKLSsJZnByaW50Zihz dGRlcnIsIiVzIFtwcmltZXxwcWd8cHFndmVyfGtleXBhaXJ8c2lnZ2VufHNpZ3Zlcl1cbiIsYXJn dlswXSk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsgICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCXsK LSsJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsgICAgaWYoIXN0cmNtcChh cmd2WzFdLCJwcmltZSIpKQotKwlwcmltZXMoKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3Zb MV0sInBxZyIpKQotKwlwcWcoKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInBxZ3Zl ciIpKQotKwlwcWd2ZXIoKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sImtleXBhaXIi KSkKLSsJa2V5cGFpcigpOwotKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwia2V5dmVyIikp Ci0rCWtleXZlcigpOwotKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwic2lnZ2VuIikpCi0r CXNpZ2dlbigpOwotKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwic2lndmVyIikpCi0rCXNp Z3ZlcigpOwotKyAgICBlbHNlCi0rCXsKLSsJZnByaW50ZihzdGRlcnIsIkRvbid0IGtub3cgaG93 IHRvICVzLlxuIixhcmd2WzFdKTsKLSsJZXhpdCgxKTsKLSsJfQotKwotKyAgICByZXR1cm4gMDsK LSsgICAgfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX2djbXRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMv Zmlwc19nY210ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNf Z2NtdGVzdC5jLmZpcHMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTQzMDYzMTAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZ2NtdGVzdC5jCTIwMTQtMTAtMTYg MTM6MTk6MzUuMDkzMzA2Mjg4ICswMjAwCi1AQCAtMCwwICsxLDU3MSBAQAotKy8qIGZpcHMvYWVz L2ZpcHNfZ2NtdGVzdC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChz dGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsv KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0 LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRp b24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh dHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZv bGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0r ICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBt dXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAg bGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1h eSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgot KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJl ZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xs b3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0r ICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1Qg YGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pF Q1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs Ci0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSsKLSsjZGVmaW5lIE9QRU5TU0xf RklQU0FQSQotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmbmRlZiBP UEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsKLStpbnQgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgR0NNIHN1cHBvcnRcbiIpOwot KyAgICByZXR1cm4oMCk7Ci0rfQotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2lu Y2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKwotKyNpbmNsdWRlICJmaXBz X3V0bC5oIgotKwotK3N0YXRpYyB2b2lkIGdjbXRlc3QoRklMRSAqaW4sIEZJTEUgKm91dCwgaW50 IGVuY3J5cHQpCi0rCXsKLSsJY2hhciBidWZbMjA0OF07Ci0rCWNoYXIgbGJ1ZlsyMDQ4XTsKLSsJ Y2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwlpbnQga2V5bGVuID0gLTEsIGl2bGVuID0gLTEsIGFh ZGxlbiA9IC0xLCB0YWdsZW4gPSAtMSwgcHRsZW4gPSAtMTsKLSsJaW50IHJ2OwotKwlsb25nIGw7 Ci0rCXVuc2lnbmVkIGNoYXIgKmtleSA9IE5VTEwsICppdiA9IE5VTEwsICphYWQgPSBOVUxMLCAq dGFnID0gTlVMTDsKLSsJdW5zaWduZWQgY2hhciAqY3QgPSBOVUxMLCAqcHQgPSBOVUxMOwotKwlF VlBfQ0lQSEVSX0NUWCBjdHg7Ci0rCWNvbnN0IEVWUF9DSVBIRVIgKmdjbSA9IE5VTEw7Ci0rCUZJ UFNfY2lwaGVyX2N0eF9pbml0KCZjdHgpOwotKwotKwl3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1 ZixpbikgIT0gTlVMTCkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixvdXQpOwotKwkJaWYgKCFwYXJzZV9s aW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQkJY29udGludWU7Ci0rCQlpZigh c3RyY21wKGtleXdvcmQsIltLZXlsZW4iKSkKLSsJCQl7Ci0rCQkJa2V5bGVuID0gYXRvaSh2YWx1 ZSk7Ci0rCQkJaWYgKGtleWxlbiA9PSAxMjgpCi0rCQkJCWdjbSA9IEVWUF9hZXNfMTI4X2djbSgp OwotKwkJCWVsc2UgaWYgKGtleWxlbiA9PSAxOTIpCi0rCQkJCWdjbSA9IEVWUF9hZXNfMTkyX2dj bSgpOwotKwkJCWVsc2UgaWYgKGtleWxlbiA9PSAyNTYpCi0rCQkJCWdjbSA9IEVWUF9hZXNfMjU2 X2djbSgpOwotKwkJCWVsc2UgCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJVbnN1cHBv cnRlZCBrZXlsZW4gJWRcbiIsCi0rCQkJCQkJCWtleWxlbik7Ci0rCQkJCX0KLSsJCQlrZXlsZW4g Pj49IDM7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiW0lWbGVuIikpCi0r CQkJaXZsZW4gPSBhdG9pKHZhbHVlKSA+PiAzOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3Jk LCAiW0FBRGxlbiIpKQotKwkJCWFhZGxlbiA9IGF0b2kodmFsdWUpID4+IDM7Ci0rCQllbHNlIGlm ICghc3RyY21wKGtleXdvcmQsICJbVGFnbGVuIikpCi0rCQkJdGFnbGVuID0gYXRvaSh2YWx1ZSkg Pj4gMzsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIltQVGxlbiIpKQotKwkJCXB0bGVu ID0gYXRvaSh2YWx1ZSkgPj4gMzsKLSsJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkK LSsJCQl7Ci0rCQkJa2V5ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaWYgKGwgIT0ga2V5 bGVuKQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IEtleSBsZW5n dGhcbiIpOwotKwkJCQlleGl0KDEpOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZighc3RyY21w KGtleXdvcmQsIklWIikpCi0rCQkJewotKwkJCWl2ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0r CQkJaWYgKGwgIT0gaXZsZW4pCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNp c3RlbnQgSVYgbGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJCX0KLSsJCWVs c2UgaWYoIXN0cmNtcChrZXl3b3JkLCJQVCIpKQotKwkJCXsKLSsJCQlwdCA9IGhleDJiaW5fbSh2 YWx1ZSwgJmwpOwotKwkJCWlmIChsICE9IHB0bGVuKQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3Rk ZXJyLCAiSW5jb25zaXN0ZW50IFBUIGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0K LSsJCQl9Ci0rCQllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiQ1QiKSkKLSsJCQl7Ci0rCQkJY3Qg PSBoZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpZiAobCAhPSBwdGxlbikKLSsJCQkJewotKwkJ CQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBDVCBsZW5ndGhcbiIpOwotKwkJCQlleGl0 KDEpOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkFBRCIpKQot KwkJCXsKLSsJCQlhYWQgPSBoZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpZiAobCAhPSBhYWRs ZW4pCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgQUFEIGxlbmd0 aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmKCFzdHJjbXAo a2V5d29yZCwiVGFnIikpCi0rCQkJewotKwkJCXRhZyA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwot KwkJCWlmIChsICE9IHRhZ2xlbikKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29u c2lzdGVudCBUYWcgbGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJCX0KLSsJ CWlmIChlbmNyeXB0ICYmIHB0ICYmIGFhZCAmJiAoaXYgfHwgZW5jcnlwdD09MSkpCi0rCQkJewot KwkJCXRhZyA9IE9QRU5TU0xfbWFsbG9jKHRhZ2xlbik7Ci0rCQkJRklQU19jaXBoZXJpbml0KCZj dHgsIGdjbSwgTlVMTCwgTlVMTCwgMSk7Ci0rCQkJLyogUmVsYXggRklQUyBjb25zdHJhaW50cyBm b3IgdGVzdGluZyAqLwotKwkJCU1fRVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9D SVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwotKwkJCUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgs IEVWUF9DVFJMX0dDTV9TRVRfSVZMRU4sIGl2bGVuLCAwKTsKLSsJCQlpZiAoZW5jcnlwdCA9PSAx KQotKwkJCQl7Ci0rCQkJCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGl2X2ZpeGVkWzRdID0gezEsMiwz LDR9OwotKwkJCQlpZiAoIWl2KQotKwkJCQkJaXYgPSBPUEVOU1NMX21hbGxvYyhpdmxlbik7Ci0r CQkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBOVUxMLCBrZXksIE5VTEwsIDEpOwotKwkJCQlGSVBT X2NpcGhlcl9jdHhfY3RybCgmY3R4LAotKwkJCQkJCUVWUF9DVFJMX0dDTV9TRVRfSVZfRklYRUQs Ci0rCQkJCQkJNCwgaXZfZml4ZWQpOwotKwkJCQlpZiAoIUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZj dHgsCi0rCQkJCQlFVlBfQ1RSTF9HQ01fSVZfR0VOLCAwLCBpdikpCi0rCQkJCQl7Ci0rCQkJCQlm cHJpbnRmKHN0ZGVyciwgIklWIGdlbiBlcnJvclxuIik7Ci0rCQkJCQlleGl0KDEpOwotKwkJCQkJ fQotKwkJCQlPdXRwdXRWYWx1ZSgiSVYiLCBpdiwgaXZsZW4sIG91dCwgMCk7Ci0rCQkJCX0KLSsJ CQllbHNlCi0rCQkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBOVUxMLCBrZXksIGl2LCAxKTsKLSsK LSsKLSsJCQlpZiAoYWFkbGVuKQotKwkJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBhYWQsIGFh ZGxlbik7Ci0rCQkJaWYgKHB0bGVuKQotKwkJCQl7Ci0rCQkJCWN0ID0gT1BFTlNTTF9tYWxsb2Mo cHRsZW4pOwotKwkJCQlydiA9IEZJUFNfY2lwaGVyKCZjdHgsIGN0LCBwdCwgcHRsZW4pOwotKwkJ CQl9Ci0rCQkJRklQU19jaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgMCk7Ci0rCQkJRklQU19jaXBo ZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX0dFVF9UQUcsCi0rCQkJCQkJCQl0YWdsZW4s IHRhZyk7CQotKwkJCU91dHB1dFZhbHVlKCJDVCIsIGN0LCBwdGxlbiwgb3V0LCAwKTsKLSsJCQlP dXRwdXRWYWx1ZSgiVGFnIiwgdGFnLCB0YWdsZW4sIG91dCwgMCk7Ci0rCQkJaWYgKGl2KQotKwkJ CQlPUEVOU1NMX2ZyZWUoaXYpOwotKwkJCWlmIChhYWQpCi0rCQkJCU9QRU5TU0xfZnJlZShhYWQp OwotKwkJCWlmIChjdCkKLSsJCQkJT1BFTlNTTF9mcmVlKGN0KTsKLSsJCQlpZiAocHQpCi0rCQkJ CU9QRU5TU0xfZnJlZShwdCk7Ci0rCQkJaWYgKGtleSkKLSsJCQkJT1BFTlNTTF9mcmVlKGtleSk7 Ci0rCQkJaWYgKHRhZykKLSsJCQkJT1BFTlNTTF9mcmVlKHRhZyk7Ci0rCQkJaXYgPSBhYWQgPSBj dCA9IHB0ID0ga2V5ID0gdGFnID0gTlVMTDsKLSsJCQl9CQotKwkJaWYgKCFlbmNyeXB0ICYmIHRh ZykKLSsJCQl7Ci0rCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIGdjbSwgTlVMTCwgTlVMTCwgMCk7 Ci0rCQkJLyogUmVsYXggRklQUyBjb25zdHJhaW50cyBmb3IgdGVzdGluZyAqLwotKwkJCU1fRVZQ X0NJUEhFUl9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cp OwotKwkJCUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9TRVRfSVZMRU4s IGl2bGVuLCAwKTsKLSsJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgTlVMTCwga2V5LCBpdiwgMCk7 Ci0rCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9UQUcsIHRh Z2xlbiwgdGFnKTsKLSsJCQlpZiAoYWFkbGVuKQotKwkJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxM LCBhYWQsIGFhZGxlbik7Ci0rCQkJaWYgKHB0bGVuKQotKwkJCQl7Ci0rCQkJCXB0ID0gT1BFTlNT TF9tYWxsb2MocHRsZW4pOwotKwkJCQlydiA9IEZJUFNfY2lwaGVyKCZjdHgsIHB0LCBjdCwgcHRs ZW4pOwotKwkJCQl9Ci0rCQkJcnYgPSBGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCAwKTsK LSsJCQlpZiAocnYgPCAwKQotKwkJCQlmcHJpbnRmKG91dCwgIkZBSUwiIFJFU1BfRU9MKTsKLSsJ CQllbHNlCi0rCQkJCU91dHB1dFZhbHVlKCJQVCIsIHB0LCBwdGxlbiwgb3V0LCAwKTsKLSsJCQlp ZiAoaXYpCi0rCQkJCU9QRU5TU0xfZnJlZShpdik7Ci0rCQkJaWYgKGFhZCkKLSsJCQkJT1BFTlNT TF9mcmVlKGFhZCk7Ci0rCQkJaWYgKGN0KQotKwkJCQlPUEVOU1NMX2ZyZWUoY3QpOwotKwkJCWlm IChwdCkKLSsJCQkJT1BFTlNTTF9mcmVlKHB0KTsKLSsJCQlpZiAoa2V5KQotKwkJCQlPUEVOU1NM X2ZyZWUoa2V5KTsKLSsJCQlpZiAodGFnKQotKwkJCQlPUEVOU1NMX2ZyZWUodGFnKTsKLSsJCQlp diA9IGFhZCA9IGN0ID0gcHQgPSBrZXkgPSB0YWcgPSBOVUxMOwotKwkJCX0KLSsJCX0KLSsJRklQ U19jaXBoZXJfY3R4X2NsZWFudXAoJmN0eCk7CQotKwl9Ci0rCi0rc3RhdGljIHZvaWQgeHRzdGVz dChGSUxFICppbiwgRklMRSAqb3V0KQotKwl7Ci0rCWNoYXIgYnVmWzIwNDgwMF07Ci0rCWNoYXIg bGJ1ZlsyMDQ4MDBdOwotKwljaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rCWludCBpbmxlbiA9IDA7 Ci0rCWludCBlbmNyeXB0ID0gMDsKLSsJbG9uZyBsOwotKwl1bnNpZ25lZCBjaGFyICprZXkgPSBO VUxMLCAqaXYgPSBOVUxMOwotKwl1bnNpZ25lZCBjaGFyICppbmJ1ZiA9IE5VTEwsICpvdXRidWYg PSBOVUxMOwotKwlFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rCWNvbnN0IEVWUF9DSVBIRVIgKnh0cyA9 IE5VTEw7Ci0rCUZJUFNfY2lwaGVyX2N0eF9pbml0KCZjdHgpOwotKwotKwl3aGlsZShmZ2V0cyhi dWYsc2l6ZW9mIGJ1ZixpbikgIT0gTlVMTCkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixvdXQpOwotKwkJ aWYgKGJ1ZlswXSA9PSAnWycgJiYgc3RybGVuKGJ1ZikgPj0gOSkKLSsJCQl7Ci0rCQkJaWYoIXN0 cm5jbXAoYnVmLCJbRU5DUllQVF0iLCA5KSkKLSsJCQkJZW5jcnlwdCA9IDE7Ci0rCQkJZWxzZSBp Zighc3RybmNtcChidWYsIltERUNSWVBUXSIsIDkpKQotKwkJCQllbmNyeXB0ID0gMDsKLSsJCQl9 Ci0rCQlpZiAgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQkJ Y29udGludWU7Ci0rCQllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCi0rCQkJewotKwkJ CWtleSA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlmIChsID09IDMyKQotKwkJCQl4dHMg PSBFVlBfYWVzXzEyOF94dHMoKTsKLSsJCQllbHNlIGlmIChsID09IDY0KQotKwkJCQl4dHMgPSBF VlBfYWVzXzI1Nl94dHMoKTsKLSsJCQllbHNlCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIs ICJJbmNvbnNpc3RlbnQgS2V5IGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJ CQl9Ci0rCQllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiaSIpKQotKwkJCXsKLSsJCQlpdiA9IGhl eDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlmIChsICE9IDE2KQotKwkJCQl7Ci0rCQkJCWZwcmlu dGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IGkgbGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJ CQkJfQotKwkJCX0KLSsJCWVsc2UgaWYoZW5jcnlwdCAmJiAhc3RyY21wKGtleXdvcmQsIlBUIikp Ci0rCQkJewotKwkJCWluYnVmID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaW5sZW4gPSBs OwotKwkJCX0KLSsJCWVsc2UgaWYoIWVuY3J5cHQgJiYgIXN0cmNtcChrZXl3b3JkLCJDVCIpKQot KwkJCXsKLSsJCQlpbmJ1ZiA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlubGVuID0gbDsK LSsJCQl9Ci0rCQlpZiAoaW5idWYpCi0rCQkJewotKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCB4 dHMsIGtleSwgaXYsIGVuY3J5cHQpOwotKwkJCW91dGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKGlubGVu KTsKLSsJCQlGSVBTX2NpcGhlcigmY3R4LCBvdXRidWYsIGluYnVmLCBpbmxlbik7Ci0rCQkJT3V0 cHV0VmFsdWUoZW5jcnlwdCA/ICJDVCI6IlBUIiwgb3V0YnVmLCBpbmxlbiwgb3V0LCAwKTsKLSsJ CQlPUEVOU1NMX2ZyZWUoaW5idWYpOwotKwkJCU9QRU5TU0xfZnJlZShvdXRidWYpOwotKwkJCU9Q RU5TU0xfZnJlZShrZXkpOwotKwkJCU9QRU5TU0xfZnJlZShpdik7Ci0rCQkJaXYgPSBrZXkgPSBp bmJ1ZiA9IG91dGJ1ZiA9IE5VTEw7Ci0rCQkJfQkKLSsJCX0KLSsJRklQU19jaXBoZXJfY3R4X2Ns ZWFudXAoJmN0eCk7CQotKwl9Ci0rCi0rc3RhdGljIHZvaWQgY2NtdGVzdChGSUxFICppbiwgRklM RSAqb3V0KQotKwl7Ci0rCWNoYXIgYnVmWzIwMDA0OF07Ci0rCWNoYXIgbGJ1ZlsyMDAwNDhdOwot KwljaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rCWxvbmcgbDsKLSsJdW5zaWduZWQgY2hhciAqS2V5 ID0gTlVMTCwgKk5vbmNlID0gTlVMTDsKLSsJdW5zaWduZWQgY2hhciAqQWRhdGEgPSBOVUxMLCAq UGF5bG9hZCA9IE5VTEw7Ci0rCXVuc2lnbmVkIGNoYXIgKkNUID0gTlVMTDsKLSsJaW50IFBsZW4g PSAtMSwgTmxlbiA9IC0xLCBUbGVuID0gLTEsIEFsZW4gPSAtMTsKLSsJaW50IGRlY3IgPSAwOwot KwlFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rCWNvbnN0IEVWUF9DSVBIRVIgKmNjbSA9IE5VTEw7Ci0r CUZJUFNfY2lwaGVyX2N0eF9pbml0KCZjdHgpOwotKwotKwl3aGlsZShmZ2V0cyhidWYsc2l6ZW9m IGJ1ZixpbikgIT0gTlVMTCkKLSsJCXsKLSsJCWNoYXIgKnA7Ci0rCQlmcHV0cyhidWYsb3V0KTsK LSsJCXJlZG86Ci0rCQlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVm KSkKLSsJCQljb250aW51ZTsKLSsKLSsJCS8qIElmIHN1cnJvdW5kZWQgYnkgc3F1YXJlIGJyYWNr ZXRzIHphcCB0aGVtICovCi0rCQlpZiAoa2V5d29yZFswXSA9PSAnWycpCi0rCQkJewotKwkJCWtl eXdvcmQrKzsKLSsJCQlwID0gc3RyY2hyKHZhbHVlLCAnXScpOwotKwkJCWlmIChwKQotKwkJCQkq cCA9IDA7Ci0rCQkJfQotKwkJLyogU2VlIGlmIHdlIGhhdmUgYSBjb21tYSBzZXBhcmF0ZWQgbGlz dCBvZiBwYXJhbWV0ZXJzCi0rCQkgKiBpZiBzbyBjb3B5IHJlc3Qgb2YgbGluZSBiYWNrIHRvIGJ1 ZmZlciBhbmQgcmVkbyBsYXRlci4KLSsJCSAqLwotKwkJcCA9IHN0cmNocih2YWx1ZSwgJywnKTsK LSsJCWlmIChwKQotKwkJCXsKLSsJCQkqcCA9IDA7Ci0rCQkJc3RyY3B5KGJ1ZiwgcCArIDEpOwot KwkJCXN0cmNhdChidWYsICJcbiIpOwotKwkJCWRlY3IgPSAxOwotKwkJCX0KLSsJCWlmICghc3Ry Y21wKGtleXdvcmQsIlBsZW4iKSkKLSsJCQlQbGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQllbHNlIGlm ICghc3RyY21wKGtleXdvcmQsIk5sZW4iKSkKLSsJCQlObGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQll bHNlIGlmICghc3RyY21wKGtleXdvcmQsIlRsZW4iKSkKLSsJCQlUbGVuID0gYXRvaSh2YWx1ZSk7 Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsIkFsZW4iKSkKLSsJCQlBbGVuID0gYXRvaSh2 YWx1ZSk7Ci0rCQlpZiAocCkKLSsJCQlnb3RvIHJlZG87Ci0rCQlpZiAoIXN0cmNtcChrZXl3b3Jk LCJLZXkiKSkKLSsJCQl7Ci0rCQkJaWYgKEtleSkKLSsJCQkJT1BFTlNTTF9mcmVlKEtleSk7Ci0r CQkJS2V5ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaWYgKGwgPT0gMTYpCi0rCQkJCWNj bSA9IEVWUF9hZXNfMTI4X2NjbSgpOwotKwkJCWVsc2UgaWYgKGwgPT0gMjQpCi0rCQkJCWNjbSA9 IEVWUF9hZXNfMTkyX2NjbSgpOwotKwkJCWVsc2UgaWYgKGwgPT0gMzIpCi0rCQkJCWNjbSA9IEVW UF9hZXNfMjU2X2NjbSgpOwotKwkJCWVsc2UKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwg IkluY29uc2lzdGVudCBLZXkgbGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJ CX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwiTm9uY2UiKSkKLSsJCQl7Ci0rCQkJaWYg KE5vbmNlKQotKwkJCQlPUEVOU1NMX2ZyZWUoTm9uY2UpOwotKwkJCU5vbmNlID0gaGV4MmJpbl9t KHZhbHVlLCAmbCk7Ci0rCQkJaWYgKGwgIT0gTmxlbikKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0 ZGVyciwgIkluY29uc2lzdGVudCBub25jZSBsZW5ndGhcbiIpOwotKwkJCQlleGl0KDEpOwotKwkJ CQl9Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCJQYXlsb2FkIikgJiYgIWRl Y3IpCi0rCQkJewotKwkJCVBheWxvYWQgPSBoZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpZiAo UGxlbiAmJiBsICE9IFBsZW4pCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNp c3RlbnQgUGF5bG9hZCBsZW5ndGhcbiIpOwotKwkJCQlleGl0KDEpOwotKwkJCQl9Ci0rCQkJfQot KwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCJBZGF0YSIpKQotKwkJCXsKLSsJCQlpZiAoQWRh dGEpCi0rCQkJCU9QRU5TU0xfZnJlZShBZGF0YSk7Ci0rCQkJQWRhdGEgPSBoZXgyYmluX20odmFs dWUsICZsKTsKLSsJCQlpZiAoQWxlbiAmJiBsICE9IEFsZW4pCi0rCQkJCXsKLSsJCQkJZnByaW50 ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgUGF5bG9hZCBsZW5ndGhcbiIpOwotKwkJCQlleGl0KDEp OwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCJDVCIpICYmIGRl Y3IpCi0rCQkJewotKwkJCUNUID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaWYgKGwgIT0g KFBsZW4gKyBUbGVuKSkKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVu dCBDVCBsZW5ndGhcbiIpOwotKwkJCQlleGl0KDEpOwotKwkJCQl9Ci0rCQkJfQotKwkJaWYgKFBh eWxvYWQpCi0rCQkJewotKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBjY20sIE5VTEwsIE5VTEws IDEpOwotKwkJCUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfSVZM RU4sIE5sZW4sIDApOwotKwkJCUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0ND TV9TRVRfVEFHLCBUbGVuLCAwKTsKLSsJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgTlVMTCwgS2V5 LCBOb25jZSwgMSk7Ci0rCi0rCQkJRklQU19jaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgUGxlbik7 Ci0rCQkJRklQU19jaXBoZXIoJmN0eCwgTlVMTCwgQWRhdGEsIEFsZW4pOwotKwkJCUNUID0gT1BF TlNTTF9tYWxsb2MoUGxlbiArIFRsZW4pOwotKwkJCUZJUFNfY2lwaGVyKCZjdHgsIENULCBQYXls b2FkLCBQbGVuKTsKLSsJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01f R0VUX1RBRywgVGxlbiwKLSsJCQkJCQlDVCArIFBsZW4pOwotKwkJCU91dHB1dFZhbHVlKCJDVCIs IENULCBQbGVuICsgVGxlbiwgb3V0LCAwKTsKLSsJCQlPUEVOU1NMX2ZyZWUoQ1QpOwotKwkJCU9Q RU5TU0xfZnJlZShQYXlsb2FkKTsKLSsJCQlDVCA9IFBheWxvYWQgPSBOVUxMOwotKwkJCX0KLSsJ CWlmIChDVCkKLSsJCQl7Ci0rCQkJaW50IHJ2OwotKwkJCWludCBsZW4gPSBQbGVuID09IDAgPyAx OiBQbGVuOwotKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBjY20sIE5VTEwsIE5VTEwsIDApOwot KwkJCUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfSVZMRU4sIE5s ZW4sIDApOwotKwkJCUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRf VEFHLAotKwkJCQkJCVRsZW4sIENUICsgUGxlbik7Ci0rCQkJRklQU19jaXBoZXJpbml0KCZjdHgs IE5VTEwsIEtleSwgTm9uY2UsIDApOwotKwkJCUZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIE5VTEws IFBsZW4pOwotKwkJCUZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIEFkYXRhLCBBbGVuKTsKLSsJCQlQ YXlsb2FkID0gT1BFTlNTTF9tYWxsb2MobGVuKTsKLSsJCQlydiA9IEZJUFNfY2lwaGVyKCZjdHgs IFBheWxvYWQsIENULCBQbGVuKTsKLSsJCQlpZiAocnYgPj0gMCkKLSsJCQkJewotKwkJCQlpZiAo cnYgPT0gMCkKLSsJCQkJCVBheWxvYWRbMF0gPSAwOwotKwkJCQlmcHV0cygiUmVzdWx0ID0gUGFz cyIgUkVTUF9FT0wsIG91dCk7Ci0rCQkJCU91dHB1dFZhbHVlKCJQYXlsb2FkIiwgUGF5bG9hZCwg bGVuLCBvdXQsIDApOwotKwkJCQl9Ci0rCQkJZWxzZQotKwkJCQlmcHV0cygiUmVzdWx0ID0gRmFp bCIgUkVTUF9FT0wsIG91dCk7Ci0rCQkJT1BFTlNTTF9mcmVlKENUKTsKLSsJCQlPUEVOU1NMX2Zy ZWUoUGF5bG9hZCk7Ci0rCQkJQ1QgPSBQYXlsb2FkID0gTlVMTDsKLSsJCQl9Ci0rCQl9Ci0rCWlm IChLZXkpCi0rCQlPUEVOU1NMX2ZyZWUoS2V5KTsKLSsJaWYgKE5vbmNlKQotKwkJT1BFTlNTTF9m cmVlKE5vbmNlKTsKLSsJaWYgKEFkYXRhKQotKwkJT1BFTlNTTF9mcmVlKEFkYXRhKTsKLSsJRklQ U19jaXBoZXJfY3R4X2NsZWFudXAoJmN0eCk7Ci0rCX0KLSsKLSsjaWZkZWYgRklQU19BTEdWUwot K2ludCBmaXBzX2djbXRlc3RfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rI2Vsc2UKLStp bnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rI2VuZGlmCi0rCXsKLSsJaW50IGVuY3J5 cHQ7Ci0rCWludCB4dHMgPSAwLCBjY20gPSAwOwotKwlGSUxFICppbiwgKm91dDsKLSsJaWYgKGFy Z2MgPT0gNCkKLSsJCXsKLSsJCWluID0gZm9wZW4oYXJndlsyXSwgInIiKTsKLSsJCWlmICghaW4p Ci0rCQkJewotKwkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBpbnB1dCBmaWxlXG4i KTsKLSsJCQlleGl0KDEpOwotKwkJCX0KLSsJCW91dCA9IGZvcGVuKGFyZ3ZbM10sICJ3Iik7Ci0r CQlpZiAoIW91dCkKLSsJCQl7Ci0rCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIG91 dHB1dCBmaWxlXG4iKTsKLSsJCQlleGl0KDEpOwotKwkJCX0KLSsJCX0KLSsJZWxzZSBpZiAoYXJn YyA9PSAyKQotKwkJewotKwkJaW4gPSBzdGRpbjsKLSsJCW91dCA9IHN0ZG91dDsKLSsJCX0KLSsJ ZWxzZQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsIiVzIFstZW5jcnlwdHwtZGVjcnlwdF1cbiIs YXJndlswXSk7Ci0rCQlleGl0KDEpOwotKwkJfQotKwlmaXBzX2FsZ3Rlc3RfaW5pdCgpOwotKwlp Zighc3RyY21wKGFyZ3ZbMV0sIi1lbmNyeXB0IikpCi0rCQllbmNyeXB0ID0gMTsKLSsJZWxzZSBp Zighc3RyY21wKGFyZ3ZbMV0sIi1lbmNyeXB0SVZleHQiKSkKLSsJCWVuY3J5cHQgPSAyOwotKwll bHNlIGlmKCFzdHJjbXAoYXJndlsxXSwiLWRlY3J5cHQiKSkKLSsJCWVuY3J5cHQgPSAwOwotKwll bHNlIGlmKCFzdHJjbXAoYXJndlsxXSwiLWNjbSIpKQotKwkJY2NtID0gMTsKLSsJZWxzZSBpZigh c3RyY21wKGFyZ3ZbMV0sIi14dHMiKSkKLSsJCXh0cyA9IDE7Ci0rCWVsc2UKLSsJCXsKLSsJCWZw cmludGYoc3RkZXJyLCJEb24ndCBrbm93IGhvdyB0byAlcy5cbiIsYXJndlsxXSk7Ci0rCQlleGl0 KDEpOwotKwkJfQotKwotKwlpZiAoY2NtKQotKwkJY2NtdGVzdChpbiwgb3V0KTsKLSsJZWxzZSBp ZiAoeHRzKQotKwkJeHRzdGVzdChpbiwgb3V0KTsKLSsJZWxzZQotKwkJZ2NtdGVzdChpbiwgb3V0 LCBlbmNyeXB0KTsKLSsKLSsJaWYgKGFyZ2MgPT0gNCkKLSsJCXsKLSsJCWZjbG9zZShpbik7Ci0r CQlmY2xvc2Uob3V0KTsKLSsJCX0KLSsKLSsJcmV0dXJuIDA7Ci0rfQotKwotKyNlbmRpZgotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMuZmlwcyBv cGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMuYwotLS0tIG9wZW5zc2wt MS4wLjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5jLmZpcHMJMjAxNC0xMC0xNiAxMzox OTozNS4wOTQzMDYzMTAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfcm5ndnMuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5NDMwNjMxMCArMDIwMAotQEAgLTAs 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 ZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rl c3QuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5j Ci0tLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMuZmlw cwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5NDMwNjMxMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFq L2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDk0 MzA2MzEwICswMjAwCi1AQCAtMCwwICsxLDM5MCBAQAotKy8qIGZpcHNfcnNhZ3Rlc3QuYyAqLwot Ky8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZv ciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot KyAqIENvcHlyaWdodCAoYykgMjAwNSwyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmln aHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJl IG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgot KyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1 c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFj a25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUg bmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJl IHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g Rm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdA T3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NM IiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVy bWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRp b25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAq ICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycg QU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBE SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAq IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF UyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJ Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up Ci0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K LSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotKyAqCi0rICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dy YXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCi0rICogKGVheUBjcnlwdHNvZnQu Y29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAq IEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0 ZGlvLmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2Jpby5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9yc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL3g1MDl2My5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rCi0raW50IG1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBSU0Egc3VwcG9y dFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVkZSAiZmlw c191dGwuaCIKLSsKLStpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbik7Ci0rc3RhdGlj IGludCByc2FfcHJpbnRrZXkxKEZJTEUgKm91dCwgUlNBICpyc2EsCi0rCQlCSUdOVU0gKlhwMSwg QklHTlVNICpYcDIsIEJJR05VTSAqWHAsCi0rCQlCSUdOVU0gKmUpOwotK3N0YXRpYyBpbnQgcnNh X3ByaW50a2V5MihGSUxFICpvdXQsIFJTQSAqcnNhLAotKwkJQklHTlVNICpYcTEsIEJJR05VTSAq WHEyLCBCSUdOVU0gKlhxKTsKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0r CXsKLSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsKLSsJaW50IHJldCA9IDE7Ci0r Ci0rCWlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0r CQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKGFyZ2MgPT0gMSkKLSsJCWluID0gc3RkaW47Ci0r CWVsc2UKLSsJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKLSsKLSsJaWYgKGFyZ2MgPCAyKQot KwkJb3V0ID0gc3Rkb3V0OwotKwllbHNlCi0rCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOwot KwotKwlpZiAoIWluKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0 aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFvdXQp Ci0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBl cnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFyc2FfdGVzdChvdXQsIGlu KSkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBR1RFU1QgZmlsZSBwcm9jZXNz aW5nIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwllbHNlCi0rCQlyZXQgPSAwOwot KwotKwllbmQ6Ci0rCi0rCWlmIChyZXQpCi0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsKLSsJaWYg KGluICYmIChpbiAhPSBzdGRpbikpCi0rCQlmY2xvc2UoaW4pOwotKwlpZiAob3V0ICYmIChvdXQg IT0gc3Rkb3V0KSkKLSsJCWZjbG9zZShvdXQpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwl9Ci0r Ci0rI2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCi0rCi0raW50IHJzYV90ZXN0KEZJ TEUgKm91dCwgRklMRSAqaW4pCi0rCXsKLSsJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwg KnE7Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsJUlNBICpyc2EgPSBOVUxMOwotKwlCSUdO VU0gKlhwMSA9IE5VTEwsICpYcDIgPSBOVUxMLCAqWHAgPSBOVUxMOwotKwlCSUdOVU0gKlhxMSA9 IE5VTEwsICpYcTIgPSBOVUxMLCAqWHEgPSBOVUxMOwotKwlCSUdOVU0gKmUgPSBOVUxMOwotKwlp bnQgcmV0ID0gMDsKLSsJaW50IGxudW0gPSAwOwotKwotKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFs bG9jKFJTQV9URVNUX01BWExJTkVMRU4pOwotKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNB X1RFU1RfTUFYTElORUxFTik7Ci0rCi0rCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCi0rCQln b3RvIGVycm9yOwotKwotKwl3aGlsZSAoZmdldHMob2xpbmVidWYsIFJTQV9URVNUX01BWExJTkVM RU4sIGluKSkKLSsJCXsKLSsJCWxudW0rKzsKLSsJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7 Ci0rCQlrZXl3b3JkID0gbGluZWJ1ZjsKLSsJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLwotKwkJ d2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQotKwkJCWtleXdvcmQrKzsK LSsKLSsJCS8qIExvb2sgZm9yID0gc2lnbiAqLwotKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScp OwotKwotKwkJLyogSWYgbm8gPSBvciBzdGFydHMgd2l0aCBbIChmb3IgW2ZvbyA9IGJhcl0gbGlu ZSkganVzdCBjb3B5ICovCi0rCQlpZiAoIXAgfHwgKmtleXdvcmQ9PSdbJykKLSsJCQl7Ci0rCQkJ aWYgKGZwdXRzKG9saW5lYnVmLCBvdXQpIDwgMCkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQljb250 aW51ZTsKLSsJCQl9Ci0rCi0rCQlxID0gcCAtIDE7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcg c3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKLSsJCQkqcS0t ID0gMDsKLSsKLSsJCSpwID0gMDsKLSsJCXZhbHVlID0gcCArIDE7Ci0rCi0rCQkvKiBSZW1vdmUg bGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQg Y2hhcikqdmFsdWUpKQotKwkJCXZhbHVlKys7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3Bh Y2UgZnJvbSB2YWx1ZSAqLwotKwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCi0r CQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCQkq cC0tID0gMDsKLSsKLSsJCWlmICghc3RyY21wKGtleXdvcmQsICJ4cDEiKSkKLSsJCQl7Ci0rCQkJ aWYgKFhwMSB8fCAhZG9faGV4MmJuKCZYcDEsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9y OwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhwMiIpKQotKwkJCXsKLSsJ CQlpZiAoWHAyIHx8ICFkb19oZXgyYm4oJlhwMix2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJy b3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWHAiKSkKLSsJCQl7Ci0r CQkJaWYgKFhwIHx8ICFkb19oZXgyYm4oJlhwLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJv cjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJ4cTEiKSkKLSsJCQl7Ci0r CQkJaWYgKFhxMSB8fCAhZG9faGV4MmJuKCZYcTEsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vy cm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhxMiIpKQotKwkJCXsK LSsJCQlpZiAoWHEyIHx8ICFkb19oZXgyYm4oJlhxMix2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWHEiKSkKLSsJCQl7 Ci0rCQkJaWYgKFhxIHx8ICFkb19oZXgyYm4oJlhxLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9l cnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJlIikpCi0rCQkJewot KwkJCWlmIChlIHx8ICFkb19oZXgyYm4oJmUsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9y OwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInAxIikpCi0rCQkJY29udGlu dWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJwMiIpKQotKwkJCWNvbnRpbnVlOwot KwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicCIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicTEiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgInEyIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsICJxIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJuIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQs ICJkIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlCi0rCQkJZ290byBwYXJzZV9lcnJvcjsKLSsK LSsJCWZwdXRzKG9saW5lYnVmLCBvdXQpOwotKwotKwkJaWYgKGUgJiYgWHAxICYmIFhwMiAmJiBY cCkKLSsJCQl7Ci0rCQkJcnNhID0gRklQU19yc2FfbmV3KCk7Ci0rCQkJaWYgKCFyc2EpCi0rCQkJ CWdvdG8gZXJyb3I7Ci0rCQkJaWYgKCFyc2FfcHJpbnRrZXkxKG91dCwgcnNhLCBYcDEsIFhwMiwg WHAsIGUpKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCUJOX2ZyZWUoWHAxKTsKLSsJCQlYcDEgPSBO VUxMOwotKwkJCUJOX2ZyZWUoWHAyKTsKLSsJCQlYcDIgPSBOVUxMOwotKwkJCUJOX2ZyZWUoWHAp OwotKwkJCVhwID0gTlVMTDsKLSsJCQlCTl9mcmVlKGUpOwotKwkJCWUgPSBOVUxMOwotKwkJCX0K LSsKLSsJCWlmIChyc2EgJiYgWHExICYmIFhxMiAmJiBYcSkKLSsJCQl7Ci0rCQkJaWYgKCFyc2Ff cHJpbnRrZXkyKG91dCwgcnNhLCBYcTEsIFhxMiwgWHEpKQotKwkJCQlnb3RvIGVycm9yOwotKwkJ CUJOX2ZyZWUoWHExKTsKLSsJCQlYcTEgPSBOVUxMOwotKwkJCUJOX2ZyZWUoWHEyKTsKLSsJCQlY cTIgPSBOVUxMOwotKwkJCUJOX2ZyZWUoWHEpOwotKwkJCVhxID0gTlVMTDsKLSsJCQlGSVBTX3Jz YV9mcmVlKHJzYSk7Ci0rCQkJcnNhID0gTlVMTDsKLSsJCQl9Ci0rCQl9Ci0rCi0rCXJldCA9IDE7 Ci0rCi0rCWVycm9yOgotKwotKwlpZiAob2xpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUob2xpbmVi dWYpOwotKwlpZiAobGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKLSsKLSsJaWYg KFhwMSkKLSsJCUJOX2ZyZWUoWHAxKTsKLSsJaWYgKFhwMikKLSsJCUJOX2ZyZWUoWHAyKTsKLSsJ aWYgKFhwKQotKwkJQk5fZnJlZShYcCk7Ci0rCWlmIChYcTEpCi0rCQlCTl9mcmVlKFhxMSk7Ci0r CWlmIChYcTEpCi0rCQlCTl9mcmVlKFhxMSk7Ci0rCWlmIChYcTIpCi0rCQlCTl9mcmVlKFhxMik7 Ci0rCWlmIChYcSkKLSsJCUJOX2ZyZWUoWHEpOwotKwlpZiAoZSkKLSsJCUJOX2ZyZWUoZSk7Ci0r CWlmIChyc2EpCi0rCQlGSVBTX3JzYV9mcmVlKHJzYSk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0r CXBhcnNlX2Vycm9yOgotKwotKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHBy b2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7Ci0rCi0rCWdvdG8gZXJyb3I7Ci0rCi0rCX0KLSsK LStzdGF0aWMgaW50IHJzYV9wcmludGtleTEoRklMRSAqb3V0LCBSU0EgKnJzYSwKLSsJCUJJR05V TSAqWHAxLCBCSUdOVU0gKlhwMiwgQklHTlVNICpYcCwKLSsJCUJJR05VTSAqZSkKLSsJewotKwlp bnQgcmV0ID0gMDsKLSsJQklHTlVNICpwMSA9IE5VTEwsICpwMiA9IE5VTEw7Ci0rCXAxID0gQk5f bmV3KCk7Ci0rCXAyID0gQk5fbmV3KCk7Ci0rCWlmICghcDEgfHwgIXAyKQotKwkJZ290byBlcnJv cjsKLSsKLSsJaWYgKCFSU0FfWDkzMV9kZXJpdmVfZXgocnNhLCBwMSwgcDIsIE5VTEwsIE5VTEws IFhwMSwgWHAyLCBYcCwKLSsJCQkJCQlOVUxMLCBOVUxMLCBOVUxMLCBlLCBOVUxMKSkKLSsJCWdv dG8gZXJyb3I7Ci0rCi0rCWRvX2JuX3ByaW50X25hbWUob3V0LCAicDEiLCBwMSk7Ci0rCWRvX2Ju X3ByaW50X25hbWUob3V0LCAicDIiLCBwMik7Ci0rCWRvX2JuX3ByaW50X25hbWUob3V0LCAicCIs IHJzYS0+cCk7Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycm9yOgotKwlpZiAocDEpCi0rCQlCTl9m cmVlKHAxKTsKLSsJaWYgKHAyKQotKwkJQk5fZnJlZShwMik7Ci0rCi0rCXJldHVybiByZXQ7Ci0r CX0KLSsKLStzdGF0aWMgaW50IHJzYV9wcmludGtleTIoRklMRSAqb3V0LCBSU0EgKnJzYSwKLSsJ CUJJR05VTSAqWHExLCBCSUdOVU0gKlhxMiwgQklHTlVNICpYcSkKLSsJewotKwlpbnQgcmV0ID0g MDsKLSsJQklHTlVNICpxMSA9IE5VTEwsICpxMiA9IE5VTEw7Ci0rCXExID0gQk5fbmV3KCk7Ci0r CXEyID0gQk5fbmV3KCk7Ci0rCWlmICghcTEgfHwgIXEyKQotKwkJZ290byBlcnJvcjsKLSsKLSsJ aWYgKCFSU0FfWDkzMV9kZXJpdmVfZXgocnNhLCBOVUxMLCBOVUxMLCBxMSwgcTIsIE5VTEwsIE5V TEwsIE5VTEwsCi0rCQkJCQkJWHExLCBYcTIsIFhxLCBOVUxMLCBOVUxMKSkKLSsJCWdvdG8gZXJy b3I7Ci0rCi0rCWRvX2JuX3ByaW50X25hbWUob3V0LCAicTEiLCBxMSk7Ci0rCWRvX2JuX3ByaW50 X25hbWUob3V0LCAicTIiLCBxMik7Ci0rCWRvX2JuX3ByaW50X25hbWUob3V0LCAicSIsIHJzYS0+ cSk7Ci0rCWRvX2JuX3ByaW50X25hbWUob3V0LCAibiIsIHJzYS0+bik7Ci0rCWRvX2JuX3ByaW50 X25hbWUob3V0LCAiZCIsIHJzYS0+ZCk7Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycm9yOgotKwlp ZiAocTEpCi0rCQlCTl9mcmVlKHExKTsKLSsJaWYgKHEyKQotKwkJQk5fZnJlZShxMik7Ci0rCi0r CXJldHVybiByZXQ7Ci0rCX0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2Ny eXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRv L2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfcnNhc3Rlc3QuYy5maXBzCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDk0MzA2MzEw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0 LmMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTQzMDYzMTAgKzAyMDAKLUBAIC0wLDAgKzEsMzcwIEBA Ci0rLyogZmlwc19yc2FzdGVzdC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVu c29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdCAyMDA1 LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVu 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 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqCi0rICogVGhpcyBwcm9k dWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5n Ci0rICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqCi0r ICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rI2luY2x1 ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9i bi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9G SVBTCi0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0rICAgIHByaW50 ZigiTm8gRklQUyBSU0Egc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rCi0rI2Vs c2UKLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLStzdGF0aWMgaW50IHJzYV9zdGVzdChG SUxFICpvdXQsIEZJTEUgKmluLCBpbnQgU2FsdGxlbik7Ci0rc3RhdGljIGludCByc2FfcHJpbnRz aWcoRklMRSAqb3V0LCBSU0EgKnJzYSwgY29uc3QgRVZQX01EICpkZ3N0LAotKwkJdW5zaWduZWQg Y2hhciAqTXNnLCBsb25nIE1zZ2xlbiwgaW50IFNhbHRsZW4pOwotKwotK2ludCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKLSsJewotKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOwot KwotKwlpbnQgcmV0ID0gMSwgU2FsdGxlbiA9IC0xOwotKwotKwlpZighRklQU19tb2RlX3NldCgx KSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0r CWlmICgoYXJnYyA+IDIpICYmICFzdHJjbXAoIi1zYWx0bGVuIiwgYXJndlsxXSkpCi0rCQl7Ci0r CQlTYWx0bGVuID0gYXRvaShhcmd2WzJdKTsKLSsJCWlmIChTYWx0bGVuIDwgMCkKLSsJCQl7Ci0r CQkJZnByaW50ZihzdGRlcnIsICJGQVRBTDogSW52YWxpZCBzYWx0IGxlbmd0aFxuIik7Ci0rCQkJ Z290byBlbmQ7Ci0rCQkJfQotKwkJYXJnYyAtPSAyOwotKwkJYXJndiArPSAyOwotKwkJfQotKwll bHNlIGlmICgoYXJnYyA+IDEpICYmICFzdHJjbXAoIi14OTMxIiwgYXJndlsxXSkpCi0rCQl7Ci0r CQlTYWx0bGVuID0gLTI7Ci0rCQlhcmdjLS07Ci0rCQlhcmd2Kys7Ci0rCQl9Ci0rCi0rCWlmIChh cmdjID09IDEpCi0rCQlpbiA9IHN0ZGluOwotKwllbHNlCi0rCQlpbiA9IGZvcGVuKGFyZ3ZbMV0s ICJyIik7Ci0rCi0rCWlmIChhcmdjIDwgMikKLSsJCW91dCA9IHN0ZG91dDsKLSsJZWxzZQotKwkJ b3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKLSsKLSsJaWYgKCFpbikKLSsJCXsKLSsJCWZwcmlu dGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwotKwkJZ290 byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghb3V0KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJG QVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9 Ci0rCi0rCWlmICghcnNhX3N0ZXN0KG91dCwgaW4sIFNhbHRsZW4pKQotKwkJewotKwkJZnByaW50 ZihzdGRlcnIsICJGQVRBTCBSU0FTVEVTVCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOwotKwkJ Z290byBlbmQ7Ci0rCQl9Ci0rCWVsc2UKLSsJCXJldCA9IDA7Ci0rCi0rCWVuZDoKLSsKLSsJaWYg KHJldCkKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwotKwlpZiAoaW4gJiYgKGluICE9IHN0ZGlu KSkKLSsJCWZjbG9zZShpbik7Ci0rCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQotKwkJZmNs b3NlKG91dCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCX0KLSsKLSsjZGVmaW5lIFJTQV9URVNU X01BWExJTkVMRU4JMTAyNDAKLSsKLStpbnQgcnNhX3N0ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4s IGludCBTYWx0bGVuKQotKwl7Ci0rCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOwot KwljaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rCVJTQSAqcnNhID0gTlVMTDsKLSsJY29uc3QgRVZQ X01EICpkZ3N0ID0gTlVMTDsKLSsJdW5zaWduZWQgY2hhciAqTXNnID0gTlVMTDsKLSsJbG9uZyBN c2dsZW4gPSAtMTsKLSsJaW50IGtleWxlbiA9IC0xLCBjdXJyZW50X2tleWxlbiA9IC0xOwotKwlp bnQgcmV0ID0gMDsKLSsJaW50IGxudW0gPSAwOwotKwotKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFs bG9jKFJTQV9URVNUX01BWExJTkVMRU4pOwotKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNB X1RFU1RfTUFYTElORUxFTik7Ci0rCi0rCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCi0rCQln b3RvIGVycm9yOwotKwotKwl3aGlsZSAoZmdldHMob2xpbmVidWYsIFJTQV9URVNUX01BWExJTkVM RU4sIGluKSkKLSsJCXsKLSsJCWxudW0rKzsKLSsJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7 Ci0rCQlrZXl3b3JkID0gbGluZWJ1ZjsKLSsJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLwotKwkJ d2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQotKwkJCWtleXdvcmQrKzsK LSsKLSsJCS8qIExvb2sgZm9yID0gc2lnbiAqLwotKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScp OwotKwotKwkJLyogSWYgbm8gPSBqdXN0IGNvcHkgKi8KLSsJCWlmICghcCkKLSsJCQl7Ci0rCQkJ aWYgKGZwdXRzKG9saW5lYnVmLCBvdXQpIDwgMCkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQljb250 aW51ZTsKLSsJCQl9Ci0rCi0rCQlxID0gcCAtIDE7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcg c3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKLSsJCQkqcS0t ID0gMDsKLSsKLSsJCSpwID0gMDsKLSsJCXZhbHVlID0gcCArIDE7Ci0rCi0rCQkvKiBSZW1vdmUg bGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQg Y2hhcikqdmFsdWUpKQotKwkJCXZhbHVlKys7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3Bh Y2UgZnJvbSB2YWx1ZSAqLwotKwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCi0r CQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCQkq cC0tID0gMDsKLSsKLSsJCS8qIExvb2sgZm9yIFttb2QgPSBYWFhdIGZvciBrZXkgbGVuZ3RoICov Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiW21vZCIpKQotKwkJCXsKLSsJCQlwID0gdmFs dWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKLSsJCQlpZiAoKnAgIT0gJ10nKQotKwkJCQlnb3RvIHBh cnNlX2Vycm9yOwotKwkJCSpwID0gMDsKLSsJCQlrZXlsZW4gPSBhdG9pKHZhbHVlKTsKLSsJCQlp ZiAoa2V5bGVuIDwgMCkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlm ICghc3RyY21wKGtleXdvcmQsICJTSEFBbGciKSkKLSsJCQl7Ci0rCQkJaWYgKCFzdHJjbXAodmFs dWUsICJTSEExIikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMSgpOwotKwkJCWVsc2UgaWYgKCFzdHJj bXAodmFsdWUsICJTSEEyMjQiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGEyMjQoKTsKLSsJCQllbHNl IGlmICghc3RyY21wKHZhbHVlLCAiU0hBMjU2IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMjU2KCk7 Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTM4NCIpKQotKwkJCQlkZ3N0ID0gRVZQ X3NoYTM4NCgpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEE1MTIiKSkKLSsJCQkJ ZGdzdCA9IEVWUF9zaGE1MTIoKTsKLSsJCQllbHNlCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRl cnIsCi0rCQkJCQkiRkFUQUw6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSBcIiVzXCJcbiIsCi0rCQkJ CQkJCQl2YWx1ZSk7Ci0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJCX0KLSsJCQl9Ci0rCQll bHNlIGlmICghc3RyY21wKGtleXdvcmQsICJNc2ciKSkKLSsJCQl7Ci0rCQkJaWYgKE1zZykKLSsJ CQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCi0rCQkJCSoo LS12YWx1ZSkgPSAnMCc7Ci0rCQkJTXNnID0gaGV4MmJpbl9tKHZhbHVlLCAmTXNnbGVuKTsKLSsJ CQlpZiAoIU1zZykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCi0rCQlmcHV0cyhv bGluZWJ1Ziwgb3V0KTsKLSsKLSsJCS8qIElmIGtleSBsZW5ndGggaGFzIGNoYW5nZWQsIGdlbmVy YXRlIGFuZCBvdXRwdXQgcHVibGljCi0rCQkgKiBrZXkgY29tcG9uZW50cyBvZiBuZXcgUlNBIHBy aXZhdGUga2V5LgotKwkJICovCi0rCi0rCQlpZiAoa2V5bGVuICE9IGN1cnJlbnRfa2V5bGVuKQot KwkJCXsKLSsJCQlCSUdOVU0gKmJuX2U7Ci0rCQkJaWYgKHJzYSkKLSsJCQkJRklQU19yc2FfZnJl ZShyc2EpOwotKwkJCXJzYSA9IEZJUFNfcnNhX25ldygpOwotKwkJCWlmICghcnNhKQotKwkJCQln b3RvIGVycm9yOwotKwkJCWJuX2UgPSBCTl9uZXcoKTsKLSsJCQlpZiAoIWJuX2UgfHwgIUJOX3Nl dF93b3JkKGJuX2UsIDB4MTAwMSkpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJaWYgKCFSU0FfWDkz MV9nZW5lcmF0ZV9rZXlfZXgocnNhLCBrZXlsZW4sIGJuX2UsIE5VTEwpKQotKwkJCQlnb3RvIGVy cm9yOwotKwkJCUJOX2ZyZWUoYm5fZSk7Ci0rCQkJZnB1dHMoIm4gPSAiLCBvdXQpOwotKwkJCWRv X2JuX3ByaW50KG91dCwgcnNhLT5uKTsKLSsJCQlmcHV0cygiXG5lID0gIiwgb3V0KTsKLSsJCQlk b19ibl9wcmludChvdXQsIHJzYS0+ZSk7Ci0rCQkJZnB1dHMoIlxuIiwgb3V0KTsKLSsJCQljdXJy ZW50X2tleWxlbiA9IGtleWxlbjsKLSsJCQl9Ci0rCi0rCQlpZiAoTXNnICYmIGRnc3QpCi0rCQkJ ewotKwkJCWlmICghcnNhX3ByaW50c2lnKG91dCwgcnNhLCBkZ3N0LCBNc2csIE1zZ2xlbiwKLSsJ CQkJCQkJCVNhbHRsZW4pKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCU9QRU5TU0xfZnJlZShNc2cp OwotKwkJCU1zZyA9IE5VTEw7Ci0rCQkJfQotKwotKwkJfQotKwotKwlyZXQgPSAxOwotKwotKwll cnJvcjoKLSsKLSsJaWYgKG9saW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKLSsJ aWYgKGxpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7Ci0rCWlmIChyc2EpCi0rCQlG SVBTX3JzYV9mcmVlKHJzYSk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCXBhcnNlX2Vycm9yOgot KwotKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAl ZFxuIiwgbG51bSk7Ci0rCi0rCWdvdG8gZXJyb3I7Ci0rCi0rCX0KLSsKLStzdGF0aWMgaW50IHJz YV9wcmludHNpZyhGSUxFICpvdXQsIFJTQSAqcnNhLCBjb25zdCBFVlBfTUQgKmRnc3QsCi0rCQl1 bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLCBpbnQgU2FsdGxlbikKLSsJewotKwlpbnQg cmV0ID0gMDsKLSsJdW5zaWduZWQgY2hhciAqc2lnYnVmID0gTlVMTDsKLSsJaW50IGksIHNpZ2xl bjsKLSsJLyogRVZQX1BLRVkgc3RydWN0dXJlICovCi0rCUVWUF9QS0VZIHBrOwotKwlFVlBfTURf Q1RYIGN0eDsKLSsJcGsudHlwZSA9IEVWUF9QS0VZX1JTQTsKLSsJcGsucGtleS5yc2EgPSByc2E7 Ci0rCi0rCXNpZ2xlbiA9IFJTQV9zaXplKHJzYSk7Ci0rCXNpZ2J1ZiA9IE9QRU5TU0xfbWFsbG9j KHNpZ2xlbik7Ci0rCWlmICghc2lnYnVmKQotKwkJZ290byBlcnJvcjsKLSsKLSsJRVZQX01EX0NU WF9pbml0KCZjdHgpOwotKwotKwlpZiAoU2FsdGxlbiA+PSAwKQotKwkJewotKwkJTV9FVlBfTURf Q1RYX3NldF9mbGFncygmY3R4LAotKwkJCUVWUF9NRF9DVFhfRkxBR19QQURfUFNTIHwgKFNhbHRs ZW4gPDwgMTYpKTsKLSsJCX0KLSsJZWxzZSBpZiAoU2FsdGxlbiA9PSAtMikKLSsJCU1fRVZQX01E X0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKTsKLSsJaWYgKCFF VlBfU2lnbkluaXRfZXgoJmN0eCwgZGdzdCwgTlVMTCkpCi0rCQlnb3RvIGVycm9yOwotKwlpZiAo IUVWUF9TaWduVXBkYXRlKCZjdHgsIE1zZywgTXNnbGVuKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCWlm ICghRVZQX1NpZ25GaW5hbCgmY3R4LCBzaWdidWYsICh1bnNpZ25lZCBpbnQgKikmc2lnbGVuLCAm cGspKQotKwkJZ290byBlcnJvcjsKLSsKLSsJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgpOwotKwot KwlmcHV0cygiUyA9ICIsIG91dCk7Ci0rCi0rCWZvciAoaSA9IDA7IGkgPCBzaWdsZW47IGkrKykK LSsJCWZwcmludGYob3V0LCAiJTAyWCIsIHNpZ2J1ZltpXSk7Ci0rCi0rCWZwdXRzKCJcbiIsIG91 dCk7Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycm9yOgotKwotKwlyZXR1cm4gcmV0OwotKwl9Ci0r I2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNh dnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVz dC5jCi0tLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMu ZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5NDMwNjMxMCArMDIwMAotKysrIG9wZW5zc2wtMS4w LjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jCTIwMTQtMTAtMTYgMTM6MTk6MzUu MDk0MzA2MzEwICswMjAwCi1AQCAtMCwwICsxLDM3NyBAQAotKy8qIGZpcHNfcnNhdnRlc3QuYyAq LwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcp IGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 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 PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFw aGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNv bSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBI dWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRp by5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wveDUwOXYzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9yc2EuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRc biIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgImZpcHNf dXRsLmgiCi0rCi0raW50IHJzYV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBzYWx0bGVu KTsKLStzdGF0aWMgaW50IHJzYV9wcmludHZlcihGSUxFICpvdXQsCi0rCQlCSUdOVU0gKm4sIEJJ R05VTSAqZSwKLSsJCWNvbnN0IEVWUF9NRCAqZGdzdCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywg bG9uZyBNc2dsZW4sCi0rCQl1bnNpZ25lZCBjaGFyICpTLCBsb25nIFNsZW4sIGludCBTYWx0bGVu KTsKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rCXsKLSsJRklMRSAqaW4g PSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsKLSsJaW50IHJldCA9IDE7Ci0rCWludCBTYWx0bGVuID0g LTE7Ci0rCi0rCWlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3Jz KCk7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKChhcmdjID4gMikgJiYgIXN0cmNtcCgi LXNhbHRsZW4iLCBhcmd2WzFdKSkKLSsJCXsKLSsJCVNhbHRsZW4gPSBhdG9pKGFyZ3ZbMl0pOwot KwkJaWYgKFNhbHRsZW4gPCAwKQotKwkJCXsKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBJ bnZhbGlkIHNhbHQgbGVuZ3RoXG4iKTsKLSsJCQlnb3RvIGVuZDsKLSsJCQl9Ci0rCQlhcmdjIC09 IDI7Ci0rCQlhcmd2ICs9IDI7Ci0rCQl9Ci0rCWVsc2UgaWYgKChhcmdjID4gMSkgJiYgIXN0cmNt cCgiLXg5MzEiLCBhcmd2WzFdKSkKLSsJCXsKLSsJCVNhbHRsZW4gPSAtMjsKLSsJCWFyZ2MtLTsK LSsJCWFyZ3YrKzsKLSsJCX0KLSsKLSsJaWYgKGFyZ2MgPT0gMSkKLSsJCWluID0gc3RkaW47Ci0r CWVsc2UKLSsJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKLSsKLSsJaWYgKGFyZ2MgPCAyKQot KwkJb3V0ID0gc3Rkb3V0OwotKwllbHNlCi0rCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOwot KwotKwlpZiAoIWluKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0 aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFvdXQp Ci0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBl cnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFyc2FfdGVzdChvdXQsIGlu LCBTYWx0bGVuKSkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBVlRFU1QgZmls ZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwllbHNlCi0rCQly ZXQgPSAwOwotKwotKwllbmQ6Ci0rCi0rCWlmIChyZXQpCi0rCQlkb19wcmludF9lcnJvcnMoKTsK LSsKLSsJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCi0rCQlmY2xvc2UoaW4pOwotKwlpZiAob3V0 ICYmIChvdXQgIT0gc3Rkb3V0KSkKLSsJCWZjbG9zZShvdXQpOwotKwotKwlyZXR1cm4gcmV0Owot KwotKwl9Ci0rCi0rI2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCi0rCi0raW50IHJz YV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBTYWx0bGVuKQotKwl7Ci0rCWNoYXIgKmxp bmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOwotKwljaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rCWNv bnN0IEVWUF9NRCAqZGdzdCA9IE5VTEw7Ci0rCUJJR05VTSAqbiA9IE5VTEwsICplID0gTlVMTDsK LSsJdW5zaWduZWQgY2hhciAqTXNnID0gTlVMTCwgKlMgPSBOVUxMOwotKwlsb25nIE1zZ2xlbiwg U2xlbjsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBsbnVtID0gMDsKLSsKLSsJb2xpbmVidWYgPSBP UEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKLSsJbGluZWJ1ZiA9IE9QRU5TU0xf bWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOwotKwotKwlpZiAoIWxpbmVidWYgfHwgIW9saW5l YnVmKQotKwkJZ290byBlcnJvcjsKLSsKLSsJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBSU0FfVEVT VF9NQVhMSU5FTEVOLCBpbikpCi0rCQl7Ci0rCQlsbnVtKys7Ci0rCQlzdHJjcHkobGluZWJ1Ziwg b2xpbmVidWYpOwotKwkJa2V5d29yZCA9IGxpbmVidWY7Ci0rCQkvKiBTa2lwIGxlYWRpbmcgc3Bh Y2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKLSsJCQlr ZXl3b3JkKys7Ci0rCi0rCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KLSsJCXAgPSBzdHJjaHIobGlu ZWJ1ZiwgJz0nKTsKLSsKLSsJCS8qIElmIG5vID0gb3Igc3RhcnRzIHdpdGggWyAoZm9yIFtmb28g PSBiYXJdIGxpbmUpIGp1c3QgY29weSAqLwotKwkJaWYgKCFwIHx8ICprZXl3b3JkPT0nWycpCi0r CQkJewotKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCi0rCQkJCWdvdG8gZXJyb3I7 Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwotKwkJcSA9IHAgLSAxOwotKwotKwkJLyogUmVtb3Zl IHRyYWlsaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkp Ci0rCQkJKnEtLSA9IDA7Ci0rCi0rCQkqcCA9IDA7Ci0rCQl2YWx1ZSA9IHAgKyAxOwotKwotKwkJ LyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJd2hpbGUgKGlzc3BhY2Uo KHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCQl2YWx1ZSsrOwotKwotKwkJLyogUmVtb3ZlIHRy YWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkg LSAxOwotKwotKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikq cCkpCi0rCQkJKnAtLSA9IDA7Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAibiIpKQotKwkJ CXsKLSsJCQlpZiAoIWRvX2hleDJibigmbix2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7 Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiZSIpKQotKwkJCXsKLSsJCQlp ZiAoIWRvX2hleDJibigmZSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQot KwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiU0hBQWxnIikpCi0rCQkJewotKwkJCWlmICgh c3RyY21wKHZhbHVlLCAiU0hBMSIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTEoKTsKLSsJCQllbHNl IGlmICghc3RyY21wKHZhbHVlLCAiU0hBMjI0IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMjI0KCk7 Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTI1NiIpKQotKwkJCQlkZ3N0ID0gRVZQ X3NoYTI1NigpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEzODQiKSkKLSsJCQkJ ZGdzdCA9IEVWUF9zaGEzODQoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBNTEy IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhNTEyKCk7Ci0rCQkJZWxzZQotKwkJCQl7Ci0rCQkJCWZw cmludGYoc3RkZXJyLAotKwkJCQkJIkZBVEFMOiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gXCIlc1wi XG4iLAotKwkJCQkJCQkJdmFsdWUpOwotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCQl9Ci0r CQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNnIikpCi0rCQkJewotKwkJCWlm IChNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAx KQotKwkJCQkqKC0tdmFsdWUpID0gJzAnOwotKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1z Z2xlbik7Ci0rCQkJaWYgKCFNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUyIpKQotKwkJCXsKLSsJCQlpZiAoUykKLSsJCQkJ Z290byBwYXJzZV9lcnJvcjsKLSsJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCi0rCQkJCSooLS12 YWx1ZSkgPSAnMCc7Ci0rCQkJUyA9IGhleDJiaW5fbSh2YWx1ZSwgJlNsZW4pOwotKwkJCWlmICgh UykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJSZXN1bHQiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UKLSsJCQlnb3RvIHBhcnNl X2Vycm9yOwotKwotKwkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCi0rCQlpZiAobiAmJiBlICYm IE1zZyAmJiBTICYmIGRnc3QpCi0rCQkJewotKwkJCWlmICghcnNhX3ByaW50dmVyKG91dCwgbiwg ZSwgZGdzdCwKLSsJCQkJCU1zZywgTXNnbGVuLCBTLCBTbGVuLCBTYWx0bGVuKSkKLSsJCQkJZ290 byBlcnJvcjsKLSsJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJCQlNc2cgPSBOVUxMOwotKwkJCU9Q RU5TU0xfZnJlZShTKTsKLSsJCQlTID0gTlVMTDsKLSsJCQl9Ci0rCi0rCQl9Ci0rCi0rCi0rCXJl dCA9IDE7Ci0rCi0rCi0rCWVycm9yOgotKwotKwlpZiAob2xpbmVidWYpCi0rCQlPUEVOU1NMX2Zy ZWUob2xpbmVidWYpOwotKwlpZiAobGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsK LSsJaWYgKG4pCi0rCQlCTl9mcmVlKG4pOwotKwlpZiAoZSkKLSsJCUJOX2ZyZWUoZSk7Ci0rCi0r CXJldHVybiByZXQ7Ci0rCi0rCXBhcnNlX2Vycm9yOgotKwotKwlmcHJpbnRmKHN0ZGVyciwgIkZB VEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7Ci0rCi0rCWdvdG8g ZXJyb3I7Ci0rCi0rCX0KLSsKLStzdGF0aWMgaW50IHJzYV9wcmludHZlcihGSUxFICpvdXQsCi0r CQlCSUdOVU0gKm4sIEJJR05VTSAqZSwKLSsJCWNvbnN0IEVWUF9NRCAqZGdzdCwKLSsJCXVuc2ln bmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sCi0rCQl1bnNpZ25lZCBjaGFyICpTLCBsb25nIFNs ZW4sIGludCBTYWx0bGVuKQotKwl7Ci0rCWludCByZXQgPSAwLCByOwotKwkvKiBTZXR1cCBSU0Eg YW5kIEVWUF9QS0VZIHN0cnVjdHVyZXMgKi8KLSsJUlNBICpyc2FfcHVia2V5ID0gTlVMTDsKLSsJ RVZQX1BLRVkgcGs7Ci0rCUVWUF9NRF9DVFggY3R4OwotKwl1bnNpZ25lZCBjaGFyICpidWYgPSBO VUxMOwotKwlyc2FfcHVia2V5ID0gRklQU19yc2FfbmV3KCk7Ci0rCWlmICghcnNhX3B1YmtleSkK LSsJCWdvdG8gZXJyb3I7Ci0rCXJzYV9wdWJrZXktPm4gPSBCTl9kdXAobik7Ci0rCXJzYV9wdWJr ZXktPmUgPSBCTl9kdXAoZSk7Ci0rCWlmICghcnNhX3B1YmtleS0+biB8fCAhcnNhX3B1YmtleS0+ ZSkKLSsJCWdvdG8gZXJyb3I7Ci0rCXBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7Ci0rCXBrLnBrZXku cnNhID0gcnNhX3B1YmtleTsKLSsKLSsJRVZQX01EX0NUWF9pbml0KCZjdHgpOwotKwotKwlpZiAo U2FsdGxlbiA+PSAwKQotKwkJewotKwkJTV9FVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LAotKwkJ CUVWUF9NRF9DVFhfRkxBR19QQURfUFNTIHwgKFNhbHRsZW4gPDwgMTYpKTsKLSsJCX0KLSsJZWxz ZSBpZiAoU2FsdGxlbiA9PSAtMikKLSsJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQ X01EX0NUWF9GTEFHX1BBRF9YOTMxKTsKLSsJaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmY3R4LCBk Z3N0LCBOVUxMKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCWlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmY3R4 LCBNc2csIE1zZ2xlbikpCi0rCQlnb3RvIGVycm9yOwotKwotKwlyID0gRVZQX1ZlcmlmeUZpbmFs KCZjdHgsIFMsIFNsZW4sICZwayk7Ci0rCi0rCi0rCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsK LSsKLSsJaWYgKHIgPCAwKQotKwkJZ290byBlcnJvcjsKLSsJRVJSX2NsZWFyX2Vycm9yKCk7Ci0r Ci0rCWlmIChyID09IDApCi0rCQlmcHV0cygiUmVzdWx0ID0gRlxuIiwgb3V0KTsKLSsJZWxzZQot KwkJZnB1dHMoIlJlc3VsdCA9IFBcbiIsIG91dCk7Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycm9y OgotKwlpZiAocnNhX3B1YmtleSkKLSsJCUZJUFNfcnNhX2ZyZWUocnNhX3B1YmtleSk7Ci0rCWlm IChidWYpCi0rCQlPUEVOU1NMX2ZyZWUoYnVmKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKyNl bmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRl c3QuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMK LS0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jLmZpcHMJ MjAxNC0xMC0xNiAxMzoxOTozNS4wOTUzMDYzMzMgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xai9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDk1MzA2 MzMzICswMjAwCi1AQCAtMCwwICsxLDM4OCBAQAotKy8qIGZpcHNfc2hhdGVzdC5jICovCi0rLyog V3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRo ZSBPcGVuU1NMCi0rICogcHJvamVjdCAyMDA1LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICog Q29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsg KgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdt ZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9w ZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8K LSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0 ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5v cmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkg bm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIg aW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBv ZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFu eSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQot KyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK LSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKyAqCi0rICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29m dHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCi0rICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAo dGpoQGNyeXB0c29mdC5jb20pLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0r I2luY2x1ZGUgPGN0eXBlLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2Jpby5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wveDUw OXYzLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIFNIQVhYWCBzdXBwb3J0XG4i KTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRlICJmaXBzX3V0 bC5oIgotKwotK3N0YXRpYyBpbnQgZGdzdF90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pOwotK3N0 YXRpYyBpbnQgcHJpbnRfZGdzdChjb25zdCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCi0rCQl1bnNp Z25lZCBjaGFyICpNc2csIGludCBNc2dsZW4pOwotK3N0YXRpYyBpbnQgcHJpbnRfbW9udGUoY29u c3QgRVZQX01EICptZCwgRklMRSAqb3V0LAotKwkJdW5zaWduZWQgY2hhciAqU2VlZCwgaW50IFNl ZWRMZW4pOwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsJewotKwlGSUxF ICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOwotKwotKwlpbnQgcmV0ID0gMTsKLSsKLSsJaWYoIUZJ UFNfbW9kZV9zZXQoMSkpCi0rCQl7Ci0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCWdvdG8gZW5k OwotKwkJfQotKwotKwlpZiAoYXJnYyA9PSAxKQotKwkJaW4gPSBzdGRpbjsKLSsJZWxzZQotKwkJ aW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOwotKwotKwlpZiAoYXJnYyA8IDIpCi0rCQlvdXQgPSBz dGRvdXQ7Ci0rCWVsc2UKLSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7Ci0rCi0rCWlmICgh aW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9u IGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIW91dCkKLSsJCXsKLSsJ CWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsK LSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIWRnc3RfdGVzdChvdXQsIGluKSkKLSsJCXsK LSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgZGlnZXN0IGZpbGUgcHJvY2Vzc2luZyBlcnJvclxu Iik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsJZWxzZQotKwkJcmV0ID0gMDsKLSsKLSsJZW5kOgot KwotKwlpZiAocmV0KQotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCi0rCWlmIChpbiAmJiAoaW4g IT0gc3RkaW4pKQotKwkJZmNsb3NlKGluKTsKLSsJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkp Ci0rCQlmY2xvc2Uob3V0KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJfQotKwotKyNkZWZpbmUg U0hBX1RFU1RfTUFYX0JJVFMJMTAyNDAwCi0rI2RlZmluZSBTSEFfVEVTVF9NQVhMSU5FTEVOCSgo KFNIQV9URVNUX01BWF9CSVRTID4+IDMpICogMikgKyAxMDApCi0rCi0raW50IGRnc3RfdGVzdChG SUxFICpvdXQsIEZJTEUgKmluKQotKwl7Ci0rCWNvbnN0IEVWUF9NRCAqbWQgPSBOVUxMOwotKwlj aGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVl OwotKwl1bnNpZ25lZCBjaGFyICpNc2cgPSBOVUxMLCAqU2VlZCA9IE5VTEw7Ci0rCWxvbmcgTXNn TGVuID0gLTEsIExlbiA9IC0xLCBTZWVkTGVuID0gLTE7Ci0rCWludCByZXQgPSAwOwotKwlpbnQg bG51bSA9IDA7Ci0rCi0rCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoU0hBX1RFU1RfTUFYTElO RUxFTik7Ci0rCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhTSEFfVEVTVF9NQVhMSU5FTEVOKTsK LSsKLSsJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCi0r CXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgU0hBX1RFU1RfTUFYTElORUxFTiwgaW4pKQotKwkJewot KwkJbG51bSsrOwotKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKLSsJCWtleXdvcmQgPSBs aW5lYnVmOwotKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgo dW5zaWduZWQgY2hhcikqa2V5d29yZCkpCi0rCQkJa2V5d29yZCsrOwotKwotKwkJLyogTG9vayBm b3IgPSBzaWduICovCi0rCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Ci0rCi0rCQkvKiBJZiBu byA9IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbTD0yMF0gbGluZSkganVzdCBjb3B5ICovCi0rCQlp ZiAoIXApCi0rCQkJewotKwkJCWZwdXRzKG9saW5lYnVmLCBvdXQpOwotKwkJCWNvbnRpbnVlOwot KwkJCX0KLSsKLSsJCXEgPSBwIC0gMTsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAq LwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJCSpxLS0gPSAwOwot KwotKwkJKnAgPSAwOwotKwkJdmFsdWUgPSBwICsgMTsKLSsKLSsJCS8qIFJlbW92ZSBsZWFkaW5n IHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2 YWx1ZSkpCi0rCQkJdmFsdWUrKzsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9t IHZhbHVlICovCi0rCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKLSsJCXdoaWxlICgq cCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAwOwot KwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwiW0wiKSAmJiAqcD09J10nKQotKwkJCXsKLSsJCQlz d2l0Y2ggKGF0b2kodmFsdWUpKQotKwkJCQl7Ci0rCQkJCWNhc2UgMjA6IG1kPUVWUF9zaGExKCk7 ICAgYnJlYWs7Ci0rCQkJCWNhc2UgMjg6IG1kPUVWUF9zaGEyMjQoKTsgYnJlYWs7Ci0rCQkJCWNh c2UgMzI6IG1kPUVWUF9zaGEyNTYoKTsgYnJlYWs7Ci0rCQkJCWNhc2UgNDg6IG1kPUVWUF9zaGEz ODQoKTsgYnJlYWs7Ci0rCQkJCWNhc2UgNjQ6IG1kPUVWUF9zaGE1MTIoKTsgYnJlYWs7Ci0rCQkJ CWRlZmF1bHQ6IGdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmICgh c3RyY21wKGtleXdvcmQsICJMZW4iKSkKLSsJCQl7Ci0rCQkJaWYgKExlbiAhPSAtMSkKLSsJCQkJ Z290byBwYXJzZV9lcnJvcjsKLSsJCQlMZW4gPSBhdG9pKHZhbHVlKTsKLSsJCQlpZiAoTGVuIDwg MCkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQkvKiBPbmx5IGhhbmRsZSBtdWx0aXBsZXMg b2YgOCBiaXRzICovCi0rCQkJaWYgKExlbiAmIDB4NykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsK LSsJCQlpZiAoTGVuID4gU0hBX1RFU1RfTUFYX0JJVFMpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7 Ci0rCQkJTXNnTGVuID0gTGVuID4+IDM7Ci0rCQkJfQotKwotKwkJZWxzZSBpZiAoIXN0cmNtcChr ZXl3b3JkLCAiTXNnIikpCi0rCQkJewotKwkJCWxvbmcgdG1wbGVuOwotKwkJCWlmIChzdHJsZW4o dmFsdWUpICYgMSkKLSsJCQkJKigtLXZhbHVlKSA9ICcwJzsKLSsJCQlpZiAoTXNnKQotKwkJCQln b3RvIHBhcnNlX2Vycm9yOwotKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJnRtcGxlbik7Ci0r CQkJaWYgKCFNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCAiU2VlZCIpKQotKwkJCXsKLSsJCQlpZiAoc3RybGVuKHZhbHVlKSAm IDEpCi0rCQkJCSooLS12YWx1ZSkgPSAnMCc7Ci0rCQkJaWYgKFNlZWQpCi0rCQkJCWdvdG8gcGFy c2VfZXJyb3I7Ci0rCQkJU2VlZCA9IGhleDJiaW5fbSh2YWx1ZSwgJlNlZWRMZW4pOwotKwkJCWlm ICghU2VlZCkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsICJNRCIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZQotKwkJCWdvdG8gcGFy c2VfZXJyb3I7Ci0rCi0rCQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKLSsKLSsJCWlmIChtZCAmJiBN c2cgJiYgKE1zZ0xlbiA+PSAwKSkKLSsJCQl7Ci0rCQkJaWYgKCFwcmludF9kZ3N0KG1kLCBvdXQs IE1zZywgTXNnTGVuKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlPUEVOU1NMX2ZyZWUoTXNnKTsK LSsJCQlNc2cgPSBOVUxMOwotKwkJCU1zZ0xlbiA9IC0xOwotKwkJCUxlbiA9IC0xOwotKwkJCX0K LSsJCWVsc2UgaWYgKG1kICYmIFNlZWQgJiYgKFNlZWRMZW4gPiAwKSkKLSsJCQl7Ci0rCQkJaWYg KCFwcmludF9tb250ZShtZCwgb3V0LCBTZWVkLCBTZWVkTGVuKSkKLSsJCQkJZ290byBlcnJvcjsK LSsJCQlPUEVOU1NMX2ZyZWUoU2VlZCk7Ci0rCQkJU2VlZCA9IE5VTEw7Ci0rCQkJU2VlZExlbiA9 IC0xOwotKwkJCX0KLSsJCi0rCi0rCQl9Ci0rCi0rCi0rCXJldCA9IDE7Ci0rCi0rCi0rCWVycm9y OgotKwotKwlpZiAob2xpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOwotKwlpZiAo bGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKLSsJaWYgKE1zZykKLSsJCU9QRU5T U0xfZnJlZShNc2cpOwotKwlpZiAoU2VlZCkKLSsJCU9QRU5TU0xfZnJlZShTZWVkKTsKLSsKLSsJ cmV0dXJuIHJldDsKLSsKLSsJcGFyc2VfZXJyb3I6Ci0rCi0rCWZwcmludGYoc3RkZXJyLCAiRkFU QUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKLSsKLSsJZ290byBl cnJvcjsKLSsKLSsJfQotKwotK3N0YXRpYyBpbnQgcHJpbnRfZGdzdChjb25zdCBFVlBfTUQgKmVt ZCwgRklMRSAqb3V0LAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTXNnbGVuKQotKwl7Ci0r CWludCBpLCBtZGxlbjsKLSsJdW5zaWduZWQgY2hhciBtZFtFVlBfTUFYX01EX1NJWkVdOwotKwlp ZiAoIUVWUF9EaWdlc3QoTXNnLCBNc2dsZW4sIG1kLCAodW5zaWduZWQgaW50ICopJm1kbGVuLCBl bWQsIE5VTEwpKQotKwkJewotKwkJZnB1dHMoIkVycm9yIGNhbGN1bGF0aW5nIEhBU0hcbiIsIHN0 ZGVycik7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJZnB1dHMoIk1EID0gIiwgb3V0KTsKLSsJZm9y IChpID0gMDsgaSA8IG1kbGVuOyBpKyspCi0rCQlmcHJpbnRmKG91dCwgIiUwMngiLCBtZFtpXSk7 Ci0rCWZwdXRzKCJcbiIsIG91dCk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBw cmludF9tb250ZShjb25zdCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCi0rCQl1bnNpZ25lZCBjaGFy ICpTZWVkLCBpbnQgU2VlZExlbikKLSsJewotKwl1bnNpZ25lZCBpbnQgaSwgaiwgazsKLSsJaW50 IHJldCA9IDA7Ci0rCUVWUF9NRF9DVFggY3R4OwotKwl1bnNpZ25lZCBjaGFyICptMSwgKm0yLCAq bTMsICpwOwotKwl1bnNpZ25lZCBpbnQgbWxlbiwgbTFsZW4sIG0ybGVuLCBtM2xlbjsKLSsKLSsJ RVZQX01EX0NUWF9pbml0KCZjdHgpOwotKwotKwlpZiAoU2VlZExlbiA+IEVWUF9NQVhfTURfU0la RSkKLSsJCW1sZW4gPSBTZWVkTGVuOwotKwllbHNlCi0rCQltbGVuID0gRVZQX01BWF9NRF9TSVpF OwotKwotKwltMSA9IE9QRU5TU0xfbWFsbG9jKG1sZW4pOwotKwltMiA9IE9QRU5TU0xfbWFsbG9j KG1sZW4pOwotKwltMyA9IE9QRU5TU0xfbWFsbG9jKG1sZW4pOwotKwotKwlpZiAoIW0xIHx8ICFt MiB8fCAhbTMpCi0rCQlnb3RvIG1jX2Vycm9yOwotKwotKwltMWxlbiA9IG0ybGVuID0gbTNsZW4g PSBTZWVkTGVuOwotKwltZW1jcHkobTEsIFNlZWQsIFNlZWRMZW4pOwotKwltZW1jcHkobTIsIFNl ZWQsIFNlZWRMZW4pOwotKwltZW1jcHkobTMsIFNlZWQsIFNlZWRMZW4pOwotKwotKwlmcHV0cygi XG4iLCBvdXQpOwotKwotKwlmb3IgKGogPSAwOyBqIDwgMTAwOyBqKyspCi0rCQl7Ci0rCQlmb3Ig KGkgPSAwOyBpIDwgMTAwMDsgaSsrKQotKwkJCXsKLSsJCQlFVlBfRGlnZXN0SW5pdF9leCgmY3R4 LCBtZCwgTlVMTCk7Ci0rCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMSwgbTFsZW4pOwotKwkJ CUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgbTIsIG0ybGVuKTsKLSsJCQlFVlBfRGlnZXN0VXBkYXRl KCZjdHgsIG0zLCBtM2xlbik7Ci0rCQkJcCA9IG0xOwotKwkJCW0xID0gbTI7Ci0rCQkJbTFsZW4g PSBtMmxlbjsKLSsJCQltMiA9IG0zOwotKwkJCW0ybGVuID0gbTNsZW47Ci0rCQkJbTMgPSBwOwot KwkJCUVWUF9EaWdlc3RGaW5hbF9leCgmY3R4LCBtMywgJm0zbGVuKTsKLSsJCQl9Ci0rCQlmcHJp bnRmKG91dCwgIkNPVU5UID0gJWRcbiIsIGopOwotKwkJZnB1dHMoIk1EID0gIiwgb3V0KTsKLSsJ CWZvciAoayA9IDA7IGsgPCBtM2xlbjsgaysrKQotKwkJCWZwcmludGYob3V0LCAiJTAyeCIsIG0z W2tdKTsKLSsJCWZwdXRzKCJcblxuIiwgb3V0KTsKLSsJCW1lbWNweShtMSwgbTMsIG0zbGVuKTsK LSsJCW1lbWNweShtMiwgbTMsIG0zbGVuKTsKLSsJCW0xbGVuID0gbTJsZW4gPSBtM2xlbjsKLSsJ CX0KLSsKLSsJcmV0ID0gMTsKLSsKLSsJbWNfZXJyb3I6Ci0rCWlmIChtMSkKLSsJCU9QRU5TU0xf ZnJlZShtMSk7Ci0rCWlmIChtMikKLSsJCU9QRU5TU0xfZnJlZShtMik7Ci0rCWlmIChtMykKLSsJ CU9QRU5TU0xfZnJlZShtMyk7Ci0rCi0rCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKLSsKLSsJ cmV0dXJuIHJldDsKLSsJfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX3V0bC5oLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX3V0bC5oCi0tLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvY2F2cy9maXBz X3V0bC5oLmZpcHMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTUzMDYzMzMgKzAyMDAKLSsrKyBvcGVu c3NsLTEuMC4xai9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmgJMjAxNC0xMC0xNiAxMzoxOToz NS4wOTUzMDYzMzMgKzAyMDAKLUBAIC0wLDAgKzEsMzQzIEBACi0rLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsg KiBDb3B5cmlnaHQgKGMpIDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0Ogot KyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4g QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAi T3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0 bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVu c3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFw cGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNz aW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMg b2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAg YWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQg QU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRT IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsg KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAq Ci0rICovCi0rCi0rdm9pZCBkb19wcmludF9lcnJvcnModm9pZCkKLSsJewotKwljb25zdCBjaGFy ICpmaWxlLCAqZGF0YTsKLSsJaW50IGxpbmUsIGZsYWdzOwotKwl1bnNpZ25lZCBsb25nIGw7Ci0r CXdoaWxlICgobCA9IEVSUl9nZXRfZXJyb3JfbGluZV9kYXRhKCZmaWxlLCAmbGluZSwgJmRhdGEs ICZmbGFncykpKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJFUlJPUjolbHg6bGliPSVkLGZ1 bmM9JWQscmVhc29uPSVkIgotKwkJCQkiOmZpbGU9JXM6bGluZT0lZDolc1xuIiwKLSsJCQlsLCBF UlJfR0VUX0xJQihsKSwgRVJSX0dFVF9GVU5DKGwpLCBFUlJfR0VUX1JFQVNPTihsKSwKLSsJCQlm aWxlLCBsaW5lLCBmbGFncyAmIEVSUl9UWFRfU1RSSU5HID8gZGF0YSA6ICIiKTsKLSsJCX0KLSsJ fQotKwotK2ludCBoZXgyYmluKGNvbnN0IGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQpCi0r ICAgIHsKLSsgICAgaW50IG4xLCBuMjsKLSsgICAgdW5zaWduZWQgY2hhciBjaDsKLSsKLSsgICAg Zm9yIChuMT0wLG4yPTAgOyBpbltuMV0gJiYgaW5bbjFdICE9ICdcbicgOyApCi0rCXsgLyogZmly c3QgYnl0ZSAqLwotKwlpZiAoKGluW24xXSA+PSAnMCcpICYmIChpbltuMV0gPD0gJzknKSkKLSsJ ICAgIGNoID0gaW5bbjErK10gLSAnMCc7Ci0rCWVsc2UgaWYgKChpbltuMV0gPj0gJ0EnKSAmJiAo aW5bbjFdIDw9ICdGJykpCi0rCSAgICBjaCA9IGluW24xKytdIC0gJ0EnICsgMTA7Ci0rCWVsc2Ug aWYgKChpbltuMV0gPj0gJ2EnKSAmJiAoaW5bbjFdIDw9ICdmJykpCi0rCSAgICBjaCA9IGluW24x KytdIC0gJ2EnICsgMTA7Ci0rCWVsc2UKLSsJICAgIHJldHVybiAtMTsKLSsJaWYoIWluW24xXSkK LSsJICAgIHsKLSsJICAgIG91dFtuMisrXT1jaDsKLSsJICAgIGJyZWFrOwotKwkgICAgfQotKwlv dXRbbjJdID0gY2ggPDwgNDsKLSsJLyogc2Vjb25kIGJ5dGUgKi8KLSsJaWYgKChpbltuMV0gPj0g JzAnKSAmJiAoaW5bbjFdIDw9ICc5JykpCi0rCSAgICBjaCA9IGluW24xKytdIC0gJzAnOwotKwll bHNlIGlmICgoaW5bbjFdID49ICdBJykgJiYgKGluW24xXSA8PSAnRicpKQotKwkgICAgY2ggPSBp bltuMSsrXSAtICdBJyArIDEwOwotKwllbHNlIGlmICgoaW5bbjFdID49ICdhJykgJiYgKGluW24x XSA8PSAnZicpKQotKwkgICAgY2ggPSBpbltuMSsrXSAtICdhJyArIDEwOwotKwllbHNlCi0rCSAg ICByZXR1cm4gLTE7Ci0rCW91dFtuMisrXSB8PSBjaDsKLSsJfQotKyAgICByZXR1cm4gbjI7Ci0r ICAgIH0KLSsKLSt1bnNpZ25lZCBjaGFyICpoZXgyYmluX20oY29uc3QgY2hhciAqaW4sIGxvbmcg KnBsZW4pCi0rCXsKLSsJdW5zaWduZWQgY2hhciAqcDsKLSsJcCA9IE9QRU5TU0xfbWFsbG9jKChz dHJsZW4oaW4pICsgMSkvMik7Ci0rCSpwbGVuID0gaGV4MmJpbihpbiwgcCk7Ci0rCXJldHVybiBw OwotKwl9Ci0rCi0raW50IGRvX2hleDJibihCSUdOVU0gKipwciwgY29uc3QgY2hhciAqaW4pCi0r CXsKLSsJdW5zaWduZWQgY2hhciAqcDsKLSsJbG9uZyBwbGVuOwotKwlpbnQgciA9IDA7Ci0rCXAg PSBoZXgyYmluX20oaW4sICZwbGVuKTsKLSsJaWYgKCFwKQotKwkJcmV0dXJuIDA7Ci0rCWlmICgh KnByKQotKwkJKnByID0gQk5fbmV3KCk7Ci0rCWlmICghKnByKQotKwkJcmV0dXJuIDA7Ci0rCWlm IChCTl9iaW4yYm4ocCwgcGxlbiwgKnByKSkKLSsJCXIgPSAxOwotKwlPUEVOU1NMX2ZyZWUocCk7 Ci0rCXJldHVybiByOwotKwl9Ci0rCi0raW50IGRvX2JuX3ByaW50KEZJTEUgKm91dCwgQklHTlVN ICpibikKLSsJewotKwlpbnQgbGVuLCBpOwotKwl1bnNpZ25lZCBjaGFyICp0bXA7Ci0rCWxlbiA9 IEJOX251bV9ieXRlcyhibik7Ci0rCWlmIChsZW4gPT0gMCkKLSsJCXsKLSsJCWZwdXRzKCIwMCIs IG91dCk7Ci0rCQlyZXR1cm4gMTsKLSsJCX0KLSsKLSsJdG1wID0gT1BFTlNTTF9tYWxsb2MobGVu KTsKLSsJaWYgKCF0bXApCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIk1lbW9yeSBhbGxvY2F0 aW9uIGVycm9yXG4iKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlCTl9ibjJiaW4oYm4sIHRtcCk7 Ci0rCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLSsJCWZwcmludGYob3V0LCAiJTAyeCIsIHRt cFtpXSk7Ci0rCU9QRU5TU0xfZnJlZSh0bXApOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK2ludCBk b19ibl9wcmludF9uYW1lKEZJTEUgKm91dCwgY29uc3QgY2hhciAqbmFtZSwgQklHTlVNICpibikK LSsJewotKwlpbnQgcjsKLSsJZnByaW50ZihvdXQsICIlcyA9ICIsIG5hbWUpOwotKwlyID0gZG9f Ym5fcHJpbnQob3V0LCBibik7Ci0rCWlmICghcikKLSsJCXJldHVybiAwOwotKwlmcHV0cygiXG4i LCBvdXQpOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK2ludCBwYXJzZV9saW5lKGNoYXIgKipwa3cs IGNoYXIgKipwdmFsLCBjaGFyICpsaW5lYnVmLCBjaGFyICpvbGluZWJ1ZikKLSsJewotKwljaGFy ICprZXl3b3JkLCAqdmFsdWUsICpwLCAqcTsKLSsJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsK LSsJa2V5d29yZCA9IGxpbmVidWY7Ci0rCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLwotKwl3aGls ZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCi0rCQlrZXl3b3JkKys7Ci0rCi0r CS8qIExvb2sgZm9yID0gc2lnbiAqLwotKwlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Ci0rCi0r CS8qIElmIG5vICc9JyBleGl0ICovCi0rCWlmICghcCkKLSsJCXJldHVybiAwOwotKwotKwlxID0g cCAtIDE7Ci0rCi0rCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwotKwl3aGlsZSAoaXNzcGFj ZSgodW5zaWduZWQgY2hhcikqcSkpCi0rCQkqcS0tID0gMDsKLSsKLSsJKnAgPSAwOwotKwl2YWx1 ZSA9IHAgKyAxOwotKwotKwkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0r CXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCi0rCQl2YWx1ZSsrOwotKwot KwkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwlwID0gdmFsdWUgKyBz dHJsZW4odmFsdWUpIC0gMTsKLSsKLSsJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5z aWduZWQgY2hhcikqcCkpCi0rCQkqcC0tID0gMDsKLSsKLSsJKnBrdyA9IGtleXdvcmQ7Ci0rCSpw dmFsID0gdmFsdWU7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rQklHTlVNICpoZXgyYm4oY29uc3Qg Y2hhciAqaW4pCi0rICAgIHsKLSsgICAgQklHTlVNICpwPU5VTEw7Ci0rCi0rICAgIGlmICghZG9f aGV4MmJuKCZwLCBpbikpCi0rCXJldHVybiBOVUxMOwotKwotKyAgICByZXR1cm4gcDsKLSsgICAg fQotKwotK2ludCBiaW4yaGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLGludCBsZW4sY2hhciAq b3V0KQotKyAgICB7Ci0rICAgIGludCBuMSwgbjI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2g7Ci0r Ci0rICAgIGZvciAobjE9MCxuMj0wIDsgbjEgPCBsZW4gOyArK24xKQotKwl7Ci0rCWNoPWluW24x XSA+PiA0OwotKwlpZiAoY2ggPD0gMHgwOSkKLSsJICAgIG91dFtuMisrXT1jaCsnMCc7Ci0rCWVs c2UKLSsJICAgIG91dFtuMisrXT1jaC0xMCsnYSc7Ci0rCWNoPWluW24xXSAmIDB4MGY7Ci0rCWlm KGNoIDw9IDB4MDkpCi0rCSAgICBvdXRbbjIrK109Y2grJzAnOwotKwllbHNlCi0rCSAgICBvdXRb bjIrK109Y2gtMTArJ2EnOwotKwl9Ci0rICAgIG91dFtuMl09J1wwJzsKLSsgICAgcmV0dXJuIG4y OwotKyAgICB9Ci0rCi0rdm9pZCBwdihjb25zdCBjaGFyICp0YWcsY29uc3QgdW5zaWduZWQgY2hh ciAqdmFsLGludCBsZW4pCi0rICAgIHsKLSsgICAgY2hhciBvYnVmWzIwNDhdOwotKwotKyAgICBi aW4yaGV4KHZhbCxsZW4sb2J1Zik7Ci0rICAgIHByaW50ZigiJXMgPSAlc1xuIix0YWcsb2J1Zik7 Ci0rICAgIH0KLSsKLSsvKiBUbyBhdm9pZCBleHRlbnNpdmUgY2hhbmdlcyB0byB0ZXN0IHByb2dy YW0gYXQgdGhpcyBzdGFnZSBqdXN0IGNvbnZlcnQKLSsgKiB0aGUgaW5wdXQgbGluZSBpbnRvIGFu IGFjY2VwdGFibGUgZm9ybS4gS2V5d29yZCBsaW5lcyBjb252ZXJ0ZWQgdG8gZm9ybQotKyAqICJr ZXl3b3JkID0gdmFsdWVcbiIgbm8gbWF0dGVyIHdoYXQgd2hpdGUgc3BhY2UgcHJlc2VudCwgYWxs IG90aGVyIGxpbmVzCi0rICoganVzdCBoYXZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlIHJl bW92ZWQuCi0rICovCi0rCi0raW50IHRpZHlfbGluZShjaGFyICpsaW5lYnVmLCBjaGFyICpvbGlu ZWJ1ZikKLSsJewotKwljaGFyICprZXl3b3JkLCAqdmFsdWUsICpwLCAqcTsKLSsJc3RyY3B5KGxp bmVidWYsIG9saW5lYnVmKTsKLSsJa2V5d29yZCA9IGxpbmVidWY7Ci0rCS8qIFNraXAgbGVhZGlu ZyBzcGFjZSAqLwotKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCi0r CQlrZXl3b3JkKys7Ci0rCS8qIExvb2sgZm9yID0gc2lnbiAqLwotKwlwID0gc3RyY2hyKGxpbmVi dWYsICc9Jyk7Ci0rCi0rCS8qIElmIG5vICc9JyBqdXN0IGNob3AgbGVhZGluZywgdHJhaWxpbmcg d3MgKi8KLSsJaWYgKCFwKQotKwkJewotKwkJcCA9IGtleXdvcmQgKyBzdHJsZW4oa2V5d29yZCkg LSAxOwotKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkp Ci0rCQkJKnAtLSA9IDA7Ci0rCQlzdHJjcHkob2xpbmVidWYsIGtleXdvcmQpOwotKwkJc3RyY2F0 KG9saW5lYnVmLCAiXG4iKTsKLSsJCXJldHVybiAxOwotKwkJfQotKwotKwlxID0gcCAtIDE7Ci0r Ci0rCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwotKwl3aGlsZSAoaXNzcGFjZSgodW5zaWdu ZWQgY2hhcikqcSkpCi0rCQkqcS0tID0gMDsKLSsKLSsJKnAgPSAwOwotKwl2YWx1ZSA9IHAgKyAx OwotKwotKwkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCXdoaWxlIChp c3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCi0rCQl2YWx1ZSsrOwotKwotKwkvKiBSZW1v dmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwlwID0gdmFsdWUgKyBzdHJsZW4odmFs dWUpIC0gMTsKLSsKLSsJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hh cikqcCkpCi0rCQkqcC0tID0gMDsKLSsKLSsJc3RyY3B5KG9saW5lYnVmLCBrZXl3b3JkKTsKLSsJ c3RyY2F0KG9saW5lYnVmLCAiID0gIik7Ci0rCXN0cmNhdChvbGluZWJ1ZiwgdmFsdWUpOwotKwlz dHJjYXQob2xpbmVidWYsICJcbiIpOwotKwotKwlyZXR1cm4gMTsKLSsJfQotKwotKy8qIE5COiB0 aGlzIHJldHVybiB0aGUgbnVtYmVyIG9mIF9iaXRzXyByZWFkICovCi0raW50IGJpbnQyYmluKGNv bnN0IGNoYXIgKmluLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpvdXQpCi0rICAgIHsKLSsgICAg aW50IG47Ci0rCi0rICAgIG1lbXNldChvdXQsMCxsZW4pOwotKyAgICBmb3Iobj0wIDsgbiA8IGxl biA7ICsrbikKLSsJaWYoaW5bbl0gPT0gJzEnKQotKwkgICAgb3V0W24vOF18PSgweDgwID4+IChu JTgpKTsKLSsgICAgcmV0dXJuIGxlbjsKLSsgICAgfQotKwotK2ludCBiaW4yYmludChjb25zdCB1 bnNpZ25lZCBjaGFyICppbixpbnQgbGVuLGNoYXIgKm91dCkKLSsgICAgewotKyAgICBpbnQgbjsK LSsKLSsgICAgZm9yKG49MCA7IG4gPCBsZW4gOyArK24pCi0rCW91dFtuXT0oaW5bbi84XSYoMHg4 MCA+PiAobiU4KSkpID8gJzEnIDogJzAnOwotKyAgICByZXR1cm4gbjsKLSsgICAgfQotKwotKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotK3Zv aWQgUHJpbnRWYWx1ZShjaGFyICp0YWcsIHVuc2lnbmVkIGNoYXIgKnZhbCwgaW50IGxlbikKLSt7 Ci0rI2lmIFZFUkJPU0UKLSsgIGNoYXIgb2J1ZlsyMDQ4XTsKLSsgIGludCBvbGVuOwotKyAgb2xl biA9IGJpbjJoZXgodmFsLCBsZW4sIG9idWYpOwotKyAgcHJpbnRmKCIlcyA9ICUuKnNcbiIsIHRh Zywgb2xlbiwgb2J1Zik7Ci0rI2VuZGlmCi0rfQotKwotK3ZvaWQgT3V0cHV0VmFsdWUoY2hhciAq dGFnLCB1bnNpZ25lZCBjaGFyICp2YWwsIGludCBsZW4sIEZJTEUgKnJmcCxpbnQgYml0bW9kZSkK LSsgICAgewotKyAgICBjaGFyIG9idWZbMjA0OF07Ci0rICAgIGludCBvbGVuOwotKwotKyAgICBp ZihiaXRtb2RlKQotKwlvbGVuPWJpbjJiaW50KHZhbCxsZW4sb2J1Zik7Ci0rICAgIGVsc2UKLSsJ b2xlbj1iaW4yaGV4KHZhbCxsZW4sb2J1Zik7Ci0rCi0rICAgIGZwcmludGYocmZwLCAiJXMgPSAl LipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOwotKyNpZiBWRVJCT1NFCi0rICAgIHByaW50ZigiJXMg PSAlLipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOwotKyNlbmRpZgotKyAgICB9Ci0rCi1kaWZmIC11 cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jLmZpcHMgb3Bl bnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYwotLS0tIG9wZW5zc2wt MS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMuZmlwcwkyMDE0LTEwLTE2IDEz OjE5OjM1LjA5NTMwNjMzMyArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2Zp cHNfYWVzX3NlbGZ0ZXN0LmMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTUzMDYzMzMgKzAyMDAKLUBA IC0wLDAgKzEsMzU5IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl Ci0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQg Ik9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICog ICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVh c2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUg PHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgPG9wZW5z c2wvZXZwLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK3N0YXRpYyBjb25zdCBzdHJ1Y3QK LSsgICAgewotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVsxNl07Ci0rICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIgcGxhaW50ZXh0WzE2XTsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBjaXBo ZXJ0ZXh0WzE2XTsKLSsgICAgfSB0ZXN0c1tdPQotKwl7Ci0rCXsKLSsJeyAweDAwLDB4MDEsMHgw MiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcsCi0rCSAgMHgwOCwweDA5LDB4MEEsMHgwQiwweDBD LDB4MEQsMHgwRSwweDBGIH0sCi0rCXsgMHgwMCwweDExLDB4MjIsMHgzMywweDQ0LDB4NTUsMHg2 NiwweDc3LAotKwkgIDB4ODgsMHg5OSwweEFBLDB4QkIsMHhDQywweERELDB4RUUsMHhGRiB9LAot Kwl7IDB4NjksMHhDNCwweEUwLDB4RDgsMHg2QSwweDdCLDB4MDQsMHgzMCwKLSsJICAweEQ4LDB4 Q0QsMHhCNywweDgwLDB4NzAsMHhCNCwweEM1LDB4NUEgfSwKLSsJfSwKLSsJfTsKLSsKLStzdGF0 aWMgaW50IGNvcnJ1cHRfYWVzOwotKwotK3ZvaWQgRklQU19jb3JydXB0X2FlcygpCi0rICAgIHsK LSsgICAgY29ycnVwdF9hZXMgPSAxOwotKyAgICB9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfYWVz KCkKLSsgICAgewotKyAgICBpbnQgbjsKLSsgICAgaW50IHJldCA9IDA7Ci0rICAgIEVWUF9DSVBI RVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgZm9y KG49MCA7IG4gPCAxIDsgKytuKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIga2V5WzE2XTsKLSsKLSsJ bWVtY3B5KGtleSwgdGVzdHNbbl0ua2V5LCBzaXplb2Yoa2V5KSk7Ci0rCWlmIChjb3JydXB0X2Fl cykKLSsJCWtleVswXSsrOwotKwlpZiAoZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfYWVzXzEy OF9lY2IoKSwKLSsJCQkJa2V5LCBOVUxMLAotKwkJCQl0ZXN0c1tuXS5wbGFpbnRleHQsCi0rCQkJ CXRlc3RzW25dLmNpcGhlcnRleHQsCi0rCQkJCTE2KSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCX0K LSsgICAgcmV0ID0gMTsKLSsgICAgZXJyOgotKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZj dHgpOwotKyAgICBpZiAocmV0ID09IDApCi0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZU RVNUX0FFUyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgcmV0dXJuIHJldDsKLSsgICAg fQotKwotKy8qIEFFUy1DQ00gdGVzdCBkYXRhIGZyb20gTklTVCBwdWJsaWMgdGVzdCB2ZWN0b3Jz ICovCi0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX2tleVtdID0gewotKwkweGNl LDB4YjAsMHgwOSwweGFlLDB4YTQsMHg0NSwweDQ0LDB4NTEsMHhmZSwweGFkLDB4ZjAsMHhlNiwK LSsJMHhiMywweDZmLDB4NDUsMHg1NSwweDVkLDB4ZDAsMHg0NywweDIzLDB4YmEsMHhhNCwweDQ4 LDB4ZTgKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV9ub25jZVtdID0gewot KwkweDc2LDB4NDAsMHg0MywweGM0LDB4OTQsMHg2MCwweGI3Ci0rfTsKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBjY21fYWRhdGFbXSA9IHsKLSsJMHg2ZSwweDgwLDB4ZGQsMHg3ZiwweDFi LDB4YWQsMHhmMywweGExLDB4YzksMHhhYiwweDI1LDB4YzcsCi0rCTB4NWYsMHgxMCwweGJkLDB4 ZTcsMHg4YywweDIzLDB4ZmEsMHgwZSwweGI4LDB4ZjksMHhhYSwweGE1LAotKwkweDNhLDB4ZGUs MHhmYiwweGY0LDB4Y2IsMHhmNywweDhmLDB4ZTQKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGNjbV9wdFtdID0gewotKwkweGM4LDB4ZDIsMHg3NSwweGY5LDB4MTksMHhlMSwweDdk LDB4N2YsMHhlNiwweDljLDB4MmEsMHgxZiwKLSsJMHg1OCwweDkzLDB4OWQsMHhmZSwweDRkLDB4 NDAsMHgzNywweDkxLDB4YjUsMHhkZiwweDEzLDB4MTAKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGNjbV9jdFtdID0gewotKwkweDhhLDB4MGYsMHgzZCwweDgyLDB4MjksMHhlNCww eDhlLDB4NzQsMHg4NywweGZkLDB4OTUsMHhhMiwKLSsJMHg4YSwweGQzLDB4OTIsMHhjOCwweDBi LDB4MzYsMHg4MSwweGQ0LDB4ZmIsMHhjNywweGJiLDB4ZmQKLSt9OwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGNjbV90YWdbXSA9IHsKLSsJMHgyZCwweGQ2LDB4ZWYsMHgxYywweDQ1LDB4 ZDQsMHhjYywweGI3LDB4MjMsMHhkYywweDA3LDB4NDQsCi0rCTB4MTQsMHhkYiwweDUwLDB4NmQK LSt9OwotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc19jY20odm9pZCkKLSsJewotKwlpbnQgcmV0 ID0gMDsKLSsJdW5zaWduZWQgY2hhciBvdXRbMTI4XSwgdGFnWzE2XTsKLSsJRVZQX0NJUEhFUl9D VFggY3R4OwotKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwltZW1zZXQob3V0LCAwLCBz aXplb2Yob3V0KSk7Ci0rCWlmICghRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Flc18xOTJf Y2NtKCksTlVMTCwgTlVMTCwgTlVMTCwgMSkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFFVlBfQ0lQ SEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfSVZMRU4sCi0rCQkJCQlzaXplb2Yo Y2NtX25vbmNlKSwgTlVMTCkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFFVlBfQ0lQSEVSX0NUWF9j dHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfVEFHLAotKwkJCQkJc2l6ZW9mKGNjbV90YWcpLCBO VUxMKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIE5VTEws IE5VTEwsIGNjbV9rZXksIGNjbV9ub25jZSwgMSkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKEVWUF9D aXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgc2l6ZW9mKGNjbV9wdCkpICE9IHNpemVvZihjY21fcHQp KQotKwkJZ290byBlcnI7Ci0rCWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIGNjbV9hZGF0YSwg c2l6ZW9mKGNjbV9hZGF0YSkpIDwgMCkKLSsJCWdvdG8gZXJyOwotKwlpZiAoRVZQX0NpcGhlcigm Y3R4LCBvdXQsIGNjbV9wdCwgc2l6ZW9mKGNjbV9wdCkpICE9IHNpemVvZihjY21fY3QpKQotKwkJ Z290byBlcnI7Ci0rCi0rCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9D Q01fR0VUX1RBRywgMTYsIHRhZykpCi0rCQlnb3RvIGVycjsKLSsJaWYgKG1lbWNtcCh0YWcsIGNj bV90YWcsIHNpemVvZihjY21fdGFnKSkKLSsJCXx8IG1lbWNtcChvdXQsIGNjbV9jdCwgc2l6ZW9m KGNjbV9jdCkpKQotKwkJZ290byBlcnI7Ci0rCi0rCW1lbXNldChvdXQsIDAsIHNpemVvZihvdXQp KTsKLSsKLSsJaWYgKCFFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfYWVzXzE5Ml9jY20oKSwg TlVMTCwgTlVMTCwgTlVMTCwgMCkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFFVlBfQ0lQSEVSX0NU WF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfSVZMRU4sCi0rCQkJCQlzaXplb2YoY2NtX25v bmNlKSwgTlVMTCkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZj dHgsIEVWUF9DVFJMX0NDTV9TRVRfVEFHLCAxNiwgdGFnKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAo IUVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIE5VTEwsIE5VTEwsIGNjbV9rZXksIGNjbV9ub25jZSwg MCkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgc2l6 ZW9mKGNjbV9jdCkpICE9IHNpemVvZihjY21fY3QpKQotKwkJZ290byBlcnI7Ci0rCWlmIChFVlBf Q2lwaGVyKCZjdHgsIE5VTEwsIGNjbV9hZGF0YSwgc2l6ZW9mKGNjbV9hZGF0YSkpIDwgMCkKLSsJ CWdvdG8gZXJyOwotKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBvdXQsIGNjbV9jdCwgc2l6ZW9mKGNj bV9jdCkpICE9IHNpemVvZihjY21fcHQpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmIChtZW1jbXAo b3V0LCBjY21fcHQsIHNpemVvZihjY21fcHQpKSkKLSsJCWdvdG8gZXJyOwotKwotKwlyZXQgPSAx OwotKwotKwllcnI6Ci0rCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCi0rCWlmIChy ZXQgPT0gMCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0NDTSxG SVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwllbHNlCi0rCQly ZXR1cm4gcmV0OwotKwotKwl9Ci0rCi0rLyogQUVTLUdDTSB0ZXN0IGRhdGEgZnJvbSBOSVNUIHB1 YmxpYyB0ZXN0IHZlY3RvcnMgKi8KLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21f a2V5W10gPSB7Ci0rCTB4ZWUsMHhiYywweDFmLDB4NTcsMHg0OCwweDdmLDB4NTEsMHg5MiwweDFj LDB4MDQsMHg2NSwweDY2LAotKwkweDVmLDB4OGEsMHhlNiwweGQxLDB4NjUsMHg4YiwweGIyLDB4 NmQsMHhlNiwweGY4LDB4YTAsMHg2OSwKLSsJMHhhMywweDUyLDB4MDIsMHg5MywweGE1LDB4NzIs MHgwNywweDhmCi0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21faXZbXSA9IHsK LSsJMHg5OSwweGFhLDB4M2UsMHg2OCwweGVkLDB4ODEsMHg3MywweGEwLDB4ZWUsMHhkMCwweDY2 LDB4ODQKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9wdFtdID0gewotKwkw eGY1LDB4NmUsMHg4NywweDA1LDB4NWIsMHhjMywweDJkLDB4MGUsMHhlYiwweDMxLDB4YjIsMHhl YSwKLSsJMHhjYywweDJiLDB4ZjIsMHhhNQotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgZ2NtX2FhZFtdID0gewotKwkweDRkLDB4MjMsMHhjMywweGNlLDB4YzMsMHgzNCwweGI0LDB4 OWIsMHhkYiwweDM3LDB4MGMsMHg0MywKLSsJMHg3ZiwweGVjLDB4NzgsMHhkZQotK307Ci0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX2N0W10gPSB7Ci0rCTB4ZjcsMHgyNiwweDQ0LDB4 MTMsMHhhOCwweDRjLDB4MGUsMHg3YywweGQ1LDB4MzYsMHg4NiwweDdlLAotKwkweGI5LDB4ZjIs MHgxNywweDM2Ci0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21fdGFnW10gPSB7 Ci0rCTB4NjcsMHhiYSwweDA1LDB4MTAsMHgyNiwweDJhLDB4ZTQsMHg4NywweGQ3LDB4MzcsMHhl ZSwweDYyLAotKwkweDk4LDB4ZjcsMHg3ZSwweDBjCi0rfTsKLSsKLStpbnQgRklQU19zZWxmdGVz dF9hZXNfZ2NtKHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgb3V0 WzEyOF0sIHRhZ1sxNl07Ci0rCUVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsJRVZQX0NJUEhFUl9DVFhf aW5pdCgmY3R4KTsKLSsJbWVtc2V0KG91dCwgMCwgc2l6ZW9mKG91dCkpOwotKwltZW1zZXQodGFn LCAwLCBzaXplb2YodGFnKSk7Ci0rCWlmICghRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Fl c18yNTZfZ2NtKCksIE5VTEwsIE5VTEwsIE5VTEwsIDEpKQotKwkJZ290byBlcnI7Ci0rCWlmICgh RVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX0lWTEVOLAotKwkJCQkJ c2l6ZW9mKGdjbV9pdiksIE5VTEwpKQotKwkJZ290byBlcnI7Ci0rCWlmICghRVZQX0NpcGhlcklu aXRfZXgoJmN0eCwgTlVMTCwgTlVMTCwgZ2NtX2tleSwgZ2NtX2l2LCAxKSkKLSsJCWdvdG8gZXJy OwotKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBnY21fYWFkLCBzaXplb2YoZ2NtX2FhZCkp IDwgMCkKLSsJCWdvdG8gZXJyOwotKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBvdXQsIGdjbV9wdCwg c2l6ZW9mKGdjbV9wdCkpICE9IHNpemVvZihnY21fY3QpKQotKwkJZ290byBlcnI7Ci0rCWlmIChF VlBfQ2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIDApIDwgMCkKLSsJCWdvdG8gZXJyOwotKwotKwlp ZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX0dFVF9UQUcsIDE2LCB0 YWcpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmIChtZW1jbXAodGFnLCBnY21fdGFnLCAxNikgfHwg bWVtY21wKG91dCwgZ2NtX2N0LCAxNikpCi0rCQlnb3RvIGVycjsKLSsKLSsJbWVtc2V0KG91dCwg MCwgc2l6ZW9mKG91dCkpOwotKwotKwlpZiAoIUVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9h ZXNfMjU2X2djbSgpLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAo IUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwKLSsJCQkJ CXNpemVvZihnY21faXYpLCBOVUxMKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUVWUF9DSVBIRVJf Q1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9UQUcsIDE2LCB0YWcpKQotKwkJZ290byBl cnI7Ci0rCWlmICghRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgTlVMTCwgTlVMTCwgZ2NtX2tleSwg Z2NtX2l2LCAwKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBn Y21fYWFkLCBzaXplb2YoZ2NtX2FhZCkpIDwgMCkKLSsJCWdvdG8gZXJyOwotKwlpZiAoRVZQX0Np cGhlcigmY3R4LCBvdXQsIGdjbV9jdCwgc2l6ZW9mKGdjbV9jdCkpICE9IHNpemVvZihnY21fcHQp KQotKwkJZ290byBlcnI7Ci0rCWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIDApIDwg MCkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAobWVtY21wKG91dCwgZ2NtX3B0LCAxNikpCi0rCQln b3RvIGVycjsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyOgotKwlFVlBfQ0lQSEVSX0NUWF9jbGVh bnVwKCZjdHgpOwotKwotKwlpZiAocmV0ID09IDApCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9G SVBTX1NFTEZURVNUX0FFU19HQ00sRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4g MDsKLSsJCX0KLSsJZWxzZQotKwkJcmV0dXJuIHJldDsKLSsKLSsJfQotKwotKwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIFhUU18xMjhfa2V5W10gPSB7Ci0rCTB4YTEsMHhiOSwweDBjLDB4 YmEsMHgzZiwweDA2LDB4YWMsMHgzNSwweDNiLDB4MmMsMHgzNCwweDM4LAotKwkweDc2LDB4MDgs MHgxNywweDYyLDB4MDksMHgwOSwweDIzLDB4MDIsMHg2ZSwweDkxLDB4NzcsMHgxOCwKLSsJMHgx NSwweGYyLDB4OWQsMHhhYiwweDAxLDB4OTMsMHgyZiwweDJmCi0rfTsKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBYVFNfMTI4X2lbXSA9IHsKLSsJMHg0ZiwweGFlLDB4ZjcsMHgxMSwweDdj LDB4ZGEsMHg1OSwweGM2LDB4NmUsMHg0YiwweDkyLDB4MDEsCi0rCTB4M2UsMHg3NiwweDhhLDB4 ZDUKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18xMjhfcHRbXSA9IHsKLSsJ MHhlYiwweGFiLDB4Y2UsMHg5NSwweGIxLDB4NGQsMHgzYywweDhkLDB4NmYsMHhiMywweDUwLDB4 MzksCi0rCTB4MDcsMHg5MCwweDMxLDB4MWMKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIFhUU18xMjhfY3RbXSA9IHsKLSsJMHg3NywweDhhLDB4ZTgsMHhiNCwweDNjLDB4YjksMHg4 ZCwweDVhLDB4ODIsMHg1MCwweDgxLDB4ZDUsCi0rCTB4YmUsMHg0NywweDFjLDB4NjMKLSt9Owot KwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18yNTZfa2V5W10gPSB7Ci0rCTB4MWUs MHhhNiwweDYxLDB4YzUsMHg4ZCwweDk0LDB4M2EsMHgwZSwweDQ4LDB4MDEsMHhlNCwweDJmLAot KwkweDRiLDB4MDksMHg0NywweDE0LDB4OWUsMHg3ZiwweDlmLDB4OGUsMHgzZSwweDY4LDB4ZDAs MHhjNywKLSsJMHg1MCwweDUyLDB4MTAsMHhiZCwweDMxLDB4MWEsMHgwZSwweDdjLDB4ZDYsMHhl MSwweDNmLDB4ZmQsCi0rCTB4ZjIsMHg0MSwweDhkLDB4OGQsMHgxOSwweDExLDB4YzAsMHgwNCww eGNkLDB4YTUsMHg4ZCwweGEzLAotKwkweGQ2LDB4MTksMHhiNywweGUyLDB4YjksMHgxNCwweDFl LDB4NTgsMHgzMSwweDhlLDB4ZWEsMHgzOSwKLSsJMHgyYywweGY0LDB4MWIsMHgwOAotK307Ci0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzI1Nl9pW10gPSB7Ci0rCTB4YWQsMHhmOCww eGQ5LDB4MjYsMHgyNywweDQ2LDB4NGEsMHhkMiwweGYwLDB4NDIsMHg4ZSwweDg0LAotKwkweGE5 LDB4ZjgsMHg3NSwweDY0Ci0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMjU2 X3B0W10gPSB7Ci0rCTB4MmUsMHhlZCwweGVhLDB4NTIsMHhjZCwweDgyLDB4MTUsMHhlMSwweGFj LDB4YzYsMHg0NywweGU4LAotKwkweDEwLDB4YmIsMHhjMywweDY0LDB4MmUsMHg4NywweDI4LDB4 N2YsMHg4ZCwweDJlLDB4NTcsMHhlMywKLSsJMHg2YywweDBhLDB4MjQsMHhmYiwweGMxLDB4MmEs MHgyMCwweDJlCi0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMjU2X2N0W10g PSB7Ci0rCTB4Y2IsMHhhYSwweGQwLDB4ZTIsMHhmNiwweGNlLDB4YTMsMHhmNSwweDBiLDB4Mzcs MHhmOSwweDM0LAotKwkweGQ0LDB4NmEsMHg5YiwweDEzLDB4MGIsMHg5ZCwweDU0LDB4ZjAsMHg3 ZSwweDM0LDB4ZjMsMHg2YSwKLSsJMHhmNywweDkzLDB4ZTgsMHg2ZiwweDczLDB4YzYsMHhkNyww eGRiCi0rfTsKLSsKLStpbnQgRklQU19zZWxmdGVzdF9hZXNfeHRzKCkKLSsJewotKwlpbnQgcmV0 ID0gMTsKLSsJRVZQX0NJUEhFUl9DVFggY3R4OwotKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgp OwotKwotKwlpZiAoZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfYWVzXzEyOF94dHMoKSwKLSsJ CQkJWFRTXzEyOF9rZXksIFhUU18xMjhfaSwgWFRTXzEyOF9wdCwgWFRTXzEyOF9jdCwKLSsJCQkJ c2l6ZW9mKFhUU18xMjhfcHQpKSA8PSAwKQotKwkJcmV0ID0gMDsKLSsKLSsJaWYgKGZpcHNfY2lw aGVyX3Rlc3QoJmN0eCwgRVZQX2Flc18yNTZfeHRzKCksCi0rCQkJCVhUU18yNTZfa2V5LCBYVFNf MjU2X2ksIFhUU18yNTZfcHQsIFhUU18yNTZfY3QsCi0rCQkJCXNpemVvZihYVFNfMjU2X3B0KSkg PD0gMCkKLSsJCXJldCA9IDA7Ci0rCi0rCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0r CWlmIChyZXQgPT0gMCkKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX1hUUyxG SVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotKyNlbmRpZgot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwcy5jLmZpcHMgb3BlbnNzbC0x LjAuMWovY3J5cHRvL2ZpcHMvZmlwcy5jCi0tLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMv Zmlwcy5jLmZpcHMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTUzMDYzMzMgKzAyMDAKLSsrKyBvcGVu c3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzLmMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTUzMDYz MzMgKzAyMDAKLUBAIC0wLDAgKzEsNDkxIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmln aHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0r ICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVy dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICog ICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0r ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBU b29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAg IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3 aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4K LSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3Qg YmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0 aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRo ZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZv cm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVk Z21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICog RVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAq IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0r Ci0rI2RlZmluZSBfR05VX1NPVVJDRQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRl IDxsaW1pdHMuaD4KLSsjaW5jbHVkZSA8ZGxmY24uaD4KLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsj aW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rCi0rI2lmbmRlZiBQ QVRIX01BWAotKyNkZWZpbmUgUEFUSF9NQVggMTAyNAotKyNlbmRpZgotKwotK3N0YXRpYyBpbnQg Zmlwc19zZWxmdGVzdF9mYWlsID0gMDsKLStzdGF0aWMgaW50IGZpcHNfbW9kZSA9IDA7Ci0rc3Rh dGljIGludCBmaXBzX3N0YXJ0ZWQgPSAwOwotKwotK3N0YXRpYyBpbnQgZmlwc19pc19vd25pbmdf dGhyZWFkKHZvaWQpOwotK3N0YXRpYyBpbnQgZmlwc19zZXRfb3duaW5nX3RocmVhZCh2b2lkKTsK LStzdGF0aWMgaW50IGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCh2b2lkKTsKLSsKLSsjZGVmaW5l IGZpcHNfd19sb2NrKCkJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBTKQotKyNkZWZpbmUg Zmlwc193X3VubG9jaygpCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19GSVBTKQotKyNkZWZp bmUgZmlwc19yX2xvY2soKQlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX0ZJUFMpCi0rI2RlZmlu ZSBmaXBzX3JfdW5sb2NrKCkJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMpCi0rCi0r c3RhdGljIHZvaWQgZmlwc19zZXRfbW9kZShpbnQgb25vZmYpCi0rCXsKLSsJaW50IG93bmluZ190 aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKLSsKLSsJaWYgKGZpcHNfc3RhcnRlZCkK LSsJCXsKLSsJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc193X2xvY2soKTsKLSsJCWZpcHNfbW9k ZSA9IG9ub2ZmOwotKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3dfdW5sb2NrKCk7Ci0rCQl9 Ci0rCX0KLSsKLStpbnQgRklQU19tb2R1bGVfbW9kZSh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAw OwotKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOwotKwotKwlp ZiAoZmlwc19zdGFydGVkKQotKwkJewotKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfbG9j aygpOwotKwkJcmV0ID0gZmlwc19tb2RlOwotKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3Jf dW5sb2NrKCk7Ci0rCQl9Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStpbnQgRklQU19zZWxmdGVz dF9mYWlsZWQodm9pZCkKLSsgICAgewotKyAgICBpbnQgcmV0ID0gMDsKLSsgICAgaWYgKGZpcHNf c3RhcnRlZCkKLSsJewotKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVh ZCgpOwotKwotKwlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl9sb2NrKCk7Ci0rCXJldCA9IGZp cHNfc2VsZnRlc3RfZmFpbDsKLSsJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfdW5sb2NrKCk7 Ci0rCX0KLSsgICAgcmV0dXJuIHJldDsKLSsgICAgfQotKwotKy8qIFNlbGZ0ZXN0IGZhaWx1cmUg ZmF0YWwgZXhpdCByb3V0aW5lLiBUaGlzIHdpbGwgYmUgY2FsbGVkCi0rICogZHVyaW5nICphbnkq IGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uLiBJdCBoYXMgdGhlIG1pbmltdW0KLSsgKiBvdmVyaGVh ZCBwb3NzaWJsZSB0byBhdm9pZCB0b28gYmlnIGEgcGVyZm9ybWFuY2UgaGl0LgotKyAqLwotKwot K3ZvaWQgRklQU19zZWxmdGVzdF9jaGVjayh2b2lkKQotKyAgICB7Ci0rICAgIGlmIChmaXBzX3Nl bGZ0ZXN0X2ZhaWwpCi0rCXsKLSsJT3BlblNTTERpZShfX0ZJTEVfXyxfX0xJTkVfXywgIkZBVEFM IEZJUFMgU0VMRlRFU1QgRkFJTFVSRSIpOwotKwl9Ci0rICAgIH0KLSsKLSt2b2lkIGZpcHNfc2V0 X3NlbGZ0ZXN0X2ZhaWwodm9pZCkKLSsgICAgewotKyAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAx OwotKyAgICB9Ci0rCi0rLyogd2UgaW1wbGVtZW50IHdoYXQgbGliZmlwc2NoZWNrIGRvZXMgb3Vy c2VsdmVzICovCi0rCi0rc3RhdGljIGludAotK2dldF9saWJyYXJ5X3BhdGgoY29uc3QgY2hhciAq bGlibmFtZSwgY29uc3QgY2hhciAqc3ltYm9sbmFtZSwgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhs ZW4pCi0rewotKwlEbF9pbmZvIGluZm87Ci0rCXZvaWQgKmRsLCAqc3ltOwotKwlpbnQgcnYgPSAt MTsKLSsKLSsgICAgICAgIGRsID0gZGxvcGVuKGxpYm5hbWUsIFJUTERfTEFaWSk7Ci0rICAgICAg ICBpZiAoZGwgPT0gTlVMTCkgewotKwkgICAgICAgIHJldHVybiAtMTsKLSsgICAgICAgIH0gICAg ICAgCi0rCi0rCXN5bSA9IGRsc3ltKGRsLCBzeW1ib2xuYW1lKTsKLSsKLSsJaWYgKHN5bSAhPSBO VUxMICYmIGRsYWRkcihzeW0sICZpbmZvKSkgewotKwkJc3RybmNweShwYXRoLCBpbmZvLmRsaV9m bmFtZSwgcGF0aGxlbi0xKTsKLSsJCXBhdGhbcGF0aGxlbi0xXSA9ICdcMCc7Ci0rCQlydiA9IDA7 Ci0rCX0KLSsKLSsJZGxjbG9zZShkbCk7CQotKwkKLSsJcmV0dXJuIHJ2OwotK30KLSsKLStzdGF0 aWMgY29uc3QgY2hhciBjb252W10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7Ci0rCi0rc3RhdGljIGNo YXIgKgotK2JpbjJoZXgodm9pZCAqYnVmLCBzaXplX3QgbGVuKQotK3sKLSsJY2hhciAqaGV4LCAq cDsKLSsJdW5zaWduZWQgY2hhciAqc3JjID0gYnVmOwotKwkKLSsJaGV4ID0gbWFsbG9jKGxlbiAq IDIgKyAxKTsKLSsJaWYgKGhleCA9PSBOVUxMKQotKwkJcmV0dXJuIE5VTEw7Ci0rCi0rCXAgPSBo ZXg7Ci0rCi0rCXdoaWxlIChsZW4gPiAwKSB7Ci0rCQl1bnNpZ25lZCBjOwotKwotKwkJYyA9ICpz cmM7Ci0rCQlzcmMrKzsKLSsKLSsJCSpwID0gY29udltjID4+IDRdOwotKwkJKytwOwotKwkJKnAg PSBjb252W2MgJiAweDBmXTsKLSsJCSsrcDsKLSsJCS0tbGVuOwotKwl9Ci0rCSpwID0gJ1wwJzsK LSsJcmV0dXJuIGhleDsKLSt9Ci0rCi0rI2RlZmluZSBITUFDX1BSRUZJWCAiLiIgCi0rI2RlZmlu ZSBITUFDX1NVRkZJWCAiLmhtYWMiIAotKyNkZWZpbmUgUkVBRF9CVUZGRVJfTEVOR1RIIDE2Mzg0 Ci0rCi0rc3RhdGljIGNoYXIgKgotK21ha2VfaG1hY19wYXRoKGNvbnN0IGNoYXIgKm9yaWdwYXRo KQotK3sKLSsJY2hhciAqcGF0aCwgKnA7Ci0rCWNvbnN0IGNoYXIgKmZuOwotKwotKwlwYXRoID0g bWFsbG9jKHNpemVvZihITUFDX1BSRUZJWCkgKyBzaXplb2YoSE1BQ19TVUZGSVgpICsgc3RybGVu KG9yaWdwYXRoKSk7Ci0rCWlmKHBhdGggPT0gTlVMTCkgewotKwkJcmV0dXJuIE5VTEw7Ci0rCX0K LSsKLSsJZm4gPSBzdHJyY2hyKG9yaWdwYXRoLCAnLycpOwotKwlpZiAoZm4gPT0gTlVMTCkgewot KwkJZm4gPSBvcmlncGF0aDsKLSsJfSBlbHNlIHsKLSsJCSsrZm47Ci0rCX0KLSsKLSsJc3RybmNw eShwYXRoLCBvcmlncGF0aCwgZm4tb3JpZ3BhdGgpOwotKwlwID0gcGF0aCArIChmbiAtIG9yaWdw YXRoKTsKLSsJcCA9IHN0cGNweShwLCBITUFDX1BSRUZJWCk7Ci0rCXAgPSBzdHBjcHkocCwgZm4p OwotKwlwID0gc3RwY3B5KHAsIEhNQUNfU1VGRklYKTsKLSsKLSsJcmV0dXJuIHBhdGg7Ci0rfQot KwotK3N0YXRpYyBjb25zdCBjaGFyIGhtYWNrZXlbXSA9ICJvcmJvRGVKSVRJVGVqc2lycEFET05p dmlycFVrdmFyUCI7Ci0rCi0rc3RhdGljIGludAotK2NvbXB1dGVfZmlsZV9obWFjKGNvbnN0IGNo YXIgKnBhdGgsIHZvaWQgKipidWYsIHNpemVfdCAqaG1hY2xlbikKLSt7Ci0rCUZJTEUgKmYgPSBO VUxMOwotKwlpbnQgcnYgPSAtMTsKLSsJdW5zaWduZWQgY2hhciByYnVmW1JFQURfQlVGRkVSX0xF TkdUSF07Ci0rCXNpemVfdCBsZW47Ci0rCXVuc2lnbmVkIGludCBobGVuOwotKwlITUFDX0NUWCBj OwotKwotKwlITUFDX0NUWF9pbml0KCZjKTsKLSsKLSsJZiA9IGZvcGVuKHBhdGgsICJyIik7Ci0r Ci0rCWlmIChmID09IE5VTEwpIHsKLSsJCWdvdG8gZW5kOwotKwl9Ci0rCi0rCUhNQUNfSW5pdCgm YywgaG1hY2tleSwgc2l6ZW9mKGhtYWNrZXkpLTEsIEVWUF9zaGEyNTYoKSk7Ci0rCi0rCXdoaWxl ICgobGVuPWZyZWFkKHJidWYsIDEsIHNpemVvZihyYnVmKSwgZikpICE9IDApIHsKLSsJCUhNQUNf VXBkYXRlKCZjLCByYnVmLCBsZW4pOwotKwl9Ci0rCi0rCWxlbiA9IHNpemVvZihyYnVmKTsKLSsJ LyogcmV1c2UgcmJ1ZiBmb3IgaG1hYyAqLwotKwlITUFDX0ZpbmFsKCZjLCByYnVmLCAmaGxlbik7 Ci0rCi0rCSpidWYgPSBtYWxsb2MoaGxlbik7Ci0rCWlmICgqYnVmID09IE5VTEwpIHsKLSsJCWdv dG8gZW5kOwotKwl9Ci0rCi0rCSpobWFjbGVuID0gaGxlbjsKLSsKLSsJbWVtY3B5KCpidWYsIHJi dWYsIGhsZW4pOwotKwotKwlydiA9IDA7Ci0rZW5kOgotKwlITUFDX0NUWF9jbGVhbnVwKCZjKTsK LSsKLSsJaWYgKGYpCi0rCQlmY2xvc2UoZik7Ci0rCi0rCXJldHVybiBydjsKLSt9Ci0rCi0rc3Rh dGljIGludAotK0ZJUFNDSEVDS192ZXJpZnkoY29uc3QgY2hhciAqbGlibmFtZSwgY29uc3QgY2hh ciAqc3ltYm9sbmFtZSkKLSt7Ci0rCWNoYXIgcGF0aFtQQVRIX01BWCsxXTsKLSsJaW50IHJ2Owot KwlGSUxFICpoZjsKLSsJY2hhciAqaG1hY3BhdGgsICpwOwotKwljaGFyICpobWFjID0gTlVMTDsK LSsJc2l6ZV90IG47Ci0rCQotKwlydiA9IGdldF9saWJyYXJ5X3BhdGgobGlibmFtZSwgc3ltYm9s bmFtZSwgcGF0aCwgc2l6ZW9mKHBhdGgpKTsKLSsKLSsJaWYgKHJ2IDwgMCkKLSsJCXJldHVybiAw OwotKwotKwlobWFjcGF0aCA9IG1ha2VfaG1hY19wYXRoKHBhdGgpOwotKwlpZiAoaG1hY3BhdGgg PT0gTlVMTCkKLSsJCXJldHVybiAwOwotKwotKwloZiA9IGZvcGVuKGhtYWNwYXRoLCAiciIpOwot KwlpZiAoaGYgPT0gTlVMTCkgewotKwkJZnJlZShobWFjcGF0aCk7Ci0rCQlyZXR1cm4gMDsKLSsJ fQotKwotKwlpZiAoZ2V0bGluZSgmaG1hYywgJm4sIGhmKSA+IDApIHsKLSsJCXZvaWQgKmJ1ZjsK LSsJCXNpemVfdCBobWFjbGVuOwotKwkJY2hhciAqaGV4OwotKwotKwkJaWYgKChwPXN0cmNociho bWFjLCAnXG4nKSkgIT0gTlVMTCkKLSsJCQkqcCA9ICdcMCc7Ci0rCi0rCQlpZiAoY29tcHV0ZV9m aWxlX2htYWMocGF0aCwgJmJ1ZiwgJmhtYWNsZW4pIDwgMCkgewotKwkJCXJ2ID0gLTQ7Ci0rCQkJ Z290byBlbmQ7Ci0rCQl9Ci0rCi0rCQlpZiAoKGhleD1iaW4yaGV4KGJ1ZiwgaG1hY2xlbikpID09 IE5VTEwpIHsKLSsJCQlmcmVlKGJ1Zik7Ci0rCQkJcnYgPSAtNTsKLSsJCQlnb3RvIGVuZDsKLSsJ CX0KLSsKLSsJCWlmIChzdHJjbXAoaGV4LCBobWFjKSAhPSAwKSB7Ci0rCQkJcnYgPSAtMTsKLSsJ CX0KLSsJCWZyZWUoYnVmKTsKLSsJCWZyZWUoaGV4KTsKLSsJfSBlbHNlIHsKLSsJCXJ2ID0gLTE7 Ci0rCX0KLSsKLStlbmQ6Ci0rCWZyZWUoaG1hYyk7Ci0rCWZyZWUoaG1hY3BhdGgpOwotKwlmY2xv c2UoaGYpOwotKwotKwlpZiAocnYgPCAwKQotKwkJcmV0dXJuIDA7Ci0rCi0rCS8qIGNoZWNrIHN1 Y2Nlc3NmdWwgKi8KLSsJcmV0dXJuIDE7CQotK30KLSsKLStpbnQgRklQU19tb2R1bGVfbW9kZV9z ZXQoaW50IG9ub2ZmLCBjb25zdCBjaGFyICphdXRoKQotKyAgICB7Ci0rICAgIGludCByZXQgPSAw OwotKwotKyAgICBmaXBzX3dfbG9jaygpOwotKyAgICBmaXBzX3N0YXJ0ZWQgPSAxOwotKyAgICBm aXBzX3NldF9vd25pbmdfdGhyZWFkKCk7Ci0rCi0rICAgIGlmKG9ub2ZmKQotKwl7Ci0rCi0rCWZp cHNfc2VsZnRlc3RfZmFpbCA9IDA7Ci0rCi0rCS8qIERvbid0IGdvIGludG8gRklQUyBtb2RlIHR3 aWNlLCBqdXN0IHNvIHdlIGNhbiBkbyBhdXRvbWFnaWMKLSsJICAgc2VlZGluZyAqLwotKwlpZihG SVBTX21vZHVsZV9tb2RlKCkpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX01P RFVMRV9NT0RFX1NFVCxGSVBTX1JfRklQU19NT0RFX0FMUkVBRFlfU0VUKTsKLSsJICAgIGZpcHNf c2VsZnRlc3RfZmFpbCA9IDE7Ci0rCSAgICByZXQgPSAwOwotKwkgICAgZ290byBlbmQ7Ci0rCSAg ICB9Ci0rCi0rI2lmZGVmIE9QRU5TU0xfSUEzMl9TU0UyCi0rCXsKLSsJZXh0ZXJuIHVuc2lnbmVk IGludCBPUEVOU1NMX2lhMzJjYXBfUFsyXTsKLSsJaWYgKChPUEVOU1NMX2lhMzJjYXBfUFswXSAm ICgxPDwyNXwxPDwyNikpICE9ICgxPDwyNXwxPDwyNikpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJy KEZJUFNfRl9GSVBTX01PRFVMRV9NT0RFX1NFVCxGSVBTX1JfVU5TVVBQT1JURURfUExBVEZPUk0p OwotKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKLSsJICAgIHJldCA9IDA7Ci0rCSAgICBn b3RvIGVuZDsKLSsJICAgIH0KLSsJT1BFTlNTTF9pYTMyY2FwX1BbMF0gfD0gKDE8PDI4KTsJLyog c2V0ICJzaGFyZWQgY2FjaGUiCSovCi0rCU9QRU5TU0xfaWEzMmNhcF9QWzFdICY9IH4oMTw8KDYw LTMyKSk7CS8qIGNsZWFyIEFWWAkJKi8KLSsJfQotKyNlbmRpZgotKwotKwlpZighRklQU0NIRUNL X3ZlcmlmeSgibGliY3J5cHRvLnNvLiIgU0hMSUJfVkVSU0lPTl9OVU1CRVIsIkZJUFNfbW9kZV9z ZXQiKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VU LEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSCk7Ci0rCSAgICBmaXBzX3NlbGZ0ZXN0 X2ZhaWwgPSAxOwotKwkgICAgcmV0ID0gMDsKLSsJICAgIGdvdG8gZW5kOwotKwkgICAgfQotKwot KwlpZighRklQU0NIRUNLX3ZlcmlmeSgibGlic3NsLnNvLiIgU0hMSUJfVkVSU0lPTl9OVU1CRVIs IlNTTF9DVFhfbmV3IikpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX01PRFVM RV9NT0RFX1NFVCxGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0gpOwotKwkgICAgZmlw c19zZWxmdGVzdF9mYWlsID0gMTsKLSsJICAgIHJldCA9IDA7Ci0rCSAgICBnb3RvIGVuZDsKLSsJ ICAgIH0KLSsKLSsJaWYoRklQU19zZWxmdGVzdCgpKQotKwkgICAgZmlwc19zZXRfbW9kZShvbm9m Zik7Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rCSAg ICByZXQgPSAwOwotKwkgICAgZ290byBlbmQ7Ci0rCSAgICB9Ci0rCXJldCA9IDE7Ci0rCWdvdG8g ZW5kOwotKwl9Ci0rICAgIGZpcHNfc2V0X21vZGUoMCk7Ci0rICAgIGZpcHNfc2VsZnRlc3RfZmFp bCA9IDA7Ci0rICAgIHJldCA9IDE7Ci0rZW5kOgotKyAgICBmaXBzX2NsZWFyX293bmluZ190aHJl YWQoKTsKLSsgICAgZmlwc193X3VubG9jaygpOwotKyAgICByZXR1cm4gcmV0OwotKyAgICB9Ci0r Ci0rc3RhdGljIENSWVBUT19USFJFQURJRCBmaXBzX3RocmVhZDsKLStzdGF0aWMgaW50IGZpcHNf dGhyZWFkX3NldCA9IDA7Ci0rCi0rc3RhdGljIGludCBmaXBzX2lzX293bmluZ190aHJlYWQodm9p ZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsKLSsJaWYgKGZpcHNfc3RhcnRlZCkKLSsJCXsKLSsJ CUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOwotKwkJaWYgKGZpcHNfdGhyZWFkX3Nl dCkKLSsJCQl7Ci0rCQkJQ1JZUFRPX1RIUkVBRElEIGN1cjsKLSsJCQlDUllQVE9fVEhSRUFESURf Y3VycmVudCgmY3VyKTsKLSsJCQlpZiAoIUNSWVBUT19USFJFQURJRF9jbXAoJmN1ciwgJmZpcHNf dGhyZWFkKSkKLSsJCQkJcmV0ID0gMTsKLSsJCQl9Ci0rCQlDUllQVE9fcl91bmxvY2soQ1JZUFRP X0xPQ0tfRklQUzIpOwotKwkJfQotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0raW50IGZpcHNfc2V0 X293bmluZ190aHJlYWQodm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsKLSsJaWYgKGZpcHNf c3RhcnRlZCkKLSsJCXsKLSsJCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOwotKwkJ aWYgKCFmaXBzX3RocmVhZF9zZXQpCi0rCQkJewotKwkJCUNSWVBUT19USFJFQURJRF9jdXJyZW50 KCZmaXBzX3RocmVhZCk7Ci0rCQkJcmV0ID0gMTsKLSsJCQlmaXBzX3RocmVhZF9zZXQgPSAxOwot KwkJCX0KLSsJCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rCQl9Ci0rCXJl dHVybiByZXQ7Ci0rCX0KLSsKLStpbnQgZmlwc19jbGVhcl9vd25pbmdfdGhyZWFkKHZvaWQpCi0r CXsKLSsJaW50IHJldCA9IDA7Ci0rCi0rCWlmIChmaXBzX3N0YXJ0ZWQpCi0rCQl7Ci0rCQlDUllQ VE9fd19sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCWlmIChmaXBzX3RocmVhZF9zZXQpCi0r CQkJewotKwkJCUNSWVBUT19USFJFQURJRCBjdXI7Ci0rCQkJQ1JZUFRPX1RIUkVBRElEX2N1cnJl bnQoJmN1cik7Ci0rCQkJaWYgKCFDUllQVE9fVEhSRUFESURfY21wKCZjdXIsICZmaXBzX3RocmVh ZCkpCi0rCQkJCWZpcHNfdGhyZWFkX3NldCA9IDA7Ci0rCQkJfQotKwkJQ1JZUFRPX3dfdW5sb2Nr KENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCX0KLSsJcmV0dXJuIHJldDsKLSsJfQotKwotKwotKyNp ZiAwCi0rLyogVGhlIHB1cnBvc2Ugb2YgdGhpcyBpcyB0byBlbnN1cmUgdGhlIGVycm9yIGNvZGUg ZXhpc3RzIGFuZCB0aGUgZnVuY3Rpb24KLSsgKiBuYW1lIGlzIHRvIGtlZXAgdGhlIGVycm9yIGNo ZWNraW5nIHNjcmlwdCBxdWlldAotKyAqLwotK3ZvaWQgaGFzaF9maW5hbCh2b2lkKQotKwl7Ci0r CUZJUFNlcnIoRklQU19GX0hBU0hfRklOQUwsRklQU19SX05PTl9GSVBTX01FVEhPRCk7Ci0rCX0K LSsjZW5kaWYKLSsKLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9m aXBzL2ZpcHNfY21hY19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMv Zmlwc19jbWFjX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBz X2NtYWNfc2VsZnRlc3QuYy5maXBzCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDk2MzA2MzU2ICswMjAw Ci0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19jbWFjX3NlbGZ0ZXN0LmMJMjAx NC0xMC0xNiAxMzoxOTozNS4wOTYzMDYzNTYgKzAyMDAKLUBAIC0wLDAgKzEsMTYxIEBACi0rLyog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4g IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK LSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9u LgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1 cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xs b3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAq IDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVz dCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJt aXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9w ZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBt YXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4K LSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBS ZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9s bG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgot KyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNU IGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBV UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9K RUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBD QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV Q0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9jbWFjLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSt0eXBlZGVmIHN0cnVjdCB7Ci0rCWludCBuaWQ7Ci0rCWNvbnN0IHVuc2lnbmVk IGNoYXIga2V5W0VWUF9NQVhfS0VZX0xFTkdUSF07IHNpemVfdCBrZXlzaXplOwotKwljb25zdCB1 bnNpZ25lZCBjaGFyIG1zZ1s2NF07IHNpemVfdCBtc2dzaXplOwotKwljb25zdCB1bnNpZ25lZCBj aGFyIG1hY1szMl07IHNpemVfdCBtYWNzaXplOwotK30gQ01BQ19LQVQ7Ci0rCi0rLyogZnJvbSBo dHRwOi8vY3NyYy5uaXN0Lmdvdi9wdWJsaWNhdGlvbnMvbmlzdHB1YnMvODAwLTM4Qi9TUF84MDAt MzhCLnBkZiAqLwotK3N0YXRpYyBjb25zdCBDTUFDX0tBVCB2ZWN0b3JbXSA9IHsKLSsgICAgewlO SURfYWVzXzEyOF9jYmMsCS8qIENvdW50ID0gMzIgZnJvbSBDTUFDR2VuQUVTMTI4LnR4dCAqLwot Kwl7IDB4NzcsMHhhNywweDdmLDB4YWYsIDB4MjksMHgwYywweDFmLDB4YTMsCi0rCSAgMHgwYyww eDY4LDB4M2QsMHhmMSwgMHg2YiwweGE3LDB4YTcsMHg3YiwgfSwgMTI4LAotKwl7IDB4MDIsMHgw NiwweDgzLDB4ZTEsIDB4ZjAsMHgzOSwweDJmLDB4NGMsCi0rCSAgMHhhYywweDU0LDB4MzEsMHg4 YiwgMHg2MCwweDI5LDB4MjUsMHg5ZSwKLSsJICAweDljLDB4NTUsMHgzZCwweGJjLCAweDRiLDB4 NmEsMHhkOSwweDk4LAotKwkgIDB4ZTYsMHg0ZCwweDU4LDB4ZTQsIDB4ZTcsMHhkYywweDJlLDB4 MTMsIH0sIDI1NiwKLSsJeyAweGZiLDB4ZmUsMHhhNCwweDFiLCB9LCAzMgotKyAgICB9LAotKyAg ICB7CU5JRF9hZXNfMTkyX2NiYywJLyogQ291bnQgPSAyMyBmcm9tIENNQUNHZW5BRVMxOTIudHh0 ICovCi0rCXsgMHg3YiwweDMyLDB4MzksMHgxMywgMHg2OSwweGFhLDB4NGMsMHhhOSwKLSsJICAw eDc1LDB4NTgsMHgwOSwweDViLCAweGUzLDB4YzMsMHhlYywweDg2LAotKwkgIDB4MmIsMHhkMCww eDU3LDB4Y2UsIDB4ZjEsMHhlMywweDJkLDB4NjIsIH0sIDE5MiwKLSsJeyAweDAgfSwgMCwKLSsJ eyAweGU0LDB4ZDksMHgzNCwweDBiLCAweDAzLDB4ZTYsMHg3ZCwweGVmLAotKwkgIDB4ZDQsMHg5 NiwweDljLDB4YzEsIDB4ZWQsMHgzNywweDM1LDB4ZTYsIH0sIDEyOCwKLSsgICAgfSwKLSsgICAg ewlOSURfYWVzXzI1Nl9jYmMsCS8qIENvdW50ID0gMzMgZnJvbSBDTUFDR2VuQUVTMjU2LnR4dCAq LwotKwl7IDB4MGIsMHgxMiwweDJhLDB4YzgsIDB4ZjMsMHg0ZSwweGQxLDB4ZmUsCi0rCSAgMHgw OCwweDJhLDB4MzYsMHgyNSwgMHhkMSwweDU3LDB4NTYsMHgxNCwKLSsJICAweDU0LDB4MTYsMHg3 YSwweGMxLCAweDQ1LDB4YTEsMHgwYiwweGJmLAotKwkgIDB4NzcsMHhjNiwweGE3LDB4MDUsIDB4 OTYsMHhkNSwweDc0LDB4ZjEsIH0sIDI1NiwKLSsJeyAweDQ5LDB4OGIsMHg1MywweGZkLCAweGVj LDB4ODcsMHhlZCwweGNiLAotKwkgIDB4ZjAsMHg3MCwweDk3LDB4ZGMsIDB4Y2QsMHhlOSwweDNh LDB4MDgsCi0rCSAgMHg0YiwweGFkLDB4NzUsMHgwMSwgMHhhMiwweDI0LDB4ZTMsMHg4OCwKLSsJ ICAweGRmLDB4MzQsMHg5YywweGUxLCAweDg5LDB4NTksMHhmZSwweDg0LAotKwkgIDB4ODUsMHhm OCwweGFkLDB4MTUsIDB4MzcsMHhmMCwweGQ4LDB4OTYsCi0rCSAgMHhlYSwweDczLDB4YmUsMHhk YywgMHg3MiwweDE0LDB4NzEsMHgzZiwgfSwgMzg0LAotKwl7IDB4ZjYsMHgyYywweDQ2LDB4MzIs IDB4OWIsIH0sIDQwLAotKyAgICB9LAotKyAgICB7CU5JRF9kZXNfZWRlM19jYmMsCS8qIENvdW50 ID0gNDEgZnJvbSBDTUFDR2VuVERFUzMucmVxICovCi0rCXsgMHg4OSwweGJjLDB4ZDksMHg1Miwg MHhhOCwweGM4LDB4YWIsMHgzNywKLSsJICAweDFhLDB4ZjQsMHg4YSwweGM3LCAweGQwLDB4NzAs MHg4NSwweGQ1LAotKwkgIDB4ZWYsMHhmNywweDAyLDB4ZTYsIDB4ZDYsMHgyYywweGRjLDB4MjMs IH0sIDE5MiwKLSsJeyAweGZhLDB4NjIsMHgwYywweDFiLCAweGJlLDB4OTcsMHgzMSwweDllLAot KwkgIDB4OWEsMHgwYywweGYwLDB4NDksIDB4MjEsMHgyMSwweGY3LDB4YTIsCi0rCSAgMHgwZSww eGIwLDB4OGEsMHg2YSwgMHg3MCwweDlkLDB4Y2IsMHhkMCwKLSsJICAweDBhLDB4YWYsMHgzOCww eGU0LCAweGY5LDB4OWUsMHg3NSwweDRlLCB9LCAyNTYsCi0rCXsgMHg4ZiwweDQ5LDB4YTEsMHhi NywgMHhkNiwweGFhLDB4MjIsMHg1OCwgfSwgNjQsCi0rICAgIH0sCi0rfTsKLSsKLStpbnQgRklQ U19zZWxmdGVzdF9jbWFjKCkKLSsJewotKwlzaXplX3Qgbiwgb3V0bGVuOwotKwl1bnNpZ25lZCBj aGFyICAgIG91dFszMl07Ci0rCWNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlcjsKLSsJQ01BQ19DVFgg KmN0eCA9IENNQUNfQ1RYX25ldygpOwotKwljb25zdCBDTUFDX0tBVCAqdDsKLSsJaW50IHJ2ID0g MTsKLSsKLSsJZm9yKG49MCx0PXZlY3RvcjsgbjxzaXplb2YodmVjdG9yKS9zaXplb2YodmVjdG9y WzBdKTsgbisrLHQrKykKLSsJCXsKLSsJCWNpcGhlciA9IEZJUFNfZ2V0X2NpcGhlcmJ5bmlkKHQt Pm5pZCk7Ci0rCQlpZiAoIWNpcGhlcikKLSsJCQl7Ci0rCQkJcnYgPSAtMTsKLSsJCQlnb3RvIGVy cjsKLSsJCQl9Ci0rCQlpZiAoIUNNQUNfSW5pdChjdHgsIHQtPmtleSwgdC0+a2V5c2l6ZS84LCBj aXBoZXIsIDApKQotKwkJCXsKLSsJCQlydiA9IC0xOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsJ CWlmICghQ01BQ19VcGRhdGUoY3R4LCB0LT5tc2csIHQtPm1zZ3NpemUvOCkpCi0rCQkJewotKwkJ CXJ2ID0gLTE7Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwkJCQotKwkJaWYgKCFDTUFDX0ZpbmFs KGN0eCwgb3V0LCAmb3V0bGVuKSkKLSsJCQl7Ci0rCQkJcnYgPSAtMTsKLSsJCQlnb3RvIGVycjsK LSsJCQl9Ci0rCQlDTUFDX0NUWF9jbGVhbnVwKGN0eCk7Ci0rCi0rCQlpZihvdXRsZW4gPCB0LT5t YWNzaXplLzggfHwgbWVtY21wKG91dCx0LT5tYWMsdC0+bWFjc2l6ZS84KSkKLSsJCQl7Ci0rCQkg ICAgCXJ2ID0gMDsKLSsJCSAgICAJfQotKwkJfQotKwotKwllcnI6Ci0rCUNNQUNfQ1RYX2ZyZWUo Y3R4KTsKLSsKLSsJaWYgKHJ2ID09IC0xKQotKwkJewotKwkJcnYgPSAwOwotKwkJfQotKwlpZiAo IXJ2KQotKwkJICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9DTUFDLEZJUFNfUl9TRUxG VEVTVF9GQUlMRUQpOwotKwotKwlyZXR1cm4gcnY7Ci0rCX0KLSsjZW5kaWYKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAu MWovY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYy5maXBzCTIwMTQtMTAtMTYgMTM6MTk6 MzUuMDk2MzA2MzU2ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19k ZXNfc2VsZnRlc3QuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5NjMwNjM1NiArMDIwMAotQEAgLTAs MCArMSwxNDcgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUg 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 UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3Ry aW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwot KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSsKLStzdGF0aWMgY29uc3Qgc3RydWN0Ci0rICAgIHsKLSsgICAgY29uc3QgdW5z aWduZWQgY2hhciBrZXlbMTZdOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4 XTsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOwotKyAgICB9IHRlc3Rz MltdPQotKwl7Ci0rCXsKLSsJeyAweDdjLDB4NGYsMHg2ZSwweGY3LDB4YTIsMHgwNCwweDE2LDB4 ZWMsCi0rCSAgMHgwYiwweDZiLDB4N2MsMHg5ZSwweDVlLDB4MTksMHhhNywweGM0IH0sCi0rCXsg MHgwNiwweGE3LDB4ZDgsMHg3OSwweGFhLDB4Y2UsMHg2OSwweGVmIH0sCi0rCXsgMHg0YywweDEx LDB4MTcsMHg1NSwweGJmLDB4YzQsMHg0ZSwweGZkIH0KLSsJfSwKLSsJewotKwl7IDB4NWQsMHg5 ZSwweDAxLDB4ZDMsMHgyNSwweGM3LDB4M2UsMHgzNCwKLSsJICAweDAxLDB4MTYsMHg3YywweDg1 LDB4MjMsMHhkZiwweGUwLDB4NjggfSwKLSsJeyAweDljLDB4NTAsMHgwOSwweDBmLDB4NWUsMHg3 ZCwweDY5LDB4N2UgfSwKLSsJeyAweGQyLDB4MGIsMHgxOCwweGRmLDB4ZDksMHgwZCwweDllLDB4 ZmYgfSwKLSsJfQotKwl9OwotKwotK3N0YXRpYyBjb25zdCBzdHJ1Y3QKLSsgICAgewotKyAgICBj b25zdCB1bnNpZ25lZCBjaGFyIGtleVsyNF07Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGxh aW50ZXh0WzhdOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbOF07Ci0rICAg IH0gdGVzdHMzW109Ci0rCXsKLSsJewotKwl7IDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwKLSsJICAweEZFLDB4REMsMHhCQSwweDk4LDB4NzYsMHg1NCwweDMyLDB4MTAs Ci0rCSAgMHgxMiwweDM0LDB4NTYsMHg3OCwweDlhLDB4YmMsMHhkZSwweGYwIH0sCi0rCXsgMHg4 ZiwweDhmLDB4YmYsMHg5YiwweDVkLDB4NDgsMHhiNCwweDFjIH0sCi0rCXsgMHg1OSwweDhjLDB4 ZTUsMHhkMywweDZjLDB4YTIsMHhlYSwweDFiIH0sCi0rCX0sCi0rCXsKLSsJeyAweERDLDB4QkEs MHg5OCwweDc2LDB4NTQsMHgzMiwweDEwLDB4RkUsCi0rCSAgMHgwMSwweDIzLDB4NDUsMHg2Nyww eDg5LDB4QUIsMHhDRCwweEVGLAotKwkgIDB4RUQsMHgzOSwweEQ5LDB4NTAsMHhGQSwweDc0LDB4 QkMsMHhDNCB9LAotKwl7IDB4MDEsMHgyMywweDQ1LDB4NjcsMHg4OSwweEFCLDB4Q0QsMHhFRiB9 LAotKwl7IDB4MTEsMHgyNSwweGIwLDB4MzUsMHhiZSwweGEwLDB4ODIsMHg4NiB9LAotKwl9LAot Kwl9OwotKwotKwotK3N0YXRpYyBpbnQgY29ycnVwdF9kZXM7Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1 cHRfZGVzKCkKLSsgICAgewotKyAgICBjb3JydXB0X2RlcyA9IDE7Ci0rICAgIH0KLSsKLStpbnQg RklQU19zZWxmdGVzdF9kZXMoKQotKyAgICB7Ci0rICAgIGludCBuLCByZXQgPSAwOwotKyAgICBF VlBfQ0lQSEVSX0NUWCBjdHg7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rICAg IC8qIEVuY3J5cHQvZGVjcnlwdCB3aXRoIDIta2V5IDNERVMgYW5kIGNvbXBhcmUgdG8ga25vd24g YW5zd2VycyAqLwotKyAgICBmb3Iobj0wIDsgbiA8IDIgOyArK24pCi0rCXsKLSsJdW5zaWduZWQg Y2hhciBwbGFpbnRleHRbOF07Ci0rCi0rCW1lbWNweShwbGFpbnRleHQsIHRlc3RzMltuXS5wbGFp bnRleHQsIHNpemVvZihwbGFpbnRleHQpKTsKLSsJaWYgKGNvcnJ1cHRfZGVzKQotKwkJcGxhaW50 ZXh0WzBdKys7Ci0rCWlmICghZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfZGVzX2VkZV9lY2Io KSwKLSsJCQkJdGVzdHMyW25dLmtleSwgTlVMTCwKLSsJCQkJcGxhaW50ZXh0LCB0ZXN0czJbbl0u Y2lwaGVydGV4dCwgOCkpCi0rCQlnb3RvIGVycjsKLSsJfQotKwotKyAgICAvKiBFbmNyeXB0L2Rl Y3J5cHQgd2l0aCAzREVTIGFuZCBjb21wYXJlIHRvIGtub3duIGFuc3dlcnMgKi8KLSsgICAgZm9y KG49MCA7IG4gPCAyIDsgKytuKQotKwl7Ci0rCWlmICghZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBF VlBfZGVzX2VkZTNfZWNiKCksCi0rCQkJCXRlc3RzM1tuXS5rZXksIE5VTEwsCi0rCQkJCXRlc3Rz M1tuXS5wbGFpbnRleHQsIHRlc3RzM1tuXS5jaXBoZXJ0ZXh0LCA4KSkKLSsJCWdvdG8gZXJyOwot Kwl9Ci0rICAgIHJldCA9IDE7Ci0rICAgIGVycjoKLSsgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51 cCgmY3R4KTsKLSsgICAgaWYgKHJldCA9PSAwKQotKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19T RUxGVEVTVF9ERVMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCi0rICAgIHJldHVybiByZXQ7 Ci0rICAgIH0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2Zp cHNfZHJiZ19jdHIuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19j dHIuYwotLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19jdHIuYy5maXBz CTIwMTQtMTAtMTYgMTM6MTk6MzUuMDk2MzA2MzU2ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWov Y3J5cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDk2MzA2MzU2 ICswMjAwCi1AQCAtMCwwICsxLDQzNiBAQAotKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdfY3RyLmMg Ki8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3Jn KSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAqLwotKy8qID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0r ICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJl c2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoK LSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0r ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMu IEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2Yg dGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xl ZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMg Ik9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQg dG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdy aXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNT TC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBt YXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBl YXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lv biBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9m IGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFj a25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFO WQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICog QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3Ry aW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlICJmaXBz X3JhbmRfbGNsLmgiCi0rCi0rc3RhdGljIHZvaWQgaW5jXzEyOChEUkJHX0NUUl9DVFggKmNjdHgp Ci0rCXsKLSsJaW50IGk7Ci0rCXVuc2lnbmVkIGNoYXIgYzsKLSsJdW5zaWduZWQgY2hhciAqcCA9 IGNjdHgtPlYgKyAxNTsKLSsJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCi0rCQl7Ci0rCQljID0g KnA7Ci0rCQljKys7Ci0rCQkqcCA9IGM7Ci0rCQlpZiAoYykKLSsJCQlyZXR1cm47Ci0rCQlwLS07 Ci0rCQl9Ci0rCX0KLSsKLStzdGF0aWMgdm9pZCBjdHJfWE9SKERSQkdfQ1RSX0NUWCAqY2N0eCwg Y29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmxlbikKLSsJewotKwlzaXplX3QgaSwg bjsKLSsJLyogQW55IHplcm8gcGFkZGluZyB3aWxsIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSByZXN1 bHQgYXMgd2UKLSsJICogYXJlIFhPUmluZy4gU28ganVzdCBwcm9jZXNzIGhvd2V2ZXIgbXVjaCBp bnB1dCB3ZSBoYXZlLgotKwkgKi8KLSsKLSsJaWYgKCFpbiB8fCAhaW5sZW4pCi0rCQlyZXR1cm47 Ci0rCi0rCWlmIChpbmxlbiA8IGNjdHgtPmtleWxlbikKLSsJCW4gPSBpbmxlbjsKLSsJZWxzZQot KwkJbiA9IGNjdHgtPmtleWxlbjsKLSsKLSsJZm9yIChpID0gMDsgaSA8IG47IGkrKykKLSsJCWNj dHgtPktbaV0gXj0gaW5baV07Ci0rCWlmIChpbmxlbiA8PSBjY3R4LT5rZXlsZW4pCi0rCQlyZXR1 cm47Ci0rCi0rCW4gPSBpbmxlbiAtIGNjdHgtPmtleWxlbjsKLSsJLyogU2hvdWxkIG5ldmVyIGhh cHBlbiAqLwotKwlpZiAobiA+IDE2KQotKwkJbiA9IDE2OwotKwlmb3IgKGkgPSAwOyBpIDwgMTY7 IGkrKykKLSsJCWNjdHgtPlZbaV0gXj0gaW5baSArIGNjdHgtPmtleWxlbl07Ci0rCX0KLSsKLSsv KiBQcm9jZXNzIGEgY29tcGxldGUgYmxvY2sgdXNpbmcgQkNDIGFsZ29yaXRobSBvZiBTUFAgODAw LTkwIDEwLjQuMyAqLwotKwotK3N0YXRpYyB2b2lkIGN0cl9CQ0NfYmxvY2soRFJCR19DVFJfQ1RY ICpjY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmlu KQotKwl7Ci0rCWludCBpOwotKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLSsJCW91dFtpXSBe PSBpbltpXTsKLSsJQUVTX2VuY3J5cHQob3V0LCBvdXQsICZjY3R4LT5kZl9rcyk7Ci0rI2lmIDAK LStmcHJpbnRmKHN0ZGVyciwgIkJDQyBpbitvdXRcbiIpOwotK0JJT19kdW1wX2ZwKHN0ZGVyciwg aW4sIDE2KTsKLStCSU9fZHVtcF9mcChzdGRlcnIsIG91dCwgMTYpOwotKyNlbmRpZgotKwl9Ci0r Ci0rLyogSGFuZGxlIHNldmVyYWwgQkNDIG9wZXJhdGlvbnMgZm9yIGFzIG11Y2ggZGF0YSBhcyB3 ZSBuZWVkIGZvciBLIGFuZCBYICovCi0rc3RhdGljIHZvaWQgY3RyX0JDQ19ibG9ja3MoRFJCR19D VFJfQ1RYICpjY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbikKLSsJewotKwljdHJfQkNDX2Js b2NrKGNjdHgsIGNjdHgtPktYLCBpbik7Ci0rCWN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1gg KyAxNiwgaW4pOwotKwlpZiAoY2N0eC0+a2V5bGVuICE9IDE2KQotKwkJY3RyX0JDQ19ibG9jayhj Y3R4LCBjY3R4LT5LWCArIDMyLCBpbik7Ci0rCX0KLSsvKiBJbml0aWFsaXNlIEJDQyBibG9ja3M6 IHRoZXNlIGhhdmUgdGhlIHZhbHVlIDAsMSwyIGluIGxlZnRtb3N0IHBvc2l0aW9uczoKLSsgKiBz ZWUgMTAuNC4yIHN0YWdlIDcuCi0rICovCi0rc3RhdGljIHZvaWQgY3RyX0JDQ19pbml0KERSQkdf Q1RSX0NUWCAqY2N0eCkKLSsJewotKwltZW1zZXQoY2N0eC0+S1gsIDAsIDQ4KTsKLSsJbWVtc2V0 KGNjdHgtPmJsdG1wLCAwLCAxNik7Ci0rCWN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1gsIGNj dHgtPmJsdG1wKTsKLSsJY2N0eC0+Ymx0bXBbM10gPSAxOwotKwljdHJfQkNDX2Jsb2NrKGNjdHgs IGNjdHgtPktYICsgMTYsIGNjdHgtPmJsdG1wKTsKLSsJaWYgKGNjdHgtPmtleWxlbiAhPSAxNikK LSsJCXsKLSsJCWNjdHgtPmJsdG1wWzNdID0gMjsKLSsJCWN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0 eC0+S1ggKyAzMiwgY2N0eC0+Ymx0bXApOwotKwkJfQotKwl9Ci0rCi0rLyogUHJvY2VzcyBzZXZl cmFsIGJsb2NrcyBpbnRvIEJDQyBhbGdvcml0aG0sIHNvbWUgcG9zc2libHkgcGFydGlhbCAqLwot K3N0YXRpYyB2b2lkIGN0cl9CQ0NfdXBkYXRlKERSQkdfQ1RSX0NUWCAqY2N0eCwKLSsJCQkJY29u c3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmxlbikKLSsJewotKwlpZiAoIWluIHx8ICFp bmxlbikKLSsJCXJldHVybjsKLSsJLyogSWYgd2UgaGF2ZSBwYXJ0aWFsIGJsb2NrIGhhbmRsZSBp dCBmaXJzdCAqLwotKwlpZiAoY2N0eC0+Ymx0bXBfcG9zKQotKwkJewotKwkJc2l6ZV90IGxlZnQg PSAxNiAtIGNjdHgtPmJsdG1wX3BvczsKLSsJCS8qIElmIHdlIG5vdyBoYXZlIGEgY29tcGxldGUg YmxvY2sgcHJvY2VzcyBpdCAqLwotKwkJaWYgKGlubGVuID49IGxlZnQpCi0rCQkJewotKwkJCW1l bWNweShjY3R4LT5ibHRtcCArIGNjdHgtPmJsdG1wX3BvcywgaW4sIGxlZnQpOwotKwkJCWN0cl9C Q0NfYmxvY2tzKGNjdHgsIGNjdHgtPmJsdG1wKTsKLSsJCQljY3R4LT5ibHRtcF9wb3MgPSAwOwot KwkJCWlubGVuIC09IGxlZnQ7Ci0rCQkJaW4gKz0gbGVmdDsKLSsJCQl9Ci0rCQl9Ci0rCS8qIFBy b2Nlc3MgemVybyBvciBtb3JlIGNvbXBsZXRlIGJsb2NrcyAqLwotKwl3aGlsZSAoaW5sZW4gPj0g MTYpCi0rCQl7Ci0rCQljdHJfQkNDX2Jsb2NrcyhjY3R4LCBpbik7Ci0rCQlpbiArPSAxNjsKLSsJ CWlubGVuIC09IDE2OwotKwkJfQotKwkvKiBDb3B5IGFueSByZW1haW5pbmcgcGFydGlhbCBibG9j ayB0byB0aGUgdGVtcG9yYXJ5IGJ1ZmZlciAqLwotKwlpZiAoaW5sZW4gPiAwKQotKwkJewotKwkJ bWVtY3B5KGNjdHgtPmJsdG1wICsgY2N0eC0+Ymx0bXBfcG9zLCBpbiwgaW5sZW4pOwotKwkJY2N0 eC0+Ymx0bXBfcG9zICs9IGlubGVuOwotKwkJfQotKwl9Ci0rCi0rc3RhdGljIHZvaWQgY3RyX0JD Q19maW5hbChEUkJHX0NUUl9DVFggKmNjdHgpCi0rCXsKLSsJaWYgKGNjdHgtPmJsdG1wX3BvcykK LSsJCXsKLSsJCW1lbXNldChjY3R4LT5ibHRtcCArIGNjdHgtPmJsdG1wX3BvcywgMCwgMTYgLSBj Y3R4LT5ibHRtcF9wb3MpOwotKwkJY3RyX0JDQ19ibG9ja3MoY2N0eCwgY2N0eC0+Ymx0bXApOwot KwkJfQotKwl9Ci0rCi0rc3RhdGljIHZvaWQgY3RyX2RmKERSQkdfQ1RSX0NUWCAqY2N0eCwKLSsJ CQljb25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFsZW4sCi0rCQkJY29uc3QgdW5z aWduZWQgY2hhciAqaW4yLCBzaXplX3QgaW4ybGVuLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIg KmluMywgc2l6ZV90IGluM2xlbikKLSsJewotKwlzaXplX3QgaW5sZW47Ci0rCXVuc2lnbmVkIGNo YXIgKnAgPSBjY3R4LT5ibHRtcDsKLSsJc3RhdGljIHVuc2lnbmVkIGNoYXIgYzgwID0gMHg4MDsK LSsKLSsJY3RyX0JDQ19pbml0KGNjdHgpOwotKwlpZiAoIWluMSkKLSsJCWluMWxlbiA9IDA7Ci0r CWlmICghaW4yKQotKwkJaW4ybGVuID0gMDsKLSsJaWYgKCFpbjMpCi0rCQlpbjNsZW4gPSAwOwot KwlpbmxlbiA9IGluMWxlbiArIGluMmxlbiArIGluM2xlbjsKLSsJLyogSW5pdGlhbGlzZSBMfHxO IGluIHRlbXBvcmFyeSBibG9jayAqLwotKwkqcCsrID0gKGlubGVuID4+IDI0KSAmIDB4ZmY7Ci0r CSpwKysgPSAoaW5sZW4gPj4gMTYpICYgMHhmZjsKLSsJKnArKyA9IChpbmxlbiA+PiA4KSAmIDB4 ZmY7Ci0rCSpwKysgPSBpbmxlbiAmIDB4ZmY7Ci0rCS8qIE5CIGtleWxlbiBpcyBhdCBtb3N0IDMy IGJ5dGVzICovCi0rCSpwKysgPSAwOwotKwkqcCsrID0gMDsKLSsJKnArKyA9IDA7Ci0rCSpwID0g KHVuc2lnbmVkIGNoYXIpKChjY3R4LT5rZXlsZW4gKyAxNikgJiAweGZmKTsKLSsJY2N0eC0+Ymx0 bXBfcG9zID0gODsKLSsJY3RyX0JDQ191cGRhdGUoY2N0eCwgaW4xLCBpbjFsZW4pOwotKwljdHJf QkNDX3VwZGF0ZShjY3R4LCBpbjIsIGluMmxlbik7Ci0rCWN0cl9CQ0NfdXBkYXRlKGNjdHgsIGlu MywgaW4zbGVuKTsKLSsJY3RyX0JDQ191cGRhdGUoY2N0eCwgJmM4MCwgMSk7Ci0rCWN0cl9CQ0Nf ZmluYWwoY2N0eCk7Ci0rCS8qIFNldCB1cCBrZXkgSyAqLwotKwlBRVNfc2V0X2VuY3J5cHRfa2V5 KGNjdHgtPktYLCBjY3R4LT5rZXlsZW4gKiA4LCAmY2N0eC0+ZGZfa3hrcyk7Ci0rCS8qIFggZm9s bG93cyBrZXkgSyAqLwotKwlBRVNfZW5jcnlwdChjY3R4LT5LWCArIGNjdHgtPmtleWxlbiwgY2N0 eC0+S1gsICZjY3R4LT5kZl9reGtzKTsKLSsJQUVTX2VuY3J5cHQoY2N0eC0+S1gsIGNjdHgtPktY ICsgMTYsICZjY3R4LT5kZl9reGtzKTsKLSsJaWYgKGNjdHgtPmtleWxlbiAhPSAxNikKLSsJCUFF U19lbmNyeXB0KGNjdHgtPktYICsgMTYsIGNjdHgtPktYICsgMzIsICZjY3R4LT5kZl9reGtzKTsK LSsjaWYgMAotK2ZwcmludGYoc3RkZXJyLCAiT3V0cHV0IG9mIGN0cl9kZjpcbiIpOwotK0JJT19k dW1wX2ZwKHN0ZGVyciwgY2N0eC0+S1gsIGNjdHgtPmtleWxlbiArIDE2KTsKLSsjZW5kaWYKLSsJ fQotKwotKy8qIE5CIHRoZSBuby1kZiAgVXBkYXRlIGluIFNQODAwLTkwIHNwZWNpZmllcyBhIGNv bnN0YW50IGlucHV0IGxlbmd0aAotKyAqIG9mIHNlZWRsZW4sIGhvd2V2ZXIgb3RoZXIgdXNlcyBv ZiB0aGlzIGFsZ29yaXRobSBwYWQgdGhlIGlucHV0IHdpdGgKLSsgKiB6ZXJvZXMgaWYgbmVjZXNz YXJ5IGFuZCBoYXZlIHVwIHRvIHR3byBwYXJhbWV0ZXJzIFhPUmVkIHRvZ2V0aGVyLAotKyAqIGhh bmRsZSBib3RoIGNhc2VzIGluIHRoaXMgZnVuY3Rpb24gaW5zdGVhZC4KLSsgKi8KLSsKLStzdGF0 aWMgdm9pZCBjdHJfVXBkYXRlKERSQkdfQ1RYICpkY3R4LAotKwkJY29uc3QgdW5zaWduZWQgY2hh ciAqaW4xLCBzaXplX3QgaW4xbGVuLAotKwkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4yLCBzaXpl X3QgaW4ybGVuLAotKwkJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVfdCBub25jZWxl bikKLSsJewotKwlEUkJHX0NUUl9DVFggKmNjdHggPSAmZGN0eC0+ZC5jdHI7Ci0rCS8qIGtzIGlz IGFscmVhZHkgc2V0dXAgZm9yIGNvcnJlY3Qga2V5ICovCi0rCWluY18xMjgoY2N0eCk7Ci0rCUFF U19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPkssICZjY3R4LT5rcyk7Ci0rCS8qIElmIGtleWxlbiBs b25nZXIgdGhhbiAxMjggYml0cyBuZWVkIGV4dHJhIGVuY3J5cHQgKi8KLSsJaWYgKGNjdHgtPmtl eWxlbiAhPSAxNikKLSsJCXsKLSsJCWluY18xMjgoY2N0eCk7Ci0rCQlBRVNfZW5jcnlwdChjY3R4 LT5WLCBjY3R4LT5LICsgMTYsICZjY3R4LT5rcyk7Ci0rCQl9Ci0rCWluY18xMjgoY2N0eCk7Ci0r CUFFU19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPlYsICZjY3R4LT5rcyk7Ci0rCS8qIElmIDE5MiBi aXQga2V5IHBhcnQgb2YgViBpcyBvbiBlbmQgb2YgSyAqLwotKwlpZiAoY2N0eC0+a2V5bGVuID09 IDI0KQotKwkJewotKwkJbWVtY3B5KGNjdHgtPlYgKyA4LCBjY3R4LT5WLCA4KTsKLSsJCW1lbWNw eShjY3R4LT5WLCBjY3R4LT5LICsgMjQsIDgpOwotKwkJfQotKwotKwlpZiAoZGN0eC0+eGZsYWdz ICYgRFJCR19GTEFHX0NUUl9VU0VfREYpCi0rCQl7Ci0rCQkvKiBJZiBubyBpbnB1dCByZXVzZSBl eGlzdGluZyBkZXJpdmVkIHZhbHVlICovCi0rCQlpZiAoaW4xIHx8IG5vbmNlIHx8IGluMikKLSsJ CQljdHJfZGYoY2N0eCwgaW4xLCBpbjFsZW4sIG5vbmNlLCBub25jZWxlbiwgaW4yLCBpbjJsZW4p OwotKwkJLyogSWYgdGhpcyBhIHJldXNlIGlucHV0IGluMWxlbiAhPSAwICovCi0rCQlpZiAoaW4x bGVuKQotKwkJCWN0cl9YT1IoY2N0eCwgY2N0eC0+S1gsIGRjdHgtPnNlZWRsZW4pOwotKwkJfQot KwllbHNlCi0rCQl7Ci0rCQljdHJfWE9SKGNjdHgsIGluMSwgaW4xbGVuKTsKLSsJCWN0cl9YT1Io Y2N0eCwgaW4yLCBpbjJsZW4pOwotKwkJfQotKwotKwlBRVNfc2V0X2VuY3J5cHRfa2V5KGNjdHgt PkssIGRjdHgtPnN0cmVuZ3RoLCAmY2N0eC0+a3MpOwotKyNpZiAwCi0rZnByaW50ZihzdGRlcnIs ICJLK1YgYWZ0ZXIgdXBkYXRlIGlzOlxuIik7Ci0rQklPX2R1bXBfZnAoc3RkZXJyLCBjY3R4LT5L LCBjY3R4LT5rZXlsZW4pOwotK0JJT19kdW1wX2ZwKHN0ZGVyciwgY2N0eC0+ViwgMTYpOwotKyNl bmRpZgotKwl9Ci0rCi0rc3RhdGljIGludCBkcmJnX2N0cl9pbnN0YW50aWF0ZShEUkJHX0NUWCAq ZGN0eCwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRsZW4sCi0rCQkJ Y29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVfdCBub25jZWxlbiwKLSsJCQljb25zdCB1 bnNpZ25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xlbikKLSsJewotKwlEUkJHX0NUUl9DVFgg KmNjdHggPSAmZGN0eC0+ZC5jdHI7Ci0rCW1lbXNldChjY3R4LT5LLCAwLCBzaXplb2YoY2N0eC0+ SykpOwotKwltZW1zZXQoY2N0eC0+ViwgMCwgc2l6ZW9mKGNjdHgtPlYpKTsKLSsJQUVTX3NldF9l bmNyeXB0X2tleShjY3R4LT5LLCBkY3R4LT5zdHJlbmd0aCwgJmNjdHgtPmtzKTsKLSsJY3RyX1Vw ZGF0ZShkY3R4LCBlbnQsIGVudGxlbiwgcGVycywgcGVyc2xlbiwgbm9uY2UsIG5vbmNlbGVuKTsK LSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdfY3RyX3Jlc2VlZChEUkJHX0NU WCAqZGN0eCwgCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50bGVuLAot KwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQotKwl7Ci0rCWN0 cl9VcGRhdGUoZGN0eCwgZW50LCBlbnRsZW4sIGFkaW4sIGFkaW5sZW4sIE5VTEwsIDApOwotKwly ZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19jdHJfZ2VuZXJhdGUoRFJCR19DVFgg KmRjdHgsCi0rCQkJdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAotKwkJCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQotKwl7Ci0rCURSQkdfQ1RSX0NU WCAqY2N0eCA9ICZkY3R4LT5kLmN0cjsKLSsJaWYgKGFkaW4gJiYgYWRpbmxlbikKLSsJCXsKLSsJ CWN0cl9VcGRhdGUoZGN0eCwgYWRpbiwgYWRpbmxlbiwgTlVMTCwgMCwgTlVMTCwgMCk7Ci0rCQkv KiBUaGlzIG1lYW5zIHdlIHJldXNlIGRlcml2ZWQgdmFsdWUgKi8KLSsJCWlmIChkY3R4LT54Zmxh Z3MgJiBEUkJHX0ZMQUdfQ1RSX1VTRV9ERikKLSsJCQl7Ci0rCQkJYWRpbiA9IE5VTEw7Ci0rCQkJ YWRpbmxlbiA9IDE7Ci0rCQkJfQotKwkJfQotKwllbHNlCi0rCQlhZGlubGVuID0gMDsKLSsKLSsJ Zm9yICg7OykKLSsJCXsKLSsJCWluY18xMjgoY2N0eCk7Ci0rCQlpZiAoIShkY3R4LT54ZmxhZ3Mg JiBEUkJHX0ZMQUdfVEVTVCkgJiYgIWRjdHgtPmxiX3ZhbGlkKQotKwkJCXsKLSsJCQlBRVNfZW5j cnlwdChjY3R4LT5WLCBkY3R4LT5sYiwgJmNjdHgtPmtzKTsKLSsJCQlkY3R4LT5sYl92YWxpZCA9 IDE7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwkJaWYgKG91dGxlbiA8IDE2KQotKwkJCXsKLSsJ CQkvKiBVc2UgSyBhcyB0ZW1wIHNwYWNlIGFzIGl0IHdpbGwgYmUgdXBkYXRlZCAqLwotKwkJCUFF U19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPkssICZjY3R4LT5rcyk7Ci0rCQkJaWYgKCFmaXBzX2Ry YmdfY3BybmdfdGVzdChkY3R4LCBjY3R4LT5LKSkKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJbWVtY3B5 KG91dCwgY2N0eC0+Sywgb3V0bGVuKTsKLSsJCQlicmVhazsKLSsJCQl9Ci0rCQlBRVNfZW5jcnlw dChjY3R4LT5WLCBvdXQsICZjY3R4LT5rcyk7Ci0rCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0 KGRjdHgsIG91dCkpCi0rCQkJcmV0dXJuIDA7Ci0rCQlvdXQgKz0gMTY7Ci0rCQlvdXRsZW4gLT0g MTY7Ci0rCQlpZiAob3V0bGVuID09IDApCi0rCQkJYnJlYWs7Ci0rCQl9Ci0rCi0rCWN0cl9VcGRh dGUoZGN0eCwgYWRpbiwgYWRpbmxlbiwgTlVMTCwgMCwgTlVMTCwgMCk7Ci0rCi0rCXJldHVybiAx OwotKwotKwl9Ci0rCi0rc3RhdGljIGludCBkcmJnX2N0cl91bmluc3RhbnRpYXRlKERSQkdfQ1RY ICpkY3R4KQotKwl7Ci0rCW1lbXNldCgmZGN0eC0+ZC5jdHIsIDAsIHNpemVvZihEUkJHX0NUUl9D VFgpKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgZmlwc19kcmJnX2N0cl9pbml0KERSQkdf Q1RYICpkY3R4KQotKwl7Ci0rCURSQkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5kLmN0cjsKLSsK LSsJc2l6ZV90IGtleWxlbjsKLSsKLSsJc3dpdGNoIChkY3R4LT50eXBlKQotKwkJewotKwkJY2Fz ZSBOSURfYWVzXzEyOF9jdHI6Ci0rCQlrZXlsZW4gPSAxNjsKLSsJCWJyZWFrOwotKwotKwkJY2Fz ZSBOSURfYWVzXzE5Ml9jdHI6Ci0rCQlrZXlsZW4gPSAyNDsKLSsJCWJyZWFrOwotKwotKwkJY2Fz ZSBOSURfYWVzXzI1Nl9jdHI6Ci0rCQlrZXlsZW4gPSAzMjsKLSsJCWJyZWFrOwotKwotKwkJZGVm YXVsdDoKLSsJCXJldHVybiAtMjsKLSsJCX0KLSsKLSsJZGN0eC0+aW5zdGFudGlhdGUgPSBkcmJn X2N0cl9pbnN0YW50aWF0ZTsKLSsJZGN0eC0+cmVzZWVkID0gZHJiZ19jdHJfcmVzZWVkOwotKwlk Y3R4LT5nZW5lcmF0ZSA9IGRyYmdfY3RyX2dlbmVyYXRlOwotKwlkY3R4LT51bmluc3RhbnRpYXRl ID0gZHJiZ19jdHJfdW5pbnN0YW50aWF0ZTsKLSsKLSsJY2N0eC0+a2V5bGVuID0ga2V5bGVuOwot KwlkY3R4LT5zdHJlbmd0aCA9IGtleWxlbiAqIDg7Ci0rCWRjdHgtPmJsb2NrbGVuZ3RoID0gMTY7 Ci0rCWRjdHgtPnNlZWRsZW4gPSBrZXlsZW4gKyAxNjsKLSsKLSsJaWYgKGRjdHgtPnhmbGFncyAm IERSQkdfRkxBR19DVFJfVVNFX0RGKQotKwkJewotKwkJLyogZGYgaW5pdGlhbGlzYXRpb24gKi8K LSsJCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGRmX2tleVszMl0gPQotKwkJCXsKLSsJCQkweDAwLDB4 MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcsCi0rCQkJMHgwOCwweDA5LDB4MGEsMHgw YiwweDBjLDB4MGQsMHgwZSwweDBmLAotKwkJCTB4MTAsMHgxMSwweDEyLDB4MTMsMHgxNCwweDE1 LDB4MTYsMHgxNywKLSsJCQkweDE4LDB4MTksMHgxYSwweDFiLDB4MWMsMHgxZCwweDFlLDB4MWYg Ci0rCQkJfTsKLSsJCS8qIFNldCBrZXkgc2NoZWR1bGUgZm9yIGRmX2tleSAqLwotKwkJQUVTX3Nl dF9lbmNyeXB0X2tleShkZl9rZXksIGRjdHgtPnN0cmVuZ3RoLCAmY2N0eC0+ZGZfa3MpOwotKwot KwkJZGN0eC0+bWluX2VudHJvcHkgPSBjY3R4LT5rZXlsZW47Ci0rCQlkY3R4LT5tYXhfZW50cm9w eSA9IERSQkdfTUFYX0xFTkdUSDsKLSsJCWRjdHgtPm1pbl9ub25jZSA9IGRjdHgtPm1pbl9lbnRy b3B5IC8gMjsKLSsJCWRjdHgtPm1heF9ub25jZSA9IERSQkdfTUFYX0xFTkdUSDsKLSsJCWRjdHgt Pm1heF9wZXJzID0gRFJCR19NQVhfTEVOR1RIOwotKwkJZGN0eC0+bWF4X2FkaW4gPSBEUkJHX01B WF9MRU5HVEg7Ci0rCQl9Ci0rCWVsc2UKLSsJCXsKLSsJCWRjdHgtPm1pbl9lbnRyb3B5ID0gZGN0 eC0+c2VlZGxlbjsKLSsJCWRjdHgtPm1heF9lbnRyb3B5ID0gZGN0eC0+c2VlZGxlbjsKLSsJCS8q IE5vbmNlIG5vdCB1c2VkICovCi0rCQlkY3R4LT5taW5fbm9uY2UgPSAwOwotKwkJZGN0eC0+bWF4 X25vbmNlID0gMDsKLSsJCWRjdHgtPm1heF9wZXJzID0gZGN0eC0+c2VlZGxlbjsKLSsJCWRjdHgt Pm1heF9hZGluID0gZGN0eC0+c2VlZGxlbjsKLSsJCX0KLSsKLSsJZGN0eC0+bWF4X3JlcXVlc3Qg PSAxPDwxNjsKLSsJZGN0eC0+cmVzZWVkX2ludGVydmFsID0gMTw8MjQ7Ci0rCi0rCXJldHVybiAx OwotKwl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaGFz aC5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2guYwotLS0t IG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19oYXNoLmMuZmlwcwkyMDE0LTEw LTE2IDEzOjE5OjM1LjA5NjMwNjM1NiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9m aXBzL2ZpcHNfZHJiZ19oYXNoLmMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTYzMDYzNTYgKzAyMDAK LUBAIC0wLDAgKzEsMzc4IEBACi0rLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ19oYXNoLmMgKi8KLSsv KiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3Ig dGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29w eXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgot KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwot KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcu Ci0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90 IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4g dGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0 aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBm b3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xl ZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAq IEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsg KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotKyAqLwotKwotKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCi0rCi0rI2luY2x1ZGUgPHN0 ZGxpYi5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8u aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19y YW5kLmg+Ci0rI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKLSsKLSsvKiBUaGlzIGlzIEhhc2hf ZGYgZnJvbSBTUCA4MDAtOTAgMTAuNC4xICovCi0rCi0rc3RhdGljIGludCBoYXNoX2RmKERSQkdf Q1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAq aW4xLCBzaXplX3QgaW4xbGVuLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMiwgc2l6ZV90 IGluMmxlbiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjMsIHNpemVfdCBpbjNsZW4sCi0r CQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW40LCBzaXplX3QgaW40bGVuKQotKwl7Ci0rCUVWUF9N RF9DVFggKm1jdHggPSAmZGN0eC0+ZC5oYXNoLm1jdHg7Ci0rCXVuc2lnbmVkIGNoYXIgKnZ0bXAg PSBkY3R4LT5kLmhhc2gudnRtcDsKLSsJdW5zaWduZWQgY2hhciB0bXBbNl07Ci0rCS8qIFN0YW5k YXJkIG9ubHkgZXZlciBuZWVkcyBzZWVkbGVuIGJ5dGVzIHdoaWNoIGlzIGFsd2F5cyBsZXNzIHRo YW4KLSsJICogbWF4aW11bSBwZXJtaXR0ZWQgc28gbm8gbmVlZCB0byBjaGVjayBsZW5ndGguCi0r CSAqLwotKwlzaXplX3Qgb3V0bGVuID0gZGN0eC0+c2VlZGxlbjsKLSsJdG1wWzBdID0gMTsKLSsJ dG1wWzFdID0gKChvdXRsZW4gKiA4KSA+PiAyNCkgJiAweGZmOwotKwl0bXBbMl0gPSAoKG91dGxl biAqIDgpID4+IDE2KSAmIDB4ZmY7Ci0rCXRtcFszXSA9ICgob3V0bGVuICogOCkgPj4gOCkgJiAw eGZmOwotKwl0bXBbNF0gPSAob3V0bGVuICogOCkgJiAweGZmOwotKwlpZiAoIWluMSkKLSsJCXsK LSsJCXRtcFs1XSA9ICh1bnNpZ25lZCBjaGFyKWluMWxlbjsKLSsJCWluMSA9IHRtcCArIDU7Ci0r CQlpbjFsZW4gPSAxOwotKwkJfQotKwlmb3IgKDs7KQotKwkJewotKwkJaWYgKCFGSVBTX2RpZ2Vz dGluaXQobWN0eCwgZGN0eC0+ZC5oYXNoLm1kKSkKLSsJCQlyZXR1cm4gMDsKLSsJCWlmICghRklQ U19kaWdlc3R1cGRhdGUobWN0eCwgdG1wLCA1KSkKLSsJCQlyZXR1cm4gMDsKLSsJCWlmIChpbjEg JiYgIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIGluMSwgaW4xbGVuKSkKLSsJCQlyZXR1cm4gMDsK LSsJCWlmIChpbjIgJiYgIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIGluMiwgaW4ybGVuKSkKLSsJ CQlyZXR1cm4gMDsKLSsJCWlmIChpbjMgJiYgIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIGluMywg aW4zbGVuKSkKLSsJCQlyZXR1cm4gMDsKLSsJCWlmIChpbjQgJiYgIUZJUFNfZGlnZXN0dXBkYXRl KG1jdHgsIGluNCwgaW40bGVuKSkKLSsJCQlyZXR1cm4gMDsKLSsJCWlmIChvdXRsZW4gPCBkY3R4 LT5ibG9ja2xlbmd0aCkKLSsJCQl7Ci0rCQkJaWYgKCFGSVBTX2RpZ2VzdGZpbmFsKG1jdHgsIHZ0 bXAsIE5VTEwpKQotKwkJCQlyZXR1cm4gMDsKLSsJCQltZW1jcHkob3V0LCB2dG1wLCBvdXRsZW4p OwotKwkJCU9QRU5TU0xfY2xlYW5zZSh2dG1wLCBkY3R4LT5ibG9ja2xlbmd0aCk7Ci0rCQkJcmV0 dXJuIDE7Ci0rCQkJfQotKwkJZWxzZSBpZighRklQU19kaWdlc3RmaW5hbChtY3R4LCBvdXQsIE5V TEwpKQotKwkJCXJldHVybiAwOwotKwotKwkJb3V0bGVuIC09IGRjdHgtPmJsb2NrbGVuZ3RoOwot KwkJaWYgKG91dGxlbiA9PSAwKQotKwkJCXJldHVybiAxOwotKwkJdG1wWzBdKys7Ci0rCQlvdXQg Kz0gZGN0eC0+YmxvY2tsZW5ndGg7Ci0rCQl9Ci0rCX0KLSsKLSsKLSsvKiBBZGQgYW4gdW5zaWdu ZWQgYnVmZmVyIHRvIHRoZSBidWYgdmFsdWUsIHN0b3JpbmcgdGhlIHJlc3VsdCBpbiBidWYuIEZv cgotKyAqIHRoaXMgYWxnb3JpdGhtIHRoZSBsZW5ndGggb2YgaW5wdXQgbmV2ZXIgZXhjZWVkcyB0 aGUgc2VlZCBsZW5ndGguCi0rICovCi0rCi0rc3RhdGljIHZvaWQgY3R4X2FkZF9idWYoRFJCR19D VFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKLSsJCQkJdW5zaWduZWQgY2hhciAqaW4sIHNp emVfdCBpbmxlbikKLSsJewotKwlzaXplX3QgaSA9IGlubGVuOwotKwljb25zdCB1bnNpZ25lZCBj aGFyICpxOwotKwl1bnNpZ25lZCBjaGFyIGMsICpwOwotKwlwID0gYnVmICsgZGN0eC0+c2VlZGxl bjsKLSsJcSA9IGluICsgaW5sZW47Ci0rCi0rCU9QRU5TU0xfYXNzZXJ0KGkgPD0gZGN0eC0+c2Vl ZGxlbik7Ci0rCi0rCS8qIFNwZWNpYWwgY2FzZTogemVybyBsZW5ndGgsIGp1c3QgaW5jcmVtZW50 IGJ1ZmZlciAqLwotKwlpZiAoaSkKLSsJCWMgPSAwOwotKwllbHNlIAotKwkJYyA9IDE7Ci0rCi0r CXdoaWxlIChpKQotKwkJewotKwkJaW50IHI7Ci0rCQlwLS07Ci0rCQlxLS07Ci0rCQlyID0gKnAg KyAqcSArIGM7Ci0rCQkvKiBDYXJyeSAqLwotKwkJaWYgKHIgPiAweGZmKQotKwkJCWMgPSAxOwot KwkJZWxzZQotKwkJCWMgPSAwOwotKwkJKnAgPSByICYgMHhmZjsKLSsJCWktLTsKLSsJCX0KLSsK LSsJaSA9IGRjdHgtPnNlZWRsZW4gLSBpbmxlbjsKLSsKLSsJLyogSWYgbm90IGFkZGluZyB3aG9s ZSBidWZmZXIgaGFuZGxlIGZpbmFsIGNhcnJpZXMgKi8KLSsJaWYgKGMgJiYgaSkKLSsJCXsKLSsJ CWRvCi0rCQkJewotKwkJCXAtLTsKLSsJCQljID0gKnA7Ci0rCQkJYysrOwotKwkJCSpwID0gYzsK LSsJCQlpZihjKQotKwkJCQlyZXR1cm47Ci0rCQkJfSB3aGlsZShpLS0pOwotKwkJfQotKwl9Ci0r Ci0rLyogRmluYWxpc2UgYW5kIGFkZCBoYXNoIHRvIFYgKi8KLSsJCi0rc3RhdGljIGludCBjdHhf YWRkX21kKERSQkdfQ1RYICpkY3R4KQotKwl7Ci0rCWlmICghRklQU19kaWdlc3RmaW5hbCgmZGN0 eC0+ZC5oYXNoLm1jdHgsIGRjdHgtPmQuaGFzaC52dG1wLCBOVUxMKSkKLSsJCQlyZXR1cm4gMDsK LSsJY3R4X2FkZF9idWYoZGN0eCwgZGN0eC0+ZC5oYXNoLlYsIGRjdHgtPmQuaGFzaC52dG1wLCBk Y3R4LT5ibG9ja2xlbmd0aCk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBoYXNo X2dlbihEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuKQot Kwl7Ci0rCURSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOwotKwlpZiAob3V0bGVu ID09IDApCi0rCQlyZXR1cm4gMTsKLSsJbWVtY3B5KGhjdHgtPnZ0bXAsIGhjdHgtPlYsIGRjdHgt PnNlZWRsZW4pOwotKwlmb3IoOzspCi0rCQl7Ci0rCQlGSVBTX2RpZ2VzdGluaXQoJmhjdHgtPm1j dHgsIGhjdHgtPm1kKTsKLSsJCUZJUFNfZGlnZXN0dXBkYXRlKCZoY3R4LT5tY3R4LCBoY3R4LT52 dG1wLCBkY3R4LT5zZWVkbGVuKTsKLSsJCWlmICghKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19U RVNUKSAmJiAhZGN0eC0+bGJfdmFsaWQpCi0rCQkJewotKwkJCUZJUFNfZGlnZXN0ZmluYWwoJmhj dHgtPm1jdHgsIGRjdHgtPmxiLCBOVUxMKTsKLSsJCQlkY3R4LT5sYl92YWxpZCA9IDE7Ci0rCQkJ fQotKwkJZWxzZSBpZiAob3V0bGVuIDwgZGN0eC0+YmxvY2tsZW5ndGgpCi0rCQkJewotKwkJCUZJ UFNfZGlnZXN0ZmluYWwoJmhjdHgtPm1jdHgsIGhjdHgtPnZ0bXAsIE5VTEwpOwotKwkJCWlmICgh Zmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgaGN0eC0+dnRtcCkpCi0rCQkJCXJldHVybiAwOwot KwkJCW1lbWNweShvdXQsIGhjdHgtPnZ0bXAsIG91dGxlbik7Ci0rCQkJcmV0dXJuIDE7Ci0rCQkJ fQotKwkJZWxzZQotKwkJCXsKLSsJCQlGSVBTX2RpZ2VzdGZpbmFsKCZoY3R4LT5tY3R4LCBvdXQs IE5VTEwpOwotKwkJCWlmICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgb3V0KSkKLSsJCQkJ cmV0dXJuIDA7Ci0rCQkJb3V0bGVuIC09IGRjdHgtPmJsb2NrbGVuZ3RoOwotKwkJCWlmIChvdXRs ZW4gPT0gMCkKLSsJCQkJcmV0dXJuIDE7Ci0rCQkJb3V0ICs9IGRjdHgtPmJsb2NrbGVuZ3RoOwot KwkJCX0KLSsJCWN0eF9hZGRfYnVmKGRjdHgsIGhjdHgtPnZ0bXAsIE5VTEwsIDApOwotKwkJfQot Kwl9Ci0rCi0rc3RhdGljIGludCBkcmJnX2hhc2hfaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgs Ci0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudF9sZW4sCi0rCQkJCWNv bnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VfbGVuLAotKwkJCQljb25zdCB1 bnNpZ25lZCBjaGFyICpwc3RyLCBzaXplX3QgcHN0cl9sZW4pCi0rCXsKLSsJRFJCR19IQVNIX0NU WCAqaGN0eCA9ICZkY3R4LT5kLmhhc2g7Ci0rCWlmICghaGFzaF9kZihkY3R4LCBoY3R4LT5WLCAK LSsJCQllbnQsIGVudF9sZW4sIG5vbmNlLCBub25jZV9sZW4sIHBzdHIsIHBzdHJfbGVuLAotKwkJ CU5VTEwsIDApKQotKwkJcmV0dXJuIDA7Ci0rCWlmICghaGFzaF9kZihkY3R4LCBoY3R4LT5DLCAK LSsJCQlOVUxMLCAwLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuLAotKwkJCU5VTEwsIDAsIE5VTEws IDApKQotKwkJcmV0dXJuIDA7Ci0rCi0rI2lmZGVmIEhBU0hfRFJCR19UUkFDRQotKwlmcHJpbnRm KHN0ZGVyciwgIlYrQyBhZnRlciBpbnN0YW50aWF0ZTpcbiIpOwotKwloZXhwcmludChzdGRlcnIs IGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pOwotKwloZXhwcmludChzdGRlcnIsIGhjdHgtPkMsIGRj dHgtPnNlZWRsZW4pOwotKyNlbmRpZgotKwlyZXR1cm4gMTsKLSsJfQotKwotKwkKLStzdGF0aWMg aW50IGRyYmdfaGFzaF9yZXNlZWQoRFJCR19DVFggKmRjdHgsCi0rCQkJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmVudCwgc2l6ZV90IGVudF9sZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFk aW4sIHNpemVfdCBhZGluX2xlbikKLSsJewotKwlEUkJHX0hBU0hfQ1RYICpoY3R4ID0gJmRjdHgt PmQuaGFzaDsKLSsJLyogViBhYm91dCB0byBiZSB1cGRhdGVkIHNvIHVzZSBDIGFzIG91dHB1dCBp bnN0ZWFkICovCi0rCWlmICghaGFzaF9kZihkY3R4LCBoY3R4LT5DLAotKwkJCU5VTEwsIDEsIGhj dHgtPlYsIGRjdHgtPnNlZWRsZW4sCi0rCQkJZW50LCBlbnRfbGVuLCBhZGluLCBhZGluX2xlbikp Ci0rCQlyZXR1cm4gMDsKLSsJbWVtY3B5KGhjdHgtPlYsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4p OwotKwlpZiAoIWhhc2hfZGYoZGN0eCwgaGN0eC0+QywgTlVMTCwgMCwKLSsJCQloY3R4LT5WLCBk Y3R4LT5zZWVkbGVuLCBOVUxMLCAwLCBOVUxMLCAwKSkKLSsJCXJldHVybiAwOwotKyNpZmRlZiBI QVNIX0RSQkdfVFJBQ0UKLSsJZnByaW50ZihzdGRlcnIsICJWK0MgYWZ0ZXIgcmVzZWVkOlxuIik7 Ci0rCWhleHByaW50KHN0ZGVyciwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbik7Ci0rCWhleHByaW50 KHN0ZGVyciwgaGN0eC0+QywgZGN0eC0+c2VlZGxlbik7Ci0rI2VuZGlmCi0rCXJldHVybiAxOwot Kwl9Ci0rCi0rc3RhdGljIGludCBkcmJnX2hhc2hfZ2VuZXJhdGUoRFJCR19DVFggKmRjdHgsCi0r CQkJCXVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwKLSsJCQkJY29uc3QgdW5zaWdu ZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5fbGVuKQotKwl7Ci0rCURSQkdfSEFTSF9DVFggKmhj dHggPSAmZGN0eC0+ZC5oYXNoOwotKwlFVlBfTURfQ1RYICptY3R4ID0gJmhjdHgtPm1jdHg7Ci0r CXVuc2lnbmVkIGNoYXIgdG1wWzRdOwotKwlpZiAoYWRpbiAmJiBhZGluX2xlbikKLSsJCXsKLSsJ CXRtcFswXSA9IDI7Ci0rCQlpZiAoIUZJUFNfZGlnZXN0aW5pdChtY3R4LCBoY3R4LT5tZCkpCi0r CQkJcmV0dXJuIDA7Ci0rCQlpZiAoIUVWUF9EaWdlc3RVcGRhdGUobWN0eCwgdG1wLCAxKSkKLSsJ CQlyZXR1cm4gMDsKLSsJCWlmICghRVZQX0RpZ2VzdFVwZGF0ZShtY3R4LCBoY3R4LT5WLCBkY3R4 LT5zZWVkbGVuKSkKLSsJCQlyZXR1cm4gMDsKLSsJCWlmICghRVZQX0RpZ2VzdFVwZGF0ZShtY3R4 LCBhZGluLCBhZGluX2xlbikpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoIWN0eF9hZGRfbWQoZGN0 eCkpCi0rCQkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWlmICghaGFzaF9nZW4oZGN0eCwgb3V0LCBvdXRs ZW4pKQotKwkJcmV0dXJuIDA7Ci0rCi0rCXRtcFswXSA9IDM7Ci0rCWlmICghRklQU19kaWdlc3Rp bml0KG1jdHgsIGhjdHgtPm1kKSkKLSsJCXJldHVybiAwOwotKwlpZiAoIUVWUF9EaWdlc3RVcGRh dGUobWN0eCwgdG1wLCAxKSkKLSsJCXJldHVybiAwOwotKwlpZiAoIUVWUF9EaWdlc3RVcGRhdGUo bWN0eCwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbikpCi0rCQlyZXR1cm4gMDsKLSsKLSsJaWYgKCFj dHhfYWRkX21kKGRjdHgpKQotKwkJcmV0dXJuIDA7Ci0rCi0rCWN0eF9hZGRfYnVmKGRjdHgsIGhj dHgtPlYsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOwotKwotKwl0bXBbMF0gPSAoZGN0eC0+cmVz ZWVkX2NvdW50ZXIgPj4gMjQpICYgMHhmZjsKLSsJdG1wWzFdID0gKGRjdHgtPnJlc2VlZF9jb3Vu dGVyID4+IDE2KSAmIDB4ZmY7Ci0rCXRtcFsyXSA9IChkY3R4LT5yZXNlZWRfY291bnRlciA+PiA4 KSAmIDB4ZmY7Ci0rCXRtcFszXSA9IGRjdHgtPnJlc2VlZF9jb3VudGVyICYgMHhmZjsKLSsJY3R4 X2FkZF9idWYoZGN0eCwgaGN0eC0+ViwgdG1wLCA0KTsKLSsjaWZkZWYgSEFTSF9EUkJHX1RSQUNF Ci0rCWZwcmludGYoc3RkZXJyLCAiVitDIGFmdGVyIGdlbmVyYXRlOlxuIik7Ci0rCWhleHByaW50 KHN0ZGVyciwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbik7Ci0rCWhleHByaW50KHN0ZGVyciwgaGN0 eC0+QywgZGN0eC0+c2VlZGxlbik7Ci0rI2VuZGlmCi0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3Rh dGljIGludCBkcmJnX2hhc2hfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkKLSsJewotKwlF VlBfTURfQ1RYX2NsZWFudXAoJmRjdHgtPmQuaGFzaC5tY3R4KTsKLSsJT1BFTlNTTF9jbGVhbnNl KCZkY3R4LT5kLmhhc2gsIHNpemVvZihEUkJHX0hBU0hfQ1RYKSk7Ci0rCXJldHVybiAxOwotKwl9 Ci0rCi0raW50IGZpcHNfZHJiZ19oYXNoX2luaXQoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJY29u c3QgRVZQX01EICptZDsKLSsJRFJCR19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhhc2g7Ci0r CW1kID0gRklQU19nZXRfZGlnZXN0YnluaWQoZGN0eC0+dHlwZSk7Ci0rCWlmICghbWQpCi0rCQly ZXR1cm4gLTI7Ci0rCXN3aXRjaCAoZGN0eC0+dHlwZSkKLSsJCXsKLSsJCWNhc2UgTklEX3NoYTE6 Ci0rCQlkY3R4LT5zdHJlbmd0aCA9IDEyODsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSBOSURfc2hh MjI0OgotKwkJZGN0eC0+c3RyZW5ndGggPSAxOTI7Ci0rCQlicmVhazsKLSsKLSsJCWRlZmF1bHQ6 Ci0rCQlkY3R4LT5zdHJlbmd0aCA9IDI1NjsKLSsJCWJyZWFrOwotKwkJfQotKwotKwlkY3R4LT5p bnN0YW50aWF0ZSA9IGRyYmdfaGFzaF9pbnN0YW50aWF0ZTsKLSsJZGN0eC0+cmVzZWVkID0gZHJi Z19oYXNoX3Jlc2VlZDsKLSsJZGN0eC0+Z2VuZXJhdGUgPSBkcmJnX2hhc2hfZ2VuZXJhdGU7Ci0r CWRjdHgtPnVuaW5zdGFudGlhdGUgPSBkcmJnX2hhc2hfdW5pbnN0YW50aWF0ZTsKLSsKLSsJZGN0 eC0+ZC5oYXNoLm1kID0gbWQ7Ci0rCUVWUF9NRF9DVFhfaW5pdCgmaGN0eC0+bWN0eCk7Ci0rCi0r CS8qIFRoZXNlIGFyZSB0YWtlbiBmcm9tIFNQIDgwMC05MCAxMC4xIHRhYmxlIDIgKi8KLSsKLSsJ ZGN0eC0+YmxvY2tsZW5ndGggPSBNX0VWUF9NRF9zaXplKG1kKTsKLSsJaWYgKGRjdHgtPmJsb2Nr bGVuZ3RoID4gMzIpCi0rCQlkY3R4LT5zZWVkbGVuID0gMTExOwotKwllbHNlCi0rCQlkY3R4LT5z ZWVkbGVuID0gNTU7Ci0rCi0rCi0rCWRjdHgtPm1pbl9lbnRyb3B5ID0gZGN0eC0+c3RyZW5ndGgg LyA4OwotKwlkY3R4LT5tYXhfZW50cm9weSA9IERSQkdfTUFYX0xFTkdUSDsKLSsKLSsJZGN0eC0+ bWluX25vbmNlID0gZGN0eC0+bWluX2VudHJvcHkgLyAyOwotKwlkY3R4LT5tYXhfbm9uY2UgPSBE UkJHX01BWF9MRU5HVEg7Ci0rCi0rCWRjdHgtPm1heF9wZXJzID0gRFJCR19NQVhfTEVOR1RIOwot KwlkY3R4LT5tYXhfYWRpbiA9IERSQkdfTUFYX0xFTkdUSDsKLSsKLSsJZGN0eC0+bWF4X3JlcXVl c3QgPSAxPDwxNjsKLSsJZGN0eC0+cmVzZWVkX2ludGVydmFsID0gMTw8MjQ7Ci0rCi0rCXJldHVy biAxOwotKwl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX2RyYmdf aG1hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2htYWMuYwot LS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19obWFjLmMuZmlwcwkyMDE0 LTEwLTE2IDEzOjE5OjM1LjA5NzMwNjM3OCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0 by9maXBzL2ZpcHNfZHJiZ19obWFjLmMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTYzMDYzNTYgKzAy MDAKLUBAIC0wLDAgKzEsMjgxIEBACi0rLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ19obWFjLmMgKi8K LSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBm b3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICog Q29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsg KgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdt ZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9w ZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8K LSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0 ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5v cmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkg bm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIg aW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBv ZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFu eSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQot KyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK LSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5n Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZw Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3Jh bmQuaD4KLSsjaW5jbHVkZSAiZmlwc19yYW5kX2xjbC5oIgotKwotK3N0YXRpYyBpbnQgZHJiZ19o bWFjX3VwZGF0ZShEUkJHX0NUWCAqZGN0eCwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4x LCBzaXplX3QgaW4xbGVuLAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjIsIHNpemVfdCBp bjJsZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMywgc2l6ZV90IGluM2xlbgotKwkJ CSkKLSsJewotKwlzdGF0aWMgdW5zaWduZWQgY2hhciBjMCA9IDAsIGMxID0gMTsKLSsJRFJCR19I TUFDX0NUWCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7Ci0rCUhNQUNfQ1RYICpoY3R4ID0gJmhtYWMt PmhjdHg7Ci0rCi0rCWlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJsb2Nr bGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFITUFDX1VwZGF0 ZShoY3R4LCBobWFjLT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkpCi0rCQlyZXR1cm4gMDsKLSsJaWYg KCFITUFDX1VwZGF0ZShoY3R4LCAmYzAsIDEpKQotKwkJcmV0dXJuIDA7Ci0rCWlmIChpbjFsZW4g JiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMSwgaW4xbGVuKSkKLSsJCXJldHVybiAwOwotKwlpZiAo aW4ybGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjIsIGluMmxlbikpCi0rCQlyZXR1cm4gMDsK LSsJaWYgKGluM2xlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4zLCBpbjNsZW4pKQotKwkJcmV0 dXJuIDA7Ci0rCi0rCWlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5LLCBOVUxMKSkKLSsJCXJl dHVybiAwOwotKwotKwlpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBkY3R4LT5ibG9j a2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQotKwkJcmV0dXJuIDA7Ci0rCWlmICghSE1BQ19VcGRh dGUoaGN0eCwgaG1hYy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQotKwkJcmV0dXJuIDA7Ci0rCi0r CWlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5WLCBOVUxMKSkKLSsJCXJldHVybiAwOwotKwot KwlpZiAoIWluMWxlbiAmJiAhaW4ybGVuICYmICFpbjNsZW4pCi0rCQlyZXR1cm4gMTsKLSsKLSsJ aWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgsIGhtYWMt Pm1kLCBOVUxMKSkKLSsJCXJldHVybiAwOwotKwlpZiAoIUhNQUNfVXBkYXRlKGhjdHgsIGhtYWMt PlYsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKLSsJCXJldHVybiAwOwotKwlpZiAoIUhNQUNfVXBkYXRl KGhjdHgsICZjMSwgMSkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKGluMWxlbiAmJiAhSE1BQ19VcGRh dGUoaGN0eCwgaW4xLCBpbjFsZW4pKQotKwkJcmV0dXJuIDA7Ci0rCWlmIChpbjJsZW4gJiYgIUhN QUNfVXBkYXRlKGhjdHgsIGluMiwgaW4ybGVuKSkKLSsJCXJldHVybiAwOwotKwlpZiAoaW4zbGVu ICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjMsIGluM2xlbikpCi0rCQlyZXR1cm4gMDsKLSsKLSsJ aWYgKCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPkssIE5VTEwpKQotKwkJcmV0dXJuIDA7Ci0rCi0r CWlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLCBobWFj LT5tZCwgTlVMTCkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBobWFj LT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkpCi0rCQlyZXR1cm4gMDsKLSsKLSsJaWYgKCFITUFDX0Zp bmFsKGhjdHgsIGhtYWMtPlYsIE5VTEwpKQotKwkJcmV0dXJuIDA7Ci0rCi0rCXJldHVybiAxOwot KwotKwl9Ci0rCi0rc3RhdGljIGludCBkcmJnX2htYWNfaW5zdGFudGlhdGUoRFJCR19DVFggKmRj dHgsCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudF9sZW4sCi0rCQkJ CWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VfbGVuLAotKwkJCQljb25z dCB1bnNpZ25lZCBjaGFyICpwc3RyLCBzaXplX3QgcHN0cl9sZW4pCi0rCXsKLSsJRFJCR19ITUFD X0NUWCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7Ci0rCW1lbXNldChobWFjLT5LLCAwLCBkY3R4LT5i bG9ja2xlbmd0aCk7Ci0rCW1lbXNldChobWFjLT5WLCAxLCBkY3R4LT5ibG9ja2xlbmd0aCk7Ci0r CWlmICghZHJiZ19obWFjX3VwZGF0ZShkY3R4LAotKwkJCWVudCwgZW50X2xlbiwgbm9uY2UsIG5v bmNlX2xlbiwgcHN0ciwgcHN0cl9sZW4pKQotKwkJcmV0dXJuIDA7Ci0rCi0rI2lmZGVmIEhNQUNf RFJCR19UUkFDRQotKwlmcHJpbnRmKHN0ZGVyciwgIksrViBhZnRlciBpbnN0YW50aWF0ZTpcbiIp OwotKwloZXhwcmludChzdGRlcnIsIGhtYWMtPkssIGhtYWMtPmJsb2NrbGVuZ3RoKTsKLSsJaGV4 cHJpbnQoc3RkZXJyLCBobWFjLT5WLCBobWFjLT5ibG9ja2xlbmd0aCk7Ci0rI2VuZGlmCi0rCXJl dHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBkcmJnX2htYWNfcmVzZWVkKERSQkdfQ1RYICpk Y3R4LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAotKwkJ CQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4pCi0rCXsKLSsJaWYg KCFkcmJnX2htYWNfdXBkYXRlKGRjdHgsCi0rCQkJZW50LCBlbnRfbGVuLCBhZGluLCBhZGluX2xl biwgTlVMTCwgMCkpCi0rCQlyZXR1cm4gMDsKLSsKLSsjaWZkZWYgSE1BQ19EUkJHX1RSQUNFCi0r CXsKLSsJCURSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5obWFjOwotKwkJZnByaW50Zihz dGRlcnIsICJLK1YgYWZ0ZXIgcmVzZWVkOlxuIik7Ci0rCQloZXhwcmludChzdGRlcnIsIGhtYWMt PkssIGhtYWMtPmJsb2NrbGVuZ3RoKTsKLSsJCWhleHByaW50KHN0ZGVyciwgaG1hYy0+ViwgaG1h Yy0+YmxvY2tsZW5ndGgpOwotKwl9Ci0rI2VuZGlmCi0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3Rh dGljIGludCBkcmJnX2htYWNfZ2VuZXJhdGUoRFJCR19DVFggKmRjdHgsCi0rCQkJCXVuc2lnbmVk IGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRp biwgc2l6ZV90IGFkaW5fbGVuKQotKwl7Ci0rCURSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ ZC5obWFjOwotKwlITUFDX0NUWCAqaGN0eCA9ICZobWFjLT5oY3R4OwotKwljb25zdCB1bnNpZ25l ZCBjaGFyICpWdG1wID0gaG1hYy0+VjsKLSsJaWYgKGFkaW5fbGVuICYmICFkcmJnX2htYWNfdXBk YXRlKGRjdHgsIGFkaW4sIGFkaW5fbGVuLAotKwkJCQkJCU5VTEwsIDAsIE5VTEwsIDApKQotKwkJ cmV0dXJuIDA7Ci0rCWZvciAoOzspCi0rCQl7Ci0rCQlpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBo bWFjLT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwKLSsJCQkJCQkJaG1hYy0+bWQsIE5VTEwpKQotKwkJ CXJldHVybiAwOwotKwkJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBWdG1wLCBkY3R4LT5ibG9ja2xl bmd0aCkpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoIShkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdf VEVTVCkgJiYgIWRjdHgtPmxiX3ZhbGlkKQotKwkJCXsKLSsJCQlpZiAoIUhNQUNfRmluYWwoaGN0 eCwgZGN0eC0+bGIsIE5VTEwpKQotKwkJCQlyZXR1cm4gMDsKLSsJCQlkY3R4LT5sYl92YWxpZCA9 IDE7Ci0rCQkJVnRtcCA9IGRjdHgtPmxiOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCWVsc2Ug aWYgKG91dGxlbiA+IGRjdHgtPmJsb2NrbGVuZ3RoKQotKwkJCXsKLSsJCQlpZiAoIUhNQUNfRmlu YWwoaGN0eCwgb3V0LCBOVUxMKSkKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJaWYgKCFmaXBzX2RyYmdf Y3BybmdfdGVzdChkY3R4LCBvdXQpKQotKwkJCQlyZXR1cm4gMDsKLSsJCQlWdG1wID0gb3V0Owot KwkJCX0KLSsJCWVsc2UKLSsJCQl7Ci0rCQkJaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPlYs IE5VTEwpKQotKwkJCQlyZXR1cm4gMDsKLSsJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRj dHgsIGhtYWMtPlYpKQotKwkJCQlyZXR1cm4gMDsKLSsJCQltZW1jcHkob3V0LCBobWFjLT5WLCBv dXRsZW4pOwotKwkJCWJyZWFrOwotKwkJCX0KLSsJCW91dCArPSBkY3R4LT5ibG9ja2xlbmd0aDsK LSsJCW91dGxlbiAtPSBkY3R4LT5ibG9ja2xlbmd0aDsKLSsJCX0KLSsJaWYgKCFkcmJnX2htYWNf dXBkYXRlKGRjdHgsIGFkaW4sIGFkaW5fbGVuLCBOVUxMLCAwLCBOVUxMLCAwKSkKLSsJCXJldHVy biAwOwotKwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19obWFjX3VuaW5z dGFudGlhdGUoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJSE1BQ19DVFhfY2xlYW51cCgmZGN0eC0+ ZC5obWFjLmhjdHgpOwotKwlPUEVOU1NMX2NsZWFuc2UoJmRjdHgtPmQuaG1hYywgc2l6ZW9mKERS QkdfSE1BQ19DVFgpKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgZmlwc19kcmJnX2htYWNf aW5pdChEUkJHX0NUWCAqZGN0eCkKLSsJewotKwljb25zdCBFVlBfTUQgKm1kID0gTlVMTDsKLSsJ RFJCR19ITUFDX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhtYWM7Ci0rCWRjdHgtPnN0cmVuZ3RoID0g MjU2OwotKwlzd2l0Y2ggKGRjdHgtPnR5cGUpCi0rCQl7Ci0rCQljYXNlIE5JRF9obWFjV2l0aFNI QTE6Ci0rCQltZCA9IEVWUF9zaGExKCk7Ci0rCQlkY3R4LT5zdHJlbmd0aCA9IDEyODsKLSsJCWJy ZWFrOwotKwotKwkJY2FzZSBOSURfaG1hY1dpdGhTSEEyMjQ6Ci0rCQltZCA9IEVWUF9zaGEyMjQo KTsKLSsJCWRjdHgtPnN0cmVuZ3RoID0gMTkyOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIE5JRF9o bWFjV2l0aFNIQTI1NjoKLSsJCW1kID0gRVZQX3NoYTI1NigpOwotKwkJYnJlYWs7Ci0rCi0rCQlj YXNlIE5JRF9obWFjV2l0aFNIQTM4NDoKLSsJCW1kID0gRVZQX3NoYTM4NCgpOwotKwkJYnJlYWs7 Ci0rCi0rCQljYXNlIE5JRF9obWFjV2l0aFNIQTUxMjoKLSsJCW1kID0gRVZQX3NoYTUxMigpOwot KwkJYnJlYWs7Ci0rCi0rCQlkZWZhdWx0OgotKwkJZGN0eC0+c3RyZW5ndGggPSAwOwotKwkJcmV0 dXJuIC0yOwotKwkJfQotKyAgICAgICAgZGN0eC0+aW5zdGFudGlhdGUgPSBkcmJnX2htYWNfaW5z dGFudGlhdGU7Ci0rICAgICAgICBkY3R4LT5yZXNlZWQgPSBkcmJnX2htYWNfcmVzZWVkOwotKyAg ICAgICAgZGN0eC0+Z2VuZXJhdGUgPSBkcmJnX2htYWNfZ2VuZXJhdGU7Ci0rICAgICAgICBkY3R4 LT51bmluc3RhbnRpYXRlID0gZHJiZ19obWFjX3VuaW5zdGFudGlhdGU7Ci0rCUhNQUNfQ1RYX2lu aXQoJmhjdHgtPmhjdHgpOwotKwloY3R4LT5tZCA9IG1kOwotKwlkY3R4LT5ibG9ja2xlbmd0aCA9 IE1fRVZQX01EX3NpemUobWQpOwotKwlkY3R4LT5zZWVkbGVuID0gTV9FVlBfTURfc2l6ZShtZCk7 Ci0rCi0rICAgICAgICBkY3R4LT5taW5fZW50cm9weSA9IGRjdHgtPnN0cmVuZ3RoIC8gODsKLSsg ICAgICAgIGRjdHgtPm1heF9lbnRyb3B5ID0gRFJCR19NQVhfTEVOR1RIOwotKwotKyAgICAgICAg ZGN0eC0+bWluX25vbmNlID0gZGN0eC0+bWluX2VudHJvcHkgLyAyOwotKyAgICAgICAgZGN0eC0+ bWF4X25vbmNlID0gRFJCR19NQVhfTEVOR1RIOwotKwotKyAgICAgICAgZGN0eC0+bWF4X3BlcnMg PSBEUkJHX01BWF9MRU5HVEg7Ci0rICAgICAgICBkY3R4LT5tYXhfYWRpbiA9IERSQkdfTUFYX0xF TkdUSDsKLSsKLSsgICAgICAgIGRjdHgtPm1heF9yZXF1ZXN0ID0gMTw8MTY7Ci0rICAgICAgICBk Y3R4LT5yZXNlZWRfaW50ZXJ2YWwgPSAxPDwyNDsKLSsKLSsJcmV0dXJuIDE7Ci0rCX0KLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19saWIuYy5maXBzIG9wZW5z c2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19saWIuYwotLS0tIG9wZW5zc2wtMS4wLjFq L2NyeXB0by9maXBzL2ZpcHNfZHJiZ19saWIuYy5maXBzCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDk3 MzA2Mzc4ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2xp Yi5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDk3MzA2Mzc4ICswMjAwCi1AQCAtMCwwICsxLDU3OCBA QAotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcp IGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsg KiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0Ogot KyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4g QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAi T3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0 bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NM Lm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1h eSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVh ciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9u IG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2Yg YW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNr bm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5Z Ci0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBB UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsjaW5jbHVkZSAiZmlw c19yYW5kX2xjbC5oIgotKwotKy8qIFN1cHBvcnQgZnJhbWV3b3JrIGZvciBTUDgwMC05MCBEUkJH cyAqLwotKwotK2ludCBGSVBTX2RyYmdfaW5pdChEUkJHX0NUWCAqZGN0eCwgaW50IHR5cGUsIHVu c2lnbmVkIGludCBmbGFncykKLSsJewotKwlpbnQgcnY7Ci0rCW1lbXNldChkY3R4LCAwLCBzaXpl b2YoRFJCR19DVFgpKTsKLSsJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNF RDsKLSsJZGN0eC0+eGZsYWdzID0gZmxhZ3M7Ci0rCWRjdHgtPnR5cGUgPSB0eXBlOwotKwotKwlk Y3R4LT5pZmxhZ3MgPSAwOwotKwlkY3R4LT5lbnRyb3B5X2Jsb2NrbGVuID0gMDsKLSsJZGN0eC0+ aGVhbHRoX2NoZWNrX2NudCA9IDA7Ci0rCWRjdHgtPmhlYWx0aF9jaGVja19pbnRlcnZhbCA9IERS QkdfSEVBTFRIX0lOVEVSVkFMOwotKwotKwlydiA9IGZpcHNfZHJiZ19oYXNoX2luaXQoZGN0eCk7 Ci0rCi0rCWlmIChydiA9PSAtMikKLSsJCXJ2ID0gZmlwc19kcmJnX2N0cl9pbml0KGRjdHgpOwot KwlpZiAocnYgPT0gLTIpCi0rCQlydiA9IGZpcHNfZHJiZ19obWFjX2luaXQoZGN0eCk7Ci0rCi0r CWlmIChydiA8PSAwKQotKwkJewotKwkJaWYgKHJ2ID09IC0yKQotKwkJCUZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19JTklULCBGSVBTX1JfVU5TVVBQT1JURURfRFJCR19UWVBFKTsKLSsJCWVsc2UK LSsJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5JVCwgRklQU19SX0VSUk9SX0lOSVRJQUxJ U0lOR19EUkJHKTsKLSsJCX0KLSsKLSsJLyogSWYgbm90IGluIHRlc3QgbW9kZSBydW4gc2VsZnRl c3RzIG9uIERSQkcgb2YgdGhlIHNhbWUgdHlwZSAqLwotKwotKwlpZiAoIShkY3R4LT54ZmxhZ3Mg JiBEUkJHX0ZMQUdfVEVTVCkpCi0rCQl7Ci0rCQlpZiAoIUZJUFNfZHJiZ19oZWFsdGhfY2hlY2so ZGN0eCkpCi0rCQkJewotKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTklULCBGSVBTX1Jf U0VMRlRFU1RfRkFJTFVSRSk7Ci0rCQkJcmV0dXJuIDA7Ci0rCQkJfQotKwkJfQotKwotKwlyZXR1 cm4gcnY7Ci0rCX0KLSsKLStEUkJHX0NUWCAqRklQU19kcmJnX25ldyhpbnQgdHlwZSwgdW5zaWdu ZWQgaW50IGZsYWdzKQotKwl7Ci0rCURSQkdfQ1RYICpkY3R4OwotKwlkY3R4ID0gT1BFTlNTTF9t YWxsb2Moc2l6ZW9mKERSQkdfQ1RYKSk7Ci0rCWlmICghZGN0eCkKLSsJCXsKLSsJCUZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19ORVcsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLSsJCXJldHVybiBO VUxMOwotKwkJfQotKwotKwlpZiAodHlwZSA9PSAwKQotKwkJewotKwkJbWVtc2V0KGRjdHgsIDAs IHNpemVvZihEUkJHX0NUWCkpOwotKwkJZGN0eC0+dHlwZSA9IDA7Ci0rCQlkY3R4LT5zdGF0dXMg PSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEOwotKwkJcmV0dXJuIGRjdHg7Ci0rCQl9Ci0rCi0r CWlmIChGSVBTX2RyYmdfaW5pdChkY3R4LCB0eXBlLCBmbGFncykgPD0gMCkKLSsJCXsKLSsJCU9Q RU5TU0xfZnJlZShkY3R4KTsKLSsJCXJldHVybiBOVUxMOwotKwkJfQotKwkJCi0rCXJldHVybiBk Y3R4OwotKwl9Ci0rCi0rdm9pZCBGSVBTX2RyYmdfZnJlZShEUkJHX0NUWCAqZGN0eCkKLSsJewot KwlpZiAoZGN0eC0+dW5pbnN0YW50aWF0ZSkKLSsJCWRjdHgtPnVuaW5zdGFudGlhdGUoZGN0eCk7 Ci0rCS8qIERvbid0IGZyZWUgdXAgZGVmYXVsdCBEUkJHICovCi0rCWlmIChkY3R4ID09IEZJUFNf Z2V0X2RlZmF1bHRfZHJiZygpKQotKwkJewotKwkJbWVtc2V0KGRjdHgsIDAsIHNpemVvZihEUkJH X0NUWCkpOwotKwkJZGN0eC0+dHlwZSA9IDA7Ci0rCQlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRV U19VTklOSVRJQUxJU0VEOwotKwkJfQotKwllbHNlCi0rCQl7Ci0rCQlPUEVOU1NMX2NsZWFuc2Uo JmRjdHgtPmQsIHNpemVvZihkY3R4LT5kKSk7Ci0rCQlPUEVOU1NMX2ZyZWUoZGN0eCk7Ci0rCQl9 Ci0rCX0KLSsKLStzdGF0aWMgc2l6ZV90IGZpcHNfZ2V0X2VudHJvcHkoRFJCR19DVFggKmRjdHgs IHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKwkJCQlpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4s IHNpemVfdCBtYXhfbGVuKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgKnRvdXQsICpwOwotKwlzaXpl X3QgYmwgPSBkY3R4LT5lbnRyb3B5X2Jsb2NrbGVuLCBydjsKLSsJaWYgKCFkY3R4LT5nZXRfZW50 cm9weSkKLSsJCXJldHVybiAwOwotKwlpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1Qg fHwgIWJsKQotKwkJcmV0dXJuIGRjdHgtPmdldF9lbnRyb3B5KGRjdHgsIHBvdXQsIGVudHJvcHks IG1pbl9sZW4sIG1heF9sZW4pOwotKwlydiA9IGRjdHgtPmdldF9lbnRyb3B5KGRjdHgsICZ0b3V0 LCBlbnRyb3B5ICsgYmwsCi0rCQkJCW1pbl9sZW4gKyBibCwgbWF4X2xlbiArIGJsKTsKLSsJaWYg KHRvdXQgPT0gTlVMTCkKLSsJCXJldHVybiAwOwotKwkqcG91dCA9IHRvdXQgKyBibDsKLSsJaWYg KHJ2IDwgKG1pbl9sZW4gKyBibCkgfHwgKHJ2ICUgYmwpKQotKwkJcmV0dXJuIDA7Ci0rCS8qIENv bXBhcmUgY29uc2VjdXRpdmUgYmxvY2tzIGZvciBjb250aW51b3VzIFBSTkcgdGVzdCAqLwotKwlm b3IgKHAgPSB0b3V0OyBwIDwgdG91dCArIHJ2IC0gYmw7IHAgKz0gYmwpCi0rCQl7Ci0rCQlpZiAo IW1lbWNtcChwLCBwICsgYmwsIGJsKSkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfRklQU19H RVRfRU5UUk9QWSwgRklQU19SX0VOVFJPUFlfU09VUkNFX1NUVUNLKTsKLSsJCQlyZXR1cm4gMDsK LSsJCQl9Ci0rCQl9Ci0rCXJ2IC09IGJsOwotKwlpZiAocnYgPiBtYXhfbGVuKQotKwkJcmV0dXJu IG1heF9sZW47Ci0rCXJldHVybiBydjsKLSsJfQotKwotK3N0YXRpYyB2b2lkIGZpcHNfY2xlYW51 cF9lbnRyb3B5KERSQkdfQ1RYICpkY3R4LAotKwkJCQkJdW5zaWduZWQgY2hhciAqb3V0LCBzaXpl X3Qgb2xlbikKLSsJewotKwlzaXplX3QgYmw7Ci0rCWlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZM QUdfVEVTVCkKLSsJCWJsID0gMDsKLSsJZWxzZQotKwkJYmwgPSBkY3R4LT5lbnRyb3B5X2Jsb2Nr bGVuOwotKwkvKiBDYWxsIGNsZWFudXAgd2l0aCBvcmlnaW5hbCBhcmd1bWVudHMgKi8KLSsJZGN0 eC0+Y2xlYW51cF9lbnRyb3B5KGRjdHgsIG91dCAtIGJsLCBvbGVuICsgYmwpOwotKwl9Ci0rCi0r Ci0raW50IEZJUFNfZHJiZ19pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKLSsJCQkJY29uc3Qg dW5zaWduZWQgY2hhciAqcGVycywgc2l6ZV90IHBlcnNsZW4pCi0rCXsKLSsJc2l6ZV90IGVudGxl biA9IDAsIG5vbmNlbGVuID0gMDsKLSsJdW5zaWduZWQgY2hhciAqbm9uY2UgPSBOVUxMLCAqZW50 cm9weSA9IE5VTEw7Ci0rCi0rI2lmIDAKLSsJLyogUHV0IGhlcmUgc28gZXJyb3Igc2NyaXB0IHBp Y2tzIHRoZW0gdXAgKi8KLSsJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLAot KwkJCQlGSVBTX1JfUEVSU09OQUxJU0FUSU9OX1NUUklOR19UT09fTE9ORyk7Ci0rCUZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQU19SX0lOX0VSUk9SX1NUQVRFKTsKLSsJ RklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfQUxSRUFEWV9JTlNU QU5USUFURUQpOwotKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNf Ul9FUlJPUl9SRVRSSUVWSU5HX0VOVFJPUFkpOwotKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdf SU5TVEFOVElBVEUsIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX05PTkNFKTsKLSsJRklQU2VycihG SVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfSU5TVEFOVElBVEVfRVJST1IpOwot KwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9EUkJHX05PVF9J TklUSUFMSVNFRCk7Ci0rI2VuZGlmCi0rCi0rCWludCByID0gMDsKLSsKLSsJaWYgKHBlcnNsZW4g PiBkY3R4LT5tYXhfcGVycykKLSsJCXsKLSsJCXIgPSBGSVBTX1JfUEVSU09OQUxJU0FUSU9OX1NU UklOR19UT09fTE9ORzsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIWRjdHgtPmluc3Rh bnRpYXRlKQotKwkJewotKwkJciA9IEZJUFNfUl9EUkJHX05PVF9JTklUSUFMSVNFRDsKLSsJCWdv dG8gZW5kOwotKwkJfQotKwotKwlpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1VOSU5J VElBTElTRUQpCi0rCQl7Ci0rCQlpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX0VSUk9S KQotKwkJCXIgPSBGSVBTX1JfSU5fRVJST1JfU1RBVEU7Ci0rCQllbHNlCi0rCQkJciA9IEZJUFNf Ul9BTFJFQURZX0lOU1RBTlRJQVRFRDsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlkY3R4LT5z dGF0dXMgPSBEUkJHX1NUQVRVU19FUlJPUjsKLSsKLSsJZW50bGVuID0gZmlwc19nZXRfZW50cm9w eShkY3R4LCAmZW50cm9weSwgZGN0eC0+c3RyZW5ndGgsCi0rCQkJCWRjdHgtPm1pbl9lbnRyb3B5 LCBkY3R4LT5tYXhfZW50cm9weSk7Ci0rCi0rCWlmIChlbnRsZW4gPCBkY3R4LT5taW5fZW50cm9w eSB8fCBlbnRsZW4gPiBkY3R4LT5tYXhfZW50cm9weSkKLSsJCXsKLSsJCXIgPSBGSVBTX1JfRVJS T1JfUkVUUklFVklOR19FTlRST1BZOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmIChkY3R4 LT5tYXhfbm9uY2UgPiAwICYmIGRjdHgtPmdldF9ub25jZSkKLSsJCXsKLSsJCW5vbmNlbGVuID0g ZGN0eC0+Z2V0X25vbmNlKGRjdHgsICZub25jZSwKLSsJCQkJCWRjdHgtPnN0cmVuZ3RoIC8gMiwK LSsJCQkJCWRjdHgtPm1pbl9ub25jZSwgZGN0eC0+bWF4X25vbmNlKTsKLSsKLSsJCWlmIChub25j ZWxlbiA8IGRjdHgtPm1pbl9ub25jZSB8fCBub25jZWxlbiA+IGRjdHgtPm1heF9ub25jZSkKLSsJ CQl7Ci0rCQkJciA9IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX05PTkNFOwotKwkJCWdvdG8gZW5k OwotKwkJCX0KLSsKLSsJCX0KLSsKLSsJaWYgKCFkY3R4LT5pbnN0YW50aWF0ZShkY3R4LCAKLSsJ CQkJZW50cm9weSwgZW50bGVuLAotKwkJCQlub25jZSwgbm9uY2VsZW4sCi0rCQkJCXBlcnMsIHBl cnNsZW4pKQotKwkJewotKwkJciA9IEZJUFNfUl9FUlJPUl9JTlNUQU5USUFUSU5HX0RSQkc7Ci0r CQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsKLSsJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfUkVB RFk7Ci0rCWlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfQ1VTVE9NX1JFU0VFRCkpCi0rCQlkY3R4 LT5yZXNlZWRfY291bnRlciA9IDE7Ci0rCi0rCWVuZDoKLSsKLSsJaWYgKGVudHJvcHkgJiYgZGN0 eC0+Y2xlYW51cF9lbnRyb3B5KQotKwkJZmlwc19jbGVhbnVwX2VudHJvcHkoZGN0eCwgZW50cm9w eSwgZW50bGVuKTsKLSsKLSsJaWYgKG5vbmNlICYmIGRjdHgtPmNsZWFudXBfbm9uY2UpCi0rCQlk Y3R4LT5jbGVhbnVwX25vbmNlKGRjdHgsIG5vbmNlLCBub25jZWxlbik7Ci0rCi0rCWlmIChkY3R4 LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfUkVBRFkpCi0rCQlyZXR1cm4gMTsKLSsKLSsJaWYgKHIg JiYgIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0ZMQUdfTk9FUlIpKQotKwkJRklQU2VycihGSVBTX0Zf RklQU19EUkJHX0lOU1RBTlRJQVRFLCByKTsKLSsKLSsJcmV0dXJuIDA7Ci0rCi0rCX0KLSsKLStz dGF0aWMgaW50IGRyYmdfcmVzZWVkKERSQkdfQ1RYICpkY3R4LAotKwkJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuLCBpbnQgaGNoZWNrKQotKwl7Ci0rCXVuc2lnbmVk IGNoYXIgKmVudHJvcHkgPSBOVUxMOwotKwlzaXplX3QgZW50bGVuID0gMDsKLSsJaW50IHIgPSAw OwotKwotKyNpZiAwCi0rCUZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVELCBGSVBTX1JfTk9UX0lO U1RBTlRJQVRFRCk7Ci0rCUZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVELCBGSVBTX1JfQURESVRJ T05BTF9JTlBVVF9UT09fTE9ORyk7Ci0rI2VuZGlmCi0rCWlmIChkY3R4LT5zdGF0dXMgIT0gRFJC R19TVEFUVVNfUkVBRFkKLSsJCSYmIGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19SRVNFRUQp Ci0rCQl7Ci0rCQlpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX0VSUk9SKQotKwkJCXIg PSBGSVBTX1JfSU5fRVJST1JfU1RBVEU7Ci0rCQllbHNlIGlmKGRjdHgtPnN0YXR1cyA9PSBEUkJH X1NUQVRVU19VTklOSVRJQUxJU0VEKQotKwkJCXIgPSBGSVBTX1JfTk9UX0lOU1RBTlRJQVRFRDsK LSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIWFkaW4pCi0rCQlhZGlubGVuID0gMDsKLSsJ ZWxzZSBpZiAoYWRpbmxlbiA+IGRjdHgtPm1heF9hZGluKQotKwkJewotKwkJciA9IEZJUFNfUl9B RERJVElPTkFMX0lOUFVUX1RPT19MT05HOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWRjdHgt PnN0YXR1cyA9IERSQkdfU1RBVFVTX0VSUk9SOwotKwkvKiBQZWZvcm0gaGVhbHRoIGNoZWNrIG9u IGFsbCByZXNlZWQgb3BlcmF0aW9ucyBpZiBub3QgYSBwcmVkaWN0aW9uCi0rCSAqIHJlc2lzdGFu Y2UgcmVxdWVzdCBhbmQgbm90IGluIHRlc3QgbW9kZS4KLSsJICovCi0rCWlmIChoY2hlY2sgJiYg IShkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkpCi0rCQl7Ci0rCQlpZiAoIUZJUFNfZHJi Z19oZWFsdGhfY2hlY2soZGN0eCkpCi0rCQkJewotKwkJCXIgPSBGSVBTX1JfU0VMRlRFU1RfRkFJ TFVSRTsKLSsJCQlnb3RvIGVuZDsKLSsJCQl9Ci0rCQl9Ci0rCi0rCWVudGxlbiA9IGZpcHNfZ2V0 X2VudHJvcHkoZGN0eCwgJmVudHJvcHksIGRjdHgtPnN0cmVuZ3RoLAotKwkJCQlkY3R4LT5taW5f ZW50cm9weSwgZGN0eC0+bWF4X2VudHJvcHkpOwotKwotKwlpZiAoZW50bGVuIDwgZGN0eC0+bWlu X2VudHJvcHkgfHwgZW50bGVuID4gZGN0eC0+bWF4X2VudHJvcHkpCi0rCQl7Ci0rCQlyID0gRklQ U19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlp ZiAoIWRjdHgtPnJlc2VlZChkY3R4LCBlbnRyb3B5LCBlbnRsZW4sIGFkaW4sIGFkaW5sZW4pKQot KwkJZ290byBlbmQ7Ci0rCi0rCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1JFQURZOwotKwlp ZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQpKQotKwkJZGN0eC0+cmVzZWVk X2NvdW50ZXIgPSAxOwotKwllbmQ6Ci0rCi0rCWlmIChlbnRyb3B5ICYmIGRjdHgtPmNsZWFudXBf ZW50cm9weSkKLSsJCWZpcHNfY2xlYW51cF9lbnRyb3B5KGRjdHgsIGVudHJvcHksIGVudGxlbik7 Ci0rCi0rCWlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfUkVBRFkpCi0rCQlyZXR1cm4g MTsKLSsKLSsJaWYgKHIgJiYgIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0ZMQUdfTk9FUlIpKQotKwkJ RklQU2VycihGSVBTX0ZfRFJCR19SRVNFRUQsIHIpOwotKwotKwlyZXR1cm4gMDsKLSsJfQotKwot K2ludCBGSVBTX2RyYmdfcmVzZWVkKERSQkdfQ1RYICpkY3R4LAotKwkJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQotKwl7Ci0rCXJldHVybiBkcmJnX3Jlc2VlZChk Y3R4LCBhZGluLCBhZGlubGVuLCAxKTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZmlwc19kcmJnX2No ZWNrKERSQkdfQ1RYICpkY3R4KQotKwl7Ci0rCWlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdf VEVTVCkKLSsJCXJldHVybiAxOwotKwlkY3R4LT5oZWFsdGhfY2hlY2tfY250Kys7Ci0rCWlmIChk Y3R4LT5oZWFsdGhfY2hlY2tfY250ID49IGRjdHgtPmhlYWx0aF9jaGVja19pbnRlcnZhbCkKLSsJ CXsKLSsJCWlmICghRklQU19kcmJnX2hlYWx0aF9jaGVjayhkY3R4KSkKLSsJCQl7Ci0rCQkJRklQ U2VycihGSVBTX0ZfRklQU19EUkJHX0NIRUNLLCBGSVBTX1JfU0VMRlRFU1RfRkFJTFVSRSk7Ci0r CQkJcmV0dXJuIDA7Ci0rCQkJfQotKwkJfQotKwlyZXR1cm4gMTsKLSsJfQotKwotK2ludCBGSVBT X2RyYmdfZ2VuZXJhdGUoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90 IG91dGxlbiwKLSsJCQlpbnQgcHJlZGljdGlvbl9yZXNpc3RhbmNlLAotKwkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQotKwl7Ci0rCWludCByID0gMDsKLSsKLSsJ aWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBT X0RSQkdfR0VORVJBVEUsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwkJcmV0dXJuIDA7Ci0r CQl9Ci0rCi0rCWlmICghZmlwc19kcmJnX2NoZWNrKGRjdHgpKQotKwkJcmV0dXJuIDA7Ci0rCi0r CWlmIChkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfUkVBRFkKLSsJCSYmIGRjdHgtPnN0YXR1 cyAhPSBEUkJHX1NUQVRVU19SRVNFRUQpCi0rCQl7Ci0rCQlpZiAoZGN0eC0+c3RhdHVzID09IERS QkdfU1RBVFVTX0VSUk9SKQotKwkJCXIgPSBGSVBTX1JfSU5fRVJST1JfU1RBVEU7Ci0rCQllbHNl IGlmKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKQotKwkJCXIgPSBG SVBTX1JfTk9UX0lOU1RBTlRJQVRFRDsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAob3V0 bGVuID4gZGN0eC0+bWF4X3JlcXVlc3QpCi0rCQl7Ci0rCQlyID0gRklQU19SX1JFUVVFU1RfVE9P X0xBUkdFX0ZPUl9EUkJHOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCi0rCWlmIChhZGlubGVuID4g ZGN0eC0+bWF4X2FkaW4pCi0rCQl7Ci0rCQlyID0gRklQU19SX0FERElUSU9OQUxfSU5QVVRfVE9P X0xPTkc7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKGRjdHgtPmlmbGFncyAmIERSQkdf Q1VTVE9NX1JFU0VFRCkKLSsJCWRjdHgtPmdlbmVyYXRlKGRjdHgsIE5VTEwsIG91dGxlbiwgTlVM TCwgMCk7Ci0rCWVsc2UgaWYgKGRjdHgtPnJlc2VlZF9jb3VudGVyID49IGRjdHgtPnJlc2VlZF9p bnRlcnZhbCkKLSsJCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1JFU0VFRDsKLSsKLSsJaWYg KGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRVNFRUQgfHwgcHJlZGljdGlvbl9yZXNpc3Rh bmNlKQotKwkJewotKwkJLyogSWYgcHJlZGljdGlvbiByZXNpc3RhbmNlIHJlcXVlc3QgZG9uJ3Qg ZG8gaGVhbHRoIGNoZWNrICovCi0rCQlpbnQgaGNoZWNrID0gcHJlZGljdGlvbl9yZXNpc3RhbmNl ID8gMCA6IDE7Ci0rCQkKLSsJCWlmICghZHJiZ19yZXNlZWQoZGN0eCwgYWRpbiwgYWRpbmxlbiwg aGNoZWNrKSkKLSsJCQl7Ci0rCQkJciA9IEZJUFNfUl9SRVNFRURfRVJST1I7Ci0rCQkJZ290byBl bmQ7Ci0rCQkJfQotKwkJYWRpbiA9IE5VTEw7Ci0rCQlhZGlubGVuID0gMDsKLSsJCX0KLSsKLSsJ aWYgKCFkY3R4LT5nZW5lcmF0ZShkY3R4LCBvdXQsIG91dGxlbiwgYWRpbiwgYWRpbmxlbikpCi0r CQl7Ci0rCQlyID0gRklQU19SX0dFTkVSQVRFX0VSUk9SOwotKwkJZGN0eC0+c3RhdHVzID0gRFJC R19TVEFUVVNfRVJST1I7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsJaWYgKCEoZGN0eC0+aWZsYWdz ICYgRFJCR19DVVNUT01fUkVTRUVEKSkKLSsJCXsKLSsJCWlmIChkY3R4LT5yZXNlZWRfY291bnRl ciA+PSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWwpCi0rCQkJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFU VVNfUkVTRUVEOwotKwkJZWxzZQotKwkJCWRjdHgtPnJlc2VlZF9jb3VudGVyKys7Ci0rCQl9Ci0r Ci0rCWVuZDoKLSsJaWYgKHIpCi0rCQl7Ci0rCQlpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0ZM QUdfTk9FUlIpKQotKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19HRU5FUkFURSwgcik7Ci0r CQlyZXR1cm4gMDsKLSsJCX0KLSsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgRklQU19kcmJn X3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJaW50IHJ2OwotKwlpZiAoIWRj dHgtPnVuaW5zdGFudGlhdGUpCi0rCQlydiA9IDE7Ci0rCWVsc2UKLSsJCXJ2ID0gZGN0eC0+dW5p bnN0YW50aWF0ZShkY3R4KTsKLSsJLyogQWx0aG91Z2ggd2UnZCBsaWtlIHRvIGNsZWFuc2UgaGVy ZSB3ZSBjYW4ndCBiZWNhdXNlIHdlIGhhdmUgdG8KLSsJICogdGVzdCB0aGUgdW5pbnN0YW50aWF0 ZSByZWFsbHkgemVyb2VzIHRoZSBkYXRhLgotKwkgKi8KLSsJbWVtc2V0KCZkY3R4LT5kLCAwLCBz aXplb2YoZGN0eC0+ZCkpOwotKwlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJ U0VEOwotKwkvKiBJZiBtZXRob2QgaGFzIHByb2JsZW1zIHVuaW5zdGFudGlhdGluZywgcmV0dXJu IGVycm9yICovCi0rCXJldHVybiBydjsKLSsJfQotKwotK2ludCBGSVBTX2RyYmdfc2V0X2NhbGxi YWNrcyhEUkJHX0NUWCAqZGN0eCwKLSsJc2l6ZV90ICgqZ2V0X2VudHJvcHkpKERSQkdfQ1RYICpj dHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKwkJCQlpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9s ZW4sIHNpemVfdCBtYXhfbGVuKSwKLSsJdm9pZCAoKmNsZWFudXBfZW50cm9weSkoRFJCR19DVFgg KmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbiksCi0rCXNpemVfdCBlbnRyb3B5 X2Jsb2NrbGVuLAotKwlzaXplX3QgKCpnZXRfbm9uY2UpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVk IGNoYXIgKipwb3V0LAotKwkJCQlpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBt YXhfbGVuKSwKLSsJdm9pZCAoKmNsZWFudXBfbm9uY2UpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVk IGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pKQotKwl7Ci0rCWlmIChkY3R4LT5zdGF0dXMgIT0gRFJC R19TVEFUVVNfVU5JTklUSUFMSVNFRCkKLSsJCXJldHVybiAwOwotKwlkY3R4LT5lbnRyb3B5X2Js b2NrbGVuID0gZW50cm9weV9ibG9ja2xlbjsKLSsJZGN0eC0+Z2V0X2VudHJvcHkgPSBnZXRfZW50 cm9weTsKLSsJZGN0eC0+Y2xlYW51cF9lbnRyb3B5ID0gY2xlYW51cF9lbnRyb3B5OwotKwlkY3R4 LT5nZXRfbm9uY2UgPSBnZXRfbm9uY2U7Ci0rCWRjdHgtPmNsZWFudXBfbm9uY2UgPSBjbGVhbnVw X25vbmNlOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK2ludCBGSVBTX2RyYmdfc2V0X3JhbmRfY2Fs bGJhY2tzKERSQkdfQ1RYICpkY3R4LAotKwlzaXplX3QgKCpnZXRfYWRpbikoRFJCR19DVFggKmN0 eCwgdW5zaWduZWQgY2hhciAqKnBvdXQpLAotKwl2b2lkICgqY2xlYW51cF9hZGluKShEUkJHX0NU WCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKSwKLSsJaW50ICgqcmFuZF9z ZWVkX2NiKShEUkJHX0NUWCAqY3R4LCBjb25zdCB2b2lkICpidWYsIGludCBudW0pLAotKwlpbnQg KCpyYW5kX2FkZF9jYikoRFJCR19DVFggKmN0eCwKLSsJCQkJY29uc3Qgdm9pZCAqYnVmLCBpbnQg bnVtLCBkb3VibGUgZW50cm9weSkpCi0rCXsKLSsJaWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NU QVRVU19VTklOSVRJQUxJU0VEKQotKwkJcmV0dXJuIDA7Ci0rCWRjdHgtPmdldF9hZGluID0gZ2V0 X2FkaW47Ci0rCWRjdHgtPmNsZWFudXBfYWRpbiA9IGNsZWFudXBfYWRpbjsKLSsJZGN0eC0+cmFu ZF9zZWVkX2NiID0gcmFuZF9zZWVkX2NiOwotKwlkY3R4LT5yYW5kX2FkZF9jYiA9IHJhbmRfYWRk X2NiOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3ZvaWQgKkZJUFNfZHJiZ19nZXRfYXBwX2RhdGEo RFJCR19DVFggKmRjdHgpCi0rCXsKLSsJcmV0dXJuIGRjdHgtPmFwcF9kYXRhOwotKwl9Ci0rCi0r dm9pZCBGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKERSQkdfQ1RYICpkY3R4LCB2b2lkICphcHBfZGF0 YSkKLSsJewotKwlkY3R4LT5hcHBfZGF0YSA9IGFwcF9kYXRhOwotKwl9Ci0rCi0rc2l6ZV90IEZJ UFNfZHJiZ19nZXRfYmxvY2tsZW5ndGgoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJcmV0dXJuIGRj dHgtPmJsb2NrbGVuZ3RoOwotKwl9Ci0rCi0raW50IEZJUFNfZHJiZ19nZXRfc3RyZW5ndGgoRFJC R19DVFggKmRjdHgpCi0rCXsKLSsJcmV0dXJuIGRjdHgtPnN0cmVuZ3RoOwotKwl9Ci0rCi0rdm9p ZCBGSVBTX2RyYmdfc2V0X2NoZWNrX2ludGVydmFsKERSQkdfQ1RYICpkY3R4LCBpbnQgaW50ZXJ2 YWwpCi0rCXsKLSsJZGN0eC0+aGVhbHRoX2NoZWNrX2ludGVydmFsID0gaW50ZXJ2YWw7Ci0rCX0K LSsKLSt2b2lkIEZJUFNfZHJiZ19zZXRfcmVzZWVkX2ludGVydmFsKERSQkdfQ1RYICpkY3R4LCBp bnQgaW50ZXJ2YWwpCi0rCXsKLSsJZGN0eC0+cmVzZWVkX2ludGVydmFsID0gaW50ZXJ2YWw7Ci0r CX0KLSsKLStzdGF0aWMgaW50IGRyYmdfc3RpY2sgPSAwOwotKwotK3ZvaWQgRklQU19kcmJnX3N0 aWNrKGludCBvbm9mZikKLSsJewotKwlkcmJnX3N0aWNrID0gb25vZmY7Ci0rCX0KLSsKLSsvKiBD b250aW51b3VzIERSQkcgdXRpbGl0eSBmdW5jdGlvbiAqLwotK2ludCBmaXBzX2RyYmdfY3Bybmdf dGVzdChEUkJHX0NUWCAqZGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqb3V0KQotKwl7Ci0rCS8q IE5vIENQUk5HIGluIHRlc3QgbW9kZSAqLwotKwlpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFH X1RFU1QpCi0rCQlyZXR1cm4gMTsKLSsJLyogQ2hlY2sgYmxvY2sgaXMgdmFsaWQ6IHNob3VsZCBu ZXZlciBoYXBwZW4gKi8KLSsJaWYgKGRjdHgtPmxiX3ZhbGlkID09IDApCi0rCQl7Ci0rCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfQ1BSTkdfVEVTVCwgRklQU19SX0lOVEVSTkFMX0VSUk9SKTsK LSsJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlpZiAo ZHJiZ19zdGljaykKLSsJCW1lbWNweShkY3R4LT5sYiwgb3V0LCBkY3R4LT5ibG9ja2xlbmd0aCk7 Ci0rCS8qIENoZWNrIGFnYWluc3QgbGFzdCBibG9jazogZmFpbCBpZiBtYXRjaCAqLwotKwlpZiAo IW1lbWNtcChkY3R4LT5sYiwgb3V0LCBkY3R4LT5ibG9ja2xlbmd0aCkpCi0rCQl7Ci0rCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfQ1BSTkdfVEVTVCwgRklQU19SX0RSQkdfU1RVQ0spOwotKwkJ Zmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCS8qIFNhdmUg bGFzdCBibG9jayBmb3IgbmV4dCBjb21wYXJpc29uICovCi0rCW1lbWNweShkY3R4LT5sYiwgb3V0 LCBkY3R4LT5ibG9ja2xlbmd0aCk7Ci0rCXJldHVybiAxOwotKwl9Ci1kaWZmIC11cCBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX2RyYmdfcmFuZC5jLmZpcHMgb3BlbnNzbC0xLjAuMWov Y3J5cHRvL2ZpcHMvZmlwc19kcmJnX3JhbmQuYwotLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9m aXBzL2ZpcHNfZHJiZ19yYW5kLmMuZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5NzMwNjM3OCAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMJMjAx NC0xMC0xNiAxMzoxOTozNS4wOTczMDYzNzggKzAyMDAKLUBAIC0wLDAgKzEsMTcyIEBACi0rLyog Zmlwcy9yYW5kL2ZpcHNfZHJiZ19yYW5kLmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4g 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 IDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKLSsKLSsvKiBNYXBw aW5nIG9mIFNQODAwLTkwIERSQkdzIHRvIE9wZW5TU0wgUkFORF9NRVRIT0QgKi8KLSsKLSsvKiBT aW5jZSB3ZSBvbmx5IGhhdmUgb25lIGdsb2JhbCBQUk5HIHVzZWQgYXQgYW55IHRpbWUgaW4gT3Bl blNTTCB1c2UgYSBnbG9iYWwKLSsgKiB2YXJpYWJsZSB0byBzdG9yZSBjb250ZXh0LgotKyAqLwot KwotK3N0YXRpYyBEUkJHX0NUWCBvc3NsX2RjdHg7Ci0rCi0rRFJCR19DVFggKkZJUFNfZ2V0X2Rl ZmF1bHRfZHJiZyh2b2lkKQotKwl7Ci0rCXJldHVybiAmb3NzbF9kY3R4OwotKwl9Ci0rCi0rc3Rh dGljIGludCBmaXBzX2RyYmdfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBpbnQgY291bnQpCi0r CXsKLSsJRFJCR19DVFggKmRjdHggPSAmb3NzbF9kY3R4OwotKwlpbnQgcnYgPSAwOwotKwl1bnNp Z25lZCBjaGFyICphZGluID0gTlVMTDsKLSsJc2l6ZV90IGFkaW5sZW4gPSAwOwotKwlDUllQVE9f d19sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlkbyAKLSsJCXsKLSsJCXNpemVfdCByY250Owot KwkJaWYgKGNvdW50ID4gKGludClkY3R4LT5tYXhfcmVxdWVzdCkKLSsJCQlyY250ID0gZGN0eC0+ bWF4X3JlcXVlc3Q7Ci0rCQllbHNlCi0rCQkJcmNudCA9IGNvdW50OwotKwkJaWYgKGRjdHgtPmdl dF9hZGluKQotKwkJCXsKLSsJCQlhZGlubGVuID0gZGN0eC0+Z2V0X2FkaW4oZGN0eCwgJmFkaW4p OwotKwkJCWlmIChhZGlubGVuICYmICFhZGluKQotKwkJCQl7Ci0rCQkJCUZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19CWVRFUywgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfQURESVRJT05BTF9JTlBV VCk7Ci0rCQkJCWdvdG8gZXJyOwotKwkJCQl9Ci0rCQkJfQotKwkJcnYgPSBGSVBTX2RyYmdfZ2Vu ZXJhdGUoZGN0eCwgb3V0LCByY250LCAwLCBhZGluLCBhZGlubGVuKTsKLSsJCWlmIChhZGluKQot KwkJCXsKLSsJCQlpZiAoZGN0eC0+Y2xlYW51cF9hZGluKQotKwkJCQlkY3R4LT5jbGVhbnVwX2Fk aW4oZGN0eCwgYWRpbiwgYWRpbmxlbik7Ci0rCQkJYWRpbiA9IE5VTEw7Ci0rCQkJfQotKwkJaWYg KCFydikKLSsJCQlnb3RvIGVycjsKLSsJCW91dCArPSByY250OwotKwkJY291bnQgLT0gcmNudDsK LSsJCX0KLSsJd2hpbGUgKGNvdW50KTsKLSsJcnYgPSAxOwotKwllcnI6Ci0rCUNSWVBUT193X3Vu bG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0dXJuIHJ2OwotKwl9Ci0rCi0rc3RhdGljIGlu dCBmaXBzX2RyYmdfcHNldWRvKHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IGNvdW50KQotKwl7Ci0r CWlmIChmaXBzX2RyYmdfYnl0ZXMob3V0LCBjb3VudCkgPD0gMCkKLSsJCXJldHVybiAtMTsKLSsJ cmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19zdGF0dXModm9pZCkKLSsJ ewotKwlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7Ci0rCWludCBydjsKLSsJQ1JZUFRPX3Jf bG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcnYgPSBkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFU VVNfUkVBRFkgPyAxIDogMDsKLSsJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwot KwlyZXR1cm4gcnY7Ci0rCX0KLSsKLStzdGF0aWMgdm9pZCBmaXBzX2RyYmdfY2xlYW51cCh2b2lk KQotKwl7Ci0rCURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKLSsJQ1JZUFRPX3dfbG9jayhD UllQVE9fTE9DS19SQU5EKTsKLSsJRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCk7Ci0rCUNS WVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZmlw c19kcmJnX3NlZWQoY29uc3Qgdm9pZCAqc2VlZCwgaW50IHNlZWRsZW4pCi0rCXsKLSsJRFJCR19D VFggKmRjdHggPSAmb3NzbF9kY3R4OwotKwlpZiAoZGN0eC0+cmFuZF9zZWVkX2NiKQotKwkJcmV0 dXJuIGRjdHgtPnJhbmRfc2VlZF9jYihkY3R4LCBzZWVkLCBzZWVkbGVuKTsKLSsJcmV0dXJuIDE7 Ci0rCX0KLSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19hZGQoY29uc3Qgdm9pZCAqc2VlZCwgaW50 IHNlZWRsZW4sCi0rCQkJCQlkb3VibGUgYWRkX2VudHJvcHkpCi0rCXsKLSsJRFJCR19DVFggKmRj dHggPSAmb3NzbF9kY3R4OwotKwlpZiAoZGN0eC0+cmFuZF9hZGRfY2IpCi0rCQlyZXR1cm4gZGN0 eC0+cmFuZF9hZGRfY2IoZGN0eCwgc2VlZCwgc2VlZGxlbiwgYWRkX2VudHJvcHkpOwotKwlyZXR1 cm4gMTsKLSsJfQotKwotK3N0YXRpYyBjb25zdCBSQU5EX01FVEhPRCByYW5kX2RyYmdfbWV0aCA9 Ci0rCXsKLSsJZmlwc19kcmJnX3NlZWQsCi0rCWZpcHNfZHJiZ19ieXRlcywKLSsJZmlwc19kcmJn X2NsZWFudXAsCi0rCWZpcHNfZHJiZ19hZGQsCi0rCWZpcHNfZHJiZ19wc2V1ZG8sCi0rCWZpcHNf ZHJiZ19zdGF0dXMKLSsJfTsKLSsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU19kcmJnX21ldGhv ZCh2b2lkKQotKwl7Ci0rCXJldHVybiAmcmFuZF9kcmJnX21ldGg7Ci0rCX0KLSsKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5jLmZpcHMgb3Bl bnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuYy5maXBzCTIwMTQtMTAtMTYg MTM6MTk6MzUuMDk3MzA2Mzc4ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMv Zmlwc19kcmJnX3NlbGZ0ZXN0LmMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTczMDYzNzggKzAyMDAK LUBAIC0wLDAgKzEsODYyIEBACi0rLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ19zZWxmdGVzdC5jICov Ci0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykg Zm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAq IENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0r ICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn bWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJP cGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRv Ci0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0 dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wu b3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK LSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws Ci0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKLSsjaW5jbHVkZSAi Zmlwc19sb2NsLmgiCi0rCi0rI2luY2x1ZGUgImZpcHNfZHJiZ19zZWxmdGVzdC5oIgotKwotK3R5 cGVkZWYgc3RydWN0IHsKLSsJaW50IHBvc3Q7Ci0rCWludCBuaWQ7Ci0rCXVuc2lnbmVkIGludCBm bGFnczsKLSsKLSsJLyogS0FUIGRhdGEgZm9yIG5vIFBSICovCi0rCWNvbnN0IHVuc2lnbmVkIGNo YXIgKmVudDsKLSsJc2l6ZV90IGVudGxlbjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2U7 Ci0rCXNpemVfdCBub25jZWxlbjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqcGVyczsKLSsJc2l6 ZV90IHBlcnNsZW47Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW47Ci0rCXNpemVfdCBhZGlu bGVuOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICplbnRyZXNlZWQ7Ci0rCXNpemVfdCBlbnRyZXNl ZWRsZW47Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW5yZXNlZWQ7Ci0rCXNpemVfdCBhZGlu cmVzZWVkbGVuOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGluMjsKLSsJc2l6ZV90IGFkaW4y bGVuOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICprYXQ7Ci0rCXNpemVfdCBrYXRsZW47Ci0rCWNv bnN0IHVuc2lnbmVkIGNoYXIgKmthdDI7Ci0rCXNpemVfdCBrYXQybGVuOwotKwotKwkvKiBLQVQg ZGF0YSBmb3IgUFIgKi8KLSsJY29uc3QgdW5zaWduZWQgY2hhciAqZW50X3ByOwotKwlzaXplX3Qg ZW50bGVuX3ByOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZV9wcjsKLSsJc2l6ZV90IG5v bmNlbGVuX3ByOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzX3ByOwotKwlzaXplX3QgcGVy c2xlbl9wcjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbl9wcjsKLSsJc2l6ZV90IGFkaW5s ZW5fcHI7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudHByX3ByOwotKwlzaXplX3QgZW50cHJs ZW5fcHI7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW5nX3ByOwotKwlzaXplX3QgYWRpbmds ZW5fcHI7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudGdfcHI7Ci0rCXNpemVfdCBlbnRnbGVu X3ByOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICprYXRfcHI7Ci0rCXNpemVfdCBrYXRsZW5fcHI7 Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdDJfcHI7Ci0rCXNpemVfdCBrYXQybGVuX3ByOwot KwotKwl9IERSQkdfU0VMRlRFU1RfREFUQTsKLSsKLSsjZGVmaW5lIG1ha2VfZHJiZ190ZXN0X2Rh dGEobmlkLCBmbGFnLCBwciwgcCkge3AsIG5pZCwgZmxhZyB8IERSQkdfRkxBR19URVNULCBcCi0r CXByIyNfZW50cm9weWlucHV0LCBzaXplb2YocHIjI19lbnRyb3B5aW5wdXQpLCBcCi0rCXByIyNf bm9uY2UsIHNpemVvZihwciMjX25vbmNlKSwgXAotKwlwciMjX3BlcnNvbmFsaXphdGlvbnN0cmlu Zywgc2l6ZW9mKHByIyNfcGVyc29uYWxpemF0aW9uc3RyaW5nKSwgXAotKwlwciMjX2FkZGl0aW9u YWxpbnB1dCwgc2l6ZW9mKHByIyNfYWRkaXRpb25hbGlucHV0KSwgXAotKwlwciMjX2VudHJvcHlp bnB1dHJlc2VlZCwgc2l6ZW9mKHByIyNfZW50cm9weWlucHV0cmVzZWVkKSwgXAotKwlwciMjX2Fk ZGl0aW9uYWxpbnB1dHJlc2VlZCwgc2l6ZW9mKHByIyNfYWRkaXRpb25hbGlucHV0cmVzZWVkKSwg XAotKwlwciMjX2FkZGl0aW9uYWxpbnB1dDIsIHNpemVvZihwciMjX2FkZGl0aW9uYWxpbnB1dDIp LCBcCi0rCXByIyNfaW50X3JldHVybmVkYml0cywgc2l6ZW9mKHByIyNfaW50X3JldHVybmVkYml0 cyksIFwKLSsJcHIjI19yZXR1cm5lZGJpdHMsIHNpemVvZihwciMjX3JldHVybmVkYml0cyksIFwK LSsJcHIjI19wcl9lbnRyb3B5aW5wdXQsIHNpemVvZihwciMjX3ByX2VudHJvcHlpbnB1dCksIFwK LSsJcHIjI19wcl9ub25jZSwgc2l6ZW9mKHByIyNfcHJfbm9uY2UpLCBcCi0rCXByIyNfcHJfcGVy c29uYWxpemF0aW9uc3RyaW5nLCBzaXplb2YocHIjI19wcl9wZXJzb25hbGl6YXRpb25zdHJpbmcp LCBcCi0rCXByIyNfcHJfYWRkaXRpb25hbGlucHV0LCBzaXplb2YocHIjI19wcl9hZGRpdGlvbmFs aW5wdXQpLCBcCi0rCXByIyNfcHJfZW50cm9weWlucHV0cHIsIHNpemVvZihwciMjX3ByX2VudHJv cHlpbnB1dHByKSwgXAotKwlwciMjX3ByX2FkZGl0aW9uYWxpbnB1dDIsIHNpemVvZihwciMjX3By X2FkZGl0aW9uYWxpbnB1dDIpLCBcCi0rCXByIyNfcHJfZW50cm9weWlucHV0cHIyLCBzaXplb2Yo cHIjI19wcl9lbnRyb3B5aW5wdXRwcjIpLCBcCi0rCXByIyNfcHJfaW50X3JldHVybmVkYml0cywg c2l6ZW9mKHByIyNfcHJfaW50X3JldHVybmVkYml0cyksIFwKLSsJcHIjI19wcl9yZXR1cm5lZGJp dHMsIHNpemVvZihwciMjX3ByX3JldHVybmVkYml0cyksIFwKLSsJfQotKwotKyNkZWZpbmUgbWFr ZV9kcmJnX3Rlc3RfZGF0YV9kZihuaWQsIHByLCBwKSBcCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEo bmlkLCBEUkJHX0ZMQUdfQ1RSX1VTRV9ERiwgcHIsIHApCi0rCi0rI2RlZmluZSBtYWtlX2RyYmdf dGVzdF9kYXRhX2VjKGN1cnZlLCBtZCwgcHIsIHApIFwKLSsJbWFrZV9kcmJnX3Rlc3RfZGF0YSgo Y3VydmUgPDwgMTYpIHwgbWQgLCAwLCBwciwgcCkKLSsKLStzdGF0aWMgRFJCR19TRUxGVEVTVF9E QVRBIGRyYmdfdGVzdFtdID0gewotKwltYWtlX2RyYmdfdGVzdF9kYXRhX2RmKE5JRF9hZXNfMTI4 X2N0ciwgYWVzXzEyOF91c2VfZGYsIDApLAotKwltYWtlX2RyYmdfdGVzdF9kYXRhX2RmKE5JRF9h ZXNfMTkyX2N0ciwgYWVzXzE5Ml91c2VfZGYsIDApLAotKwltYWtlX2RyYmdfdGVzdF9kYXRhX2Rm KE5JRF9hZXNfMjU2X2N0ciwgYWVzXzI1Nl91c2VfZGYsIDEpLAotKwltYWtlX2RyYmdfdGVzdF9k YXRhKE5JRF9hZXNfMTI4X2N0ciwgMCwgYWVzXzEyOF9ub19kZiwgMCksCi0rCW1ha2VfZHJiZ190 ZXN0X2RhdGEoTklEX2Flc18xOTJfY3RyLCAwLCBhZXNfMTkyX25vX2RmLCAwKSwKLSsJbWFrZV9k cmJnX3Rlc3RfZGF0YShOSURfYWVzXzI1Nl9jdHIsIDAsIGFlc18yNTZfbm9fZGYsIDEpLAotKwlt YWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGExLCAwLCBzaGExLCAwKSwKLSsJbWFrZV9kcmJnX3Rl c3RfZGF0YShOSURfc2hhMjI0LCAwLCBzaGEyMjQsIDApLAotKwltYWtlX2RyYmdfdGVzdF9kYXRh KE5JRF9zaGEyNTYsIDAsIHNoYTI1NiwgMSksCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3No YTM4NCwgMCwgc2hhMzg0LCAwKSwKLSsJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hhNTEyLCAw LCBzaGE1MTIsIDApLAotKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNIQTEsIDAs IGhtYWNfc2hhMSwgMCksCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2htYWNXaXRoU0hBMjI0 LCAwLCBobWFjX3NoYTIyNCwgMCksCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2htYWNXaXRo U0hBMjU2LCAwLCBobWFjX3NoYTI1NiwgMSksCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2ht YWNXaXRoU0hBMzg0LCAwLCBobWFjX3NoYTM4NCwgMCksCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEo TklEX2htYWNXaXRoU0hBNTEyLCAwLCBobWFjX3NoYTUxMiwgMCksCi0rCXswLDAsMH0KLSsJfTsK LSsKLSt0eXBlZGVmIHN0cnVjdCAKLSsJewotKwljb25zdCB1bnNpZ25lZCBjaGFyICplbnQ7Ci0r CXNpemVfdCBlbnRsZW47Ci0rCWludCBlbnRjbnQ7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5v bmNlOwotKwlzaXplX3Qgbm9uY2VsZW47Ci0rCWludCBub25jZWNudDsKLSsJfSBURVNUX0VOVDsK LSsKLStzdGF0aWMgc2l6ZV90IHRlc3RfZW50cm9weShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQg Y2hhciAqKnBvdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9w eSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQotKwl7Ci0rCVRFU1RfRU5UICp0ID0g RklQU19kcmJnX2dldF9hcHBfZGF0YShkY3R4KTsKLSsJKnBvdXQgPSAodW5zaWduZWQgY2hhciAq KXQtPmVudDsKLSsJdC0+ZW50Y250Kys7Ci0rCXJldHVybiB0LT5lbnRsZW47Ci0rCX0KLSsKLStz dGF0aWMgc2l6ZV90IHRlc3Rfbm9uY2UoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKipw b3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVf dCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbikKLSsJewotKwlURVNUX0VOVCAqdCA9IEZJUFNfZHJi Z19nZXRfYXBwX2RhdGEoZGN0eCk7Ci0rCSpwb3V0ID0gKHVuc2lnbmVkIGNoYXIgKil0LT5ub25j ZTsKLSsJdC0+bm9uY2VjbnQrKzsKLSsJcmV0dXJuIHQtPm5vbmNlbGVuOwotKwl9Ci0rCi0rc3Rh dGljIGludCBmaXBzX2RyYmdfc2luZ2xlX2thdChEUkJHX0NUWCAqZGN0eCwgRFJCR19TRUxGVEVT VF9EQVRBICp0ZCwKLSsJCQkJCQkJCWludCBxdWljaykKLSsJewotKwlURVNUX0VOVCB0OwotKwlp bnQgcnYgPSAwOwotKwlzaXplX3QgYWRpbmxlbjsKLSsJdW5zaWduZWQgY2hhciByYW5kb3V0WzEw MjRdOwotKwotKwkvKiBJbml0aWFsIHRlc3Qgd2l0aG91dCBQUiAqLwotKwotKwkvKiBJbnN0YW50 aWF0ZSBEUkJHIHdpdGggdGVzdCBlbnRyb3B5LCBub25jZSBhbmQgcGVyc29uYWxpc2F0aW9uCi0r CSAqIHN0cmluZy4KLSsJICovCi0rCi0rCWlmICghRklQU19kcmJnX2luaXQoZGN0eCwgdGQtPm5p ZCwgdGQtPmZsYWdzKSkKLSsJCXJldHVybiAwOwotKwlpZiAoIUZJUFNfZHJiZ19zZXRfY2FsbGJh Y2tzKGRjdHgsIHRlc3RfZW50cm9weSwgMCwgMCwgdGVzdF9ub25jZSwgMCkpCi0rCQlyZXR1cm4g MDsKLSsKLSsJRklQU19kcmJnX3NldF9hcHBfZGF0YShkY3R4LCAmdCk7Ci0rCi0rCXQuZW50ID0g dGQtPmVudDsKLSsJdC5lbnRsZW4gPSB0ZC0+ZW50bGVuOwotKwl0Lm5vbmNlID0gdGQtPm5vbmNl OwotKwl0Lm5vbmNlbGVuID0gdGQtPm5vbmNlbGVuOwotKwl0LmVudGNudCA9IDA7Ci0rCXQubm9u Y2VjbnQgPSAwOwotKwotKwlpZiAoIUZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVy cywgdGQtPnBlcnNsZW4pKQotKwkJZ290byBlcnI7Ci0rCi0rCS8qIE5vdGUgZm9yIENUUiB3aXRo b3V0IERGIHNvbWUgYWRkaXRpb25hbCBpbnB1dCB2YWx1ZXMKLSsJICogaWdub3JlIGJ5dGVzIGFm dGVyIHRoZSBrZXlsZW5ndGg6IHNvIHJlZHVjZSBhZGlubGVuCi0rCSAqIHRvIGhhbGYgdG8gZW5z dXJlIGludmFsaWQgZGF0YSBpcyBmZWQgaW4uCi0rCSAqLwotKwlpZiAoIWZpcHNfcG9zdF9jb3Jy dXB0KEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+aWZsYWdzKSkKLSsJCWFkaW5s ZW4gPSB0ZC0+YWRpbmxlbiAvIDI7Ci0rCWVsc2UKLSsJCWFkaW5sZW4gPSB0ZC0+YWRpbmxlbjsK LSsKLSsJLyogR2VuZXJhdGUgd2l0aCBubyBQUiBhbmQgdmVyaWZ5IG91dHB1dCBtYXRjaGVzIGV4 cGVjdGVkIGRhdGEgKi8KLSsJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwg dGQtPmthdGxlbiwgMCwKLSsJCQkJdGQtPmFkaW4sIGFkaW5sZW4pKQotKwkJZ290byBlcnI7Ci0r Ci0rCWlmIChtZW1jbXAocmFuZG91dCwgdGQtPmthdCwgdGQtPmthdGxlbikpCi0rCQl7Ci0rCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX05PUFJfVEVTVDFfRkFJ TFVSRSk7Ci0rCQlnb3RvIGVycjI7Ci0rCQl9Ci0rCS8qIElmIGFiYnJldmlhdGVkIFBPU1QgZW5k IG9mIHRlc3QgKi8KLSsJaWYgKHF1aWNrKQotKwkJewotKwkJcnYgPSAxOwotKwkJZ290byBlcnI7 Ci0rCQl9Ci0rCS8qIFJlc2VlZCBEUkJHIHdpdGggdGVzdCBlbnRyb3B5IGFuZCBhZGRpdGlvbmFs IGlucHV0ICovCi0rCXQuZW50ID0gdGQtPmVudHJlc2VlZDsKLSsJdC5lbnRsZW4gPSB0ZC0+ZW50 cmVzZWVkbGVuOwotKwotKwlpZiAoIUZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW5yZXNl ZWQsIHRkLT5hZGlucmVzZWVkbGVuKSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBHZW5lcmF0ZSB3 aXRoIG5vIFBSIGFuZCB2ZXJpZnkgb3V0cHV0IG1hdGNoZXMgZXhwZWN0ZWQgZGF0YSAqLwotKwlp ZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0MmxlbiwgMCwKLSsJ CQkJdGQtPmFkaW4yLCB0ZC0+YWRpbjJsZW4pKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmIChtZW1j bXAocmFuZG91dCwgdGQtPmthdDIsIHRkLT5rYXQybGVuKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19TSU5HTEVfS0FULCBGSVBTX1JfTk9QUl9URVNUMl9GQUlMVVJFKTsKLSsJ CWdvdG8gZXJyMjsKLSsJCX0KLSsKLSsJRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCk7Ci0r Ci0rCS8qIE5vdyB0ZXN0IHdpdGggUFIgKi8KLSsKLSsJLyogSW5zdGFudGlhdGUgRFJCRyB3aXRo IHRlc3QgZW50cm9weSwgbm9uY2UgYW5kIHBlcnNvbmFsaXNhdGlvbgotKwkgKiBzdHJpbmcuCi0r CSAqLwotKwlpZiAoIUZJUFNfZHJiZ19pbml0KGRjdHgsIHRkLT5uaWQsIHRkLT5mbGFncykpCi0r CQlyZXR1cm4gMDsKLSsJaWYgKCFGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhkY3R4LCB0ZXN0X2Vu dHJvcHksIDAsIDAsIHRlc3Rfbm9uY2UsIDApKQotKwkJcmV0dXJuIDA7Ci0rCi0rCUZJUFNfZHJi Z19zZXRfYXBwX2RhdGEoZGN0eCwgJnQpOwotKwotKwl0LmVudCA9IHRkLT5lbnRfcHI7Ci0rCXQu ZW50bGVuID0gdGQtPmVudGxlbl9wcjsKLSsJdC5ub25jZSA9IHRkLT5ub25jZV9wcjsKLSsJdC5u b25jZWxlbiA9IHRkLT5ub25jZWxlbl9wcjsKLSsJdC5lbnRjbnQgPSAwOwotKwl0Lm5vbmNlY250 ID0gMDsKLSsKLSsJaWYgKCFGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnNfcHIs IHRkLT5wZXJzbGVuX3ByKSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBOb3cgZ2VuZXJhdGUgd2l0 aCBQUjogd2UgbmVlZCB0byBzdXBwbHkgZW50cm9weSBhcyB0aGlzIHdpbGwKLSsJICogcGVyZm9y bSBhIHJlc2VlZCBvcGVyYXRpb24uIENoZWNrIG91dHB1dCBtYXRjaGVzIGV4cGVjdGVkIHZhbHVl LgotKwkgKi8KLSsKLSsJdC5lbnQgPSB0ZC0+ZW50cHJfcHI7Ci0rCXQuZW50bGVuID0gdGQtPmVu dHBybGVuX3ByOwotKwotKwkvKiBOb3RlIGZvciBDVFIgd2l0aG91dCBERiBzb21lIGFkZGl0aW9u YWwgaW5wdXQgdmFsdWVzCi0rCSAqIGlnbm9yZSBieXRlcyBhZnRlciB0aGUga2V5bGVuZ3RoOiBz byByZWR1Y2UgYWRpbmxlbgotKwkgKiB0byBoYWxmIHRvIGVuc3VyZSBpbnZhbGlkIGRhdGEgaXMg ZmVkIGluLgotKwkgKi8KLSsJaWYgKCFmaXBzX3Bvc3RfY29ycnVwdChGSVBTX1RFU1RfRFJCRywg ZGN0eC0+dHlwZSwgJmRjdHgtPmlmbGFncykpCi0rCQlhZGlubGVuID0gdGQtPmFkaW5sZW5fcHIg LyAyOwotKwllbHNlCi0rCQlhZGlubGVuID0gdGQtPmFkaW5sZW5fcHI7Ci0rCWlmICghRklQU19k cmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW5fcHIsIDEsCi0rCQkJCXRkLT5h ZGluX3ByLCBhZGlubGVuKSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAobWVtY21wKHJhbmRvdXQs IHRkLT5rYXRfcHIsIHRkLT5rYXRsZW5fcHIpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQ U19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9QUl9URVNUMV9GQUlMVVJFKTsKLSsJCWdvdG8gZXJy MjsKLSsJCX0KLSsKLSsJLyogTm93IGdlbmVyYXRlIGFnYWluIHdpdGggUFI6IHN1cHBseSBuZXcg ZW50cm9weSBhZ2Fpbi4KLSsJICogQ2hlY2sgb3V0cHV0IG1hdGNoZXMgZXhwZWN0ZWQgdmFsdWUu Ci0rCSAqLwotKwotKwl0LmVudCA9IHRkLT5lbnRnX3ByOwotKwl0LmVudGxlbiA9IHRkLT5lbnRn bGVuX3ByOwotKwotKwlpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+ a2F0Mmxlbl9wciwgMSwKLSsJCQkJdGQtPmFkaW5nX3ByLCB0ZC0+YWRpbmdsZW5fcHIpKQotKwkJ Z290byBlcnI7Ci0rCi0rCWlmIChtZW1jbXAocmFuZG91dCwgdGQtPmthdDJfcHIsIHRkLT5rYXQy bGVuX3ByKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FULCBG SVBTX1JfUFJfVEVTVDJfRkFJTFVSRSk7Ci0rCQlnb3RvIGVycjI7Ci0rCQl9Ci0rCS8qIEFsbCBP SywgdGVzdCBjb21wbGV0ZSAqLwotKwlydiA9IDE7Ci0rCi0rCWVycjoKLSsJaWYgKHJ2ID09IDAp Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX1NFTEZURVNU X0ZBSUxFRCk7Ci0rCWVycjI6Ci0rCUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpOwotKwkK LSsJcmV0dXJuIHJ2OwotKwotKwl9Ci0rCi0rLyogSW5pdGlhbGlzZSBhIERSQkcgYmFzZWQgb24g c2VsZnRlc3QgZGF0YSAqLwotKwotK3N0YXRpYyBpbnQgZG9fZHJiZ19pbml0KERSQkdfQ1RYICpk Y3R4LCBEUkJHX1NFTEZURVNUX0RBVEEgKnRkLCBURVNUX0VOVCAqdCkKLSsJewotKwotKwlpZiAo IUZJUFNfZHJiZ19pbml0KGRjdHgsIHRkLT5uaWQsIHRkLT5mbGFncykpCi0rCQlyZXR1cm4gMDsK LSsKLSsJaWYgKCFGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhkY3R4LCB0ZXN0X2VudHJvcHksIDAs IDAsIHRlc3Rfbm9uY2UsIDApKQotKwkJcmV0dXJuIDA7Ci0rCi0rCUZJUFNfZHJiZ19zZXRfYXBw X2RhdGEoZGN0eCwgdCk7Ci0rCi0rCXQtPmVudCA9IHRkLT5lbnQ7Ci0rCXQtPmVudGxlbiA9IHRk LT5lbnRsZW47Ci0rCXQtPm5vbmNlID0gdGQtPm5vbmNlOwotKwl0LT5ub25jZWxlbiA9IHRkLT5u b25jZWxlbjsKLSsJdC0+ZW50Y250ID0gMDsKLSsJdC0+bm9uY2VjbnQgPSAwOwotKwlyZXR1cm4g MTsKLSsJfQotKwotKy8qIEluaXRpYWxpc2UgYW5kIGluc3RhbnRpYXRlIERSQkcgYmFzZWQgb24g c2VsZnRlc3QgZGF0YSAqLwotK3N0YXRpYyBpbnQgZG9fZHJiZ19pbnN0YW50aWF0ZShEUkJHX0NU WCAqZGN0eCwgRFJCR19TRUxGVEVTVF9EQVRBICp0ZCwKLSsJCQkJCQkJCVRFU1RfRU5UICp0KQot Kwl7Ci0rCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCB0KSkKLSsJCXJldHVybiAwOwotKwlp ZiAoIUZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pKQot KwkJcmV0dXJuIDA7Ci0rCi0rCXJldHVybiAxOwotKwl9Ci0rCi0rLyogVGhpcyBmdW5jdGlvbiBw ZXJmb3JtcyBleHRlbnNpdmUgZXJyb3IgY2hlY2tpbmcgYXMgcmVxdWlyZWQgYnkgU1A4MDAtOTAu Ci0rICogSW5kdWNlIHNldmVyYWwgZmFpbHVyZSBtb2RlcyBhbmQgY2hlY2sgYW4gZXJyb3IgY29u ZGl0aW9uIGlzIHNldC4KLSsgKiBUaGlzIGZ1bmN0aW9uIGFsb25nIHdpdGggZmlwc19kcmJnX3Np bmdsZV9rYXQgcGVmb3JtcyB0aGUgaGVhbHRoIGNoZWNraW5nCi0rICogb3BlcmF0aW9uLgotKyAq LwotKwotK3N0YXRpYyBpbnQgZmlwc19kcmJnX2Vycm9yX2NoZWNrKERSQkdfQ1RYICpkY3R4LCBE UkJHX1NFTEZURVNUX0RBVEEgKnRkKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgcmFuZG91dFsxMDI0 XTsKLSsJVEVTVF9FTlQgdDsKLSsJc2l6ZV90IGk7Ci0rCXVuc2lnbmVkIGludCByZXNlZWRfY291 bnRlcl90bXA7Ci0rCXVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKWRjdHg7Ci0r Ci0rCS8qIEluaXRpYWxpc2UgRFJCRyAqLwotKwotKwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0 ZCwgJnQpKQotKwkJZ290byBlcnI7Ci0rCi0rCS8qIERvbid0IHJlcG9ydCBpbmR1Y2VkIGVycm9y cyAqLwotKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwotKwotKwkvKiBQZXJzb25h bGlzYXRpb24gc3RyaW5nIHRlc3RzICovCi0rCi0rCS8qIFRlc3QgZGV0ZWN0aW9uIG9mIHRvbyBs YXJnZSBwZXJzb25saXNhdGlvbiBzdHJpbmcgKi8KLSsKLSsJaWYgKEZJUFNfZHJiZ19pbnN0YW50 aWF0ZShkY3R4LCB0ZC0+cGVycywgZGN0eC0+bWF4X3BlcnMgKyAxKSA+IDApCi0rCQl7Ci0rCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9QRVJTT05BTElTQVRJ T05fRVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJLyogRW50cm9w eSBzb3VyY2UgdGVzdHMgKi8KLSsKLSsJLyogVGVzdCBlbnRyb3B5IHNvdXJjZSBmYWlsdXJlIGRl dGVjaW9uOiBpLmUuIHJldHVybnMgbm8gZGF0YSAqLwotKwotKwl0LmVudGxlbiA9IDA7Ci0rCi0r CWlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+ IDApCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNf Ul9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCS8q IFRyeSB0byBnZW5lcmF0ZSBvdXRwdXQgZnJvbSB1bmluc3RhbnRpYXRlZCBEUkJHICovCi0rCWlm IChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMCwKLSsJCQkJ dGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJC R19FUlJPUl9DSEVDSywgRklQU19SX0dFTkVSQVRFX0VSUk9SX1VOREVURUNURUQpOwotKwkJZ290 byBlcnI7Ci0rCQl9Ci0rCi0rCWRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOwotKwlp ZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQotKwkJewotKwkJRklQU2VycihGSVBT X0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7Ci0r CQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkK LSsJCWdvdG8gZXJyOwotKwotKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwotKwot KwkvKiBUZXN0IGluc3VmZmljaWVudCBlbnRyb3B5ICovCi0rCi0rCXQuZW50bGVuID0gZGN0eC0+ bWluX2VudHJvcHkgLSAxOwotKwotKwlpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRk LT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdv dG8gZXJyOwotKwkJfQotKwotKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKLSsJ aWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwot KwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCS8qIFRlc3QgdG9vIG11Y2ggZW50cm9weSAqLwotKwot KwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKwkJZ290byBlcnI7Ci0rCi0rCWRj dHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rCXQuZW50bGVuID0gZGN0eC0+bWF4 X2VudHJvcHkgKyAxOwotKwotKwlpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5w ZXJzLCB0ZC0+cGVyc2xlbikgPiAwKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdvdG8g ZXJyOwotKwkJfQotKwotKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKLSsJaWYg KCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKwkJ Z290byBlcnI7Ci0rCQl9Ci0rCi0rCS8qIE5vbmNlIHRlc3RzICovCi0rCi0rCS8qIFRlc3QgdG9v IHNtYWxsIG5vbmNlICovCi0rCi0rCWlmIChkY3R4LT5taW5fbm9uY2UpCi0rCQl7Ci0rCi0rCQlp ZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKwkJCWdvdG8gZXJyOwotKwotKwkJZGN0 eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsJCXQubm9uY2VsZW4gPSBkY3R4LT5t aW5fbm9uY2UgLSAxOwotKwotKwkJaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+ cGVycywgdGQtPnBlcnNsZW4pID4gMCkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfTk9OQ0VfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQkJZ290 byBlcnI7Ci0rCQkJfQotKwotKwkJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7Ci0r CQlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQotKwkJCXsKLSsJCQlGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9S KTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0rCi0rCQl9Ci0rCi0rCS8qIFRlc3QgdG9vIGxhcmdl IG5vbmNlICovCi0rCi0rCWlmIChkY3R4LT5tYXhfbm9uY2UpCi0rCQl7Ci0rCi0rCQlpZiAoIWRv X2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKwkJCWdvdG8gZXJyOwotKwotKwkJZGN0eC0+aWZs YWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsJCXQubm9uY2VsZW4gPSBkY3R4LT5tYXhfbm9u Y2UgKyAxOwotKwotKwkJaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywg dGQtPnBlcnNsZW4pID4gMCkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VS Uk9SX0NIRUNLLCBGSVBTX1JfTk9OQ0VfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQkJZ290byBlcnI7 Ci0rCQkJfQotKwotKwkJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7Ci0rCQlpZiAo IUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNf Rl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsJ CQlnb3RvIGVycjsKLSsJCQl9Ci0rCi0rCQl9Ci0rCi0rCS8qIEluc3RhbnRpYXRlIHdpdGggdmFs aWQgZGF0YS4gKi8KLSsJaWYgKCFkb19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLCAmdCkpCi0r CQkJZ290byBlcnI7Ci0rCi0rCS8qIENoZWNrIGdlbmVyYXRpb24gaXMgbm93IE9LICovCi0rCWlm ICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCi0rCQkJ CXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCi0rCQlnb3RvIGVycjsKLSsKLSsJZGN0eC0+aWZsYWdz IHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsJLyogUmVxdWVzdCB0b28gbXVjaCBkYXRhIGZvciBv bmUgcmVxdWVzdCAqLwotKwlpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIGRj dHgtPm1heF9yZXF1ZXN0ICsgMSwgMCwKLSsJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKLSsJ CXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1JFUVVF U1RfTEVOR1RIX0VSUk9SX1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCS8q IFRyeSB0b28gbGFyZ2UgYWRkaXRpb25hbCBpbnB1dCAqLwotKwlpZiAoRklQU19kcmJnX2dlbmVy YXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCi0rCQkJCXRkLT5hZGluLCBkY3R4LT5t YXhfYWRpbiArIDEpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NI RUNLLCBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdvdG8g ZXJyOwotKwkJfQotKwotKwkvKiBDaGVjayBwcmVkaWN0aW9uIHJlc2lzdGFuY2UgcmVxdWVzdCBm YWlscyBpZiBlbnRyb3B5IHNvdXJjZQotKwkgKiBmYWlsdXJlLgotKwkgKi8KLSsKLSsJdC5lbnRs ZW4gPSAwOwotKwotKwlpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5r YXRsZW4sIDEsCi0rCQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCi0rCQl7Ci0rCQlGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVU RUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCQkKLSsJZGN0eC0+aWZsYWdzICY9IH5EUkJH X0ZMQUdfTk9FUlI7Ci0rCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCi0rCQl7 Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RB TlRJQVRFX0VSUk9SKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwotKwkvKiBJbnN0YW50aWF0 ZSBhZ2FpbiB3aXRoIHZhbGlkIGRhdGEgKi8KLSsKLSsJaWYgKCFkb19kcmJnX2luc3RhbnRpYXRl KGRjdHgsIHRkLCAmdCkpCi0rCQkJZ290byBlcnI7Ci0rCS8qIFRlc3QgcmVzZWVkIGNvdW50ZXIg d29ya3MgKi8KLSsJLyogU2F2ZSBpbml0aWFsIHJlc2VlZCBjb3VudGVyICovCi0rCXJlc2VlZF9j b3VudGVyX3RtcCA9IGRjdHgtPnJlc2VlZF9jb3VudGVyOwotKwkvKiBTZXQgcmVzZWVkIGNvdW50 ZXIgdG8gYmV5b25kIGludGVydmFsICovCi0rCWRjdHgtPnJlc2VlZF9jb3VudGVyID0gZGN0eC0+ cmVzZWVkX2ludGVydmFsOwotKwotKwkvKiBHZW5lcmF0ZSBvdXRwdXQgYW5kIGNoZWNrIGVudHJv cHkgaGFzIGJlZW4gcmVxdWVzdGVkIGZvciByZXNlZWQgKi8KLSsJdC5lbnRjbnQgPSAwOwotKwlp ZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAotKwkJ CQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQotKwkJZ290byBlcnI7Ci0rCWlmICh0LmVudGNudCAh PSAxKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBT X1JfRU5UUk9QWV9OT1RfUkVRVUVTVEVEX0ZPUl9SRVNFRUQpOwotKwkJZ290byBlcnI7Ci0rCQl9 Ci0rCS8qIENoZWNrIHJlc2VlZCBjb3VudGVyIGhhcyBiZWVuIHJlc2V0ICovCi0rCWlmIChkY3R4 LT5yZXNlZWRfY291bnRlciAhPSByZXNlZWRfY291bnRlcl90bXAgKyAxKQotKwkJewotKwkJRklQ U2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfUkVTRUVEX0NPVU5URVJf RVJST1IpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCWRjdHgtPmlmbGFncyAmPSB+RFJCR19G TEFHX05PRVJSOwotKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQotKwkJewot KwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5U SUFURV9FUlJPUik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJLyogQ2hlY2sgcHJlZGljdGlv biByZXNpc3RhbmNlIHJlcXVlc3QgZmFpbHMgaWYgZW50cm9weSBzb3VyY2UKLSsJICogZmFpbHVy ZS4KLSsJICovCi0rCi0rCXQuZW50bGVuID0gMDsKLSsKLSsJZGN0eC0+aWZsYWdzIHw9IERSQkdf RkxBR19OT0VSUjsKLSsJaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+ a2F0bGVuLCAxLAotKwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQotKwkJewotKwkJRklQU2Vy cihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRF VEVDVEVEKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwkJCi0rCWRjdHgtPmlmbGFncyAmPSB+RFJC R19GTEFHX05PRVJSOwotKwotKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQot KwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5J TlNUQU5USUFURV9FUlJPUik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsKLSsJaWYgKCFkb19k cmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLCAmdCkpCi0rCQkJZ290byBlcnI7Ci0rCS8qIFRlc3Qg cmVzZWVkIGNvdW50ZXIgd29ya3MgKi8KLSsJLyogU2F2ZSBpbml0aWFsIHJlc2VlZCBjb3VudGVy ICovCi0rCXJlc2VlZF9jb3VudGVyX3RtcCA9IGRjdHgtPnJlc2VlZF9jb3VudGVyOwotKwkvKiBT ZXQgcmVzZWVkIGNvdW50ZXIgdG8gYmV5b25kIGludGVydmFsICovCi0rCWRjdHgtPnJlc2VlZF9j b3VudGVyID0gZGN0eC0+cmVzZWVkX2ludGVydmFsOwotKwotKwkvKiBHZW5lcmF0ZSBvdXRwdXQg YW5kIGNoZWNrIGVudHJvcHkgaGFzIGJlZW4gcmVxdWVzdGVkIGZvciByZXNlZWQgKi8KLSsJdC5l bnRjbnQgPSAwOwotKwlpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+ a2F0bGVuLCAwLAotKwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQotKwkJZ290byBlcnI7Ci0r CWlmICh0LmVudGNudCAhPSAxKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VS Uk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9OT1RfUkVRVUVTVEVEX0ZPUl9SRVNFRUQpOwotKwkJ Z290byBlcnI7Ci0rCQl9Ci0rCS8qIENoZWNrIHJlc2VlZCBjb3VudGVyIGhhcyBiZWVuIHJlc2V0 ICovCi0rCWlmIChkY3R4LT5yZXNlZWRfY291bnRlciAhPSByZXNlZWRfY291bnRlcl90bXAgKyAx KQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1Jf UkVTRUVEX0NPVU5URVJfRVJST1IpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCWRjdHgtPmlm bGFncyAmPSB+RFJCR19GTEFHX05PRVJSOwotKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRl KGRjdHgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBG SVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJLyog RXhwbGljaXQgcmVzZWVkIHRlc3RzICovCi0rCi0rCS8qIFRlc3QgZXhwbGljaXQgcmVzZWVkIHdp dGggdG9vIGxhcmdlIGFkZGl0aW9uYWwgaW5wdXQgKi8KLSsJaWYgKCFkb19kcmJnX2luaXQoZGN0 eCwgdGQsICZ0KSkKLSsJCWdvdG8gZXJyOwotKwotKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFH X05PRVJSOwotKwotKwlpZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwgZGN0eC0+ bWF4X2FkaW4gKyAxKSA+IDApCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJS T1JfQ0hFQ0ssIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX0VSUk9SX1VOREVURUNURUQpOwotKwkJ Z290byBlcnI7Ci0rCQl9Ci0rCi0rCS8qIFRlc3QgZXhwbGljaXQgcmVzZWVkIHdpdGggZW50cm9w eSBzb3VyY2UgZmFpbHVyZSAqLwotKwotKwl0LmVudGxlbiA9IDA7Ci0rCi0rCWlmIChGSVBTX2Ry YmdfcmVzZWVkKGRjdHgsIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikgPiAwKQotKwkJewotKwkJRklQ U2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9V TkRFVEVDVEVEKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwlpZiAoIUZJUFNfZHJiZ191bmlu c3RhbnRpYXRlKGRjdHgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9S X0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7Ci0rCQlnb3RvIGVycjsKLSsJCX0K LSsKLSsJLyogVGVzdCBleHBsaWNpdCByZXNlZWQgd2l0aCB0b28gbXVjaCBlbnRyb3B5ICovCi0r Ci0rCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJ ZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsJdC5lbnRsZW4gPSBkY3R4LT5t YXhfZW50cm9weSArIDE7Ci0rCi0rCWlmIChGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRkLT5hZGlu LCB0ZC0+YWRpbmxlbikgPiAwKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VS Uk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdvdG8gZXJy OwotKwkJfQotKwotKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQotKwkJewot KwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5U SUFURV9FUlJPUik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJLyogVGVzdCBleHBsaWNpdCBy ZXNlZWQgd2l0aCB0b28gbGl0dGxlIGVudHJvcHkgKi8KLSsKLSsJaWYgKCFkb19kcmJnX2luaXQo ZGN0eCwgdGQsICZ0KSkKLSsJCWdvdG8gZXJyOwotKwotKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19G TEFHX05PRVJSOwotKwotKwl0LmVudGxlbiA9IGRjdHgtPm1pbl9lbnRyb3B5IC0gMTsKLSsKLSsJ aWYgKEZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSA+IDApCi0r CQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRS T1BZX0VSUk9SX1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCWlmICghRklQ U19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBT X0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsJCWdvdG8g ZXJyOwotKwkJfQotKwotKwlwID0gKHVuc2lnbmVkIGNoYXIgKikmZGN0eC0+ZDsKLSsJLyogU3Rh bmRhcmQgc2F5cyB3ZSBoYXZlIHRvIGNoZWNrIHVuaW5zdGFudGlhdGUgcmVhbGx5IHplcm9lcwot KwkgKiB0aGUgZGF0YS4uLgotKwkgKi8KLSsJZm9yIChpID0gMDsgaSA8IHNpemVvZihkY3R4LT5k KTsgaSsrKQotKwkJewotKwkJaWYgKCpwICE9IDApCi0rCQkJewotKwkJCUZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfWkVST0lTRV9FUlJP Uik7Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwkJcCsrOwotKwkJfQotKwotKwlyZXR1cm4gMTsK LSsKLSsJZXJyOgotKwkvKiBBIHJlYWwgZXJyb3IgYXMgb3Bwb3NlZCB0byBhbiBpbmR1Y2VkIG9u ZTogdW5kZXJseWluZyBmdW5jdGlvbiB3aWxsCi0rCSAqIGluZGljYXRlIHRoZSBlcnJvci4KLSsJ ICovCi0rCWlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfRkxBR19OT0VSUikpCi0rCQlGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9GVU5DVElPTl9FUlJPUik7Ci0r CUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpOwotKwlyZXR1cm4gMDsKLSsKLSsJfQotKwot K2ludCBmaXBzX2RyYmdfa2F0KERSQkdfQ1RYICpkY3R4LCBpbnQgbmlkLCB1bnNpZ25lZCBpbnQg ZmxhZ3MpCi0rCXsKLSsJRFJCR19TRUxGVEVTVF9EQVRBICp0ZDsKLSsJZmxhZ3MgfD0gRFJCR19G TEFHX1RFU1Q7Ci0rCWZvciAodGQgPSBkcmJnX3Rlc3Q7IHRkLT5uaWQgIT0gMDsgdGQrKykKLSsJ CXsKLSsJCWlmICh0ZC0+bmlkID09IG5pZCAmJiB0ZC0+ZmxhZ3MgPT0gZmxhZ3MpCi0rCQkJewot KwkJCWlmICghZmlwc19kcmJnX3NpbmdsZV9rYXQoZGN0eCwgdGQsIDApKQotKwkJCQlyZXR1cm4g MDsKLSsJCQlyZXR1cm4gZmlwc19kcmJnX2Vycm9yX2NoZWNrKGRjdHgsIHRkKTsKLSsJCQl9Ci0r CQl9Ci0rCXJldHVybiAwOwotKwl9Ci0rCi0raW50IEZJUFNfZHJiZ19oZWFsdGhfY2hlY2soRFJC R19DVFggKmRjdHgpCi0rCXsKLSsJaW50IHJ2OwotKwlEUkJHX0NUWCAqdGN0eCA9IE5VTEw7Ci0r CXRjdHggPSBGSVBTX2RyYmdfbmV3KDAsIDApOwotKwlmaXBzX3Bvc3Rfc3RhcnRlZChGSVBTX1RF U1RfRFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPnhmbGFncyk7Ci0rCWlmICghdGN0eCkKLSsJCXJl dHVybiAwOwotKwlydiA9IGZpcHNfZHJiZ19rYXQodGN0eCwgZGN0eC0+dHlwZSwgZGN0eC0+eGZs YWdzKTsKLSsJaWYgKHRjdHgpCi0rCQlGSVBTX2RyYmdfZnJlZSh0Y3R4KTsKLSsJaWYgKHJ2KQot KwkJZmlwc19wb3N0X3N1Y2Nlc3MoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT54 ZmxhZ3MpOwotKwllbHNlCi0rCQlmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9EUkJHLCBkY3R4 LT50eXBlLCAmZGN0eC0+eGZsYWdzKTsKLSsJaWYgKCFydikKLSsJCWRjdHgtPnN0YXR1cyA9IERS QkdfU1RBVFVTX0VSUk9SOwotKwllbHNlCi0rCQlkY3R4LT5oZWFsdGhfY2hlY2tfY250ID0gMDsK LSsJcmV0dXJuIHJ2OwotKwl9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfZHJiZyh2b2lkKQotKwl7 Ci0rCURSQkdfQ1RYICpkY3R4OwotKwlEUkJHX1NFTEZURVNUX0RBVEEgKnRkOwotKwlpbnQgcnYg PSAxOwotKwlkY3R4ID0gRklQU19kcmJnX25ldygwLCAwKTsKLSsJaWYgKCFkY3R4KQotKwkJcmV0 dXJuIDA7Ci0rCWZvciAodGQgPSBkcmJnX3Rlc3Q7IHRkLT5uaWQgIT0gMDsgdGQrKykKLSsJCXsK LSsJCWlmICh0ZC0+cG9zdCAhPSAxKQotKwkJCWNvbnRpbnVlOwotKwkJaWYgKCFmaXBzX3Bvc3Rf c3RhcnRlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncykpCi0rCQkJcmV0dXJu IDE7Ci0rCQlpZiAoIWZpcHNfZHJiZ19zaW5nbGVfa2F0KGRjdHgsIHRkLCAxKSkKLSsJCQl7Ci0r CQkJZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncyk7 Ci0rCQkJcnYgPSAwOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCWlmICghZmlwc19wb3N0X3N1 Y2Nlc3MoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpKQotKwkJCXJldHVybiAw OwotKwkJfQotKwlGSVBTX2RyYmdfZnJlZShkY3R4KTsKLSsJcmV0dXJuIHJ2OwotKwl9Ci0rCi0r Ci0raW50IEZJUFNfc2VsZnRlc3RfZHJiZ19hbGwodm9pZCkKLSsJewotKwlEUkJHX0NUWCAqZGN0 eDsKLSsJRFJCR19TRUxGVEVTVF9EQVRBICp0ZDsKLSsJaW50IHJ2ID0gMTsKLSsJZGN0eCA9IEZJ UFNfZHJiZ19uZXcoMCwgMCk7Ci0rCWlmICghZGN0eCkKLSsJCXJldHVybiAwOwotKwlmb3IgKHRk ID0gZHJiZ190ZXN0OyB0ZC0+bmlkICE9IDA7IHRkKyspCi0rCQl7Ci0rCQlpZiAoIWZpcHNfcG9z dF9zdGFydGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKSkKLSsJCQlyZXR1 cm4gMTsKLSsJCWlmICghZmlwc19kcmJnX3NpbmdsZV9rYXQoZGN0eCwgdGQsIDApKQotKwkJCXsK LSsJCQlmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdz KTsKLSsJCQlydiA9IDA7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwkJaWYgKCFmaXBzX2RyYmdf ZXJyb3JfY2hlY2soZGN0eCwgdGQpKQotKwkJCXsKLSsJCQlmaXBzX3Bvc3RfZmFpbGVkKEZJUFNf VEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKTsKLSsJCQlydiA9IDA7Ci0rCQkJY29udGlu dWU7Ci0rCQkJfQotKwkJaWYgKCFmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1RfRFJCRywgdGQt Pm5pZCwgJnRkLT5mbGFncykpCi0rCQkJcmV0dXJuIDA7Ci0rCQl9Ci0rCUZJUFNfZHJiZ19mcmVl KGRjdHgpOwotKwlyZXR1cm4gcnY7Ci0rCX0KLSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2Ny eXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5oLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRv L2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmgKLS0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlw cy9maXBzX2RyYmdfc2VsZnRlc3QuaC5maXBzCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDk4MzA2NDAx ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0 LmgJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTgzMDY0MDEgKzAyMDAKLUBAIC0wLDAgKzEsMjMzNSBA QAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFBy b2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsg KgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3Ry aWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmlu ZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0r ICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2pl Y3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0 ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsg KiAgICBvcGVuc3NsLWNvcmUub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1h eSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgot KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJl ZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xs b3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0r ICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1Qg YGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pF Q1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs Ci0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsvKiBTZWxmdGVzdCBhbmQgaGVhbHRoIGNoZWNrIGRh dGEgZm9yIHRoZSBTUDgwMC05MCBEUkJHICovCi0rCi0rI2RlZmluZSBfX2ZpcHNfY29uc3RzZWcK LSsKLSsvKiBBRVMtMTI4IHVzZSBkZiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0r CXsKLSsJMHg2MSwweDUyLDB4N2MsMHhlMywweDIzLDB4N2QsMHgwYSwweDA3LDB4MTAsMHgwYyww eDUwLDB4MzMsCi0rCTB4YzgsMHhkYiwweGZmLDB4MTIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9ub25jZVtd ID0KLSsJewotKwkweDUxLDB4MGQsMHg4NSwweDc3LDB4ZWQsMHgyMiwweDk3LDB4MjgKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4 X3VzZV9kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg1OSwweDlmLDB4 YmIsMHhjZCwweGQ1LDB4MjUsMHg2OSwweGI1LDB4Y2IsMHhiNSwweDAzLDB4ZmUsCi0rCTB4ZDcs MHhkNywweDAxLDB4NjcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsK LSsJMHhlZiwweDg4LDB4NzYsMHgwMSwweGFmLDB4M2MsMHhmZSwweDhiLDB4YWYsMHgyNiwweDA2 LDB4OWUsCi0rCTB4OWEsMHg0NywweDA4LDB4NzYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9lbnRyb3B5aW5w dXRwcltdID0KLSsJewotKwkweGUyLDB4NzYsMHhmOSwweGY2LDB4M2EsMHhiYSwweDEwLDB4OWYs MHhiZiwweDQ3LDB4MGUsMHg1MSwKLSsJMHgwOSwweGZiLDB4YTMsMHhiNgotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2Rm X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhkNCwweDk4LDB4OGEsMHg0NiwweDgw LDB4NGMsMHhkYiwweGEzLDB4NTksMHgwMiwweDU3LDB4NTIsCi0rCTB4NjYsMHgxYywweGVhLDB4 NWIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTI4X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4ODgsMHg4 YywweDkxLDB4ZDYsMHhiZSwweDU2LDB4NmUsMHgwOCwweDlhLDB4NjIsMHgyYiwweDExLAotKwkw eDNmLDB4NWUsMHgzMSwweDA2Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfZW50cm9weWlucHV0cHIyW10gPQot Kwl7Ci0rCTB4YzAsMHg1YywweDZiLDB4OTgsMHgwMSwweDBkLDB4NTgsMHgxOCwweDUxLDB4MTgs MHg5NiwweGFlLAotKwkweGE3LDB4ZTMsMHhhOCwweDY3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfcmV0dXJu ZWRiaXRzW10gPQotKwl7Ci0rCTB4Y2YsMHgwMSwweGFjLDB4MjIsMHgzMSwweDA2LDB4OGUsMHhm YywweGNlLDB4NTYsMHhlYSwweDI0LAotKwkweDBmLDB4MzgsMHg0MywweGM2Ci0rCX07Ci0rCi0r Ci0rLyogQUVTLTEyOCB1c2UgZGYgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfZW50cm9weWlucHV0W10gPQotKwl7 Ci0rCTB4MWYsMHg4ZSwweDM0LDB4ODIsMHgwYywweGI3LDB4YmUsMHhjNSwweDAxLDB4M2UsMHhk MCwweGEzLAotKwkweDlkLDB4N2QsMHgxYywweDliCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfbm9uY2VbXSA9Ci0r CXsKLSsJMHhkNSwweDRkLDB4YmQsMHg0YSwweDkzLDB4N2YsMHhiOCwweDk2Ci0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2Vf ZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4YWIsMHhkNiwweDNmLDB4MDQs MHhmZSwweDI3LDB4NmIsMHgyZCwweGQ3LDB4YzMsMHgxYywweGYzLAotKwkweDM4LDB4NjYsMHhi YSwweDFiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzEyOF91c2VfZGZfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4ZmUsMHhm NCwweDA5LDB4YTgsMHhiNywweDczLDB4MjcsMHg5YywweDVmLDB4YTcsMHhlYSwweDQ2LAotKwkw eGI1LDB4ZTIsMHhiMiwweDQxCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfaW50X3JldHVybmVkYml0c1tdID0KLSsJ ewotKwkweDQyLDB4ZTQsMHg0ZSwweDdiLDB4MjcsMHhkZCwweGNiLDB4YmMsMHgwYSwweGNmLDB4 YTYsMHg2NywKLSsJMHhlNywweDU3LDB4MTEsMHhiNAotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2VudHJvcHlpbnB1 dHJlc2VlZFtdID0KLSsJewotKwkweDE0LDB4MjYsMHg2OSwweGQ5LDB4ZjMsMHg2NSwweDAzLDB4 ZDYsMHg2YiwweGI5LDB4NDQsMHgwYiwKLSsJMHhjNywweGM0LDB4OWUsMHgzOQotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNl X2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDU1LDB4MmUsMHg2MCwweDlh LDB4MDUsMHg3MiwweDhhLDB4YTgsMHhlZiwweDIyLDB4ODEsMHg1YSwKLSsJMHhjOCwweDkzLDB4 ZmEsMHg4NAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xMjhfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHgzYyww eDQwLDB4YzgsMHhjNCwweDE2LDB4MGMsMHgyMSwweGE0LDB4MzcsMHgyYywweDhmLDB4YTUsCi0r CTB4MDYsMHgwYywweDE1LDB4MmMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsK LSsJMHhlMSwweDNlLDB4OTksMHg5OCwweDg2LDB4NjcsMHgwYiwweDYzLDB4N2IsMHhiZSwweDNm LDB4ODgsCi0rCTB4NDYsMHg4MSwweGM3LDB4MTkKLSsJfTsKLSsKLSsKLSsvKiBBRVMtMTkyIHVz ZSBkZiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTkyX3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHgyYiwweDRlLDB4 OGIsMHhlMSwweGYxLDB4MzQsMHg4MCwweDU2LDB4ODEsMHhmOSwweDc0LDB4ZWMsCi0rCTB4MTcs MHg0NCwweDJhLDB4ZjEsMHgxNCwweGIwLDB4YmYsMHg5NywweDM5LDB4YjcsMHgwNCwweDdkCi0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml91c2VfZGZfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHhkNiwweDlkLDB4ZWIsMHgxNCwweDRl LDB4NmMsMHgzMCwweDFlLDB4MzksMHg1NSwweDczLDB4ZDAsCi0rCTB4ZDEsMHg4MCwweDc4LDB4 ZmEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTkyX3VzZV9kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHhm YywweDQzLDB4NGEsMHhmOCwweDlhLDB4NTUsMHhiMywweDUzLDB4ODMsMHhlMiwweDE4LDB4MTYs Ci0rCTB4MGMsMHhkYywweGNkLDB4NWUsMHg0ZiwweGEwLDB4MDMsMHgwMSwweDJiLDB4OWYsMHhl NCwweGQ1LAotKwkweDdkLDB4NDksMHhmMCwweDQxLDB4OWUsMHgzZCwweDk5LDB4MDQKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTky X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHg1ZSwweDlmLDB4NDksMHg2 ZiwweDIxLDB4OGIsMHgxZCwweDMyLDB4ZDUsMHg4NCwweDVjLDB4YWMsCi0rCTB4YWYsMHhkZiww eGU0LDB4NzksMHg5ZSwweGFmLDB4YTksMHg4MiwweGQwLDB4ZjgsMHg0ZiwweGNiLAotKwkweDY5 LDB4MTAsMHgwYSwweDdlLDB4ODEsMHg1NywweGI1LDB4MzYKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9lbnRy b3B5aW5wdXRwcltdID0KLSsJewotKwkweGQ0LDB4ODEsMHgwYywweGQ3LDB4NjYsMHgzOSwweGVj LDB4NDIsMHg1MywweDg3LDB4NDEsMHhhNSwKLSsJMHgxZSwweDdkLDB4ODAsMHg5MSwweDhlLDB4 YmIsMHhlZCwweGFjLDB4MTQsMHgwMiwweDFhLDB4ZDUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9pbnRfcmV0 dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZGYsMHgxZCwweDM5LDB4NDUsMHg3YywweDliLDB4YzYs MHgyYiwweDdkLDB4OGMsMHg5MywweGU5LAotKwkweDE5LDB4MzAsMHg2YiwweDY3Ci0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91 c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDAwLDB4NzEsMHgyNywweDRl LDB4ZDMsMHgxNCwweGYxLDB4MjAsMHg3ZiwweDRhLDB4NDEsMHgzMiwKLSsJMHgyYSwweDk3LDB4 MTEsMHg0MywweDhmLDB4NGEsMHgxNSwweDdiLDB4OWIsMHg1MSwweDc5LDB4ZGEsCi0rCTB4NDks MHgzZCwweGRlLDB4ZTgsMHhiYywweDkzLDB4OTEsMHg5OQotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2VudHJv cHlpbnB1dHByMltdID0KLSsJewotKwkweDkwLDB4ZWUsMHg3NiwweGExLDB4NDUsMHg4ZCwweGI3 LDB4NDAsMHhiMCwweDExLDB4YmYsMHhkMCwKLSsJMHg2NSwweGQ3LDB4M2MsMHg3YywweDRmLDB4 MjAsMHgzZiwweDRlLDB4MTEsMHg5ZCwweGIzLDB4NWUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9yZXR1cm5l ZGJpdHNbXSA9Ci0rCXsKLSsJMHgyNCwweDNiLDB4MjAsMHhhNCwweDM3LDB4NjYsMHhiYSwweDcy LDB4MzksMHgzZiwweGNmLDB4M2MsCi0rCTB4N2UsMHgxYSwweDJiLDB4ODMKLSsJfTsKLSsKLSsK LSsvKiBBRVMtMTkyIHVzZSBkZiBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsK LSsJMHg4ZCwweDc0LDB4YTQsMHg1MCwweDFhLDB4MDIsMHg2OCwweDBjLDB4MmEsMHg2OSwweGM0 LDB4ODIsCi0rCTB4M2IsMHhiYiwweGRhLDB4MGUsMHg3ZiwweDc3LDB4YTMsMHgxNywweDc4LDB4 NTcsMHhiMiwweDdiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfbm9uY2VbXSA9Ci0rCXsKLSsJMHg3NSwweGQ1LDB4 MWYsMHhhYywweGE0LDB4OGQsMHg0MiwweDc4LDB4ZDcsMHg2OSwweDg2LDB4OWQsCi0rCTB4Nzcs MHhkNywweDQxLDB4MGUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0r CXsKLSsJMHg0ZSwweDMzLDB4NDEsMHgzYywweDljLDB4YzIsMHhkMiwweDUzLDB4YWYsMHg5MCww eGVhLDB4Y2YsCi0rCTB4MTksMHg1MCwweDFlLDB4ZTYsMHg2ZiwweDYzLDB4YzgsMHgzMiwweDIy LDB4ZGMsMHgwNywweDY1LAotKwkweDljLDB4ZDMsMHhmOCwweDMwLDB4OWUsMHhlZCwweDM1LDB4 NzAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTkyX3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHg1ZCwweDhiLDB4 OGMsMHhjMSwweGRmLDB4MGUsMHgwMiwweDc4LDB4ZmIsMHgxOSwweGI4LDB4NjksCi0rCTB4Nzgs MHg0ZSwweDljLDB4NTIsMHhiYywweGM3LDB4MjAsMHhjOSwweGU2LDB4NWUsMHg3NywweDIyLAot KwkweDI4LDB4M2QsMHgwYywweDllLDB4NjgsMHhhOCwweDQ1LDB4ZDcKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9p bnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZDUsMHhlNywweDA4LDB4YzUsMHgxOSwweDk5 LDB4ZDUsMHgzMSwweDAzLDB4MGEsMHg3NCwweGI2LAotKwkweGI3LDB4ZWQsMHhlOSwweGVhCi0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml91c2VfZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4OWMsMHgyNiwweGRh LDB4ZjEsMHhhYywweGQ5LDB4NWEsMHhkNiwweGE4LDB4NjUsMHhmNSwweDAyLAotKwkweDhmLDB4 ZGMsMHhhMiwweDA5LDB4NTQsMHhhNiwweGUyLDB4YTQsMHhkZSwweDMyLDB4ZTAsMHgwMQotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x OTJfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDliLDB4OTAsMHhi MCwweDNhLDB4MGUsMHgzYSwweDgwLDB4MDcsMHg0YSwweGY0LDB4ZGEsMHg3NiwKLSsJMHgyOCww eDMwLDB4M2MsMHhlZSwweDU0LDB4MWIsMHg5NCwweDU5LDB4NTEsMHg0MywweDU2LDB4NzcsCi0r CTB4YWYsMHg4OCwweGRkLDB4NjMsMHg4OSwweDQ3LDB4MDYsMHg2NQotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2Fk ZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHgzYywweDExLDB4NjQsMHg3YSwweDk2LDB4ZjUs MHhkOCwweGI4LDB4YWUsMHhkNiwweDcwLDB4NGUsCi0rCTB4MTYsMHg5NiwweGRlLDB4ZTksMHg2 MiwweGJjLDB4ZWUsMHgyOCwweDJmLDB4MjYsMHhhNiwweGYwLAotKwkweDU2LDB4ZWYsMHhhMyww eGYxLDB4NmIsMHhhMSwweGIxLDB4NzcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9yZXR1cm5lZGJpdHNbXSA9Ci0r CXsKLSsJMHgwYiwweGUyLDB4NTYsMHgwMywweDFlLDB4ZGIsMHgyYywweDZkLDB4N2YsMHgxYiww eDE1LDB4NTgsCi0rCTB4MWEsMHhmOSwweDEzLDB4MjgKLSsJfTsKLSsKLSsKLSsvKiBBRVMtMjU2 IHVzZSBkZiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMjU2X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHg2MSwweDY4 LDB4ZmMsMHgxYSwweGYwLDB4YjUsMHg5NSwweDZiLDB4ODUsMHgwOSwweDliLDB4NzQsCi0rCTB4 M2YsMHgxMywweDc4LDB4NDksMHgzYiwweDg1LDB4ZWMsMHg5MywweDEzLDB4M2IsMHhhOSwweDRm LAotKwkweDk2LDB4YWIsMHgyYywweGU0LDB4YzgsMHg4ZiwweGRkLDB4NmEKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9k Zl9wcl9ub25jZVtdID0KLSsJewotKwkweGFkLDB4ZDIsMHhiYiwweGJhLDB4YjcsMHg2NSwweDg5 LDB4YzMsMHgyMSwweDZjLDB4NTUsMHgzMywKLSsJMHgyYiwweDM2LDB4ZmYsMHhhNAotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZf dXNlX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDZlLDB4Y2EsMHhl NywweDIwLDB4NzIsMHhkMywweDg0LDB4NWEsMHgzMiwweGQzLDB4NGIsMHgyNCwKLSsJMHg3Miww eGM0LDB4NjMsMHgyYiwweDlkLDB4MTIsMHgyNCwweDBjLDB4MjMsMHgyNiwweDhlLDB4ODMsCi0r CTB4MTYsMHgzNywweDBiLDB4ZDEsMHgwNiwweDRmLDB4NjgsMHg2ZAotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3By X2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDdlLDB4MDgsMHg0YSwweGJiLDB4ZTMsMHgy MSwweDdjLDB4YzksMHgyMywweGQyLDB4ZjgsMHhiMCwKLSsJMHg3MywweDk4LDB4YmEsMHg4NCww eDc0LDB4MjMsMHhhYiwweDA2LDB4OGEsMHhlMiwweDIyLDB4ZDMsCi0rCTB4N2IsMHhjZSwweDli LDB4ZDIsMHg0YSwweDc2LDB4YjgsMHhkZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHBy W10gPQotKwl7Ci0rCTB4MGIsMHgyMywweGFmLDB4ZGYsMHhmMSwweDYyLDB4ZDcsMHhkMywweDQz LDB4OTcsMHhmOCwweDc3LAotKwkweDA0LDB4YTgsMHg0MiwweDIwLDB4YmQsMHhmNiwweDBmLDB4 YzEsMHgxNywweDJmLDB4OWYsMHg1NCwKLSsJMHhiYiwweDU2LDB4MTcsMHg4NiwweDY4LDB4MGUs MHhiYSwweGE5Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkw eDMxLDB4OGUsMHhhZCwweGFmLDB4NDAsMHhlYiwweDZiLDB4NzQsMHgzMSwweDQ2LDB4ODAsMHhj NywKLSsJMHgxNywweGFiLDB4M2MsMHg3YQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1 dDJbXSA9Ci0rCXsKLSsJMHg5NCwweDZiLDB4YzksMHg5ZiwweGFiLDB4OGQsMHhjNSwweGVjLDB4 NzEsMHg4OCwweDFkLDB4MDAsCi0rCTB4OGMsMHg4OSwweDY4LDB4ZTQsMHhjOCwweDA3LDB4Nzcs MHgzNiwweDE3LDB4NmQsMHg3OSwweDc4LAotKwkweGM3LDB4MDYsMHg0ZSwweDk5LDB4MDQsMHgy OCwweDI5LDB4YzMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0rCXsKLSsJ MHhiZiwweDZjLDB4NTksMHgyYSwweDBkLDB4NDQsMHgwZiwweGFlLDB4OWEsMHg1ZSwweDAzLDB4 NzMsCi0rCTB4ZDgsMHhhNiwweGUxLDB4Y2YsMHgyNSwweDYxLDB4MzgsMHgyNCwweDg2LDB4OWUs MHg1MywweGU4LAotKwkweGE0LDB4ZGYsMHg1NiwweGY0LDB4MDYsMHgwNywweDljLDB4MGYKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X3VzZV9kZl9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHgyMiwweDRhLDB4YjQsMHhi OCwweGI2LDB4ZWUsMHg3ZCwweGIxLDB4OWUsMHhjOSwweGY5LDB4YTAsCi0rCTB4ZDksMHhlMiww eDk3LDB4MDAKLSsJfTsKLSsKLSsKLSsvKiBBRVMtMjU2IHVzZSBkZiBObyBQUiAgKi8KLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9l bnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHhhNSwweDNlLDB4MzcsMHgxMCwweDE3LDB4NDMsMHg5 MSwweDkzLDB4NTksMHgxZSwweDQ3LDB4NTAsCi0rCTB4ODcsMHhhYSwweGRkLDB4ZDUsMHhjMSww eGMzLDB4ODYsMHhjZCwweGNhLDB4MGQsMHhkYiwweDY4LAotKwkweGUwLDB4MDIsMHhkOCwweDBm LDB4ZGMsMHg0MCwweDFhLDB4NDcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9ub25jZVtdID0KLSsJewotKwkweGE5 LDB4NGQsMHhhNSwweDVhLDB4ZmQsMHhjNSwweDBjLDB4ZTUsMHgxYywweDlhLDB4M2IsMHg4YSwK LSsJMHg0YywweDQ0LDB4ODQsMHg0MAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3BlcnNvbmFsaXphdGlvbnN0cmlu Z1tdID0KLSsJewotKwkweDhiLDB4NTIsMHhhMiwweDRhLDB4OTMsMHhjMywweDRlLDB4YTcsMHgx ZSwweDFjLDB4YTcsMHgwNSwKLSsJMHhlYiwweDgyLDB4OWIsMHhhNiwweDVkLDB4ZTQsMHhkNCww eGUwLDB4N2YsMHhhMywweGQ4LDB4NmIsCi0rCTB4MzcsMHg4NCwweDVmLDB4ZjEsMHhjNywweGQ1 LDB4ZjYsMHhkMgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDIw LDB4ZjQsMHgyMiwweGVkLDB4ZjgsMHg1YywweGExLDB4NmEsMHgwMSwweGNmLDB4YmUsMHg1ZiwK LSsJMHg4ZCwweDZjLDB4OTQsMHg3ZiwweGFlLDB4MTIsMHhhOCwweDU3LDB4ZGIsMHgyYSwweGE5 LDB4YmYsCi0rCTB4YzcsMHhiMywweDY1LDB4ODEsMHg4MCwweDhkLDB4MGQsMHg0NgotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZf dXNlX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg0ZSwweDQ0LDB4ZmQsMHhmMyww eDllLDB4MjksMHhhMiwweGI4LDB4MGYsMHg1ZCwweDZjLDB4ZTEsCi0rCTB4MjgsMHgwYywweDNi LDB4YzEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMjU2X3VzZV9kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHhkZCww eDQwLDB4ZTUsMHg5OCwweDdiLDB4MjcsMHgxNiwweDczLDB4MTUsMHg2OCwweGQyLDB4NzYsCi0r CTB4YmYsMHgwYywweDY3LDB4MTUsMHg3NSwweDc5LDB4MDMsMHhkMywweGRlLDB4ZGUsMHg5MSww eDQ2LAotKwkweDQyLDB4ZGQsMHhkNCwweDY3LDB4YzgsMHg3OSwweGM4LDB4MWUKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3Vz ZV9kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg3ZiwweGQ4LDB4MWYsMHhi ZCwweDJhLDB4YjUsMHgxYywweDExLDB4NWQsMHg4MywweDRlLDB4OTksCi0rCTB4ZjYsMHg1Yyww eGE1LDB4NDAsMHgyMCwweGVkLDB4MzgsMHg4ZSwweGQ1LDB4OWUsMHhlMCwweDc1LAotKwkweDkz LDB4ZmUsMHgxMiwweDVlLDB4NWQsMHg3MywweGZiLDB4NzUKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9hZGRpdGlv bmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4Y2QsMHgyYywweGZmLDB4MTQsMHg2OSwweDNlLDB4NGMs MHg5ZSwweGZkLDB4ZmUsMHgyNiwweDBkLAotKwkweGU5LDB4ODYsMHgwMCwweDQ5LDB4MzAsMHhi YSwweGIxLDB4YzYsMHg1MCwweDU3LDB4NzcsMHgyYSwKLSsJMHg2MiwweDM5LDB4MmMsMHgzYiww eDc0LDB4ZWIsMHhjOSwweDBkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0r CTB4NGYsMHg3OCwweGJlLDB4YjksMHg0ZCwweDk3LDB4OGMsMHhlOSwweGQwLDB4OTcsMHhmZSww eGFkLAotKwkweGZhLDB4ZmQsMHgzNSwweDVlCi0rCX07Ci0rCi0rCi0rLyogQUVTLTEyOCBubyBk ZiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTI4X25vX2RmX3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDlhLDB4MjUsMHg2NSww eDEwLDB4NjcsMHhkNSwweGI2LDB4NmIsMHg3MCwweGExLDB4YjMsMHhhNCwKLSsJMHg0MywweDk1 LDB4ODAsMHhjMCwweDg0LDB4MGEsMHg3OSwweGIwLDB4ODgsMHg3NCwweGYyLDB4YmYsCi0rCTB4 MzEsMHg2YywweDMzLDB4MzgsMHgwYiwweDAwLDB4YjIsMHg1YQotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfbm9u Y2VbXSA9Ci0rCXsKLSsJMHg3OCwweDQ3LDB4NmIsMHhmNywweDkwLDB4OGUsMHg4NywweGYxCi0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzEyOF9ub19kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHhmNywweDIy LDB4MWQsMHgzYSwweGJlLDB4MWQsMHhjYSwweDMyLDB4MWIsMHhiZCwweDg3LDB4MGMsCi0rCTB4 NTEsMHgyNCwweDE5LDB4ZWUsMHhhMywweDIzLDB4MDksMHg2MywweDMzLDB4M2QsMHhhOCwweDBj LAotKwkweDFjLDB4ZmEsMHg0MiwweDg5LDB4Y2MsMHg2ZiwweGEwLDB4YTgKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2Rm X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweGM5LDB4ZTAsMHg4MCwweGJmLDB4OGMs MHg0NSwweDU4LDB4MzksMHhmZiwweDAwLDB4YWIsMHgwMiwKLSsJMHg0YywweDNlLDB4M2EsMHg5 NSwweDliLDB4ODAsMHhhOCwweDIxLDB4MmEsMHhlZSwweGJhLDB4NzMsCi0rCTB4YjEsMHhkOSww eGNmLDB4MjgsMHhmNiwweDhmLDB4OWIsMHgxMgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfZW50cm9weWlucHV0 cHJbXSA9Ci0rCXsKLSsJMHg0YywweGE4LDB4YzUsMHhmMCwweDU5LDB4OWUsMHhhNiwweDhkLDB4 MjYsMHg1MywweGQ3LDB4OGEsCi0rCTB4YTksMHhkOCwweGY3LDB4ZWQsMHhiMiwweGY5LDB4MTIs MHg0MiwweGUxLDB4ZTUsMHhiZCwweGU3LAotKwkweGU3LDB4MWQsMHg3NCwweDk5LDB4MDAsMHg5 ZCwweDMxLDB4M2UKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJ MHhlMiwweGFjLDB4MjAsMHhmMCwweDgwLDB4ZTcsMHhiYywweDdlLDB4OWMsMHg3YiwweDY1LDB4 NzEsCi0rCTB4YWYsMHgxOSwweDMyLDB4MTYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1 dDJbXSA9Ci0rCXsKLSsJMHgzMiwweDdmLDB4MzgsMHg4YiwweDczLDB4MGEsMHg3OCwweDgzLDB4 ZGMsMHgzMCwweGJlLDB4OWYsCi0rCTB4MTAsMHgxZiwweGY1LDB4MWYsMHhjYSwweDAwLDB4YjUs MHgwZCwweGQ2LDB4OWQsMHg2MCwweDgzLAotKwkweDUxLDB4NTQsMHg3ZCwweDM4LDB4MjMsMHgz YSwweDUyLDB4NTAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJewotKwkw eDE4LDB4NjEsMHg1MywweDU2LDB4ZWQsMHhlZCwweGQ3LDB4MjAsMHhmYiwweDcxLDB4MDQsMHg3 YSwKLSsJMHhiMiwweGFjLDB4YzEsMHgyOCwweGNkLDB4ZjIsMHhjMiwweGZjLDB4YWEsMHhiMSww eDA2LDB4MDcsCi0rCTB4ZTksMHg0NiwweDk1LDB4MDIsMHg0OCwweDAxLDB4NzgsMHhmOQotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x Mjhfbm9fZGZfcHJfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4MjksMHhjOCwweDFiLDB4MTUs MHhiMSwweGQxLDB4YzIsMHhmNiwweDcxLDB4ODYsMHg2OCwweDMzLAotKwkweDU3LDB4ODIsMHgz MywweGFmCi0rCX07Ci0rCi0rCi0rLyogQUVTLTEyOCBubyBkZiBObyBQUiAgKi8KLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2VudHJv cHlpbnB1dFtdID0KLSsJewotKwkweGM5LDB4YzUsMHg3OSwweGJjLDB4ZTgsMHhjNSwweDE5LDB4 ZDgsMHhiYywweDY2LDB4NzMsMHg2NywKLSsJMHhmNiwweGQzLDB4NzIsMHhhYSwweGE2LDB4MTYs MHhiOCwweDUwLDB4YjcsMHg0NywweDNhLDB4NDIsCi0rCTB4YWIsMHhmNCwweDE2LDB4YjIsMHg5 NiwweGQyLDB4YjYsMHg2MAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfbm9uY2VbXSA9Ci0rCXsKLSsJMHg1ZiwweGJm LDB4OTcsMHgwYywweDRiLDB4YTQsMHg4NywweDEzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wZXJzb25hbGl6YXRp b25zdHJpbmdbXSA9Ci0rCXsKLSsJMHhjZSwweGZiLDB4N2IsMHgzZiwweGQ0LDB4NmIsMHgyOSww eDBkLDB4NjksMHgwNiwweGZmLDB4YmIsCi0rCTB4ZjIsMHhlNSwweGM2LDB4NmMsMHgwYSwweDEw LDB4YTAsMHhjZiwweDFhLDB4NDgsMHhjNywweDhiLAotKwkweDNjLDB4MTYsMHg4OCwweGVkLDB4 NTAsMHgxMywweDgxLDB4Y2UKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewot KwkweDRiLDB4MjIsMHg0NiwweDE4LDB4MDIsMHg3YiwweGQyLDB4MWIsMHgyMiwweDQyLDB4N2Ms MHgzNywKLSsJMHhkOSwweGY2LDB4ZTgsMHg5YiwweDEyLDB4MzAsMHg1ZiwweGU5LDB4OTAsMHhl OCwweDA4LDB4MjQsCi0rCTB4NGYsMHgwNiwweDY2LDB4ZGIsMHgxOSwweDJiLDB4MTMsMHg5NQot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xMjhfbm9fZGZfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDJlLDB4OTYsMHg3MCww eDY0LDB4ZmEsMHhkZiwweGRmLDB4NTcsMHhiNSwweDgyLDB4ZWUsMHhkNiwKLSsJMHhlZCwweDNl LDB4NjUsMHhjMgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xMjhfbm9fZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4 MjYsMHhjMCwweDcyLDB4MTYsMHgzYSwweDRiLDB4YjcsMHg5OSwweGQ0LDB4MDcsMHhhZiwweDY2 LAotKwkweDYyLDB4MzYsMHg5NiwweGE0LDB4NTEsMHgxNywweGZhLDB4MDcsMHg4YiwweDE3LDB4 NWUsMHhhMSwKLSsJMHgyZiwweDNjLDB4MTAsMHhlNywweDkwLDB4ZDAsMHg0NiwweDAwCi0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEy OF9ub19kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg4MywweDM5LDB4Mzcs MHg3YiwweDAyLDB4MDYsMHhkMiwweDEyLDB4MTMsMHg4ZCwweDhiLDB4ZjIsCi0rCTB4ZjAsMHhm NiwweDI2LDB4ZWIsMHhhNCwweDIyLDB4N2IsMHhjMiwweGU3LDB4YmEsMHg3OSwweGU0LAotKwkw eDNiLDB4NzcsMHg1ZCwweDRkLDB4NDcsMHhiMiwweDJkLDB4YjQKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2FkZGl0 aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHgwYiwweGI5LDB4NjcsMHgzNywweGRiLDB4ODMsMHhk ZiwweGNhLDB4ODEsMHg4YiwweGY5LDB4M2YsCi0rCTB4ZjEsMHgxMSwweDFiLDB4MmYsMHhmMCww eDYxLDB4YTYsMHhkZiwweGJhLDB4YTMsMHhiMSwweGFjLAotKwkweGQzLDB4ZTYsMHgwOSwweGI4 LDB4MmMsMHg2YSwweDY3LDB4ZDYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3JldHVybmVkYml0c1tdID0KLSsJewot KwkweDFlLDB4YTcsMHhhNCwweGU0LDB4ZTEsMHhhNiwweDdjLDB4NjksMHg5YSwweDQ0LDB4NmMs MHgzNiwKLSsJMHg4MSwweDM3LDB4MTksMHhkNAotKwl9OwotKwotKwotKy8qIEFFUy0xOTIgbm8g ZGYgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzE5Ml9ub19kZl9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHg5ZCwweDJjLDB4ZDIs MHg1NSwweDY2LDB4ZWEsMHhlMCwweGJlLDB4MTgsMHhiNywweDc2LDB4ZTcsCi0rCTB4NzMsMHgz NSwweGQ4LDB4MWYsMHhhZCwweDNhLDB4ZTMsMHg4MSwweDBlLDB4OTIsMHhkMCwweDYxLAotKwkw eGM5LDB4MTIsMHgyNiwweGY2LDB4MWMsMHhkZiwweGZlLDB4NDcsMHhhYSwweGZlLDB4N2QsMHg1 YSwKLSsJMHgxNywweDFmLDB4OGQsMHg5YQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfbm9uY2VbXSA9Ci0rCXsK LSsJMHg0NCwweDgyLDB4ZWQsMHhlOCwweDRjLDB4MjgsMHg1YSwweDE0LDB4ZmYsMHg4OCwweDhk LDB4MTksCi0rCTB4NjEsMHg1YywweGVlLDB4MGYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX3BlcnNvbmFsaXph dGlvbnN0cmluZ1tdID0KLSsJewotKwkweDQ3LDB4ZDcsMHg5YiwweDk5LDB4YWEsMHhjYiwweGU3 LDB4ZDIsMHg1NywweDY2LDB4MmMsMHhlMSwKLSsJMHg3OCwweGQ2LDB4MmMsMHhlYSwweGEzLDB4 MjMsMHg1ZiwweDJhLDB4YzEsMHgzYSwweGYwLDB4YTQsCi0rCTB4MjAsMHgzYiwweGZhLDB4MDcs MHhkNSwweDA1LDB4MDIsMHhlNCwweDU3LDB4MDEsMHhiNiwweDEwLAotKwkweDU3LDB4MmUsMHhl NywweDU1Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHg0Yiww eDc0LDB4MGIsMHg0MCwweGNlLDB4NmIsMHhjMiwweDZhLDB4MjQsMHhiNCwweGYzLDB4YWQsCi0r CTB4N2EsMHhhNSwweDdhLDB4YTIsMHgxNSwweGUyLDB4YzgsMHg2MSwweDE1LDB4YzYsMHhiNyww eDg1LAotKwkweDY5LDB4MTEsMHhhZCwweDdiLDB4MTQsMHhkMiwweGY2LDB4MTIsMHhhMSwweDk1 LDB4NWQsMHgzZiwKLSsJMHhlMiwweGQwLDB4MGMsMHgyZgotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfZW50cm9w eWlucHV0cHJbXSA9Ci0rCXsKLSsJMHgwYywweDljLDB4YWQsMHgwNSwweGVlLDB4YWUsMHg0OCww eDIzLDB4ODksMHg1OSwweGExLDB4OTQsCi0rCTB4ZDcsMHhkOCwweDc1LDB4ZDUsMHg1NCwweDkz LDB4YzcsMHg0YSwweGQ5LDB4MjYsMHhkZSwweGViLAotKwkweGJhLDB4YjAsMHg3ZSwweDMwLDB4 MWQsMHg1ZiwweDY5LDB4NDAsMHg5YywweDNiLDB4MTcsMHg1OCwKLSsJMHgxZCwweDMwLDB4YjMs MHg3OAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xOTJfbm9fZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGY3LDB4 OTMsMHhiMCwweDZkLDB4NzcsMHg4MywweGQ1LDB4MzgsMHgwMSwweGUxLDB4NTIsMHg0MCwKLSsJ MHg3ZSwweDNlLDB4MGMsMHgyNgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0K LSsJewotKwkweGJjLDB4NGIsMHgzNywweDQ0LDB4MWMsMHhjNSwweDQ1LDB4NWYsMHg4ZiwweDUx LDB4NjIsMHg4YSwKLSsJMHg4NSwweDMwLDB4MWQsMHg3YywweGU0LDB4Y2YsMHhmNywweDQ0LDB4 Y2UsMHgzMiwweDNlLDB4NTcsCi0rCTB4OTUsMHhhNCwweDJhLDB4ZGYsMHhmZCwweDllLDB4Mzgs MHg0MSwweGIzLDB4ZjYsMHhjNSwweGVlLAotKwkweDBjLDB4NGIsMHhlZSwweDZlCi0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9u b19kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0rCXsKLSsJMHhlYywweGFmLDB4ZjYsMHg0Ziww eGIxLDB4YTAsMHg1NCwweGI1LDB4NWIsMHhlMywweDQ2LDB4YjAsCi0rCTB4NzYsMHg1YSwweDdj LDB4M2YsMHg3YiwweDk0LDB4NjksMHgyMSwweDUxLDB4MDIsMHhlNSwweDlmLAotKwkweDA0LDB4 NTksMHgwMiwweDk4LDB4YzYsMHg0MywweDJjLDB4Y2MsMHgyNiwweDRjLDB4ODcsMHg2YiwKLSsJ MHg4ZSwweDBhLDB4ODMsMHhkZgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfcmV0dXJuZWRiaXRzW10gPQotKwl7 Ci0rCTB4NzQsMHg0NSwweGZiLDB4NTMsMHg4NCwweDk2LDB4YmUsMHhmZiwweDE1LDB4Y2MsMHg0 MSwweDkxLAotKwkweGI5LDB4YTEsMHgyMSwweDY4Ci0rCX07Ci0rCi0rCi0rLyogQUVTLTE5MiBu byBkZiBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMTkyX25vX2RmX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDNjLDB4N2QsMHhi NSwweGUwLDB4NTQsMHhkOSwweDZlLDB4OGMsMHhhOSwweDg2LDB4Y2UsMHg0ZSwKLSsJMHg2Yiww eGFmLDB4ZWIsMHgyZiwweGU3LDB4NzUsMHhlMCwweDhiLDB4YTQsMHgzYiwweDA3LDB4ZmUsCi0r CTB4YmUsMHgzMywweDc1LDB4OTMsMHg4MCwweDI3LDB4YjUsMHgyOSwweDQ3LDB4OGIsMHhjNyww eDI4LAotKwkweDk0LDB4YzMsMHg1OSwweDYzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9ub25jZVtdID0KLSsJewot KwkweDQzLDB4ZjEsMHg3ZCwweGI4LDB4YzMsMHhmZSwweGQwLDB4MjMsMHg2YiwweGI0LDB4OTIs MHhkYiwKLSsJMHgyOSwweGZkLDB4NDUsMHg3MQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcGVyc29uYWxpemF0aW9u c3RyaW5nW10gPQotKwl7Ci0rCTB4OWYsMHgyNCwweDI5LDB4OTksMHg5ZSwweDAxLDB4YWIsMHhl OSwweDE5LDB4ZDgsMHgyMywweDA4LAotKwkweGI3LDB4ZDYsMHg3ZSwweDhjLDB4YzAsMHg5ZSww eDdmLDB4NmUsMHg1YiwweDMzLDB4MjAsMHg5NiwKLSsJMHgwYiwweDIzLDB4MmMsMHhhNSwweDZh LDB4ZjgsMHgxYiwweDA0LDB4MjYsMHhkYiwweDJlLDB4MmIsCi0rCTB4M2IsMHg4OCwweGNlLDB4 MzUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTkyX25vX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDk0LDB4ZTksMHg3 YywweDNkLDB4YTcsMHhkYiwweDYwLDB4ODMsMHgxZiwweDk4LDB4M2YsMHgwYiwKLSsJMHg4OCww eDU5LDB4NTcsMHg1MSwweDg4LDB4OWYsMHg3NiwweDQ5LDB4OWYsMHhhNiwweGRhLDB4NzEsCi0r CTB4MWQsMHgwZCwweDQ3LDB4MTYsMHg2MywweGM1LDB4NjgsMHhlNCwweDVkLDB4MzksMHg2OSww eGIzLAotKwkweDNlLDB4YmUsMHhkNCwweDhlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9pbnRfcmV0dXJuZWRiaXRz W10gPQotKwl7Ci0rCTB4ZjksMHhkNywweGFkLDB4NjksMHhhYiwweDhmLDB4MjMsMHg1NiwweDcw LDB4MTcsMHg0ZiwweDJhLAotKwkweDQ1LDB4ZTcsMHg0YSwweGM1Ci0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9lbnRy b3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHhhNiwweDcxLDB4NmEsMHgzZCwweGJhLDB4ZDEs MHhlOCwweDY2LDB4YTYsMHhlZiwweGIyLDB4MGUsCi0rCTB4YTgsMHg5YywweGFhLDB4NGUsMHhh ZiwweDE3LDB4ODksMHg1MCwweDAwLDB4ZGEsMHhhMSwweGIxLAotKwkweDBiLDB4YTQsMHhkOSww eDM1LDB4ODksMHhjOCwweGU1LDB4YjAsMHhkOSwweGI3LDB4YzQsMHgzMywKLSsJMHg5YiwweGNi LDB4N2UsMHg3NQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xOTJfbm9fZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQotKwl7Ci0r CTB4MjcsMHgyMSwweGZjLDB4YzIsMHhiZCwweGYzLDB4M2MsMHhjZSwweGMzLDB4Y2EsMHhjMSww eDAxLAotKwkweGUwLDB4ZmYsMHg5MywweDEyLDB4N2QsMHg1NCwweDQyLDB4ZTMsMHg5ZiwweDAz LDB4ZGYsMHgyNywKLSsJMHgwNCwweDA3LDB4M2MsMHg1MywweDdmLDB4YTgsMHg2NiwweGM4LDB4 OTcsMHg0YiwweDYxLDB4NDAsCi0rCTB4NWQsMHg3YSwweDI1LDB4NzkKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2Fk ZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHgyZCwweDhlLDB4MTYsMHg1ZCwweDBiLDB4OWYs MHhlYiwweGFhLDB4ZDYsMHhlYywweDI4LDB4NzEsCi0rCTB4N2MsMHgwYiwweGMxLDB4MWQsMHhk NCwweDQ0LDB4MTksMHg0NywweGZkLDB4MWQsMHg3YywweGU1LAotKwkweGYzLDB4MjcsMHhlMSww eGI2LDB4NzIsMHgwYSwweGUwLDB4ZWMsMHgwZSwweGNkLDB4ZWYsMHgxYSwKLSsJMHg5MSwweDZh LDB4ZTMsMHg1ZgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZTUsMHhk YSwweGI4LDB4ZTAsMHg2MywweDU5LDB4NWEsMHhjYywweDNkLDB4ZGMsMHg5ZiwweGU4LAotKwkw eDY2LDB4NjcsMHgyYywweDkyCi0rCX07Ci0rCi0rCi0rLyogQUVTLTI1NiBubyBkZiBQUiAgKi8K LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25v X2RmX3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDE1LDB4YzcsMHg1ZCwweGNiLDB4NDEs MHg0YiwweDE2LDB4MDEsMHgzYSwweGQxLDB4NDQsMHhlOCwKLSsJMHgyMiwweDMyLDB4YzYsMHg5 YywweDNmLDB4ZTcsMHg0MywweGY1LDB4OWEsMHhkMywweGVhLDB4ZjIsCi0rCTB4ZDcsMHg0ZSww eDZlLDB4NmEsMHg1NSwweDczLDB4NDAsMHhlZiwweDg5LDB4YWQsMHgwZCwweDAzLAotKwkweDk2 LDB4N2UsMHg3OCwweDgxLDB4MmYsMHg5MSwweDFiLDB4NDQsMHhiMCwweDAyLDB4YmEsMHgxYwot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18yNTZfbm9fZGZfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHhkYywweGU0LDB4ZDQsMHgyNywweDdh LDB4OTAsMHhkNywweDk5LDB4NDMsMHhhMSwweDNjLDB4MzAsCi0rCTB4Y2MsMHg0YiwweGVlLDB4 MmUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMjU2X25vX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweGUz LDB4ZTYsMHhiOSwweDExLDB4ZTQsMHg3YSwweGE0LDB4NDAsMHg2YiwweGY4LDB4NzMsMHhmNywK LSsJMHg3ZSwweGVjLDB4YzcsMHhiOSwweDk3LDB4YmYsMHhmOCwweDI1LDB4N2IsMHhiZSwweDEx LDB4OWIsCi0rCTB4NWIsMHg2YSwweDBjLDB4MmUsMHgyYiwweDAxLDB4NTEsMHhjZCwweDQxLDB4 NGIsMHg2YiwweGFjLAotKwkweDMxLDB4YTgsMHgwYiwweGY3LDB4ZTYsMHg1OSwweDQyLDB4Yjgs MHgwMywweDBjLDB4ZjgsMHgwNgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPQot Kwl7Ci0rCTB4NmEsMHg5ZiwweDAwLDB4OTEsMHhhZSwweGZlLDB4Y2YsMHg4NCwweDk5LDB4Y2Us MHhiMSwweDQwLAotKwkweDZkLDB4NWQsMHgzMywweDI4LDB4ODQsMHhmNCwweDhjLDB4NjMsMHg0 YywweDdlLDB4YmQsMHgyYywKLSsJMHg4MCwweDc2LDB4ZWUsMHg1YSwweGFhLDB4MTUsMHgwNyww eDMxLDB4ZDgsMHhiYiwweDhjLDB4NjksCi0rCTB4OWQsMHg5ZCwweGJjLDB4N2UsMHg0OSwweGFl LDB4ZWMsMHgzOSwweDZiLDB4ZDEsMHgxZiwweDdlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9lbnRyb3B5aW5w dXRwcltdID0KLSsJewotKwkweGYzLDB4YjksMHg3NSwweDljLDB4YmQsMHg4OCwweGVhLDB4YTIs MHg1MCwweGFkLDB4ZDYsMHgxNiwKLSsJMHgxYSwweDEyLDB4M2MsMHg4NiwweDY4LDB4YWYsMHg2 ZiwweGJlLDB4MTksMHhmMiwweGVlLDB4Y2MsCi0rCTB4YTUsMHg3MCwweDg0LDB4NTMsMHg1MCww eGNiLDB4OWYsMHgxNCwweGE5LDB4ZTUsMHhlZSwweGI5LAotKwkweDQ4LDB4NDUsMHg0MCwweGUy LDB4YzcsMHhjOSwweDlhLDB4NzQsMHhmZiwweDhjLDB4OTksMHgxZgotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJf aW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDJlLDB4ZjIsMHg0NSwweDRjLDB4NjIsMHgy ZSwweDBhLDB4YjksMHg2YiwweGEyLDB4ZmQsMHg1NiwKLSsJMHg3OSwweDYwLDB4OTMsMHhjZgot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18yNTZfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweGFmLDB4NjksMHgy MCwweGU5LDB4M2IsMHgzNywweDlkLDB4M2YsMHhiNCwweDgwLDB4MDIsMHg3YSwKLSsJMHgyNSww eDdkLDB4YjgsMHhkZSwweDcxLDB4YzUsMHgwNiwweDBjLDB4YjQsMHhlMiwweDhmLDB4MzUsCi0r CTB4ZDgsMHgxNCwweDBkLDB4N2YsMHg3NiwweDYzLDB4NGUsMHhiNSwweGVlLDB4ZTksMHg2Ziww eDM0LAotKwkweGM3LDB4NWYsMHg1NiwweDE0LDB4NGEsMHhlOCwweDczLDB4OTUsMHg1YiwweDFj LDB4YjksMHhjYgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4 ZTUsMHhiMCwweDJlLDB4N2UsMHg1MiwweDMwLDB4ZTMsMHg2MywweDgyLDB4YjYsMHg0NCwweGQz LAotKwkweDI1LDB4MTksMHgwNSwweDI0LDB4OWEsMHg5ZiwweDVmLDB4MjcsMHg2YSwweDI5LDB4 YWIsMHhmYSwKLSsJMHgwNywweGEyLDB4NDIsMHgwZiwweGM1LDB4YTgsMHg5NCwweDdjLDB4MTcs MHg3YiwweDg1LDB4ODMsCi0rCTB4MGMsMHgyNSwweDBlLDB4NjMsMHgwYiwweGU5LDB4MTIsMHg2 MCwweGNkLDB4ZWYsMHg4MCwweDBmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0r CXsKLSsJMHg1ZSwweGYyLDB4MjYsMHhlZiwweDlmLDB4NTgsMHg1ZCwweGQ1LDB4NGEsMHgxMCww eGZlLDB4YTcsCi0rCTB4MmQsMHg1ZiwweDRhLDB4NDYKLSsJfTsKLSsKLSsKLSsvKiBBRVMtMjU2 IG5vIGRmIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18yNTZfbm9fZGZfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4ZmIsMHhjZiww eDFiLDB4NjEsMHgxNiwweDg5LDB4NzgsMHgyMywweGY1LDB4ZDgsMHg5NiwweGUzLAotKwkweDRl LDB4NjQsMHgwYiwweDI5LDB4OWEsMHgzZiwweGY4LDB4YTUsMHhlZCwweGYyLDB4ZmUsMHhkYiwK LSsJMHgxNiwweGNhLDB4N2YsMHgxMCwweGZhLDB4NWUsMHgxOCwweDc2LDB4MmMsMHg2MywweDVl LDB4OTYsCi0rCTB4Y2YsMHhiMywweGQ2LDB4ZmMsMHhhZiwweDk5LDB4MzksMHgyOCwweDljLDB4 NjEsMHhlOCwweGIzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9ub25jZVtdID0KLSsJewotKwkweDEyLDB4OTYsMHhm MCwweDUyLDB4ZjMsMHg4ZCwweDgxLDB4Y2YsMHhkZSwweDg2LDB4ZjIsMHg5OSwKLSsJMHg0Myww eDk2LDB4YjksMHhmMAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7 Ci0rCTB4NjMsMHgwZCwweDc4LDB4ZjUsMHg5MCwweDhlLDB4MzIsMHg0NywweGIwLDB4NGQsMHgz NywweDYwLAotKwkweDA5LDB4OTYsMHhiYywweGJmLDB4OTcsMHg3YSwweDYyLDB4MTQsMHg0NSww eGJkLDB4OGQsMHhjYywKLSsJMHg2OSwweGZiLDB4MDMsMHhlMSwweDgwLDB4MWMsMHhjNywweGUy LDB4MmEsMHhmOSwweDM3LDB4M2YsCi0rCTB4NjYsMHg0ZCwweDYyLDB4ZDksMHgxMCwweGUwLDB4 YWQsMHhjOCwweDlhLDB4ZjAsMHhhOCwweDZkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9hZGRpdGlvbmFsaW5wdXRb XSA9Ci0rCXsKLSsJMHgzNiwweGM2LDB4MTMsMHg2MCwweGJiLDB4MTQsMHhhZCwweDIyLDB4YjAs MHgzOCwweGFjLDB4YTYsCi0rCTB4MTgsMHgxNiwweDkzLDB4MjUsMHg4NiwweGI3LDB4ZGMsMHhk YywweDM2LDB4OTgsMHgyYiwweGY5LAotKwkweDY4LDB4MzMsMHhkMywweGM2LDB4ZmYsMHhjZSww eDhkLDB4MTUsMHg1OSwweDgyLDB4NzYsMHhlZCwKLSsJMHg2ZiwweDhkLDB4NDksMHg3NCwweDJm LDB4ZGEsMHhkYywweDFmLDB4MTcsMHhkMCwweGRlLDB4MTcKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2ludF9yZXR1 cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHgxNiwweDJmLDB4OGUsMHgzZiwweDIxLDB4N2EsMHgxYyww eDIwLDB4NTYsMHhkMSwweDkyLDB4ZjYsCi0rCTB4ZDIsMHgyNSwweDc1LDB4MGUKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25v X2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDkxLDB4NzksMHg3NiwweGVlLDB4 ZTAsMHhjZiwweDllLDB4YzIsMHhkNSwweGQ0LDB4MjMsMHg5YiwKLSsJMHgxMiwweDhjLDB4N2Us MHgwYSwweGI3LDB4ZDIsMHg4YiwweGQ2LDB4N2MsMHhhMywweGM2LDB4ZTUsCi0rCTB4MGUsMHhh YSwweGM3LDB4NmIsMHhhZSwweDBkLDB4ZmEsMHg1MywweDA2LDB4NzksMHhhMSwweGVkLAotKwkw eDRkLDB4NmEsMHgwZSwweGQ4LDB4OWQsMHhiZSwweDFiLDB4MzEsMHg5MywweDdiLDB4ZWMsMHhm YgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18yNTZfbm9fZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4ZDIsMHg0 NiwweDUwLDB4MjIsMHgxMCwweDE0LDB4NjMsMHhmNywweGVhLDB4MGYsMHhiOSwweDdlLAotKwkw eDBkLDB4ZTEsMHg5NCwweDA3LDB4YWYsMHgwOSwweDQ0LDB4MzEsMHhlYSwweDY0LDB4YTQsMHgx OCwKLSsJMHg1YiwweGY5LDB4ZDgsMHhjMiwweGZhLDB4MDMsMHg0NywweGM1LDB4MzksMHg0Myww eGQ1LDB4M2IsCi0rCTB4NjIsMHg4NiwweDY0LDB4ZWEsMHgyYywweDczLDB4OGMsMHhhZSwweDlk LDB4OTgsMHg5OCwweDI5Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0r CTB4OGMsMHhhYiwweDE4LDB4ZjgsMHhjMywweGVjLDB4MTgsMHg1YywweGIzLDB4MWUsMHg5ZCww eGJlLAotKwkweDNmLDB4MDMsMHhiNCwweDAwLDB4OTgsMHg5ZCwweGFlLDB4ZWIsMHhmNCwweDk0 LDB4ZjgsMHg0MiwKLSsJMHg4ZiwweGUzLDB4MzksMHgwNywweGUxLDB4YzksMHhhZCwweDBiLDB4 MWYsMHhlZCwweGMwLDB4YmEsCi0rCTB4ZjYsMHhkMSwweGVjLDB4MjcsMHg4NiwweDdiLDB4ZDYs MHg1NSwweDliLDB4NjAsMHhhNSwweGM2Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9yZXR1cm5lZGJpdHNbXSA9Ci0r CXsKLSsJMHhlZiwweGQyLDB4ZDgsMHg1YywweGRjLDB4NjIsMHgyNSwweDlmLDB4YWEsMHgxZSww eDJjLDB4NjcsCi0rCTB4ZjYsMHgwMiwweDMyLDB4ZTIKLSsJfTsKLSsKLSsKLSsvKiBTSEEtMSBQ UiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEx X3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweGQyLDB4MzYsMHhhNSwweDI3LDB4MzEsMHg3 MywweGRkLDB4MTEsMHg0ZiwweDkzLDB4YmQsMHhlMiwKLSsJMHgzMSwweGE1LDB4OTEsMHgxMwot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTFfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHhiNSwweGIzLDB4NjAsMHhlZiwweGY3LDB4NjMsMHgz MSwweGYzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMV9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHhkNCwweGJi LDB4MDIsMHgxMCwweGIyLDB4NzEsMHhkYiwweDgxLDB4ZDYsMHhmMCwweDQyLDB4NjAsCi0rCTB4 ZGEsMHhlYSwweDc3LDB4NTIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDRk LDB4ZDIsMHg2YywweDg3LDB4ZmIsMHgyYywweDRmLDB4YTYsMHg4ZCwweDE2LDB4NjMsMHgyMiwK LSsJMHg2YSwweDUxLDB4ZTMsMHhmOAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJ MHhjOSwweDgzLDB4OWUsMHgxNiwweGY2LDB4MWMsMHgwZiwweGIyLDB4ZWMsMHg2MCwweDMxLDB4 YTksCi0rCTB4Y2IsMHhhOSwweDM2LDB4N2EKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0r CXsKLSsJMHhhOCwweDEzLDB4NGYsMHhmNCwweDMxLDB4MDIsMHg0NCwweGUzLDB4ZDMsMHgzZCww eDYxLDB4OWUsCi0rCTB4ZTUsMHhjNiwweDNlLDB4ODksMHhiNSwweDliLDB4MGYsMHgzNQotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFf cHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweGY5LDB4ZTgsMHhkMiwweDcyLDB4MTMs MHgzNCwweDk1LDB4NmYsMHgxNSwweDQ5LDB4NDcsMHg5OSwKLSsJMHgxNiwweDAzLDB4MTksMHg0 NwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTFfcHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4NGUsMHg4YywweDQ5LDB4OWIs MHg0YSwweDVjLDB4OWIsMHg5YywweDNhLDB4ZWUsMHhmYiwweGQyLAotKwkweGFlLDB4Y2QsMHg4 YywweGM0Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMV9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg1MCwweGI0LDB4YjQsMHhj ZCwweDY4LDB4NTcsMHhmYywweDJlLDB4YzEsMHg1MiwweGNjLDB4ZjYsCi0rCTB4NjgsMHhhNCww eDgxLDB4ZWQsMHg3ZSwweGU0LDB4MWQsMHg4NwotKwl9OwotKwotKwotKy8qIFNIQS0xIE5vIFBS ICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFf ZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4YTksMHg0NywweDFiLDB4MjksMHgyZCwweDFjLDB4 MDUsMHhkZiwweDc2LDB4ZDAsMHg2MiwweGY5LAotKwkweGUyLDB4N2YsMHg0YywweDdiCi0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9u b25jZVtdID0KLSsJewotKwkweDUzLDB4MjMsMHgyNCwweGUzLDB4ZWMsMHgwYywweDU0LDB4MTQK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGExX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDdhLDB4ODcsMHhhMSwweGFj LDB4MWMsMHhmZCwweGFiLDB4YWUsMHhmNywweGQ2LDB4ZmIsMHg3NiwKLSsJMHgyOCwweGVjLDB4 NmQsMHhjYQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTFfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4ZmMsMHg5MiwweDM1LDB4 ZDYsMHg3ZSwweGI3LDB4MjQsMHg2NSwweGZkLDB4MTIsMHgyNywweDM1LAotKwkweGMwLDB4NzIs MHhjYSwweDI4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMV9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4NTcsMHg4OCwweDgy LDB4ZTUsMHgyNSwweGE1LDB4MmMsMHg0YSwweDA2LDB4MjAsMHg2YywweDcyLAotKwkweDU1LDB4 NjEsMHhkZCwweDkwLDB4NzEsMHg5ZiwweDk1LDB4ZWEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2VudHJvcHlpbnB1dHJlc2VlZFtd ID0KLSsJewotKwkweDY5LDB4YTUsMHg0MCwweDYyLDB4OTgsMHg0NywweDU2LDB4NzMsMHg0YSww eDhmLDB4NjAsMHg5NiwKLSsJMHhkNiwweDk5LDB4MjcsMHhlZAotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfYWRkaXRpb25hbGlucHV0 cmVzZWVkW10gPQotKwl7Ci0rCTB4ZTUsMHg0MCwweDRlLDB4YmQsMHg1MCwweDAwLDB4ZjUsMHgx NSwweGE2LDB4ZWUsMHg0NSwweGRhLAotKwkweDg0LDB4M2QsMHhkNCwweGMwCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9hZGRpdGlv bmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4MTEsMHg1MSwweDE0LDB4ZjAsMHgwOSwweDFiLDB4NGUs MHg1NiwweDBkLDB4ZTksMHhmNiwweDFlLAotKwkweDUyLDB4NjUsMHhjZCwweDk2Ci0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9yZXR1 cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhhMSwweDljLDB4OTQsMHg2ZSwweDI5LDB4ZTEsMHgzMyww eDBkLDB4MzIsMHhkNiwweGFhLDB4Y2UsCi0rCTB4NzEsMHgzZiwweDUyLDB4NzIsMHg4YiwweDQy LDB4YTgsMHhkNwotKwl9OwotKwotKwotKy8qIFNIQS0yMjQgUFIgICovCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2VudHJvcHlpbnB1dFtd ID0KLSsJewotKwkweDEyLDB4NjksMHgzMiwweDRmLDB4ODMsMHhhNiwweGY1LDB4MTQsMHhlMyww eDQ5LDB4M2UsMHg3NSwKLSsJMHgzZSwweGRlLDB4YWQsMHhhMSwweDI5LDB4YzMsMHhmMywweDE5 LDB4MjAsMHhiNSwweDRjLDB4ZDkKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHg2YSwweDc4 LDB4ZDAsMHhlYiwweGJiLDB4NWEsMHhmMCwweGVlLDB4ZTgsMHhjMywweGJhLDB4NzEKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRf cHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4ZDUsMHhiOCwweGI2LDB4YmMs MHhjMSwweDViLDB4NjAsMHgzMSwweDNjLDB4ZjUsMHhlNSwweGMwLAotKwkweDhlLDB4NTIsMHg3 YSwweGJkLDB4ZWEsMHg0NywweGE5LDB4NWYsMHg4ZiwweGY5LDB4OGIsMHhhZQotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9h ZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHgxZiwweDU1LDB4ZWMsMHhhZSwweDE2LDB4MTIs MHg4NCwweGJhLDB4ODQsMHgxNiwweDE5LDB4ODgsCi0rCTB4OGUsMHhiOCwweDMzLDB4MjUsMHg1 NCwweGZmLDB4Y2EsMHg3OSwweGFmLDB4MDcsMHgyNSwweDUwCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2VudHJvcHlpbnB1 dHByW10gPQotKwl7Ci0rCTB4OTIsMHhhMywweDMyLDB4YTgsMHg5YSwweDBhLDB4NTgsMHg3Yyww eDFkLDB4NWEsMHg3ZSwweGUxLAotKwkweGIyLDB4NzMsMHhhYiwweDBlLDB4MTYsMHg3OSwweDIz LDB4ZDMsMHgyOSwweDg5LDB4ODEsMHhlMQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQot Kwl7Ci0rCTB4ZjMsMHgzOCwweDkxLDB4NDAsMHgzNywweDdhLDB4NTEsMHg3MiwweDQyLDB4NzQs MHg3OCwweDBhLAotKwkweDY5LDB4ZmQsMHhhNiwweDQ0LDB4NDMsMHg0NSwweDZjLDB4MGMsMHg1 YSwweDE5LDB4ZmYsMHhmMSwKLSsJMHg1NCwweDYwLDB4ZWUsMHg2YQotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9hZGRpdGlv bmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4NzUsMHhmMywweDA0LDB4MjUsMHhkZCwweDM2LDB4YTgs MHgzNywweDQ2LDB4YWUsMHgwYywweDUyLAotKwkweDA1LDB4NzksMHg0YywweDI2LDB4ZGIsMHhl OSwweDcxLDB4MTYsMHg0YywweDBhLDB4ZjIsMHg2MAotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9lbnRyb3B5aW5wdXRwcjJb XSA9Ci0rCXsKLSsJMHhlYSwweGM1LDB4MDMsMHgwYSwweDRmLDB4YjAsMHgzOCwweDhkLDB4MjMs MHhkNCwweGM4LDB4NzcsCi0rCTB4ZTIsMHg2ZCwweDljLDB4MGIsMHg0NCwweGY3LDB4MmQsMHg1 YiwweGJmLDB4NWQsMHgyYSwweDExCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX3JldHVybmVkYml0c1tdID0KLSsJewotKwkw eDYwLDB4NTAsMHgyYiwweGU3LDB4ODYsMHhkOCwweDI2LDB4NzMsMHhlMywweDFkLDB4OTUsMHgy MCwKLSsJMHhiMywweDJjLDB4MzIsMHgxYywweGY1LDB4Y2UsMHg1NywweGE2LDB4NjcsMHgyYiww eGRjLDB4NGUsCi0rCTB4ZGQsMHgxMSwweDRjLDB4YzQKLSsJfTsKLSsKLSsKLSsvKiBTSEEtMjI0 IE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTIyNF9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHhiMiwweDFjLDB4NzcsMHg0ZCwweGY2 LDB4ZDMsMHhiNiwweDQwLDB4YjcsMHgzMCwweDNlLDB4MjksCi0rCTB4YjAsMHg4NSwweDFjLDB4 YmUsMHg0YSwweGVhLDB4NmIsMHg1YSwweGI1LDB4OGEsMHg5NywweGViCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X25vbmNlW10g PQotKwl7Ci0rCTB4NDIsMHgwMiwweDBhLDB4MWMsMHg5OCwweDlhLDB4NzcsMHg5ZSwweDlmLDB4 ODAsMHhiYSwweGUwCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMjI0X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDk4 LDB4YjgsMHgwNCwweDQxLDB4ZmMsMHhjMSwweDVkLDB4YzUsMHhlOSwweGI5LDB4MDgsMHhkYSwK LSsJMHhmOSwweGZhLDB4MGQsMHg5MCwweGNlLDB4ZGYsMHgxZCwweDEwLDB4YTksMHg4ZCwweDUw LDB4MGMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEyMjRfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4OWEsMHg4ZCwweDM5LDB4 NDksMHg0MiwweGQ1LDB4MGIsMHhhZSwweGUxLDB4YWYsMHhiNywweDAwLAotKwkweDAyLDB4ZmEs MHg5NiwweGIxLDB4YTUsMHgxZCwweDJkLDB4MjUsMHg3OCwweGVlLDB4ODMsMHgzZgotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9p bnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZTQsMHhmNSwweDUzLDB4NzksMHg1YSwweDk3 LDB4NTgsMHgwNiwweDA4LDB4YmEsMHg3YiwweGZhLAotKwkweGYwLDB4ODMsMHgwNSwweDhjLDB4 MjIsMHhjMCwweGM5LDB4ZGIsMHgxNSwweGU3LDB4ZGUsMHgyMCwKLSsJMHg1NSwweDIyLDB4OWEs MHhhZAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTIyNF9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg2NywweDA5LDB4NDgs MHhhYSwweDA3LDB4MTYsMHg5OSwweDg5LDB4N2YsMHg2ZCwweGEwLDB4ZTUsCi0rCTB4OGYsMHhk ZiwweGJjLDB4ZGIsMHhmZSwweGU1LDB4NmMsMHg3YSwweDk1LDB4NGEsMHg2NiwweDE3Ci0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0 X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDBmLDB4NGIsMHgxYywweDZmLDB4 YjcsMHhlMywweDQ3LDB4ZTUsMHg1ZCwweDdkLDB4MzgsMHhkNiwKLSsJMHgyOCwweDliLDB4ZWIs MHg1NSwweDYzLDB4MDksMHgzZSwweDdjLDB4NTYsMHhlYSwweGY4LDB4MTkKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfYWRkaXRp b25hbGlucHV0MltdID0KLSsJewotKwkweDJkLDB4MjYsMHg3YywweDM3LDB4ZTQsMHg3YSwweDI4 LDB4NWUsMHg1YSwweDNjLDB4YWYsMHgzZCwKLSsJMHg1YSwweDhlLDB4NTUsMHhhMiwweDFhLDB4 NmUsMHhjMCwweGU1LDB4ZjYsMHgyMSwweGQzLDB4ZjYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcmV0dXJuZWRiaXRzW10gPQot Kwl7Ci0rCTB4NGQsMHg4MywweDM1LDB4ZGYsMHg2NywweGE5LDB4ZmMsMHgxNywweGRhLDB4NzAs MHhjYywweDhiLAotKwkweDdmLDB4NzcsMHhhZSwweGEyLDB4NWYsMHhiOSwweDdlLDB4NzQsMHg0 YywweDI2LDB4YzEsMHg3YSwKLSsJMHgzYiwweGE3LDB4NWMsMHg5MwotKwl9OwotKwotKwotKy8q IFNIQS0yNTYgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMjU2X3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweGNlLDB4NDksMHgwMCww eDdhLDB4NTYsMHhlMywweDY3LDB4OGYsMHhlMSwweGI2LDB4YTcsMHhkNCwKLSsJMHg0ZiwweDA4 LDB4N2EsMHgxYiwweDAxLDB4ZjQsMHhmYSwweDZiLDB4ZWYsMHhiNywweGU1LDB4ZWIsCi0rCTB4 MDcsMHgzZCwweDExLDB4MGQsMHhjOCwweGVhLDB4MmIsMHhmZQotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9ub25jZVtdID0K LSsJewotKwkweDczLDB4NDEsMHhjOCwweDkyLDB4OTQsMHhlMiwweGM1LDB4NWYsMHg5MywweGZk LDB4MzksMHg1ZCwKLSsJMHgyYiwweDkxLDB4NGQsMHgzOAotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9wZXJzb25hbGl6YXRp b25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg1MCwweDZkLDB4MDEsMHgwMSwweDA3LDB4NWEsMHg4MCww eDM1LDB4N2EsMHg1NiwweDFhLDB4NTYsCi0rCTB4MmYsMHg5YSwweDBiLDB4MzUsMHhiMiwweGIx LDB4YzksMHhlNSwweGNhLDB4NjksMHg2MSwweDQ4LAotKwkweGZmLDB4ZmIsMHgwZiwweGQ5LDB4 NGIsMHg3OSwweDFkLDB4YmEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4 MjAsMHhiOCwweGRmLDB4NDQsMHg3NywweDVhLDB4YjgsMHhkMywweGJmLDB4ZjYsMHhjZiwweGFj LAotKwkweDVlLDB4YTYsMHg5NiwweDYyLDB4NzMsMHg0NCwweDQwLDB4NGEsMHgzMCwweGZiLDB4 MzgsMHhhNSwKLSsJMHg3YiwweDBkLDB4ZTQsMHgwZCwweGM2LDB4ZTQsMHg5YSwweDFmCi0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2 X3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4MDQsMHhjNCwweDY1LDB4ZjQsMHhkMyww eGJmLDB4ODMsMHg0YiwweGFiLDB4YzgsMHg0MSwweGE4LAotKwkweGMyLDB4ZTAsMHg0NCwweDYz LDB4NzcsMHg0YywweDZmLDB4NmMsMHg0OSwweDQ2LDB4ZmYsMHg5NCwKLSsJMHgxNywweGVhLDB4 ZTYsMHgxYSwweDlkLDB4NWUsMHg2NiwweDc4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9 Ci0rCXsKLSsJMHgwNywweDRkLDB4YWMsMHg5YiwweDg2LDB4Y2EsMHg0YSwweGFhLDB4NmUsMHg3 YSwweDAzLDB4YTIsCi0rCTB4NWQsMHgxMCwweGVhLDB4MGIsMHhmOSwweDgzLDB4Y2MsMHhkMSww eGZjLDB4ZTIsMHgwNywweGM3LAotKwkweDA2LDB4MzQsMHg2MCwweDZmLDB4ODMsMHg5NCwweDk5 LDB4NzYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEyNTZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDg5LDB4NGUsMHg0 NSwweDhjLDB4MTEsMHhmOSwweGJjLDB4NWIsMHhhYywweDc0LDB4OGIsMHg0YiwKLSsJMHg1Ziww eGY3LDB4MTksMHhmMywweGY1LDB4MjQsMHg1NCwweDE0LDB4ZDEsMHgxNSwweGIxLDB4NDMsCi0r CTB4MTIsMHhhNCwweDVmLDB4ZDQsMHhlYywweGZjLDB4Y2QsMHgwOQotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9lbnRyb3B5 aW5wdXRwcjJbXSA9Ci0rCXsKLSsJMHgwZSwweGViLDB4MWYsMHhkNywweGZjLDB4ZDEsMHg5ZCww eGQ0LDB4MDUsMHgzNiwweDhiLDB4YjIsCi0rCTB4ZmIsMHhlNCwweGY0LDB4NTEsMHgwYywweDg3 LDB4OWIsMHgwMiwweDQ0LDB4ZDUsMHg5MiwweDRkLAotKwkweDQ0LDB4ZmUsMHgxYSwweDAzLDB4 NDMsMHg1NiwweGJkLDB4ODYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4MDIs MHhhYSwweGI2LDB4MWQsMHg3ZSwweDJhLDB4NDAsMHgwMywweDY5LDB4MmQsMHg0OSwweGEzLAot KwkweDQxLDB4ZTcsMHg0NCwweDBiLDB4YWYsMHg3YiwweDg1LDB4ZTQsMHg1ZiwweDUzLDB4M2Is MHg2NCwKLSsJMHhiYywweDg5LDB4YzgsMHg4MiwweGQ0LDB4NzgsMHgzNywweGEyCi0rCX07Ci0r Ci0rCi0rLyogU0hBLTI1NiBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGEyNTZfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4NWIsMHgx YiwweGVjLDB4NGQsMHhhOSwweDM4LDB4NzQsMHg1YSwweDM0LDB4MGIsMHg3YiwweGM1LAotKwkw eGU1LDB4ZDcsMHg2NiwweDdjLDB4YmMsMHg4MiwweGI5LDB4MGUsMHgyZCwweDFmLDB4OTIsMHhk NywKLSsJMHhjMSwweGJjLDB4NjcsMHg2OSwweGVjLDB4NmIsMHgwMywweDNjCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X25vbmNl W10gPQotKwl7Ci0rCTB4YTQsMHgwYywweGQ4LDB4OWMsMHg2MSwweGQ4LDB4YzMsMHg1NCwweGZl LDB4NTMsMHhjOSwweGU1LAotKwkweDVkLDB4NmYsMHg2ZCwweDM1Ci0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3BlcnNvbmFsaXph dGlvbnN0cmluZ1tdID0KLSsJewotKwkweDIyLDB4NWUsMHg2MiwweDkzLDB4NDIsMHg4MywweDc4 LDB4MjQsMHhkOCwweDQwLDB4OGMsMHhkZSwKLSsJMHg2ZiwweGY5LDB4YTQsMHg3YSwweGM1LDB4 YTcsMHgzYiwweDg4LDB4YTMsMHhlZSwweDQyLDB4MjAsCi0rCTB4ZmQsMHg2MSwweDU2LDB4YzYs MHg0YywweDEzLDB4NDEsMHg5YwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHhi ZiwweDc0LDB4NWIsMHhmNiwweGM1LDB4NjQsMHg1ZSwweDk5LDB4MzQsMHg4ZiwweGJjLDB4YTQs Ci0rCTB4ZTIsMHhiZCwweGQ4LDB4ODUsMHgyNiwweDM3LDB4ZWEsMHhiYSwweDRmLDB4ZjIsMHg5 YSwweDlhLAotKwkweDY2LDB4ZmMsMHhkZiwweDYzLDB4MjYsMHgyNiwweDE5LDB4ODcKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZf aW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGIzLDB4YzYsMHgwNywweDA3LDB4ZDYsMHg3 NSwweGY2LDB4MmIsMHhkNiwweDIxLDB4OTYsMHhmMSwKLSsJMHhhZSwweGRiLDB4MmIsMHhhYyww eDI1LDB4MmEsMHhhZSwweGFlLDB4NDEsMHg3MiwweDAzLDB4NWUsCi0rCTB4YmYsMHhkMywweDY0 LDB4YmMsMHg1OSwweGY5LDB4YzAsMHg3NgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0r CXsKLSsJMHhiZiwweDIwLDB4MzMsMHg1NiwweDI5LDB4YTgsMHgzNywweDA0LDB4MWYsMHg3OCww eDM0LDB4M2QsCi0rCTB4ODEsMHgyYSwweGM5LDB4ODYsMHhjNiwweDdhLDB4MmYsMHg4OCwweDVl LDB4ZDUsMHhiZSwweDM0LAotKwkweDQ2LDB4MjAsMHhhNCwweDM1LDB4ZWIsMHhjNywweGUyLDB4 OWQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEyNTZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4OWIsMHhhZSwweDJk LDB4MmQsMHg2MSwweGE0LDB4ODksMHhlYiwweDQzLDB4NDYsMHhhNywweGRhLAotKwkweGVmLDB4 NDAsMHhjYSwweDRhLDB4OTksMHgxMSwweDQxLDB4ZGMsMHg1YywweDk0LDB4ZTksMHhhYywKLSsJ MHhkNCwweGQwLDB4ZTYsMHhiZCwweGZiLDB4MDMsMHg5YywweGE4Ci0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2FkZGl0aW9uYWxp bnB1dDJbXSA9Ci0rCXsKLSsJMHgyMywweGFhLDB4MGMsMHhiZCwweDI4LDB4MzMsMHhlMiwweDUx LDB4ZmMsMHg3MSwweGQyLDB4MTUsCi0rCTB4MWYsMHg3NiwweGZkLDB4MGQsMHhlMCwweGI3LDB4 YjUsMHg4NCwweDc1LDB4NWIsMHhiZSwweGYzLAotKwkweDVjLDB4Y2EsMHhjNSwweDMwLDB4ZjIs MHg3NSwweDFmLDB4ZGEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEyNTZfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4OTAsMHgzYyww eGMxLDB4MTAsMHg4YywweDEyLDB4MDEsMHhjNiwweGE2LDB4M2EsMHgwZiwweDRkLAotKwkweGI2 LDB4M2EsMHg0ZiwweDQxLDB4OWMsMHg2MSwweDc1LDB4ODQsMHhlOSwweDc0LDB4NzUsMHhmZCwK LSsJMHhmZSwweGYyLDB4MWYsMHg0MywweGQ4LDB4NWUsMHgyNCwweGEzCi0rCX07Ci0rCi0rCi0r LyogU0hBLTM4NCBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEzODRfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4NzEsMHg5ZCwweGIy LDB4NWEsMHg3MSwweDZkLDB4MDQsMHhlOSwweDFlLDB4YzcsMHg5MiwweDI0LAotKwkweDZlLDB4 MTIsMHgzMywweGE5LDB4NTIsMHg2NCwweDMxLDB4ZWYsMHg3MSwweGViLDB4MjIsMHg1NSwKLSsJ MHgyOCwweDk3LDB4MDYsMHg2YSwweGMwLDB4MGMsMHhhMCwweDdlCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX25vbmNlW10g PQotKwl7Ci0rCTB4ZjUsMHgwZCwweGZhLDB4YjAsMHhlYywweDZhLDB4N2MsMHhkNiwweGJkLDB4 OWIsMHgwNSwweGZkLAotKwkweDM4LDB4M2UsMHgyZSwweDU2Ci0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX3BlcnNvbmFsaXph dGlvbnN0cmluZ1tdID0KLSsJewotKwkweDc0LDB4YWMsMHg3ZSwweDZkLDB4YjEsMHhhNCwweGU3 LDB4MjEsMHhkMSwweDFlLDB4NmUsMHg5NiwKLSsJMHg2ZCwweDRkLDB4NTMsMHg0NiwweDgyLDB4 OTYsMHg2ZSwweGNmLDB4YWEsMHg4MSwweDhkLDB4N2QsCi0rCTB4OWUsMHhlMSwweDBmLDB4MTUs MHhlYSwweDQxLDB4YmYsMHhlMwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJ MHhkYSwweDk1LDB4ZDQsMHhkMCwweGI4LDB4MTEsMHhkMywweDQ5LDB4MjcsMHg1ZCwweGE5LDB4 MzksCi0rCTB4NjgsMHhmMywweGE4LDB4ZTksMHg1ZCwweDE5LDB4OGEsMHgyYiwweDY2LDB4ZTgs MHg2OSwweDA2LAotKwkweDdjLDB4OWUsMHgwMywweGExLDB4OGIsMHgyNiwweDJkLDB4NmUKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEz ODRfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHg0OSwweGRmLDB4NDQsMHgwMCwweGU0 LDB4MWMsMHg3NSwweDBiLDB4MjYsMHg1YSwweDU5LDB4NjQsCi0rCTB4MWYsMHg0ZSwweGIxLDB4 YjIsMHgxMywweGYxLDB4MjIsMHg0ZSwweGI0LDB4NmQsMHg5YSwweGNjLAotKwkweGEwLDB4NDgs MHhlNiwweGNmLDB4MWQsMHhkMSwweDkyLDB4MGQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfaW50X3JldHVybmVkYml0c1td ID0KLSsJewotKwkweGM4LDB4NTIsMHhhZSwweGJmLDB4MDQsMHgzYywweDI3LDB4YjcsMHg3OCww eDE4LDB4YWEsMHg4ZiwKLSsJMHhmZiwweGNmLDB4YTQsMHhmMSwweGNjLDB4ZTcsMHg2OCwweGZh LDB4MjIsMHhhMiwweDEzLDB4NDUsCi0rCTB4ZTgsMHhkZCwweDg3LDB4ZTYsMHhmMiwweDZlLDB4 ZGQsMHhjNywweDUyLDB4OTAsMHg5ZiwweDdiLAotKwkweGZhLDB4NjEsMHgyZCwweDlkLDB4OWUs MHhjZiwweDk4LDB4YWMsMHg1MiwweDQwLDB4Y2UsMHhhZgotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9hZGRpdGlvbmFsaW5w dXQyW10gPQotKwl7Ci0rCTB4NjEsMHg3YywweDAzLDB4OWEsMHgzZSwweDUwLDB4NTcsMHg2MCww eGM1LDB4ODMsMHhjOSwweGIyLAotKwkweGQxLDB4ODcsMHg4NSwweDY2LDB4OTIsMHg1ZCwweDg0 LDB4MGUsMHg1MywweGZiLDB4NzAsMHgwMywKLSsJMHg3MiwweGZkLDB4YmEsMHhhZSwweDljLDB4 OGYsMHhmOCwweDE4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMzg0X3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJewotKwkweGY4LDB4 ZWIsMHg4OSwweGIxLDB4OGQsMHg3OCwweGJlLDB4MjEsMHhlMCwweGJiLDB4OWQsMHhiNywKLSsJ MHg5NSwweDBlLDB4ZDksMHg0NiwweDBjLDB4OGMsMHhlMiwweDYzLDB4YjcsMHg5ZCwweDY3LDB4 OTAsCi0rCTB4YmQsMHhjNywweDBiLDB4YTUsMHhjZSwweGIyLDB4NjUsMHg4MQotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9y ZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhlNiwweDlmLDB4ZmUsMHg2OCwweGQ2LDB4YjUsMHg3 OSwweGYxLDB4MDYsMHg1ZiwweGEzLDB4YmIsCi0rCTB4MjMsMHg4NSwweGQ4LDB4ZjAsMHgyOSww eDVhLDB4NjgsMHg5ZSwweGY1LDB4ZjQsMHhhNiwweDEyLAotKwkweGUwLDB4OWEsMHhlMiwweGFj LDB4MDAsMHgxZCwweDk4LDB4MjYsMHhmYywweDUzLDB4OTUsMHg1MywKLSsJMHhlNCwweDNlLDB4 MTcsMHhkNSwweDA4LDB4MGIsMHg3MCwweDNkLDB4NjcsMHg5OSwweGFjLDB4NjYKLSsJfTsKLSsK LSsKLSsvKiBTSEEtMzg0IE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHgwNywweDE1 LDB4MjcsMHgyYSwweGFmLDB4NzQsMHgyNCwweDM3LDB4YmMsMHhkNSwweDE0LDB4NjksCi0rCTB4 Y2UsMHgxMSwweGZmLDB4YTIsMHg2YiwweGI4LDB4MDUsMHg2NywweDM0LDB4ZjgsMHhiZCwweDZk LAotKwkweDZhLDB4Y2MsMHhjZCwweDYwLDB4YTMsMHg2OCwweGNhLDB4ZjQKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfbm9uY2Vb XSA9Ci0rCXsKLSsJMHg3MCwweDE3LDB4YzIsMHg1YiwweDVkLDB4MjIsMHgwYiwweDA2LDB4MTUs MHg1NCwweDc4LDB4NzcsCi0rCTB4NDQsMHhhZiwweDJmLDB4MDkKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcGVyc29uYWxpemF0 aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4ODksMHgzOSwweDI4LDB4YjAsMHg2MCwweGViLDB4M2Qs MHhkYywweDU1LDB4NzUsMHg4NiwweGViLAotKwkweGFlLDB4YTIsMHg4ZiwweGJjLDB4MWIsMHg3 NSwweGQ0LDB4ZTEsMHgwZiwweGFhLDB4MzgsMHhjYSwKLSsJMHg2MiwweDhiLDB4Y2IsMHgyYyww eDI2LDB4ZjYsMHhiYywweGIxCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDMw LDB4MmIsMHg0MiwweDM1LDB4ZWYsMHhkYSwweDQwLDB4NTUsMHgyOCwweGM2LDB4OTUsMHhmYiwK LSsJMHg1NCwweDAxLDB4NjIsMHhkNywweDg3LDB4MTQsMHg0OCwweDZkLDB4OTAsMHg0YywweGE5 LDB4MDIsCi0rCTB4NTQsMHg0MCwweDIyLDB4YzgsMHg2NiwweGE1LDB4NDgsMHg0OAotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9p bnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ODIsMHhjNCwweGExLDB4OWMsMHgyMSwweGQy LDB4ZTcsMHhhNSwweGE2LDB4ZjYsMHg1ZiwweDA0LAotKwkweDVjLDB4YzcsMHgzMSwweDlkLDB4 OGQsMHg1OSwweDc0LDB4NTAsMHgxOSwweDg5LDB4MmYsMHg2MywKLSsJMHhkNSwweGI3LDB4N2Us MHhlYiwweDE1LDB4ZTMsMHg3MCwweDgzLDB4YTEsMHgyNCwweDU5LDB4ZmEsCi0rCTB4MmMsMHg1 NiwweGY2LDB4ODgsMHgzYSwweDkyLDB4OTMsMHhhMSwweGZiLDB4NzksMHhjMSwweDdhCi0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0 X2VudHJvcHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDM5LDB4YTYsMHhlOCwweDVjLDB4ODIs MHgxNywweDcxLDB4MjYsMHg1NywweDRmLDB4OWYsMHhjMiwKLSsJMHg1NSwweGZmLDB4NWMsMHg5 YiwweDUzLDB4MWEsMHhkMSwweDVmLDB4YmMsMHg2MiwweGU0LDB4MjcsCi0rCTB4MmQsMHgzMiww eGYwLDB4ZTQsMHg1MiwweDhjLDB4YzUsMHgwYwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9hZGRpdGlvbmFsaW5wdXRyZXNlZWRb XSA9Ci0rCXsKLSsJMHg4ZCwweGNiLDB4OGQsMHhjZSwweDA4LDB4ZWEsMHg4MCwweGU4LDB4OWIs MHg2MSwweGE4LDB4MGYsCi0rCTB4YWYsMHg0OSwweDIwLDB4OWUsMHg3NCwweGNiLDB4NTcsMHg4 MCwweDQyLDB4YjAsMHg4NCwweDVlLAotKwkweDMwLDB4MmEsMHg2NywweDA4LDB4ZjQsMHhlMyww eDQwLDB4MjIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEzODRfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDdjLDB4OGYsMHhj MiwweGFlLDB4MjIsMHg0YSwweGQ2LDB4ZjYsMHgwNSwweGE0LDB4N2EsMHhlYSwKLSsJMHhiYiww eDI1LDB4ZDAsMHhiNywweDVhLDB4ZDYsMHhjZiwweDlkLDB4ZjMsMHg2YywweGUyLDB4YjIsCi0r CTB4NGUsMHhiNCwweGJkLDB4ZjQsMHhlNSwweDQwLDB4ODAsMHg5NAotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9yZXR1cm5lZGJp dHNbXSA9Ci0rCXsKLSsJMHg5ZSwweDdlLDB4ZmIsMHg1OSwweGJiLDB4YWEsMHgzYywweGY3LDB4 ZTEsMHhmOCwweDc2LDB4ZGQsCi0rCTB4NjMsMHg1ZiwweGFmLDB4MjMsMHhkNiwweDY0LDB4NjEs MHhjMCwweDlhLDB4MDksMHg0NywweGM5LAotKwkweDMzLDB4ZGYsMHg2ZCwweDU1LDB4OTEsMHgz NCwweDc5LDB4NzAsMHhjNCwweDk5LDB4NmUsMHg1NCwKLSsJMHgwOSwweDY0LDB4MjEsMHgxYSww eGJkLDB4MWUsMHg4MCwweDQwLDB4MzQsMHhhZCwweGZhLDB4ZDcKLSsJfTsKLSsKLSsKLSsvKiBT SEEtNTEyIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTUxMl9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHgxMywweGY3LDB4NjEsMHg3 NSwweDY1LDB4MjgsMHhhMiwweDU5LDB4MTMsMHg1YSwweDRhLDB4NGYsCi0rCTB4NTYsMHg2MCww eDhjLDB4NTMsMHg3ZCwweGIwLDB4YmQsMHgwNiwweDRmLDB4ZWQsMHhjYywweGQyLAotKwkweGEy LDB4YjUsMHhmZCwweDViLDB4M2EsMHhhYiwweGVjLDB4MjgKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfbm9uY2VbXSA9Ci0r CXsKLSsJMHhiZSwweGEzLDB4OTEsMHg5MywweDFkLDB4YzMsMHgzMSwweDNhLDB4MjMsMHgzMyww eDUwLDB4NjcsCi0rCTB4ODgsMHhjNywweGEyLDB4YzQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfcGVyc29uYWxpemF0aW9u c3RyaW5nW10gPQotKwl7Ci0rCTB4MWYsMHg1OSwweDRkLDB4N2IsMHhlNiwweDQ2LDB4OTEsMHg0 OCwweGMxLDB4MjUsMHhmYSwweGZmLAotKwkweDg5LDB4MTIsMHg3NywweDM1LDB4ZGYsMHgzZSww eGY0LDB4ODAsMHg1ZiwweGQ5LDB4YjAsMHgwNywKLSsJMHgyMiwweDQxLDB4ZGQsMHg0OCwweDc4 LDB4NmIsMHg3NywweDJiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDMw LDB4ZmYsMHg2MywweDZmLDB4YWMsMHhkOSwweDg0LDB4MzksMHg2ZiwweGU0LDB4OTksMHhjZSwK LSsJMHg5MSwweDdkLDB4N2UsMHhjOCwweDU4LDB4ZjIsMHgxMiwweGMzLDB4YjYsMHhhZCwweGRh LDB4MjIsCi0rCTB4MDQsMHhhMCwweGQyLDB4MjEsMHhmZSwweGYyLDB4OTUsMHgxZAotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9w cl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweDY0LDB4NTQsMHgxMywweGVjLDB4NGYsMHg3 NywweGRhLDB4YjIsMHg5MiwweDJlLDB4NTIsMHg4MCwKLSsJMHgxMSwweDEwLDB4YzIsMHhmOCww eGU2LDB4YTcsMHhjZCwweDRiLDB4ZmMsMHgzMiwweDJlLDB4OWUsCi0rCTB4ZWIsMHhiYiwweGIx LDB4YmYsMHgxNSwweDVjLDB4NzMsMHgwOAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQot Kwl7Ci0rCTB4ZWYsMHgxZSwweGRjLDB4MGEsMHhhNCwweDM2LDB4OTEsMHg5YywweDNkLDB4Mjcs MHg5NywweDUwLAotKwkweDhkLDB4MzYsMHgyOSwweDhkLDB4Y2UsMHg2YSwweDBjLDB4ZjcsMHgy MSwweGMwLDB4OTEsMHhhZSwKLSsJMHgwYywweDk2LDB4NzIsMHhiZCwweDUyLDB4ODEsMHg1OCww eGZjLDB4NmQsMHhlNSwweGY3LDB4YTUsCi0rCTB4ZmQsMHg1ZCwweGE3LDB4NTgsMHg2OCwweGM4 LDB4OTksMHg1OCwweDhlLDB4YzgsMHhjZSwweDk1LAotKwkweDAxLDB4N2QsMHhmZiwweGE0LDB4 YzgsMHhmNywweDYzLDB4ZmUsMHg1ZiwweDY5LDB4ODMsMHg1MywKLSsJMHhlMiwweGM2LDB4OGIs MHhjMwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTUxMl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4ZTYsMHg5YiwweGM0 LDB4ODgsMHgzNCwweGNhLDB4ZWEsMHgyOSwweDJmLDB4OTgsMHgwNSwweGE0LAotKwkweGQzLDB4 YzAsMHg3YiwweDExLDB4ZTgsMHhiYiwweDc1LDB4ZjIsMHhiZCwweDI5LDB4YjcsMHg0MCwKLSsJ MHgyNSwweDdmLDB4YzEsMHhiNywweGIxLDB4ZjEsMHgyNSwweDYxCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2VudHJvcHlp bnB1dHByMltdID0KLSsJewotKwkweDIzLDB4NmQsMHhmZiwweGRlLDB4ZmIsMHhkMSwweGJhLDB4 MzMsMHgxOCwweGU2LDB4YmUsMHhiNSwKLSsJMHg0OCwweDc3LDB4NmQsMHg3ZiwweGE3LDB4ZTEs MHg0ZCwweDQ4LDB4MWUsMHgzYywweGE3LDB4MzQsCi0rCTB4MWEsMHhjOCwweDYwLDB4ZGIsMHg4 ZiwweDk5LDB4MTUsMHg5OQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg3MCww eDI3LDB4MzEsMHhkYiwweDkyLDB4NzAsMHgyMSwweGZlLDB4MTYsMHhiNiwweGM4LDB4NTEsCi0r CTB4MzQsMHg4NywweDY1LDB4ZDAsMHg0ZSwweGZkLDB4ZmUsMHg2OCwweGVjLDB4YWMsMHhkYyww eDkzLAotKwkweDQxLDB4MzgsMHg5MiwweDkwLDB4YjQsMHg5NCwweGY5LDB4MGQsMHhhNCwweGY3 LDB4NGUsMHg4MCwKLSsJMHg5MiwweDY3LDB4NDgsMHg0MCwweGE3LDB4MDgsMHhjNywweGJjLDB4 NjYsMHgwMCwweGZkLDB4ZjcsCi0rCTB4NGMsMHg4YiwweDE3LDB4NmUsMHhkMSwweDhmLDB4OWIs MHhmMywweDZmLDB4ZjYsMHgzNCwweGRkLAotKwkweDY3LDB4ZjcsMHg2OCwweGRkCi0rCX07Ci0r Ci0rCi0rLyogU0hBLTUxMiBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGE1MTJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4YjYsMHgw YiwweGI3LDB4YmMsMHg4NCwweDU2LDB4ZjYsMHgxMiwweGFmLDB4NDUsMHg2NywweDE3LAotKwkw eDdjLDB4ZDEsMHhiMiwweDc4LDB4MmIsMHhhMCwweGYyLDB4YmUsMHhiNiwweDZkLDB4OGIsMHg1 NiwKLSsJMHhjNiwweGJjLDB4NGQsMHhlMSwweGY3LDB4YmUsMHhjZSwweGJkCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX25vbmNl W10gPQotKwl7Ci0rCTB4OWQsMHhlZCwweGMwLDB4ZTUsMHg1YSwweDk4LDB4NmEsMHhjYiwweDUx LDB4N2QsMHg3NiwweDMxLAotKwkweDVhLDB4NjQsMHhmMCwweGY3Ci0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3BlcnNvbmFsaXph dGlvbnN0cmluZ1tdID0KLSsJewotKwkweGMyLDB4NmQsMHhhMywweGMzLDB4MDYsMHg3NCwweGU1 LDB4MDEsMHg1YywweDEwLDB4MTcsMHhjNywKLSsJMHhhZiwweDgzLDB4OWQsMHg1OSwweDhkLDB4 MmQsMHgyOSwweDM4LDB4YzUsMHg1OSwweDcwLDB4OGIsCi0rCTB4NDYsMHg0OCwweDJkLDB4Y2Ys MHgzNiwweDdkLDB4NTksMHhjMAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHhl YywweDhjLDB4ZDQsMHhmNywweDYxLDB4NmUsMHgwZCwweDk1LDB4NzksMHhiNywweDI4LDB4YWQs Ci0rCTB4NWYsMHg2OSwweDc0LDB4NWYsMHgyZCwweDM2LDB4MDYsMHg4YSwweDZiLDB4YWMsMHg1 NCwweDk3LAotKwkweGM0LDB4YTEsMHgxMiwweDg1LDB4MGEsMHhkZiwweDRiLDB4MzQKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJf aW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDg0LDB4MmYsMHgxZiwweDY4LDB4NmEsMHhh MywweGFkLDB4MWUsMHhmYiwweGY0LDB4MTUsMHhiZCwKLSsJMHhkZSwweDM4LDB4ZDQsMHgzMCww eDgwLDB4NTEsMHhlOSwweGQzLDB4YzcsMHgyMCwweDg4LDB4ZTksCi0rCTB4ZjUsMHhjYywweGRm LDB4NTcsMHg1YywweDQ3LDB4MmYsMHg1NywweDNjLDB4NWYsMHgxMywweDU2LAotKwkweGNjLDB4 YzUsMHg0ZiwweDg0LDB4ZjgsMHgxMCwweDQxLDB4ZDUsMHg3ZSwweDU4LDB4NmUsMHgxOSwKLSsJ MHgxOSwweDllLDB4YWYsMHhjMiwweDIyLDB4NTgsMHg0MSwweDUwLDB4NzksMHhjMiwweGQ4LDB4 MDQsCi0rCTB4MjgsMHhkNCwweDM5LDB4OWEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfZW50cm9weWlucHV0cmVzZWVkW10gPQot Kwl7Ci0rCTB4ZmEsMHg3ZiwweDQ2LDB4NTEsMHg4MywweDYyLDB4OTgsMHgxNiwweDlhLDB4MTks MHhhMiwweDQ5LAotKwkweGE5LDB4ZTYsMHg0YSwweGQ4LDB4ODUsMHhlNywweGQ0LDB4M2IsMHgy YywweDgyLDB4YzUsMHg4MiwKLSsJMHhiZiwweDExLDB4ZjksMHg5ZSwweGJjLDB4ZDAsMHgwMSww eGVlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhNTEyX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweGI5LDB4MTIsMHhl MCwweDRmLDB4ZjcsMHhhNywweGM0LDB4ZDgsMHhkMCwweDhlLDB4OTksMHgyOSwKLSsJMHg3Yyww eDlhLDB4ZTksMHhjZiwweGM0LDB4NmMsMHhmOCwweGMzLDB4YTcsMHg0MSwweDgzLDB4ZDYsCi0r CTB4MmUsMHhmYSwweGI4LDB4NWUsMHg4ZSwweDZiLDB4NzgsMHgyMAotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9hZGRpdGlvbmFs aW5wdXQyW10gPQotKwl7Ci0rCTB4ZDcsMHgwNywweDUyLDB4YjksMHg4MywweDJjLDB4MDMsMHg3 MSwweGVlLDB4YzksMHhjMCwweDg1LAotKwkweGUxLDB4NTcsMHhiMiwweGNkLDB4M2EsMHhmMCww eGM5LDB4MzQsMHgyNCwweDQxLDB4MWMsMHg0MiwKLSsJMHg5OSwweGIyLDB4ODQsMHhlOSwweDE3 LDB4ZDIsMHg3NiwweDkyCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDM2LDB4MTcs MHg1ZCwweDk4LDB4MmIsMHg2NSwweDI1LDB4OGUsMHhjOCwweDI5LDB4ZGYsMHgyNywKLSsJMHgw NSwweDM2LDB4MjYsMHgxMiwweDhhLDB4NjgsMHg3NCwweDI3LDB4MzcsMHhkNCwweDdmLDB4MzIs Ci0rCTB4YjEsMHgxMiwweGQ2LDB4ODUsMHg4MywweGViLDB4MmUsMHhhMCwweGVkLDB4NGIsMHhi NSwweDdiLAotKwkweDZmLDB4MzksMHgzYywweDcxLDB4NzcsMHgwMiwweDEyLDB4Y2MsMHgyYyww eDNhLDB4OGUsMHg2MywKLSsJMHhkZiwweDRhLDB4YmQsMHg2ZiwweDZlLDB4MmUsMHhlZCwweDBh LDB4ODUsMHhhNSwweDJmLDB4YTIsCi0rCTB4NjgsMHhkZSwweDQyLDB4YjUKLSsJfTsKLSsKLSsK LSsvKiBITUFDIFNIQS0xIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHgyNiww eDVmLDB4MzYsMHgxNCwweGZmLDB4M2QsMHg4MywweGZhLDB4NzMsMHg1ZSwweDc1LDB4ZGMsCi0r CTB4MmMsMHgxOCwweDE3LDB4MWIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHhjOCww eGUzLDB4NTcsMHhhNSwweDdiLDB4NzQsMHg4NiwweDZlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX3BlcnNvbmFsaXph dGlvbnN0cmluZ1tdID0KLSsJewotKwkweDZlLDB4ZGIsMHgwZCwweGZlLDB4N2QsMHhhYywweDc5 LDB4ZDAsMHhhNSwweDNhLDB4NDgsMHg4NSwKLSsJMHg4MCwweGUyLDB4N2YsMHgyYQotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh MV9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHgzMSwweGNkLDB4NWUsMHg0MywweGRj LDB4ZmIsMHg3YSwweDc5LDB4Y2EsMHg4OCwweGRlLDB4MWYsCi0rCTB4ZDcsMHhiYiwweDQyLDB4 MDkKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTFfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHg3YywweDIzLDB4OTUs MHgzOCwweDAwLDB4OTUsMHhjMSwweDc4LDB4MWYsMHg4ZiwweGQ3LDB4NjMsCi0rCTB4MjMsMHg4 NywweDJhLDB4ZWQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTFfcHJfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGJi LDB4MzQsMHhlNywweDkzLDB4YTMsMHgwMiwweDJjLDB4NGEsMHhkMCwweDg5LDB4ZGEsMHg3ZiwK LSsJMHhlZCwweGY0LDB4NGMsMHhkZSwweDE3LDB4ZWMsMHhlNSwweDZjCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2Fk ZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg0OSwweGJjLDB4MmQsMHgyYywweGI3LDB4MzIs MHhjYiwweDIwLDB4ZGYsMHhmNSwweDc3LDB4NTgsCi0rCTB4YTAsMHg0YiwweDkzLDB4NmUKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTFfcHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4M2MsMHhhYSwweGIwLDB4MjEs MHg0MiwweGIwLDB4ZGQsMHgzNCwweGYwLDB4MTYsMHg3ZiwweDBjLAotKwkweDBmLDB4ZmYsMHgy ZSwweGFmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGExX3ByX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDhlLDB4Y2IsMHhh MywweDY0LDB4YjIsMHhiOCwweDMzLDB4NmMsMHg2NCwweDNiLDB4NzgsMHgxNiwKLSsJMHg5OSww eDM1LDB4YzgsMHgzMCwweGNiLDB4M2UsMHhhMCwweGQ4Ci0rCX07Ci0rCi0rCi0rLyogSE1BQyBT SEEtMSBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTFfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4MzIsMHg5YSwweDJhLDB4 ODcsMHg3YiwweDg5LDB4N2MsMHhmNiwweGNiLDB4OTUsMHhkNSwweDQwLAotKwkweDE3LDB4ZmUs MHg0NywweDcwCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGExX25vbmNlW10gPQotKwl7Ci0rCTB4MTYsMHhkOCwweGUwLDB4Yzcs MHg1MiwweGNmLDB4NGEsMHgyNQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0r CXsKLSsJMHgzNSwweDM1LDB4YTksMHhhNSwweDQwLDB4YmUsMHg5YiwweGQxLDB4NTYsMHhkZCww eDQ0LDB4MDAsCi0rCTB4NzIsMHhmNywweGQzLDB4NWUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfYWRkaXRpb25hbGlucHV0 W10gPQotKwl7Ci0rCTB4MWIsMHgyYywweDg0LDB4MmQsMHg0YSwweDg5LDB4OGYsMHg2OSwweDE5 LDB4ZjEsMHhmMywweGRiLAotKwkweGJiLDB4ZTMsMHhhYSwweGVhCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2ludF9yZXR1 cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhjZiwweGZhLDB4N2QsMHg3MiwweDBmLDB4ZTYsMHhjNyww eDk2LDB4YTAsMHg2OSwweDMxLDB4MTEsCi0rCTB4OWIsMHgwYiwweDFhLDB4MjAsMHgxZiwweDNm LDB4YWEsMHhkMQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMV9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg5MCww eDc1LDB4MTUsMHgwNCwweDk1LDB4ZjEsMHhiYSwweDgxLDB4MGMsMHgzNywweDk0LDB4NmYsCi0r CTB4ODYsMHg1MiwweDZkLDB4OWMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQot Kwl7Ci0rCTB4NWIsMHg0MCwweGJhLDB4NWYsMHgxNywweDcwLDB4ZjAsMHg0YiwweGRmLDB4Yzks MHg5NywweDkyLAotKwkweDc5LDB4YzUsMHg4MiwweDI4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2FkZGl0aW9uYWxpbnB1 dDJbXSA9Ci0rCXsKLSsJMHg5NywweGM4LDB4ODAsMHg5MCwweGIzLDB4YWEsMHg2ZSwweDYwLDB4 ZWEsMHg4MywweDdhLDB4ZTMsCi0rCTB4OGEsMHhjYSwweGE0LDB4N2YKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcmV0dXJu ZWRiaXRzW10gPQotKwl7Ci0rCTB4OTAsMHhiZCwweDA1LDB4NTYsMHg2ZCwweGI1LDB4MjIsMHhk NSwweGI5LDB4NWEsMHgyOSwweDJkLAotKwkweGU5LDB4MGIsMHhlMSwweGFjLDB4ZGUsMHgyNyww eDBiLDB4YjAKLSsJfTsKLSsKLSsKLSsvKiBITUFDIFNIQS0yMjQgUFIgICovCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfZW50cm9w eWlucHV0W10gPQotKwl7Ci0rCTB4MTcsMHgzMiwweDJiLDB4MmUsMHg2ZiwweDFiLDB4OWMsMHg2 ZCwweDMxLDB4ZTAsMHgzNCwweDA3LAotKwkweGNmLDB4ZWQsMHhmNiwweGI2LDB4NWEsMHg3Niww eDRjLDB4YmMsMHg2MiwweDg1LDB4MDEsMHg5MAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX25vbmNlW10gPQotKwl7 Ci0rCTB4MzgsMHhiZiwweDVmLDB4MjAsMHhiMywweDY4LDB4MmYsMHg0MywweDYxLDB4MDUsMHg4 ZiwweDIzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGEyMjRfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4 YzAsMHhjOSwweDQ1LDB4YWMsMHg4ZCwweDI3LDB4NzcsMHgwOCwweDBiLDB4MTcsMHg2ZCwweGVk LAotKwkweGMxLDB4N2QsMHhkNSwweDA3LDB4OWQsMHg2ZSwweGY4LDB4MjMsMHgyYSwweDIyLDB4 MTMsMHhiZAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweGE0LDB4 M2MsMHhlNywweDNiLDB4ZWEsMHgxOSwweDQ1LDB4MzIsMHhjMiwweDgzLDB4NmQsMHgyMSwKLSsJ MHg4YSwweGMwLDB4ZWUsMHg2NywweDQ1LDB4ZGUsMHgxMywweDdkLDB4OWQsMHg2MSwweDAwLDB4 M2IKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTIyNF9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweDE1LDB4MDUsMHg3 NCwweDRhLDB4N2YsMHg4ZCwweDVjLDB4NjAsMHgxNiwweGU1LDB4N2IsMHhhZCwKLSsJMHhmNSww eDQxLDB4OGYsMHg1NSwweDYwLDB4YzQsMHgwOSwweGVlLDB4MWUsMHgxMSwweDgxLDB4YWIKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTIyNF9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4NmYsMHhmNSwweDlhLDB4 ZTIsMHg1NCwweDUzLDB4MzAsMHgzZCwweDVhLDB4MjcsMHgyOSwweDM4LAotKwkweDI3LDB4ZjIs MHgwZCwweDA1LDB4ZTksMHgyNiwweGNiLDB4MTYsMHhjMywweDUxLDB4NWYsMHgxMywKLSsJMHg0 MSwweGZlLDB4OTksMHhmMgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsK LSsJMHg3MywweDgxLDB4ODgsMHg4NCwweDhmLDB4ZWQsMHg2ZiwweDEwLDB4OWYsMHg5MywweGJm LDB4MTcsCi0rCTB4MzUsMHg3YywweGVmLDB4ZDUsMHg4ZCwweDI2LDB4YTYsMHg3YSwweGU4LDB4 MDksMHgzNiwweDRmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4 ZTYsMHhjZiwweGNmLDB4N2UsMHgxMiwweGU1LDB4NDMsMHhkMiwweDM4LDB4ZDgsMHgyNCwweDZm LAotKwkweDVhLDB4MzcsMHg2OCwweGJmLDB4NGYsMHhhMCwweGZmLDB4ZDUsMHg2MSwweDhhLDB4 OTMsMHhlMAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMjI0X3ByX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGFmLDB4Zjks MHhkOCwweDE5LDB4OTEsMHgzMCwweDgyLDB4NmYsMHhhOSwweDFlLDB4OWQsMHhkNywKLSsJMHhm MywweDUwLDB4ZTAsMHhjNywweGQ1LDB4NjQsMHg5NiwweDdkLDB4NGMsMHg0ZCwweDc4LDB4MDMs Ci0rCTB4NmQsMHhkOCwweDllLDB4NzIKLSsJfTsKLSsKLSsKLSsvKiBITUFDIFNIQS0yMjQgTm8g UFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEyMjRfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4MTEsMHg4MiwweGZkLDB4ZDksMHg0 MiwweGY0LDB4ZmEsMHhjOCwweGYyLDB4NDEsMHhlNiwweDU0LAotKwkweDAxLDB4YWUsMHgyMiww eDZlLDB4YzYsMHhhZiwweGFmLDB4ZDAsMHhhNiwweGIyLDB4ZTIsMHg2ZAotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X25v bmNlW10gPQotKwl7Ci0rCTB4YTksMHg0OCwweGQ3LDB4OTIsMHgzOSwweDdlLDB4MmEsMHhkYyww eDMwLDB4MWYsMHgwZSwweDJiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQot Kwl7Ci0rCTB4MTEsMHhkNSwweGY0LDB4YmQsMHg2NywweDhjLDB4MzEsMHhjZiwweGEzLDB4M2Ys MHgxZSwweDZiLAotKwkweGE4LDB4MDcsMHgwMiwweDBiLDB4YzgsMHgyZSwweDZjLDB4NjQsMHg0 MSwweDViLDB4YzgsMHgzNwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkw eDY4LDB4MTgsMHhjMiwweDA2LDB4ZWIsMHgzZSwweDA0LDB4OTUsMHg0NCwweDVlLDB4ZmIsMHhl NiwKLSsJMHg0MSwweGMxLDB4NWMsMHhjYywweDQwLDB4MmYsMHhiNywweGQyLDB4MGYsMHhmMyww eDZiLDB4ZTcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTIyNF9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4N2YsMHg0 NSwweGM3LDB4NWQsMHgzMiwweGU2LDB4MTcsMHg2MCwweGJhLDB4ZGMsMHhiOCwweDQyLAotKwkw eDFiLDB4OWMsMHhmMSwweGZhLDB4M2IsMHg0ZCwweDI5LDB4NTQsMHhjNiwweDkwLDB4ZmYsMHg1 YywKLSsJMHhjZCwweGQ2LDB4YTksMHhjYwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2VudHJvcHlpbnB1dHJlc2VlZFtd ID0KLSsJewotKwkweGM0LDB4OGUsMHgzNywweDk1LDB4NjksMHg1MywweDI4LDB4ZDcsMHgzNyww eGJiLDB4NzAsMHg5NSwKLSsJMHgxYywweDA3LDB4MWQsMHhkOSwweGI3LDB4ZTYsMHgxYiwweGJi LDB4ZmUsMHg0MSwweGViLDB4YzkKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9 Ci0rCXsKLSsJMHg1MywweDE3LDB4YTEsMHg2YSwweGZhLDB4NzcsMHg0NywweGIwLDB4OTUsMHg1 NiwweDlhLDB4MjAsCi0rCTB4NTcsMHhkZSwweDVjLDB4ODksMHg5ZiwweDdmLDB4ZTIsMHhkZSww eDE3LDB4M2EsMHg1MCwweDIzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewot KwkweDNhLDB4MzIsMHhmOSwweDg1LDB4MGMsMHhjMSwweGVkLDB4NzYsMHgyZCwweGRmLDB4NDAs MHhjMywKLSsJMHgwNiwweDIyLDB4NjYsMHhkNCwweDlhLDB4OWEsMHhmZiwweDVhLDB4N2UsMHg3 YSwweGYzLDB4OTYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTIyNF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg0MywweGI0 LDB4NTcsMHg1YywweDM4LDB4MjUsMHg5ZCwweGFlLDB4ZWMsMHg5NiwweGQxLDB4ODUsCi0rCTB4 M2EsMHg4NCwweDhkLDB4ZmUsMHg2OCwweGQ1LDB4MGUsMHg1YywweDhmLDB4NjUsMHhhNSwweDRl LAotKwkweDQ1LDB4ODQsMHhhOCwweDk0Ci0rCX07Ci0rCi0rCi0rLyogSE1BQyBTSEEtMjU2IFBS ICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMjU2X3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDRkLDB4YjAsMHg0MywweGQ4LDB4 MzQsMHg0YiwweDEwLDB4NzAsMHhiMSwweDhiLDB4ZWQsMHhlYSwKLSsJMHgwNywweDkyLDB4OWYs MHg2YywweDc5LDB4MzEsMHhhZiwweDgxLDB4MjksMHhlYiwweDZlLDB4Y2EsCi0rCTB4MzIsMHg0 OCwweDI4LDB4ZTcsMHgwMiwweDVkLDB4YTYsMHhhNgotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX25vbmNlW10gPQot Kwl7Ci0rCTB4M2EsMHhhZSwweDE1LDB4YTksMHg5OSwweGRjLDB4ZTQsMHg2NywweDM0LDB4M2Is MHg3MCwweDE1LAotKwkweGFhLDB4ZDMsMHgzMCwweDlhCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfcGVyc29uYWxp emF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4MTMsMHgxZCwweDI0LDB4MDQsMHhiMCwweDE4LDB4 ODEsMHgxNSwweDIxLDB4NTEsMHgyYSwweDI0LAotKwkweDUyLDB4NjEsMHhiZSwweDY0LDB4ODIs MHg2YiwweDU1LDB4MmYsMHhlMiwweGYxLDB4NDAsMHg3ZCwKLSsJMHg3MSwweGQ4LDB4MDEsMHg4 NiwweDE1LDB4YjcsMHg4YiwweGI1Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfYWRkaXRpb25hbGlucHV0W10gPQot Kwl7Ci0rCTB4OGYsMHhhNiwweDU0LDB4NWYsMHhiMSwweGQwLDB4ZDgsMHhjMywweGU3LDB4MGMs MHgxNSwweGE5LAotKwkweDIzLDB4NmUsMHhmZSwweGZiLDB4OTMsMHhmNywweDNhLDB4YmQsMHg1 OSwweDAxLDB4ZmEsMHgxOCwKLSsJMHg4ZSwweGU5LDB4MWEsMHhhOSwweDc4LDB4ZmMsMHg3OSww eDBiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGEyNTZfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHhjZiwweDI0LDB4 YjksMHhlYiwweGIzLDB4ZDQsMHhjZCwweDE3LDB4MzcsMHgzOCwweDc1LDB4NzksCi0rCTB4MTUs MHhjYiwweDJkLDB4NzUsMHg1MSwweGYxLDB4Y2MsMHhhYSwweDMyLDB4YTQsMHhhNywweDM2LAot KwkweDdjLDB4NWMsMHhlNCwweDQ3LDB4ZjEsMHgzZSwweDFkLDB4ZTUKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9p bnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4NTIsMHg0MiwweGZhLDB4ZWIsMHg4NSwweGUw LDB4MzAsMHgyMiwweDc5LDB4MDAsMHgxNiwweGIyLAotKwkweDg4LDB4MmYsMHgxNCwweDZhLDB4 YjcsMHhmYywweGI3LDB4NTMsMHhkYywweDRhLDB4MTIsMHhlZiwKLSsJMHg1NCwweGQ2LDB4MzMs MHhlOSwweDIwLDB4ZDYsMHhmZCwweDU2Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfYWRkaXRpb25hbGlucHV0Mltd ID0KLSsJewotKwkweGY0LDB4ZjYsMHg0OSwweGExLDB4MmQsMHg2NCwweDJiLDB4MzAsMHg1OCww eGY4LDB4YmQsMHhiOCwKLSsJMHg3NSwweGViLDB4YmIsMHg1ZSwweDFjLDB4OWIsMHg4MSwweDZh LDB4ZGEsMHgxNCwweDg2LDB4NmUsCi0rCTB4ZDAsMHhkYSwweDE4LDB4YjcsMHg4OCwweGZiLDB4 NTksMHhmMwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJewotKwkweDIxLDB4 Y2QsMHg2ZSwweDQ2LDB4YWQsMHg5OSwweDA3LDB4MTcsMHhiNCwweDNkLDB4NzYsMHgwYSwKLSsJ MHhmZiwweDViLDB4NTIsMHg1MCwweDc4LDB4ZGYsMHgxZiwweDI0LDB4MDYsMHgwZCwweDNmLDB4 NzQsCi0rCTB4YTksMHhjOSwweDM3LDB4Y2YsMHhkOCwweDI2LDB4MjUsMHg5MQotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2 X3ByX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGE3LDB4YWYsMHgyZiwweDI5LDB4ZTAsMHgz YSwweDcyLDB4OTUsMHg5NiwweDFjLDB4YTksMHhmMCwKLSsJMHg0YSwweDE3LDB4NGQsMHg2Niww eDA2LDB4MTAsMHhiZiwweDM5LDB4ODksMHg4OCwweGI4LDB4OTEsCi0rCTB4MzcsMHgxOCwweDk5 LDB4Y2YsMHg4YywweDUzLDB4M2IsMHg3ZQotKwl9OwotKwotKwotKy8qIEhNQUMgU0hBLTI1NiBO byBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTI1Nl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHg5NiwweGI3LDB4NTMsMHgyMiww eDFlLDB4NTIsMHgyYSwweDk2LDB4YjEsMHgxNSwweDNjLDB4MzUsCi0rCTB4NWEsMHg4YiwweGQz LDB4NGEsMHhhNiwweDZjLDB4ODMsMHgwYSwweDdkLDB4YTMsMHgyMywweDNkLAotKwkweDQzLDB4 YTEsMHgwNywweDJjLDB4MmQsMHhlMywweDgxLDB4Y2MKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9ub25jZVtdID0KLSsJ ewotKwkweGYxLDB4YWMsMHg5NywweGNiLDB4NWUsMHgwNiwweDQ4LDB4ZDIsMHg5NCwweGJlLDB4 MTUsMHgyZSwKLSsJMHhjNywweGZjLDB4YzIsMHgwMQotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3BlcnNvbmFsaXphdGlv bnN0cmluZ1tdID0KLSsJewotKwkweDk4LDB4YzUsMHgxZSwweDM1LDB4NWUsMHg4OSwweDBkLDB4 Y2UsMHg2NCwweDZkLDB4MTgsMHhhNywKLSsJMHg1YSwweGM2LDB4ZjMsMHhlNywweGQ2LDB4OWUs MHhjMCwweGVhLDB4YjcsMHgzYSwweDhkLDB4NjUsCi0rCTB4YjgsMHhlYiwweDEwLDB4ZDcsMHg1 NywweDE4LDB4YTAsMHgzMgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkw eDFiLDB4MTAsMHhhZiwweGFjLDB4ZDAsMHg2NSwweDk1LDB4YWQsMHgwNCwweGFkLDB4MDMsMHgx YywKLSsJMHhlMCwweDQwLDB4ZDYsMHgzZSwweDFjLDB4NDYsMHg1MywweDM5LDB4N2MsMHhlMiww eGJjLDB4ZGEsCi0rCTB4OGMsMHhhMiwweDMzLDB4YTcsMHg5YSwweDI2LDB4ZDMsMHgyNwotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMjU2X2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhiYSwweDYxLDB4MGUsMHg1NSww eGZlLDB4MTEsMHg4YSwweDllLDB4MGYsMHg4MCwweGRmLDB4MWQsCi0rCTB4MDMsMHgwYSwweGZl LDB4MTUsMHg5NCwweDI4LDB4NGIsMHhiYSwweGY0LDB4OWYsMHg1MSwweDI1LAotKwkweDg4LDB4 ZTUsMHg0ZSwweGZiLDB4YWYsMHhjZSwweDY5LDB4OTAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9lbnRyb3B5aW5wdXRy ZXNlZWRbXSA9Ci0rCXsKLSsJMHg2MiwweDdmLDB4MWUsMHg2YiwweGU4LDB4OGUsMHhlMSwweDM1 LDB4N2QsMHg5YiwweDRmLDB4YzcsCi0rCTB4ZWMsMHhjOCwweGFjLDB4ZWYsMHg2YiwweDEzLDB4 OWUsMHgwNSwweDU2LDB4YzEsMHgwOCwweGY5LAotKwkweDJmLDB4MGYsMHgyNywweDljLDB4ZDQs MHgxNSwweGVkLDB4MmQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsK LSsJMHhjNywweDc2LDB4NmUsMHhhOSwweGQyLDB4YjIsMHg3NiwweDQwLDB4ODIsMHgyNSwweDJj LDB4YjMsCi0rCTB4NmYsMHhhYywweGU5LDB4NzQsMHhlZiwweDhmLDB4M2MsMHg4ZSwweGNkLDB4 ZjEsMHhiZiwweGIzLAotKwkweDQ5LDB4NzcsMHgzNCwweDg4LDB4NTIsMHgzNiwweGU2LDB4MmUK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTI1Nl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4OGQsMHhiOCwweDBjLDB4 ZDEsMHhiZiwweDcwLDB4ZjYsMHgxOSwweGMzLDB4NDEsMHg4MCwweDlmLAotKwkweGUxLDB4YTUs MHhhNCwweDFmLDB4MmMsMHgyNiwweGIxLDB4ZTUsMHhkOCwweGViLDB4YmUsMHhmOCwKLSsJMHhk ZiwweDg4LDB4NmEsMHg4OSwweGQ2LDB4MDUsMHhkOCwweDlkCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcmV0dXJuZWRi aXRzW10gPQotKwl7Ci0rCTB4NDMsMHgxMiwweDJhLDB4MmMsMHg0MCwweDUzLDB4MmUsMHg3Yyww eDY2LDB4MzQsMHhhYywweGMzLAotKwkweDQzLDB4ZTMsMHhlMCwweDZhLDB4ZmMsMHhmYSwweGVh LDB4ODcsMHgyMSwweDFmLDB4ZTIsMHgyNiwKLSsJMHhjNCwweGY5LDB4MDksMHg5YSwweDBkLDB4 NmUsMHg3ZiwweGUwCi0rCX07Ci0rCi0rCi0rLyogSE1BQyBTSEEtMzg0IFBSICAqLwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2Vu dHJvcHlpbnB1dFtdID0KLSsJewotKwkweDY5LDB4ODEsMHg5OCwweDg4LDB4NDQsMHhmNSwweGQ2 LDB4MmUsMHgwMCwweDA4LDB4M2IsMHhjNSwKLSsJMHhmYiwweGQ3LDB4OGUsMHg2ZiwweDIzLDB4 ZjgsMHg2ZCwweDA5LDB4ZDYsMHg4NSwweDQ5LDB4ZDEsCi0rCTB4ZjgsMHg2ZCwweGE0LDB4NTgs MHg1NCwweGZkLDB4ODgsMHhhOQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX25vbmNlW10gPQotKwl7Ci0rCTB4NmUs MHgzOCwweDgxLDB4Y2EsMHhiNywweGU4LDB4NmUsMHg2NiwweDQ5LDB4OGEsMHhiMiwweDU5LAot KwkweGVlLDB4MTYsMHhjOSwweGRlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5n W10gPQotKwl7Ci0rCTB4ZmUsMHg0YywweGQ5LDB4ZjQsMHg3OCwweDNiLDB4MDgsMHg0MSwweDhk LDB4OGYsMHg1NSwweGM0LAotKwkweDQzLDB4NTYsMHhiNiwweDEyLDB4MzYsMHg2YiwweDMwLDB4 YjcsMHg1ZSwweGUxLDB4YjksMHg0NywKLSsJMHgwNCwweGIxLDB4NGUsMHhhOSwweDAwLDB4YTEs MHg1MiwweGExCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEzODRfcHJfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4ODks MHhlOSwweGNjLDB4OGYsMHgyNywweDNjLDB4MjYsMHhkMSwweDk1LDB4YzgsMHg3ZCwweDBmLAot KwkweDViLDB4MWEsMHhmMCwweDc4LDB4MzksMHg1NiwweDZmLDB4YTQsMHgyMywweGU3LDB4ZDEs MHhkYSwKLSsJMHg3YywweDY2LDB4MzMsMHhhMCwweDkwLDB4YzksMHg5MiwweDg4Ci0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEz ODRfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHhiZSwweDNkLDB4N2MsMHgwZCwweGNh LDB4ZGEsMHg3YywweDQ5LDB4YjgsMHgxMiwweDM2LDB4YzAsCi0rCTB4ZGIsMHhhZCwweDM1LDB4 YTgsMHhjNywweDBiLDB4MmEsMHgyYywweDY5LDB4NmQsMHgyNSwweDU2LAotKwkweDYzLDB4ODIs MHgxMSwweDNlLDB4YTcsMHgzMywweDcwLDB4NzIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9pbnRfcmV0dXJuZWRi aXRzW10gPQotKwl7Ci0rCTB4ODIsMHgzZCwweGU2LDB4NTQsMHg4MCwweDQyLDB4ZjgsMHhiYSww eDkwLDB4NGYsMHgwNiwweGE2LAotKwkweGQyLDB4N2YsMHhiZiwweDc5LDB4N2MsMHgxMiwweDdk LDB4YTYsMHhhMiwweDY2LDB4ZTgsMHhhNiwKLSsJMHhjMCwweGQ2LDB4NGEsMHg1NSwweGJmLDB4 ZDgsMHgwYSwweGM1LDB4ZjgsMHgwMywweDg4LDB4ZGQsCi0rCTB4OGUsMHg4NywweGQxLDB4NWEs MHg0OCwweDI2LDB4NzIsMHgyYSwweDhlLDB4Y2YsMHhlZSwweGJhCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfYWRk aXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDhmLDB4ZmYsMHhkOSwweDg0LDB4YmIsMHg4NSww eDNhLDB4NjYsMHhhMSwweDIxLDB4Y2UsMHhiMiwKLSsJMHgzYSwweDNhLDB4MTcsMHgyMiwweDE5 LDB4YWUsMHhjNywweGI2LDB4NjMsMHg4MSwweGQ1LDB4ZmYsCi0rCTB4MGQsMHhjOCwweGUxLDB4 YWYsMHg1NywweGQyLDB4Y2IsMHg2MAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2VudHJvcHlpbnB1dHByMltdID0K LSsJewotKwkweGQ3LDB4ZmIsMHhjOSwweGU4LDB4ZTIsMHhmMiwweGFhLDB4NGMsMHhiOCwweDUx LDB4MmYsMHhlMSwKLSsJMHgyMiwweGJhLDB4ZjMsMHhkYSwweDBhLDB4MTksMHg3NiwweDcxLDB4 NTcsMHhiMiwweDFkLDB4OTQsCi0rCTB4MDksMHg2OSwweDZjLDB4ZDMsMHg5NywweDUxLDB4ODEs MHg4NwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMzg0X3ByX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGU2LDB4MTksMHgy OCwweGE4LDB4MjEsMHhjZSwweDVlLDB4ZGIsMHgyNCwweDc5LDB4OGMsMHg3NiwKLSsJMHg1ZCww eDczLDB4YjIsMHhkZiwweGFjLDB4ZWYsMHg4NSwweGE3LDB4M2IsMHgxOSwweDA5LDB4OGIsCi0r CTB4N2YsMHg5OCwweDI4LDB4YTksMHg5MywweGQ4LDB4N2EsMHhhZCwweDU1LDB4OGIsMHgyNCww eDlkLAotKwkweGU2LDB4OTgsMHhmZSwweDQ3LDB4ZDUsMHg0OCwweGMxLDB4MjMsMHhkOCwweDFk LDB4NjIsMHg3NQotKwl9OwotKwotKwotKy8qIEhNQUMgU0hBLTM4NCBObyBQUiAgKi8KLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9lbnRy b3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHhjMywweDU2LDB4MmIsMHgxZCwweGMyLDB4YmIsMHhhOCww eGYwLDB4YWUsMHgxYiwweDBkLDB4ZDMsCi0rCTB4NWEsMHg2YywweGRhLDB4NTcsMHg4ZSwweGE1 LDB4OGEsMHgwZCwweDZjLDB4NGIsMHgxOCwweGIxLAotKwkweDA0LDB4M2UsMHhiNCwweDk5LDB4 MzUsMHhjNCwweGMwLDB4NWYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9ub25jZVtdID0KLSsJewotKwkweGM1LDB4NDks MHgxZSwweDY2LDB4MjcsMHg5MiwweGJlLDB4ZWMsMHhiNSwweDFlLDB4NGIsMHhiMSwKLSsJMHgz OCwweGUzLDB4ZWIsMHg2MgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJ ewotKwkweGJlLDB4ZTcsMHg2YiwweDU3LDB4ZGUsMHg4OCwweDExLDB4OTYsMHg5YiwweDZlLDB4 ZWEsMHhlNSwKLSsJMHg2MywweDgzLDB4NGMsMHhiNiwweDhkLDB4NjYsMHhhYSwweDFmLDB4OGIs MHg1NCwweGU3LDB4NjIsCi0rCTB4NmQsMHg1YSwweGZjLDB4YmYsMHg5NywweGJhLDB4Y2QsMHg3 NwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMzg0X2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweGU1LDB4MjgsMHg1Ziww eDQzLDB4ZjUsMHg4MywweDZlLDB4MGEsMHg4MywweDVjLDB4ZTMsMHg4MSwKLSsJMHgwMywweGYy LDB4ZjgsMHg3OCwweDAwLDB4N2MsMHg5NSwweDg3LDB4MTYsMHhkNiwweDZjLDB4NTgsCi0rCTB4 MzMsMHg2YywweDUzLDB4MzUsMHgwZCwweDY2LDB4ZTMsMHhjZQotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2ludF9yZXR1 cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhlMiwweDFmLDB4ZjMsMHhkYSwweDBkLDB4MTksMHg5OSww eDg3LDB4YzQsMHg5MCwweGEyLDB4MzEsCi0rCTB4Y2EsMHgyYSwweDg5LDB4NTgsMHg0MywweDQ0 LDB4YjgsMHhkZSwweGNmLDB4YTQsMHhiZSwweDNiLAotKwkweDUzLDB4MjYsMHgyMiwweDMxLDB4 NzYsMHg0MSwweDIyLDB4YjUsMHhhOCwweDcwLDB4MmYsMHg0YiwKLSsJMHg2NCwweDk1LDB4NGQs MHg0OCwweDk2LDB4MzUsMHhlNiwweGJkLDB4M2MsMHgzNCwweGRiLDB4MWIKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9l bnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg3NywweDYxLDB4YmEsMHhiYywweGYyLDB4 YzEsMHhmMywweDRiLDB4ODYsMHg2NSwweGZkLDB4NDgsCi0rCTB4MGUsMHgzYywweDAyLDB4NWUs MHhhMiwweDdhLDB4NmIsMHg3YywweGVkLDB4MjEsMHg1ZSwweGY5LAotKwkweGNkLDB4Y2QsMHg3 NywweDA3LDB4MmIsMHhiZSwweGM1LDB4NWMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9hZGRpdGlvbmFsaW5wdXRyZXNl ZWRbXSA9Ci0rCXsKLSsJMHgxOCwweDI0LDB4NWYsMHhjNiwweDg0LDB4ZDEsMHg2NywweGMzLDB4 OWEsMHgxMSwweGE1LDB4OGMsCi0rCTB4MDcsMHgzOSwweDIxLDB4ODMsMHg0ZCwweDA0LDB4YzQs MHg2YSwweDI4LDB4MTksMHhjZiwweDkyLAotKwkweDIxLDB4ZDksMHg5ZSwweDQxLDB4NzIsMHg2 YywweDllLDB4NjMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTM4NF9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4OTYs MHg2NywweDQxLDB4MjgsMHg5YiwweGI3LDB4OTIsMHg4ZCwweDY0LDB4M2IsMHhlNCwweGNmLAot KwkweDdlLDB4YWEsMHgxZSwweGIxLDB4NGIsMHgxZCwweDA5LDB4NTYsMHg2NywweDljLDB4YzYs MHg2ZCwKLSsJMHgzYiwweGU4LDB4OTEsMHg5ZCwweGUxLDB4OGEsMHhiNywweDMyCi0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEz ODRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZTMsMHg1OSwweDYxLDB4MzgsMHg5MiwweGVj LDB4ZTIsMHgzYywweGZmLDB4YjcsMHhkYiwweDE5LAotKwkweDBmLDB4NWIsMHg5MywweDY4LDB4 MGQsMHhhNCwweDk0LDB4NDAsMHg3MiwweDBiLDB4ZTAsMHhlZCwKLSsJMHg0ZCwweGNkLDB4Njgs MHhhMCwweDFlLDB4ZmUsMHg2NywweGIyLDB4ZmEsMHgyMSwweDU2LDB4NzQsCi0rCTB4YTQsMHhh ZCwweGNmLDB4YjcsMHg2MCwweDY2LDB4MmUsMHg0MCwweGRlLDB4ODIsMHhjYSwweGZiCi0rCX07 Ci0rCi0rCi0rLyogSE1BQyBTSEEtNTEyIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2VudHJvcHlpbnB1dFtdID0KLSsJ ewotKwkweGFhLDB4OWUsMHg0NSwweDY3LDB4MGUsMHgwMCwweDJhLDB4NjcsMHg5OCwweGQ2LDB4 ZGEsMHgwYiwKLSsJMHgwZiwweDE3LDB4N2UsMHhhYywweGZkLDB4MjcsMHhjNCwweGNhLDB4ODQs MHhkZiwweGRlLDB4YmEsCi0rCTB4ODUsMHhkOSwweGJlLDB4OGYsMHhmMywweGZmLDB4OTEsMHg0 ZAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhNTEyX3ByX25vbmNlW10gPQotKwl7Ci0rCTB4OGMsMHg0OSwweDJmLDB4NTgsMHgx ZSwweDdhLDB4ZGEsMHg0YiwweDdlLDB4OGEsMHgzMCwweDdiLAotKwkweDg2LDB4ZWEsMHhhZiww eGEyCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGE1MTJfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4NzEs MHhlMSwweGJiLDB4YWQsMHhhNywweDRiLDB4MmUsMHgzMSwweDNiLDB4MGIsMHhlYywweDI0LAot KwkweDk5LDB4MzgsMHhiYywweGFhLDB4MDUsMHg0YywweDQ2LDB4NDQsMHhmYSwweGFkLDB4OGUs MHgwMiwKLSsJMHhjMSwweDdlLDB4YWQsMHhlYywweDU0LDB4YTYsMHhkMCwweGFkCi0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1 MTJfcHJfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4M2QsMHg2ZSwweGE2LDB4YTgsMHgy OSwweDJhLDB4YjIsMHhmNSwweDk4LDB4NDIsMHhlNCwweDkyLAotKwkweDc4LDB4MjIsMHg2Nyww eGZkLDB4MWIsMHgxNSwweDFlLDB4MjksMHhhYSwweDcxLDB4M2MsMHgzYywKLSsJMHhlNywweDA1 LDB4MjAsMHhhOSwweDI5LDB4YzYsMHg3NSwweDcxCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfZW50cm9weWlucHV0 cHJbXSA9Ci0rCXsKLSsJMHhhYiwweGI5LDB4MTYsMHhkOCwweDU1LDB4MzUsMHg1NCwweGI3LDB4 OTcsMHgzZiwweDk0LDB4YmMsCi0rCTB4MmYsMHg3YywweDcwLDB4YzcsMHhkMCwweGVkLDB4Yjcs MHg0YiwweGY3LDB4ZjYsMHg2YywweDAzLAotKwkweDBjLDB4YjAsMHgwMywweGQ4LDB4YmIsMHg3 MSwweGQ5LDB4MTAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4 OGUsMHhkMywweGZkLDB4NTIsMHg5ZSwweDgzLDB4MDgsMHg0OSwweDE4LDB4NmUsMHgyMywweDU2 LAotKwkweDVjLDB4NDUsMHg5MywweDM0LDB4MDUsMHhlMiwweDk4LDB4OGYsMHgwYywweGQ0LDB4 MzIsMHgwYywKLSsJMHhmZCwweGRhLDB4NWYsMHg5MiwweDNhLDB4OGMsMHg4MSwweGJkLDB4ZjYs MHg2YywweDU1LDB4ZmQsCi0rCTB4YjgsMHgyMCwweGNlLDB4OGQsMHg5NywweDI3LDB4ZTgsMHhl OCwweGUwLDB4YjMsMHg4NSwweDUwLAotKwkweGEyLDB4YzIsMHhiMiwweDk1LDB4MWQsMHg0OCww eGQzLDB4N2IsMHg0YiwweDc4LDB4MTMsMHgzNSwKLSsJMHgwNSwweDE3LDB4YmUsMHgwZAotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHhjMywweGZjLDB4OTUsMHhh YSwweDY5LDB4MDYsMHhhZSwweDU5LDB4NDEsMHhjZSwweDI2LDB4MDgsCi0rCTB4MjksMHg2ZCww eDQ1LDB4ZGEsMHhlOCwweGIzLDB4NmMsMHg5NSwweDYwLDB4MGYsMHg3MCwweDJjLAotKwkweDEw LDB4YmEsMHgzOCwweDhjLDB4Y2YsMHgyOSwweDk5LDB4YWEKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9lbnRyb3B5 aW5wdXRwcjJbXSA9Ci0rCXsKLSsJMHgzYiwweDlhLDB4MjUsMHhjZSwweGQ3LDB4ZjksMHg1Yyww eGQxLDB4M2EsMHgzZSwweGFhLDB4NzEsCi0rCTB4MTQsMHgzZSwweDE5LDB4ZTgsMHhjZSwweGU2 LDB4ZmUsMHg1MSwweDg0LDB4ZTksMHgxYiwweGZlLAotKwkweDNmLDB4YTcsMHhmMiwweGZkLDB4 NzYsMHg1ZiwweDZhLDB4ZTcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJ MHhiNywweDgyLDB4YTksMHg1NywweDgxLDB4NjcsMHg1MywweGI1LDB4YTEsMHhlOSwweDNkLDB4 MzUsCi0rCTB4ZjksMHhlNCwweDk3LDB4YmUsMHhhNiwweGNhLDB4ZjEsMHgwMSwweDEzLDB4MDks MHhlNywweDIxLAotKwkweGMwLDB4ZWQsMHg5MywweDVkLDB4NGIsMHhmNCwweGViLDB4OGQsMHg1 MywweDI1LDB4OGEsMHhjNCwKLSsJMHhiMSwweDZmLDB4NmUsMHgzNywweGNkLDB4MmUsMHhhYyww eDM5LDB4YjIsMHhiNiwweDk5LDB4YTMsCi0rCTB4ODIsMHgwMCwweGIwLDB4MjEsMHhmMCwweGM3 LDB4MmYsMHg0YywweDczLDB4OTIsMHhmZCwweDAwLAotKwkweGI2LDB4YWYsMHhiYywweGQzCi0r CX07Ci0rCi0rCi0rLyogSE1BQyBTSEEtNTEyIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2VudHJvcHlpbnB1dFtdID0K LSsJewotKwkweDZlLDB4ODUsMHhlNiwweDI1LDB4OTYsMHgyOSwweGE3LDB4NTIsMHg1YiwweDYw LDB4YmEsMHhhYSwKLSsJMHhkZSwweGRiLDB4MzYsMHgwYSwweDUxLDB4OWEsMHgxNSwweGFlLDB4 NmUsMHgxOCwweGQzLDB4ZmUsCi0rCTB4MzksMHhiOSwweDRhLDB4OTYsMHhmOCwweDc3LDB4Y2Is MHg5NQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhNTEyX25vbmNlW10gPQotKwl7Ci0rCTB4ZTAsMHhhNiwweDVkLDB4MDgsMHhj MywweDdjLDB4YWUsMHgyNSwweDJlLDB4ODAsMHhkMSwweDNlLAotKwkweGQ5LDB4YWYsMHg0Myww eDNjCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGE1MTJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4NTMsMHg5 OSwweDUyLDB4NWYsMHgxMSwweGE5LDB4NjQsMHg2NiwweDIwLDB4NWUsMHgxYiwweDVmLAotKwkw eDQyLDB4YjMsMHhmNCwweGRhLDB4ZWQsMHhiYiwweDYzLDB4YzEsMHgyMywweGFmLDB4ZDAsMHgw MSwKLSsJMHg5MCwweDNiLDB4ZDAsMHg3OCwweGU0LDB4MGIsMHhhNywweDIwCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJf YWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4ODUsMHg5MCwweDgwLDB4ZDMsMHg5OCwweGYx LDB4NTMsMHg2ZCwweDY4LDB4MTUsMHg4ZiwweGU1LAotKwkweDYwLDB4M2YsMHgxNywweDI5LDB4 NTUsMHg4ZCwweDMzLDB4YjEsMHg0NSwweDY0LDB4NjQsMHg4ZCwKLSsJMHg1MCwweDIxLDB4ODks MHhhZSwweGY2LDB4ZmQsMHgzMiwweDczCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfaW50X3JldHVybmVkYml0c1tdID0K LSsJewotKwkweDI4LDB4NTYsMHgzMCwweDZmLDB4ZjQsMHhhMSwweDQ4LDB4ZTAsMHhjOSwweGY1 LDB4NzUsMHg5MCwKLSsJMHhjYywweGZiLDB4ZGYsMHhkZiwweDcxLDB4M2QsMHgwYSwweDlhLDB4 MDMsMHg2NSwweDNiLDB4MTgsCi0rCTB4NjEsMHhlMywweGQxLDB4ZGEsMHhjYywweDRhLDB4ZmUs MHg1NSwweDM4LDB4ZjgsMHgyMSwweDZiLAotKwkweGZhLDB4MTgsMHgwMSwweDQyLDB4MzksMHgy ZiwweDk5LDB4NTMsMHgzOCwweDE1LDB4ODIsMHgzNCwKLSsJMHhjNSwweDkzLDB4OTIsMHhiYyww eDRkLDB4NzUsMHgxYSwweDVmLDB4MjEsMHgyNywweGNjLDB4YTEsCi0rCTB4YjEsMHg1NywweDY5 LDB4ZTgKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTUxMl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg4YywweDUy LDB4N2UsMHg3NywweDcyLDB4M2YsMHhhMywweDA0LDB4OTcsMHgxMCwweDliLDB4NDEsCi0rCTB4 YmQsMHhlOCwweGZmLDB4ODksMHhlZCwweDgwLDB4ZTMsMHhiZCwweGFhLDB4MTIsMHgyZCwweGNh LAotKwkweDc1LDB4ODIsMHgzNiwweDc3LDB4ODgsMHhjZCwweGE2LDB4NzMKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9h ZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg3ZSwweDMyLDB4ZTMsMHg2OSwweDY5 LDB4MDcsMHgzNCwweGEyLDB4MTYsMHhhMiwweDVkLDB4MWEsCi0rCTB4MTAsMHg5MSwweGQzLDB4 ZTIsMHgyMSwweGEyLDB4YTMsMHhkZCwweGNkLDB4MGMsMHgwOSwweDg2LAotKwkweDExLDB4ZTEs MHg1MCwweGZmLDB4NWMsMHhiNywweGViLDB4NWMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9hZGRpdGlvbmFsaW5wdXQy W10gPQotKwl7Ci0rCTB4N2YsMHg3OCwweDY2LDB4ZDgsMHhmYiwweDY3LDB4Y2YsMHg4ZCwweDhj LDB4MDgsMHgzMCwweGE1LAotKwkweGY4LDB4N2QsMHhjZiwweDQ0LDB4NTksMHhjZSwweGY4LDB4 ZGYsMHg1OCwweGQzLDB4NjAsMHhjYiwKLSsJMHhhOCwweDYwLDB4YjksMHgwNywweGM0LDB4YjEs MHg5NSwweDQ4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGE1MTJfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ZGYsMHhhNyww eDM2LDB4ZDQsMHhkYywweDVkLDB4NGQsMHgzMSwweGFkLDB4NjksMHg0NiwweDlmLAotKwkweGYx LDB4N2MsMHhkNywweDNiLDB4NGYsMHg1NSwweGYyLDB4ZDcsMHhiOSwweDlkLDB4YWQsMHg3YSwK LSsJMHg3OSwweDA4LDB4NTksMHhhNSwweGRjLDB4NzQsMHhmNSwweDliLDB4NzMsMHhkMiwweDEz LDB4MjUsCi0rCTB4MGIsMHg4MSwweDA4LDB4MDgsMHgyNSwweGZiLDB4MzksMHhmMiwweGYwLDB4 YTMsMHhhNCwweDhkLAotKwkweGVmLDB4MDUsMHg5ZSwweGI4LDB4YzcsMHg1MiwweGU0LDB4MGUs MHg0MiwweGFhLDB4N2MsMHg3OSwKLSsJMHhjMiwweGQ2LDB4ZmQsMHhhNQotKwl9OwotKwotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYy5maXBz IG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMKLS0tLSBvcGVu c3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jLmZpcHMJMjAxNC0xMC0x NiAxMzoxOTozNS4wOTkzMDY0MjMgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlw cy9maXBzX2RzYV9zZWxmdGVzdC5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDk5MzA2NDIzICswMjAw Ci1AQCAtMCwwICsxLDE5MyBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAy MDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICog 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 dWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9kc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvYm4uaD4KLSsjaW5jbHVkZSAiZmlwc19sb2NsLmgiCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfcFtdID0gewot KwkweGE4LDB4NTMsMHg3OCwweGQ4LDB4ZmQsMHgzZiwweDhkLDB4NzIsMHhlYywweDc0LDB4MTgs MHgwOCwKLSsJMHgwZCwweGEyLDB4MTMsMHgxNywweGU0LDB4M2UsMHhjNCwweGI2LDB4MmIsMHhh OCwweGM4LDB4NjIsCi0rCTB4M2IsMHg3ZSwweDRkLDB4MDQsMHg0NCwweDFkLDB4ZDEsMHhhMCww eDY1LDB4ODYsMHg2MiwweDU5LAotKwkweDY0LDB4OTMsMHhjYSwweDhlLDB4OWUsMHg4ZiwweGJi LDB4N2UsMHgzNCwweGFhLDB4ZGQsMHhiNiwKLSsJMHgyZSwweDVkLDB4NjcsMHhiNiwweGQwLDB4 OWEsMHg2ZSwweDYxLDB4YjcsMHg2OSwweGU3LDB4YzMsCi0rCTB4NTIsMHhhYSwweDJiLDB4MTAs MHhlMiwweDBjLDB4YTAsMHg2MywweDY5LDB4NjMsMHhiNSwweDUyLAotKwkweDNlLDB4ODYsMHg0 NywweDBkLDB4ZWMsMHhiYiwweGVkLDB4YTAsMHgyNywweGU3LDB4OTcsMHhlNywKLSsJMHhiNiww eDc2LDB4MzUsMHhkNCwweGQ0LDB4OWMsMHgzMCwweDcwLDB4MGUsMHg3NCwweGFmLDB4OGEsCi0r CTB4MGYsMHhmMSwweDU2LDB4YTgsMHgwMSwweGFmLDB4NTcsMHhhMiwweDZlLDB4NzAsMHg3OCww eGYxLAotKwkweGQ4LDB4MmYsMHg3NCwweDkwLDB4OGUsMHhjYiwweDZkLDB4MDcsMHhlNywweDBi LDB4MzUsMHgwMywKLSsJMHhlZSwweGQ5LDB4NGYsMHhhMywweDJjLDB4ZjEsMHg3YSwweDdmLDB4 YzMsMHhkNiwweGNmLDB4NDAsCi0rCTB4ZGMsMHg3YiwweDAwLDB4ODMsMHgwZSwweDZhLDB4MjUs MHg2NiwweGRjLDB4MDcsMHgzZSwweDM0LAotKwkweDMzLDB4MTIsMHg1MSwweDdjLDB4NmEsMHhh NSwweDE1LDB4MmIsMHg0YiwweGZlLDB4Y2QsMHgyZSwKLSsJMHg1NSwweDFmLDB4ZWUsMHgzNCww eDYzLDB4MTgsMHhhMSwweDUzLDB4NDIsMHgzYywweDk5LDB4NmIsCi0rCTB4MGQsMHg1ZCwweGNi LDB4OTEsMHgwMiwweGFlLDB4ZGQsMHgzOCwweDc5LDB4ODYsMHgxNiwweGYxLAotKwkweGYxLDB4 ZTAsMHhkNiwweGM0LDB4MDMsMHg1MiwweDViLDB4MWYsMHg5YiwweDNkLDB4NGQsMHhjNywKLSsJ MHg2NiwweGRlLDB4MmQsMHhmYywweDRhLDB4NTYsMHhkNywweGI4LDB4YmEsMHg1OSwweDYzLDB4 ZDYsCi0rCTB4MGYsMHgzZSwweDE2LDB4MzEsMHg4OCwweDcwLDB4YWQsMHg0MywweDY5LDB4NTIs MHhlNSwweDU3LAotKwkweDY1LDB4MzcsMHg0ZSwweGFiLDB4ODUsMHhlOCwweGVjLDB4MTcsMHhk NiwweGI5LDB4YTQsMHg1NCwKLSsJMHg3YiwweDliLDB4NWYsMHgyNywweDUyLDB4ZjMsMHgxMCww eDViLDB4ZTgsMHgwOSwweGIyLDB4M2EsCi0rCTB4MmMsMHg4ZCwweDc0LDB4NjksMHhkYiwweDAy LDB4ZTIsMHg0ZCwweDU5LDB4MjMsMHg5NCwweGE3LAotKwkweGRiLDB4YTAsMHg2OSwweGU5Ci0r fTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X3FbXSA9IHsK LSsJMHhkMiwweDc3LDB4MDQsMHg0ZSwweDUwLDB4ZjUsMHhhNCwweGUzLDB4ZjUsMHgxMCwweGE1 LDB4MGEsCi0rCTB4MGIsMHg4NCwweGZkLDB4ZmYsMHhiYywweGEwLDB4NDcsMHhlZCwweDI3LDB4 NjAsMHgyMCwweDU2LAotKwkweDc0LDB4NDEsMHhhMCwweGE1Ci0rfTsKLSsKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X2dbXSA9IHsKLSsJMHgxMywweGQ3LDB4NTQs MHhlMiwweDFmLDB4ZDIsMHg0MSwweDY1LDB4NWQsMHhhOCwweDkxLDB4YzUsCi0rCTB4MjIsMHhh NiwweDVhLDB4NzIsMHhhOCwweDliLDB4ZGMsMHg2NCwweGVjLDB4OWIsMHg1NCwweGE4LAotKwkw eDIxLDB4ZWQsMHg0YSwweDg5LDB4OGIsMHg0OSwweDBlLDB4MGMsMHg0ZiwweGNiLDB4NzIsMHgx OSwKLSsJMHgyYSwweDRhLDB4MjAsMHhmNSwweDQxLDB4ZjMsMHhmMiwweDkyLDB4NTMsMHg5OSww eGYwLDB4YmEsCi0rCTB4ZWMsMHhmOSwweDI5LDB4YWEsMHhmYiwweGY3LDB4OWQsMHhmZSwweDQz LDB4MzIsMHgzOSwweDNiLAotKwkweDMyLDB4Y2QsMHgyZSwweDJmLDB4Y2YsMHgyNywweDJmLDB4 MzIsMHhhNiwweDI3LDB4NDMsMHg0YSwKLSsJMHgwZCwweGYyLDB4NDIsMHhiNywweDViLDB4NDEs MHg0ZCwweGYzLDB4NzIsMHgxMiwweDFlLDB4NTMsCi0rCTB4YTUsMHg1MywweGYyLDB4MjIsMHhm OCwweDM2LDB4YjAsMHgwMCwweGYwLDB4MTYsMHg0OCwweDViLAotKwkweDZiLDB4ZDAsMHg4OSww eDg0LDB4NTEsMHg4MCwweDFkLDB4Y2QsMHg4ZCwweGU2LDB4NGMsMHhkNSwKLSsJMHgzNiwweDU2 LDB4OTYsMHhmZiwweGM1LDB4MzIsMHhkNSwweDI4LDB4YzUsMHgwNiwweDYyLDB4MGEsCi0rCTB4 OTQsMHgyYSwweDAzLDB4MDUsMHgwNCwweDZkLDB4OGYsMHgxOCwweDc2LDB4MzQsMHgxZiwweDFl LAotKwkweDU3LDB4MGIsMHhjMywweDk3LDB4NGIsMHhhNiwweGI5LDB4YTQsMHgzOCwweGU5LDB4 NzAsMHgyMywKLSsJMHgwMiwweGEyLDB4ZTYsMHhlNiwweDdiLDB4ZmQsMHgwNiwweGQzLDB4MmIs MHhjNiwweDc5LDB4OTYsCi0rCTB4MjIsMHg3MSwweGQ3LDB4YjQsMHgwYywweGQ3LDB4MmYsMHgz OCwweDZlLDB4NjQsMHhlMCwweGQ3LAotKwkweGVmLDB4ODYsMHhjYSwweDhjLDB4YTUsMHhkMSww eDQyLDB4MjgsMHhkYywweDJhLDB4NGYsMHgxNiwKLSsJMHhlMywweDE4LDB4OTgsMHg4NiwweGI1 LDB4OTksMHgwNiwweDc0LDB4ZjQsMHgyMCwweDBmLDB4M2EsCi0rCTB4NGMsMHhmNiwweDVhLDB4 M2YsMHgwZCwweGRiLDB4YTEsMHhmYSwweDY3LDB4MmQsMHhmZiwweDJmLAotKwkweDVlLDB4MTQs MHgzZCwweDEwLDB4ZTQsMHhlOSwweDdhLDB4ZTgsMHg0ZiwweDZkLDB4YTAsMHg5NSwKLSsJMHgz NSwweGQ1LDB4YjksMHhkZiwweDI1LDB4OTEsMHg4MSwweGE3LDB4OWIsMHg2MywweGIwLDB4Njks Ci0rCTB4ZTksMHg0OSwweDk3LDB4MmIsMHgwMiwweGJhLDB4MzYsMHhiMywweDU4LDB4NmEsMHhh YiwweDdlLAotKwkweDQ1LDB4ZjMsMHgyMiwweGY4LDB4MmUsMHg0ZSwweDg1LDB4Y2EsMHgzYSww eGI4LDB4NTUsMHg5MSwKLSsJMHhiMywweGMyLDB4YTksMHg2NgotK307Ci0rCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0OF9wdWJfa2V5W10gPSB7Ci0rCTB4MjQsMHg1 MiwweGYzLDB4Y2MsMHhiZSwweDllLDB4ZDUsMHhjYSwweDdkLDB4YzcsMHg0YywweDYwLAotKwkw eDJiLDB4OTksMHgyMiwweDZlLDB4OGYsMHgyZiwweGFiLDB4MzgsMHhlNywweGQ3LDB4ZGQsMHhm YiwKLSsJMHg3NSwweDUzLDB4OWIsMHgxNywweDE1LDB4NWUsMHg5ZiwweGNmLDB4ZDEsMHhhYiww eGE1LDB4NjQsCi0rCTB4ZWIsMHg4NSwweDM1LDB4ZDgsMHgxMiwweGM5LDB4YzIsMHhkYywweGY5 LDB4NzIsMHg4NCwweDQ0LAotKwkweDFiLDB4YzQsMHg4MiwweDI0LDB4MzYsMHgyNCwweGM3LDB4 ZjQsMHg1NywweDU4LDB4MGMsMHgxYywKLSsJMHgzOCwweGE1LDB4N2MsMHg0NiwweGM0LDB4NTcs MHgzOSwweDI0LDB4NzAsMHhlZCwweGI1LDB4MmMsCi0rCTB4YjUsMHhhNiwweGUwLDB4M2YsMHhl NiwweDI4LDB4N2IsMHhiNiwweGY0LDB4OWEsMHg0MiwweGEyLAotKwkweDA2LDB4NWEsMHgwNSww eDRmLDB4MDMsMHgwOCwweDM5LDB4ZGYsMHgxZiwweGQzLDB4MTQsMHg5YywKLSsJMHg0YywweGEw LDB4NTMsMHgxZCwweGQ4LDB4Y2EsMHg4YSwweGFhLDB4OWMsMHhjNywweDMzLDB4NzEsCi0rCTB4 OTMsMHgzOCwweDczLDB4NDgsMHgzMywweDYxLDB4MTgsMHgyMiwweDQ1LDB4NDUsMHhlOCwweDhj LAotKwkweDgwLDB4ZmYsMHhkOCwweDc2LDB4NWQsMHg3NCwweDM2LDB4MDMsMHgzMywweGNjLDB4 YWIsMHg5OSwKLSsJMHg3MiwweDc3LDB4OWIsMHg2NSwweDI1LDB4YTYsMHg1YiwweGRkLDB4MGQs MHgxMCwweGM2LDB4NzUsCi0rCTB4YzEsMHgwOSwweGJiLDB4ZDMsMHhlNSwweGJlLDB4NGQsMHg3 MiwweGVmLDB4NmUsMHhiYSwweDZlLAotKwkweDQzLDB4OGQsMHg1MiwweDI2LDB4MjMsMHg3ZCww eGI4LDB4ODgsMHgzNywweDljLDB4NWYsMHhjYywKLSsJMHg0NywweGEzLDB4ODQsMHg3ZiwweGY2 LDB4MzcsMHgxMSwweGJhLDB4ZWQsMHg2ZCwweDAzLDB4YWYsCi0rCTB4ZTgsMHgxZSwweDY5LDB4 NGEsMHg0MSwweDNiLDB4NjgsMHgwYiwweGQzLDB4OGEsMHhiNCwweDkwLAotKwkweDNmLDB4ODMs MHg3MCwweGE3LDB4MDcsMHhlZiwweDU1LDB4MWQsMHg0OSwweDQxLDB4MDIsMHg2ZCwKLSsJMHg5 NSwweDc5LDB4ZDYsMHg5MSwweGRlLDB4OGUsMHhkYSwweGExLDB4NjEsMHgwNSwweGViLDB4OWQs Ci0rCTB4YmEsMHgzYywweDJmLDB4NGMsMHgxYiwweGVjLDB4NTAsMHg4MiwweDc1LDB4YWEsMHgw MiwweDA3LAotKwkweGUyLDB4NTEsMHhiNSwweGVjLDB4Y2IsMHgyOCwweDZhLDB4NGIsMHgwMSww eGQ0LDB4NDksMHhkMywKLSsJMHgwYSwweGNiLDB4NjcsMHgzNywweDE3LDB4YTAsMHhkMiwweGZi LDB4M2IsMHg1MCwweGM4LDB4OTMsCi0rCTB4ZjcsMHhkYSwweGIxLDB4NGYKLSt9OwotKwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfcHJpdl9rZXlbXSA9IHsKLSsJ MHgwYywweDRiLDB4MzAsMHg4OSwweGQxLDB4YjgsMHg2MiwweGNiLDB4M2MsMHg0MywweDY0LDB4 OTEsCi0rCTB4ZjAsMHg5MSwweDU0LDB4NzAsMHhjNSwweDI3LDB4OTYsMHhlMywweGFjLDB4YmUs MHhlOCwweDAwLAotKwkweGVjLDB4NTUsMHhmNiwweGNjCi0rfTsKLSsKLStzdGF0aWMgaW50IGNv cnJ1cHRfZHNhOwotKwotK3ZvaWQgRklQU19jb3JydXB0X2RzYSgpCi0rICAgIHsKLSsgICAgY29y cnVwdF9kc2EgPSAxOwotKyAgICB9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfZHNhKCkKLSsJewot KwlEU0EgKmRzYSA9IE5VTEw7Ci0rCUVWUF9QS0VZICpwayA9IE5VTEw7Ci0rCWludCByZXQgPSAw OwotKwotKwlkc2EgPSBEU0FfbmV3KCk7Ci0rCi0rCWlmKGRzYSA9PSBOVUxMKQotKwkJZ290byBl cnI7Ci0rCi0rCWZpcHNfbG9hZF9rZXlfY29tcG9uZW50KGRzYSwgcCwgZHNhX3Rlc3RfMjA0OCk7 Ci0rCWZpcHNfbG9hZF9rZXlfY29tcG9uZW50KGRzYSwgcSwgZHNhX3Rlc3RfMjA0OCk7Ci0rCWZp cHNfbG9hZF9rZXlfY29tcG9uZW50KGRzYSwgZywgZHNhX3Rlc3RfMjA0OCk7Ci0rCWZpcHNfbG9h ZF9rZXlfY29tcG9uZW50KGRzYSwgcHViX2tleSwgZHNhX3Rlc3RfMjA0OCk7Ci0rCWZpcHNfbG9h ZF9rZXlfY29tcG9uZW50KGRzYSwgcHJpdl9rZXksIGRzYV90ZXN0XzIwNDgpOwotKwotKwlpZiAo Y29ycnVwdF9kc2EpCi0rCQlCTl9zZXRfYml0KGRzYS0+cHViX2tleSwgMjA0Nyk7Ci0rCi0rCWlm ICgocGs9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsKLSsJRVZQX1BL RVlfYXNzaWduX0RTQShwaywgZHNhKTsKLSsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3QocGssIE5VTEwsIDAsCi0rCQkJCQlOVUxMLCAwLCBFVlBfc2hhMjU2KCksIDAsCi0rCQkJCQki RFNBIFNIQTI1NiIpKQotKwkJZ290byBlcnI7Ci0rCXJldCA9IDE7Ci0rCi0rCWVycjoKLSsJaWYg KHBrKQotKwkJRVZQX1BLRVlfZnJlZShwayk7Ci0rCWVsc2UgaWYgKGRzYSkKLSsJCURTQV9mcmVl KGRzYSk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjFqL2NyeXB0by9maXBzL2ZpcHNfZW5jLmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlw cy9maXBzX2VuYy5jCi0tLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19lbmMuYy5m aXBzCTIwMTQtMTAtMTYgMTM6MTk6MzUuMDk5MzA2NDIzICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MWovY3J5cHRvL2ZpcHMvZmlwc19lbmMuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5OTMwNjQyMyAr MDIwMAotQEAgLTAsMCArMSwxOTEgQEAKLSsvKiBmaXBlL2V2cC9maXBzX2VuYy5jICovCi0rLyog Q29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0r ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wg aW1wbGVtZW50YXRpb24gd3JpdHRlbgotKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQu Y29tKS4KLSsgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9y bSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0rICogCi0rICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9y IGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCi0rICogdGhlIGZv bGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRp b25zCi0rICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJl IGl0IHRoZSBSQzQsIFJTQSwKLSsgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0 aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KLSsgKiBpbmNsdWRlZCB3aXRoIHRo aXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCi0r ICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNv bSkuCi0rICogCi0rICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3Vj aCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSsgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJl bW92ZWQuCi0rICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlv dW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgotKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhl IHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0rICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0g b2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0rICogaW4gZG9jdW1l bnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCi0r ICogCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAot KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSsgKiAgICBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz dHJpYnV0aW9uLgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBm ZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotKyAqICAgIG11c3QgZGlzcGxheSB0aGUg Zm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQotKyAqICAgICBFcmljIFlvdW5nIChl YXlAY3J5cHRzb2Z0LmNvbSkiCi0rICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBi ZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0rICogICAgYmVpbmcg dXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCi0rICogNC4gSWYgeW91IGlu Y2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2Yp IGZyb20gCi0rICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3Ug bXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20p IgotKyAqIAotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFT IElTJycgQU5ECi0rICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSsgKiBB UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVU T1JTIEJFIExJQUJMRQotKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0rICogREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMK LSsgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotKyAqIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO WSBXQVkKLSsgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0rICogU1VDSCBEQU1BR0UuCi0rICogCi0rICogVGhl IGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxh YmxlIHZlcnNpb24gb3IKLSsgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hh bmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKLSsgKiBjb3BpZWQgYW5kIHB1 dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0rICogW2luY2x1ZGluZyB0aGUg R05VIFB1YmxpYyBMaWNlbmNlLl0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5j bHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKwotK2NvbnN0IEVWUF9D SVBIRVIgKkZJUFNfZ2V0X2NpcGhlcmJ5bmlkKGludCBuaWQpCi0rCXsKLSsJc3dpdGNoIChuaWQp Ci0rCQl7Ci0rCQljYXNlIE5JRF9hZXNfMTI4X2NiYzoKLSsJCXJldHVybiBFVlBfYWVzXzEyOF9j YmMoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xMjhfY2NtOgotKwkJcmV0dXJuIEVWUF9hZXNfMTI4 X2NjbSgpOwotKwotKwkJY2FzZSBOSURfYWVzXzEyOF9jZmIxOgotKwkJcmV0dXJuIEVWUF9hZXNf MTI4X2NmYjEoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xMjhfY2ZiMTI4OgotKwkJcmV0dXJuIEVW UF9hZXNfMTI4X2NmYjEyOCgpOwotKwotKwkJY2FzZSBOSURfYWVzXzEyOF9jZmI4OgotKwkJcmV0 dXJuIEVWUF9hZXNfMTI4X2NmYjgoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xMjhfY3RyOgotKwkJ cmV0dXJuIEVWUF9hZXNfMTI4X2N0cigpOwotKwotKwkJY2FzZSBOSURfYWVzXzEyOF9lY2I6Ci0r CQlyZXR1cm4gRVZQX2Flc18xMjhfZWNiKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTI4X2djbToK LSsJCXJldHVybiBFVlBfYWVzXzEyOF9nY20oKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xMjhfb2Zi MTI4OgotKwkJcmV0dXJuIEVWUF9hZXNfMTI4X29mYigpOwotKwotKwkJY2FzZSBOSURfYWVzXzEy OF94dHM6Ci0rCQlyZXR1cm4gRVZQX2Flc18xMjhfeHRzKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNf MTkyX2NiYzoKLSsJCXJldHVybiBFVlBfYWVzXzE5Ml9jYmMoKTsKLSsKLSsJCWNhc2UgTklEX2Fl c18xOTJfY2NtOgotKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2NjbSgpOwotKwotKwkJY2FzZSBOSURf YWVzXzE5Ml9jZmIxOgotKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2NmYjEoKTsKLSsKLSsJCWNhc2Ug TklEX2Flc18xOTJfY2ZiMTI4OgotKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2NmYjEyOCgpOwotKwot KwkJY2FzZSBOSURfYWVzXzE5Ml9jZmI4OgotKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2NmYjgoKTsK LSsKLSsJCWNhc2UgTklEX2Flc18xOTJfY3RyOgotKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2N0cigp OwotKwotKwkJY2FzZSBOSURfYWVzXzE5Ml9lY2I6Ci0rCQlyZXR1cm4gRVZQX2Flc18xOTJfZWNi KCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTkyX2djbToKLSsJCXJldHVybiBFVlBfYWVzXzE5Ml9n Y20oKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xOTJfb2ZiMTI4OgotKwkJcmV0dXJuIEVWUF9hZXNf MTkyX29mYigpOwotKwotKwkJY2FzZSBOSURfYWVzXzI1Nl9jYmM6Ci0rCQlyZXR1cm4gRVZQX2Fl c18yNTZfY2JjKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMjU2X2NjbToKLSsJCXJldHVybiBFVlBf YWVzXzI1Nl9jY20oKTsKLSsKLSsJCWNhc2UgTklEX2Flc18yNTZfY2ZiMToKLSsJCXJldHVybiBF VlBfYWVzXzI1Nl9jZmIxKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMjU2X2NmYjEyODoKLSsJCXJl dHVybiBFVlBfYWVzXzI1Nl9jZmIxMjgoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18yNTZfY2ZiODoK LSsJCXJldHVybiBFVlBfYWVzXzI1Nl9jZmI4KCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMjU2X2N0 cjoKLSsJCXJldHVybiBFVlBfYWVzXzI1Nl9jdHIoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18yNTZf ZWNiOgotKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2VjYigpOwotKwotKwkJY2FzZSBOSURfYWVzXzI1 Nl9nY206Ci0rCQlyZXR1cm4gRVZQX2Flc18yNTZfZ2NtKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNf MjU2X29mYjEyODoKLSsJCXJldHVybiBFVlBfYWVzXzI1Nl9vZmIoKTsKLSsKLSsJCWNhc2UgTklE X2Flc18yNTZfeHRzOgotKwkJcmV0dXJuIEVWUF9hZXNfMjU2X3h0cygpOwotKwotKwkJY2FzZSBO SURfZGVzX2VkZV9lY2I6Ci0rCQlyZXR1cm4gRVZQX2Rlc19lZGUoKTsKLSsKLSsJCWNhc2UgTklE X2Rlc19lZGUzX2VjYjoKLSsJCXJldHVybiBFVlBfZGVzX2VkZTMoKTsKLSsKLSsJCWNhc2UgTklE X2Rlc19lZGUzX2NiYzoKLSsJCXJldHVybiBFVlBfZGVzX2VkZTNfY2JjKCk7Ci0rCi0rCQljYXNl IE5JRF9kZXNfZWRlM19jZmIxOgotKwkJcmV0dXJuIEVWUF9kZXNfZWRlM19jZmIxKCk7Ci0rCi0r CQljYXNlIE5JRF9kZXNfZWRlM19jZmI2NDoKLSsJCXJldHVybiBFVlBfZGVzX2VkZTNfY2ZiNjQo KTsKLSsKLSsJCWNhc2UgTklEX2Rlc19lZGUzX2NmYjg6Ci0rCQlyZXR1cm4gRVZQX2Rlc19lZGUz X2NmYjgoKTsKLSsKLSsJCWNhc2UgTklEX2Rlc19lZGUzX29mYjY0OgotKwkJcmV0dXJuIEVWUF9k ZXNfZWRlM19vZmIoKTsKLSsKLSsJCWNhc2UgTklEX2Rlc19lZGVfY2JjOgotKwkJcmV0dXJuIEVW UF9kZXNfZWRlX2NiYygpOwotKwotKwkJY2FzZSBOSURfZGVzX2VkZV9jZmI2NDoKLSsJCXJldHVy biBFVlBfZGVzX2VkZV9jZmI2NCgpOwotKwotKwkJY2FzZSBOSURfZGVzX2VkZV9vZmI2NDoKLSsJ CXJldHVybiBFVlBfZGVzX2VkZV9vZmIoKTsKLSsKLSsJCWRlZmF1bHQ6Ci0rCQlyZXR1cm4gTlVM TDsKLSsKLSsJCX0KLSsJfQotKwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMv Zmlwcy5oLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwcy5oCi0tLS0gb3BlbnNz bC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwcy5oLmZpcHMJMjAxNC0xMC0xNiAxMzoxOTozNS4wOTkz MDY0MjMgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzLmgJMjAxNC0x MC0xNiAxMzoxOTozNS4wOTkzMDY0MjMgKzAyMDAKLUBAIC0wLDAgKzEsMjc5IEBACi0rLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsg KiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgot KyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQu IFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBu b3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5z c2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkg Ik9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsg KiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRp c3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93 aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAq Ci0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBg QVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBP U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNU IE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAot KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVkZSA8c3RkYXJnLmg+Ci0rCi0r I2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjZXJyb3IgRklQUyBpcyBkaXNhYmxlZC4KLSsjZW5kaWYK LSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rI2lmZGVmICBfX2NwbHVzcGx1cwotK2V4dGVy biAiQyIgewotKyNlbmRpZgotKwotK3N0cnVjdCBkc2Ffc3Q7Ci0rc3RydWN0IHJzYV9zdDsKLStz dHJ1Y3QgZXZwX3BrZXlfc3Q7Ci0rc3RydWN0IGVudl9tZF9zdDsKLStzdHJ1Y3QgZW52X21kX2N0 eF9zdDsKLStzdHJ1Y3QgZXZwX2NpcGhlcl9zdDsKLStzdHJ1Y3QgZXZwX2NpcGhlcl9jdHhfc3Q7 Ci0rc3RydWN0IGRoX21ldGhvZDsKLStzdHJ1Y3QgQ01BQ19DVFhfc3Q7Ci0rc3RydWN0IGhtYWNf Y3R4X3N0OwotKwotK2ludCBGSVBTX21vZHVsZV9tb2RlX3NldChpbnQgb25vZmYsIGNvbnN0IGNo YXIgKmF1dGgpOwotK2ludCBGSVBTX21vZHVsZV9tb2RlKHZvaWQpOwotK2NvbnN0IHZvaWQgKkZJ UFNfcmFuZF9jaGVjayh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdCh2b2lkKTsKLStpbnQgRklQ U19zZWxmdGVzdF9mYWlsZWQodm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfc2hhMSh2b2lkKTsK LStpbnQgRklQU19zZWxmdGVzdF9zaGExKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTIo dm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfYWVzKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0 X2Flc19jY20odm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfYWVzX2djbSh2b2lkKTsKLStpbnQg RklQU19zZWxmdGVzdF9hZXNfeHRzKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Flcyh2b2lk KTsKLSt2b2lkIEZJUFNfY29ycnVwdF9kZXModm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfZGVz KHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X3JzYSh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVw dF9yc2Ffa2V5Z2VuKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X3JzYSh2b2lkKTsKLSt2b2lk IEZJUFNfY29ycnVwdF9kc2Eodm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbih2 b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9kc2Eodm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRf cm5nKHZvaWQpOwotK3ZvaWQgRklQU19ybmdfc3RpY2sodm9pZCk7Ci0rdm9pZCBGSVBTX3g5MzFf c3RpY2soaW50IG9ub2ZmKTsKLSt2b2lkIEZJUFNfZHJiZ19zdGljayhpbnQgb25vZmYpOwotK2lu dCBGSVBTX3NlbGZ0ZXN0X3JuZyh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF94OTMxKHZvaWQp OwotK2ludCBGSVBTX3NlbGZ0ZXN0X2htYWModm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfZHJi Zyh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9kcmJnX2FsbCh2b2lkKTsKLStpbnQgRklQU19z ZWxmdGVzdF9jbWFjKHZvaWQpOwotKwotK3ZvaWQgRklQU19nZXRfdGltZXZlYyh1bnNpZ25lZCBj aGFyICpidWYsIHVuc2lnbmVkIGxvbmcgKnBjdHIpOwotKwotKyNkZWZpbmUgRklQU19FUlJPUl9J R05PUkVEKGFsZykgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKLSsJCWFsZyAiIHBy ZXZpb3VzIEZJUFMgZm9yYmlkZGVuIGFsZ29yaXRobSBlcnJvciBpZ25vcmVkIik7Ci0rCi0raW50 IGZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChzdHJ1Y3QgZXZwX3BrZXlfc3QgKnBrZXksCi0rCQkJ Y29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBpbnQgdGJzbGVuLAotKwkJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmthdCwgdW5zaWduZWQgaW50IGthdGxlbiwKLSsJCQljb25zdCBzdHJ1Y3QgZW52X21k X3N0ICpkaWdlc3QsIHVuc2lnbmVkIGludCBtZF9mbGFncywKLSsJCQljb25zdCBjaGFyICpmYWls X3N0cik7Ci0rCi0raW50IGZpcHNfY2lwaGVyX3Rlc3Qoc3RydWN0IGV2cF9jaXBoZXJfY3R4X3N0 ICpjdHgsCi0rCQkJY29uc3Qgc3RydWN0IGV2cF9jaXBoZXJfc3QgKmNpcGhlciwKLSsJCQljb25z dCB1bnNpZ25lZCBjaGFyICprZXksCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCi0rCQkJ Y29uc3QgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIg KmNpcGhlcnRleHQsCi0rCQkJaW50IGxlbik7Ci0rCi0rdm9pZCBmaXBzX3NldF9zZWxmdGVzdF9m YWlsKHZvaWQpOwotKwotK2NvbnN0IHN0cnVjdCBlbnZfbWRfc3QgKkZJUFNfZ2V0X2RpZ2VzdGJ5 bmlkKGludCBuaWQpOwotKwotK2NvbnN0IHN0cnVjdCBldnBfY2lwaGVyX3N0ICpGSVBTX2dldF9j aXBoZXJieW5pZChpbnQgbmlkKTsKLSsKLSsKLSsvKiBCRUdJTiBFUlJPUiBDT0RFUyAqLwotKy8q IFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBzY3JpcHQgbWtl cnIucGwuIEFueSBjaGFuZ2VzCi0rICogbWFkZSBhZnRlciB0aGlzIHBvaW50IG1heSBiZSBvdmVy d3JpdHRlbiB3aGVuIHRoZSBzY3JpcHQgaXMgbmV4dCBydW4uCi0rICovCi0rdm9pZCBFUlJfbG9h ZF9GSVBTX3N0cmluZ3Modm9pZCk7Ci0rCi0rLyogRXJyb3IgY29kZXMgZm9yIHRoZSBGSVBTIGZ1 bmN0aW9ucy4gKi8KLSsKLSsvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KLSsjZGVmaW5lIEZJUFNfRl9E SF9CVUlMVElOX0dFTlBBUkFNUwkJCSAxMDAKLSsjZGVmaW5lIEZJUFNfRl9ESF9JTklUCQkJCQkg MTQ4Ci0rI2RlZmluZSBGSVBTX0ZfRFJCR19SRVNFRUQJCQkJIDE2MgotKyNkZWZpbmUgRklQU19G X0RTQV9CVUlMVElOX1BBUkFNR0VOCQkJIDEwMQotKyNkZWZpbmUgRklQU19GX0RTQV9CVUlMVElO X1BBUkFNR0VOMgkJCSAxMDcKLSsjZGVmaW5lIEZJUFNfRl9EU0FfRE9fU0lHTgkJCQkgMTAyCi0r I2RlZmluZSBGSVBTX0ZfRFNBX0RPX1ZFUklGWQkJCQkgMTAzCi0rI2RlZmluZSBGSVBTX0ZfRUNE SF9DT01QVVRFX0tFWQkJCQkgMTYzCi0rI2RlZmluZSBGSVBTX0ZfRUNEU0FfRE9fU0lHTgkJCQkg MTY0Ci0rI2RlZmluZSBGSVBTX0ZfRUNEU0FfRE9fVkVSSUZZCQkJCSAxNjUKLSsjZGVmaW5lIEZJ UFNfRl9FQ19LRVlfR0VORVJBVEVfS0VZCQkJIDE2NgotKyNkZWZpbmUgRklQU19GX0VWUF9DSVBI RVJJTklUX0VYCQkJIDEyNAotKyNkZWZpbmUgRklQU19GX0VWUF9ESUdFU1RJTklUX0VYCQkJIDEy NQotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfRFNBCQkJCSAxMDQKLSsjZGVmaW5lIEZJUFNf Rl9GSVBTX0NIRUNLX0RTQV9QUk5HCQkJIDE1MQotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tf RUMJCQkJIDE0MgotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfRUNfUFJORwkJCSAxNTIKLSsj ZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0lOQ09SRV9GSU5HRVJQUklOVAkJIDEwNQotKyNkZWZp bmUgRklQU19GX0ZJUFNfQ0hFQ0tfUlNBCQkJCSAxMDYKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0NI RUNLX1JTQV9QUk5HCQkJIDE1MAotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0lQSEVSCQkJCSAxNjAK LSsjZGVmaW5lIEZJUFNfRl9GSVBTX0NJUEhFUklOSVQJCQkJIDE0MwotKyNkZWZpbmUgRklQU19G X0ZJUFNfQ0lQSEVSX0NUWF9DVFJMCQkJIDE2MQotKyNkZWZpbmUgRklQU19GX0ZJUFNfRElHRVNU RklOQUwJCQkJIDE1OAotKyNkZWZpbmUgRklQU19GX0ZJUFNfRElHRVNUSU5JVAkJCQkgMTI4Ci0r I2RlZmluZSBGSVBTX0ZfRklQU19ESUdFU1RVUERBVEUJCQkgMTU5Ci0rI2RlZmluZSBGSVBTX0Zf RklQU19EUkJHX0JZVEVTCQkJCSAxMzEKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfQ0hFQ0sJ CQkJIDE0NgotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19DUFJOR19URVNUCQkJIDEzMgotKyNk ZWZpbmUgRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSwkJCSAxMzYKLSsjZGVmaW5lIEZJUFNf Rl9GSVBTX0RSQkdfR0VORVJBVEUJCQkgMTM0Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX0lO SVQJCQkJIDEzNQotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURQkJCSAxMzgK LSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfTkVXCQkJCSAxMzkKLSsjZGVmaW5lIEZJUFNfRl9G SVBTX0RSQkdfUkVTRUVECQkJCSAxNDAKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xF X0tBVAkJCSAxNDEKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RTQV9DSEVDSwkJLyogdW51c2VkICov CSAxMDcKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RTQV9TSUdOX0RJR0VTVAkJCSAxNTQKLSsjZGVm aW5lIEZJUFNfRl9GSVBTX0RTQV9WRVJJRllfRElHRVNUCQkJIDE1NQotKyNkZWZpbmUgRklQU19G X0ZJUFNfR0VUX0VOVFJPUFkJCQkJIDE0NwotKyNkZWZpbmUgRklQU19GX0ZJUFNfTU9ERV9TRVQJ CS8qIHVudXNlZCAqLwkgMTA4Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQJ CQkgMTA4Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVSRV9URVNUCQkJIDEwOQot KyNkZWZpbmUgRklQU19GX0ZJUFNfUkFORF9BREQJCQkJIDEzNwotKyNkZWZpbmUgRklQU19GX0ZJ UFNfUkFORF9CWVRFUwkJCQkgMTIyCi0rI2RlZmluZSBGSVBTX0ZfRklQU19SQU5EX1BTRVVET19C WVRFUwkJCSAxNjcKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfU0VFRAkJCQkgMTY4Ci0rI2Rl ZmluZSBGSVBTX0ZfRklQU19SQU5EX1NFVF9NRVRIT0QJCQkgMTI2Ci0rI2RlZmluZSBGSVBTX0Zf RklQU19SQU5EX1NUQVRVUwkJCQkgMTI3Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19SU0FfU0lHTl9E SUdFU1QJCQkgMTU2Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19SU0FfVkVSSUZZX0RJR0VTVAkJCSAx NTcKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFUwkJCSAxMTAKLSsjZGVmaW5lIEZJ UFNfRl9GSVBTX1NFTEZURVNUX0FFU19DQ00JCQkgMTQ1Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19T RUxGVEVTVF9BRVNfR0NNCQkJIDEyOQotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVT X1hUUwkJCSAxNDQKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0NNQUMJCQkgMTMwCi0r I2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9ERVMJCQkgMTExCi0rI2RlZmluZSBGSVBTX0Zf RklQU19TRUxGVEVTVF9EU0EJCQkgMTEyCi0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9F Q0RTQQkJCSAxMzMKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0hNQUMJCQkgMTEzCi0r I2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9STkcJLyogdW51c2VkICovCSAxMTQKLSsjZGVm aW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEJCQkgMTE1Ci0rI2RlZmluZSBGSVBTX0ZfRklQ U19TRUxGVEVTVF9YOTMxCQkJIDExNAotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VUX1BSTkdfS0VZ CQkJIDE1MwotKyNkZWZpbmUgRklQU19GX0hBU0hfRklOQUwJCQkJIDEyMwotKyNkZWZpbmUgRklQ U19GX1JTQV9CVUlMVElOX0tFWUdFTgkJCSAxMTYKLSsjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX0lO SVQJCQkJIDE0OQotKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBUCQkJIDEx NwotKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBUCQkJIDExOAotKyNkZWZp bmUgRklQU19GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQJCQkgMTE5Ci0rI2RlZmluZSBGSVBTX0Zf UlNBX0VBWV9QVUJMSUNfRU5DUllQVAkJCSAxMjAKLSsjZGVmaW5lIEZJUFNfRl9SU0FfWDkzMV9H RU5FUkFURV9LRVlfRVgJCQkgMTIxCi0rI2RlZmluZSBGSVBTX0ZfU1NMRUFZX1JBTkRfQllURVMJ LyogdW51c2VkICovCSAxMjIKLSsKLSsvKiBSZWFzb24gY29kZXMuICovCi0rI2RlZmluZSBGSVBT X1JfQURESVRJT05BTF9JTlBVVF9FUlJPUl9VTkRFVEVDVEVECSAxNTAKLSsjZGVmaW5lIEZJUFNf Ul9BRERJVElPTkFMX0lOUFVUX1RPT19MT05HCQkgMTI1Ci0rI2RlZmluZSBGSVBTX1JfQUxSRUFE WV9JTlNUQU5USUFURUQJCQkgMTM0Ci0rI2RlZmluZSBGSVBTX1JfQVVUSEVOVElDQVRJT05fRkFJ TFVSRQkJCSAxNTEKLSsjZGVmaW5lIEZJUFNfUl9DQU5OT1RfUkVBRF9FWEUJCS8qIHVudXNlZCAq LwkgMTAzCi0rI2RlZmluZSBGSVBTX1JfQ0FOTk9UX1JFQURfRVhFX0RJR0VTVAkvKiB1bnVzZWQg Ki8JIDEwNAotKyNkZWZpbmUgRklQU19SX0NPTlRSQURJQ1RJTkdfRVZJREVOQ0UJCQkgMTE0Ci0r I2RlZmluZSBGSVBTX1JfRFJCR19OT1RfSU5JVElBTElTRUQJCQkgMTUyCi0rI2RlZmluZSBGSVBT X1JfRFJCR19TVFVDSwkJCQkgMTAzCi0rI2RlZmluZSBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRF VEVDVEVECQkJIDEwNAotKyNkZWZpbmUgRklQU19SX0VOVFJPUFlfTk9UX1JFUVVFU1RFRF9GT1Jf UkVTRUVECQkgMTA1Ci0rI2RlZmluZSBGSVBTX1JfRU5UUk9QWV9TT1VSQ0VfU1RVQ0sJCQkgMTQy Ci0rI2RlZmluZSBGSVBTX1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcJCQkgMTE1Ci0rI2RlZmlu ZSBGSVBTX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHCQkJIDEyNwotKyNkZWZpbmUgRklQU19S X0VSUk9SX1JFVFJJRVZJTkdfQURESVRJT05BTF9JTlBVVAkgMTI0Ci0rI2RlZmluZSBGSVBTX1Jf RVJST1JfUkVUUklFVklOR19FTlRST1BZCQkJIDEyMgotKyNkZWZpbmUgRklQU19SX0VSUk9SX1JF VFJJRVZJTkdfTk9OQ0UJCQkgMTQwCi0rI2RlZmluZSBGSVBTX1JfRVhFX0RJR0VTVF9ET0VTX05P VF9NQVRDSCAgIC8qIHVudXNlZCAqLwkgMTA1Ci0rI2RlZmluZSBGSVBTX1JfRklOR0VSUFJJTlRf RE9FU19OT1RfTUFUQ0gJCSAxMTAKLSsjZGVmaW5lIEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05P VF9NQVRDSF9OT05QSUNfUkVMT0NBVEVEIDExMQotKyNkZWZpbmUgRklQU19SX0ZJTkdFUlBSSU5U X0RPRVNfTk9UX01BVENIX1NFR01FTlRfQUxJQVNJTkcgMTEyCi0rI2RlZmluZSBGSVBTX1JfRklQ U19NT0RFX0FMUkVBRFlfU0VUCQkJIDEwMgotKyNkZWZpbmUgRklQU19SX0ZJUFNfU0VMRlRFU1Rf RkFJTEVECQkJIDEwNgotKyNkZWZpbmUgRklQU19SX0ZVTkNUSU9OX0VSUk9SCQkJCSAxMTYKLSsj ZGVmaW5lIEZJUFNfUl9HRU5FUkFURV9FUlJPUgkJCQkgMTM3Ci0rI2RlZmluZSBGSVBTX1JfR0VO RVJBVEVfRVJST1JfVU5ERVRFQ1RFRAkJIDExOAotKyNkZWZpbmUgRklQU19SX0lOU1RBTlRJQVRF X0VSUk9SCQkJIDExOQotKyNkZWZpbmUgRklQU19SX0lOU1VGRklDSUVOVF9TRUNVUklUWV9TVFJF TkdUSAkJIDEyMAotKyNkZWZpbmUgRklQU19SX0lOVEVSTkFMX0VSUk9SCQkJCSAxMjEKLSsjZGVm aW5lIEZJUFNfUl9JTlZBTElEX0tFWV9MRU5HVEgJCQkgMTA5Ci0rI2RlZmluZSBGSVBTX1JfSU5W QUxJRF9QQVJBTUVURVJTCQkJIDE0NAotKyNkZWZpbmUgRklQU19SX0lOX0VSUk9SX1NUQVRFCQkJ CSAxMjMKLSsjZGVmaW5lIEZJUFNfUl9LRVlfVE9PX1NIT1JUCQkJCSAxMDgKLSsjZGVmaW5lIEZJ UFNfUl9OT05DRV9FUlJPUl9VTkRFVEVDVEVECQkJIDE0OQotKyNkZWZpbmUgRklQU19SX05PTl9G SVBTX01FVEhPRAkJCQkgMTAwCi0rI2RlZmluZSBGSVBTX1JfTk9QUl9URVNUMV9GQUlMVVJFCQkJ IDE0NQotKyNkZWZpbmUgRklQU19SX05PUFJfVEVTVDJfRkFJTFVSRQkJCSAxNDYKLSsjZGVmaW5l IEZJUFNfUl9OT1RfSU5TVEFOVElBVEVECQkJCSAxMjYKLSsjZGVmaW5lIEZJUFNfUl9QQUlSV0lT RV9URVNUX0ZBSUxFRAkJCSAxMDcKLSsjZGVmaW5lIEZJUFNfUl9QRVJTT05BTElTQVRJT05fRVJS T1JfVU5ERVRFQ1RFRAkJIDEyOAotKyNkZWZpbmUgRklQU19SX1BFUlNPTkFMSVNBVElPTl9TVFJJ TkdfVE9PX0xPTkcJCSAxMjkKLSsjZGVmaW5lIEZJUFNfUl9QUk5HX1NUUkVOR1RIX1RPT19MT1cJ CQkgMTQzCi0rI2RlZmluZSBGSVBTX1JfUFJfVEVTVDFfRkFJTFVSRQkJCQkgMTQ3Ci0rI2RlZmlu ZSBGSVBTX1JfUFJfVEVTVDJfRkFJTFVSRQkJCQkgMTQ4Ci0rI2RlZmluZSBGSVBTX1JfUkVRVUVT VF9MRU5HVEhfRVJST1JfVU5ERVRFQ1RFRAkJIDEzMAotKyNkZWZpbmUgRklQU19SX1JFUVVFU1Rf VE9PX0xBUkdFX0ZPUl9EUkJHCQkgMTMxCi0rI2RlZmluZSBGSVBTX1JfUkVTRUVEX0NPVU5URVJf RVJST1IJCQkgMTMyCi0rI2RlZmluZSBGSVBTX1JfUkVTRUVEX0VSUk9SCQkJCSAxMzMKLSsjZGVm aW5lIEZJUFNfUl9SU0FfREVDUllQVF9FUlJPUgkvKiB1bnVzZWQgKi8JIDExNQotKyNkZWZpbmUg RklQU19SX1JTQV9FTkNSWVBUX0VSUk9SCS8qIHVudXNlZCAqLwkgMTE2Ci0rI2RlZmluZSBGSVBT X1JfU0VMRlRFU1RfRkFJTEVECQkJCSAxMDEKLSsjZGVmaW5lIEZJUFNfUl9TRUxGVEVTVF9GQUlM VVJFCQkJCSAxMzUKLSsjZGVmaW5lIEZJUFNfUl9TVFJFTkdUSF9FUlJPUl9VTkRFVEVDVEVECQkg MTM2Ci0rI2RlZmluZSBGSVBTX1JfVEVTVF9GQUlMVVJFCQkJCSAxMTcKLSsjZGVmaW5lIEZJUFNf Ul9VTklOU1RBTlRJQVRFX0VSUk9SCQkJIDE0MQotKyNkZWZpbmUgRklQU19SX1VOSU5TVEFOVElB VEVfWkVST0lTRV9FUlJPUgkJIDEzOAotKyNkZWZpbmUgRklQU19SX1VOU1VQUE9SVEVEX0RSQkdf VFlQRQkJCSAxMzkKLSsjZGVmaW5lIEZJUFNfUl9VTlNVUFBPUlRFRF9QTEFURk9STQkJCSAxMTMK LSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rfQotKyNlbmRpZgotKyNlbmRpZgotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMuZmlwcyBvcGVu c3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYwotLS0tIG9wZW5zc2wt MS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5jLmZpcHMJMjAxNC0xMC0xNiAx MzoxOTozNS4wOTkzMDY0MjMgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9m aXBzX2htYWNfc2VsZnRlc3QuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5OTMwNjQyMyArMDIwMAot QEAgLTAsMCArMSwxMzcgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAw NSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2Fy ZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFu ZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBv ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsg KiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBs ZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICog NS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQg Ik9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVz IHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wg UHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29l dmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF Ci0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICog Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVk ZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xf RklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8b3Bl bnNzbC9obWFjLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK3R5cGVkZWYgc3RydWN0IHsK LSsJY29uc3QgRVZQX01EICooKmFsZykodm9pZCk7Ci0rCWNvbnN0IGNoYXIgKmtleSwgKml2Owot Kwl1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV07Ci0rfSBITUFDX0tBVDsKLSsK LStzdGF0aWMgY29uc3QgSE1BQ19LQVQgdmVjdG9yW10gPSB7Ci0rICAgIHsJRVZQX3NoYTEsCi0r CS8qIGZyb20gaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL2ZpcHMvZmlwczE5OC9m aXBzLTE5OGEucGRmICovCi0rCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCi0rCSJTYW1wbGUgIzIi LAotKwl7IDB4MDksMHgyMiwweGQzLDB4NDAsMHg1ZiwweGFhLDB4M2QsMHgxOSwKLSsJICAweDRm LDB4ODIsMHhhNCwweDU4LDB4MzAsMHg3MywweDdkLDB4NWMsCi0rCSAgMHhjNiwweGM3LDB4NWQs MHgyNCB9Ci0rICAgIH0sCi0rICAgIHsJRVZQX3NoYTIyNCwKLSsJLyoganVzdCBrZWVwIGV4dGVu ZGluZyB0aGUgYWJvdmUuLi4gKi8KLSsJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsJIlNhbXBs ZSAjMiIsCi0rCXsgMHhkZCwweGVmLDB4MGEsMHg0MCwweGNiLDB4N2QsMHg1MCwweGZiLAotKwkg IDB4NmUsMHhlNiwweGNlLDB4YTEsMHgyMCwweGJhLDB4MjYsMHhhYSwKLSsJICAweDA4LDB4ZjMs MHgwNywweDc1LDB4ODcsMHhiOCwweGFkLDB4MWIsCi0rCSAgMHg4YywweDhkLDB4MTIsMHhjNyB9 Ci0rICAgIH0sCi0rICAgIHsJRVZQX3NoYTI1NiwKLSsJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwK LSsJIlNhbXBsZSAjMiIsCi0rCXsgMHhiOCwweGYyLDB4MGQsMHhiNSwweDQxLDB4ZWEsMHg0Myww eDA5LAotKwkgIDB4Y2EsMHg0ZSwweGE5LDB4MzgsMHgwYywweGQwLDB4ZTgsMHgzNCwKLSsJICAw eGY3LDB4MWYsMHhiZSwweDkxLDB4NzQsMHhhMiwweDYxLDB4MzgsCi0rCSAgMHgwZCwweGMxLDB4 N2UsMHhhZSwweDZhLDB4MzQsMHg1MSwweGQ5IH0KLSsgICAgfSwKLSsgICAgewlFVlBfc2hhMzg0 LAotKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAotKwkiU2FtcGxlICMyIiwKLSsJeyAweDA4LDB4 YmMsMHhiMCwweGRhLDB4NDksMHgxZSwweDg3LDB4YWQsCi0rCSAgMHg5YSwweDFkLDB4NmEsMHhj ZSwweDIzLDB4YzUsMHgwYiwweGY2LAotKwkgIDB4YjcsMHgxOCwweDA2LDB4YTUsMHg3NywweGNk LDB4NDksMHgwNCwKLSsJICAweDg5LDB4ZjEsMHhlNiwweDIzLDB4NDQsMHg1MSwweDUxLDB4OWYs Ci0rCSAgMHg4NSwweDU2LDB4ODAsMHg3OSwweDBjLDB4YmQsMHg0ZCwweDUwLAotKwkgIDB4YTQs MHg1ZiwweDI5LDB4ZTMsMHg5MywweGYwLDB4ZTgsMHg3ZiB9Ci0rICAgIH0sCi0rICAgIHsJRVZQ X3NoYTUxMiwKLSsJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsJIlNhbXBsZSAjMiIsCi0rCXsg MHg4MCwweDlkLDB4NDQsMHgwNSwweDdjLDB4NWIsMHg5NSwweDQxLAotKwkgIDB4MDUsMHhiZCww eDA0LDB4MTMsMHgxNiwweGRiLDB4MGYsMHhhYywKLSsJICAweDQ0LDB4ZDUsMHhhNCwweGQ1LDB4 ZDAsMHg4OSwweDJiLDB4ZDAsCi0rCSAgMHg0ZSwweDg2LDB4NjQsMHgxMiwweGMwLDB4OTAsMHg3 NywweDY4LAotKwkgIDB4ZjEsMHg4NywweGI3LDB4N2MsMHg0ZiwweGFlLDB4MmMsMHgyZiwKLSsJ ICAweDIxLDB4YTUsMHhiNSwweDY1LDB4OWEsMHg0ZiwweDRiLDB4YTcsCi0rCSAgMHg0NywweDAy LDB4YTMsMHhkZSwweDliLDB4NTEsMHhmMSwweDQ1LAotKwkgIDB4YmQsMHg0ZiwweDI1LDB4Mjcs MHg0MiwweDk4LDB4OTksMHgwNSB9Ci0rICAgIH0sCi0rfTsKLSsKLStpbnQgRklQU19zZWxmdGVz dF9obWFjKCkKLSsgICAgewotKyAgICBpbnQgbjsKLSsgICAgdW5zaWduZWQgaW50ICAgIG91dGxl bjsKLSsgICAgdW5zaWduZWQgY2hhciAgIG91dFtFVlBfTUFYX01EX1NJWkVdOwotKyAgICBjb25z dCBFVlBfTUQgICAqbWQ7Ci0rICAgIGNvbnN0IEhNQUNfS0FUICp0OwotKwotKyAgICBmb3Iobj0w LHQ9dmVjdG9yOyBuPHNpemVvZih2ZWN0b3IpL3NpemVvZih2ZWN0b3JbMF0pOyBuKyssdCsrKQot Kwl7Ci0rCW1kID0gKCp0LT5hbGcpKCk7Ci0rCUhNQUMobWQsdC0+a2V5LHN0cmxlbih0LT5rZXkp LAotKwkJKGNvbnN0IHVuc2lnbmVkIGNoYXIgKil0LT5pdixzdHJsZW4odC0+aXYpLAotKwkJb3V0 LCZvdXRsZW4pOwotKwotKwlpZihtZW1jbXAob3V0LHQtPmthdmFsLG91dGxlbikpCi0rCSAgICB7 Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0hNQUMsRklQU19SX1NFTEZURVNU X0ZBSUxFRCk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsJfQotKyAgICByZXR1cm4gMTsK LSsgICAgfQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlw c19sb2NsLmguZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX2xvY2wuaAotLS0t IG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfbG9jbC5oLmZpcHMJMjAxNC0xMC0xNiAx MzoxOTozNS4xMDAzMDY0NDYgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9m aXBzX2xvY2wuaAkyMDE0LTEwLTE2IDEzOjE5OjM1LjA5OTMwNjQyMyArMDIwMAotQEAgLTAsMCAr MSw3MSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0r ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAg IGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK LSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgot KyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQot KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rZXh0ZXJuICJDIiB7Ci0rI2VuZGlmCi0rCi0r I2RlZmluZSBGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFCTMyCi0rI2RlZmluZSBmaXBzX2xvYWRf a2V5X2NvbXBvbmVudChrZXksIGNvbXAsIHByZSkgXAotKwlrZXktPmNvbXAgPSBCTl9iaW4yYm4o cHJlIyNfIyNjb21wLCBzaXplb2YocHJlIyNfIyNjb21wKSwga2V5LT5jb21wKTsgXAotKwlpZiAo IWtleS0+Y29tcCkgXAotKwkJZ290byBlcnIKLSsKLSsjZGVmaW5lIGZpcHNfcG9zdF9zdGFydGVk KGlkLCBzdWJpZCwgZXgpIDEKLSsjZGVmaW5lIGZpcHNfcG9zdF9zdWNjZXNzKGlkLCBzdWJpZCwg ZXgpIDEKLSsjZGVmaW5lIGZpcHNfcG9zdF9mYWlsZWQoaWQsIHN1YmlkLCBleCkgMQotKyNkZWZp bmUgZmlwc19wb3N0X2NvcnJ1cHQoaWQsIHN1YmlkLCBleCkgMQotKyNkZWZpbmUgZmlwc19wb3N0 X3N0YXR1cygpIDEKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rfQotKyNlbmRpZgotKyNlbmRp ZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19tZC5jLmZpcHMgb3Bl bnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19tZC5jCi0tLS0gb3BlbnNzbC0xLjAuMWovY3J5 cHRvL2ZpcHMvZmlwc19tZC5jLmZpcHMJMjAxNC0xMC0xNiAxMzoxOTozNS4xMDAzMDY0NDYgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX21kLmMJMjAxNC0xMC0xNiAx MzoxOTozNS4xMDAzMDY0NDYgKzAyMDAKLUBAIC0wLDAgKzEsMTQ1IEBACi0rLyogZmlwcy9ldnAv Zmlwc19tZC5jICovCi0rLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5 QGNyeXB0c29mdC5jb20pCi0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFRoaXMg cGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotKyAqIGJ5IEVyaWMgWW91 bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KLSsgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0 ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0rICogCi0rICogVGhpcyBs aWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBs b25nIGFzCi0rICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhl IGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhp cyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSsgKiBsaGFzaCwgREVTLCBldGMu LCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KLSsg KiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUg Y29weXJpZ2h0IHRlcm1zCi0rICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29u ICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICogCi0rICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZ b3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSsgKiB0aGUgY29k ZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0rICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4g YSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgotKyAqIGFz IHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0rICogVGhpcyBj YW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVw IG9yCi0rICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdp dGggdGhlIHBhY2thZ2UuCi0rICogCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICog YXJlIG1ldDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbiB0aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRl cmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotKyAqICAg IG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQotKyAq ICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0rICogICAgVGhlIHdvcmQgJ2Ny eXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJy YXJ5Ci0rICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSku Ci0rICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBk ZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0rICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBs aWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAo dGpoQGNyeXB0c29mdC5jb20pIgotKyAqIAotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0rICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UKLSsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB VVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0r ICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMKLSsgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD VAotKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSsgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0rICogU1VDSCBEQU1B R0UuCi0rICogCi0rICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55 IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSsgKiBkZXJpdmF0aXZlIG9mIHRoaXMg Y29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUK LSsgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0r ICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSsgKi8KLSsvKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIFRoZSBPcGVuU1NMIFByb2plY3QuICBB bGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0r ICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4K LSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0 LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qg bm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVu c3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5 ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0r ICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVk aXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxv d2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsg KgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBg YEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVD VCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK LSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqCi0rICogVGhpcyBwcm9kdWN0IGluY2x1ZGVz IGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCi0rICogKGVheUBj cnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5 IFRpbQotKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqCi0rICovCi0rCi0rLyog TWluaW1hbCBzdGFuZGFsb25lIEZJUFMgdmVyc2lvbnMgb2YgRGlnZXN0IG9wZXJhdGlvbnMgKi8K LSsKLSsjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNp bmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKwotK2NvbnN0IEVWUF9NRCAqRklQU19nZXRfZGlnZXN0YnluaWQo aW50IG5pZCkKLSsJewotKwlzd2l0Y2ggKG5pZCkKLSsJCXsKLSsJCWNhc2UgTklEX3NoYTE6Ci0r CQlyZXR1cm4gRVZQX3NoYTEoKTsKLSsKLSsJCWNhc2UgTklEX3NoYTIyNDoKLSsJCXJldHVybiBF VlBfc2hhMjI0KCk7Ci0rCi0rCQljYXNlIE5JRF9zaGEyNTY6Ci0rCQlyZXR1cm4gRVZQX3NoYTI1 NigpOwotKwotKwkJY2FzZSBOSURfc2hhMzg0OgotKwkJcmV0dXJuIEVWUF9zaGEzODQoKTsKLSsK LSsJCWNhc2UgTklEX3NoYTUxMjoKLSsJCXJldHVybiBFVlBfc2hhNTEyKCk7Ci0rCi0rCQlkZWZh dWx0OgotKwkJcmV0dXJuIE5VTEw7Ci0rCQl9Ci0rCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFq L2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMv Zmlwc19wb3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYy5m aXBzCTIwMTQtMTAtMTYgMTM6MTk6MzUuMTAwMzA2NDQ2ICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MWovY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMJMjAxNC0xMC0xNiAxMzoxOTozNS4xMDAzMDY0NDYg KzAyMDAKLUBAIC0wLDAgKzEsMjA1IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQg KGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoK LSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K LSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlz aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAg c29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6 Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29s a2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo b3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNz aW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsg KgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUg Y2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVp ciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBP cGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0g d2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQ UkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV VAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S IFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE Ci0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0r I2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5k Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVk ZSA8bGltaXRzLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKy8qIFBvd2VyIG9uIHNl bGYgdGVzdCAoUE9TVCkgc3VwcG9ydCBmdW5jdGlvbnMgKi8KLSsKLSsjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKy8qIFJ1biBhbGwgc2VsZnRl c3RzICovCi0raW50IEZJUFNfc2VsZnRlc3Qodm9pZCkKLSsJewotKwlpbnQgcnYgPSAxOwotKwlp ZiAoIUZJUFNfc2VsZnRlc3RfZHJiZygpKQotKwkJcnYgPSAwOwotKwlpZiAoIUZJUFNfc2VsZnRl c3RfeDkzMSgpKQotKwkJcnYgPSAwOwotKyAgICAJaWYgKCFGSVBTX3NlbGZ0ZXN0X3NoYTEoKSkK LSsJCXJ2ID0gMDsKLSsgICAgCWlmICghRklQU19zZWxmdGVzdF9zaGEyKCkpCi0rCQlydiA9IDA7 Ci0rCWlmICghRklQU19zZWxmdGVzdF9obWFjKCkpCi0rCQlydiA9IDA7Ci0rCWlmICghRklQU19z ZWxmdGVzdF9jbWFjKCkpCi0rCQlydiA9IDA7Ci0rCWlmICghRklQU19zZWxmdGVzdF9hZXMoKSkK LSsJCXJ2ID0gMDsKLSsJaWYgKCFGSVBTX3NlbGZ0ZXN0X2Flc19jY20oKSkKLSsJCXJ2ID0gMDsK LSsJaWYgKCFGSVBTX3NlbGZ0ZXN0X2Flc19nY20oKSkKLSsJCXJ2ID0gMDsKLSsJaWYgKCFGSVBT X3NlbGZ0ZXN0X2Flc194dHMoKSkKLSsJCXJ2ID0gMDsKLSsJaWYgKCFGSVBTX3NlbGZ0ZXN0X2Rl cygpKQotKwkJcnYgPSAwOwotKwlpZiAoIUZJUFNfc2VsZnRlc3RfcnNhKCkpCi0rCQlydiA9IDA7 Ci0rCWlmICghRklQU19zZWxmdGVzdF9kc2EoKSkKLSsJCXJ2ID0gMDsKLSsJcmV0dXJuIHJ2Owot Kwl9Ci0rCi0rLyogR2VuZXJhbGl6ZWQgcHVibGljIGtleSB0ZXN0IHJvdXRpbmUuIFNpZ25zIGFu ZCB2ZXJpZmllcyB0aGUgZGF0YQotKyAqIHN1cHBsaWVkIGluIHRicyB1c2luZyBtZXNhZ2UgZGln ZXN0IG1kIGFuZCBzZXR0aW5nIG9wdGlvbiBkaWdlc3QKLSsgKiBmbGFncyBtZF9mbGFncy4gSWYg dGhlICdrYXQnIHBhcmFtZXRlciBpcyBub3QgTlVMTCBpdCB3aWxsCi0rICogYWRkaXRpb25hbGx5 IGNoZWNrIHRoZSBzaWduYXR1cmUgbWF0Y2hlcyBpdDogYSBrbm93biBhbnN3ZXIgdGVzdAotKyAq IFRoZSBzdHJpbmcgImZhaWxfc3RyIiBpcyB1c2VkIGZvciBpZGVudGlmaWNhdGlvbiBwdXJwb3Nl cyBpbiBjYXNlCi0rICogb2YgZmFpbHVyZS4gSWYgInBrZXkiIGlzIE5VTEwganVzdCBwZXJmb3Jt IGEgbWVzc2FnZSBkaWdlc3QgY2hlY2suCi0rICovCi0rCi0raW50IGZpcHNfcGtleV9zaWduYXR1 cmVfdGVzdChFVlBfUEtFWSAqcGtleSwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIGlu dCB0YnNsZW4sCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0LCB1bnNpZ25lZCBpbnQga2F0 bGVuLAotKwkJCWNvbnN0IEVWUF9NRCAqZGlnZXN0LCB1bnNpZ25lZCBpbnQgbWRfZmxhZ3MsCi0r CQkJY29uc3QgY2hhciAqZmFpbF9zdHIpCi0rCXsJCi0rCWludCByZXQgPSAwOwotKwl1bnNpZ25l ZCBjaGFyIHNpZ3RtcFsyNTZdLCAqc2lnID0gc2lndG1wOwotKwl1bnNpZ25lZCBpbnQgc2lnbGVu OwotKwlFVlBfTURfQ1RYIG1jdHg7Ci0rCUVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rCi0rCWlm IChkaWdlc3QgPT0gTlVMTCkKLSsJCWRpZ2VzdCA9IEVWUF9zaGEyNTYoKTsKLSsKLSsJaWYgKChw a2V5LT50eXBlID09IEVWUF9QS0VZX1JTQSkKLSsJCSYmIChSU0Ffc2l6ZShwa2V5LT5wa2V5LnJz YSkgPiBzaXplb2Yoc2lndG1wKSkpCi0rCQl7Ci0rCQlzaWcgPSBPUEVOU1NMX21hbGxvYyhSU0Ff c2l6ZShwa2V5LT5wa2V5LnJzYSkpOwotKwkJaWYgKCFzaWcpCi0rCQkJewotKwkJCUZJUFNlcnIo RklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVCxFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0r CQkJcmV0dXJuIDA7Ci0rCQkJfQotKwkJfQotKwotKwlpZiAodGJzbGVuID09IC0xKQotKwkJdGJz bGVuID0gc3RybGVuKChjaGFyICopdGJzKTsKLSsKLSsJaWYgKG1kX2ZsYWdzKQotKwkJRVZQX01E X0NUWF9zZXRfZmxhZ3MoJm1jdHgsIG1kX2ZsYWdzKTsKLSsKLSsJaWYgKCFFVlBfU2lnbkluaXRf ZXgoJm1jdHgsIGRpZ2VzdCwgTlVMTCkpCi0rCQlnb3RvIGVycm9yOwotKwlpZiAoIUVWUF9TaWdu VXBkYXRlKCZtY3R4LCB0YnMsIHRic2xlbikpCi0rCQlnb3RvIGVycm9yOwotKwlpZiAoIUVWUF9T aWduRmluYWwoJm1jdHgsIHNpZywgJnNpZ2xlbiwgcGtleSkpCi0rCQlnb3RvIGVycm9yOwotKwot KwlpZiAoa2F0ICYmICgoc2lnbGVuICE9IGthdGxlbikgfHwgbWVtY21wKGthdCwgc2lnLCBrYXRs ZW4pKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCWlmICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgs IGRpZ2VzdCwgTlVMTCkpCi0rCQlnb3RvIGVycm9yOwotKwlpZiAoIUVWUF9WZXJpZnlVcGRhdGUo Jm1jdHgsIHRicywgdGJzbGVuKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCXJldCA9IEVWUF9WZXJpZnlG aW5hbCgmbWN0eCwgc2lnLCBzaWdsZW4sIHBrZXkpOwotKwotKwllcnJvcjoKLSsJaWYgKHNpZyAh PSBzaWd0bXApCi0rCQlPUEVOU1NMX2ZyZWUoc2lnKTsKLSsJRVZQX01EX0NUWF9jbGVhbnVwKCZt Y3R4KTsKLSsJaWYgKHJldCAhPSAxKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19QS0VZ X1NJR05BVFVSRV9URVNULEZJUFNfUl9URVNUX0ZBSUxVUkUpOwotKwkJaWYgKGZhaWxfc3RyKQot KwkJCUVSUl9hZGRfZXJyb3JfZGF0YSgyLCAiVHlwZT0iLCBmYWlsX3N0cik7Ci0rCQlyZXR1cm4g MDsKLSsJCX0KLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsvKiBHZW5lcmFsaXplZCBzeW1tZXRyaWMg Y2lwaGVyIHRlc3Qgcm91dGluZS4gRW5jcnlwdCBkYXRhLCB2ZXJpZnkgcmVzdWx0Ci0rICogYWdh aW5zdCBrbm93biBhbnN3ZXIsIGRlY3J5cHQgYW5kIGNvbXBhcmUgd2l0aCBvcmlnaW5hbCBwbGFp bnRleHQuCi0rICovCi0rCi0raW50IGZpcHNfY2lwaGVyX3Rlc3QoRVZQX0NJUEhFUl9DVFggKmN0 eCwgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtl eSwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICppdiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFy ICpwbGFpbnRleHQsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwKLSsJCQlp bnQgbGVuKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgcGx0bXBbRklQU19NQVhfQ0lQSEVSX1RFU1Rf U0laRV07Ci0rCXVuc2lnbmVkIGNoYXIgY2l0bXBbRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRV07 Ci0rCi0rCU9QRU5TU0xfYXNzZXJ0KGxlbiA8PSBGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFKTsK LSsJbWVtc2V0KHBsdG1wLCAwLCBGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFKTsKLSsJbWVtc2V0 KGNpdG1wLCAwLCBGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFKTsKLSsKLSsJaWYgKEVWUF9DaXBo ZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBrZXksIGl2LCAxKSA8PSAwKQotKwkJcmV0dXJu IDA7Ci0rCWlmIChFVlBfQ2lwaGVyKGN0eCwgY2l0bXAsIHBsYWludGV4dCwgbGVuKSA8PSAwKQot KwkJcmV0dXJuIDA7Ci0rCWlmIChtZW1jbXAoY2l0bXAsIGNpcGhlcnRleHQsIGxlbikpCi0rCQly ZXR1cm4gMDsKLSsJaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBrZXks IGl2LCAwKSA8PSAwKQotKwkJcmV0dXJuIDA7Ci0rCWlmIChFVlBfQ2lwaGVyKGN0eCwgcGx0bXAs IGNpdG1wLCBsZW4pIDw9IDApCi0rCQlyZXR1cm4gMDsKLSsJaWYgKG1lbWNtcChwbHRtcCwgcGxh aW50ZXh0LCBsZW4pKQotKwkJcmV0dXJuIDA7Ci0rCXJldHVybiAxOwotKwl9Ci0rI2VuZGlmCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYy5maXBzIG9wZW5z c2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jCi0tLS0gb3BlbnNzbC0xLjAuMWovY3J5 cHRvL2ZpcHMvZmlwc19yYW5kLmMuZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM1LjEwMDMwNjQ0NiAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jCTIwMTQtMTAt MTYgMTM6MTk6MzUuMTAwMzA2NDQ2ICswMjAwCi1AQCAtMCwwICsxLDQ1NyBAQAotKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwg cmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICog YXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsg KgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBv ciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBU aGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90 IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3Ns LWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJP cGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICog ICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0 cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2lu ZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgot KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFT IElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBP UgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsg KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KLSsgKgotKyAqLwotKwotKy8qCi0rICogVGhpcyBpcyBhIEZJUFMgYXBwcm92ZWQgQUVT IFBSTkcgYmFzZWQgb24gQU5TSSBYOS4zMSBBLjIuNC4KLSsgKi8KLSsjaW5jbHVkZSA8b3BlbnNz bC9jcnlwdG8uaD4KLSsjaW5jbHVkZSAiZV9vcy5oIgotKwotKy8qIElmIHdlIGRvbid0IGRlZmlu ZSBfWE9QRU5fU09VUkNFX0VYVEVOREVELCBzdHJ1Y3QgdGltZXZhbCB3b24ndAotKyAgIGJlIGRl ZmluZWQgYW5kIGdldHRpbWVvZmRheSgpIHdvbid0IGJlIGRlY2xhcmVkIHdpdGggc3RyaWN0IGNv bXBpbGVycwotKyAgIGxpa2UgREVDIEMgaW4gQU5TSSBDIG1vZGUuICAqLwotKyNpZm5kZWYgX1hP UEVOX1NPVVJDRV9FWFRFTkRFRAotKyNkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCAxCi0r I2VuZGlmCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2Flcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHNfcmFuZC5oPgotKyNpZiAhKGRlZmluZWQoT1BFTlNTTF9TWVNfV0lOMzIpIHx8IGRlZmluZWQo T1BFTlNTTF9TWVNfVlhXT1JLUykpCi0rIyBpbmNsdWRlIDxzeXMvdGltZS5oPgotKyNlbmRpZgot KyNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpCi0rIyBpbmNsdWRlIDx0aW1lLmg+Ci0r I2VuZGlmCi0rI2luY2x1ZGUgPGFzc2VydC5oPgotKyNpZm5kZWYgT1BFTlNTTF9TWVNfV0lOMzIK LSsjIGlmZGVmIE9QRU5TU0xfVU5JU1RECi0rIyAgaW5jbHVkZSBPUEVOU1NMX1VOSVNURAotKyMg ZWxzZQotKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgotKyMgZW5kaWYKLSsjZW5kaWYKLSsjaW5jbHVk ZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlICJmaXBz X2xvY2wuaCIKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rdm9pZCAqT1BFTlNTTF9zdGRl cnIodm9pZCk7Ci0rCi0rI2RlZmluZSBBRVNfQkxPQ0tfTEVOR1RICTE2Ci0rCi0rCi0rLyogQUVT IEZJUFMgUFJORyBpbXBsZW1lbnRhdGlvbiAqLwotKwotK3R5cGVkZWYgc3RydWN0IAotKwl7Ci0r CWludCBzZWVkZWQ7Ci0rCWludCBrZXllZDsKLSsJaW50IHRlc3RfbW9kZTsKLSsJaW50IHNlY29u ZDsKLSsJaW50IGVycm9yOwotKwl1bnNpZ25lZCBsb25nIGNvdW50ZXI7Ci0rCUFFU19LRVkga3M7 Ci0rCWludCB2cG9zOwotKwkvKiBUZW1wb3Jhcnkgc3RvcmFnZSBmb3Iga2V5IGlmIGl0IGVxdWFs cyBzZWVkIGxlbmd0aCAqLwotKwl1bnNpZ25lZCBjaGFyIHRtcF9rZXlbQUVTX0JMT0NLX0xFTkdU SF07Ci0rCXVuc2lnbmVkIGNoYXIgVltBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJdW5zaWduZWQgY2hh ciBEVFtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJdW5zaWduZWQgY2hhciBsYXN0W0FFU19CTE9DS19M RU5HVEhdOwotKwl9IEZJUFNfUFJOR19DVFg7Ci0rCi0rc3RhdGljIEZJUFNfUFJOR19DVFggc2N0 eDsKLSsKLStzdGF0aWMgaW50IGZpcHNfcHJuZ19mYWlsID0gMDsKLSsKLSt2b2lkIEZJUFNfeDkz MV9zdGljayhpbnQgb25vZmYpCi0rCXsKLSsJZmlwc19wcm5nX2ZhaWwgPSBvbm9mZjsKLSsJfQot KwotK3ZvaWQgRklQU19ybmdfc3RpY2sodm9pZCkKLSsJewotKwlGSVBTX3g5MzFfc3RpY2soMSk7 Ci0rCX0KLSsKLStzdGF0aWMgdm9pZCBmaXBzX3JhbmRfcHJuZ19yZXNldChGSVBTX1BSTkdfQ1RY ICpjdHgpCi0rCXsKLSsJY3R4LT5zZWVkZWQgPSAwOwotKwljdHgtPmtleWVkID0gMDsKLSsJY3R4 LT50ZXN0X21vZGUgPSAwOwotKwljdHgtPmNvdW50ZXIgPSAwOwotKwljdHgtPnNlY29uZCA9IDA7 Ci0rCWN0eC0+ZXJyb3IgPSAwOwotKwljdHgtPnZwb3MgPSAwOwotKwlPUEVOU1NMX2NsZWFuc2Uo Y3R4LT5WLCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsJT1BFTlNTTF9jbGVhbnNlKCZjdHgtPmtzLCBz aXplb2YoQUVTX0tFWSkpOwotKwl9Ci0rCQotKwotK3N0YXRpYyBpbnQgZmlwc19zZXRfcHJuZ19r ZXkoRklQU19QUk5HX0NUWCAqY3R4LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5z aWduZWQgaW50IGtleWxlbikKLSsJewotKwlpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJ CXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VUX1BSTkdfS0VZLCBGSVBTX1JfU0VMRlRFU1Rf RkFJTEVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlpZiAoa2V5bGVuICE9IDE2ICYmIGtleWxl biAhPSAyNCAmJiBrZXlsZW4gIT0gMzIpCi0rCQl7Ci0rCQkvKiBlcnJvcjogaW52YWxpZCBrZXkg c2l6ZSAqLwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCUFFU19zZXRfZW5jcnlwdF9rZXkoa2V5LCBr ZXlsZW4gPDwgMywgJmN0eC0+a3MpOwotKwlpZiAoa2V5bGVuID09IDE2KQotKwkJewotKwkJbWVt Y3B5KGN0eC0+dG1wX2tleSwga2V5LCAxNik7Ci0rCQljdHgtPmtleWVkID0gMjsKLSsJCX0KLSsJ ZWxzZQotKwkJY3R4LT5rZXllZCA9IDE7Ci0rCWN0eC0+c2VlZGVkID0gMDsKLSsJY3R4LT5zZWNv bmQgPSAwOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZmlwc19zZXRfcHJuZ19z ZWVkKEZJUFNfUFJOR19DVFggKmN0eCwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkLCB1 bnNpZ25lZCBpbnQgc2VlZGxlbikKLSsJewotKwl1bnNpZ25lZCBpbnQgaTsKLSsJaWYgKCFjdHgt PmtleWVkKQotKwkJcmV0dXJuIDA7Ci0rCS8qIEluIHRlc3QgbW9kZSBzZWVkIGlzIGp1c3Qgc3Vw cGxpZWQgZGF0YSAqLwotKwlpZiAoY3R4LT50ZXN0X21vZGUpCi0rCQl7Ci0rCQlpZiAoc2VlZGxl biAhPSBBRVNfQkxPQ0tfTEVOR1RIKQotKwkJCXJldHVybiAwOwotKwkJbWVtY3B5KGN0eC0+Viwg c2VlZCwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCQljdHgtPnNlZWRlZCA9IDE7Ci0rCQlyZXR1cm4g MTsKLSsJCX0KLSsJLyogT3V0c2lkZSB0ZXN0IG1vZGUgWE9SIHN1cHBsaWVkIGRhdGEgd2l0aCBl eGlzdGluZyBzZWVkICovCi0rCWZvciAoaSA9IDA7IGkgPCBzZWVkbGVuOyBpKyspCi0rCQl7Ci0r CQljdHgtPlZbY3R4LT52cG9zKytdIF49IHNlZWRbaV07Ci0rCQlpZiAoY3R4LT52cG9zID09IEFF U19CTE9DS19MRU5HVEgpCi0rCQkJewotKwkJCWN0eC0+dnBvcyA9IDA7Ci0rCQkJLyogU3BlY2lh bCBjYXNlIGlmIGZpcnN0IHNlZWQgYW5kIGtleSBsZW5ndGggZXF1YWxzCi0rIAkJCSAqIGJsb2Nr IHNpemUgY2hlY2sga2V5IGFuZCBzZWVkIGRvIG5vdCBtYXRjaC4KLSsgCQkJICovIAotKwkJCWlm IChjdHgtPmtleWVkID09IDIpCi0rCQkJCXsKLSsJCQkJaWYgKCFtZW1jbXAoY3R4LT50bXBfa2V5 LCBjdHgtPlYsIDE2KSkKLSsJCQkJCXsKLSsJCQkJCVJBTkRlcnIoUkFORF9GX0ZJUFNfU0VUX1BS TkdfU0VFRCwKLSsJCQkJCQlSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENIX0tFWSk7Ci0r CQkJCQlyZXR1cm4gMDsKLSsJCQkJCX0KLSsJCQkJT1BFTlNTTF9jbGVhbnNlKGN0eC0+dG1wX2tl eSwgMTYpOwotKwkJCQljdHgtPmtleWVkID0gMTsKLSsJCQkJfQotKwkJCWN0eC0+c2VlZGVkID0g MTsKLSsJCQl9Ci0rCQl9Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBmaXBzX3Nl dF90ZXN0X21vZGUoRklQU19QUk5HX0NUWCAqY3R4KQotKwl7Ci0rCWlmIChjdHgtPmtleWVkKQot KwkJewotKwkJUkFORGVycihSQU5EX0ZfRklQU19TRVRfVEVTVF9NT0RFLFJBTkRfUl9QUk5HX0tF WUVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwljdHgtPnRlc3RfbW9kZSA9IDE7Ci0rCXJldHVy biAxOwotKwl9Ci0rCi0raW50IEZJUFNfeDkzMV90ZXN0X21vZGUodm9pZCkKLSsJewotKwlyZXR1 cm4gZmlwc19zZXRfdGVzdF9tb2RlKCZzY3R4KTsKLSsJfQotKwotK2ludCBGSVBTX3JhbmRfdGVz dF9tb2RlKHZvaWQpCi0rCXsKLSsJcmV0dXJuIGZpcHNfc2V0X3Rlc3RfbW9kZSgmc2N0eCk7Ci0r CX0KLSsKLSsKLStpbnQgRklQU194OTMxX3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCkKLSsJewot KwlpZiAoIXNjdHgudGVzdF9tb2RlKQotKwkJewotKwkJUkFORGVycihSQU5EX0ZfRklQU19YOTMx X1NFVF9EVCxSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERSk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJ bWVtY3B5KHNjdHguRFQsIGR0LCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsJcmV0dXJuIDE7Ci0rCX0K LSsKLStpbnQgRklQU19yYW5kX3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCkKLSsJewotKwlpZiAo IXNjdHgudGVzdF9tb2RlKQotKwkJewotKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5EX1NFVF9E VCxSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERSk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJbWVtY3B5 KHNjdHguRFQsIGR0LCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSt2 b2lkIEZJUFNfZ2V0X3RpbWV2ZWModW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nICpw Y3RyKQotKwl7Ci0rI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rCUZJTEVUSU1FIGZ0OwotKyNl bGlmIGRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykKLSsgICAgICAgIHN0cnVjdCB0aW1lc3Bl YyB0czsKLSsjZWxzZQotKwlzdHJ1Y3QgdGltZXZhbCB0djsKLSsjZW5kaWYKLSsKLSsjaWZuZGVm IEdFVFBJRF9JU19NRUFOSU5HTEVTUwotKwl1bnNpZ25lZCBsb25nIHBpZDsKLSsjZW5kaWYKLSsK LSsjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsJR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoJmZ0 KTsKLSsJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpIChmdC5kd0hpZ2hEYXRlVGltZSAmIDB4ZmYp OwotKwlidWZbMV0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0hpZ2hEYXRlVGltZSA+PiA4KSAm IDB4ZmYpOwotKwlidWZbMl0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0hpZ2hEYXRlVGltZSA+ PiAxNikgJiAweGZmKTsKLSsJYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0 ZVRpbWUgPj4gMjQpICYgMHhmZik7Ci0rCWJ1Zls0XSA9ICh1bnNpZ25lZCBjaGFyKSAoZnQuZHdM b3dEYXRlVGltZSAmIDB4ZmYpOwotKwlidWZbNV0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0xv d0RhdGVUaW1lID4+IDgpICYgMHhmZik7Ci0rCWJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0 LmR3TG93RGF0ZVRpbWUgPj4gMTYpICYgMHhmZik7Ci0rCWJ1Zls3XSA9ICh1bnNpZ25lZCBjaGFy KSAoKGZ0LmR3TG93RGF0ZVRpbWUgPj4gMjQpICYgMHhmZik7Ci0rI2VsaWYgZGVmaW5lZChPUEVO U1NMX1NZU19WWFdPUktTKQotKwljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHMpOwot KwlidWZbMF0gPSAodW5zaWduZWQgY2hhcikgKHRzLnR2X3NlYyAmIDB4ZmYpOwotKwlidWZbMV0g PSAodW5zaWduZWQgY2hhcikgKCh0cy50dl9zZWMgPj4gOCkgJiAweGZmKTsKLSsJYnVmWzJdID0g KHVuc2lnbmVkIGNoYXIpICgodHMudHZfc2VjID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbM10gPSAo dW5zaWduZWQgY2hhcikgKCh0cy50dl9zZWMgPj4gMjQpICYgMHhmZik7Ci0rCWJ1Zls0XSA9ICh1 bnNpZ25lZCBjaGFyKSAodHMudHZfbnNlYyAmIDB4ZmYpOwotKwlidWZbNV0gPSAodW5zaWduZWQg Y2hhcikgKCh0cy50dl9uc2VjID4+IDgpICYgMHhmZik7Ci0rCWJ1Zls2XSA9ICh1bnNpZ25lZCBj aGFyKSAoKHRzLnR2X25zZWMgPj4gMTYpICYgMHhmZik7Ci0rCWJ1Zls3XSA9ICh1bnNpZ25lZCBj aGFyKSAoKHRzLnR2X25zZWMgPj4gMjQpICYgMHhmZik7Ci0rI2Vsc2UKLSsJZ2V0dGltZW9mZGF5 KCZ0dixOVUxMKTsKLSsJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpICh0di50dl9zZWMgJiAweGZm KTsKLSsJYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfc2VjID4+IDgpICYgMHhmZik7 Ci0rCWJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiAxNikgJiAweGZmKTsK LSsJYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfc2VjID4+IDI0KSAmIDB4ZmYpOwot KwlidWZbNF0gPSAodW5zaWduZWQgY2hhcikgKHR2LnR2X3VzZWMgJiAweGZmKTsKLSsJYnVmWzVd ID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+PiA4KSAmIDB4ZmYpOwotKwlidWZbNl0g PSAodW5zaWduZWQgY2hhcikgKCh0di50dl91c2VjID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbN10g PSAodW5zaWduZWQgY2hhcikgKCh0di50dl91c2VjID4+IDI0KSAmIDB4ZmYpOwotKyNlbmRpZgot KwlidWZbOF0gPSAodW5zaWduZWQgY2hhcikgKCpwY3RyICYgMHhmZik7Ci0rCWJ1Zls5XSA9ICh1 bnNpZ25lZCBjaGFyKSAoKCpwY3RyID4+IDgpICYgMHhmZik7Ci0rCWJ1ZlsxMF0gPSAodW5zaWdu ZWQgY2hhcikgKCgqcGN0ciA+PiAxNikgJiAweGZmKTsKLSsJYnVmWzExXSA9ICh1bnNpZ25lZCBj aGFyKSAoKCpwY3RyID4+IDI0KSAmIDB4ZmYpOwotKwotKwkoKnBjdHIpKys7Ci0rCi0rCi0rI2lm bmRlZiBHRVRQSURfSVNfTUVBTklOR0xFU1MKLSsJcGlkPSh1bnNpZ25lZCBsb25nKWdldHBpZCgp OwotKwlidWZbMTJdID0gKHVuc2lnbmVkIGNoYXIpIChwaWQgJiAweGZmKTsKLSsJYnVmWzEzXSA9 ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiA4KSAmIDB4ZmYpOwotKwlidWZbMTRdID0gKHVuc2ln bmVkIGNoYXIpICgocGlkID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbMTVdID0gKHVuc2lnbmVkIGNo YXIpICgocGlkID4+IDI0KSAmIDB4ZmYpOwotKyNlbmRpZgotKyAgICB9Ci0rCi0rc3RhdGljIGlu dCBmaXBzX3JhbmQoRklQU19QUk5HX0NUWCAqY3R4LAotKwkJCXVuc2lnbmVkIGNoYXIgKm91dCwg dW5zaWduZWQgaW50IG91dGxlbikKLSsJewotKwl1bnNpZ25lZCBjaGFyIFJbQUVTX0JMT0NLX0xF TkdUSF0sIElbQUVTX0JMT0NLX0xFTkdUSF07Ci0rCXVuc2lnbmVkIGNoYXIgdG1wW0FFU19CTE9D S19MRU5HVEhdOwotKwlpbnQgaTsKLSsJaWYgKGN0eC0+ZXJyb3IpCi0rCQl7Ci0rCQlSQU5EZXJy KFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX1BSTkdfRVJST1IpOwotKwkJcmV0dXJuIDA7Ci0rCQl9 Ci0rCWlmICghY3R4LT5rZXllZCkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxS QU5EX1JfTk9fS0VZX1NFVCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYgKCFjdHgtPnNlZWRl ZCkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19OT1RfU0VF REVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlmb3IgKDs7KQotKwkJewotKwkJaWYgKCFjdHgt PnRlc3RfbW9kZSkKLSsJCQlGSVBTX2dldF90aW1ldmVjKGN0eC0+RFQsICZjdHgtPmNvdW50ZXIp OwotKwkJQUVTX2VuY3J5cHQoY3R4LT5EVCwgSSwgJmN0eC0+a3MpOwotKwkJZm9yIChpID0gMDsg aSA8IEFFU19CTE9DS19MRU5HVEg7IGkrKykKLSsJCQl0bXBbaV0gPSBJW2ldIF4gY3R4LT5WW2ld OwotKwkJQUVTX2VuY3J5cHQodG1wLCBSLCAmY3R4LT5rcyk7Ci0rCQlmb3IgKGkgPSAwOyBpIDwg QUVTX0JMT0NLX0xFTkdUSDsgaSsrKQotKwkJCXRtcFtpXSA9IFJbaV0gXiBJW2ldOwotKwkJQUVT X2VuY3J5cHQodG1wLCBjdHgtPlYsICZjdHgtPmtzKTsKLSsJCS8qIENvbnRpbnVvdXMgUFJORyB0 ZXN0ICovCi0rCQlpZiAoY3R4LT5zZWNvbmQpCi0rCQkJewotKwkJCWlmIChmaXBzX3BybmdfZmFp bCkKLSsJCQkJbWVtY3B5KGN0eC0+bGFzdCwgUiwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCQkJaWYg KCFtZW1jbXAoUiwgY3R4LT5sYXN0LCBBRVNfQkxPQ0tfTEVOR1RIKSkKLSsJCQkJewotKwkgICAg CQkJUkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9QUk5HX1NUVUNLKTsKLSsJCQkJY3R4 LT5lcnJvciA9IDE7Ci0rCQkJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKLSsJCQkJcmV0dXJu IDA7Ci0rCQkJCX0KLSsJCQl9Ci0rCQltZW1jcHkoY3R4LT5sYXN0LCBSLCBBRVNfQkxPQ0tfTEVO R1RIKTsKLSsJCWlmICghY3R4LT5zZWNvbmQpCi0rCQkJewotKwkJCWN0eC0+c2Vjb25kID0gMTsK LSsJCQlpZiAoIWN0eC0+dGVzdF9tb2RlKQotKwkJCQljb250aW51ZTsKLSsJCQl9Ci0rCi0rCQlp ZiAob3V0bGVuIDw9IEFFU19CTE9DS19MRU5HVEgpCi0rCQkJewotKwkJCW1lbWNweShvdXQsIFIs IG91dGxlbik7Ci0rCQkJYnJlYWs7Ci0rCQkJfQotKwotKwkJbWVtY3B5KG91dCwgUiwgQUVTX0JM T0NLX0xFTkdUSCk7Ci0rCQlvdXQgKz0gQUVTX0JMT0NLX0xFTkdUSDsKLSsJCW91dGxlbiAtPSBB RVNfQkxPQ0tfTEVOR1RIOwotKwkJfQotKwlyZXR1cm4gMTsKLSsJfQotKwotKwotK2ludCBGSVBT X3g5MzFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4pCi0rCXsK LSsJaW50IHJldDsKLSsJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0ID0g Zmlwc19zZXRfcHJuZ19rZXkoJnNjdHgsIGtleSwga2V5bGVuKTsKLSsJQ1JZUFRPX3dfdW5sb2Nr KENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0raW50IEZJUFNfcmFu ZF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgRklQU19SQU5EX1NJWkVfVCBrZXls ZW4pCi0rCXsKLSsJcmV0dXJuIEZJUFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVuKTsKLSsJfQot KwotK2ludCBGSVBTX3g5MzFfc2VlZChjb25zdCB2b2lkICpzZWVkLCBpbnQgc2VlZGxlbikKLSsJ ewotKwlpbnQgcmV0OwotKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXQg PSBmaXBzX3NldF9wcm5nX3NlZWQoJnNjdHgsIHNlZWQsIHNlZWRsZW4pOwotKwlDUllQVE9fd191 bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLSsKLStpbnQg RklQU194OTMxX2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IGNvdW50KQotKwl7Ci0rCWlu dCByZXQ7Ci0rCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldCA9IGZpcHNf cmFuZCgmc2N0eCwgb3V0LCBjb3VudCk7Ci0rCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19S QU5EKTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK2ludCBGSVBTX3g5MzFfc3RhdHVzKHZvaWQp Ci0rCXsKLSsJaW50IHJldDsKLSsJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJ cmV0ID0gc2N0eC5zZWVkZWQ7Ci0rCUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsK LSsJcmV0dXJuIHJldDsKLSsJfQotKwotK3ZvaWQgRklQU194OTMxX3Jlc2V0KHZvaWQpCi0rCXsK LSsJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJZmlwc19yYW5kX3BybmdfcmVz ZXQoJnNjdHgpOwotKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCX0KLSsK LStzdGF0aWMgaW50IGZpcHNfZG9fcmFuZF9zZWVkKGNvbnN0IHZvaWQgKnNlZWQsIGludCBzZWVk bGVuKQotKwl7Ci0rCUZJUFNfeDkzMV9zZWVkKHNlZWQsIHNlZWRsZW4pOwotKwlyZXR1cm4gMTsK LSsJfQotKwotK3N0YXRpYyBpbnQgZmlwc19kb19yYW5kX2FkZChjb25zdCB2b2lkICpzZWVkLCBp bnQgc2VlZGxlbiwKLSsJCQkJCWRvdWJsZSBhZGRfZW50cm9weSkKLSsJewotKwlGSVBTX3g5MzFf c2VlZChzZWVkLCBzZWVkbGVuKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgY29uc3Qg UkFORF9NRVRIT0QgcmFuZF94OTMxX21ldGg9Ci0rICAgIHsKLSsgICAgZmlwc19kb19yYW5kX3Nl ZWQsCi0rICAgIEZJUFNfeDkzMV9ieXRlcywKLSsgICAgRklQU194OTMxX3Jlc2V0LAotKyAgICBm aXBzX2RvX3JhbmRfYWRkLAotKyAgICBGSVBTX3g5MzFfYnl0ZXMsCi0rICAgIEZJUFNfeDkzMV9z dGF0dXMKLSsgICAgfTsKLSsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU194OTMxX21ldGhvZCh2 b2lkKQotK3sKLSsgIHJldHVybiAmcmFuZF94OTMxX21ldGg7Ci0rfQotKwotKyNlbmRpZgotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmguZmlwcyBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaAotLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0 by9maXBzL2ZpcHNfcmFuZC5oLmZpcHMJMjAxNC0xMC0xNiAxMzoxOTozNS4xMDAzMDY0NDYgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaAkyMDE0LTEwLTE2 IDEzOjE5OjM1LjEwMDMwNjQ0NiArMDIwMAotQEAgLTAsMCArMSwxNDUgQEAKLSsvKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFy ZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoK LSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig dXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh Y2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhl IG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBi ZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u IEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1j b3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3Bl blNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAg IHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJp YnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcK LSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJ UycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBB UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IK LSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB TUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICog U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B R0UuCi0rICoKLSsgKi8KLSsKLSsjaWZuZGVmIEhFQURFUl9GSVBTX1JBTkRfSAotKyNkZWZpbmUg SEVBREVSX0ZJUFNfUkFORF9ICi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL3JhbmQuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rI2lmZGVmICBf X2NwbHVzcGx1cwotK2V4dGVybiAiQyIgewotKyNlbmRpZgotKwotK2ludCBGSVBTX3g5MzFfc2V0 X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4pOwotK2ludCBGSVBTX3g5 MzFfc2VlZChjb25zdCB2b2lkICpidWYsIGludCBudW0pOwotK2ludCBGSVBTX3g5MzFfYnl0ZXMo dW5zaWduZWQgY2hhciAqb3V0LCBpbnQgb3V0bGVuKTsKLSsKLStpbnQgRklQU194OTMxX3Rlc3Rf bW9kZSh2b2lkKTsKLSt2b2lkIEZJUFNfeDkzMV9yZXNldCh2b2lkKTsKLStpbnQgRklQU194OTMx X3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCk7Ci0rCi0raW50IEZJUFNfeDkzMV9zdGF0dXModm9p ZCk7Ci0rCi0rY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfeDkzMV9tZXRob2Qodm9pZCk7Ci0rCi0r dHlwZWRlZiBzdHJ1Y3QgZHJiZ19jdHhfc3QgRFJCR19DVFg7Ci0rLyogRFJCRyBleHRlcm5hbCBm bGFncyAqLwotKy8qIEZsYWcgZm9yIENUUiBtb2RlIG9ubHk6IHVzZSBkZXJpdmF0aW9uIGZ1bmN0 aW9uIGN0cl9kZiAqLwotKyNkZWZpbmUJRFJCR19GTEFHX0NUUl9VU0VfREYJCTB4MQotKy8qIFBS TkcgaXMgaW4gdGVzdCBzdGF0ZSAqLwotKyNkZWZpbmUJRFJCR19GTEFHX1RFU1QJCQkweDIKLSsK LStEUkJHX0NUWCAqRklQU19kcmJnX25ldyhpbnQgdHlwZSwgdW5zaWduZWQgaW50IGZsYWdzKTsK LStpbnQgRklQU19kcmJnX2luaXQoRFJCR19DVFggKmRjdHgsIGludCB0eXBlLCB1bnNpZ25lZCBp bnQgZmxhZ3MpOwotK2ludCBGSVBTX2RyYmdfaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgsCi0r CQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJzbGVuKTsKLStpbnQgRklQ U19kcmJnX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwg c2l6ZV90IGFkaW5sZW4pOwotK2ludCBGSVBTX2RyYmdfZ2VuZXJhdGUoRFJCR19DVFggKmRjdHgs IHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwKLSsJCQlpbnQgcHJlZGljdGlvbl9y ZXNpc3RhbmNlLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVu KTsKLSsKLStpbnQgRklQU19kcmJnX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpOwotK3Zv aWQgRklQU19kcmJnX2ZyZWUoRFJCR19DVFggKmRjdHgpOwotKwotK2ludCBGSVBTX2RyYmdfc2V0 X2NhbGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwKLSsJc2l6ZV90ICgqZ2V0X2VudHJvcHkpKERSQkdf Q1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKwkJCQlpbnQgZW50cm9weSwgc2l6ZV90 IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKSwKLSsJdm9pZCAoKmNsZWFudXBfZW50cm9weSkoRFJC R19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbiksCi0rCXNpemVfdCBl bnRyb3B5X2Jsb2NrbGVuLAotKwlzaXplX3QgKCpnZXRfbm9uY2UpKERSQkdfQ1RYICpjdHgsIHVu c2lnbmVkIGNoYXIgKipwb3V0LAotKwkJCQlpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNp emVfdCBtYXhfbGVuKSwKLSsJdm9pZCAoKmNsZWFudXBfbm9uY2UpKERSQkdfQ1RYICpjdHgsIHVu c2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pKTsKLSsKLStpbnQgRklQU19kcmJnX3NldF9y YW5kX2NhbGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwKLSsJc2l6ZV90ICgqZ2V0X2FkaW4pKERSQkdf Q1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0KSwKLSsJdm9pZCAoKmNsZWFudXBfYWRpbiko RFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbiksCi0rCWludCAo KnJhbmRfc2VlZF9jYikoRFJCR19DVFggKmN0eCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtKSwK LSsJaW50ICgqcmFuZF9hZGRfY2IpKERSQkdfQ1RYICpjdHgsCi0rCQkJCWNvbnN0IHZvaWQgKmJ1 ZiwgaW50IG51bSwgZG91YmxlIGVudHJvcHkpKTsKLSsKLSt2b2lkICpGSVBTX2RyYmdfZ2V0X2Fw cF9kYXRhKERSQkdfQ1RYICpjdHgpOwotK3ZvaWQgRklQU19kcmJnX3NldF9hcHBfZGF0YShEUkJH X0NUWCAqY3R4LCB2b2lkICphcHBfZGF0YSk7Ci0rc2l6ZV90IEZJUFNfZHJiZ19nZXRfYmxvY2ts ZW5ndGgoRFJCR19DVFggKmRjdHgpOwotK2ludCBGSVBTX2RyYmdfZ2V0X3N0cmVuZ3RoKERSQkdf Q1RYICpkY3R4KTsKLSt2b2lkIEZJUFNfZHJiZ19zZXRfY2hlY2tfaW50ZXJ2YWwoRFJCR19DVFgg KmRjdHgsIGludCBpbnRlcnZhbCk7Ci0rdm9pZCBGSVBTX2RyYmdfc2V0X3Jlc2VlZF9pbnRlcnZh bChEUkJHX0NUWCAqZGN0eCwgaW50IGludGVydmFsKTsKLSsKLStpbnQgRklQU19kcmJnX2hlYWx0 aF9jaGVjayhEUkJHX0NUWCAqZGN0eCk7Ci0rCi0rRFJCR19DVFggKkZJUFNfZ2V0X2RlZmF1bHRf ZHJiZyh2b2lkKTsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU19kcmJnX21ldGhvZCh2b2lkKTsK LSsKLSsKLStpbnQgRklQU19yYW5kX3NldF9tZXRob2QoY29uc3QgUkFORF9NRVRIT0QgKm1ldGgp OwotK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfZ2V0X21ldGhvZCh2b2lkKTsKLSsKLSt2 b2lkIEZJUFNfcmFuZF9zZXRfYml0cyhpbnQgbmJpdHMpOwotKwotK2ludCBGSVBTX3JhbmRfc3Ry ZW5ndGgodm9pZCk7Ci0rCi0rLyogMS4wLjAgY29tcGF0IGZ1bmN0aW9ucyAqLwotK2ludCBGSVBT X3JhbmRfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIEZJUFNfUkFORF9TSVpFX1Qg a2V5bGVuKTsKLStpbnQgRklQU19yYW5kX3NlZWQoY29uc3Qgdm9pZCAqYnVmLCBGSVBTX1JBTkRf U0laRV9UIG51bSk7Ci0raW50IEZJUFNfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIEZJ UFNfUkFORF9TSVpFX1Qgb3V0bGVuKTsKLStpbnQgRklQU19yYW5kX3Rlc3RfbW9kZSh2b2lkKTsK LSt2b2lkIEZJUFNfcmFuZF9yZXNldCh2b2lkKTsKLStpbnQgRklQU19yYW5kX3NldF9kdCh1bnNp Z25lZCBjaGFyICpkdCk7Ci0raW50IEZJUFNfcmFuZF9zdGF0dXModm9pZCk7Ci0rY29uc3QgUkFO RF9NRVRIT0QgKkZJUFNfcmFuZF9tZXRob2Qodm9pZCk7Ci0rCi0rI2lmZGVmICBfX2NwbHVzcGx1 cwotK30KLSsjZW5kaWYKLSsjZW5kaWYKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFq L2NyeXB0by9maXBzL2ZpcHNfcmFuZF9sY2wuaC5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9m aXBzL2ZpcHNfcmFuZF9sY2wuaAotLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNf cmFuZF9sY2wuaC5maXBzCTIwMTQtMTAtMTYgMTM6MTk6MzUuMTAxMzA2NDY5ICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xjbC5oCTIwMTQtMTAtMTYgMTM6 MTk6MzUuMTAxMzA2NDY5ICswMjAwCi1AQCAtMCwwICsxLDIxOSBAQAotKy8qIGZpcHMvcmFuZC9m aXBzX3JhbmRfbGNsLmggKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0 ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAqLwotKy8q ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3Qu ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Ci0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlv bi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsg KiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11 c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBs aWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5 ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0r ICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVk aXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxv d2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsg KgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBg YEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVD VCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK LSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqLwotKwotK3R5cGVkZWYgc3RydWN0IGRyYmdf aGFzaF9jdHhfc3QgRFJCR19IQVNIX0NUWDsKLSt0eXBlZGVmIHN0cnVjdCBkcmJnX2htYWNfY3R4 X3N0IERSQkdfSE1BQ19DVFg7Ci0rdHlwZWRlZiBzdHJ1Y3QgZHJiZ19jdHJfY3R4X3N0IERSQkdf Q1RSX0NUWDsKLSsKLSsvKiA4ODggYml0cyBmcm9tIDEwLjEgdGFibGUgMiAqLwotKyNkZWZpbmUg SEFTSF9QUk5HX01BWF9TRUVETEVOCTExMQotKwotK3N0cnVjdCBkcmJnX2hhc2hfY3R4X3N0Ci0r CXsKLSsJY29uc3QgRVZQX01EICptZDsKLSsJRVZQX01EX0NUWCBtY3R4OwotKwl1bnNpZ25lZCBj aGFyIFZbSEFTSF9QUk5HX01BWF9TRUVETEVOXTsKLSsJdW5zaWduZWQgY2hhciBDW0hBU0hfUFJO R19NQVhfU0VFRExFTl07Ci0rCS8qIFRlbXBvcmFyeSB2YWx1ZSBzdG9yYWdlOiBzaG91bGQgYWx3 YXlzIGV4Y2VlZCBtYXggZGlnZXN0IGxlbmd0aCAqLwotKwl1bnNpZ25lZCBjaGFyIHZ0bXBbSEFT SF9QUk5HX01BWF9TRUVETEVOXTsKLSsJfTsKLSsKLStzdHJ1Y3QgZHJiZ19obWFjX2N0eF9zdAot Kwl7Ci0rCWNvbnN0IEVWUF9NRCAqbWQ7Ci0rCUhNQUNfQ1RYIGhjdHg7Ci0rCXVuc2lnbmVkIGNo YXIgS1tFVlBfTUFYX01EX1NJWkVdOwotKwl1bnNpZ25lZCBjaGFyIFZbRVZQX01BWF9NRF9TSVpF XTsKLSsJfTsKLSsKLStzdHJ1Y3QgZHJiZ19jdHJfY3R4X3N0Ci0rCXsKLSsJQUVTX0tFWSBrczsK LSsJc2l6ZV90IGtleWxlbjsKLSsJdW5zaWduZWQgY2hhciBLWzMyXTsKLSsJdW5zaWduZWQgY2hh ciBWWzE2XTsKLSsJLyogVGVtcCB2YXJpYWJsZXMgdXNlZCBieSBkZXJpdmF0aW9uIGZ1bmN0aW9u ICovCi0rCUFFU19LRVkgZGZfa3M7Ci0rCUFFU19LRVkgZGZfa3hrczsKLSsJLyogVGVtcG9yYXJ5 IGJsb2NrIHN0b3JhZ2UgdXNlZCBieSBjdHJfZGYgKi8KLSsJdW5zaWduZWQgY2hhciBibHRtcFsx Nl07Ci0rCXNpemVfdCBibHRtcF9wb3M7Ci0rCXVuc2lnbmVkIGNoYXIgS1hbNDhdOwotKwl9Owot KwotKy8qIERSQkcgaW50ZXJuYWwgZmxhZ3MgKi8KLSsKLSsvKiBGdW5jdGlvbnMgc2hvdWxkbid0 IGNhbGwgZXJyIGxpYnJhcnkgKi8KLSsjZGVmaW5lCURSQkdfRkxBR19OT0VSUgkJCTB4MQotKy8q IEN1c3RvbSByZXNlZWQgY2hlY2tpbmcgKi8KLSsjZGVmaW5lCURSQkdfQ1VTVE9NX1JFU0VFRAkJ MHgyCi0rCi0rLyogRFJCRyBzdGF0dXMgdmFsdWVzICovCi0rLyogbm90IGluaXRpYWxpc2VkICov Ci0rI2RlZmluZSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VECTAKLSsvKiBvayBhbmQgcmVhZHkg dG8gZ2VuZXJhdGUgcmFuZG9tIGJpdHMgKi8KLSsjZGVmaW5lIERSQkdfU1RBVFVTX1JFQURZCQkx Ci0rLyogcmVzZWVkIHJlcXVpcmVkICovCi0rI2RlZmluZSBEUkJHX1NUQVRVU19SRVNFRUQJCTIK LSsvKiBmYXRhbCBlcnJvciBjb25kaXRpb24gKi8KLSsjZGVmaW5lIERSQkdfU1RBVFVTX0VSUk9S CQkzCi0rCi0rLyogQSBkZWZhdWx0IG1heGltdW0gbGVuZ3RoOiBsYXJnZXIgdGhhbiBhbnkgcmVh c29uYWJsZSB2YWx1ZSB1c2VkIGluIHByYXRpY2UgKi8KLSsKLSsjZGVmaW5lIERSQkdfTUFYX0xF TkdUSAkJCTB4N2ZmZmZmZjAKLSsvKiBNYXhpbXVtIERSQkcgYmxvY2sgbGVuZ3RoOiBhbGwgbWQg c2l6ZXMgYXJlIGJpZ2dlciB0aGFuIGNpcGhlciBibG9ja3Mgc2l6ZXMKLSsgKiBzbyB1c2UgbWF4 IGRpZ2VzdCBsZW5ndGguCi0rICovCi0rI2RlZmluZSBEUkJHX01BWF9CTE9DSwkJCUVWUF9NQVhf TURfU0laRQotKwotKyNkZWZpbmUgRFJCR19IRUFMVEhfSU5URVJWQUwJCSgxIDw8IDI0KQotKwot Ky8qIERSQkcgY29udGV4dCBzdHJ1Y3R1cmUgKi8KLSsKLStzdHJ1Y3QgZHJiZ19jdHhfc3QKLSsJ ewotKwkvKiBGaXJzdCB0eXBlcyBjb21tb24gdG8gYWxsIGltcGxlbWVudGF0aW9ucyAqLwotKwkv KiBEUkJHIHR5cGU6IGEgTklEIGZvciB0aGUgdW5kZXJseWluZyBhbGdvcml0aG0gKi8KLSsJaW50 IHR5cGU7Ci0rCS8qIFZhcmlvdXMgZXh0ZXJuYWwgZmxhZ3MgKi8KLSsJdW5zaWduZWQgaW50IHhm bGFnczsKLSsJLyogVmFyaW91cyBpbnRlcm5hbCB1c2Ugb25seSBmbGFncyAqLwotKwl1bnNpZ25l ZCBpbnQgaWZsYWdzOwotKwkvKiBVc2VkIGZvciBwZXJpb2RpYyBoZWFsdGggY2hlY2tzICovCi0r CWludCBoZWFsdGhfY2hlY2tfY250LCBoZWFsdGhfY2hlY2tfaW50ZXJ2YWw7Ci0rCi0rCS8qIFRo ZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgc2V0dXAgYnkgbWVjaGFuaXNtIGRyYmdfaW5pdCgp IGNhbGwgKi8KLSsJaW50IHN0cmVuZ3RoOwotKwlzaXplX3QgYmxvY2tsZW5ndGg7Ci0rCXNpemVf dCBtYXhfcmVxdWVzdDsKLSsKLSsJc2l6ZV90IG1pbl9lbnRyb3B5LCBtYXhfZW50cm9weTsKLSsJ c2l6ZV90IG1pbl9ub25jZSwgbWF4X25vbmNlOwotKwlzaXplX3QgbWF4X3BlcnMsIG1heF9hZGlu OwotKwl1bnNpZ25lZCBpbnQgcmVzZWVkX2NvdW50ZXI7Ci0rCXVuc2lnbmVkIGludCByZXNlZWRf aW50ZXJ2YWw7Ci0rCXNpemVfdCBzZWVkbGVuOwotKwlpbnQgc3RhdHVzOwotKwkvKiBBcHBsaWNh dGlvbiBkYXRhOiB0eXBpY2FsbHkgdXNlZCBieSB0ZXN0IGdldF9lbnRyb3B5ICovCi0rCXZvaWQg KmFwcF9kYXRhOwotKwkvKiBJbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBzdHJ1Y3R1cmVzICovCi0r CXVuaW9uIAotKwkJewotKwkJRFJCR19IQVNIX0NUWCBoYXNoOwotKwkJRFJCR19ITUFDX0NUWCBo bWFjOwotKwkJRFJCR19DVFJfQ1RYICBjdHI7Ci0rCQl9IGQ7Ci0rCS8qIEluaXRpYWxpYXNlIFBS TkcgYW5kIHNldHVwIGNhbGxiYWNrcyBiZWxvdyAqLwotKwlpbnQgKCppbml0KShEUkJHX0NUWCAq Y3R4LCBpbnQgbmlkLCBpbnQgc2VjdXJpdHksIHVuc2lnbmVkIGludCBmbGFncyk7Ci0rCS8qIElu dGFudGlhdGUgUFJORyAqLwotKwlpbnQgKCppbnN0YW50aWF0ZSkoRFJCR19DVFggKmN0eCwKLSsJ CQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50bGVuLAotKwkJCQljb25zdCB1 bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlbGVuLAotKwkJCQljb25zdCB1bnNpZ25l ZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xlbik7Ci0rCS8qIHJlc2VlZCAqLwotKwlpbnQgKCpy ZXNlZWQpKERSQkdfQ1RYICpjdHgsCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6 ZV90IGVudGxlbiwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5s ZW4pOwotKwkvKiBnZW5lcmF0IG91dHB1dCAqLwotKwlpbnQgKCpnZW5lcmF0ZSkoRFJCR19DVFgg KmN0eCwKLSsJCQkJdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAotKwkJCQljb25z dCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbik7Ci0rCS8qIHVuaW5zdGFudGlh dGUgKi8KLSsJaW50ICgqdW5pbnN0YW50aWF0ZSkoRFJCR19DVFggKmN0eCk7Ci0rCi0rCS8qIEVu dHJvcHkgc291cmNlIGJsb2NrIGxlbmd0aCAqLwotKwlzaXplX3QgZW50cm9weV9ibG9ja2xlbjsK LSsKLSsJLyogZW50cm9weSBnYXRoZXJpbmcgZnVuY3Rpb24gKi8KLSsJc2l6ZV90ICgqZ2V0X2Vu dHJvcHkpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKwkJCQlpbnQgZW50 cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKTsKLSsJLyogSW5kaWNhdGVzIHdl IGhhdmUgZmluaXNoZWQgd2l0aCBlbnRyb3B5IGJ1ZmZlciAqLwotKwl2b2lkICgqY2xlYW51cF9l bnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKTsK LSsKLSsJLyogbm9uY2UgZ2F0aGVyaW5nIGZ1bmN0aW9uICovCi0rCXNpemVfdCAoKmdldF9ub25j ZSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rCQkJCWludCBlbnRyb3B5 LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pOwotKwkvKiBJbmRpY2F0ZXMgd2UgaGF2 ZSBmaW5pc2hlZCB3aXRoIG5vbmNlIGJ1ZmZlciAqLwotKwl2b2lkICgqY2xlYW51cF9ub25jZSko RFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbik7Ci0rCi0rCS8q IENvbnRpbnVvdXMgcmFuZG9tIG51bWJlciB0ZXN0IHRlbXBvcmFyeSBhcmVhICovCi0rCS8qIExh c3QgYmxvY2sgKi8JCi0rCXVuc2lnbmVkIGNoYXIgbGJbRVZQX01BWF9NRF9TSVpFXTsKLSsJLyog c2V0IGlmIGxiIGlzIHZhbGlkICovCi0rCWludCBsYl92YWxpZDsKLSsKLSsJLyogQ2FsbGJhY2tz IHVzZWQgd2hlbiBjYWxsZWQgdGhyb3VnaCBSQU5EIGludGVyZmFjZSAqLwotKwkvKiBHZXQgYW55 IGFkZGl0aW9uYWwgaW5wdXQgZm9yIGdlbmVyYXRlICovCi0rCXNpemVfdCAoKmdldF9hZGluKShE UkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCk7Ci0rCXZvaWQgKCpjbGVhbnVwX2Fk aW4pKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pOwotKwkv KiBDYWxsYmFjayBmb3IgUkFORF9zZWVkKCksIFJBTkRfYWRkKCkgKi8KLSsJaW50ICgqcmFuZF9z ZWVkX2NiKShEUkJHX0NUWCAqY3R4LCBjb25zdCB2b2lkICpidWYsIGludCBudW0pOwotKwlpbnQg KCpyYW5kX2FkZF9jYikoRFJCR19DVFggKmN0eCwKLSsJCQkJY29uc3Qgdm9pZCAqYnVmLCBpbnQg bnVtLCBkb3VibGUgZW50cm9weSk7Ci0rCX07Ci0rCi0rCi0raW50IGZpcHNfZHJiZ19jdHJfaW5p dChEUkJHX0NUWCAqZGN0eCk7Ci0raW50IGZpcHNfZHJiZ19oYXNoX2luaXQoRFJCR19DVFggKmRj dHgpOwotK2ludCBmaXBzX2RyYmdfaG1hY19pbml0KERSQkdfQ1RYICpkY3R4KTsKLStpbnQgZmlw c19kcmJnX2thdChEUkJHX0NUWCAqZGN0eCwgaW50IG5pZCwgdW5zaWduZWQgaW50IGZsYWdzKTsK LStpbnQgZmlwc19kcmJnX2Nwcm5nX3Rlc3QoRFJCR19DVFggKmRjdHgsIGNvbnN0IHVuc2lnbmVk IGNoYXIgKm91dCk7Ci0rCi0rY29uc3Qgc3RydWN0IGVudl9tZF9zdCAqRklQU19nZXRfZGlnZXN0 YnluaWQoaW50IG5pZCk7Ci0rCi0rY29uc3Qgc3RydWN0IGV2cF9jaXBoZXJfc3QgKkZJUFNfZ2V0 X2NpcGhlcmJ5bmlkKGludCBuaWQpOwotKwotKyNkZWZpbmUgRklQU19kaWdlc3Rpbml0IEVWUF9E aWdlc3RJbml0Ci0rI2RlZmluZSBGSVBTX2RpZ2VzdHVwZGF0ZSBFVlBfRGlnZXN0VXBkYXRlCi0r I2RlZmluZSBGSVBTX2RpZ2VzdGZpbmFsIEVWUF9EaWdlc3RGaW5hbAotKyNkZWZpbmUgTV9FVlBf TURfc2l6ZSBFVlBfTURfc2l6ZQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMv Zmlwc19yYW5kX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19yYW5k X2xpYi5jCi0tLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xpYi5jLmZp cHMJMjAxNC0xMC0xNiAxMzoxOTozNS4xMDEzMDY0NjkgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4x ai9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGliLmMJMjAxNC0xMC0xNiAxMzoxOTozNS4xMDEzMDY0 NjkgKzAyMDAKLUBAIC0wLDAgKzEsMTkxIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmln aHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0r ICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVy dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICog ICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0r ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBU b29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAg IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3 aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4K LSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3Qg YmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0 aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRo ZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZv cm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVk Z21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICog RVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAq IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0r Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAiZV9vcy5oIgotKwot Ky8qIEZJUFMgQVBJIGZvciBQUk5HIHVzZS4gU2ltaWxhciB0byBSQU5EIGZ1bmN0aW9uYWxpdHkg YnV0IHdpdGhvdXQKLSsgKiBFTkdJTkUgYW5kIGFkZGl0aW9uYWwgY2hlY2tpbmcgZm9yIG5vbi1G SVBTIHJhbmQgbWV0aG9kcy4KLSsgKi8KLSsKLStzdGF0aWMgY29uc3QgUkFORF9NRVRIT0QgKmZp cHNfcmFuZF9tZXRoID0gTlVMTDsKLStzdGF0aWMgaW50IGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRo ID0gMDsKLStzdGF0aWMgaW50IGZpcHNfcmFuZF9iaXRzID0gMDsKLSsKLSsvKiBBbGxvd3MgYXBw bGljYXRpb24gdG8gb3ZlcnJpZGUgbnVtYmVyIG9mIGJpdHMgYW5kIHVzZXMgbm9uLUZJUFMgbWV0 aG9kcyAqLwotK3ZvaWQgRklQU19yYW5kX3NldF9iaXRzKGludCBuYml0cykKLSsJewotKwlmaXBz X3JhbmRfYml0cyA9IG5iaXRzOwotKwl9Ci0rCi0raW50IEZJUFNfcmFuZF9zZXRfbWV0aG9kKGNv bnN0IFJBTkRfTUVUSE9EICptZXRoKQotKwl7Ci0rCWlmICghZmlwc19yYW5kX2JpdHMpCi0rCQl7 Ci0rCQlpZiAobWV0aCA9PSBGSVBTX2RyYmdfbWV0aG9kKCkpCi0rCQkJZmlwc19hcHByb3ZlZF9y YW5kX21ldGggPSAxOwotKwkJZWxzZSBpZiAobWV0aCA9PSBGSVBTX3g5MzFfbWV0aG9kKCkpCi0r CQkJZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPSAyOwotKwkJZWxzZQotKwkJCXsKLSsJCQlmaXBz X2FwcHJvdmVkX3JhbmRfbWV0aCA9IDA7Ci0rCQkJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSkKLSsJ CQkJewotKwkJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfU0VUX01FVEhPRCwKLSsJCQkJCQlG SVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJCX0KLSsJCQl9Ci0r CQl9Ci0rCWZpcHNfcmFuZF9tZXRoID0gbWV0aDsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStjb25z dCBSQU5EX01FVEhPRCAqRklQU19yYW5kX2dldF9tZXRob2Qodm9pZCkKLSsJewotKwlyZXR1cm4g Zmlwc19yYW5kX21ldGg7Ci0rCX0KLSsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX21l dGhvZCh2b2lkKQotKwl7Ci0rCXJldHVybiBGSVBTX3JhbmRfZ2V0X21ldGhvZCgpOwotKwl9Ci0r Ci0rdm9pZCBGSVBTX3JhbmRfcmVzZXQodm9pZCkKLSsJewotKwlpZiAoZmlwc19yYW5kX21ldGgg JiYgZmlwc19yYW5kX21ldGgtPmNsZWFudXApCi0rCQlmaXBzX3JhbmRfbWV0aC0+Y2xlYW51cCgp OwotKwl9Ci0rCi0raW50IEZJUFNfcmFuZF9zZWVkKGNvbnN0IHZvaWQgKmJ1ZiwgRklQU19SQU5E X1NJWkVfVCBudW0pCi0rCXsKLSsJaWYgKCFmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBT X21vZHVsZV9tb2RlKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfU0VFRCwg RklQU19SX05PTl9GSVBTX01FVEhPRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYgKGZpcHNf cmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5zZWVkKQotKwkJZmlwc19yYW5kX21ldGgtPnNl ZWQoYnVmLG51bSk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rdm9pZCBGSVBTX3JhbmRfYWRkKGNv bnN0IHZvaWQgKmJ1ZiwgaW50IG51bSwgZG91YmxlIGVudHJvcHkpCi0rCXsKLSsJaWYgKCFmaXBz X2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21vZHVsZV9tb2RlKCkpCi0rCQl7Ci0rCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX1JBTkRfQURELCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJCXJl dHVybjsKLSsJCX0KLSsJaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5hZGQp Ci0rCQlmaXBzX3JhbmRfbWV0aC0+YWRkKGJ1ZixudW0sZW50cm9weSk7Ci0rCX0KLSsKLStpbnQg RklQU19yYW5kX2J5dGVzKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgRklQU19SQU5EX1NJWkVfVCBudW0p Ci0rCXsKLSsJaWYgKCFmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21vZHVsZV9tb2Rl KCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfQllURVMsIEZJUFNfUl9OT05f RklQU19NRVRIT0QpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWlmIChmaXBzX3JhbmRfbWV0aCAm JiBmaXBzX3JhbmRfbWV0aC0+Ynl0ZXMpCi0rCQlyZXR1cm4gZmlwc19yYW5kX21ldGgtPmJ5dGVz KGJ1ZixudW0pOwotKwlyZXR1cm4gMDsKLSsJfQotKwotK2ludCBGSVBTX3JhbmRfcHNldWRvX2J5 dGVzKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IG51bSkKLSsJewotKwlpZiAoIWZpcHNfYXBwcm92 ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9kdWxlX21vZGUoKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQ U19GX0ZJUFNfUkFORF9QU0VVRE9fQllURVMsIEZJUFNfUl9OT05fRklQU19NRVRIT0QpOwotKwkJ cmV0dXJuIDA7Ci0rCQl9Ci0rCWlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+ cHNldWRvcmFuZCkKLSsJCXJldHVybiBmaXBzX3JhbmRfbWV0aC0+cHNldWRvcmFuZChidWYsbnVt KTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rCi0raW50IEZJUFNfcmFuZF9zdGF0dXModm9pZCkKLSsJ ewotKwlpZiAoIWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9kdWxlX21vZGUoKSkK LSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfUkFORF9TVEFUVVMsIEZJUFNfUl9OT05fRklQ U19NRVRIT0QpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWlmIChmaXBzX3JhbmRfbWV0aCAmJiBm aXBzX3JhbmRfbWV0aC0+c3RhdHVzKQotKwkJcmV0dXJuIGZpcHNfcmFuZF9tZXRoLT5zdGF0dXMo KTsKLSsJcmV0dXJuIDA7Ci0rCX0KLSsKLSsvKiBSZXR1cm4gaW5zdGFudGlhdGVkIHN0cmVuZ3Ro IG9mIFBSTkcuIEZvciBEUkJHIHRoaXMgaXMgYW4gaW50ZXJuYWwKLSsgKiBwYXJhbWV0ZXIuIEZv ciBYOS4zMSBQUk5HIGl0IGlzIDgwIGJpdHMgKGZyb20gU1A4MDAtMTMxKS4gQW55IG90aGVyCi0r ICogdHlwZSBvZiBQUk5HIGlzIG5vdCBhcHByb3ZlZCBhbmQgcmV0dXJucyAwIGluIEZJUFMgbW9k ZSBhbmQgbWF4aW11bQotKyAqIDI1NiBvdXRzaWRlIEZJUFMgbW9kZS4KLSsgKi8KLSsKLStpbnQg RklQU19yYW5kX3N0cmVuZ3RoKHZvaWQpCi0rCXsKLSsJaWYgKGZpcHNfcmFuZF9iaXRzKQotKwkJ cmV0dXJuIGZpcHNfcmFuZF9iaXRzOwotKwlpZiAoZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPT0g MSkKLSsJCXJldHVybiBGSVBTX2RyYmdfZ2V0X3N0cmVuZ3RoKEZJUFNfZ2V0X2RlZmF1bHRfZHJi ZygpKTsKLSsJZWxzZSBpZiAoZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPT0gMikKLSsJCXJldHVy biA4MDsKLSsJZWxzZSBpZiAoZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPT0gMCkKLSsJCXsKLSsJ CWlmIChGSVBTX21vZHVsZV9tb2RlKCkpCi0rCQkJcmV0dXJuIDA7Ci0rCQllbHNlCi0rCQkJcmV0 dXJuIDI1NjsKLSsJCX0KLSsJcmV0dXJuIDA7Ci0rCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFq L2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5 cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8v Zmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYy5maXBzCTIwMTQtMTAtMTYgMTM6MTk6MzUuMTAxMzA2 NDY5ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0 ZXN0LmMJMjAxNC0xMC0xNiAxMzoxOTozNS4xMDEzMDY0NjkgKzAyMDAKLUBAIC0wLDAgKzEsMTgz IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wg UHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAot KyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlz dHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIK LSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJv amVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAot KyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAq ICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9y IHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoK LSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFp biB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAot KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3Ns Lm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNT TCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3Bl blNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+ Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsK LSsKLSt0eXBlZGVmIHN0cnVjdAotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgRFRbMTZdOwotKwl1bnNp Z25lZCBjaGFyIFZbMTZdOwotKwl1bnNpZ25lZCBjaGFyIFJbMTZdOwotKwl9IEFFU19QUk5HX1RW OwotKwotKy8qIFRoZSBmb2xsb3dpbmcgdGVzdCB2ZWN0b3JzIGFyZSB0YWtlbiBkaXJlY3RseSBm cm9tIHRoZSBSR05WUyBzcGVjICovCi0rCi0rc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9r ZXlbMTZdID0KLSsJCXsweGYzLDB4YjEsMHg2NiwweDZkLDB4MTMsMHg2MCwweDcyLDB4NDIsCi0r CQkgMHhlZCwweDA2LDB4MWMsMHhhYiwweGI4LDB4ZDQsMHg2MiwweDAyfTsKLSsKLStzdGF0aWMg QUVTX1BSTkdfVFYgYWVzXzEyOF90diA9IAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhlNiww eGIzLDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAotKwkJIDB4ZDcsMHgxZCwweDRhLDB4 ZmIsMHhiMCwweGU5LDB4MjIsMHhmOX0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweDgwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4NTksMHg1MywweDFlLDB4ZDEs MHgzYiwweGIwLDB4YzAsMHg1NSwKLSsJCSAweDg0LDB4NzksMHg2NiwweDg1LDB4YzEsMHgyZiww eDc2LDB4NDF9Ci0rCX07Ci0rCi0rc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9rZXlbMjRd ID0KLSsJCXsweDE1LDB4ZDgsMHg3OCwweDBkLDB4NjIsMHhkMywweDI1LDB4NmUsCi0rCQkgMHg0 NCwweDY0LDB4MTAsMHgxMywweDYwLDB4MmIsMHhhOSwweGJjLAotKwkJIDB4NGEsMHhmYiwweGNh LDB4ZWIsMHg0YywweDhiLDB4OTksMHgzYn07Ci0rCi0rc3RhdGljIEFFU19QUk5HX1RWIGFlc18x OTJfdHYgPSAKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4 MCwweDY5LDB4OGIsMHhjMSwKLSsJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYz LDB4NGJ9LAotKwkJCQkvKiBWICovCi0rCQl7MHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0s Ci0rCQkJCS8qIFIgKi8KLSsJCXsweDE3LDB4MDcsMHhkNSwweDI4LDB4MTksMHg3OSwweDFlLDB4 ZWYsCi0rCQkgMHhhNSwweDBjLDB4YmYsMHgyNSwweGU1LDB4NTYsMHhiNCwweDkzfQotKwl9Owot KwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18yNTZfa2V5WzMyXSA9Ci0rCQl7MHg2ZCwweDE0 LDB4MDYsMHg2YywweGI2LDB4ZDgsMHgyMSwweDJkLAotKwkJIDB4ODIsMHg4ZCwweGZhLDB4ZjIs MHg3YSwweDAzLDB4YjcsMHg5ZiwKLSsJCSAweDBjLDB4YzcsMHgzZSwweGNkLDB4NzYsMHhlYiww eGVlLDB4YjUsCi0rCQkgMHgyMSwweDA1LDB4OGMsMHg0ZiwweDMxLDB4N2EsMHg4MCwweGJifTsK LSsKLStzdGF0aWMgQUVTX1BSTkdfVFYgYWVzXzI1Nl90diA9Ci0rCXsKLSsJCQkJLyogRFQgKi8K LSsJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCi0rCQkgMHhmMiww eGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZSwweDg4fSwKLSsJCQkJLyogViAqLwotKwkJezB4 ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHgzNSwweGM3 LDB4ZWYsMHhhNywweDc4LDB4NGQsMHgyOSwweGJjLAotKwkJIDB4ODIsMHg3OSwweDk5LDB4ZmIs MHhkMCwweGIzLDB4M2IsMHg3Mn0KLSsJfTsKLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9ybmcoKQot KyAgICB7Ci0rICAgIGFlc18xOTJfdHYuVlswXSsrOwotKyAgICB9Ci0rCi0rI2RlZmluZSBmaXBz X3g5MzFfdGVzdChrZXksIHR2KSBcCi0rCWRvX3g5MzFfdGVzdChrZXksIHNpemVvZiBrZXksICZ0 dikKLSsKLStzdGF0aWMgaW50IGRvX3g5MzFfdGVzdCh1bnNpZ25lZCBjaGFyICprZXksIGludCBr ZXlsZW4sCi0rCQkJQUVTX1BSTkdfVFYgKnR2KQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgUlsxNl0s IFZbMTZdOwotKwlpbnQgcnYgPSAxOwotKwltZW1jcHkoViwgdHYtPlYsIHNpemVvZihWKSk7Ci0r CWlmICghRklQU194OTMxX3NldF9rZXkoa2V5LCBrZXlsZW4pKQotKwkJcmV0dXJuIDA7Ci0rCWlm ICghZmlwc19wb3N0X3N0YXJ0ZWQoRklQU19URVNUX1g5MzEsIGtleWxlbiwgTlVMTCkpCi0rCQly ZXR1cm4gMTsKLSsJaWYgKCFmaXBzX3Bvc3RfY29ycnVwdChGSVBTX1RFU1RfWDkzMSwga2V5bGVu LCBOVUxMKSkKLSsJCVZbMF0rKzsKLSsJRklQU194OTMxX3NlZWQoViwgMTYpOwotKwlGSVBTX3g5 MzFfc2V0X2R0KHR2LT5EVCk7Ci0rCUZJUFNfeDkzMV9ieXRlcyhSLCAxNik7Ci0rCWlmIChtZW1j bXAoUiwgdHYtPlIsIDE2KSkKLSsJCXsKLSsJCWZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNUX1g5 MzEsIGtleWxlbiwgTlVMTCk7Ci0rCQlydiA9IDA7Ci0rCQl9Ci0rCWVsc2UgaWYgKCFmaXBzX3Bv c3Rfc3VjY2VzcyhGSVBTX1RFU1RfWDkzMSwga2V5bGVuLCBOVUxMKSkKLSsJCXJldHVybiAwOwot KwlyZXR1cm4gcnY7Ci0rCX0KLSsKLStpbnQgRklQU19zZWxmdGVzdF94OTMxKCkKLSsJewotKwlp bnQgcnYgPSAxOwotKwlGSVBTX3g5MzFfcmVzZXQoKTsKLSsJaWYgKCFGSVBTX3g5MzFfdGVzdF9t b2RlKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1g5MzEsRklQU19S X1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYgKCFmaXBzX3g5MzFf dGVzdChhZXNfMTI4X2tleSxhZXNfMTI4X3R2KSkKLSsJCXJ2ID0gMDsKLSsJaWYgKCFmaXBzX3g5 MzFfdGVzdChhZXNfMTkyX2tleSwgYWVzXzE5Ml90dikpCi0rCQlydiA9IDA7Ci0rCWlmICghZmlw c194OTMxX3Rlc3QoYWVzXzI1Nl9rZXksIGFlc18yNTZfdHYpKQotKwkJcnYgPSAwOwotKwlGSVBT X3g5MzFfcmVzZXQoKTsKLSsJaWYgKCFydikKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRF U1RfWDkzMSxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsJcmV0dXJuIHJ2OwotKwl9Ci0rCi0r aW50IEZJUFNfc2VsZnRlc3Rfcm5nKHZvaWQpCi0rCXsKLSsJcmV0dXJuIEZJUFNfc2VsZnRlc3Rf eDkzMSgpOwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8v Zmlwcy9maXBzX3JhbmR0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBz X3JhbmR0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0 LmMuZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM1LjEwMTMwNjQ2OSArMDIwMAotKysrIG9wZW5zc2wt MS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjEw MTMwNjQ2OSArMDIwMAotQEAgLTAsMCArMSwyNTAgQEAKLSsvKiBDb3B5cmlnaHQgKEMpIDE5OTUt MTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKLSsgKiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotKyAqCi0rICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0 dGVuCi0rICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotKyAqIFRoZSBpbXBs ZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNT TC4KLSsgKiAKLSsgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9u LWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSsgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg YXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcHBseSB0byBh bGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAot KyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBT U0wgZG9jdW1lbnRhdGlvbgotKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMg Y292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKLSsgKiBleGNlcHQgdGhhdCB0aGUg aG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKiAKLSsgKiBDb3B5 cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90 aWNlcyBpbgotKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSsgKiBJZiB0aGlz IHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVu IGF0dHJpYnV0aW9uCi0rICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJh cnkgdXNlZC4KLSsgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2Fn ZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKLSsgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3Ig dGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSsgKiAKLSsgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK LSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0rICogMy4g QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzIHNvZnR3YXJlCi0rICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0 d2FyZSB3cml0dGVuIGJ5Ci0rICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIK LSsgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSBy b3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKLSsgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRv Z3JhcGhpYyByZWxhdGVkIDotKS4KLSsgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBz cGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKLSsgKiAgICB0aGUg YXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNr bm93bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3Jp dHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0rICogCi0rICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSsgKiBBTlkg RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotKyAqIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0rICog Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwKLSsgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotKyAqIE9SIFNFUlZJQ0VTOyBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQot KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwgU1RSSUNUCi0rICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotKyAqIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YKLSsgKiBTVUNIIERBTUFHRS4KLSsgKiAKLSsgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJp YnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgotKyAq IGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNv ZGUgY2Fubm90IHNpbXBseSBiZQotKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlz dHJpYnV0aW9uIGxpY2VuY2UKLSsgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2Uu XQotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0r ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAg IGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK LSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgot KyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQot KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5o PgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUg PGN0eXBlLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2JuLmg+Ci0rCi0rI2luY2x1ZGUgImVfb3MuaCIKLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQ UwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5v IEZJUFMgUkFORCBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQot KwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsK LSt0eXBlZGVmIHN0cnVjdAotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgRFRbMTZdOwotKwl1bnNpZ25l ZCBjaGFyIFZbMTZdOwotKwl1bnNpZ25lZCBjaGFyIFJbMTZdOwotKwl9IEFFU19QUk5HX01DVDsK LSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X21jdF9rZXlbMTZdID0KLSsJ ezB4OWYsMHg1YiwweDUxLDB4MjAsMHgwYiwweGYzLDB4MzQsMHhiNSwKLSsJIDB4ZDgsMHgyYiww eGU4LDB4YzMsMHg3MiwweDU1LDB4YzgsMHg0OH07Ci0rCi0rc3RhdGljIGNvbnN0IEFFU19QUk5H X01DVCBhZXNfMTI4X21jdF90diA9IHsKLSsJCQkvKiBEVCAqLwotKwl7MHg2MywweDc2LDB4YmIs MHhlNSwweDI5LDB4MDIsMHhiYSwweDNiLAotKwkgMHg2NywweGM5LDB4MjUsMHhmYSwweDcwLDB4 MWYsMHgxMSwweGFjfSwKLSsJCQkvKiBWICovCi0rCXsweDU3LDB4MmMsMHg4ZSwweDc2LDB4ODcs MHgyNiwweDQ3LDB4OTcsCi0rCSAweDdlLDB4NzQsMHhmYiwweGRkLDB4YzQsMHg5NSwweDAxLDB4 ZDF9LAotKwkJCS8qIFIgKi8KLSsJezB4NDgsMHhlOSwweGJkLDB4MGQsMHgwNiwweGVlLDB4MTgs MHhmYiwKLSsJIDB4ZTQsMHg1NywweDkwLDB4ZDUsMHhjMywweGZjLDB4OWIsMHg3M30KLSt9Owot KwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbWN0X2tleVsyNF0gPQotKwl7 MHhiNywweDZjLDB4MzQsMHhkMSwweDA5LDB4NjcsMHhhYiwweDczLAotKwkgMHg0ZCwweDVhLDB4 ZDUsMHgzNCwweDk4LDB4MTYsMHgwYiwweDkxLAotKwkgMHhiYywweDM1LDB4NTEsMHgxNiwweDZi LDB4YWUsMHg5MywweDhhfTsKLSsKLStzdGF0aWMgY29uc3QgQUVTX1BSTkdfTUNUIGFlc18xOTJf bWN0X3R2ID0gewotKwkJCS8qIERUICovCi0rCXsweDg0LDB4Y2UsMHgyMiwweDdkLDB4OTEsMHg1 YSwweGEzLDB4YzksCi0rCSAweDg0LDB4M2MsMHgwYSwweGIzLDB4YTksMHg2MywweDE1LDB4NTJ9 LAotKwkJCS8qIFYgKi8KLSsJezB4YjYsMHhhZiwweGU2LDB4OGYsMHg5OSwweDllLDB4OTAsMHg2 NCwKLSsJIDB4ZGQsMHhjNywweDdhLDB4YzEsMHhiYiwweDkwLDB4M2EsMHg2ZH0sCi0rCQkJLyog UiAqLwotKwl7MHhmYywweDg1LDB4NjAsMHg5YSwweDI5LDB4NmYsMHhlZiwweDIxLAotKwkgMHhk ZCwweDg2LDB4MjAsMHgzMiwweDhhLDB4MjksMHg2ZiwweDQ3fQotK307Ci0rCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9tY3Rfa2V5WzMyXSA9Ci0rCXsweDliLDB4MDUsMHhj OCwweDY4LDB4ZmYsMHg0NywweGY4LDB4M2EsCi0rCSAweGE2LDB4M2EsMHhhOCwweGNiLDB4NGUs MHg3MSwweGIyLDB4ZTAsCi0rCSAweGI4LDB4N2UsMHhmMSwweDM3LDB4YjYsMHhiNCwweGY2LDB4 NmQsCi0rCSAweDg2LDB4MzIsMHhmYywweDFmLDB4NWUsMHgxZCwweDFlLDB4NTB9OwotKwotK3N0 YXRpYyBjb25zdCBBRVNfUFJOR19NQ1QgYWVzXzI1Nl9tY3RfdHYgPSB7Ci0rCQkJLyogRFQgKi8K LSsJezB4MzEsMHg2ZSwweDM1LDB4OWEsMHhiMSwweDQ0LDB4ZjAsMHhlZSwKLSsJIDB4NjIsMHg2 ZCwweDA0LDB4NDYsMHhlMCwweGEzLDB4OTIsMHg0Y30sCi0rCQkJLyogViAqLwotKwl7MHg0Ziww eGNkLDB4YzEsMHg4NywweDgyLDB4MWYsMHg0ZCwweGExLAotKwkgMHgzZSwweDBlLDB4NTYsMHg0 NCwweDU5LDB4ZTgsMHg4MywweGNhfSwKLSsJCQkvKiBSICovCi0rCXsweGM4LDB4ODcsMHhjMiww eDYxLDB4NWIsMHhkMCwweGI5LDB4ZTEsCi0rCSAweGU3LDB4ZjMsMHg4YiwweGQ3LDB4NWIsMHhk NSwweGYxLDB4OGR9Ci0rfTsKLSsKLStzdGF0aWMgdm9pZCBkdW1wKGNvbnN0IHVuc2lnbmVkIGNo YXIgKmIsaW50IG4pCi0rICAgIHsKLSsgICAgd2hpbGUobi0tID4gMCkKLSsJewotKwlwcmludGYo IiAlMDJ4IiwqYisrKTsKLSsJfQotKyAgICB9Ci0rCi0rc3RhdGljIHZvaWQgY29tcGFyZShjb25z dCB1bnNpZ25lZCBjaGFyICpyZXN1bHQsY29uc3QgdW5zaWduZWQgY2hhciAqZXhwZWN0ZWQsCi0r CQkgICAgaW50IG4pCi0rICAgIHsKLSsgICAgaW50IGk7Ci0rCi0rICAgIGZvcihpPTAgOyBpIDwg biA7ICsraSkKLSsJaWYocmVzdWx0W2ldICE9IGV4cGVjdGVkW2ldKQotKwkgICAgewotKwkgICAg cHV0cygiUmFuZG9tIHRlc3QgZmFpbGVkLCBnb3Q6Iik7Ci0rCSAgICBkdW1wKHJlc3VsdCxuKTsK LSsJICAgIHB1dHMoIlxuICAgICAgICAgICAgICAgZXhwZWN0ZWQ6Iik7Ci0rCSAgICBkdW1wKGV4 cGVjdGVkLG4pOwotKwkgICAgcHV0Y2hhcignXG4nKTsKLSsJICAgIEVYSVQoMSk7Ci0rCSAgICB9 Ci0rICAgIH0KLSsKLSsKLStzdGF0aWMgdm9pZCBydW5fdGVzdChjb25zdCB1bnNpZ25lZCBjaGFy ICprZXksIGludCBrZXlsZW4sCi0rCQkJCQkJCWNvbnN0IEFFU19QUk5HX01DVCAqdHYpCi0rICAg IHsKLSsgICAgdW5zaWduZWQgY2hhciBidWZbMTZdLCBkdFsxNl07Ci0rICAgIGludCBpLCBqOwot KyAgICBGSVBTX3g5MzFfcmVzZXQoKTsKLSsgICAgRklQU194OTMxX3Rlc3RfbW9kZSgpOwotKyAg ICBGSVBTX3g5MzFfc2V0X2tleShrZXksIGtleWxlbik7Ci0rICAgIEZJUFNfeDkzMV9zZWVkKHR2 LT5WLCAxNik7Ci0rICAgIG1lbWNweShkdCwgdHYtPkRULCAxNik7Ci0rICAgIGZvciAoaSA9IDA7 IGkgPCAxMDAwMDsgaSsrKQotKwl7Ci0rICAgIAlGSVBTX3g5MzFfc2V0X2R0KGR0KTsKLSsJRklQ U194OTMxX2J5dGVzKGJ1ZiwgMTYpOwotKwkvKiBJbmNyZW1lbnQgRFQgKi8KLSsJZm9yIChqID0g MTU7IGogPj0gMDsgai0tKQotKwkJewotKwkJZHRbal0rKzsKLSsJCWlmIChkdFtqXSkKLSsJCQli cmVhazsKLSsJCX0KLSsJfQotKwotKyAgICBjb21wYXJlKGJ1Zix0di0+UiwgMTYpOwotKyAgICB9 Ci0rCi0raW50IG1haW4oKQotKwl7Ci0rCXJ1bl90ZXN0KGFlc18xMjhfbWN0X2tleSwgMTYsICZh ZXNfMTI4X21jdF90dik7Ci0rCXByaW50ZigiRklQUyBQUk5HIHRlc3QgMSBkb25lXG4iKTsKLSsJ cnVuX3Rlc3QoYWVzXzE5Ml9tY3Rfa2V5LCAyNCwgJmFlc18xOTJfbWN0X3R2KTsKLSsJcHJpbnRm KCJGSVBTIFBSTkcgdGVzdCAyIGRvbmVcbiIpOwotKwlydW5fdGVzdChhZXNfMjU2X21jdF9rZXks IDMyLCAmYWVzXzI1Nl9tY3RfdHYpOwotKwlwcmludGYoIkZJUFMgUFJORyB0ZXN0IDMgZG9uZVxu Iik7Ci0rCXJldHVybiAwOwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4x ai9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5 cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9m aXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMuZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM1LjEwMjMwNjQ5 MSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0 LmMJMjAxNC0xMC0xNiAxMzoxOTozNS4xMDIzMDY0OTEgKzAyMDAKLUBAIC0wLDAgKzEsNDQ0IEBA Ci0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNyBUaGUgT3BlblNT 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 SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwot KwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG5bXSA9Ci0rIlx4MDBceEJCXHhGOFx4MkZc eDA5XHgwNlx4ODJceENFXHg5Q1x4MjNceDM4XHhBQ1x4MkJceDlEXHhBOFx4NzEiCi0rIlx4Rjdc eDM2XHg4RFx4MDdceEVFXHhENFx4MTBceDQzXHhBNFx4NDBceEQ2XHhCNlx4RjBceDc0XHg1NFx4 RjUiCi0rIlx4MUZceEI4XHhERlx4QkFceEFGXHgwM1x4NUNceDAyXHhBQlx4NjFceEVBXHg0OFx4 Q0VceEVCXHg2Rlx4Q0QiCi0rIlx4NDhceDc2XHhFRFx4NTJceDBEXHg2MFx4RTFceEVDXHg0Nlx4 MTlceDcxXHg5RFx4OEFceDVCXHg4Qlx4ODAiCi0rIlx4N0ZceEFGXHhCOFx4RTBceEEzXHhERlx4 QzdceDM3XHg3Mlx4M0VceEU2XHhCNFx4QjdceEQ5XHgzQVx4MjUiCi0rIlx4ODRceEVFXHg2QVx4 NjRceDlEXHgwNlx4MDlceDUzXHg3NFx4ODhceDM0XHhCMlx4NDVceDQ1XHg5OFx4MzkiCi0rIlx4 NEVceEUwXHhBQVx4QjFceDJEXHg3Qlx4NjFceEE1XHgxRlx4NTJceDdBXHg5QVx4NDFceEY2XHhD MVx4NjgiCi0rIlx4N0ZceEUyXHg1M1x4NzJceDk4XHhDQVx4MkFceDhGXHg1OVx4NDZceEY4XHhF NVx4RkRceDA5XHgxRFx4QkQiCi0rIlx4Q0IiOwotKwotK3N0YXRpYyBpbnQgY29ycnVwdF9yc2E7 Ci0rCi0rc3RhdGljIGludCBzZXRyc2FrZXkoUlNBICprZXkpCi0rICAgIHsKLSsgICAgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgZVtdID0gIlx4MTEiOwotKwotKyAgICBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBkW10gPQotKyJceDAwXHhBNVx4REFceEZDXHg1M1x4NDFceEZBXHhGMlx4 ODlceEM0XHhCOVx4ODhceERCXHgzMFx4QzFceENEIgotKyJceEY4XHgzRlx4MzFceDI1XHgxRVx4 MDZceDY4XHhCNFx4MjdceDg0XHg4MVx4MzhceDAxXHg1N1x4OTZceDQxIgotKyJceEIyXHg5NFx4 MTBceEIzXHhDN1x4OTlceDhEXHg2Qlx4QzRceDY1XHg3NFx4NUVceDVDXHgzOVx4MjZceDY5Igot KyJceEQ2XHg4N1x4MERceEEyXHhDMFx4ODJceEE5XHgzOVx4RTNceDdGXHhEQ1x4QjhceDJFXHhD OVx4M0VceERBIgotKyJceEM5XHg3Rlx4RjNceEFEXHg1OVx4NTBceEFDXHhDRlx4QkNceDExXHgx Q1x4NzZceEYxXHhBOVx4NTJceDk0IgotKyJceDQ0XHhFNVx4NkFceEFGXHg2OFx4QzVceDZDXHgw OVx4MkNceEQzXHg4RFx4QzNceEJFXHhGNVx4RDJceDBBIgotKyJceDkzXHg5OVx4MjZceEVEXHg0 Rlx4NzRceEExXHgzRVx4RERceEZCXHhFMVx4QTFceENFXHhDQ1x4NDhceDk0IgotKyJceEFGXHg5 NFx4MjhceEMyXHhCN1x4QjhceDg4XHgzRlx4RTRceDQ2XHgzQVx4NEJceEM4XHg1Qlx4MUNceEIz IgotKyJceEMxIjsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcFtdID0KLSsi XHgwMFx4RUVceENGXHhBRVx4ODFceEIxXHhCOVx4QjNceEM5XHgwOFx4ODFceDBCXHgxMFx4QTFc eEI1XHg2MCIKLSsiXHgwMVx4OTlceEVCXHg5Rlx4NDRceEFFXHhGNFx4RkRceEE0XHg5M1x4Qjhc eDFBXHg5RVx4M0RceDg0XHhGNiIKLSsiXHgzMlx4MTJceDRFXHhGMFx4MjNceDZFXHg1RFx4MUVc eDNCXHg3RVx4MjhceEZBXHhFN1x4QUFceDA0XHgwQSIKLSsiXHgyRFx4NUJceDI1XHgyMVx4NzZc eDQ1XHg5RFx4MUZceDM5XHg3NVx4NDFceEJBXHgyQVx4NThceEZCXHg2NSIKLSsiXHg5OSI7Ci0r Ci0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHFbXSA9Ci0rIlx4MDBceEM5XHg3Rlx4 QjFceEYwXHgyN1x4RjRceDUzXHhGNlx4MzRceDEyXHgzM1x4RUFceEFBXHhEMVx4RDkiCi0rIlx4 MzVceDNGXHg2Q1x4NDJceEQwXHg4OFx4NjZceEIxXHhEMFx4NUFceDBGXHgyMFx4MzVceDAyXHg4 Qlx4OUQiCi0rIlx4ODZceDk4XHg0MFx4QjRceDE2XHg2Nlx4QjRceDJFXHg5Mlx4RUFceDBEXHhB M1x4QjRceDMyXHgwNFx4QjUiCi0rIlx4Q0ZceENFXHgzM1x4NTJceDUyXHg0RFx4MDRceDE2XHhB NVx4QTRceDQxXHhFN1x4MDBceEFGXHg0Nlx4MTUiCi0rIlx4MDMiOwotKwotKyAgICBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBkbXAxW10gPQotKyJceDU0XHg0OVx4NENceEE2XHgzRVx4QkFc eDAzXHgzN1x4RTRceEUyXHg0MFx4MjNceEZDXHhENlx4OUFceDVBIgotKyJceEVCXHgwN1x4RERc eERDXHgwMVx4ODNceEE0XHhEMFx4QUNceDlCXHg1NFx4QjBceDUxXHhGMlx4QjFceDNFIgotKyJc eEQ5XHg0OVx4MDlceDc1XHhFQVx4QjdceDc0XHgxNFx4RkZceDU5XHhDMVx4RjdceDY5XHgyRVx4 OUFceDJFIgotKyJceDIwXHgyQlx4MzhceEZDXHg5MVx4MEFceDQ3XHg0MVx4NzRceEFEXHhDOVx4 M0NceDFGXHg2N1x4QzlceDgxIjsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg ZG1xMVtdID0KLSsiXHg0N1x4MUVceDAyXHg5MFx4RkZceDBBXHhGMFx4NzVceDAzXHg1MVx4Qjdc eEY4XHg3OFx4ODZceDRDXHhBOSIKLSsiXHg2MVx4QURceEJEXHgzQVx4OEFceDdFXHg5OVx4MUNc eDVDXHgwNVx4NTZceEE5XHg0Q1x4MzFceDQ2XHhBNyIKLSsiXHhGOVx4ODBceDNGXHg4Rlx4NkZc eDhBXHhFM1x4NDJceEU5XHgzMVx4RkRceDhBXHhFNFx4N0FceDIyXHgwRCIKLSsiXHgxQlx4OTlc eEE0XHg5NVx4ODRceDk4XHgwN1x4RkVceDM5XHhGOVx4MjRceDVBXHg5OFx4MzZceERBXHgzRCI7 Ci0rICAgIAotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpcW1wW10gPQotKyJceDAw XHhCMFx4NkNceDRGXHhEQVx4QkJceDYzXHgwMVx4MTlceDhEXHgyNlx4NUJceERCXHhBRVx4OTRc eDIzIgotKyJceEIzXHg4MFx4RjJceDcxXHhGN1x4MzRceDUzXHg4OFx4NTBceDkzXHgwN1x4N0Zc eENEXHgzOVx4RTJceDExIgotKyJceDlGXHhDOVx4ODZceDMyXHgxNVx4NEZceDU4XHg4M1x4QjFc eDY3XHhBOVx4NjdceEJGXHg0MFx4MkJceDRFIgotKyJceDlFXHgyRVx4MEZceDk2XHg1Nlx4RTZc eDk4XHhFQVx4MzZceDY2XHhFRFx4RkJceDI1XHg3OVx4ODBceDM5IgotKyJceEY3IjsKLSsKLSsg ICAga2V5LT5uID0gQk5fYmluMmJuKG4sIHNpemVvZihuKS0xLCBrZXktPm4pOwotKyAgICBpZiAo Y29ycnVwdF9yc2EpCi0rCUJOX3NldF9iaXQoa2V5LT5uLCAxMDI0KTsKLSsgICAga2V5LT5lID0g Qk5fYmluMmJuKGUsIHNpemVvZihlKS0xLCBrZXktPmUpOwotKyAgICBrZXktPmQgPSBCTl9iaW4y Ym4oZCwgc2l6ZW9mKGQpLTEsIGtleS0+ZCk7Ci0rICAgIGtleS0+cCA9IEJOX2JpbjJibihwLCBz aXplb2YocCktMSwga2V5LT5wKTsKLSsgICAga2V5LT5xID0gQk5fYmluMmJuKHEsIHNpemVvZihx KS0xLCBrZXktPnEpOwotKyAgICBrZXktPmRtcDEgPSBCTl9iaW4yYm4oZG1wMSwgc2l6ZW9mKGRt cDEpLTEsIGtleS0+ZG1wMSk7Ci0rICAgIGtleS0+ZG1xMSA9IEJOX2JpbjJibihkbXExLCBzaXpl b2YoZG1xMSktMSwga2V5LT5kbXExKTsKLSsgICAga2V5LT5pcW1wID0gQk5fYmluMmJuKGlxbXAs IHNpemVvZihpcW1wKS0xLCBrZXktPmlxbXApOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwot K3ZvaWQgRklQU19jb3JydXB0X3JzYSgpCi0rICAgIHsKLSsgICAgY29ycnVwdF9yc2EgPSAxOwot KyAgICB9Ci0rCi0rLyogS25vd24gQW5zd2VyIFRlc3QgKEtBVCkgZGF0YSBmb3IgdGhlIGFib3Zl IFJTQSBwcml2YXRlIGtleSBzaWduaW5nCi0rICoga2F0X3Ricy4KLSsgKi8KLSsKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBrYXRfdGJzW10gPSAiT3BlblNTTCBGSVBTIDE0MC0yIFB1Ymxp YyBLZXkgUlNBIEtBVCI7Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9Q U1NfU0hBMVtdID0gewotKyAgMHgyRCwgMHhBRiwgMHg2RSwgMHhDMiwgMHg5OCwgMHhGQiwgMHg4 QSwgMHhBMSwgMHhCOSwgMHg0NiwgMHhEQSwgMHgwRiwKLSsgIDB4MDEsIDB4MUUsIDB4MzcsIDB4 OTMsIDB4QzIsIDB4NTUsIDB4MjcsIDB4RTQsIDB4MUQsIDB4RDIsIDB4OTAsIDB4QkIsCi0rICAw eEY0LCAweEJGLCAweDRBLCAweDc0LCAweDM5LCAweDUxLCAweEJCLCAweEU4LCAweDBDLCAweEI3 LCAweEY4LCAweEQzLAotKyAgMHhEMSwgMHhERiwgMHhFNywgMHhCRSwgMHg4MCwgMHgwNSwgMHhD MywgMHhCNSwgMHhDNywgMHg4MywgMHhENSwgMHg0QywKLSsgIDB4N0YsIDB4NDksIDB4RkIsIDB4 M0YsIDB4MjksIDB4OUIsIDB4RTEsIDB4MTIsIDB4NTEsIDB4NjAsIDB4RDAsIDB4QTcsCi0rICAw eDBELCAweEE5LCAweDI4LCAweDU2LCAweDczLCAweEQ5LCAweDA3LCAweEUzLCAweDVFLCAweDNG LCAweDlCLCAweEY1LAotKyAgMHhCNiwgMHhGMywgMHhGMiwgMHg1RSwgMHg3NCwgMHhDOSwgMHg4 MywgMHg4MSwgMHg0NywgMHhGMCwgMHhDNSwgMHg0NSwKLSsgIDB4MEEsIDB4RTksIDB4OEUsIDB4 MzgsIDB4RDcsIDB4MTgsIDB4QzYsIDB4MkEsIDB4MEYsIDB4RjgsIDB4QjcsIDB4MzEsCi0rICAw eEQ2LCAweDU1LCAweEU0LCAweDY2LCAweDc4LCAweDgxLCAweEQ0LCAweEU2LCAweERCLCAweDlG LCAweEJBLCAweEU4LAotKyAgMHgyMywgMHhCNSwgMHg3RiwgMHhEQywgMHgwOCwgMHhFQSwgMHhE NSwgMHgyNiwgMHgxRSwgMHgyMCwgMHgyNSwgMHg4NCwKLSsgIDB4MjYsIDB4QzYsIDB4NzksIDB4 QzksIDB4OUIsIDB4M0QsIDB4N0UsIDB4QTkKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGthdF9SU0FfUFNTX1NIQTIyNFtdID0gewotKyAgMHgzOSwgMHg0QSwgMHg2QSwgMHgy MCwgMHhCQywgMHhFOSwgMHgzMywgMHhFRCwgMHhFRiwgMHhDNSwgMHg1OCwgMHhBNywKLSsgIDB4 RkUsIDB4ODEsIDB4QzQsIDB4MzYsIDB4NTAsIDB4OUEsIDB4MkMsIDB4ODIsIDB4OTgsIDB4MDgs IDB4OTUsIDB4RkEsCi0rICAweEIxLCAweDlFLCAweEQyLCAweDU1LCAweDYxLCAweDg3LCAweDIx LCAweDU5LCAweDg3LCAweDdCLCAweDFGLCAweDU3LAotKyAgMHgzMCwgMHg5RCwgMHgwRCwgMHg0 QSwgMHgwNiwgMHhFQiwgMHg1MiwgMHgzNywgMHg1NSwgMHg1NCwgMHgxQywgMHg4OSwKLSsgIDB4 ODMsIDB4NzUsIDB4NTksIDB4NjUsIDB4NjQsIDB4OTAsIDB4MkUsIDB4MTYsIDB4Q0MsIDB4ODYs IDB4MDUsIDB4RUUsCi0rICAweEIxLCAweEU2LCAweDdCLCAweEJBLCAweDE2LCAweDc1LCAweDBE LCAweDBDLCAweDY0LCAweDBCLCAweEFCLCAweDIyLAotKyAgMHgxNSwgMHg3OCwgMHg2QiwgMHg2 RiwgMHhBNCwgMHhGQiwgMHg3NywgMHg0MCwgMHg2NCwgMHg2MiwgMHhEMSwgMHhCNSwKLSsgIDB4 MzcsIDB4MUUsIDB4RTAsIDB4M0QsIDB4QTgsIDB4RjksIDB4RDIsIDB4QkQsIDB4QUEsIDB4Mzgs IDB4MjQsIDB4NDksCi0rICAweDU4LCAweEQyLCAweDc0LCAweDg1LCAweEY0LCAweEI1LCAweDkz LCAweDhFLCAweEY1LCAweDAzLCAweEVBLCAweDJELAotKyAgMHhDOCwgMHg1MiwgMHhGQSwgMHhD RiwgMHg3RSwgMHgzNSwgMHhCMCwgMHg2QSwgMHhBRiwgMHg5NSwgMHhDMCwgMHgwMCwKLSsgIDB4 NTQsIDB4NzYsIDB4M0QsIDB4MEMsIDB4OUMsIDB4QjIsIDB4RUUsIDB4QzAKLSt9OwotKwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTI1NltdID0gewotKyAgMHg2 RCwgMHgzRCwgMHhCRSwgMHg4RiwgMHg2MCwgMHg2RCwgMHgyNSwgMHgxNCwgMHhGMCwgMHgzMSwg MHhFMywgMHg4OSwKLSsgIDB4MDAsIDB4OTcsIDB4RkEsIDB4OTksIDB4NzEsIDB4MjgsIDB4RTUs IDB4MTAsIDB4MjUsIDB4OUEsIDB4RjMsIDB4OEYsCi0rICAweDdCLCAweEM1LCAweEE4LCAweDRB LCAweDc0LCAweDUxLCAweDM2LCAweEUyLCAweDhELCAweDdELCAweDczLCAweDI4LAotKyAgMHhD MSwgMHg3NywgMHhDNiwgMHgyNywgMHg5NywgMHgwMCwgMHg4QiwgMHgwMCwgMHhBMywgMHg5Niwg MHg3MywgMHg0RSwKLSsgIDB4N0QsIDB4MkUsIDB4MkMsIDB4MzQsIDB4NjgsIDB4OEMsIDB4OEUs IDB4REYsIDB4OUQsIDB4NDksIDB4NDcsIDB4MDUsCi0rICAweEFCLCAweEY1LCAweDAxLCAweEQ2 LCAweDgxLCAweDQ3LCAweDcwLCAweEY1LCAweDFELCAweDZELCAweDI2LCAweEJBLAotKyAgMHgy RiwgMHg3QSwgMHg1NCwgMHg1MywgMHg0RSwgMHhFRCwgMHg3MSwgMHhEOSwgMHg1QSwgMHhGMywg MHhEQSwgMHhCNiwKLSsgIDB4MEIsIDB4NDcsIDB4MzQsIDB4QUYsIDB4OTAsIDB4REMsIDB4Qzgs IDB4RDksIDB4NkYsIDB4NTYsIDB4Q0QsIDB4OUYsCi0rICAweDIxLCAweEI3LCAweDdFLCAweEFE LCAweDdDLCAweDJGLCAweDc1LCAweDUwLCAweDQ3LCAweDEyLCAweEU0LCAweDZELAotKyAgMHg1 RiwgMHhCNywgMHgwMSwgMHhERiwgMHhDMywgMHgxMSwgMHg2QywgMHhBOSwgMHg5RSwgMHg0OSwg MHhCOSwgMHhGNiwKLSsgIDB4NzIsIDB4RjQsIDB4RjYsIDB4RUYsIDB4ODgsIDB4MUUsIDB4MkQs IDB4MUMKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NI QTM4NFtdID0gewotKyAgMHg0MCwgMHhGQiwgMHhBMSwgMHgyMSwgMHhGNCwgMHhCMiwgMHg0MCwg MHg5QSwgMHhCNCwgMHgzMSwgMHhBOCwgMHhGMiwKLSsgIDB4RUMsIDB4MUMsIDB4QzQsIDB4Qzgs IDB4N0MsIDB4MjIsIDB4NjUsIDB4OUMsIDB4NTcsIDB4NDUsIDB4Q0QsIDB4NUUsCi0rICAweDg2 LCAweDAwLCAweEY3LCAweDI1LCAweDc4LCAweERFLCAweERDLCAweDdBLCAweDcxLCAweDQ0LCAw eDlBLCAweENELAotKyAgMHhBQSwgMHgyNSwgMHhGNCwgMHhCMiwgMHhGQywgMHhGMCwgMHg3NSwg MHhEOSwgMHgyRiwgMHg3OCwgMHgyMywgMHg3RiwKLSsgIDB4NkYsIDB4MDIsIDB4RUYsIDB4QzEs IDB4QUYsIDB4QTYsIDB4MjgsIDB4MTYsIDB4MzEsIDB4REMsIDB4NDIsIDB4NkMsCi0rICAweEIy LCAweDQ0LCAweEU1LCAweDRELCAweDY2LCAweEEyLCAweEU2LCAweDcxLCAweEYzLCAweEFDLCAw eDRGLCAweEZCLAotKyAgMHg5MSwgMHhDQSwgMHhGNSwgMHg3MCwgMHhFRiwgMHg2QiwgMHg5RCwg MHhBNCwgMHhFRiwgMHhEOSwgMHgzRCwgMHgyRiwKLSsgIDB4M0EsIDB4QkUsIDB4ODksIDB4Mzgs IDB4NTksIDB4MDEsIDB4QkEsIDB4REEsIDB4MzIsIDB4QUQsIDB4NDIsIDB4ODksCi0rICAweDk4 LCAweDhCLCAweDM5LCAweDQ0LCAweEYwLCAweEZDLCAweDM4LCAweEFDLCAweDg3LCAweDFGLCAw eENBLCAweDZGLAotKyAgMHg0OCwgMHhGNiwgMHhBRSwgMHhENywgMHg0NSwgMHhFRSwgMHhBRSwg MHg4OCwgMHgwRSwgMHg2MCwgMHhGNCwgMHg1NSwKLSsgIDB4NDgsIDB4NDQsIDB4RUUsIDB4MUYs IDB4OTAsIDB4MTgsIDB4NEIsIDB4RjEKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGthdF9SU0FfUFNTX1NIQTUxMltdID0gewotKyAgMHgwNywgMHgxRSwgMHhEOCwgMHhENSwg MHgwNSwgMHhFOCwgMHhFNiwgMHhFNiwgMHg1NywgMHhBRSwgMHg2MywgMHg4QywKLSsgIDB4QzYs IDB4ODMsIDB4QjcsIDB4QTAsIDB4NTksIDB4QkIsIDB4RjIsIDB4QzYsIDB4OEYsIDB4MTIsIDB4 NTMsIDB4OUEsCi0rICAweDlCLCAweDU0LCAweDlFLCAweEIzLCAweEMxLCAweDFELCAweDIzLCAw eDRELCAweDUxLCAweEVELCAweDlFLCAweERELAotKyAgMHg0QiwgMHhGMywgMHg0NiwgMHg5Qiwg MHg2QiwgMHhGNiwgMHg3QywgMHgyNCwgMHg2MCwgMHg3OSwgMHgyMywgMHgzOSwKLSsgIDB4MDEs IDB4MUMsIDB4NTEsIDB4Q0IsIDB4RDgsIDB4RTksIDB4OUEsIDB4MDEsIDB4NjcsIDB4NUYsIDB4 RkUsIDB4RDcsCi0rICAweDdDLCAweEUzLCAweDdGLCAweEVELCAweERCLCAweDg3LCAweEJCLCAw eEYwLCAweDNELCAweDc4LCAweDU1LCAweDYxLAotKyAgMHg1NywgMHhFMywgMHgwRiwgMHhFMywg MHhEMiwgMHg5RCwgMHgwQywgMHgyQSwgMHgyMCwgMHhCMCwgMHg4NSwgMHgxMywKLSsgIDB4QzUs IDB4NDcsIDB4MzQsIDB4MEQsIDB4MzIsIDB4MTUsIDB4QzgsIDB4QUUsIDB4OUEsIDB4NkEsIDB4 MzksIDB4NjMsCi0rICAweDJELCAweDYwLCAweEY1LCAweDRDLCAweERGLCAweDhBLCAweDQ4LCAw eDRCLCAweEJGLCAweEY0LCAweEE4LCAweEZFLAotKyAgMHg3NiwgMHhGMiwgMHgzMiwgMHgxQiwg MHg5QywgMHg3QywgMHhDQSwgMHhGRSwgMHg3RiwgMHg4MCwgMHhDMiwgMHg4OCwKLSsgIDB4NUMs IDB4OTcsIDB4NzAsIDB4QjQsIDB4MjYsIDB4QzksIDB4MTQsIDB4OEIKLSt9OwotKwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMVtdID0gewotKyAgMHg3MSwgMHhFRSwg MHgxQSwgMHhDMCwgMHhGRSwgMHgwMSwgMHg5MywgMHg1NCwgMHg3OSwgMHg1QywgMHhGMiwgMHg0 QywKLSsgIDB4NEEsIDB4RkQsIDB4MUEsIDB4MDUsIDB4OEYsIDB4NjQsIDB4QjEsIDB4NkQsIDB4 NjEsIDB4MzMsIDB4OEQsIDB4OUIsCi0rICAweEU3LCAweEZELCAweDYwLCAweEEzLCAweDgzLCAw eEI1LCAweEEzLCAweDUxLCAweDU1LCAweDc3LCAweDkwLCAweENGLAotKyAgMHhEQywgMHgyMiwg MHgzNywgMHg4RSwgMHhEMCwgMHhFMSwgMHhBRSwgMHgwOSwgMHhFMywgMHgzRCwgMHgxRSwgMHhG OCwKLSsgIDB4ODAsIDB4RDEsIDB4OEIsIDB4QzIsIDB4RUMsIDB4MEEsIDB4RDcsIDB4NkIsIDB4 ODgsIDB4OEIsIDB4OEIsIDB4QTEsCi0rICAweDIwLCAweDIyLCAweEJFLCAweDU5LCAweDVCLCAw eEUwLCAweDIzLCAweDI0LCAweEExLCAweDQ5LCAweDMwLCAweEJBLAotKyAgMHhBOSwgMHg5RSwg MHhFOCwgMHhCMSwgMHg4QSwgMHg2MiwgMHgxNiwgMHhCRiwgMHg0RSwgMHhDQSwgMHgyRSwgMHg0 RSwKLSsgIDB4QkMsIDB4MjksIDB4QTgsIDB4NjcsIDB4MTMsIDB4QjcsIDB4OUYsIDB4MUQsIDB4 MDQsIDB4NDQsIDB4RTUsIDB4NUYsCi0rICAweDM1LCAweDA3LCAweDExLCAweEJDLCAweEVELCAw eDE5LCAweDM3LCAweDIxLCAweENGLCAweDIzLCAweDQ4LCAweDFGLAotKyAgMHg3MiwgMHgwNSwg MHhERSwgMHhFNiwgMHhFOCwgMHg3RiwgMHgzMywgMHg4QSwgMHg3NiwgMHg0QiwgMHgyRiwgMHg5 NSwKLSsgIDB4REYsIDB4RjEsIDB4NUYsIDB4ODQsIDB4ODAsIDB4RDksIDB4NDYsIDB4QjQKLSt9 OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMjI0W10gPSB7Ci0r ICAweDYyLCAweEFBLCAweDc5LCAweEE5LCAweDE4LCAweDBFLCAweDVGLCAweDhDLCAweEJCLCAw eEI3LCAweDE1LCAweEY5LAotKyAgMHgyNSwgMHhCQiwgMHhGQSwgMHhENCwgMHgzQSwgMHgzNCwg MHhFRCwgMHg5RSwgMHhBMCwgMHhBOSwgMHgxOCwgMHg4RCwKLSsgIDB4NUIsIDB4NTUsIDB4OUEs IDB4N0UsIDB4MUUsIDB4MDgsIDB4MDgsIDB4NjAsIDB4QzUsIDB4MUEsIDB4QzUsIDB4ODksCi0r ICAweDA4LCAweEUyLCAweDFCLCAweEJELCAweDYyLCAweDUwLCAweDE3LCAweDc2LCAweDMwLCAw eDJDLCAweDlFLCAweENELAotKyAgMHhBNCwgMHgwMiwgMHhBRCwgMHhCMSwgMHg2RCwgMHg0NCwg MHg2RCwgMHhENSwgMHhDNiwgMHg0NSwgMHg0MSwgMHhFNSwKLSsgIDB4RUUsIDB4MUYsIDB4OEQs IDB4N0UsIDB4MDgsIDB4MTYsIDB4QTYsIDB4RTEsIDB4NUUsIDB4MEIsIDB4QTksIDB4Q0MsCi0r ICAweERCLCAweDU5LCAweDU1LCAweDg3LCAweDA5LCAweDI1LCAweDcwLCAweDg2LCAweDg0LCAw eDAyLCAweEM2LCAweDNCLAotKyAgMHgwQiwgMHg0NCwgMHg0QywgMHg0NiwgMHg5NSwgMHhGNCwg MHhGOCwgMHg1QSwgMHg5MSwgMHgyOCwgMHgzRSwgMHhCMiwKLSsgIDB4NTgsIDB4MkUsIDB4MDYs IDB4NDUsIDB4NDksIDB4RTAsIDB4OTIsIDB4RTIsIDB4QzAsIDB4NjYsIDB4RTYsIDB4MzUsCi0r ICAweEQ5LCAweDc5LCAweDdGLCAweDE3LCAweDVFLCAweDAyLCAweDczLCAweDA0LCAweDc3LCAw eDgyLCAweEU2LCAweERDLAotKyAgMHg0MCwgMHgyMSwgMHg4OSwgMHg4QiwgMHgzNywgMHgzRSwg MHgxRSwgMHg4RAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9T SEEyNTZbXSA9IHsKLSsgIDB4MEQsIDB4NTUsIDB4RTIsIDB4QUEsIDB4ODEsIDB4REIsIDB4OEUs IDB4ODIsIDB4MDUsIDB4MTcsIDB4QTUsIDB4MjMsCi0rICAweEU3LCAweDNCLCAweDFELCAweEFG LCAweEZCLCAweDhDLCAweEQwLCAweDgxLCAweDIwLCAweDdCLCAweEFBLCAweDIzLAotKyAgMHg5 MiwgMHg4NywgMHg4QywgMHhEMSwgMHg1MywgMHg4NSwgMHgxNiwgMHhEQywgMHhCRSwgMHhBRCwg MHg2RiwgMHgzNSwKLSsgIDB4OTgsIDB4MkQsIDB4NjksIDB4ODQsIDB4QkYsIDB4RDksIDB4OEEs IDB4MDEsIDB4MTcsIDB4NTgsIDB4QjIsIDB4NkUsCi0rICAweDJDLCAweDQ0LCAweDlCLCAweDkw LCAweEYxLCAweEZCLCAweDUxLCAweEU4LCAweDZBLCAweDkwLCAweDJELCAweDE4LAotKyAgMHgw RSwgMHhDMCwgMHg5MCwgMHgxMCwgMHgyNCwgMHhBOSwgMHgxRCwgMHhCMywgMHg1OCwgMHg3QSwg MHg5MSwgMHgzMCwKLSsgIDB4QkUsIDB4MjIsIDB4QzcsIDB4RDMsIDB4RUMsIDB4QzMsIDB4MDks IDB4NUQsIDB4QkYsIDB4RTIsIDB4ODAsIDB4M0EsCi0rICAweDdDLCAweDg1LCAweEI0LCAweEJD LCAweEQxLCAweEU5LCAweEYwLCAweDVDLCAweERFLCAweDgxLCAweEE2LCAweDM4LAotKyAgMHhC OCwgMHg0MiwgMHhCQiwgMHg4NiwgMHhDNSwgMHg5RCwgMHhDRSwgMHg3QywgMHgyQywgMHhFRSwg MHhEMSwgMHhEQSwKLSsgIDB4MjcsIDB4NDgsIDB4MkIsIDB4RjUsIDB4QUIsIDB4QjksIDB4Rjcs IDB4ODAsIDB4RDEsIDB4OTAsIDB4MjcsIDB4OTAsCi0rICAweEJELCAweDQ0LCAweDk3LCAweDYw LCAweENELCAweDU3LCAweEMwLCAweDdBCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBrYXRfUlNBX1NIQTM4NFtdID0gewotKyAgMHgxRCwgMHhFMywgMHg2QSwgMHhERCwgMHgy NywgMHg0QywgMHhDMCwgMHhBNSwgMHgyNywgMHhFRiwgMHhFNiwgMHgxRiwKLSsgIDB4RDIsIDB4 OTEsIDB4NjgsIDB4NTksIDB4MDQsIDB4QUUsIDB4QkQsIDB4OTksIDB4NjMsIDB4NTYsIDB4NDcs IDB4QzcsCi0rICAweDZGLCAweDIyLCAweDE2LCAweDQ4LCAweEQwLCAweEY5LCAweDE4LCAweEE5 LCAweENBLCAweEZBLCAweDVELCAweDVDLAotKyAgMHhBNywgMHg2NSwgMHg1MiwgMHg4QSwgMHhD OCwgMHg0NCwgMHg3RSwgMHg4NiwgMHg1RCwgMHhBOSwgMHhBNiwgMHg1NSwKLSsgIDB4NjUsIDB4 M0UsIDB4RDksIDB4MkQsIDB4MDIsIDB4MzgsIDB4QTgsIDB4NzksIDB4MjgsIDB4N0YsIDB4QjYs IDB4Q0YsCi0rICAweDgyLCAweERELCAweDdFLCAweDU1LCAweEUxLCAweEIxLCAweEJDLCAweEUy LCAweDE5LCAweDJCLCAweDMwLCAweEMyLAotKyAgMHgxQiwgMHgyQiwgMHhCMCwgMHg4MiwgMHg0 NiwgMHhBQywgMHg0QiwgMHhEMSwgMHhFMiwgMHg3RCwgMHhFQiwgMHg4QywKLSsgIDB4RkYsIDB4 OTUsIDB4RTksIDB4NkEsIDB4MUMsIDB4M0QsIDB4NEQsIDB4QkYsIDB4OEYsIDB4OEIsIDB4OUMs IDB4Q0QsCi0rICAweEVBLCAweDg1LCAweEVFLCAweDAwLCAweERDLCAweDFDLCAweEE3LCAweEVC LCAweEQwLCAweDhGLCAweDk5LCAweEYxLAotKyAgMHgxNiwgMHgyOCwgMHgyNCwgMHg2NCwgMHgw NCwgMHgzOSwgMHgyRCwgMHg1OCwgMHgxRSwgMHgzNywgMHhEQywgMHgwNCwKLSsgIDB4QkQsIDB4 MzEsIDB4QTIsIDB4MkYsIDB4QjMsIDB4MzUsIDB4NTYsIDB4QkYKLSt9OwotKwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBNTEyW10gPSB7Ci0rICAweDY5LCAweDUyLCAw eDFCLCAweDUxLCAweDVFLCAweDA2LCAweENBLCAweDlCLCAweDE2LCAweDUxLCAweDVELCAweENG LAotKyAgMHg0OSwgMHgyNSwgMHg0QSwgMHhBMSwgMHg2QSwgMHg3NywgMHg0QywgMHgzNiwgMHg0 MCwgMHhGOCwgMHhCMiwgMHg5QSwKLSsgIDB4MTUsIDB4RUEsIDB4NUMsIDB4RTUsIDB4RTYsIDB4 ODIsIDB4RTAsIDB4ODYsIDB4ODIsIDB4NkIsIDB4MzIsIDB4RjEsCi0rICAweDA0LCAweEMxLCAw eDVBLCAweDFBLCAweEVELCAweDFFLCAweDlBLCAweEI2LCAweDRDLCAweDU0LCAweDlGLCAweEQ4 LAotKyAgMHg4RCwgMHhDQywgMHhBQywgMHg4QSwgMHhCQiwgMHg5QywgMHg4MiwgMHgzRiwgMHhB NiwgMHg1MywgMHg2MiwgMHhCNSwKLSsgIDB4ODAsIDB4RTIsIDB4QkMsIDB4REQsIDB4NjcsIDB4 MkIsIDB4RDksIDB4M0YsIDB4RTQsIDB4NzUsIDB4OTIsIDB4NkIsCi0rICAweEFGLCAweDYyLCAw eDdDLCAweDUyLCAweEYwLCAweEVFLCAweDMzLCAweERGLCAweDFCLCAweDFELCAweDQ3LCAweEU2 LAotKyAgMHg1OSwgMHg1NiwgMHhBNSwgMHhCOSwgMHg1QywgMHhFNiwgMHg3NywgMHg3OCwgMHgx NiwgMHg2MywgMHg4NCwgMHgwNSwKLSsgIDB4NkYsIDB4MEUsIDB4MkIsIDB4MzEsIDB4OUQsIDB4 RjcsIDB4N0YsIDB4QjIsIDB4NjQsIDB4NzEsIDB4RTAsIDB4MkQsCi0rICAweDNFLCAweDYyLCAw eENFLCAweEI1LCAweDNGLCAweDg4LCAweERGLCAweDJELCAweEFCLCAweDk4LCAweDY1LCAweDkx LAotKyAgMHhERiwgMHg3MCwgMHgxNCwgMHhBNSwgMHgzRiwgMHgzNiwgMHhBQiwgMHg4NAotK307 Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTFbXSA9IHsK LSsgIDB4ODYsIDB4QjQsIDB4MTgsIDB4QkEsIDB4RDEsIDB4ODAsIDB4QjYsIDB4N0MsIDB4NDIs IDB4NDUsIDB4NEQsIDB4REYsCi0rICAweEU5LCAweDJELCAweEUxLCAweDgzLCAweDVGLCAweEI1 LCAweDJGLCAweEM5LCAweENELCAweEM0LCAweEIyLCAweDc1LAotKyAgMHg4MCwgMHhBNCwgMHhG MSwgMHg0QSwgMHhFNywgMHg4MywgMHgxMiwgMHgxRSwgMHgxRSwgMHgxNCwgMHhCOCwgMHhBQywK LSsgIDB4MzUsIDB4RTIsIDB4QUEsIDB4MEIsIDB4NUMsIDB4RjgsIDB4MzgsIDB4NEQsIDB4MDQs IDB4RUUsIDB4QTksIDB4OTcsCi0rICAweDcwLCAweEZCLCAweDVFLCAweEU3LCAweEI3LCAweEUz LCAweDYyLCAweDIzLCAweDRCLCAweDM4LCAweEJFLCAweEQ2LAotKyAgMHg1MywgMHgxNSwgMHhG NywgMHhERiwgMHg4NywgMHhCNCwgMHgwRSwgMHhDQywgMHhCMSwgMHgxQSwgMHgxMSwgMHgxOSwK LSsgIDB4RUUsIDB4NTEsIDB4Q0MsIDB4OTIsIDB4REQsIDB4QkMsIDB4NjMsIDB4MjksIDB4NjMs IDB4MEMsIDB4NTksIDB4RDcsCi0rICAweDZGLCAweDRDLCAweDNDLCAweDM3LCAweDVCLCAweDM3 LCAweDAzLCAweDYxLCAweDdELCAweDI0LCAweDFDLCAweDk5LAotKyAgMHg0OCwgMHhBRiwgMHg4 MiwgMHhGRSwgMHgzMiwgMHg0MSwgMHg5QiwgMHhCMiwgMHhEQiwgMHhFQSwgMHhFRCwgMHg3NiwK LSsgIDB4OEUsIDB4NkUsIDB4Q0EsIDB4N0UsIDB4NEUsIDB4MTQsIDB4QkEsIDB4MzAsIDB4ODQs IDB4MUMsIDB4QjMsIDB4NjcsCi0rICAweEEzLCAweDI5LCAweDgwLCAweDcwLCAweDU0LCAweDY4 LCAweDdELCAweDQ5Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNB X1g5MzFfU0hBMjU2W10gPSB7Ci0rICAweDdFLCAweEEyLCAweDc3LCAweEZFLCAweEI4LCAweDU0 LCAweDhBLCAweEM3LCAweDdGLCAweDY0LCAweDU0LCAweDg5LAotKyAgMHhFNSwgMHg1MiwgMHgx NSwgMHg4RSwgMHg1MiwgMHg5NiwgMHg0RSwgMHhBNiwgMHg1OCwgMHg5MiwgMHgxQywgMHhERCwK LSsgIDB4RUEsIDB4QTIsIDB4MkQsIDB4NUMsIDB4RDEsIDB4NjIsIDB4MDAsIDB4NDksIDB4MDUs IDB4OTUsIDB4NzMsIDB4Q0YsCi0rICAweDE2LCAweDc2LCAweDY4LCAweEY2LCAweEM2LCAweDVF LCAweDgwLCAweEI4LCAweEI4LCAweDdCLCAweEM4LCAweDlCLAotKyAgMHhDNiwgMHg1MywgMHg4 OCwgMHgyNiwgMHgyMCwgMHg4OCwgMHg3MywgMHhCNiwgMHgxMywgMHhCOCwgMHhGMCwgMHg0QiwK LSsgIDB4MDAsIDB4ODUsIDB4RjMsIDB4REQsIDB4MDcsIDB4NTAsIDB4RUIsIDB4MjAsIDB4QzQs IDB4MzgsIDB4MEUsIDB4OTgsCi0rICAweEFELCAweDRFLCAweDQ5LCAweDJDLCAweEQ3LCAweDY1 LCAweEE1LCAweDE5LCAweDBFLCAweDU5LCAweDAxLCAweEVDLAotKyAgMHg3RSwgMHg3NSwgMHg4 OSwgMHg2OSwgMHgyRSwgMHg2MywgMHg3NiwgMHg4NSwgMHg0NiwgMHg4RCwgMHhBMCwgMHg4QywK LSsgIDB4MzMsIDB4MUQsIDB4ODIsIDB4OEMsIDB4MDMsIDB4RUEsIDB4NjksIDB4ODgsIDB4MzUs IDB4QTEsIDB4NDIsIDB4QkQsCi0rICAweDIxLCAweEVELCAweDhELCAweEJDLCAweEJDLCAweERC LCAweDMwLCAweEZGLCAweDg2LCAweEYwLCAweDVCLCAweERDLAotKyAgMHhFMywgMHhFMiwgMHhF OCwgMHgwQSwgMHgwQSwgMHgyOSwgMHg5NCwgMHg4MAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTM4NFtdID0gewotKyAgMHg1QywgMHg3RCwgMHg5 NiwgMHgzNSwgMHhFQywgMHg3RSwgMHgxMSwgMHgzOCwgMHhCQiwgMHg3QiwgMHhFQywgMHg3QiwK LSsgIDB4RjIsIDB4ODIsIDB4OEUsIDB4OTksIDB4QkQsIDB4RUYsIDB4RDgsIDB4QUUsIDB4RDcs IDB4MzksIDB4MzcsIDB4Q0IsCi0rICAweEU2LCAweDRGLCAweDVFLCAweDBBLCAweDEzLCAweEU0 LCAweDJFLCAweDQwLCAweEI5LCAweEJFLCAweDJFLCAweEUzLAotKyAgMHhFRiwgMHg3OCwgMHg4 MywgMHgxOCwgMHg0NCwgMHgzNSwgMHg5QywgMHg4RSwgMHhENywgMHg0QSwgMHg2MywgMHhGNiwK LSsgIDB4NTcsIDB4QzIsIDB4QjAsIDB4MDgsIDB4NTEsIDB4NzMsIDB4Q0YsIDB4Q0EsIDB4OTks IDB4NjYsIDB4RUUsIDB4MzEsCi0rICAweEQ4LCAweDY5LCAweEU5LCAweEFCLCAweDEzLCAweDI3 LCAweDdCLCAweDQxLCAweDFFLCAweDZELCAweDhELCAweEYxLAotKyAgMHgzRSwgMHg5QywgMHgz NSwgMHg5NSwgMHg1OCwgMHhERCwgMHgyQiwgMHhENSwgMHhBMCwgMHg2MCwgMHg0MSwgMHg3OSwK LSsgIDB4MjQsIDB4MjIsIDB4RTQsIDB4QjcsIDB4QkYsIDB4NDcsIDB4NTMsIDB4RjYsIDB4MzQs IDB4RDUsIDB4N0MsIDB4RkYsCi0rICAweDBFLCAweDA5LCAweEVFLCAweDJFLCAweEUyLCAweDM3 LCAweEI5LCAweERFLCAweEM1LCAweDEyLCAweDQ0LCAweDM1LAotKyAgMHhFRiwgMHgwMSwgMHhF NiwgMHg1RSwgMHgzOSwgMHgzMSwgMHgyRCwgMHg3MSwgMHhBNSwgMHhEQywgMHhDNiwgMHg2RCwK LSsgIDB4RTIsIDB4Q0QsIDB4ODUsIDB4REIsIDB4NzMsIDB4ODIsIDB4NjUsIDB4MjgKLSt9Owot KwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEE1MTJbXSA9IHsK LSsgIDB4QTYsIDB4NjUsIDB4QTIsIDB4NzcsIDB4NEYsIDB4QjMsIDB4ODYsIDB4Q0IsIDB4NjQs IDB4M0EsIDB4QzEsIDB4NjMsCi0rICAweEZDLCAweEExLCAweEFBLCAweENCLCAweDlCLCAweDc5 LCAweERELCAweDRCLCAweEUxLCAweEQ5LCAweERBLCAweEFDLAotKyAgMHhFNywgMHg0NywgMHgw OSwgMHhCMiwgMHgxMSwgMHg0QiwgMHg4QSwgMHhBQSwgMHgwNSwgMHg5RSwgMHg3NywgMHhENywK LSsgIDB4M0EsIDB4QkQsIDB4NUUsIDB4NTMsIDB4MDksIDB4NEEsIDB4RTYsIDB4MEYsIDB4NUUs IDB4RjksIDB4MTQsIDB4MjgsCi0rICAweEEwLCAweDk5LCAweDc0LCAweDY0LCAweDcwLCAweDRF LCAweEYyLCAweEUzLCAweEZBLCAweEM3LCAweEY4LCAweEM1LAotKyAgMHg2RSwgMHgyQiwgMHg3 OSwgMHg5NiwgMHgwRCwgMHgwQywgMHhDOCwgMHgxMCwgMHgzNCwgMHg1MywgMHhEMiwgMHhBRiwK LSsgIDB4MTcsIDB4MEUsIDB4RTAsIDB4QkYsIDB4NzksIDB4RjYsIDB4MDQsIDB4NzIsIDB4MTAs IDB4RTAsIDB4RjYsIDB4RDAsCi0rICAweENFLCAweDhBLCAweDZGLCAweEExLCAweDk1LCAweDg5 LCAweEJGLCAweDU4LCAweDhGLCAweDQ2LCAweDVGLCAweDA5LAotKyAgMHg5RiwgMHgwOSwgMHhD QSwgMHg4NCwgMHgxNSwgMHg4NSwgMHhFMCwgMHhFRCwgMHgwNCwgMHgyRCwgMHhGQiwgMHg3QywK LSsgIDB4MzYsIDB4MzUsIDB4MjEsIDB4MzEsIDB4QzMsIDB4RkQsIDB4OTIsIDB4NDIsIDB4MTEs IDB4MzAsIDB4NzEsIDB4MUIsCi0rICAweDYwLCAweDgzLCAweDE4LCAweDg4LCAweEEzLCAweEY1 LCAweDU5LCAweEMzCi0rfTsKLSsKLSsKLStpbnQgRklQU19zZWxmdGVzdF9yc2EoKQotKwl7Ci0r CWludCByZXQgPSAwOwotKwlSU0EgKmtleTsKLSsJRVZQX1BLRVkgKnBrID0gTlVMTDsKLSsKLSsJ aWYgKChrZXk9UlNBX25ldygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCXNldHJzYWtleShr ZXkpOwotKwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0r Ci0rCUVWUF9QS0VZX2Fzc2lnbl9SU0EocGssIGtleSk7Ci0rCi0rCWlmICghZmlwc19wa2V5X3Np Z25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRf UlNBX1NIQTEsIHNpemVvZihrYXRfUlNBX1NIQTEpLAotKwkJCQlFVlBfc2hhMSgpLCBFVlBfTURf Q1RYX0ZMQUdfUEFEX1BLQ1MxLAotKwkJCQkiUlNBIFNIQTEgUEtDUyMxIikpCi0rCQlnb3RvIGVy cjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihr YXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfU0hBMjI0LCBzaXplb2Yoa2F0X1JTQV9TSEEyMjQp LAotKwkJCQlFVlBfc2hhMjI0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCi0rCQkJCSJS U0EgU0hBMjI0IFBLQ1MjMSIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25h dHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNB X1NIQTI1Niwgc2l6ZW9mKGthdF9SU0FfU0hBMjU2KSwKLSsJCQkJRVZQX3NoYTI1NigpLCBFVlBf TURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAotKwkJCQkiUlNBIFNIQTI1NiBQS0NTIzEiKSkKLSsJCWdv dG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6 ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9TSEEzODQsIHNpemVvZihrYXRfUlNBX1NI QTM4NCksCi0rCQkJCUVWUF9zaGEzODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsJ CQkJIlJTQSBTSEEzODQgUEtDUyMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlf c2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWth dF9SU0FfU0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9TSEE1MTIpLAotKwkJCQlFVlBfc2hhNTEyKCks IEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCi0rCQkJCSJSU0EgU0hBNTEyIFBLQ1MjMSIpKQot KwkJZ290byBlcnI7Ci0rCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRf dGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1BTU19TSEExLCBzaXplb2Yo a2F0X1JTQV9QU1NfU0hBMSksCi0rCQkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURf UFNTLAotKwkJCQkiUlNBIFNIQTEgUFNTIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3Br ZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJ CWthdF9SU0FfUFNTX1NIQTIyNCwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTIyNCksCi0rCQkJCUVW UF9zaGEyMjQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCi0rCQkJCSJSU0EgU0hBMjI0IFBT UyIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBr YXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1BTU19TSEEyNTYsIHNp emVvZihrYXRfUlNBX1BTU19TSEEyNTYpLAotKwkJCQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhf RkxBR19QQURfUFNTLAotKwkJCQkiUlNBIFNIQTI1NiBQU1MiKSkKLSsJCWdvdG8gZXJyOwotKwlp ZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMp IC0gMSwKLSsJCQkJa2F0X1JTQV9QU1NfU0hBMzg0LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMzg0 KSwKLSsJCQkJRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKLSsJCQkJIlJT QSBTSEEzODQgUFNTIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJl X3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfUFNT X1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTUxMiksCi0rCQkJCUVWUF9zaGE1MTIoKSwg RVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCi0rCQkJCSJSU0EgU0hBNTEyIFBTUyIpKQotKwkJZ290 byBlcnI7Ci0rCi0rCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJz LCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCWthdF9SU0FfWDkzMV9TSEExLCBzaXplb2Yoa2F0 X1JTQV9YOTMxX1NIQTEpLAotKwkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkz MSwKLSsJCQkiUlNBIFNIQTEgWDkzMSIpKQotKwkJZ290byBlcnI7Ci0rCS8qIE5COiBTSEEyMjQg bm90IHN1cHBvcnRlZCBpbiBYOS4zMSAqLwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVz dChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQlrYXRfUlNBX1g5MzFfU0hB MjU2LCBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTI1NiksCi0rCQkJRVZQX3NoYTI1NigpLCBFVlBf TURfQ1RYX0ZMQUdfUEFEX1g5MzEsCi0rCQkJIlJTQSBTSEEyNTYgWDkzMSIpKQotKwkJZ290byBl cnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yo a2F0X3RicykgLSAxLAotKwkJCWthdF9SU0FfWDkzMV9TSEEzODQsIHNpemVvZihrYXRfUlNBX1g5 MzFfU0hBMzg0KSwKLSsJCQlFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwK LSsJCQkiUlNBIFNIQTM4NCBYOTMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlf c2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJa2F0 X1JTQV9YOTMxX1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEE1MTIpLAotKwkJCUVWUF9z aGE1MTIoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAotKwkJCSJSU0EgU0hBNTEyIFg5MzEi KSkKLSsJCWdvdG8gZXJyOwotKwotKwotKwlyZXQgPSAxOwotKwotKwllcnI6Ci0rCWlmIChwaykK LSsJCUVWUF9QS0VZX2ZyZWUocGspOwotKwllbHNlIGlmIChrZXkpCi0rCQlSU0FfZnJlZShrZXkp OwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rI2VuZGlmIC8qIGRlZiBPUEVOU1NMX0ZJUFMgKi8K LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMuZmlw cyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jCi0tLS0gb3BlbnNz bC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYy5maXBzCTIwMTQtMTAtMTYgMTM6 MTk6MzUuMTAyMzA2NDkxICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlw c19yc2FfeDkzMWcuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjEwMjMwNjQ5MSArMDIwMAotQEAgLTAs MCArMSwyODIgQEAKLSsvKiBjcnlwdG8vcnNhL3JzYV9nZW4uYyAqLwotKy8qIENvcHlyaWdodCAo QykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQotKyAqIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0 aW9uIHdyaXR0ZW4KLSsgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCi0rICog VGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRz Y2FwZXMgU1NMLgotKyAqIAotKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFs IGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotKyAqIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFw cGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0 LCBSU0EsCi0rICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2Rl LiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCi0rICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1 dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotKyAqIGV4Y2VwdCB0 aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqIAot KyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHly aWdodCBub3RpY2VzIGluCi0rICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgotKyAq IElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQg YmUgZ2l2ZW4gYXR0cmlidXRpb24KLSsgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0 aGUgbGlicmFyeSB1c2VkLgotKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVh bCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgotKyAqIGluIGRvY3VtZW50YXRpb24gKG9u bGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgotKyAqIAotKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKLSsgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu Ci0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0rICogICAgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K LSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig dXNlIG9mIHRoaXMgc29mdHdhcmUKLSsgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh Y2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFw aGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSsgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29m dC5jb20pIgotKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQg aWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQotKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5v dCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBX aW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAotKyAq ICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVk ZSBhbiBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKLSsgKiAKLSsg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAot KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0rICogQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUKLSsgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0rICogT1IgU0VS VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSsgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0rICog T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ T1NTSUJJTElUWSBPRgotKyAqIFNVQ0ggREFNQUdFLgotKyAqIAotKyAqIFRoZSBsaWNlbmNlIGFu ZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9u IG9yCi0rICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUu IHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0rICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5v dGhlciBkaXN0cmlidXRpb24gbGljZW5jZQotKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMg TGljZW5jZS5dCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0cmlu Zy5oPgotKyNpbmNsdWRlIDx0aW1lLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKwotK2V4dGVybiBpbnQg Zmlwc19jaGVja19yc2EoUlNBICpyc2EpOwotKyNlbmRpZgotKwotKy8qIFg5LjMxIFJTQSBrZXkg ZGVyaXZhdGlvbiBhbmQgZ2VuZXJhdGlvbiAqLwotKwotK2ludCBSU0FfWDkzMV9kZXJpdmVfZXgo UlNBICpyc2EsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsIEJJR05VTSAqcTEsIEJJR05VTSAqcTIs Ci0rCQkJY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLCBjb25zdCBCSUdOVU0g KlhwLAotKwkJCWNvbnN0IEJJR05VTSAqWHExLCBjb25zdCBCSUdOVU0gKlhxMiwgY29uc3QgQklH TlVNICpYcSwKLSsJCQljb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYikKLSsJewotKwlCSUdO VU0gKnIwPU5VTEwsKnIxPU5VTEwsKnIyPU5VTEwsKnIzPU5VTEw7Ci0rCUJOX0NUWCAqY3R4PU5V TEwsKmN0eDI9TlVMTDsKLSsKLSsJaWYgKCFyc2EpIAotKwkJZ290byBlcnI7Ci0rCi0rCWN0eCA9 IEJOX0NUWF9uZXcoKTsKLSsJaWYgKCFjdHgpIAotKwkJZ290byBlcnI7Ci0rCUJOX0NUWF9zdGFy dChjdHgpOwotKwotKwlyMCA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJcjEgPSBCTl9DVFhfZ2V0KGN0 eCk7Ci0rCXIyID0gQk5fQ1RYX2dldChjdHgpOwotKwlyMyA9IEJOX0NUWF9nZXQoY3R4KTsKLSsK LSsJaWYgKHIzID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFyc2EtPmUpCi0rCQl7Ci0r CQlyc2EtPmUgPSBCTl9kdXAoZSk7Ci0rCQlpZiAoIXJzYS0+ZSkKLSsJCQlnb3RvIGVycjsKLSsJ CX0KLSsJZWxzZQotKwkJZSA9IHJzYS0+ZTsKLSsKLSsJLyogSWYgbm90IGFsbCBwYXJhbWV0ZXJz IHByZXNlbnQgb25seSBjYWxjdWxhdGUgd2hhdCB3ZSBjYW4uCi0rCSAqIFRoaXMgYWxsb3dzIHRl c3QgcHJvZ3JhbXMgdG8gb3V0cHV0IHNlbGVjdGl2ZSBwYXJhbWV0ZXJzLgotKwkgKi8KLSsKLSsJ aWYgKFhwICYmICFyc2EtPnApCi0rCQl7Ci0rCQlyc2EtPnAgPSBCTl9uZXcoKTsKLSsJCWlmICgh cnNhLT5wKQotKwkJCWdvdG8gZXJyOwotKwotKwkJaWYgKCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9l eChyc2EtPnAsIHAxLCBwMiwKLSsJCQkJCVhwLCBYcDEsIFhwMiwgZSwgY3R4LCBjYikpCi0rCQkJ Z290byBlcnI7Ci0rCQl9Ci0rCi0rCWlmIChYcSAmJiAhcnNhLT5xKQotKwkJewotKwkJcnNhLT5x ID0gQk5fbmV3KCk7Ci0rCQlpZiAoIXJzYS0+cSkKLSsJCQlnb3RvIGVycjsKLSsJCWlmICghQk5f WDkzMV9kZXJpdmVfcHJpbWVfZXgocnNhLT5xLCBxMSwgcTIsCi0rCQkJCQlYcSwgWHExLCBYcTIs IGUsIGN0eCwgY2IpKQotKwkJCWdvdG8gZXJyOwotKwkJfQotKwotKwlpZiAoIXJzYS0+cCB8fCAh cnNhLT5xKQotKwkJewotKwkJQk5fQ1RYX2VuZChjdHgpOwotKwkJQk5fQ1RYX2ZyZWUoY3R4KTsK LSsJCXJldHVybiAyOwotKwkJfQotKwotKwkvKiBTaW5jZSBib3RoIHByaW1lcyBhcmUgc2V0IHdl IGNhbiBub3cgY2FsY3VsYXRlIGFsbCByZW1haW5pbmcgCi0rCSAqIGNvbXBvbmVudHMuCi0rCSAq LwotKwotKwkvKiBjYWxjdWxhdGUgbiAqLwotKwlyc2EtPm49Qk5fbmV3KCk7Ci0rCWlmIChyc2Et Pm4gPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUJOX211bChyc2EtPm4scnNhLT5wLHJz YS0+cSxjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCS8qIGNhbGN1bGF0ZSBkICovCi0rCWlmICgh Qk5fc3ViKHIxLHJzYS0+cCxCTl92YWx1ZV9vbmUoKSkpCi0rCQlnb3RvIGVycjsJLyogcC0xICov Ci0rCWlmICghQk5fc3ViKHIyLHJzYS0+cSxCTl92YWx1ZV9vbmUoKSkpCi0rCQlnb3RvIGVycjsJ LyogcS0xICovCi0rCWlmICghQk5fbXVsKHIwLHIxLHIyLGN0eCkpCi0rCQlnb3RvIGVycjsJLyog KHAtMSkocS0xKSAqLwotKwotKwlpZiAoIUJOX2djZChyMywgcjEsIHIyLCBjdHgpKQotKwkJZ290 byBlcnI7Ci0rCi0rCWlmICghQk5fZGl2KHIwLCBOVUxMLCByMCwgcjMsIGN0eCkpCi0rCQlnb3Rv IGVycjsJLyogTENNKChwLTEpKHEtMSkpICovCi0rCi0rCWN0eDIgPSBCTl9DVFhfbmV3KCk7Ci0r CWlmICghY3R4MikKLSsJCWdvdG8gZXJyOwotKwotKwlyc2EtPmQ9Qk5fbW9kX2ludmVyc2UoTlVM TCxyc2EtPmUscjAsY3R4Mik7CS8qIGQgKi8KLSsJaWYgKHJzYS0+ZCA9PSBOVUxMKQotKwkJZ290 byBlcnI7Ci0rCi0rCS8qIGNhbGN1bGF0ZSBkIG1vZCAocC0xKSAqLwotKwlyc2EtPmRtcDE9Qk5f bmV3KCk7Ci0rCWlmIChyc2EtPmRtcDEgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUJO X21vZChyc2EtPmRtcDEscnNhLT5kLHIxLGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyogY2Fs Y3VsYXRlIGQgbW9kIChxLTEpICovCi0rCXJzYS0+ZG1xMT1CTl9uZXcoKTsKLSsJaWYgKHJzYS0+ ZG1xMSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCWlmICghQk5fbW9kKHJzYS0+ZG1xMSxyc2Et PmQscjIsY3R4KSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBjYWxjdWxhdGUgaW52ZXJzZSBvZiBx IG1vZCBwICovCi0rCXJzYS0+aXFtcD1CTl9tb2RfaW52ZXJzZShOVUxMLHJzYS0+cSxyc2EtPnAs Y3R4Mik7Ci0rCi0rCWVycjoKLSsJaWYgKGN0eCkKLSsJCXsKLSsJCUJOX0NUWF9lbmQoY3R4KTsK LSsJCUJOX0NUWF9mcmVlKGN0eCk7Ci0rCQl9Ci0rCWlmIChjdHgyKQotKwkJQk5fQ1RYX2ZyZWUo Y3R4Mik7Ci0rCS8qIElmIHRoaXMgaXMgc2V0IGFsbCBjYWxscyBzdWNjZXNzZnVsICovCi0rCWlm IChyc2EgJiYgcnNhLT5pcW1wICE9IE5VTEwpCi0rCQlyZXR1cm4gMTsKLSsKLSsJcmV0dXJuIDA7 Ci0rCi0rCX0KLSsKLStpbnQgUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQg Yml0cywgY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpCi0rCXsKLSsJaW50IG9rID0gMDsK LSsJQklHTlVNICpYcCA9IE5VTEwsICpYcSA9IE5VTEw7Ci0rCUJOX0NUWCAqY3R4ID0gTlVMTDsK LSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAhKHJzYS0+Zmxh Z3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykgJiYgCi0rCQkoYml0cyA8IE9QRU5TU0xfUlNB X0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9S U0FfWDkzMV9HRU5FUkFURV9LRVlfRVgsRklQU19SX0tFWV9UT09fU0hPUlQpOwotKwkgICAgcmV0 dXJuIDA7Ci0rCSAgICB9Ci0rCi0rCWlmIChiaXRzICYgMHhmZikKLSsJICAgIHsKLSsJICAgIEZJ UFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBTX1JfSU5WQUxJRF9LRVlf TEVOR1RIKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwotKwlpZihGSVBTX3NlbGZ0ZXN0 X2ZhaWxlZCgpKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFfR0VORVJB VEVfS0VZX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICByZXR1cm4gMDsK LSsJICAgIH0KLSsjZW5kaWYKLSsKLSsJY3R4ID0gQk5fQ1RYX25ldygpOwotKwlpZiAoIWN0eCkK LSsJCWdvdG8gZXJyb3I7Ci0rCi0rCUJOX0NUWF9zdGFydChjdHgpOwotKwlYcCA9IEJOX0NUWF9n ZXQoY3R4KTsKLSsJWHEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCWlmICghQk5fWDkzMV9nZW5lcmF0 ZV9YcHEoWHAsIFhxLCBiaXRzLCBjdHgpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJcnNhLT5wID0g Qk5fbmV3KCk7Ci0rCXJzYS0+cSA9IEJOX25ldygpOwotKwlpZiAoIXJzYS0+cCB8fCAhcnNhLT5x KQotKwkJZ290byBlcnJvcjsKLSsKLSsJLyogR2VuZXJhdGUgdHdvIHByaW1lcyBmcm9tIFhwLCBY cSAqLwotKwotKwlpZiAoIUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgocnNhLT5wLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMLCBYcCwKLSsJCQkJCWUsIGN0eCwgY2IpKQotKwkJZ290byBlcnJvcjsK LSsKLSsJaWYgKCFCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KHJzYS0+cSwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCwgWHEsCi0rCQkJCQllLCBjdHgsIGNiKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0r CS8qIFNpbmNlIHJzYS0+cCBhbmQgcnNhLT5xIGFyZSB2YWxpZCB0aGlzIGNhbGwgd2lsbCBqdXN0 IGRlcml2ZQotKwkgKiByZW1haW5pbmcgUlNBIGNvbXBvbmVudHMuCi0rCSAqLwotKwotKwlpZiAo IVJTQV9YOTMxX2Rlcml2ZV9leChyc2EsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0rCQkJCU5V TEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIGUsIGNiKSkKLSsJCWdvdG8gZXJyb3I7 Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZighZmlwc19jaGVja19yc2EocnNhKSkKLSsJ ICAgIGdvdG8gZXJyb3I7Ci0rI2VuZGlmCi0rCi0rCW9rID0gMTsKLSsKLSsJZXJyb3I6Ci0rCWlm IChjdHgpCi0rCQl7Ci0rCQlCTl9DVFhfZW5kKGN0eCk7Ci0rCQlCTl9DVFhfZnJlZShjdHgpOwot KwkJfQotKwotKwlpZiAob2spCi0rCQlyZXR1cm4gMTsKLSsKLSsJcmV0dXJuIDA7Ci0rCi0rCX0K LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMu ZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX3NoYV9zZWxmdGVzdC5jCi0tLS0g b3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19zaGFfc2VsZnRlc3QuYy5maXBzCTIwMTQt MTAtMTYgMTM6MTk6MzUuMTAyMzA2NDkxICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRv L2ZpcHMvZmlwc19zaGFfc2VsZnRlc3QuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjEwMjMwNjQ5MSAr MDIwMAotQEAgLTAsMCArMSwxNDAgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAo YykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgot KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgot KyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBz b2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xr aXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv dXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Np b24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAq Ci0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBj YWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWly IG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9w ZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3 aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBS RVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JT IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU Ci0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK LSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsj aW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsjaW5jbHVk ZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KLSsKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rc3RhdGljIGNvbnN0IGNoYXIgdGVzdFtdWzYwXT0KLSsgICAgewotKyAg ICAiIiwKLSsgICAgImFiYyIsCi0rICAgICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlq a2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIKLSsgICAgfTsKLSsKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciByZXRbXVtTSEFfRElHRVNUX0xFTkdUSF09Ci0rICAgIHsKLSsgICAgeyAweGRh LDB4MzksMHhhMywweGVlLDB4NWUsMHg2YiwweDRiLDB4MGQsMHgzMiwweDU1LAotKyAgICAgIDB4 YmYsMHhlZiwweDk1LDB4NjAsMHgxOCwweDkwLDB4YWYsMHhkOCwweDA3LDB4MDkgfSwKLSsgICAg eyAweGE5LDB4OTksMHgzZSwweDM2LDB4NDcsMHgwNiwweDgxLDB4NmEsMHhiYSwweDNlLAotKyAg ICAgIDB4MjUsMHg3MSwweDc4LDB4NTAsMHhjMiwweDZjLDB4OWMsMHhkMCwweGQ4LDB4OWQgfSwK LSsgICAgeyAweDg0LDB4OTgsMHgzZSwweDQ0LDB4MWMsMHgzYiwweGQyLDB4NmUsMHhiYSwweGFl LAotKyAgICAgIDB4NGEsMHhhMSwweGY5LDB4NTEsMHgyOSwweGU1LDB4ZTUsMHg0NiwweDcwLDB4 ZjEgfSwKLSsgICAgfTsKLSsKLStzdGF0aWMgaW50IGNvcnJ1cHRfc2hhOwotKwotK3ZvaWQgRklQ U19jb3JydXB0X3NoYTEoKQotKyAgICB7Ci0rICAgIGNvcnJ1cHRfc2hhID0gMTsKLSsgICAgfQot KwotK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTEoKQotKyAgICB7Ci0rICAgIGludCBuOwotKwotKyAg ICBmb3Iobj0wIDsgbjxzaXplb2YodGVzdCkvc2l6ZW9mKHRlc3RbMF0pIDsgKytuKQotKwl7Ci0r CXVuc2lnbmVkIGNoYXIgbWRbU0hBX0RJR0VTVF9MRU5HVEhdOwotKwotKwlFVlBfRGlnZXN0KHRl c3Rbbl0sc3RybGVuKHRlc3Rbbl0pK2NvcnJ1cHRfc2hhLG1kLCBOVUxMLCBFVlBfc2hhMSgpLCBO VUxMKTsKLSsJaWYobWVtY21wKG1kLHJldFtuXSxzaXplb2YgbWQpKQotKwkgICAgewotKwkgICAg RklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9TSEExLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQp OwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCX0KLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0K LSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtc2dfc2hhMjU2W10gPSB7IDB4ZmEsIDB4 NDgsIDB4NTksIDB4MmEsIDB4ZTEsIDB4YWUsIDB4MWYsIDB4MzAsCi0rCQkJCQkgICAgMHhmYyB9 OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRpZ19zaGEyNTZbXSA9IHsgMHhmNywgMHgy NiwgMHhkOCwgMHg5OCwgMHg0NywgMHg5MSwgMHg2OCwgMHg1YiwKLSsJCQkJCSAgICAweDllLCAw eDM5LCAweGIyLCAweDU4LCAweGJiLCAweDc1LCAweGJmLCAweDAxLAotKwkJCQkJICAgIDB4MTcs IDB4MGMsIDB4ODQsIDB4MDAsIDB4MDEsIDB4N2EsIDB4OTQsIDB4ODMsCi0rCQkJCQkgICAgMHhm MywgMHgwYiwgMHgxNSwgMHg4NCwgMHg0YiwgMHg2OSwgMHg4OCwgMHg4YSB9OwotKwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIG1zZ19zaGE1MTJbXSA9IHsgMHgzNywgMHhkMSwgMHgzNSwg MHg5ZCwgMHgxOCwgMHg0MSwgMHhlOSwgMHhiNywKLSsJCQkJCSAgICAweDZkLCAweDlhLCAweDEz LCAweGRhLCAweDVmLCAweGYzLCAweGJkIH07Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg ZGlnX3NoYTUxMltdID0geyAweDExLCAweDEzLCAweGM0LCAweDE5LCAweGVkLCAweDJiLCAweDFk LCAweDE2LAotKwkJCQkJICAgIDB4MTEsIDB4ZWIsIDB4OWIsIDB4YmUsIDB4ZjAsIDB4N2YsIDB4 Y2YsIDB4NDQsCi0rCQkJCQkgICAgMHg4YiwgMHhkNywgMHg1NywgMHhiZCwgMHg4ZCwgMHhhOSwg MHgyNSwgMHhiMCwKLSsJCQkJCSAgICAweDQ3LCAweDI1LCAweGQ2LCAweDZjLCAweDlhLCAweDU0 LCAweDdmLCAweDhmLAotKwkJCQkJICAgIDB4MGIsIDB4NTMsIDB4MWEsIDB4MTAsIDB4NjgsIDB4 MzIsIDB4MDMsIDB4MzgsCi0rCQkJCQkgICAgMHg4MiwgMHhjNCwgMHg4NywgMHhjNCwgMHhlYSwg MHgwZSwgMHhkMSwgMHgwNCwKLSsJCQkJCSAgICAweGE5LCAweDk4LCAweGMxLCAweDA1LCAweGEz LCAweGYzLCAweGY4LCAweGIxLAotKwkJCQkJICAgIDB4YWYsIDB4YmMsIDB4ZDksIDB4NzgsIDB4 N2UsIDB4ZWUsIDB4M2QsIDB4NDMgfTsKLSsKLStpbnQgRklQU19zZWxmdGVzdF9zaGEyKHZvaWQp Ci0rCXsKLSsJdW5zaWduZWQgY2hhciBtZFtTSEE1MTJfRElHRVNUX0xFTkdUSF07Ci0rCi0rCUVW UF9EaWdlc3QobXNnX3NoYTI1Niwgc2l6ZW9mKG1zZ19zaGEyNTYpLCBtZCwgTlVMTCwgRVZQX3No YTI1NigpLCBOVUxMKTsKLSsJaWYobWVtY21wKGRpZ19zaGEyNTYsIG1kLCBzaXplb2YoZGlnX3No YTI1NikpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19NT0RFX1NFVCwgRklQU19SX1NF TEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsKLSsJRVZQX0RpZ2VzdChtc2df c2hhNTEyLCBzaXplb2YobXNnX3NoYTUxMiksIG1kLCBOVUxMLCBFVlBfc2hhNTEyKCksIE5VTEwp OwotKwlpZihtZW1jbXAoZGlnX3NoYTUxMiwgbWQsIHNpemVvZihkaWdfc2hhNTEyKSkpCi0rCQl7 Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX01PREVfU0VULCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVE KTsKLSsJCXJldHVybiAwOwotKwkJfQotKwotKwlyZXR1cm4gMTsKLSsJfQotKwotKyNlbmRpZgot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX2htYWMu Yy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9obWFjLmMK LS0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfaG1hYy5jLmZp cHMJMjAxNC0xMC0xNiAxMzoxOTozNS4xMDIzMDY0OTEgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4x ai9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfaG1hYy5jCTIwMTQtMTAtMTYgMTM6MTk6MzUu MTAyMzA2NDkxICswMjAwCi1AQCAtMCwwICsxLDIzNiBAQAotKy8qID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICog Q29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsg KgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdt ZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9w ZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8K LSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0 ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNz bC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBt YXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBl YXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lv biBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9m IGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFj a25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFO WQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICog QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgot KyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5j bHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9zaGEuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rCi0rI2lm bmRlZiBGSVBTQ0FOSVNURVJfTwotK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpIHsgcmV0dXJu IDA7IH0KLSt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2soKSB7fQotKyNlbmRpZgotKwotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLStpbnQgYm5fbXVsX21vbnRfZnB1NjQoQk5fVUxPTkcgKnJwLCBjb25z dCBCTl9VTE9ORyAqYXAsIGNvbnN0IEJOX1VMT05HICpicCwgY29uc3QgQk5fVUxPTkcgKm5wLCBj b25zdCBCTl9VTE9ORyAqbjAsIGludCBudW0pIHsgcmV0dXJuIDA7IH07Ci0raW50IGJuX211bF9t b250X2ludChCTl9VTE9ORyAqcnAsIGNvbnN0IEJOX1VMT05HICphcCwgY29uc3QgQk5fVUxPTkcg KmJwLCBjb25zdCBCTl9VTE9ORyAqbnAsIGNvbnN0IEJOX1VMT05HICpuMCwgaW50IG51bSkgeyBy ZXR1cm4gMDsgfTsKLSsKLSsjaWYJZGVmaW5lZChfX2kzODYpICAgfHwgZGVmaW5lZChfX2kzODZf XykgICB8fCBkZWZpbmVkKF9NX0lYODYpIHx8IFwKLSsJZGVmaW5lZChfX0lOVEVMX18pIHx8IFwK LSsJZGVmaW5lZChfX3g4Nl82NCkgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9N X0FNRDY0KSB8fCBkZWZpbmVkKF9NX1g2NCkKLSsKLSt1bnNpZ25lZCBpbnQgIE9QRU5TU0xfaWEz MmNhcF9QWzJdOwotK3Vuc2lnbmVkIGxvbmcgKk9QRU5TU0xfaWEzMmNhcF9sb2Modm9pZCkKLSt7 ICAgaWYgKHNpemVvZihsb25nKT09NCkKLSsJLyoKLSsJICogSWYgMzItYml0IGFwcGxpY2F0aW9u IHB1bGxzIGFkZHJlc3Mgb2YgT1BFTlNTTF9pYTMyY2FwX1BbMF0KLSsJICogY2xlYXIgc2Vjb25k IGVsZW1lbnQgdG8gbWFpbnRhaW4gdGhlIGlsbHVzaW9uIHRoYXQgdmVjdG9yCi0rCSAqIGlzIDMy LWJpdC4KLSsJICovCi0rCU9QRU5TU0xfaWEzMmNhcF9QWzFdPTA7Ci0rICAgIHJldHVybiAodW5z aWduZWQgbG9uZyAqKU9QRU5TU0xfaWEzMmNhcF9QOwotK30KLSsKLSsjaWYgZGVmaW5lZChPUEVO U1NMX0NQVUlEX09CSikgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19BU00pICYmICFkZWZpbmVkKEkz ODZfT05MWSkKLSsjZGVmaW5lIE9QRU5TU0xfQ1BVSURfU0VUVVAKLSsjaWYgZGVmaW5lZChfV0lO MzIpCi0rdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IElBMzJDQVA7Ci0rI2Vsc2UKLSt0eXBlZGVm IHVuc2lnbmVkIGxvbmcgbG9uZyBJQTMyQ0FQOwotKyNlbmRpZgotK3ZvaWQgT1BFTlNTTF9jcHVp ZF9zZXR1cCh2b2lkKQotK3sgc3RhdGljIGludCB0cmlnZ2VyPTA7Ci0rICBJQTMyQ0FQIE9QRU5T U0xfaWEzMl9jcHVpZCh2b2lkKTsKLSsgIElBMzJDQVAgdmVjOwotKyAgY2hhciAqZW52OwotKwot KyAgICBpZiAodHJpZ2dlcikJcmV0dXJuOwotKwotKyAgICB0cmlnZ2VyPTE7Ci0rICAgIGlmICgo ZW52PWdldGVudigiT1BFTlNTTF9pYTMyY2FwIikpKSB7Ci0rCWludCBvZmYgPSAoZW52WzBdPT0n ficpPzE6MDsKLSsjaWYgZGVmaW5lZChfV0lOMzIpCi0rCWlmICghc3NjYW5mKGVuditvZmYsIiVJ NjRpIiwmdmVjKSkgdmVjID0gc3RydG91bChlbnYrb2ZmLE5VTEwsMCk7Ci0rI2Vsc2UKLSsJaWYg KCFzc2NhbmYoZW52K29mZiwiJWxsaSIsKGxvbmcgbG9uZyAqKSZ2ZWMpKSB2ZWMgPSBzdHJ0b3Vs KGVuditvZmYsTlVMTCwwKTsKLSsjZW5kaWYKLSsJaWYgKG9mZikgdmVjID0gT1BFTlNTTF9pYTMy X2NwdWlkKCkmfnZlYzsKLSsgICAgfQotKyAgICBlbHNlCi0rCXZlYyA9IE9QRU5TU0xfaWEzMl9j cHVpZCgpOwotKwotKyAgICAvKgotKyAgICAgKiB8KDE8PDEwKSBzZXRzIGEgcmVzZXJ2ZWQgYml0 IHRvIHNpZ25hbCB0aGF0IHZhcmlhYmxlCi0rICAgICAqIHdhcyBpbml0aWFsaXplZCBhbHJlYWR5 Li4uIFRoaXMgaXMgdG8gYXZvaWQgaW50ZXJmZXJlbmNlCi0rICAgICAqIHdpdGggY3B1aWQgc25p cHBldHMgaW4gRUxGIC5pbml0IHNlZ21lbnQuCi0rICAgICAqLwotKyAgICBPUEVOU1NMX2lhMzJj YXBfUFswXSA9ICh1bnNpZ25lZCBpbnQpdmVjfCgxPDwxMCk7Ci0rICAgIE9QRU5TU0xfaWEzMmNh cF9QWzFdID0gKHVuc2lnbmVkIGludCkodmVjPj4zMik7Ci0rfQotKyNlbmRpZgotKwotKyNlbHNl Ci0rdW5zaWduZWQgbG9uZyAqT1BFTlNTTF9pYTMyY2FwX2xvYyh2b2lkKSB7IHJldHVybiBOVUxM OyB9Ci0rI2VuZGlmCi0raW50IE9QRU5TU0xfTk9OUElDX3JlbG9jYXRlZCA9IDA7Ci0rI2lmICFk ZWZpbmVkKE9QRU5TU0xfQ1BVSURfU0VUVVApICYmICFkZWZpbmVkKE9QRU5TU0xfQ1BVSURfT0JK KQotK3ZvaWQgT1BFTlNTTF9jcHVpZF9zZXR1cCh2b2lkKSB7fQotKyNlbmRpZgotKwotK3N0YXRp YyB2b2lkIGhtYWNfaW5pdChTSEEyNTZfQ1RYICptZF9jdHgsU0hBMjU2X0NUWCAqb19jdHgsCi0r CQkgICAgICBjb25zdCBjaGFyICprZXkpCi0rICAgIHsKLSsgICAgc2l6ZV90IGxlbj1zdHJsZW4o a2V5KTsKLSsgICAgaW50IGk7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5bWRbSE1BQ19NQVhfTURf Q0JMT0NLXTsKLSsgICAgdW5zaWduZWQgY2hhciBwYWRbSE1BQ19NQVhfTURfQ0JMT0NLXTsKLSsK LSsgICAgaWYgKGxlbiA+IFNIQV9DQkxPQ0spCi0rCXsKLSsJU0hBMjU2X0luaXQobWRfY3R4KTsK LSsJU0hBMjU2X1VwZGF0ZShtZF9jdHgsa2V5LGxlbik7Ci0rCVNIQTI1Nl9GaW5hbChrZXltZCxt ZF9jdHgpOwotKwlsZW49U0hBMjU2X0RJR0VTVF9MRU5HVEg7Ci0rCX0KLSsgICAgZWxzZQotKwlt ZW1jcHkoa2V5bWQsa2V5LGxlbik7Ci0rICAgIG1lbXNldCgma2V5bWRbbGVuXSwnXDAnLEhNQUNf TUFYX01EX0NCTE9DSy1sZW4pOwotKwotKyAgICBmb3IoaT0wIDsgaSA8IEhNQUNfTUFYX01EX0NC TE9DSyA7IGkrKykKLSsJcGFkW2ldPTB4MzZea2V5bWRbaV07Ci0rICAgIFNIQTI1Nl9Jbml0KG1k X2N0eCk7Ci0rICAgIFNIQTI1Nl9VcGRhdGUobWRfY3R4LHBhZCxTSEEyNTZfQ0JMT0NLKTsKLSsK LSsgICAgZm9yKGk9MCA7IGkgPCBITUFDX01BWF9NRF9DQkxPQ0sgOyBpKyspCi0rCXBhZFtpXT0w eDVjXmtleW1kW2ldOwotKyAgICBTSEEyNTZfSW5pdChvX2N0eCk7Ci0rICAgIFNIQTI1Nl9VcGRh dGUob19jdHgscGFkLFNIQTI1Nl9DQkxPQ0spOwotKyAgICB9Ci0rCi0rc3RhdGljIHZvaWQgaG1h Y19maW5hbCh1bnNpZ25lZCBjaGFyICptZCxTSEEyNTZfQ1RYICptZF9jdHgsU0hBMjU2X0NUWCAq b19jdHgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBidWZbU0hBMjU2X0RJR0VTVF9MRU5H VEhdOwotKwotKyAgICBTSEEyNTZfRmluYWwoYnVmLG1kX2N0eCk7Ci0rICAgIFNIQTI1Nl9VcGRh dGUob19jdHgsYnVmLHNpemVvZiBidWYpOwotKyAgICBTSEEyNTZfRmluYWwobWQsb19jdHgpOwot KyAgICB9Ci0rCi0rI2VuZGlmCi0rCi0raW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCi0r ICAgIHsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIHN0YXRpYyBjaGFyIGtleVtdPSJvcmJv RGVKSVRJVGVqc2lycEFET05pdmlycFVrdmFyUCI7Ci0rICAgIGludCBuLGJpbmFyeT0wOwotKwot KyAgICBpZihhcmdjIDwgMikKLSsJewotKwlmcHJpbnRmKHN0ZGVyciwiJXMgWzxmaWxlPl0rXG4i LGFyZ3ZbMF0pOwotKwlleGl0KDEpOwotKwl9Ci0rCi0rICAgIG49MTsKLSsgICAgaWYgKCFzdHJj bXAoYXJndltuXSwiLWJpbmFyeSIpKQotKwl7Ci0rCW4rKzsKLSsJYmluYXJ5PTE7CS8qIGVtaXQg YmluYXJ5IGZpbmdlcnByaW50Li4uICovCi0rCX0KLSsKLSsgICAgZm9yKDsgbiA8IGFyZ2MgOyAr K24pCi0rCXsKLSsJRklMRSAqZj1mb3Blbihhcmd2W25dLCJyYiIpOwotKwlTSEEyNTZfQ1RYIG1k X2N0eCxvX2N0eDsKLSsJdW5zaWduZWQgY2hhciBtZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07Ci0r CWludCBpOwotKwotKwlpZighZikKLSsJICAgIHsKLSsJICAgIHBlcnJvcihhcmd2W25dKTsKLSsJ ICAgIGV4aXQoMik7Ci0rCSAgICB9Ci0rCi0rCWhtYWNfaW5pdCgmbWRfY3R4LCZvX2N0eCxrZXkp OwotKwlmb3IoIDsgOyApCi0rCSAgICB7Ci0rCSAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsJICAgIHNp emVfdCBsPWZyZWFkKGJ1ZiwxLHNpemVvZiBidWYsZik7Ci0rCi0rCSAgICBpZihsID09IDApCi0r CQl7Ci0rCQlpZihmZXJyb3IoZikpCi0rCQkgICAgewotKwkJICAgIHBlcnJvcihhcmd2W25dKTsK LSsJCSAgICBleGl0KDMpOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICBicmVhazsKLSsJCX0K LSsJICAgIFNIQTI1Nl9VcGRhdGUoJm1kX2N0eCxidWYsbCk7Ci0rCSAgICB9Ci0rCWhtYWNfZmlu YWwobWQsJm1kX2N0eCwmb19jdHgpOwotKwotKwlpZiAoYmluYXJ5KQotKwkgICAgewotKwkgICAg ZndyaXRlKG1kLFNIQTI1Nl9ESUdFU1RfTEVOR1RILDEsc3Rkb3V0KTsKLSsJICAgIGJyZWFrOwkv KiAuLi4gZm9yIHNpbmdsZSghKSBmaWxlICovCi0rCSAgICB9Ci0rCi0rLyoJcHJpbnRmKCJITUFD LVNIQTEoJXMpPSAiLGFyZ3Zbbl0pOyAqLwotKwlmb3IoaT0wIDsgaSA8IFNIQTI1Nl9ESUdFU1Rf TEVOR1RIIDsgKytpKQotKwkgICAgcHJpbnRmKCIlMDJ4IixtZFtpXSk7Ci0rCXByaW50ZigiXG4i KTsKLSsJfQotKyNlbmRpZgotKyAgICByZXR1cm4gMDsKLSsgICAgfQotKwotKwotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMuZmlwcyBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYwotLS0tIG9wZW5zc2wtMS4wLjFq L2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jLmZpcHMJMjAxNC0xMC0xNiAxMzoxOTozNS4x MDMzMDY1MTQgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rf c3VpdGUuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjEwMzMwNjUxNCArMDIwMAotQEAgLTAsMCArMSw1 ODggQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqCi0rICogVGhpcyBjb21t YW5kIGlzIGludGVuZGVkIGFzIGEgdGVzdCBkcml2ZXIgZm9yIHRoZSBGSVBTLTE0MCB0ZXN0aW5n Ci0rICogbGFiIHBlcmZvcm1pbmcgRklQUy0xNDAgdmFsaWRhdGlvbi4gIEl0IGRlbW9uc3RyYXRl cyB0aGUgdXNlIG9mIHRoZQotKyAqIE9wZW5TU0wgbGlicmFyeSBpdG8gcGVyZm9ybSBhIHZhcmll dHkgb2YgY29tbW9uIGNyeXB0b2dyYXBoaWMKLSsgKiBmdW5jdGlvbnMuICBBIHBvd2VyLXVwIHNl bGYgdGVzdCBpcyBkZW1vbnN0cmF0ZWQgYnkgZGVsaWJlcmF0ZWx5Ci0rICogcG9pbnRpbmcgdG8g YW4gaW52YWxpZCBleGVjdXRhYmxlIGhhc2gKLSsgKgotKyAqIENvbnRyaWJ1dGVkIGJ5IFN0ZXZl IE1hcnF1ZXNzLgotKyAqCi0rICovCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPGFz c2VydC5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5j bHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZGVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZHNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9o bWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rCi0rI2luY2x1ZGUgPG9wZW5zc2wv Ym4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvc2hh Lmg+Ci0rCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQotKyAgICB7Ci0rICAgIHByaW50ZigiTm8gRklQUyBzdXBwb3J0XG4iKTsKLSsg ICAgcmV0dXJuKDApOwotKyAgICB9Ci0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+Ci0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rLyogQUVTOiBlbmNyeXB0IGFuZCBkZWNy eXB0IGtub3duIHBsYWludGV4dCwgdmVyaWZ5IHJlc3VsdCBtYXRjaGVzIG9yaWdpbmFsIHBsYWlu dGV4dAotKyovCi0rc3RhdGljIGludCBGSVBTX2Flc190ZXN0KHZvaWQpCi0rCXsKLSsJaW50IHJl dCA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgcGx0bXBbMTZdOwotKwl1bnNpZ25lZCBjaGFyIGNpdG1w WzE2XTsKLSsJdW5zaWduZWQgY2hhciBrZXlbMTZdID0geyAxLDIsMyw0LDUsNiw3LDgsOSwxMCwx MSwxMiwxMywxNCwxNSwxNn07Ci0rCXVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzE2XSA9ICJldGFv bnJpc2hkbGN1IjsKLSsJRVZQX0NJUEhFUl9DVFggY3R4OwotKwlFVlBfQ0lQSEVSX0NUWF9pbml0 KCZjdHgpOwotKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCks TlVMTCwga2V5LCBOVUxMLCAxKSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCUVWUF9DaXBoZXIoJmN0 eCwgY2l0bXAsIHBsYWludGV4dCwgMTYpOwotKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwg RVZQX2Flc18xMjhfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAwKSA8PSAwKQotKwkJZ290byBlcnI7 Ci0rCUVWUF9DaXBoZXIoJmN0eCwgcGx0bXAsIGNpdG1wLCAxNik7Ci0rCWlmIChtZW1jbXAocGx0 bXAsIHBsYWludGV4dCwgMTYpKQotKwkJZ290byBlcnI7Ci0rCXJldCA9IDE7Ci0rCWVycjoKLSsJ RVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK3N0 YXRpYyBpbnQgRklQU19kZXMzX3Rlc3Qodm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsJdW5z aWduZWQgY2hhciBwbHRtcFs4XTsKLSsJdW5zaWduZWQgY2hhciBjaXRtcFs4XTsKLSsgICAgCXVu c2lnbmVkIGNoYXIga2V5W10gPSB7IDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1 LDE2LDE3LDE4LAotKwkJICAgICAgICAgICAgICAxOSwyMCwyMSwyMiwyMywyNH07Ci0rICAgIAl1 bnNpZ25lZCBjaGFyIHBsYWludGV4dFtdID0geyAnZScsICd0JywgJ2EnLCAnbycsICduJywgJ3In LCAnaScsICdzJyB9OwotKwlFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rCUVWUF9DSVBIRVJfQ1RYX2lu aXQoJmN0eCk7Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNi KCksTlVMTCwga2V5LCBOVUxMLCAxKSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCUVWUF9DaXBoZXIo JmN0eCwgY2l0bXAsIHBsYWludGV4dCwgOCk7Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4 LCBFVlBfZGVzX2VkZTNfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAwKSA8PSAwKQotKwkJZ290byBl cnI7Ci0rCUVWUF9DaXBoZXIoJmN0eCwgcGx0bXAsIGNpdG1wLCA4KTsKLSsJaWYgKG1lbWNtcChw bHRtcCwgcGxhaW50ZXh0LCA4KSkKLSsJCWdvdG8gZXJyOwotKwlyZXQgPSAxOwotKwllcnI6Ci0r CUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLSsv KgotKyAqIERTQTogZ2VuZXJhdGUga2V5cyBhbmQgc2lnbiwgdmVyaWZ5IGlucHV0IHBsYWludGV4 dC4KLSsgKi8KLStzdGF0aWMgaW50IEZJUFNfZHNhX3Rlc3QoaW50IGJhZCkKLSsgICAgewotKyAg ICBEU0EgKmRzYSA9IE5VTEw7Ci0rICAgIEVWUF9QS0VZIHBrOwotKyAgICB1bnNpZ25lZCBjaGFy IGRnc3RbXSA9ICJldGFvbnJpc2hkbGMiOwotKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls2MF07Ci0r ICAgIHVuc2lnbmVkIGludCBzbGVuOwotKyAgICBpbnQgciA9IDA7Ci0rICAgIEVWUF9NRF9DVFgg bWN0eDsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIEVWUF9NRF9DVFhfaW5pdCgm bWN0eCk7Ci0rICAgIGRzYSA9IERTQV9uZXcoKTsKLSsgICAgaWYgKCFkc2EpCi0rCWdvdG8gZW5k OwotKyAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgMTAyNCxOVUxMLDAs TlVMTCxOVUxMLE5VTEwpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFEU0FfZ2VuZXJhdGVfa2V5 KGRzYSkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoYmFkKQotKwkgICAgQk5fYWRkX3dvcmQoZHNh LT5wdWJfa2V5LCAxKTsKLSsKLSsgICAgcGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKLSsgICAgcGsu cGtleS5kc2EgPSBkc2E7Ci0rCi0rICAgIGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBf ZHNzMSgpLCBOVUxMKSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1j dHgsIGRnc3QsIHNpemVvZihkZ3N0KSAtIDEpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFFVlBf U2lnbkZpbmFsKCZtY3R4LCBidWYsICZzbGVuLCAmcGspKQotKwlnb3RvIGVuZDsKLSsKLSsgICAg aWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCi0rCWdvdG8g ZW5kOwotKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIGRnc3QsIHNpemVvZihkZ3N0 KSAtIDEpKQotKwlnb3RvIGVuZDsKLSsgICAgciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgYnVm LCBzbGVuLCAmcGspOwotKyAgICBlbmQ6Ci0rICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7 Ci0rICAgIGlmIChkc2EpCi0rICAJICBEU0FfZnJlZShkc2EpOwotKyAgICBpZiAociAhPSAxKQot KwlyZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKgotKyAqIFJTQTogZ2Vu ZXJhdGUga2V5cyBhbmQgc2lnbiwgdmVyaWZ5IGlucHV0IHBsYWludGV4dC4KLSsgKi8KLStzdGF0 aWMgaW50IEZJUFNfcnNhX3Rlc3QoaW50IGJhZCkKLSsgICAgewotKyAgICBSU0EgKmtleTsKLSsg ICAgdW5zaWduZWQgY2hhciBpbnB1dF9wdGV4dFtdID0gImV0YW9ucmlzaGRsYyI7Ci0rICAgIHVu c2lnbmVkIGNoYXIgYnVmWzI1Nl07Ci0rICAgIHVuc2lnbmVkIGludCBzbGVuOwotKyAgICBCSUdO VU0gKmJuOwotKyAgICBFVlBfTURfQ1RYIG1jdHg7Ci0rICAgIEVWUF9QS0VZIHBrOwotKyAgICBp bnQgciA9IDA7Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBFVlBfTURfQ1RYX2lu aXQoJm1jdHgpOwotKyAgICBrZXkgPSBSU0FfbmV3KCk7Ci0rICAgIGJuID0gQk5fbmV3KCk7Ci0r ICAgIGlmICgha2V5IHx8ICFibikKLSsJcmV0dXJuIDA7Ci0rICAgIEJOX3NldF93b3JkKGJuLCA2 NTUzNyk7Ci0rICAgIGlmICghUlNBX2dlbmVyYXRlX2tleV9leChrZXksIDEwMjQsYm4sTlVMTCkp Ci0rCXJldHVybiAwOwotKyAgICBCTl9mcmVlKGJuKTsKLSsgICAgaWYgKGJhZCkKLSsJICAgIEJO X2FkZF93b3JkKGtleS0+biwgMSk7Ci0rCi0rICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7Ci0r ICAgIHBrLnBrZXkucnNhID0ga2V5OwotKwotKyAgICBpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0 eCwgRVZQX3NoYTEoKSwgTlVMTCkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9TaWduVXBk YXRlKCZtY3R4LCBpbnB1dF9wdGV4dCwgc2l6ZW9mKGlucHV0X3B0ZXh0KSAtIDEpKQotKwlnb3Rv IGVuZDsKLSsgICAgaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBidWYsICZzbGVuLCAmcGspKQot Kwlnb3RvIGVuZDsKLSsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX3No YTEoKSwgTlVMTCkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1j dHgsIGlucHV0X3B0ZXh0LCBzaXplb2YoaW5wdXRfcHRleHQpIC0gMSkpCi0rCWdvdG8gZW5kOwot KyAgICByID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBidWYsIHNsZW4sICZwayk7Ci0rICAgIGVu ZDoKLSsgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKLSsgICAgaWYgKGtleSkKLSsgIAkg ICAgUlNBX2ZyZWUoa2V5KTsKLSsgICAgaWYgKHIgIT0gMSkKLSsJcmV0dXJuIDA7Ci0rICAgIHJl dHVybiAxOwotKyAgICB9Ci0rCi0rLyogU0hBMTogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdl c3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhh c2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19zaGExX3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2ln bmVkIGNoYXIgZGlnZXN0W1NIQV9ESUdFU1RfTEVOR1RIXSA9Ci0rICAgICAgICB7IDB4MTEsIDB4 ZjEsIDB4OWEsIDB4M2EsIDB4ZWMsIDB4MWEsIDB4MWUsIDB4OGUsIDB4NjUsIDB4ZDQsIDB4OWEs IDB4MzgsIDB4MGMsIDB4OGIsIDB4MWUsIDB4MmMsIDB4ZTgsIDB4YjMsIDB4YzUsIDB4MTggfTsK LSsgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFvbnJpc2hkIjsKLSsKLSsgICAgdW5zaWdu ZWQgY2hhciBtZFtTSEFfRElHRVNUX0xFTkdUSF07Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigp OwotKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNpemVvZihzdHIpIC0gMSxtZCwgTlVMTCwgRVZQ X3NoYTEoKSwgTlVMTCkpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG1kLGRpZ2VzdCxzaXpl b2YobWQpKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwot Ky8qIFNIQTI1NjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBh cmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBp bnQgRklQU19zaGEyNTZfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBkaWdlc3Rb U0hBMjU2X0RJR0VTVF9MRU5HVEhdID0KLSsJezB4ZjUsIDB4NTMsIDB4Y2QsIDB4YjgsIDB4Y2Ys IDB4MSwgMHhlZSwgMHgxNywgMHg5YiwgMHg5MywgMHhjOSwgMHg2OCwgMHhjMCwgMHhlYSwgMHg0 MCwgMHg5MSwKLSsJIDB4NiwgMHhlYywgMHg4ZSwgMHgxMSwgMHg5NiwgMHhjOCwgMHg1ZCwgMHgx YywgMHhhZiwgMHg2NCwgMHgyMiwgMHhlNiwgMHg1MCwgMHg0ZiwgMHg0NywgMHg1N307Ci0rICAg IHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNoZCI7Ci0rCi0rICAgIHVuc2lnbmVkIGNo YXIgbWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsK LSsgICAgaWYgKCFFVlBfRGlnZXN0KHN0cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5VTEwsIEVWUF9z aGEyNTYoKSwgTlVMTCkpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG1kLGRpZ2VzdCxzaXpl b2YobWQpKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwot Ky8qIFNIQTUxMjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBh cmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBp bnQgRklQU19zaGE1MTJfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBkaWdlc3Rb U0hBNTEyX0RJR0VTVF9MRU5HVEhdID0KLSsJezB4OTksIDB4YzksIDB4ZTksIDB4NWIsIDB4ODgs IDB4ZDQsIDB4NzgsIDB4ODgsIDB4ZGYsIDB4ODgsIDB4NWYsIDB4OTQsIDB4NzEsIDB4NjQsIDB4 MjgsIDB4Y2EsCi0rCSAweDE2LCAweDFmLCAweDNkLCAweGY0LCAweDFmLCAweGYzLCAweDBmLCAw eGM1LCAweDAzLCAweDk5LCAweGIyLCAweGQwLCAweGU3LCAweDBiLCAweDk0LCAweDRhLAotKwkg MHg0NSwgMHhkMiwgMHg2YywgMHg0ZiwgMHgyMCwgMHgwNiwgMHhlZiwgMHg3MSwgMHhhOSwgMHgy NSwgMHg3ZiwgMHgyNCwgMHhiMSwgMHhkOSwgMHg0MCwgMHgyMiwKLSsJIDB4NDksIDB4NTQsIDB4 MTAsIDB4YzIsIDB4MjIsIDB4OWQsIDB4MjcsIDB4ZmUsIDB4YmQsIDB4ZDYsIDB4ZDYsIDB4ZWIs IDB4MmQsIDB4NDIsIDB4MWQsIDB4YTN9OwotKyAgICB1bnNpZ25lZCBjaGFyIHN0cltdID0gImV0 YW9ucmlzaGQiOwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQTUxMl9ESUdFU1RfTEVOR1RI XTsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghRVZQX0RpZ2VzdChzdHIs c2l6ZW9mKHN0cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hhNTEyKCksIE5VTEwpKSByZXR1cm4gMDsK LSsgICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1kKSkpCi0rICAgICAgICByZXR1cm4g MDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBITUFDLVNIQTE6IGdlbmVyYXRlIGhh c2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29t cHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfaG1hY19zaGExX3Rlc3Qo KQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7Ci0rICAg IHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIg a2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9Ci0rCXsweDczLCAweGY3LCAweGEwLCAweDQ4LCAweGY4 LCAweDk0LCAweGVkLCAweGRkLCAweDBhLCAweGVhLCAweGVhLCAweDU2LCAweDFiLCAweDYxLCAw eDJlLCAweDcwLAotKwkgMHhiMiwgMHhmYiwgMHhlYywgMHhjNn07Ci0rCi0rICAgIHVuc2lnbmVk IGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0r Ci0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTEoKSxrZXks c2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKLSsg ICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAg ICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIEhNQUMtU0hBMjI0OiBnZW5lcmF0ZSBoYXNoIG9m IGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVk IGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBGSVBTX2htYWNfc2hhMjI0X3Rlc3QoKQot KyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7Ci0rICAgIHVu c2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2F2 YWxbRVZQX01BWF9NRF9TSVpFXSA9Ci0rCXsweDc1LCAweDU4LCAweGQ1LCAweGJkLCAweDU1LCAw eDZkLCAweDg3LCAweDBmLCAweDc1LCAweGZmLCAweGJlLCAweDFjLCAweGIyLCAweGYwLCAweDIw LCAweDM1LAotKwkgMHhlNSwgMHg2MiwgMHg0OSwgMHhiNiwgMHg5NCwgMHhiOSwgMHhmYywgMHg2 NSwgMHgzNCwgMHgzMywgMHgzYSwgMHgxOX07Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VW UF9NQVhfTURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAgIEVSUl9j bGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTIyNCgpLGtleSxzaXplb2Yoa2V5 KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOwotKyAgICBpZiAobWVt Y21wKG91dCxrYXZhbCxvdXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAx OwotKyAgICB9Ci0rCi0rLyogSE1BQy1TSEEyNTY6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGln ZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBo YXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfaG1hY19zaGEyNTZfdGVzdCgpCi0rICAgIHsKLSsg ICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKLSsgICAgdW5zaWduZWQgY2hh ciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKLSsgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFY X01EX1NJWkVdID0KLSsJezB4ZTksIDB4MTcsIDB4YzEsIDB4N2IsIDB4NGMsIDB4NmIsIDB4Nzcs IDB4ZGEsIDB4ZDIsIDB4MzAsIDB4MzYsIDB4MDIsIDB4ZjUsIDB4NzIsIDB4MzMsIDB4ODcsCi0r CSAweDlmLCAweGM2LCAweDZlLCAweDdiLCAweDdlLCAweGE4LCAweGVhLCAweGFhLCAweDlmLCAw eGJhLCAweGVlLCAweDUxLCAweGZmLCAweGRhLCAweDI0LCAweGY0fTsKLSsKLSsgICAgdW5zaWdu ZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAgdW5zaWduZWQgaW50IG91dGxlbjsK LSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghSE1BQyhFVlBfc2hhMjU2KCks a2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7 Ci0rICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCi0rICAgICAgICByZXR1cm4gMDsK LSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBITUFDLVNIQTM4NDogZ2VuZXJhdGUgaGFz aCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21w dXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTM4NF90ZXN0 KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOwotKyAg ICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25lZCBjaGFy IGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQotKwl7MHhiMiwgMHg5ZCwgMHg0MCwgMHg1OCwgMHgz MiwgMHhjNCwgMHhlMywgMHgzMSwgMHhiNiwgMHg2MywgMHgwOCwgMHgyNiwgMHg5OSwgMHhlZiwg MHgzYiwgMHgxMCwKLSsJIDB4ZTIsIDB4ZGYsIDB4ZjgsIDB4ZmYsIDB4YzYsIDB4ZTEsIDB4MDMs IDB4MjksIDB4ODEsIDB4MmEsIDB4MWIsIDB4YWMsIDB4YjAsIDB4MDcsIDB4MzksIDB4MDgsCi0r CSAweGYzLCAweDkxLCAweDM1LCAweDExLCAweDc2LCAweGQ2LCAweDRjLCAweDIwLCAweGZiLCAw eDRkLCAweGMzLCAweGYzLCAweGI4LCAweDliLCAweDg4LCAweDFjfTsKLSsKLSsgICAgdW5zaWdu ZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAgdW5zaWduZWQgaW50IG91dGxlbjsK LSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghSE1BQyhFVlBfc2hhMzg0KCks a2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7 Ci0rICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCi0rICAgICAgICByZXR1cm4gMDsK LSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBITUFDLVNIQTUxMjogZ2VuZXJhdGUgaGFz aCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21w dXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTUxMl90ZXN0 KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOwotKyAg ICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25lZCBjaGFy IGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQotKwl7MHhjZCwgMHgzZSwgMHhiOSwgMHg1MSwgMHhi OCwgMHhiYywgMHg3ZiwgMHg5YSwgMHgyMywgMHhhZiwgMHhmMywgMHg3NywgMHg1OSwgMHg4NSwg MHhhOSwgMHhlNiwKLSsJIDB4ZjcsIDB4ZDEsIDB4NTEsIDB4OTYsIDB4MTcsIDB4ZTAsIDB4OTIs IDB4ZDgsIDB4YTYsIDB4M2IsIDB4YzEsIDB4YWQsIDB4N2UsIDB4MjQsIDB4Y2EsIDB4YjEsCi0r CSAweGQ3LCAweDc5LCAweDBhLCAweGE1LCAweGVhLCAweDJjLCAweDAyLCAweDU4LCAweDBiLCAw eGE2LCAweDUyLCAweDZiLCAweDYxLCAweDdmLCAweGViLCAweDljLAotKwkgMHg0NywgMHg4Niwg MHg1ZCwgMHg3NCwgMHgyYiwgMHg4OCwgMHhkZiwgMHhlZSwgMHg0NiwgMHg2OSwgMHg5NiwgMHgz ZCwgMHhhNiwgMHhkOSwgMHgyYSwgMHg1M307Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VW UF9NQVhfTURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAgIEVSUl9j bGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTUxMigpLGtleSxzaXplb2Yoa2V5 KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOwotKyAgICBpZiAobWVt Y21wKG91dCxrYXZhbCxvdXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAx OwotKyAgICB9Ci0rCi0rCi0rLyogREg6IGdlbmVyYXRlIHNoYXJlZCBwYXJhbWV0ZXJzCi0rKi8K LStzdGF0aWMgaW50IGRoX3Rlc3QoKQotKyAgICB7Ci0rICAgIERIICpkaDsKLSsgICAgRVJSX2Ns ZWFyX2Vycm9yKCk7Ci0rICAgIGRoID0gRklQU19kaF9uZXcoKTsKLSsgICAgaWYgKCFkaCkKLSsJ cmV0dXJuIDA7Ci0rICAgIGlmICghREhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkaCwgMTAyNCwg MiwgTlVMTCkpCi0rCXJldHVybiAwOwotKyAgICBGSVBTX2RoX2ZyZWUoZGgpOwotKyAgICByZXR1 cm4gMTsKLSsgICAgfQotKwotKy8qIFplcm9pemUKLSsqLwotK3N0YXRpYyBpbnQgWmVyb2l6ZSgp Ci0rICAgIHsKLSsgICAgUlNBICprZXk7Ci0rICAgIEJJR05VTSAqYm47Ci0rICAgIHVuc2lnbmVk IGNoYXIgdXNlcmtleVsxNl0gPSAKLSsJeyAweDQ4LCAweDUwLCAweGYwLCAweGEzLCAweDNhLCAw eGVkLCAweGQzLCAweGFmLCAweDZlLCAweDQ3LCAweDdmLCAweDgzLCAweDAyLCAweGIxLCAweDA5 LCAweDY4IH07Ci0rICAgIGludCBpLCBuOwotKwotKyAgICBrZXkgPSBGSVBTX3JzYV9uZXcoKTsK LSsgICAgYm4gPSBCTl9uZXcoKTsKLSsgICAgaWYgKCFrZXkgfHwgIWJuKQotKwlyZXR1cm4gMDsK LSsgICAgQk5fc2V0X3dvcmQoYm4sIDY1NTM3KTsKLSsgICAgaWYgKCFSU0FfZ2VuZXJhdGVfa2V5 X2V4KGtleSwgMTAyNCxibixOVUxMKSkKLSsJcmV0dXJuIDA7Ci0rICAgIEJOX2ZyZWUoYm4pOwot KyAgICAKLSsgICAgbiA9IEJOX251bV9ieXRlcyhrZXktPmQpOwotKyAgICBwcmludGYoIiBHZW5l cmF0ZWQgJWQgYnl0ZSBSU0EgcHJpdmF0ZSBrZXlcbiIsIG4pOwotKyAgICBwcmludGYoIlx0Qk4g a2V5IGJlZm9yZSBvdmVyd3JpdGluZzpcbiIpOwotKyAgICBkb19ibl9wcmludChzdGRvdXQsIGtl eS0+ZCk7Ci0rICAgIEJOX3JhbmQoa2V5LT5kLG4qOCwtMSwwKTsKLSsgICAgcHJpbnRmKCJcdEJO IGtleSBhZnRlciBvdmVyd3JpdGluZzpcbiIpOwotKyAgICBkb19ibl9wcmludChzdGRvdXQsIGtl eS0+ZCk7Ci0rCi0rICAgIHByaW50ZigiXHRjaGFyIGJ1ZmZlciBrZXkgYmVmb3JlIG92ZXJ3cml0 aW5nOiBcblx0XHQiKTsKLSsgICAgZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHVzZXJrZXkpOyBpKysp IHByaW50ZigiJTAyeCIsIHVzZXJrZXlbaV0pOwotKyAgICAgICAgcHJpbnRmKCJcbiIpOwotKyAg ICBSQU5EX2J5dGVzKHVzZXJrZXksIHNpemVvZiB1c2Vya2V5KTsKLSsgICAgcHJpbnRmKCJcdGNo YXIgYnVmZmVyIGtleSBhZnRlciBvdmVyd3JpdGluZzogXG5cdFx0Iik7Ci0rICAgIGZvcihpID0g MDsgaSA8IHNpemVvZih1c2Vya2V5KTsgaSsrKSBwcmludGYoIiUwMngiLCB1c2Vya2V5W2ldKTsK LSsgICAgICAgIHByaW50ZigiXG4iKTsKLSsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLStz dGF0aWMgaW50IEVycm9yOwotK2NvbnN0IGNoYXIgKiBGYWlsKGNvbnN0IGNoYXIgKm1zZykKLSsg ICAgewotKyAgICBkb19wcmludF9lcnJvcnMoKTsKLSsgICAgRXJyb3IrKzsKLSsgICAgcmV0dXJu IG1zZzsgCi0rICAgIH0KLSsKLStpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKLSsgICAg ewotKwotKyAgICBpbnQgZG9fY29ycnVwdF9yc2Ffa2V5Z2VuID0gMCwgZG9fY29ycnVwdF9kc2Ff a2V5Z2VuID0gMDsKLSsgICAgaW50IGJhZF9yc2EgPSAwLCBiYWRfZHNhID0gMDsKLSsgICAgaW50 IGRvX3JuZ19zdGljayA9IDA7Ci0rICAgIGludCBub19leGl0ID0gMDsKLSsKLSsgICAgcHJpbnRm KCJcdEZJUFMtbW9kZSB0ZXN0IGFwcGxpY2F0aW9uXG5cbiIpOwotKwotKyAgICAvKiBMb2FkIGVu dHJvcHkgZnJvbSBleHRlcm5hbCBmaWxlLCBpZiBhbnkgKi8KLSsgICAgUkFORF9sb2FkX2ZpbGUo Ii5ybmQiLCAxMDI0KTsKLSsKLSsgICAgaWYgKGFyZ3ZbMV0pIHsKLSsgICAgICAgIC8qIENvcnJ1 cHRlZCBLQVQgdGVzdHMgKi8KLSsgICAgICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJhZXMiKSkg ewotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9hZXMoKTsKLSsgICAgICAgICAgICBwcmludGYo IkFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsg ICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZGVzIikpIHsKLSsgICAgICAgICAg ICBGSVBTX2NvcnJ1cHRfZGVzKCk7Ci0rICAgICAgICAgICAgcHJpbnRmKCJERVMzLUVDQiBlbmNy eXB0aW9uL2RlY3J5cHRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsgICAgICAgIH0g ZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNhIikpIHsKLSsgICAgICAgICAgICBGSVBTX2Nv cnJ1cHRfZHNhKCk7Ci0rICAgICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRpb24gYW5k IHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7Ci0rICAgICAg ICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJzYSIpKSB7Ci0rICAgICAgICAgICAgRklQ U19jb3JydXB0X3JzYSgpOwotKyAgICAgICAgICAgIHByaW50ZigiUlNBIGtleSBnZW5lcmF0aW9u IGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOwotKyAg ICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJyc2FrZXkiKSkgewotKyAgICAgICAg ICAgIHByaW50ZigiUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3 aXRoIGNvcnJ1cHRlZCBrZXkuLi5cbiIpOwotKwkgICAgYmFkX3JzYSA9IDE7Ci0rCSAgICBub19l eGl0ID0gMTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicnNha2V5Z2Vu IikpIHsKLSsJICAgIGRvX2NvcnJ1cHRfcnNhX2tleWdlbiA9IDE7Ci0rCSAgICBub19leGl0ID0g MTsKLSsgICAgICAgICAgICBwcmludGYoIlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJl IHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Z2VuLi4uXG4iKTsKLSsgICAgICAgIH0gZWxz ZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNha2V5IikpIHsKLSsgICAgICAgICAgICBwcmludGYo IkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0 ZWQga2V5Li4uXG4iKTsKLSsJICAgIGJhZF9kc2EgPSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0r ICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRzYWtleWdlbiIpKSB7Ci0rCSAg ICBkb19jb3JydXB0X2RzYV9rZXlnZW4gPSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0rICAgICAg ICAgICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9u IHdpdGggY29ycnVwdGVkIGtleWdlbi4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJj bXAoYXJndlsxXSwgInNoYTEiKSkgewotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9zaGExKCk7 Ci0rICAgICAgICAgICAgcHJpbnRmKCJTSEEtMSBoYXNoIHdpdGggY29ycnVwdGVkIEtBVC4uLlxu Iik7Ci0rCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicm5nIikpIHsKLSsJICAgIEZJUFNf Y29ycnVwdF9ybmcoKTsKLSsJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJybmdzdGljayIp KSB7Ci0rCSAgICBkb19ybmdfc3RpY2sgPSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0rCSAgICBw cmludGYoIlJORyB0ZXN0IHdpdGggc3R1Y2sgY29udGludW91cyB0ZXN0Li4uXG4iKTsKLSsgICAg ICAgIH0gZWxzZSB7Ci0rICAgICAgICAgICAgcHJpbnRmKCJCYWQgYXJndW1lbnQgXCIlc1wiXG4i LCBhcmd2WzFdKTsKLSsgICAgICAgICAgICBleGl0KDEpOwotKyAgICAgICAgfQotKwlpZiAoIW5v X2V4aXQpIHsKLSsgICAgICAgIAlpZiAoIUZJUFNfbW9kZV9zZXQoMSkpIHsKLSsgCQkgICAgZG9f cHJpbnRfZXJyb3JzKCk7Ci0rICAgICAgICAJICAgIHByaW50ZigiUG93ZXItdXAgc2VsZiB0ZXN0 IGZhaWxlZFxuIik7Ci0rCQkgICAgZXhpdCgxKTsKLSsJCX0KLSsgICAgICAgIAlwcmludGYoIlBv d2VyLXVwIHNlbGYgdGVzdCBzdWNjZXNzZnVsXG4iKTsKLSsgICAgICAgIAlleGl0KDApOwotKwl9 Ci0rICAgIH0KLSsKLSsgICAgLyogTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9u Ci0rICAgICovCi0rICAgIHByaW50ZigiMS4gTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3Bl cmF0aW9uIHRlc3QuLi5cbiIpOwotKyAgICBwcmludGYoIlx0YS4gSW5jbHVkZWQgYWxnb3JpdGht IChELUgpLi4uIik7Ci0rICAgIHByaW50ZiggZGhfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAg RmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogUG93ZXItdXAgc2VsZiB0ZXN0Ci0rICAg ICovCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBwcmludGYoIjIuIEF1dG9tYXRpYyBw b3dlci11cCBzZWxmIHRlc3QuLi4iKTsKLSsgICAgaWYgKCFGSVBTX21vZGVfc2V0KDEpKQotKwl7 Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKyAgICAgICAgcHJpbnRmKEZhaWwoIkZBSUxFRCFcbiIp KTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBwcmludGYoInN1Y2Nlc3NmdWxcbiIpOwotKyAgICBp ZiAoZG9fY29ycnVwdF9kc2Ffa2V5Z2VuKQotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kc2Ff a2V5Z2VuKCk7Ci0rICAgIGlmIChkb19jb3JydXB0X3JzYV9rZXlnZW4pCi0rICAgICAgICAgICAg RklQU19jb3JydXB0X3JzYV9rZXlnZW4oKTsKLSsgICAgaWYgKGRvX3JuZ19zdGljaykKLSsgICAg ICAgICAgICBGSVBTX3JuZ19zdGljaygpOwotKwotKyAgICAvKiBBRVMgZW5jcnlwdGlvbi9kZWNy eXB0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiMy4gQUVTIGVuY3J5cHRpb24vZGVjcnlwdGlv bi4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfYWVzX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDog IEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIFJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQg ZW5jcnlwdGlvbi9kZWNyeXB0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiNC4gUlNBIGtleSBn ZW5lcmF0aW9uIGFuZCBlbmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKLSsgICAgcHJpbnRmKCBG SVBTX3JzYV90ZXN0KGJhZF9yc2EpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxu IikgKTsKLSsKLSsgICAgLyogREVTLUNCQyBlbmNyeXB0aW9uL2RlY3J5cHRpb24KLSsgICAgKi8K LSsgICAgcHJpbnRmKCI1LiBERVMtRUNCIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4uLiIpOwotKyAg ICBwcmludGYoIEZJUFNfZGVzM190ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlM RUQhXG4iKSApOwotKwotKyAgICAvKiBEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2 YWxpZGF0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiNi4gRFNBIGtleSBnZW5lcmF0aW9uIGFu ZCBzaWduYXR1cmUgdmFsaWRhdGlvbi4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfZHNhX3Rlc3Qo YmFkX2RzYSkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAg ICAvKiBTSEEtMSBoYXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2EuIFNIQS0xIGhhc2guLi4i KTsKLSsgICAgcHJpbnRmKCBGSVBTX3NoYTFfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFp bCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogU0hBLTI1NiBoYXNoCi0rICAgICovCi0rICAg IHByaW50ZigiN2IuIFNIQS0yNTYgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfc2hhMjU2 X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAg IC8qIFNIQS01MTIgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdjLiBTSEEtNTEyIGhhc2gu Li4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX3NoYTUxMl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6 ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBITUFDLVNIQS0xIGhhc2gKLSsgICAg Ki8KLSsgICAgcHJpbnRmKCI3ZC4gSE1BQy1TSEEtMSBoYXNoLi4uIik7Ci0rICAgIHByaW50Zigg RklQU19obWFjX3NoYTFfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxu IikgKTsKLSsKLSsgICAgLyogSE1BQy1TSEEtMjI0IGhhc2gKLSsgICAgKi8KLSsgICAgcHJpbnRm KCI3ZS4gSE1BQy1TSEEtMjI0IGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hh MjI0X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0r ICAgIC8qIEhNQUMtU0hBLTI1NiBoYXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2YuIEhNQUMt U0hBLTI1NiBoYXNoLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19obWFjX3NoYTI1Nl90ZXN0KCkg PyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBITUFD LVNIQS0zODQgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdnLiBITUFDLVNIQS0zODQgaGFz aC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGEzODRfdGVzdCgpID8gInN1Y2Nlc3Nm dWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogSE1BQy1TSEEtNTEyIGhh c2gKLSsgICAgKi8KLSsgICAgcHJpbnRmKCI3aC4gSE1BQy1TSEEtNTEyIGhhc2guLi4iKTsKLSsg ICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhNTEyX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZh aWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGlj IG9wZXJhdGlvbgotKyAgICAqLwotKyAgICBwcmludGYoIjguIE5vbi1BcHByb3ZlZCBjcnlwdG9n cmFwaGljIG9wZXJhdGlvbiB0ZXN0Li4uXG4iKTsKLSsgICAgcHJpbnRmKCJcdGEuIEluY2x1ZGVk IGFsZ29yaXRobSAoRC1IKS4uLiIpOwotKyAgICBwcmludGYoIGRoX3Rlc3QoKSA/ICJzdWNjZXNz ZnVsIGFzIGV4cGVjdGVkXG4iCi0rCSAgICA6IEZhaWwoImZhaWxlZCBJTkNPUlJFQ1RMWSFcbiIp ICk7Ci0rCi0rICAgIC8qIFplcm9pemF0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiOS4gWmVy by1pemF0aW9uLi4uXG4iKTsKLSsgICAgcHJpbnRmKCBaZXJvaXplKCkgPyAiXHRzdWNjZXNzZnVs IGFzIGV4cGVjdGVkXG4iCi0rCSAgICA6IEZhaWwoIlx0ZmFpbGVkIElOQ09SUkVDVExZIVxuIikg KTsKLSsKLSsgICAgcHJpbnRmKCJcbkFsbCB0ZXN0cyBjb21wbGV0ZWQgd2l0aCAlZCBlcnJvcnNc biIsIEVycm9yKTsKLSsgICAgcmV0dXJuIEVycm9yID8gMSA6IDA7Ci0rICAgIH0KLSsKLSsjZW5k aWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9maXBzL01ha2VmaWxlLmZpcHMgb3Bl bnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvTWFrZWZpbGUKLS0tLSBvcGVuc3NsLTEuMC4xai9jcnlw dG8vZmlwcy9NYWtlZmlsZS5maXBzCTIwMTQtMTAtMTYgMTM6MTk6MzUuMTAzMzA2NTE0ICswMjAw Ci0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL2ZpcHMvTWFrZWZpbGUJMjAxNC0xMC0xNiAxMzox OTozNS4xMDMzMDY1MTQgKzAyMDAKLUBAIC0wLDAgKzEsMzQxIEBACi0rIwotKyMgT3BlblNTTC9j cnlwdG8vZmlwcy9NYWtlZmlsZQotKyMKLSsKLStESVI9CWZpcHMKLStUT1A9CS4uLy4uCi0rQ0M9 CWNjCi0rSU5DTFVERVM9Ci0rQ0ZMQUc9LWcKLStNQUtFRklMRT0JTWFrZWZpbGUKLStBUj0JCWFy IHIKLSsKLStDRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCi0rCi0rR0VORVJBTD1NYWtlZmls ZQotK1RFU1Q9Zmlwc190ZXN0X3N1aXRlLmMgZmlwc19yYW5kdGVzdC5jCi0rQVBQUz0KLSsKLStQ Uk9HUkFNPSBmaXBzX3N0YW5kYWxvbmVfaG1hYwotK0VYRT0gJChQUk9HUkFNKSQoRVhFX0VYVCkK LSsKLStMSUI9JChUT1ApL2xpYmNyeXB0by5hCi0rTElCU1JDPWZpcHNfYWVzX3NlbGZ0ZXN0LmMg Zmlwc19kZXNfc2VsZnRlc3QuYyBmaXBzX2htYWNfc2VsZnRlc3QuYyBmaXBzX3JhbmRfc2VsZnRl c3QuYyBcCi0rICAgIGZpcHNfcnNhX3NlbGZ0ZXN0LmMgZmlwc19zaGFfc2VsZnRlc3QuYyBmaXBz LmMgZmlwc19kc2Ffc2VsZnRlc3QuYyAgZmlwc19yYW5kLmMgXAotKyAgICBmaXBzX3JzYV94OTMx Zy5jIGZpcHNfcG9zdC5jIGZpcHNfZHJiZ19jdHIuYyBmaXBzX2RyYmdfaGFzaC5jIGZpcHNfZHJi Z19obWFjLmMgXAotKyAgICBmaXBzX2RyYmdfbGliLmMgZmlwc19kcmJnX3JhbmQuYyBmaXBzX2Ry Ymdfc2VsZnRlc3QuYyBmaXBzX3JhbmRfbGliLmMgXAotKyAgICBmaXBzX2NtYWNfc2VsZnRlc3Qu YyBmaXBzX2VuYy5jIGZpcHNfbWQuYwotKwotK0xJQk9CSj1maXBzX2Flc19zZWxmdGVzdC5vIGZp cHNfZGVzX3NlbGZ0ZXN0Lm8gZmlwc19obWFjX3NlbGZ0ZXN0Lm8gZmlwc19yYW5kX3NlbGZ0ZXN0 Lm8gXAotKyAgICBmaXBzX3JzYV9zZWxmdGVzdC5vIGZpcHNfc2hhX3NlbGZ0ZXN0Lm8gZmlwcy5v IGZpcHNfZHNhX3NlbGZ0ZXN0Lm8gIGZpcHNfcmFuZC5vIFwKLSsgICAgZmlwc19yc2FfeDkzMWcu byBmaXBzX3Bvc3QubyBmaXBzX2RyYmdfY3RyLm8gZmlwc19kcmJnX2hhc2gubyBmaXBzX2RyYmdf aG1hYy5vIFwKLSsgICAgZmlwc19kcmJnX2xpYi5vIGZpcHNfZHJiZ19yYW5kLm8gZmlwc19kcmJn X3NlbGZ0ZXN0Lm8gZmlwc19yYW5kX2xpYi5vIFwKLSsgICAgZmlwc19jbWFjX3NlbGZ0ZXN0Lm8g Zmlwc19lbmMubyBmaXBzX21kLm8KLSsKLStMSUJDUllQVE89LUwuLiAtbGNyeXB0bwotKwotK1NS Qz0gJChMSUJTUkMpIGZpcHNfc3RhbmRhbG9uZV9obWFjLmMKLSsKLStFWEhFQURFUj0gZmlwcy5o IGZpcHNfcmFuZC5oCi0rSEVBREVSPQkkKEVYSEVBREVSKQotKwotK0FMTD0gICAgJChHRU5FUkFM KSAkKFNSQykgJChIRUFERVIpCi0rCi0rdG9wOgotKwkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1j cnlwdG8gU0RJUlM9JChESVIpIHN1Yl9hbGwpCi0rCi0rYWxsOglsaWIgZXhlCi0rCi0rbGliOgkk KExJQk9CSikKLSsJJChBUikgJChMSUIpICQoTElCT0JKKQotKwkkKFJBTkxJQikgJChMSUIpIHx8 IGVjaG8gTmV2ZXIgbWluZC4KLSsJQHRvdWNoIGxpYgotKwotK2V4ZToJJChFWEUpCi0rCi0rZmls ZXM6Ci0rCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01J TkZPCi0rCi0rbGlua3M6Ci0rCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9p bmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKLSsJQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5r LnBsIC4uLy4uL3Rlc3QgJChURVNUKQotKwlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwg Li4vLi4vYXBwcyAkKEFQUFMpCi0rCi0raW5zdGFsbDoKLSsJQFsgLW4gIiQoSU5TVEFMTFRPUCki IF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgotKwlAaGVhZGVybGlzdD0iJChF WEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRlcmxpc3QgOyBcCi0rCWRvICBcCi0rCShjcCAkJGkg JChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7IFwKLSsJ Y2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wv JCRpICk7IFwKLSsJZG9uZTsKLSsKLSt0YWdzOgotKwljdGFncyAkKFNSQykKLSsKLSt0ZXN0czoK LSsKLStsaW50OgotKwlsaW50IC1ETElOVCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKLSsKLStk ZXBlbmQ6Ci0rCUBbIC1uICIkKE1BS0VERVBFTkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB1cHBl ciBNYWtlZmlsZS4uLgotKwkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQo REVQRkxBRykgLS0gJChQUk9HUykgJChMSUJTUkMpCi0rCi0rZGNsZWFuOgotKwkkKFBFUkwpIC1w ZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAk KE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3Ci0rCW12IC1mIE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxF KQotKwotK2NsZWFuOgotKwlybSAtZiAqLm8gKi5vYmogbGliIHRhZ3MgY29yZSAucHVyZSAubmZz KiAqLm9sZCAqLmJhayBmbHVmZgotKwotKyQoRVhFKTogJChQUk9HUkFNKS5vCi0rCUZJUFNfU0hB X0FTTT0iIjsgZm9yIGkgaW4gJChTSEExX0FTTV9PQkopIHNoYTI1Ni5vOyBkbyBGSVBTX1NIQV9B U009IiQkRklQU19TSEFfQVNNIC4uL3NoYS8kJGkiIDsgZG9uZTsgXAotKwlmb3IgaSBpbiAkKENQ VUlEX09CSik7IGRvIEZJUFNfU0hBX0FTTT0iJCRGSVBTX1NIQV9BU00gLi4vJCRpIiA7IGRvbmU7 IFwKLSsJJChDQykgLW8gJEAgJChDRkxBR1MpICQoUFJPR1JBTSkubyAkJEZJUFNfU0hBX0FTTQot KwotKyMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBp dC4KLSsKLStmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYXNuMS5oCi0rZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBzLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwcy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2htYWMuaAotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xf dHlwLmgKLStmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3JzYS5oCi0rZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNr LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zeW1oYWNrcy5oIGZpcHMuYyBmaXBzX2xvY2wuaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jp by5oCi0rZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5o Ci0rZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX2Fl c19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfYWVzX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX2Flc19zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19hZXNfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX2Flc19zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfYWVzX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19hZXNfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19hZXNfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX2Flc19zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2Flc19zZWxmdGVzdC5jCi0r Zmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYmlvLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBzX2Rlc19zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2ZpcHMuaAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFz aC5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMu aAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgK LStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYu aAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5o Ci0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgK LStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgK LStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2Zp cHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNf ZGVzX3NlbGZ0ZXN0LmMKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h ZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0rZmlwc19kcmJnX2N0ci5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0r Zmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXZwLmgKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCi0rZmlwc19kcmJnX2N0 ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v YmpfbWFjLmgKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3Rz LmgKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5o Ci0rZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2Zp cHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3JhbmQuaAotK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3NhZmVzdGFjay5oCi0rZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotK2ZpcHNfZHJiZ19jdHIu bzogZmlwc19kcmJnX2N0ci5jIGZpcHNfcmFuZF9sY2wuaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0r Zmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK2ZpcHNfZHJiZ19oYXNo Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX2RyYmdfaGFzaC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKLStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStm aXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19k cmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX2Ry YmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfZHJiZ19o YXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9yYW5kLmgKLStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2Fm ZXN0YWNrLmgKLStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2su aAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZp cHNfZHJiZ19oYXNoLmMKLStmaXBzX2RyYmdfaGFzaC5vOiBmaXBzX3JhbmRfbGNsLmgKLStmaXBz X2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2FzbjEuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9i aW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX2RyYmdfaG1hYy5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgK LStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwc19k cmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCi0rZmlwc19kcmJn X2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oCi0rZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns Y29uZi5oCi0rZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2 LmgKLStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi0rZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc3ltaGFja3MuaCBmaXBzX2RyYmdfaG1hYy5jCi0rZmlwc19kcmJnX2htYWMubzogZmlwc19y YW5kX2xjbC5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNf ZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZw LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgK LStmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3NsY29uZi5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbHYuaAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xf dHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotK2ZpcHNfZHJiZ19saWIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAot K2ZpcHNfZHJiZ19saWIubzogZmlwc19kcmJnX2xpYi5jIGZpcHNfbG9jbC5oIGZpcHNfcmFuZF9s Y2wuaAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfZHJi Z19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lcnIuaAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNf ZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX2RyYmdf cmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19kcmJnX3JhbmQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX2RyYmdfcmFuZC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfZHJiZ19yYW5kLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5k LmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgK LStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNf ZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHJiZ19y YW5kLmMKLStmaXBzX2RyYmdfcmFuZC5vOiBmaXBzX3JhbmRfbGNsLmgKLStmaXBzX2RyYmdfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9hc24xLmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jp by5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8u aAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBz X2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCi0rZmlw c19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKLStmaXBzX2Ry Ymdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX2RyYmdf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfZHJiZ19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19kcmJnX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19kcmJn X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19kcmJn X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19kcmJn X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLStmaXBzX2RyYmdfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19kcmJnX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19kcmJnX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHJiZ19zZWxmdGVz dC5jCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IGZpcHNfZHJiZ19zZWxmdGVzdC5oIGZpcHNfbG9j bC5oIGZpcHNfcmFuZF9sY2wuaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlwc19kc2Ffc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2NyeXB0by5oCi0rZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Rz YS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0rZmlwc19kc2Ffc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAot K2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3NzbF90eXAuaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zdGFjay5oCi0rZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N5bWhhY2tzLmggZmlwc19kc2Ffc2VsZnRlc3QuYwotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86 IGZpcHNfbG9jbC5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJy LmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2htYWMuaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29zc2xfdHlwLmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfaG1hY19zZWxmdGVzdC5jCi0rZmlwc19wb3N0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0r Zmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvY3J5cHRvLmgKLStmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStmaXBzX3Bvc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlw c19yYW5kLmgKLStmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX3Bv c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX3Bvc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29z c2xfdHlwLmgKLStmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLStmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19wb3N0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfbG9jbC5oIGZpcHNfcG9z dC5jCi0rZmlwc19yYW5kLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVz LmgKLStmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYmlvLmgKLStmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Ny eXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0rZmlwc19yYW5kLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStmaXBz X3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZmlwc19yYW5kLmgKLStmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStm aXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX3Jh bmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29zc2xfdHlwLmgKLStmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX3JhbmQubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgK LStmaXBzX3JhbmQubzogZmlwc19sb2NsLmggZmlwc19yYW5kLmMKLStmaXBzX3JhbmRfbGliLm86 IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmgKLStmaXBzX3JhbmRfbGli Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jp by5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLStmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStmaXBzX3JhbmRf bGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2ZpcHNfcmFuZC5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1h Yy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2x2LmgKLStmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v c3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLStmaXBzX3JhbmRfbGliLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfcmFuZF9saWIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tz LmgKLStmaXBzX3JhbmRfbGliLm86IGZpcHNfcmFuZF9saWIuYwotK2ZpcHNfcmFuZF9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Fz bjEuaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgK LStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0r Zmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNfcmFu ZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKLStmaXBzX3Jh bmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAotK2ZpcHNfcmFuZF9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfcmFuZF9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19yYW5kX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX3JhbmRfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX3JhbmRfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX3JhbmRfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLStmaXBzX3JhbmRfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotK2ZpcHNfcmFuZF9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX3JhbmRfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX3JhbmRfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19sb2NsLmgKLStmaXBzX3Jh bmRfc2VsZnRlc3QubzogZmlwc19yYW5kX3NlbGZ0ZXN0LmMKLStmaXBzX3JzYV9zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8u aAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK2ZpcHNf cnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZmlwcy5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2xoYXNoLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqX21hYy5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3NsY29uZi5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2x2LmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Nz bF90eXAuaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2Eu aAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2su aAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0r Zmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlw c19yc2Ffc2VsZnRlc3QuYwotK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlwc19yc2FfeDkzMWcubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5o Ci0rZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfcnNhX3g5 MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19yc2FfeDkz MWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX3JzYV94OTMxZy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv cnNhLmgKLStmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNr LmgKLStmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2Zp cHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfcnNh X3g5MzFnLmMKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNu MS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK2Zp cHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2xoYXNoLmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29iamVjdHMuaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3NsY29uZi5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2x2LmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3NzbF90eXAuaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z YWZlc3RhY2suaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z aGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfc2hhX3NlbGZ0ZXN0LmMKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9obWFjL2htYWMuYy5maXBzIG9wZW5zc2wtMS4w LjFqL2NyeXB0by9obWFjL2htYWMuYwotLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9obWFjL2ht YWMuYy5maXBzCTIwMTQtMTAtMTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNz bC0xLjAuMWovY3J5cHRvL2htYWMvaG1hYy5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMTAzMzA2NTE0 ICswMjAwCi1AQCAtODEsMTEgKzgxLDYgQEAgaW50IEhNQUNfSW5pdF9leChITUFDX0NUWCAqY3R4 LCBjb25zdCB2bwotIAkJCUVWUGVycihFVlBfRl9ITUFDX0lOSVRfRVgsIEVWUF9SX0RJU0FCTEVE X0ZPUl9GSVBTKTsKLSAJCQlyZXR1cm4gMDsKLSAJCQl9Ci0tCQkvKiBPdGhlciBhbGdvcml0aG0g YmxvY2tpbmcgd2lsbCBiZSBkb25lIGluIEZJUFNfY21hY19pbml0LAotLQkJICogdmlhIEZJUFNf aG1hY19pbml0X2V4KCkuCi0tCQkgKi8KLS0JCWlmICghaW1wbCAmJiAhY3R4LT5pX2N0eC5lbmdp bmUpCi0tCQkJcmV0dXJuIEZJUFNfaG1hY19pbml0X2V4KGN0eCwga2V5LCBsZW4sIG1kLCBOVUxM KTsKLSAJCX0KLSAjZW5kaWYKLSAKLUBAIC05OSw2ICs5NCwxMyBAQCBpbnQgSE1BQ19Jbml0X2V4 KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHZvCi0gCi0gCWlmIChrZXkgIT0gTlVMTCkKLSAJCXsKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rCQlpZiAoRklQU19tb2RlKCkgJiYgIShtZC0+ZmxhZ3MgJiBF VlBfTURfRkxBR19GSVBTKQotKwkJJiYgKCEoY3R4LT5tZF9jdHguZmxhZ3MgJiBFVlBfTURfQ1RY X0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0rCQkgfHwgIShjdHgtPmlfY3R4LmZsYWdzICYgRVZQX01E X0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKQotKwkJIHx8ICEoY3R4LT5vX2N0eC5mbGFncyAmIEVW UF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykpKQotKwkJCWdvdG8gZXJyOwotKyNlbmRpZgot IAkJcmVzZXQ9MTsKLSAJCWo9RVZQX01EX2Jsb2NrX3NpemUobWQpOwotIAkJT1BFTlNTTF9hc3Nl cnQoaiA8PSAoaW50KXNpemVvZihjdHgtPmtleSkpOwotQEAgLTE1NSwxMCArMTU3LDYgQEAgaW50 IEhNQUNfSW5pdChITUFDX0NUWCAqY3R4LCBjb25zdCB2b2lkCi0gCi0gaW50IEhNQUNfVXBkYXRl KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBsZW4pCi0g CXsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWlmIChGSVBTX21vZGUoKSAmJiAhY3R4LT5pX2N0 eC5lbmdpbmUpCi0tCQlyZXR1cm4gRklQU19obWFjX3VwZGF0ZShjdHgsIGRhdGEsIGxlbik7Ci0t I2VuZGlmCi0gCXJldHVybiBFVlBfRGlnZXN0VXBkYXRlKCZjdHgtPm1kX2N0eCxkYXRhLGxlbik7 Ci0gCX0KLSAKLUBAIC0xNjYsMTAgKzE2NCw2IEBAIGludCBITUFDX0ZpbmFsKEhNQUNfQ1RYICpj dHgsIHVuc2lnbmVkIGMKLSAJewotIAl1bnNpZ25lZCBpbnQgaTsKLSAJdW5zaWduZWQgY2hhciBi dWZbRVZQX01BWF9NRF9TSVpFXTsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWlmIChGSVBTX21v ZGUoKSAmJiAhY3R4LT5pX2N0eC5lbmdpbmUpCi0tCQlyZXR1cm4gRklQU19obWFjX2ZpbmFsKGN0 eCwgbWQsIGxlbik7Ci0tI2VuZGlmCi0gCi0gCWlmICghRVZQX0RpZ2VzdEZpbmFsX2V4KCZjdHgt Pm1kX2N0eCxidWYsJmkpKQotIAkJZ290byBlcnI7Ci1AQCAtMjA5LDEzICsyMDMsNiBAQCBpbnQg SE1BQ19DVFhfY29weShITUFDX0NUWCAqZGN0eCwgSE1BQ19DCi0gCi0gdm9pZCBITUFDX0NUWF9j bGVhbnVwKEhNQUNfQ1RYICpjdHgpCi0gCXsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWlmIChG SVBTX21vZGUoKSAmJiAhY3R4LT5pX2N0eC5lbmdpbmUpCi0tCQl7Ci0tCQlGSVBTX2htYWNfY3R4 X2NsZWFudXAoY3R4KTsKLS0JCXJldHVybjsKLS0JCX0KLS0jZW5kaWYKLSAJRVZQX01EX0NUWF9j bGVhbnVwKCZjdHgtPmlfY3R4KTsKLSAJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgtPm9fY3R4KTsK LSAJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgtPm1kX2N0eCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEu MC4xai9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL21k YzIvbWRjMmRnc3QuYwotLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMu ZmlwcwkyMDE0LTEwLTE1IDE0OjUzOjM5LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4w LjFqL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMJMjAxNC0xMC0xNiAxMzoxOTozNS4xMDMzMDY1MTQg KzAyMDAKLUBAIC03Niw3ICs3Niw3IEBACi0gCQkJKigoYykrKyk9KHVuc2lnbmVkIGNoYXIpKCgo bCk+PjI0TCkmMHhmZikpCi0gCi0gc3RhdGljIHZvaWQgbWRjMl9ib2R5KE1EQzJfQ1RYICpjLCBj b25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGxlbik7Ci0tZmlwc19tZF9pbml0KE1EQzIp Ci0rbm9uZmlwc19tZF9pbml0KE1EQzIpCi0gCXsKLSAJYy0+bnVtPTA7Ci0gCWMtPnBhZF90eXBl PTE7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vbWQyL21kMl9kZ3N0LmMuZmlwcyBv cGVuc3NsLTEuMC4xai9jcnlwdG8vbWQyL21kMl9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4xai9j cnlwdG8vbWQyL21kMl9kZ3N0LmMuZmlwcwkyMDE0LTEwLTE1IDE0OjUzOjM5LjAwMDAwMDAwMCAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9tZDIvbWQyX2Rnc3QuYwkyMDE0LTEwLTE2 IDEzOjE5OjM1LjEwMzMwNjUxNCArMDIwMAotQEAgLTYyLDYgKzYyLDExIEBACi0gI2luY2x1ZGUg PG9wZW5zc2wvbWQyLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSAjaW5jbHVk ZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotIAot IGNvbnN0IGNoYXIgTUQyX3ZlcnNpb25bXT0iTUQyIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7Ci0g Ci1AQCAtMTE2LDcgKzEyMSw3IEBAIGNvbnN0IGNoYXIgKk1EMl9vcHRpb25zKHZvaWQpCi0gCQly ZXR1cm4oIm1kMihpbnQpIik7Ci0gCX0KLSAKLS1maXBzX21kX2luaXQoTUQyKQotK25vbmZpcHNf bWRfaW5pdChNRDIpCi0gCXsKLSAJYy0+bnVtPTA7Ci0gCW1lbXNldChjLT5zdGF0ZSwwLHNpemVv ZiBjLT5zdGF0ZSk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vbWQ0L21kNF9kZ3N0 LmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMKLS0tLSBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMuZmlwcwkyMDE0LTEwLTE1IDE0OjUzOjM5LjAw MDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYwky MDE0LTEwLTE2IDEzOjE5OjM1LjEwNDMwNjUzNiArMDIwMAotQEAgLTcxLDcgKzcxLDcgQEAgY29u c3QgY2hhciBNRDRfdmVyc2lvbltdPSJNRDQiIE9QRU5TU0xfVgotICNkZWZpbmUgSU5JVF9EQVRB X0MgKHVuc2lnbmVkIGxvbmcpMHg5OGJhZGNmZUwKLSAjZGVmaW5lIElOSVRfREFUQV9EICh1bnNp Z25lZCBsb25nKTB4MTAzMjU0NzZMCi0gCi0tZmlwc19tZF9pbml0KE1ENCkKLStub25maXBzX21k X2luaXQoTUQ0KQotIAl7Ci0gCW1lbXNldCAoYywwLHNpemVvZigqYykpOwotIAljLT5BPUlOSVRf REFUQV9BOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL21kNS9tZDVfZGdzdC5jLmZp cHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL21kNS9tZDVfZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAu MWovY3J5cHRvL21kNS9tZDVfZGdzdC5jLmZpcHMJMjAxNC0xMC0xNSAxNDo1MzozOS4wMDAwMDAw MDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMJMjAxNC0x MC0xNiAxMzoxOTozNS4xMDQzMDY1MzYgKzAyMDAKLUBAIC03MSw3ICs3MSw3IEBAIGNvbnN0IGNo YXIgTUQ1X3ZlcnNpb25bXT0iTUQ1IiBPUEVOU1NMX1YKLSAjZGVmaW5lIElOSVRfREFUQV9DICh1 bnNpZ25lZCBsb25nKTB4OThiYWRjZmVMCi0gI2RlZmluZSBJTklUX0RBVEFfRCAodW5zaWduZWQg bG9uZykweDEwMzI1NDc2TAotIAotLWZpcHNfbWRfaW5pdChNRDUpCi0rbm9uZmlwc19tZF9pbml0 KE1ENSkKLSAJewotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKLSAJYy0+QT1JTklUX0RBVEFf QTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9vX2ZpcHMuYy5maXBzIG9wZW5zc2wt MS4wLjFqL2NyeXB0by9vX2ZpcHMuYwotLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9vX2ZpcHMu Yy5maXBzCTIwMTQtMTAtMTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0x LjAuMWovY3J5cHRvL29fZmlwcy5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMTA0MzA2NTM2ICswMjAw Ci1AQCAtNzksNiArNzksOCBAQCBpbnQgRklQU19tb2RlX3NldChpbnQgcikKLSAjaWZuZGVmIEZJ UFNfQVVUSF9VU0VSX1BBU1MKLSAjZGVmaW5lIEZJUFNfQVVUSF9VU0VSX1BBU1MJIkRlZmF1bHQg RklQUyBDcnlwdG8gVXNlciBQYXNzd29yZCIKLSAjZW5kaWYKLSsJaWYgKHIgJiYgRklQU19tb2R1 bGVfbW9kZSgpKSAvKiBjYW4gYmUgaW1wbGljaXRseSBpbml0aWFsaXplZCBieSBPUEVOU1NMX2lu aXQoKSAqLwotKwkJcmV0dXJuIDE7Ci0gCWlmICghRklQU19tb2R1bGVfbW9kZV9zZXQociwgRklQ U19BVVRIX1VTRVJfUEFTUykpCi0gCQlyZXR1cm4gMDsKLSAJaWYgKHIpCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4xai9jcnlwdG8vb19pbml0LmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vb19p bml0LmMKLS0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vb19pbml0LmMuZmlwcwkyMDE0LTEwLTE1 IDE0OjUzOjM5LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9vX2lu aXQuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjEwNDMwNjUzNiArMDIwMAotQEAgLTU1LDI4ICs1NSw2 OCBAQAotICNpbmNsdWRlIDxlX29zLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0gI2lm ZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSsjaW5jbHVkZSA8c3lz L3N0YXQuaD4KLSsjaW5jbHVkZSA8ZmNudGwuaD4KLSsjaW5jbHVkZSA8dW5pc3RkLmg+Ci0rI2lu Y2x1ZGUgPGVycm5vLmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotICNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rCi0rI2RlZmluZSBGSVBTX01P REVfU1dJVENIX0ZJTEUgIi9wcm9jL3N5cy9jcnlwdG8vZmlwc19lbmFibGVkIgotKwotK3N0YXRp YyB2b2lkIGluaXRfZmlwc19tb2RlKHZvaWQpCi0rCXsKLSsJY2hhciBidWZbMl0gPSAiMCI7Ci0r CWludCBmZDsKLSsJCi0rCWlmIChnZXRlbnYoIk9QRU5TU0xfRk9SQ0VfRklQU19NT0RFIikgIT0g TlVMTCkKLSsJCXsKLSsJCWJ1ZlswXSA9ICcxJzsKLSsJCX0KLSsJZWxzZSBpZiAoKGZkID0gb3Bl bihGSVBTX01PREVfU1dJVENIX0ZJTEUsIE9fUkRPTkxZKSkgPj0gMCkKLSsJCXsKLSsJCXdoaWxl IChyZWFkKGZkLCBidWYsIHNpemVvZihidWYpKSA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOwotKwkJ Y2xvc2UoZmQpOwotKwkJfQotKwkvKiBGYWlsdXJlIHJlYWRpbmcgdGhlIGZpcHMgbW9kZSBzd2l0 Y2ggZmlsZSBtZWFucyBqdXN0IG5vdAotKwkgKiBzd2l0Y2hpbmcgaW50byBGSVBTIG1vZGUuIFdl IHdvdWxkIGJyZWFrIHRvbyBtYW55IHRoaW5ncwotKwkgKiBvdGhlcndpc2UuIAotKwkgKi8KLSsJ Ci0rCWlmIChidWZbMF0gPT0gJzEnKQotKwkJewotKwkJRklQU19tb2RlX3NldCgxKTsKLSsJCX0K LSsJfQotICNlbmRpZgotIAotIC8qIFBlcmZvcm0gYW55IGVzc2VudGlhbCBPcGVuU1NMIGluaXRp YWxpemF0aW9uIG9wZXJhdGlvbnMuCi0gICogQ3VycmVudGx5IG9ubHkgc2V0cyBGSVBTIGNhbGxi YWNrcwotICAqLwotIAotLXZvaWQgT1BFTlNTTF9pbml0KHZvaWQpCi0rdm9pZCBPUEVOU1NMX2lu aXRfbGlicmFyeSh2b2lkKQotIAl7Ci0gCXN0YXRpYyBpbnQgZG9uZSA9IDA7Ci0gCWlmIChkb25l KQotIAkJcmV0dXJuOwotIAlkb25lID0gMTsKLSAjaWZkZWYgT1BFTlNTTF9GSVBTCi0tCUZJUFNf c2V0X2xvY2tpbmdfY2FsbGJhY2tzKENSWVBUT19sb2NrLCBDUllQVE9fYWRkX2xvY2spOwotLQlG SVBTX3NldF9lcnJvcl9jYWxsYmFja3MoRVJSX3B1dF9lcnJvciwgRVJSX2FkZF9lcnJvcl92ZGF0 YSk7Ci0tCUZJUFNfc2V0X21hbGxvY19jYWxsYmFja3MoQ1JZUFRPX21hbGxvYywgQ1JZUFRPX2Zy ZWUpOwotIAlSQU5EX2luaXRfZmlwcygpOwotKwlpbml0X2ZpcHNfbW9kZSgpOwotKwlpZiAoIUZJ UFNfbW9kZSgpKQotKwkJewotKwkJLyogQ2xlYW4gdXAgcHJlbWF0dXJlbHkgc2V0IGRlZmF1bHQg cmFuZCBtZXRob2QgKi8KLSsJCVJBTkRfc2V0X3JhbmRfbWV0aG9kKE5VTEwpOwotKwkJfQotICNl bmRpZgotICNpZiAwCi0gCWZwcmludGYoc3RkZXJyLCAiQ2FsbGVkIE9QRU5TU0xfaW5pdFxuIik7 Ci0gI2VuZGlmCi0gCX0KLSAKLSt2b2lkIE9QRU5TU0xfaW5pdCh2b2lkKQotKwl7Ci0rCU9QRU5T U0xfaW5pdF9saWJyYXJ5KCk7Ci0rCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9v cGVuc3NsY29uZi5oLmluLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL29wZW5zc2xjb25mLmgu aW4KLS0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbi5maXBzCTIwMTQt MTAtMTUgMTQ6NTE6MDYuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRv L29wZW5zc2xjb25mLmguaW4JMjAxNC0xMC0xNiAxMzoxOTozNS4xMDQzMDY1MzYgKzAyMDAKLUBA IC0xLDUgKzEsMjAgQEAKLSAvKiBjcnlwdG8vb3BlbnNzbGNvbmYuaC5pbiAqLwotIAotKyNpZmRl ZiBPUEVOU1NMX0RPSU5HX01BS0VERVBFTkQKLSsKLSsvKiBJbmNsdWRlIGFueSBzeW1ib2xzIGhl cmUgdGhhdCBoYXZlIHRvIGJlIGV4cGxpY2l0bHkgc2V0IHRvIGVuYWJsZSBhIGZlYXR1cmUKLSsg KiB0aGF0IHNob3VsZCBiZSB2aXNpYmxlIHRvIG1ha2VkZXBlbmQuCi0rICoKLSsgKiBbT3VyICJt YWtlIGRlcGVuZCIgZG9lc24ndCBhY3R1YWxseSBsb29rIGF0IHRoaXMsIHdlIHVzZSBhY3R1YWwg YnVpbGQgc2V0dGluZ3MKLSsgKiBpbnN0ZWFkOyB3ZSB3YW50IHRvIG1ha2UgaXQgZWFzeSB0byBy ZW1vdmUgc3ViZGlyZWN0b3JpZXMgd2l0aCBkaXNhYmxlZCBhbGdvcml0aG1zLl0KLSsgKi8KLSsK LSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNkZWZpbmUgT1BFTlNTTF9GSVBTCi0rI2VuZGlmCi0r Ci0rI2VuZGlmCi0rCi0gLyogR2VuZXJhdGUgODAzODYgY29kZT8gKi8KLSAjdW5kZWYgSTM4Nl9P TkxZCi0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vcmFuZC9tZF9yYW5kLmMuZmlw cyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vcmFuZC9tZF9yYW5kLmMKLS0tLSBvcGVuc3NsLTEuMC4x ai9jcnlwdG8vcmFuZC9tZF9yYW5kLmMuZmlwcwkyMDE0LTEwLTE1IDE0OjUzOjM5LjAwMDAwMDAw MCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9yYW5kL21kX3JhbmQuYwkyMDE0LTEw LTE2IDEzOjE5OjM1LjEwNDMwNjUzNiArMDIwMAotQEAgLTM5MSw3ICszOTEsMTAgQEAgaW50IHNz bGVheV9yYW5kX2J5dGVzKHVuc2lnbmVkIGNoYXIgKmJ1ZgotIAlDUllQVE9fd191bmxvY2soQ1JZ UFRPX0xPQ0tfUkFORDIpOwotIAljcnlwdG9fbG9ja19yYW5kID0gMTsKLSAKLS0JaWYgKCFpbml0 aWFsaXplZCkKLSsJLyogYWx3YXlzIHBvbGwgZm9yIGV4dGVybmFsIGVudHJvcHkgaW4gRklQUyBt b2RlLCBkcmJnIHByb3ZpZGVzIHRoZSAKLSsJICogZXhwYW5zaW9uCi0rCSAqLwotKwlpZiAoIWlu aXRpYWxpemVkIHx8IEZJUFNfbW9kdWxlX21vZGUoKSkgCi0gCQl7Ci0gCQlSQU5EX3BvbGwoKTsK LSAJCWluaXRpYWxpemVkID0gMTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9yYW5k L3JhbmQuaC5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9yYW5kL3JhbmQuaAotLS0tIG9wZW5z c2wtMS4wLjFqL2NyeXB0by9yYW5kL3JhbmQuaC5maXBzCTIwMTQtMTAtMTYgMTM6MTk6MzQuNzc1 Mjk5MTA5ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL3JhbmQvcmFuZC5oCTIwMTQt MTAtMTYgMTM6MTk6MzUuMTA1MzA2NTU5ICswMjAwCi1AQCAtMTMzLDE2ICsxMzMsMzQgQEAgdm9p ZCBFUlJfbG9hZF9SQU5EX3N0cmluZ3Modm9pZCk7Ci0gLyogRXJyb3IgY29kZXMgZm9yIHRoZSBS QU5EIGZ1bmN0aW9ucy4gKi8KLSAKLSAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KLSsjZGVmaW5lIFJB TkRfRl9FTkdfUkFORF9HRVRfUkFORF9NRVRIT0QJCQkgMTA4Ci0rI2RlZmluZSBSQU5EX0ZfRklQ U19SQU5ECQkJCSAxMDMKLSsjZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkRfQllURVMJCQkJIDEwMgot KyNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORF9TRVRfRFQJCQkJIDEwNgotKyNkZWZpbmUgUkFORF9G X0ZJUFNfWDkzMV9TRVRfRFQJCQkJIDEwNgotKyNkZWZpbmUgUkFORF9GX0ZJUFNfU0VUX0RUCQkJ CSAxMDQKLSsjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9QUk5HX1NFRUQJCQkgMTA3Ci0rI2RlZmlu ZSBSQU5EX0ZfRklQU19TRVRfVEVTVF9NT0RFCQkJIDEwNQotICNkZWZpbmUgUkFORF9GX1JBTkRf R0VUX1JBTkRfTUVUSE9ECQkJIDEwMQotLSNkZWZpbmUgUkFORF9GX1JBTkRfSU5JVF9GSVBTCQkJ CSAxMDIKLSsjZGVmaW5lIFJBTkRfRl9SQU5EX0lOSVRfRklQUwkJCQkgMTA5Ci0gI2RlZmluZSBS QU5EX0ZfU1NMRUFZX1JBTkRfQllURVMJCQkgMTAwCi0gCi0gLyogUmVhc29uIGNvZGVzLiAqLwot LSNkZWZpbmUgUkFORF9SX0RVQUxfRUNfRFJCR19ESVNBQkxFRAkJCSAxMDQKLS0jZGVmaW5lIFJB TkRfUl9FUlJPUl9JTklUSUFMSVNJTkdfRFJCRwkJCSAxMDIKLS0jZGVmaW5lIFJBTkRfUl9FUlJP Ul9JTlNUQU5USUFUSU5HX0RSQkcJCQkgMTAzCi0tI2RlZmluZSBSQU5EX1JfTk9fRklQU19SQU5E T01fTUVUSE9EX1NFVAkJIDEwMQotKyNkZWZpbmUgUkFORF9SX0RVQUxfRUNfRFJCR19ESVNBQkxF RAkJCSAxMTQKLSsjZGVmaW5lIFJBTkRfUl9FUlJPUl9JTklUSUFMSVNJTkdfRFJCRwkJCSAxMTIK LSsjZGVmaW5lIFJBTkRfUl9FUlJPUl9JTlNUQU5USUFUSU5HX0RSQkcJCQkgMTEzCi0rI2RlZmlu ZSBSQU5EX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMDUKLSsjZGVmaW5lIFJBTkRfUl9OT1RfSU5f VEVTVF9NT0RFCQkJCSAxMDYKLSsjZGVmaW5lIFJBTkRfUl9OT19GSVBTX1JBTkRPTV9NRVRIT0Rf U0VUCQkgMTExCi0rI2RlZmluZSBSQU5EX1JfTk9fS0VZX1NFVAkJCQkgMTA3Ci0rI2RlZmluZSBS QU5EX1JfUFJOR19BU0tJTkdfRk9SX1RPT19NVUNICQkJIDEwMQotKyNkZWZpbmUgUkFORF9SX1BS TkdfRVJST1IJCQkJIDEwOAotKyNkZWZpbmUgUkFORF9SX1BSTkdfS0VZRUQJCQkJIDEwOQotKyNk ZWZpbmUgUkFORF9SX1BSTkdfTk9UX1JFS0VZRUQJCQkJIDEwMgotKyNkZWZpbmUgUkFORF9SX1BS TkdfTk9UX1JFU0VFREVECQkJIDEwMwotICNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1NFRURFRAkJ CQkgMTAwCi0rI2RlZmluZSBSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENIX0tFWQkJIDEx MAotKyNkZWZpbmUgUkFORF9SX1BSTkdfU1RVQ0sJCQkJIDEwNAotIAotICNpZmRlZiAgX19jcGx1 c3BsdXMKLSB9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0 LmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMKLS0tLSBvcGVu c3NsLTEuMC4xai9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMuZmlwcwkyMDE0LTEwLTE1IDE0OjUz OjM5LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9yaXBlbWQvcm1k X2Rnc3QuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjEwNTMwNjU1OSArMDIwMAotQEAgLTcwLDcgKzcw LDcgQEAgY29uc3QgY2hhciBSTUQxNjBfdmVyc2lvbltdPSJSSVBFLU1EMTYwIgotICAgICAgdm9p ZCByaXBlbWQxNjBfYmxvY2soUklQRU1EMTYwX0NUWCAqYywgdW5zaWduZWQgbG9uZyAqcCxzaXpl X3QgbnVtKTsKLSAjICBlbmRpZgotIAotLWZpcHNfbWRfaW5pdChSSVBFTUQxNjApCi0rbm9uZmlw c19tZF9pbml0KFJJUEVNRDE2MCkKLSAJewotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKLSAJ Yy0+QT1SSVBFTUQxNjBfQTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9yc2EvcnNh X2NycHQuYy5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9yc2EvcnNhX2NycHQuYwotLS0tIG9w ZW5zc2wtMS4wLjFqL2NyeXB0by9yc2EvcnNhX2NycHQuYy5maXBzCTIwMTQtMTAtMTUgMTQ6NTM6 MzkuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL3JzYS9yc2FfY3Jw dC5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMTA1MzA2NTU5ICswMjAwCi1AQCAtOTAsMTAgKzkwLDkg QEAgaW50IFJTQV9wcml2YXRlX2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0Ci0gCSAgICAgUlNBICpy c2EsIGludCBwYWRkaW5nKQotIAl7Ci0gI2lmZGVmIE9QRU5TU0xfRklQUwotLQlpZiAoRklQU19t b2RlKCkgJiYgIShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpCi0tCQkJ JiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQotKwlpZihGSVBTX21v ZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCi0gCQl7Ci0t CQlSU0FlcnIoUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01F VEhPRCk7Ci0rCQlSU0FlcnIoUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCwgUlNBX1JfT1BFUkFU SU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0gCQlyZXR1cm4gLTE7Ci0gCQl9Ci0gI2Vu ZGlmCi1AQCAtMTE4LDEwICsxMTcsOSBAQCBpbnQgUlNBX3B1YmxpY19kZWNyeXB0KGludCBmbGVu LCBjb25zdCB1Ci0gCSAgICAgUlNBICpyc2EsIGludCBwYWRkaW5nKQotIAl7Ci0gI2lmZGVmIE9Q RU5TU0xfRklQUwotLQlpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPm1ldGgtPmZsYWdzICYgUlNB X0ZMQUdfRklQU19NRVRIT0QpCi0tCQkJJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJ UFNfQUxMT1cpKQotKwlpZihGSVBTX21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19O T05fRklQU19BTExPVykpCi0gCQl7Ci0tCQlSU0FlcnIoUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBU LCBSU0FfUl9OT05fRklQU19SU0FfTUVUSE9EKTsKLSsJCVJTQWVycihSU0FfRl9SU0FfUFVCTElD X0RFQ1JZUFQsIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUpOwotIAkJ cmV0dXJuIC0xOwotIAkJfQotICNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRv L3JzYS9yc2FfZWF5LmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vcnNhL3JzYV9lYXkuYwot LS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9yc2EvcnNhX2VheS5jLmZpcHMJMjAxNC0xMC0xNSAx NDo1MzozOS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vcnNhL3Jz YV9lYXkuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjEwNTMwNjU1OSArMDIwMAotQEAgLTExNCw2ICsx MTQsMTAgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3Jz YS5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNl bmRpZgotIAotICNpZm5kZWYgUlNBX05VTEwKLSAKLUBAIC0xMzgsNyArMTQyLDcgQEAgc3RhdGlj IFJTQV9NRVRIT0QgcnNhX3BrY3MxX2VheV9tZXRoPXsKLSAJQk5fbW9kX2V4cF9tb250LCAvKiBY WFggcHJvYmFibHkgd2Ugc2hvdWxkIG5vdCB1c2UgTW9udGdvbWVyeSBpZiAgZSA9PSAzICovCi0g CVJTQV9lYXlfaW5pdCwKLSAJUlNBX2VheV9maW5pc2gsCi0tCTAsIC8qIGZsYWdzICovCi0rCVJT QV9GTEFHX0ZJUFNfTUVUSE9ELCAvKiBmbGFncyAqLwotIAlOVUxMLAotIAkwLCAvKiByc2Ffc2ln biAqLwotIAkwLCAvKiByc2FfdmVyaWZ5ICovCi1AQCAtMTU4LDYgKzE2MiwyNCBAQCBzdGF0aWMg aW50IFJTQV9lYXlfcHVibGljX2VuY3J5cHQoaW50IGZsCi0gCXVuc2lnbmVkIGNoYXIgKmJ1Zj1O VUxMOwotIAlCTl9DVFggKmN0eD1OVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYo RklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCQl7 Ci0rCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVCxGSVBTX1JfRklQU19T RUxGVEVTVF9GQUlMRUQpOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsKLSsJCWlmICghKHJzYS0+ ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykKLSsJCQkmJiAoQk5fbnVtX2JpdHMocnNh LT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQkJewotKwkJCVJT QWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01B TEwpOwotKwkJCXJldHVybiAtMTsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmIChCTl9u dW1fYml0cyhyc2EtPm4pID4gT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUykKLSAJCXsKLSAJ CVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBULCBSU0FfUl9NT0RVTFVTX1RPT19M QVJHRSk7Ci1AQCAtMzYxLDYgKzM4MywyNCBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9l bmNyeXB0KGludCBmCi0gCUJJR05VTSAqdW5ibGluZCA9IE5VTEw7Ci0gCUJOX0JMSU5ESU5HICpi bGluZGluZyA9IE5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2Rl KCkpCi0rCQl7Ci0rCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJCXsKLSsJCQlGSVBT ZXJyKEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9G QUlMRUQpOwotKwkJCXJldHVybiAtMTsKLSsJCQl9Ci0rCi0rCQlpZiAoIShyc2EtPmZsYWdzICYg UlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0rCQkJJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBP UEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJCXsKLSsJCQlSU0FlcnIoUlNB X0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0r CQkJcmV0dXJuIC0xOwotKwkJCX0KLSsJCX0KLSsjZW5kaWYKLSsKLSAJaWYgKChjdHg9Qk5fQ1RY X25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKLSAJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0gCWYgICA9 IEJOX0NUWF9nZXQoY3R4KTsKLUBAIC01MDQsNiArNTQ0LDI0IEBAIHN0YXRpYyBpbnQgUlNBX2Vh eV9wcml2YXRlX2RlY3J5cHQoaW50IGYKLSAJQklHTlVNICp1bmJsaW5kID0gTlVMTDsKLSAJQk5f QkxJTkRJTkcgKmJsaW5kaW5nID0gTlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlm IChGSVBTX21vZGUoKSkKLSsJCXsKLSsJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQkJ ewotKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBULEZJUFNfUl9GSVBT X1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0KLSsKLSsJCWlmICghKHJz YS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykKLSsJCQkmJiAoQk5fbnVtX2JpdHMo cnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQkJewotKwkJ CVJTQWVycihSU0FfRl9SU0FfRUFZX1BSSVZBVEVfREVDUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9P X1NNQUxMKTsKLSsJCQlyZXR1cm4gLTE7Ci0rCQkJfQotKwkJfQotKyNlbmRpZgotKwotIAlpZigo Y3R4ID0gQk5fQ1RYX25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKLSAJQk5fQ1RYX3N0YXJ0KGN0 eCk7Ci0gCWYgICA9IEJOX0NUWF9nZXQoY3R4KTsKLUBAIC02MzksNiArNjk3LDI0IEBAIHN0YXRp YyBpbnQgUlNBX2VheV9wdWJsaWNfZGVjcnlwdChpbnQgZmwKLSAJdW5zaWduZWQgY2hhciAqYnVm PU5VTEw7Ci0gCUJOX0NUWCAqY3R4PU5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlp ZiAoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJ CXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULEZJUFNfUl9GSVBT X1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwotKwkJaWYgKCEocnNh LT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQotKwkJCSYmIChCTl9udW1fYml0cyhy c2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKLSsJCQl7Ci0rCQkJ UlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19T TUFMTCk7Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0KLSsJCX0KLSsjZW5kaWYKLSsKLSAJaWYgKEJO X251bV9iaXRzKHJzYS0+bikgPiBPUEVOU1NMX1JTQV9NQVhfTU9EVUxVU19CSVRTKQotIAkJewot IAkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX01PRFVMVVNfVE9P X0xBUkdFKTsKLUBAIC04OTcsNiArOTczLDkgQEAgZXJyOgotIAotIHN0YXRpYyBpbnQgUlNBX2Vh eV9pbml0KFJTQSAqcnNhKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0 ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCXJzYS0+ZmxhZ3N8PVJTQV9GTEFHX0NBQ0hFX1BVQkxJ Q3xSU0FfRkxBR19DQUNIRV9QUklWQVRFOwotIAlyZXR1cm4oMSk7Ci0gCX0KLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjFqL2NyeXB0by9yc2EvcnNhX2Vyci5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5 cHRvL3JzYS9yc2FfZXJyLmMKLS0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vcnNhL3JzYV9lcnIu Yy5maXBzCTIwMTQtMTAtMTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0x LjAuMWovY3J5cHRvL3JzYS9yc2FfZXJyLmMJMjAxNC0xMC0xNiAxMzoxOTozNS4xMDUzMDY1NTkg KzAyMDAKLUBAIC0xMjEsNiArMTIxLDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSU0Ffc3Ry X2Z1bmN0c1tdPQotIHtFUlJfRlVOQyhSU0FfRl9SU0FfUFVCTElDX0VOQ1JZUFQpLAkiUlNBX3B1 YmxpY19lbmNyeXB0In0sCi0ge0VSUl9GVU5DKFJTQV9GX1JTQV9QVUJfREVDT0RFKSwJIlJTQV9Q VUJfREVDT0RFIn0sCi0ge0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRVUF9CTElORElORyksCSJSU0Ff c2V0dXBfYmxpbmRpbmcifSwKLSt7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhP RCksCSJSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kIn0sCi0re0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRf TUVUSE9EKSwJIlJTQV9zZXRfbWV0aG9kIn0sCi0ge0VSUl9GVU5DKFJTQV9GX1JTQV9TSUdOKSwJ IlJTQV9zaWduIn0sCi0ge0VSUl9GVU5DKFJTQV9GX1JTQV9TSUdOX0FTTjFfT0NURVRfU1RSSU5H KSwJIlJTQV9zaWduX0FTTjFfT0NURVRfU1RSSU5HIn0sCi0ge0VSUl9GVU5DKFJTQV9GX1JTQV9W RVJJRlkpLAkiUlNBX3ZlcmlmeSJ9LAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL3Jz YS9yc2FfZ2VuLmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vcnNhL3JzYV9nZW4uYwotLS0t IG9wZW5zc2wtMS4wLjFqL2NyeXB0by9yc2EvcnNhX2dlbi5jLmZpcHMJMjAxNC0xMC0xNSAxNDo1 MzozOS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vcnNhL3JzYV9n ZW4uYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjEwNjMwNjU4MSArMDIwMAotQEAgLTY5LDYgKzY5LDc4 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 LSBlcnI6Ci0gCWlmIChvayA9PSAtMSkKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9y c2EvcnNhLmguZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vcnNhL3JzYS5oCi0tLS0gb3BlbnNz bC0xLjAuMWovY3J5cHRvL3JzYS9yc2EuaC5maXBzCTIwMTQtMTAtMTYgMTM6MTk6MzQuOTQ3MzAy OTkyICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL3JzYS9yc2EuaAkyMDE0LTEwLTE2 IDEzOjI0OjAwLjgyNDMwNTI4MSArMDIwMAotQEAgLTE2NCw2ICsxNjQsOCBAQCBzdHJ1Y3QgcnNh X3N0Ci0gIyBkZWZpbmUgT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUwkxNjM4NAotICNlbmRp ZgotIAotKyNkZWZpbmUgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKLSsK LSAjaWZuZGVmIE9QRU5TU0xfUlNBX1NNQUxMX01PRFVMVVNfQklUUwotICMgZGVmaW5lIE9QRU5T U0xfUlNBX1NNQUxMX01PRFVMVVNfQklUUwkzMDcyCi0gI2VuZGlmCi1AQCAtMjkwLDYgKzI5Miwx MSBAQCBSU0EgKglSU0FfZ2VuZXJhdGVfa2V5KGludCBiaXRzLCB1bnNpZ25lCi0gCi0gLyogTmV3 IHZlcnNpb24gKi8KLSBpbnQJUlNBX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMs IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsKLStpbnQgUlNBX1g5MzFfZGVyaXZlX2V4KFJTQSAq cnNhLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLCBCSUdOVU0gKnExLCBCSUdOVU0gKnEyLAotKwkJ CWNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwgY29uc3QgQklHTlVNICpYcCwK LSsJCQljb25zdCBCSUdOVU0gKlhxMSwgY29uc3QgQklHTlVNICpYcTIsIGNvbnN0IEJJR05VTSAq WHEsCi0rCQkJY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOwotK2ludCBSU0FfWDkzMV9n ZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBjb25zdCBCSUdOVU0gKmUsIEJOX0dF TkNCICpjYik7Ci0gCi0gaW50CVJTQV9jaGVja19rZXkoY29uc3QgUlNBICopOwotIAkvKiBuZXh0 IDQgcmV0dXJuIC0xIG9uIGVycm9yICovCi1AQCAtNDg3LDcgKzQ5NCw3IEBAIHZvaWQgRVJSX2xv YWRfUlNBX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfTk9O RQkJCSAxMDcKLSAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9PQUVQCQkgMTIx Ci0gI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfUFNTCQkJIDEyNQotLSNkZWZp bmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1BTU19NR0YxCQkgMTQ4Ci0rI2RlZmluZSBS U0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfUFNTX01HRjEJCSAxNTgKLSAjZGVmaW5lIFJTQV9G X1JTQV9QQURESU5HX0FERF9QS0NTMV9UWVBFXzEJCSAxMDgKLSAjZGVmaW5lIFJTQV9GX1JTQV9Q QURESU5HX0FERF9QS0NTMV9UWVBFXzIJCSAxMDkKLSAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5H X0FERF9TU0xWMjMJCQkgMTEwCi1AQCAtNTAwLDIwICs1MDcsMjIgQEAgdm9pZCBFUlJfbG9hZF9S U0Ffc3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0NIRUNLX1g5MzEJ CQkgMTI4Ci0gI2RlZmluZSBSU0FfRl9SU0FfUFJJTlQJCQkJCSAxMTUKLSAjZGVmaW5lIFJTQV9G X1JTQV9QUklOVF9GUAkJCQkgMTE2Ci0tI2RlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9ERUNSWVBU CQkJIDE1MAotLSNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVAkJCSAxNTEKLSsjZGVm aW5lIFJTQV9GX1JTQV9QUklWQVRFX0RFQ1JZUFQJCQkgMTU3Ci0rI2RlZmluZSBSU0FfRl9SU0Ff UFJJVkFURV9FTkNSWVBUCQkJIDE0OAotICNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZfREVDT0RFCQkJ CSAxMzcKLSAjZGVmaW5lIFJTQV9GX1JTQV9QUklWX0VOQ09ERQkJCQkgMTM4Ci0tI2RlZmluZSBS U0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQJCQkgMTUyCi0rI2RlZmluZSBSU0FfRl9SU0FfUFVCTElD X0RFQ1JZUFQJCQkgMTQ5Ci0gI2RlZmluZSBSU0FfRl9SU0FfUFVCTElDX0VOQ1JZUFQJCQkgMTUz Ci0gI2RlZmluZSBSU0FfRl9SU0FfUFVCX0RFQ09ERQkJCQkgMTM5Ci0gI2RlZmluZSBSU0FfRl9S U0FfU0VUVVBfQkxJTkRJTkcJCQkgMTM2Ci0rI2RlZmluZSBSU0FfRl9SU0FfU0VUX0RFRkFVTFRf TUVUSE9ECQkJIDE1MAotKyNkZWZpbmUgUlNBX0ZfUlNBX1NFVF9NRVRIT0QJCQkJIDE1MQotICNk ZWZpbmUgUlNBX0ZfUlNBX1NJR04JCQkJCSAxMTcKLSAjZGVmaW5lIFJTQV9GX1JTQV9TSUdOX0FT TjFfT0NURVRfU1RSSU5HCQkgMTE4Ci0gI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZCQkJCSAxMTkK LSAjZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfQVNOMV9PQ1RFVF9TVFJJTkcJCSAxMjAKLSAjZGVm aW5lIFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNTCQkJIDEyNgotLSNkZWZpbmUgUlNBX0ZfUlNB X1ZFUklGWV9QS0NTMV9QU1NfTUdGMQkJCSAxNDkKLSsjZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllf UEtDUzFfUFNTX01HRjEJCQkgMTUyCi0gCi0gLyogUmVhc29uIGNvZGVzLiAqLwotICNkZWZpbmUg UlNBX1JfQUxHT1JJVEhNX01JU01BVENICQkJIDEwMAotQEAgLTU0MiwyMSArNTUxLDIyIEBAIHZv aWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBSU0FfUl9JTlZBTElEX01H RjFfTUQJCQkJIDE1NgotICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9QQURESU5HCQkJCSAxMzgKLSAj ZGVmaW5lIFJTQV9SX0lOVkFMSURfUEFERElOR19NT0RFCQkJIDE0MQotLSNkZWZpbmUgUlNBX1Jf SU5WQUxJRF9QU1NfUEFSQU1FVEVSUwkJCSAxNDkKLSsjZGVmaW5lIFJTQV9SX0lOVkFMSURfUFNT X1BBUkFNRVRFUlMJCQkgMTU3Ci0gI2RlZmluZSBSU0FfUl9JTlZBTElEX1BTU19TQUxUTEVOCQkJ IDE0NgotLSNkZWZpbmUgUlNBX1JfSU5WQUxJRF9TQUxUX0xFTkdUSAkJCSAxNTAKLSsjZGVmaW5l IFJTQV9SX0lOVkFMSURfU0FMVF9MRU5HVEgJCQkgMTU4Ci0gI2RlZmluZSBSU0FfUl9JTlZBTElE X1RSQUlMRVIJCQkJIDEzOQotICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9YOTMxX0RJR0VTVAkJCSAx NDIKLSAjZGVmaW5lIFJTQV9SX0lRTVBfTk9UX0lOVkVSU0VfT0ZfUQkJCSAxMjYKLSAjZGVmaW5l IFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTAkJCSAxMjAKLSAjZGVmaW5lIFJTQV9SX0xBU1RfT0NU RVRfSU5WQUxJRAkJCSAxMzQKLSAjZGVmaW5lIFJTQV9SX01PRFVMVVNfVE9PX0xBUkdFCQkJCSAx MDUKLS0jZGVmaW5lIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QJCQkgMTU3Ci0rI2RlZmluZSBS U0FfUl9OT05fRklQU19SU0FfTUVUSE9ECQkJIDE0OQotKyNkZWZpbmUgUlNBX1JfTk9OX0ZJUFNf TUVUSE9ECQkJCSAxNDkKLSAjZGVmaW5lIFJTQV9SX05PX1BVQkxJQ19FWFBPTkVOVAkJCSAxNDAK LSAjZGVmaW5lIFJTQV9SX05VTExfQkVGT1JFX0JMT0NLX01JU1NJTkcJCQkgMTEzCi0gI2RlZmlu ZSBSU0FfUl9OX0RPRVNfTk9UX0VRVUFMX1BfUQkJCSAxMjcKLSAjZGVmaW5lIFJTQV9SX09BRVBf REVDT0RJTkdfRVJST1IJCQkgMTIxCi0tI2RlZmluZSBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9X RURfSU5fRklQU19NT0RFCSAxNTgKLSsjZGVmaW5lIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dF RF9JTl9GSVBTX01PREUJIDE1MAotICNkZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05PVF9TVVBQT1JU RURfRk9SX1RISVNfS0VZVFlQRQkgMTQ4Ci0gI2RlZmluZSBSU0FfUl9QQURESU5HX0NIRUNLX0ZB SUxFRAkJCSAxMTQKLSAjZGVmaW5lIFJTQV9SX1BLQ1NfREVDT0RJTkdfRVJST1IJCQkgMTU5Ci1k aWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vcnNhL3JzYV9saWIuYy5maXBzIG9wZW5zc2wt MS4wLjFqL2NyeXB0by9yc2EvcnNhX2xpYi5jCi0tLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL3Jz YS9yc2FfbGliLmMuZmlwcwkyMDE0LTEwLTE1IDE0OjUzOjM5LjAwMDAwMDAwMCArMDIwMAotKysr IG9wZW5zc2wtMS4wLjFqL2NyeXB0by9yc2EvcnNhX2xpYi5jCTIwMTQtMTAtMTYgMTM6MTk6MzUu MTA2MzA2NTgxICswMjAwCi1AQCAtODQsNiArODQsMTMgQEAgUlNBICpSU0FfbmV3KHZvaWQpCi0g Ci0gdm9pZCBSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kKGNvbnN0IFJTQV9NRVRIT0QgKm1ldGgpCi0g CXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAhKG1ldGgtPmZs YWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQotKwkJewotKwkJUlNBZXJyKFJTQV9GX1JTQV9T RVRfREVGQVVMVF9NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7Ci0rCQlyZXR1cm47Ci0r CQl9Ci0rI2VuZGlmCi0gCWRlZmF1bHRfUlNBX21ldGggPSBtZXRoOwotIAl9Ci0gCi1AQCAtOTEs MTggKzk4LDExIEBAIGNvbnN0IFJTQV9NRVRIT0QgKlJTQV9nZXRfZGVmYXVsdF9tZXRob2QKLSAJ ewotIAlpZiAoZGVmYXVsdF9SU0FfbWV0aCA9PSBOVUxMKQotIAkJewotLSNpZmRlZiBPUEVOU1NM X0ZJUFMKLS0JCWlmIChGSVBTX21vZGUoKSkKLS0JCQlyZXR1cm4gRklQU19yc2FfcGtjczFfc3Ns ZWF5KCk7Ci0tCQllbHNlCi0tCQkJcmV0dXJuIFJTQV9QS0NTMV9TU0xlYXkoKTsKLS0jZWxzZQot ICNpZmRlZiBSU0FfTlVMTAotIAkJZGVmYXVsdF9SU0FfbWV0aD1SU0FfbnVsbF9tZXRob2QoKTsK LSAjZWxzZQotIAkJZGVmYXVsdF9SU0FfbWV0aD1SU0FfUEtDUzFfU1NMZWF5KCk7Ci0gI2VuZGlm Ci0tI2VuZGlmCi0gCQl9Ci0gCi0gCXJldHVybiBkZWZhdWx0X1JTQV9tZXRoOwotQEAgLTExOCw2 ICsxMTgsMTMgQEAgaW50IFJTQV9zZXRfbWV0aG9kKFJTQSAqcnNhLCBjb25zdCBSU0FfTQotIAkv KiBOQjogVGhlIGNhbGxlciBpcyBzcGVjaWZpY2FsbHkgc2V0dGluZyBhIG1ldGhvZCwgc28gaXQn cyBub3QgdXAgdG8gdXMKLSAJICogdG8gZGVhbCB3aXRoIHdoaWNoIEVOR0lORSBpdCBjb21lcyBm cm9tLiAqLwotIAljb25zdCBSU0FfTUVUSE9EICptdG1wOwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJaWYgKEZJUFNfbW9kZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhP RCkpCi0rCQl7Ci0rCQlSU0FlcnIoUlNBX0ZfUlNBX1NFVF9NRVRIT0QsIFJTQV9SX05PTl9GSVBT X01FVEhPRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5kaWYKLSAJbXRtcCA9IHJzYS0+bWV0 aDsKLSAJaWYgKG10bXAtPmZpbmlzaCkgbXRtcC0+ZmluaXNoKHJzYSk7Ci0gI2lmbmRlZiBPUEVO U1NMX05PX0VOR0lORQotQEAgLTE3MCw2ICsxNzcsMTggQEAgUlNBICpSU0FfbmV3X21ldGhvZChF TkdJTkUgKmVuZ2luZSkKLSAJCQl9Ci0gCQl9Ci0gI2VuZGlmCi0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwlpZiAoRklQU19tb2RlKCkgJiYgIShyZXQtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQ U19NRVRIT0QpKQotKwkJewotKwkJUlNBZXJyKFJTQV9GX1JTQV9ORVdfTUVUSE9ELCBSU0FfUl9O T05fRklQU19NRVRIT0QpOwotKyNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSsJCWlmIChyZXQt PmVuZ2luZSkKLSsJCQlFTkdJTkVfZmluaXNoKHJldC0+ZW5naW5lKTsKLSsjZW5kaWYKLSsJCU9Q RU5TU0xfZnJlZShyZXQpOwotKwkJcmV0dXJuIE5VTEw7Ci0rCQl9Ci0rI2VuZGlmCi0gCi0gCXJl dC0+cGFkPTA7Ci0gCXJldC0+dmVyc2lvbj0wOwotQEAgLTE4OCw3ICsyMDcsNyBAQCBSU0EgKlJT QV9uZXdfbWV0aG9kKEVOR0lORSAqZW5naW5lKQotIAlyZXQtPmJsaW5kaW5nPU5VTEw7Ci0gCXJl dC0+bXRfYmxpbmRpbmc9TlVMTDsKLSAJcmV0LT5iaWdudW1fZGF0YT1OVUxMOwotLQlyZXQtPmZs YWdzPXJldC0+bWV0aC0+ZmxhZ3MgJiB+UlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1c7Ci0rCXJldC0+ ZmxhZ3M9cmV0LT5tZXRoLT5mbGFnczsKLSAJaWYgKCFDUllQVE9fbmV3X2V4X2RhdGEoQ1JZUFRP X0VYX0lOREVYX1JTQSwgcmV0LCAmcmV0LT5leF9kYXRhKSkKLSAJCXsKLSAjaWZuZGVmIE9QRU5T U0xfTk9fRU5HSU5FCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vcnNhL3JzYV9wbWV0 aC5jLmZpcHMgb3BlbnNzbC0xLjAuMWovY3J5cHRvL3JzYS9yc2FfcG1ldGguYwotLS0tIG9wZW5z c2wtMS4wLjFqL2NyeXB0by9yc2EvcnNhX3BtZXRoLmMuZmlwcwkyMDE0LTEwLTE1IDE0OjUzOjM5 LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9yc2EvcnNhX3BtZXRo LmMJMjAxNC0xMC0xNiAxMzoxOTozNS4xMDYzMDY1ODEgKzAyMDAKLUBAIC0yMDYsMjIgKzIwNiw2 IEBAIHN0YXRpYyBpbnQgcGtleV9yc2Ffc2lnbihFVlBfUEtFWV9DVFggKmMKLSAJCQkJCVJTQV9S X0lOVkFMSURfRElHRVNUX0xFTkdUSCk7Ci0gCQkJcmV0dXJuIC0xOwotIAkJCX0KLS0jaWZkZWYg T1BFTlNTTF9GSVBTCi0tCQlpZiAocmV0ID4gMCkKLS0JCQl7Ci0tCQkJdW5zaWduZWQgaW50IHNs ZW47Ci0tCQkJcmV0ID0gRklQU19yc2Ffc2lnbl9kaWdlc3QocnNhLCB0YnMsIHRic2xlbiwgcmN0 eC0+bWQsCi0tCQkJCQkJCXJjdHgtPnBhZF9tb2RlLAotLQkJCQkJCQlyY3R4LT5zYWx0bGVuLAot LQkJCQkJCQlyY3R4LT5tZ2YxbWQsCi0tCQkJCQkJCXNpZywgJnNsZW4pOwotLQkJCWlmIChyZXQg PiAwKQotLQkJCQkqc2lnbGVuID0gc2xlbjsKLS0JCQllbHNlCi0tCQkJCSpzaWdsZW4gPSAwOwot LQkJCXJldHVybiByZXQ7Ci0tCQkJfQotLSNlbmRpZgotIAotIAkJaWYgKEVWUF9NRF90eXBlKHJj dHgtPm1kKSA9PSBOSURfbWRjMikKLSAJCQl7Ci1AQCAtMzU0LDE5ICszMzgsNiBAQCBzdGF0aWMg aW50IHBrZXlfcnNhX3ZlcmlmeShFVlBfUEtFWV9DVFgKLSAjZW5kaWYKLSAJaWYgKHJjdHgtPm1k KQotIAkJewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JCWlmIChydiA+IDApCi0tCQkJewotLQkJ CXJldHVybiBGSVBTX3JzYV92ZXJpZnlfZGlnZXN0KHJzYSwKLS0JCQkJCQkJdGJzLCB0YnNsZW4s Ci0tCQkJCQkJCXJjdHgtPm1kLAotLQkJCQkJCQlyY3R4LT5wYWRfbW9kZSwKLS0JCQkJCQkJcmN0 eC0+c2FsdGxlbiwKLS0JCQkJCQkJcmN0eC0+bWdmMW1kLAotLQkJCQkJCQlzaWcsIHNpZ2xlbik7 Ci0tCQkJCQkJCQotLQkJCX0KLS0jZW5kaWYKLSAJCWlmIChyY3R4LT5wYWRfbW9kZSA9PSBSU0Ff UEtDUzFfUEFERElORykKLSAJCQlyZXR1cm4gUlNBX3ZlcmlmeShFVlBfTURfdHlwZShyY3R4LT5t ZCksIHRicywgdGJzbGVuLAotIAkJCQkJc2lnLCBzaWdsZW4sIHJzYSk7Ci1kaWZmIC11cCBvcGVu c3NsLTEuMC4xai9jcnlwdG8vcnNhL3JzYV9zaWduLmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlw dG8vcnNhL3JzYV9zaWduLmMKLS0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8vcnNhL3JzYV9zaWdu LmMuZmlwcwkyMDE0LTEwLTE1IDE0OjUzOjM5LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wt MS4wLjFqL2NyeXB0by9yc2EvcnNhX3NpZ24uYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjEwNjMwNjU4 MSArMDIwMAotQEAgLTEzOCw3ICsxMzgsOCBAQCBpbnQgUlNBX3NpZ24oaW50IHR5cGUsIGNvbnN0 IHVuc2lnbmVkIGNoCi0gCQlpMmRfWDUwOV9TSUcoJnNpZywmcCk7Ci0gCQlzPXRtcHM7Ci0gCX0K LS0JaT1SU0FfcHJpdmF0ZV9lbmNyeXB0KGkscyxzaWdyZXQscnNhLFJTQV9QS0NTMV9QQURESU5H KTsKLSsJLyogTkI6IGNhbGwgdW5kZXJseWluZyBtZXRob2QgZGlyZWN0bHkgdG8gYXZvaWQgRklQ UyBibG9ja2luZyAqLwotKwlpID0gcnNhLT5tZXRoLT5yc2FfcHJpdl9lbmMgPyByc2EtPm1ldGgt PnJzYV9wcml2X2VuYyhpLHMsc2lncmV0LHJzYSxSU0FfUEtDUzFfUEFERElORykgOiAwOwotIAlp ZiAoaSA8PSAwKQotIAkJcmV0PTA7Ci0gCWVsc2UKLUBAIC0xOTcsOCArMTk4LDggQEAgaW50IGlu dF9yc2FfdmVyaWZ5KGludCBkdHlwZSwgY29uc3QgdW5zaQotIAotIAlpZigoZHR5cGUgPT0gTklE X21kNV9zaGExKSAmJiBybSkKLSAJCXsKLS0JCWkgPSBSU0FfcHVibGljX2RlY3J5cHQoKGludClz aWdsZW4sCi0tCQkJCQlzaWdidWYscm0scnNhLFJTQV9QS0NTMV9QQURESU5HKTsKLSsJCWkgPSBy c2EtPm1ldGgtPnJzYV9wdWJfZGVjID8gcnNhLT5tZXRoLT5yc2FfcHViX2RlYygoaW50KXNpZ2xl biwKLSsJCQkJCXNpZ2J1ZixybSxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpIDogMDsKLSAJCWlmIChp IDw9IDApCi0gCQkJcmV0dXJuIDA7Ci0gCQkqcHJtX2xlbiA9IGk7Ci1AQCAtMjE1LDcgKzIxNiw4 IEBAIGludCBpbnRfcnNhX3ZlcmlmeShpbnQgZHR5cGUsIGNvbnN0IHVuc2kKLSAJCQlSU0FlcnIo UlNBX0ZfSU5UX1JTQV9WRVJJRlksUlNBX1JfSU5WQUxJRF9NRVNTQUdFX0xFTkdUSCk7Ci0gCQkJ Z290byBlcnI7Ci0gCX0KLS0JaT1SU0FfcHVibGljX2RlY3J5cHQoKGludClzaWdsZW4sc2lnYnVm LHMscnNhLFJTQV9QS0NTMV9QQURESU5HKTsKLSsJLyogTkI6IGNhbGwgdW5kZXJseWluZyBtZXRo b2QgZGlyZWN0bHkgdG8gYXZvaWQgRklQUyBibG9ja2luZyAqLwotKwlpID0gcnNhLT5tZXRoLT5y c2FfcHViX2RlYyA/IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMoKGludClzaWdsZW4sc2lnYnVmLHMs cnNhLFJTQV9QS0NTMV9QQURESU5HKSA6IDA7Ci0gCi0gCWlmIChpIDw9IDApIGdvdG8gZXJyOwot IAkvKiBPZGRiYWxsIE1EQzIgY2FzZTogc2lnbmF0dXJlIGNhbiBiZSBPQ1RFVCBTVFJJTkcuCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4xai9jcnlwdG8vc2hhL3NoYS5oLmZpcHMgb3BlbnNzbC0xLjAu MWovY3J5cHRvL3NoYS9zaGEuaAotLS0tIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9zaGEvc2hhLmgu ZmlwcwkyMDE0LTEwLTE2IDEzOjE5OjM0LjY2NzI5NjY3MSArMDIwMAotKysrIG9wZW5zc2wtMS4w LjFqL2NyeXB0by9zaGEvc2hhLmgJMjAxNC0xMC0xNiAxMzoxOTozNS4xMDczMDY2MDQgKzAyMDAK LUBAIC0xMTYsOSArMTE2LDYgQEAgdW5zaWduZWQgY2hhciAqU0hBKGNvbnN0IHVuc2lnbmVkIGNo YXIgKgotIHZvaWQgU0hBX1RyYW5zZm9ybShTSEFfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFy ICpkYXRhKTsKLSAjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMQotLSNpZmRlZiBPUEVO U1NMX0ZJUFMKLS1pbnQgcHJpdmF0ZV9TSEExX0luaXQoU0hBX0NUWCAqYyk7Ci0tI2VuZGlmCi0g aW50IFNIQTFfSW5pdChTSEFfQ1RYICpjKTsKLSBpbnQgU0hBMV9VcGRhdGUoU0hBX0NUWCAqYywg Y29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7Ci0gaW50IFNIQTFfRmluYWwodW5zaWduZWQg Y2hhciAqbWQsIFNIQV9DVFggKmMpOwotQEAgLTE0MSwxMCArMTM4LDYgQEAgdHlwZWRlZiBzdHJ1 Y3QgU0hBMjU2c3RhdGVfc3QKLSAJfSBTSEEyNTZfQ1RYOwotIAotICNpZm5kZWYgT1BFTlNTTF9O T19TSEEyNTYKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0taW50IHByaXZhdGVfU0hBMjI0X0luaXQo U0hBMjU2X0NUWCAqYyk7Ci0taW50IHByaXZhdGVfU0hBMjU2X0luaXQoU0hBMjU2X0NUWCAqYyk7 Ci0tI2VuZGlmCi0gaW50IFNIQTIyNF9Jbml0KFNIQTI1Nl9DVFggKmMpOwotIGludCBTSEEyMjRf VXBkYXRlKFNIQTI1Nl9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwotIGlu dCBTSEEyMjRfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQTI1Nl9DVFggKmMpOwotQEAgLTE5 MiwxMCArMTg1LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgU0hBNTEyc3RhdGVfc3QKLSAjZW5kaWYKLSAK LSAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCi0tI2lmZGVmIE9QRU5TU0xfRklQUwotLWludCBw cml2YXRlX1NIQTM4NF9Jbml0KFNIQTUxMl9DVFggKmMpOwotLWludCBwcml2YXRlX1NIQTUxMl9J bml0KFNIQTUxMl9DVFggKmMpOwotLSNlbmRpZgotIGludCBTSEEzODRfSW5pdChTSEE1MTJfQ1RY ICpjKTsKLSBpbnQgU0hBMzg0X1VwZGF0ZShTSEE1MTJfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRh LCBzaXplX3QgbGVuKTsKLSBpbnQgU0hBMzg0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEE1 MTJfQ1RYICpjKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9zaGEvc2hhX2xvY2wu aC5maXBzIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9zaGEvc2hhX2xvY2wuaAotLS0tIG9wZW5zc2wt MS4wLjFqL2NyeXB0by9zaGEvc2hhX2xvY2wuaC5maXBzCTIwMTQtMTAtMTYgMTM6MTk6MzQuNjY5 Mjk2NzE2ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5cHRvL3NoYS9zaGFfbG9jbC5oCTIw MTQtMTAtMTYgMTM6MTk6MzUuMTA3MzA2NjA0ICswMjAwCi1AQCAtMTIzLDExICsxMjMsMTQgQEAg dm9pZCBzaGExX2Jsb2NrX2RhdGFfb3JkZXIgKFNIQV9DVFggKmMsCi0gI2RlZmluZSBJTklUX0RB VEFfaDQgMHhjM2QyZTFmMFVMCi0gCi0gI2lmZGVmIFNIQV8wCi0tZmlwc19tZF9pbml0KFNIQSkK LStub25maXBzX21kX2luaXQoU0hBKQotICNlbHNlCi0gZmlwc19tZF9pbml0X2N0eChTSEExLCBT SEEpCi0gI2VuZGlmCi0gCXsKLSsjaWYgZGVmaW5lZChTSEFfMSkgJiYgZGVmaW5lZChPUEVOU1NM X0ZJUFMpCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJbWVtc2V0IChjLDAs c2l6ZW9mKCpjKSk7Ci0gCWMtPmgwPUlOSVRfREFUQV9oMDsKLSAJYy0+aDE9SU5JVF9EQVRBX2gx OwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWovY3J5cHRvL3NoYS9zaGEyNTYuYy5maXBzIG9wZW5z c2wtMS4wLjFqL2NyeXB0by9zaGEvc2hhMjU2LmMKLS0tLSBvcGVuc3NsLTEuMC4xai9jcnlwdG8v c2hhL3NoYTI1Ni5jLmZpcHMJMjAxNC0xMC0xNSAxNDo1MzozOS4wMDAwMDAwMDAgKzAyMDAKLSsr KyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vc2hhL3NoYTI1Ni5jCTIwMTQtMTAtMTYgMTM6MTk6MzUu MTA3MzA2NjA0ICswMjAwCi1AQCAtMTIsMTIgKzEyLDE5IEBACi0gCi0gI2luY2x1ZGUgPG9wZW5z c2wvY3J5cHRvLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Ci0rI2lmZGVmIE9QRU5TU0xf RklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAjaW5jbHVkZSA8 b3BlbnNzbC9vcGVuc3Nsdi5oPgotIAotIGNvbnN0IGNoYXIgU0hBMjU2X3ZlcnNpb25bXT0iU0hB LTI1NiIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotIGZpcHNfbWRfaW5pdF9jdHgoU0hBMjI0 LCBTSEEyNTYpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hl Y2soKTsKLSsjZW5kaWYKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCWMtPmhbMF09MHhj MTA1OWVkOFVMOwljLT5oWzFdPTB4MzY3Y2Q1MDdVTDsKLSAJYy0+aFsyXT0weDMwNzBkZDE3VUw7 CWMtPmhbM109MHhmNzBlNTkzOVVMOwotQEAgLTI5LDYgKzM2LDkgQEAgZmlwc19tZF9pbml0X2N0 eChTSEEyMjQsIFNIQTI1NikKLSAKLSBmaXBzX21kX2luaXQoU0hBMjU2KQotIAl7Ci0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCW1lbXNl dCAoYywwLHNpemVvZigqYykpOwotIAljLT5oWzBdPTB4NmEwOWU2NjdVTDsJYy0+aFsxXT0weGJi NjdhZTg1VUw7Ci0gCWMtPmhbMl09MHgzYzZlZjM3MlVMOwljLT5oWzNdPTB4YTU0ZmY1M2FVTDsK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by9zaGEvc2hhNTEyLmMuZmlwcyBvcGVuc3Ns LTEuMC4xai9jcnlwdG8vc2hhL3NoYTUxMi5jCi0tLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL3No YS9zaGE1MTIuYy5maXBzCTIwMTQtMTAtMTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMWovY3J5cHRvL3NoYS9zaGE1MTIuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjEw NzMwNjYwNCArMDIwMAotQEAgLTUsNiArNSwxMCBAQAotICAqID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICovCi0g I2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r I2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotICNpZiAhZGVmaW5lZChPUEVO U1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEE1MTIpCi0gLyoKLSAgKiBJTVBM RU1FTlRBVElPTiBOT1RFUy4KLUBAIC02MSw2ICs2NSw5IEBAIGNvbnN0IGNoYXIgU0hBNTEyX3Zl cnNpb25bXT0iU0hBLTUxMiIgT1AKLSAKLSBmaXBzX21kX2luaXRfY3R4KFNIQTM4NCwgU0hBNTEy KQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0r I2VuZGlmCi0gCWMtPmhbMF09VTY0KDB4Y2JiYjlkNWRjMTA1OWVkOCk7Ci0gCWMtPmhbMV09VTY0 KDB4NjI5YTI5MmEzNjdjZDUwNyk7Ci0gCWMtPmhbMl09VTY0KDB4OTE1OTAxNWEzMDcwZGQxNyk7 Ci1AQCAtNzcsNiArODQsOSBAQCBmaXBzX21kX2luaXRfY3R4KFNIQTM4NCwgU0hBNTEyKQotIAot IGZpcHNfbWRfaW5pdChTSEE1MTIpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNf c2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJYy0+aFswXT1VNjQoMHg2YTA5ZTY2N2YzYmNj OTA4KTsKLSAJYy0+aFsxXT1VNjQoMHhiYjY3YWU4NTg0Y2FhNzNiKTsKLSAJYy0+aFsyXT1VNjQo MHgzYzZlZjM3MmZlOTRmODJiKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjFqL2NyeXB0by93aHJs cG9vbC93cF9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4xai9jcnlwdG8vd2hybHBvb2wvd3BfZGdz dC5jCi0tLS0gb3BlbnNzbC0xLjAuMWovY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYy5maXBzCTIw MTQtMTAtMTUgMTQ6NTM6MzkuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovY3J5 cHRvL3docmxwb29sL3dwX2Rnc3QuYwkyMDE0LTEwLTE2IDEzOjE5OjM1LjEwNzMwNjYwNCArMDIw MAotQEAgLTU1LDcgKzU1LDcgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSAjaW5j bHVkZSA8c3RyaW5nLmg+Ci0gCi0tZmlwc19tZF9pbml0KFdISVJMUE9PTCkKLStub25maXBzX21k X2luaXQoV0hJUkxQT09MKQotIAl7Ci0gCW1lbXNldCAoYywwLHNpemVvZigqYykpOwotIAlyZXR1 cm4oMSk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xai9NYWtlZmlsZS5vcmcuZmlwcyBvcGVuc3Ns LTEuMC4xai9NYWtlZmlsZS5vcmcKLS0tLSBvcGVuc3NsLTEuMC4xai9NYWtlZmlsZS5vcmcuZmlw cwkyMDE0LTEwLTE2IDEzOjE5OjM1LjA2MjMwNTU4OCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFq L01ha2VmaWxlLm9yZwkyMDE0LTEwLTE2IDEzOjE5OjM1LjEwODMwNjYyNiArMDIwMAotQEAgLTEz Niw2ICsxMzYsOSBAQCBGSVBTQ0FOTElCPQotIAotIEJBU0VBRERSPQotIAotKyMgTm9uLWVtcHR5 IGlmIEZJUFMgZW5hYmxlZAotK0ZJUFM9Ci0rCi0gRElSUz0gICBjcnlwdG8gc3NsIGVuZ2luZXMg YXBwcyB0ZXN0IHRvb2xzCi0gRU5HRElSUz0gY2Nnb3N0Ci0gU0hMSUJESVJTPSBjcnlwdG8gc3Ns Ci1AQCAtMTQ4LDcgKzE1MSw3IEBAIFNESVJTPSAgXAotIAlibiBlYyByc2EgZHNhIGVjZHNhIGRo IGVjZGggZHNvIGVuZ2luZSBcCi0gCWJ1ZmZlciBiaW8gc3RhY2sgbGhhc2ggcmFuZCBlcnIgXAot IAlldnAgYXNuMSBwZW0geDUwOSB4NTA5djMgY29uZiB0eHRfZGIgcGtjczcgcGtjczEyIGNvbXAg b2NzcCB1aSBrcmI1IFwKLS0JY21zIHBxdWV1ZSB0cyBqcGFrZSBzcnAgc3RvcmUgY21hYwotKwlj bXMgcHF1ZXVlIHRzIGpwYWtlIHNycCBzdG9yZSBjbWFjIGZpcHMKLSAjIGtlZXAgaW4gbWluZCB0 aGF0IHRoZSBhYm92ZSBsaXN0IGlzIGFkanVzdGVkIGJ5IC4vQ29uZmlndXJlCi0gIyBhY2NvcmRp bmcgdG8gbm8teHh4IGFyZ3VtZW50cy4uLgotIAotQEAgLTIzNyw2ICsyNDAsNyBAQCBCVUlMREVO Vj0JUExBVEZPUk09JyQoUExBVEZPUk0pJyBQUk9DRVNTCi0gCQlGSVBTTElCRElSPScke0ZJUFNM SUJESVJ9JwkJCVwKLSAJCUZJUFNESVI9JyR7RklQU0RJUn0nCQkJCVwKLSAJCUZJUFNDQU5MSUI9 IiQke0ZJUFNDQU5MSUI6LSQoRklQU0NBTkxJQil9IglcCi0rCQlGSVBTPSIkJHtGSVBTOi0kKEZJ UFMpfSIJXAotIAkJVEhJUz0kJHtUSElTOi0kQH0gTUFLRUZJTEU9TWFrZWZpbGUgTUFLRU9WRVJS SURFUz0KLSAjIE1BS0VPVkVSUklERVM9IGVmZmVjdGl2ZWx5ICJlcXVhbGl6ZXMiIEdOVS1pc2gg YW5kIFN5c1YtaXNoIG1ha2UgZmxhdm9ycywKLSAjIHdoaWNoIGluIHR1cm4gZWxpbWluYXRlcyBh bWJpZ3VpdGllcyBpbiB2YXJpYWJsZSB0cmVhdG1lbnQgd2l0aCAtZS4KLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjFqL3NzbC9kMV9zcnZyLmMuZmlwcyBvcGVuc3NsLTEuMC4xai9zc2wvZDFfc3J2ci5j Ci0tLS0gb3BlbnNzbC0xLjAuMWovc3NsL2QxX3NydnIuYy5maXBzCTIwMTQtMTAtMTUgMTQ6NTM6 MzkuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMWovc3NsL2QxX3NydnIuYwkyMDE0 LTEwLTE2IDEzOjE5OjM1LjEwODMwNjYyNiArMDIwMAotQEAgLTEzOTAsNiArMTM5MCw4IEBAIGlu dCBkdGxzMV9zZW5kX3NlcnZlcl9rZXlfZXhjaGFuZ2UoU1NMICoKLSAJCQkJaj0wOwotIAkJCQlm b3IgKG51bT0yOyBudW0gPiAwOyBudW0tLSkKLSAJCQkJCXsKLSsJCQkJCUVWUF9NRF9DVFhfc2V0 X2ZsYWdzKCZtZF9jdHgsCi0rCQkJCQkJCQlFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cp OwotIAkJCQkJRVZQX0RpZ2VzdEluaXRfZXgoJm1kX2N0eCwobnVtID09IDIpCi0gCQkJCQkJP3Mt PmN0eC0+bWQ1OnMtPmN0eC0+c2hhMSwgTlVMTCk7Ci0gCQkJCQlFVlBfRGlnZXN0VXBkYXRlKCZt ZF9jdHgsJihzLT5zMy0+Y2xpZW50X3JhbmRvbVswXSksU1NMM19SQU5ET01fU0laRSk7Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4xai9zc2wvc3NsX2FsZ3MuYy5maXBzIG9wZW5zc2wtMS4wLjFqL3Nz bC9zc2xfYWxncy5jCi0tLS0gb3BlbnNzbC0xLjAuMWovc3NsL3NzbF9hbGdzLmMuZmlwcwkyMDE0 LTEwLTE1IDE0OjUzOjM5LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjFqL3NzbC9z c2xfYWxncy5jCTIwMTQtMTAtMTYgMTM6MTk6MzUuMTA4MzA2NjI2ICswMjAwCi1AQCAtNjQsNiAr NjQsMTIgQEAKLSBpbnQgU1NMX2xpYnJhcnlfaW5pdCh2b2lkKQotIAl7Ci0gCi0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOwotKwlpZiAoIUZJUFNfbW9kZSgp KQotKwkJewotKyNlbmRpZgotKwotICNpZm5kZWYgT1BFTlNTTF9OT19ERVMKLSAJRVZQX2FkZF9j aXBoZXIoRVZQX2Rlc19jYmMoKSk7Ci0gCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jYmMo KSk7Ci1AQCAtMTM3LDYgKzE0Myw1MCBAQCBpbnQgU1NMX2xpYnJhcnlfaW5pdCh2b2lkKQotIAlF VlBfYWRkX2RpZ2VzdChFVlBfc2hhKCkpOwotIAlFVlBfYWRkX2RpZ2VzdChFVlBfZHNzKCkpOwot ICNlbmRpZgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCX0KLSsJZWxzZQotKwkJewotKyNpZm5k ZWYgT1BFTlNTTF9OT19ERVMKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NiYygpKTsK LSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fQUVTCi0rCUVWUF9hZGRfY2lwaGVyKEVWUF9h ZXNfMTI4X2NiYygpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2JjKCkpOwotKwlF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jYmMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9h ZXNfMTI4X2djbSgpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfZ2NtKCkpOwotKyNl bmRpZgotKyNpZm5kZWYgT1BFTlNTTF9OT19NRDUKLSsJLyogbmVlZGVkIGV2ZW4gaW4gdGhlIEZJ UFMgbW9kZSBmb3IgVExTIE1BQyAqLwotKwlFVlBfYWRkX2RpZ2VzdChFVlBfbWQ1KCkpOwotKwlF VlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9tZDUsInNzbDItbWQ1Iik7Ci0rCUVWUF9hZGRfZGlnZXN0 X2FsaWFzKFNOX21kNSwic3NsMy1tZDUiKTsKLSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9f U0hBCi0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGExKCkpOyAvKiBSU0Egd2l0aCBzaGExICovCi0r CUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTEsInNzbDMtc2hhMSIpOwotKwlFVlBfYWRkX2Rp Z2VzdF9hbGlhcyhTTl9zaGExV2l0aFJTQUVuY3J5cHRpb24sU05fc2hhMVdpdGhSU0EpOwotKyNl bmRpZgotKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX3No YTIyNCgpKTsKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTI1NigpKTsKLSsjZW5kaWYKLSsjaWZu ZGVmIE9QRU5TU0xfTk9fU0hBNTEyCi0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEzODQoKSk7Ci0r CUVWUF9hZGRfZGlnZXN0KEVWUF9zaGE1MTIoKSk7Ci0rI2VuZGlmCi0rI2lmICFkZWZpbmVkKE9Q RU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0RTQSkKLSsJRVZQX2FkZF9kaWdl c3QoRVZQX2RzczEoKSk7IC8qIERTQSB3aXRoIHNoYTEgKi8KLSsJRVZQX2FkZF9kaWdlc3RfYWxp YXMoU05fZHNhV2l0aFNIQTEsU05fZHNhV2l0aFNIQTFfMik7Ci0rCUVWUF9hZGRfZGlnZXN0X2Fs aWFzKFNOX2RzYVdpdGhTSEExLCJEU1MxIik7Ci0rCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2Rz YVdpdGhTSEExLCJkc3MxIik7Ci0rI2VuZGlmCi0rI2lmbmRlZiBPUEVOU1NMX05PX0VDRFNBCi0r CUVWUF9hZGRfZGlnZXN0KEVWUF9lY2RzYSgpKTsKLSsjZW5kaWYKLSsJCX0KLSsjZW5kaWYKLSAj aWZuZGVmIE9QRU5TU0xfTk9fQ09NUAotIAkvKiBUaGlzIHdpbGwgaW5pdGlhbGlzZSB0aGUgYnVp bHQtaW4gY29tcHJlc3Npb24gYWxnb3JpdGhtcy4KLSAJICAgVGhlIHZhbHVlIHJldHVybmVkIGlz IGEgU1RBQ0tfT0YoU1NMX0NPTVApLCBidXQgdGhhdCBjYW4KCmRpZmYgLS1naXQgYS9vcGVuc3Ns LTEuMC4xay1kdGxzMS1hYmkucGF0Y2ggYi9vcGVuc3NsLTEuMC4xay1kdGxzMS1hYmkucGF0Y2gK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg5Y2ViYQotLS0gL2Rldi9udWxs CisrKyBiL29wZW5zc2wtMS4wLjFrLWR0bHMxLWFiaS5wYXRjaApAQCAtMCwwICsxLDI2IEBACitk aWZmIC11cCBvcGVuc3NsLTEuMC4xay9zc2wvZHRsczEuaC5kdGxzMS1hYmkgb3BlbnNzbC0xLjAu MWsvc3NsL2R0bHMxLmgKKy0tLSBvcGVuc3NsLTEuMC4xay9zc2wvZHRsczEuaC5kdGxzMS1hYmkJ MjAxNS0wMS0wOSAwOTo1ODo1OS4zMzI1OTY4OTcgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9z c2wvZHRsczEuaAkyMDE1LTAxLTA5IDEwOjAyOjM0LjkwODQ3MjMyMCArMDEwMAorQEAgLTIzMSwx MCArMjMxLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgZHRsczFfc3RhdGVfc3QKKyAJICovCisgCXJlY29y ZF9wcXVldWUgYnVmZmVyZWRfYXBwX2RhdGE7CisgCistCS8qIElzIHNldCB3aGVuIGxpc3Rlbmlu ZyBmb3IgbmV3IGNvbm5lY3Rpb25zIHdpdGggZHRsczFfbGlzdGVuKCkgKi8KKy0JdW5zaWduZWQg aW50IGxpc3RlbjsKKy0KKy0JdW5zaWduZWQgaW50IGxpbmtfbXR1OyAvKiBtYXggb24tdGhlLXdp cmUgRFRMUyBwYWNrZXQgc2l6ZSAqLworIAl1bnNpZ25lZCBpbnQgbXR1OyAvKiBtYXggRFRMUyBw YWNrZXQgc2l6ZSAqLworIAorIAlzdHJ1Y3QgaG1faGVhZGVyX3N0IHdfbXNnX2hkcjsKK0BAIC0y NjIsNiArMjU4LDExIEBAIHR5cGVkZWYgc3RydWN0IGR0bHMxX3N0YXRlX3N0CisgCSAqLworIAl1 bnNpZ25lZCBpbnQgY2hhbmdlX2NpcGhlcl9zcGVjX29rOworIAorKwkvKiBJcyBzZXQgd2hlbiBs aXN0ZW5pbmcgZm9yIG5ldyBjb25uZWN0aW9ucyB3aXRoIGR0bHMxX2xpc3RlbigpICovCisrCXVu c2lnbmVkIGludCBsaXN0ZW47CisrCisrCXVuc2lnbmVkIGludCBsaW5rX210dTsgLyogbWF4IG9u LXRoZS13aXJlIERUTFMgcGFja2V0IHNpemUgKi8KKysKKyAjaWZuZGVmIE9QRU5TU0xfTk9fU0NU UAorIAkvKiB1c2VkIHdoZW4gU1NMX1NUX1hYX0ZMVVNIIGlzIGVudGVyZWQgKi8KKyAJaW50IG5l eHRfc3RhdGU7CgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMWstZWNjLXN1aXRlYi5wYXRjaCBi L29wZW5zc2wtMS4wLjFrLWVjYy1zdWl0ZWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uYmYwMDY1ZgotLS0gL2Rldi9udWxsCisrKyBiL29wZW5zc2wtMS4wLjFrLWVj Yy1zdWl0ZWIucGF0Y2gKQEAgLTAsMCArMSwxMzAgQEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFr L2FwcHMvc3BlZWQuYy5zdWl0ZWIgb3BlbnNzbC0xLjAuMWsvYXBwcy9zcGVlZC5jCistLS0gb3Bl bnNzbC0xLjAuMWsvYXBwcy9zcGVlZC5jLnN1aXRlYgkyMDE1LTAxLTA5IDEwOjAzOjM4LjQwNjkw ODM4OCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2FwcHMvc3BlZWQuYwkyMDE1LTAxLTA5IDEw OjAzOjM4LjYwMjkxMjgyMSArMDEwMAorQEAgLTk2Niw0OSArOTY2LDIzIEBAIGludCBNQUlOKGlu dCBhcmdjLCBjaGFyICoqYXJndikKKyAJCWVsc2UKKyAjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xf Tk9fRUNEU0EKKy0JCSAgICAgaWYgKHN0cmNtcCgqYXJndiwiZWNkc2FwMTYwIikgPT0gMCkgZWNk c2FfZG9pdFtSX0VDX1AxNjBdPTI7CistCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsImVjZHNhcDE5 MiIpID09IDApIGVjZHNhX2RvaXRbUl9FQ19QMTkyXT0yOworLQkJZWxzZSBpZiAoc3RyY21wKCph cmd2LCJlY2RzYXAyMjQiKSA9PSAwKSBlY2RzYV9kb2l0W1JfRUNfUDIyNF09MjsKKy0JCWVsc2Ug aWYgKHN0cmNtcCgqYXJndiwiZWNkc2FwMjU2IikgPT0gMCkgZWNkc2FfZG9pdFtSX0VDX1AyNTZd PTI7CisrCQlpZiAoc3RyY21wKCphcmd2LCJlY2RzYXAyNTYiKSA9PSAwKSBlY2RzYV9kb2l0W1Jf RUNfUDI1Nl09MjsKKyAJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiZWNkc2FwMzg0IikgPT0gMCkg ZWNkc2FfZG9pdFtSX0VDX1AzODRdPTI7CisgCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsImVjZHNh cDUyMSIpID09IDApIGVjZHNhX2RvaXRbUl9FQ19QNTIxXT0yOworLQkJZWxzZSBpZiAoc3RyY21w KCphcmd2LCJlY2RzYWsxNjMiKSA9PSAwKSBlY2RzYV9kb2l0W1JfRUNfSzE2M109MjsKKy0JCWVs c2UgaWYgKHN0cmNtcCgqYXJndiwiZWNkc2FrMjMzIikgPT0gMCkgZWNkc2FfZG9pdFtSX0VDX0sy MzNdPTI7CistCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsImVjZHNhazI4MyIpID09IDApIGVjZHNh X2RvaXRbUl9FQ19LMjgzXT0yOworLQkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCJlY2RzYWs0MDki KSA9PSAwKSBlY2RzYV9kb2l0W1JfRUNfSzQwOV09MjsKKy0JCWVsc2UgaWYgKHN0cmNtcCgqYXJn diwiZWNkc2FrNTcxIikgPT0gMCkgZWNkc2FfZG9pdFtSX0VDX0s1NzFdPTI7CistCQllbHNlIGlm IChzdHJjbXAoKmFyZ3YsImVjZHNhYjE2MyIpID09IDApIGVjZHNhX2RvaXRbUl9FQ19CMTYzXT0y OworLQkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCJlY2RzYWIyMzMiKSA9PSAwKSBlY2RzYV9kb2l0 W1JfRUNfQjIzM109MjsKKy0JCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiZWNkc2FiMjgzIikgPT0g MCkgZWNkc2FfZG9pdFtSX0VDX0IyODNdPTI7CistCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsImVj ZHNhYjQwOSIpID09IDApIGVjZHNhX2RvaXRbUl9FQ19CNDA5XT0yOworLQkJZWxzZSBpZiAoc3Ry Y21wKCphcmd2LCJlY2RzYWI1NzEiKSA9PSAwKSBlY2RzYV9kb2l0W1JfRUNfQjU3MV09MjsKKyAJ CWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiZWNkc2EiKSA9PSAwKQorIAkJCXsKKy0JCQlmb3IgKGk9 MDsgaSA8IEVDX05VTTsgaSsrKQorKwkJCWZvciAoaT1SX0VDX1AyNTY7IGkgPD0gUl9FQ19QNTIx OyBpKyspCisgCQkJCWVjZHNhX2RvaXRbaV09MTsKKyAJCQl9CisgCQllbHNlCisgI2VuZGlmCisg I2lmbmRlZiBPUEVOU1NMX05PX0VDREgKKy0JCSAgICAgaWYgKHN0cmNtcCgqYXJndiwiZWNkaHAx NjAiKSA9PSAwKSBlY2RoX2RvaXRbUl9FQ19QMTYwXT0yOworLQkJZWxzZSBpZiAoc3RyY21wKCph cmd2LCJlY2RocDE5MiIpID09IDApIGVjZGhfZG9pdFtSX0VDX1AxOTJdPTI7CistCQllbHNlIGlm IChzdHJjbXAoKmFyZ3YsImVjZGhwMjI0IikgPT0gMCkgZWNkaF9kb2l0W1JfRUNfUDIyNF09MjsK Ky0JCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiZWNkaHAyNTYiKSA9PSAwKSBlY2RoX2RvaXRbUl9F Q19QMjU2XT0yOworKwkJaWYgKHN0cmNtcCgqYXJndiwiZWNkaHAyNTYiKSA9PSAwKSBlY2RoX2Rv aXRbUl9FQ19QMjU2XT0yOworIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCJlY2RocDM4NCIpID09 IDApIGVjZGhfZG9pdFtSX0VDX1AzODRdPTI7CisgCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsImVj ZGhwNTIxIikgPT0gMCkgZWNkaF9kb2l0W1JfRUNfUDUyMV09MjsKKy0JCWVsc2UgaWYgKHN0cmNt cCgqYXJndiwiZWNkaGsxNjMiKSA9PSAwKSBlY2RoX2RvaXRbUl9FQ19LMTYzXT0yOworLQkJZWxz ZSBpZiAoc3RyY21wKCphcmd2LCJlY2RoazIzMyIpID09IDApIGVjZGhfZG9pdFtSX0VDX0syMzNd PTI7CistCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsImVjZGhrMjgzIikgPT0gMCkgZWNkaF9kb2l0 W1JfRUNfSzI4M109MjsKKy0JCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiZWNkaGs0MDkiKSA9PSAw KSBlY2RoX2RvaXRbUl9FQ19LNDA5XT0yOworLQkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCJlY2Ro azU3MSIpID09IDApIGVjZGhfZG9pdFtSX0VDX0s1NzFdPTI7CistCQllbHNlIGlmIChzdHJjbXAo KmFyZ3YsImVjZGhiMTYzIikgPT0gMCkgZWNkaF9kb2l0W1JfRUNfQjE2M109MjsKKy0JCWVsc2Ug aWYgKHN0cmNtcCgqYXJndiwiZWNkaGIyMzMiKSA9PSAwKSBlY2RoX2RvaXRbUl9FQ19CMjMzXT0y OworLQkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCJlY2RoYjI4MyIpID09IDApIGVjZGhfZG9pdFtS X0VDX0IyODNdPTI7CistCQllbHNlIGlmIChzdHJjbXAoKmFyZ3YsImVjZGhiNDA5IikgPT0gMCkg ZWNkaF9kb2l0W1JfRUNfQjQwOV09MjsKKy0JCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiZWNkaGI1 NzEiKSA9PSAwKSBlY2RoX2RvaXRbUl9FQ19CNTcxXT0yOworIAkJZWxzZSBpZiAoc3RyY21wKCph cmd2LCJlY2RoIikgPT0gMCkKKyAJCQl7CistCQkJZm9yIChpPTA7IGkgPCBFQ19OVU07IGkrKykK KysJCQlmb3IgKGk9Ul9FQ19QMjU2OyBpIDw9IFJfRUNfUDUyMTsgaSsrKQorIAkJCQllY2RoX2Rv aXRbaV09MTsKKyAJCQl9CisgCQllbHNlCitAQCAtMTA5NywxNSArMTA3MSwxMSBAQCBpbnQgTUFJ TihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkJQklPX3ByaW50ZihiaW9fZXJyLCJkc2E1MTIg ICBkc2ExMDI0ICBkc2EyMDQ4XG4iKTsKKyAjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRUNE U0EKKy0JCQlCSU9fcHJpbnRmKGJpb19lcnIsImVjZHNhcDE2MCBlY2RzYXAxOTIgZWNkc2FwMjI0 IGVjZHNhcDI1NiBlY2RzYXAzODQgZWNkc2FwNTIxXG4iKTsKKy0JCQlCSU9fcHJpbnRmKGJpb19l cnIsImVjZHNhazE2MyBlY2RzYWsyMzMgZWNkc2FrMjgzIGVjZHNhazQwOSBlY2RzYWs1NzFcbiIp OworLQkJCUJJT19wcmludGYoYmlvX2VyciwiZWNkc2FiMTYzIGVjZHNhYjIzMyBlY2RzYWIyODMg ZWNkc2FiNDA5IGVjZHNhYjU3MVxuIik7CisrCQkJQklPX3ByaW50ZihiaW9fZXJyLCJlY2RzYXAy NTYgZWNkc2FwMzg0IGVjZHNhcDUyMVxuIik7CisgCQkJQklPX3ByaW50ZihiaW9fZXJyLCJlY2Rz YVxuIik7CisgI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0VDREgKKy0JCQlCSU9fcHJpbnRm KGJpb19lcnIsImVjZGhwMTYwICBlY2RocDE5MiAgZWNkaHAyMjQgIGVjZGhwMjU2ICBlY2RocDM4 NCAgZWNkaHA1MjFcbiIpOworLQkJCUJJT19wcmludGYoYmlvX2VyciwiZWNkaGsxNjMgIGVjZGhr MjMzICBlY2RoazI4MyAgZWNkaGs0MDkgIGVjZGhrNTcxXG4iKTsKKy0JCQlCSU9fcHJpbnRmKGJp b19lcnIsImVjZGhiMTYzICBlY2RoYjIzMyAgZWNkaGIyODMgIGVjZGhiNDA5ICBlY2RoYjU3MVxu Iik7CisrCQkJQklPX3ByaW50ZihiaW9fZXJyLCJlY2RocDI1NiAgZWNkaHAzODQgZWNkaHA1MjFc biIpOworIAkJCUJJT19wcmludGYoYmlvX2VyciwiZWNkaFxuIik7CisgI2VuZGlmCisgCitAQCAt MTE4NCwxMSArMTE1NCwxMSBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkg ICAgaWYgKCFGSVBTX21vZGUoKSB8fCBpICE9IFJfRFNBXzUxMikKKyAJCQlkc2FfZG9pdFtpXT0x OworICNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQorLQkJZm9yIChpPTA7IGk8RUNfTlVNOyBpKysp CisrCQlmb3IgKGk9Ul9FQ19QMjU2OyBpIDw9IFJfRUNfUDUyMTsgaSsrKQorIAkJCWVjZHNhX2Rv aXRbaV09MTsKKyAjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRUNESAorLQkJZm9yIChpPTA7 IGk8RUNfTlVNOyBpKyspCisrCQlmb3IgKGk9Ul9FQ19QMjU2OyBpIDw9IFJfRUNfUDUyMTsgaSsr KQorIAkJCWVjZGhfZG9pdFtpXT0xOworICNlbmRpZgorIAkJfQorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWsvc3NsL3QxX2xpYi5jLnN1aXRlYiBvcGVuc3NsLTEuMC4xay9zc2wvdDFfbGliLmMKKy0t LSBvcGVuc3NsLTEuMC4xay9zc2wvdDFfbGliLmMuc3VpdGViCTIwMTUtMDEtMDkgMTA6MDM6Mzgu NjAzOTEyODQ0ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWsvc3NsL3QxX2xpYi5jCTIwMTUtMDEt MDkgMTA6MDY6MzUuNDcwOTEyODM0ICswMTAwCitAQCAtMjE4LDI5ICsyMTgsMjEgQEAgc3RhdGlj IGludCBwcmVmX2xpc3RbXSA9CisgCQlOSURfc2VjdDI4M2sxLCAvKiBzZWN0MjgzazEgKDkpICov CisgCQlOSURfc2VjdDI4M3IxLCAvKiBzZWN0MjgzcjEgKDEwKSAqLyAKKyAjZW5kaWYKKy0JCU5J RF9zZWNwMjU2azEsIC8qIHNlY3AyNTZrMSAoMjIpICovIAorIAkJTklEX1g5XzYyX3ByaW1lMjU2 djEsIC8qIHNlY3AyNTZyMSAoMjMpICovIAorICNpZm5kZWYgT1BFTlNTTF9OT19FQzJNCisgCQlO SURfc2VjdDIzOWsxLCAvKiBzZWN0MjM5azEgKDgpICovIAorIAkJTklEX3NlY3QyMzNrMSwgLyog c2VjdDIzM2sxICg2KSAqLworIAkJTklEX3NlY3QyMzNyMSwgLyogc2VjdDIzM3IxICg3KSAqLyAK KyAjZW5kaWYKKy0JCU5JRF9zZWNwMjI0azEsIC8qIHNlY3AyMjRrMSAoMjApICovIAorLQkJTklE X3NlY3AyMjRyMSwgLyogc2VjcDIyNHIxICgyMSkgKi8KKyAjaWZuZGVmIE9QRU5TU0xfTk9fRUMy TQorIAkJTklEX3NlY3QxOTNyMSwgLyogc2VjdDE5M3IxICg0KSAqLyAKKyAJCU5JRF9zZWN0MTkz cjIsIC8qIHNlY3QxOTNyMiAoNSkgKi8gCisgI2VuZGlmCistCQlOSURfc2VjcDE5MmsxLCAvKiBz ZWNwMTkyazEgKDE4KSAqLworLQkJTklEX1g5XzYyX3ByaW1lMTkydjEsIC8qIHNlY3AxOTJyMSAo MTkpICovIAorICNpZm5kZWYgT1BFTlNTTF9OT19FQzJNCisgCQlOSURfc2VjdDE2M2sxLCAvKiBz ZWN0MTYzazEgKDEpICovCisgCQlOSURfc2VjdDE2M3IxLCAvKiBzZWN0MTYzcjEgKDIpICovCisg CQlOSURfc2VjdDE2M3IyLCAvKiBzZWN0MTYzcjIgKDMpICovCisgI2VuZGlmCistCQlOSURfc2Vj cDE2MGsxLCAvKiBzZWNwMTYwazEgKDE1KSAqLworLQkJTklEX3NlY3AxNjByMSwgLyogc2VjcDE2 MHIxICgxNikgKi8gCistCQlOSURfc2VjcDE2MHIyLCAvKiBzZWNwMTYwcjIgKDE3KSAqLyAKKyAJ fTsKKyAKKyBpbnQgdGxzMV9lY19jdXJ2ZV9pZDJuaWQoaW50IGN1cnZlX2lkKQorQEAgLTE4MjAs NyArMTgxMiw2IEBAIGludCBzc2xfcHJlcGFyZV9jbGllbnRoZWxsb190bHNleHQoU1NMICoKKyAJ CXMtPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdFsxXSA9IFRMU0VYVF9FQ1BPSU5URk9STUFUX2Fu c2lYOTYyX2NvbXByZXNzZWRfcHJpbWU7CisgCQlzLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3Rb Ml0gPSBUTFNFWFRfRUNQT0lOVEZPUk1BVF9hbnNpWDk2Ml9jb21wcmVzc2VkX2NoYXIyOworIAor LQkJLyogd2Ugc3VwcG9ydCBhbGwgbmFtZWQgZWxsaXB0aWMgY3VydmVzIGluIFJGQyA0NDkyICov CisgCQlpZiAocy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0ICE9IE5VTEwpIE9QRU5TU0xfZnJl ZShzLT50bHNleHRfZWxsaXB0aWNjdXJ2ZWxpc3QpOworIAkJcy0+dGxzZXh0X2VsbGlwdGljY3Vy dmVsaXN0X2xlbmd0aCA9IHNpemVvZihwcmVmX2xpc3QpL3NpemVvZihwcmVmX2xpc3RbMF0pICog MjsKKyAJCWlmICgocy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0ID0gT1BFTlNTTF9tYWxsb2Mo cy0+dGxzZXh0X2VsbGlwdGljY3VydmVsaXN0X2xlbmd0aCkpID09IE5VTEwpCgpkaWZmIC0tZ2l0 IGEvb3BlbnNzbC0xLjAuMWstZXBoZW1lcmFsLWtleS1zaXplLnBhdGNoIGIvb3BlbnNzbC0xLjAu MWstZXBoZW1lcmFsLWtleS1zaXplLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjIzZDRmMzMKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuc3NsLTEuMC4xay1lcGhlbWVy YWwta2V5LXNpemUucGF0Y2gKQEAgLTAsMCArMSwxMzUgQEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjFrL2FwcHMvc19hcHBzLmguZXBoZW1lcmFsIG9wZW5zc2wtMS4wLjFrL2FwcHMvc19hcHBzLmgK Ky0tLSBvcGVuc3NsLTEuMC4xay9hcHBzL3NfYXBwcy5oLmVwaGVtZXJhbAkyMDE1LTAxLTA5IDEw OjIyOjAzLjI4OTg5NjIxMSArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2FwcHMvc19hcHBzLmgJ MjAxNS0wMS0wOSAxMDoyMjowMy4zNzM4OTgxMTEgKzAxMDAKK0BAIC0xNTYsNiArMTU2LDcgQEAg aW50IE1TX0NBTExCQUNLIHZlcmlmeV9jYWxsYmFjayhpbnQgb2ssCisgaW50IHNldF9jZXJ0X3N0 dWZmKFNTTF9DVFggKmN0eCwgY2hhciAqY2VydF9maWxlLCBjaGFyICprZXlfZmlsZSk7CisgaW50 IHNldF9jZXJ0X2tleV9zdHVmZihTU0xfQ1RYICpjdHgsIFg1MDkgKmNlcnQsIEVWUF9QS0VZICpr ZXkpOworICNlbmRpZgorK2ludCBzc2xfcHJpbnRfdG1wX2tleShCSU8gKm91dCwgU1NMICpzKTsK KyBpbnQgaW5pdF9jbGllbnQoaW50ICpzb2NrLCBjaGFyICpzZXJ2ZXIsIGNoYXIgKnBvcnQsIGlu dCB0eXBlKTsKKyBpbnQgc2hvdWxkX3JldHJ5KGludCBpKTsKKyBpbnQgZXh0cmFjdF9ob3N0X3Bv cnQoY2hhciAqc3RyLGNoYXIgKipob3N0X3B0cixjaGFyICoqcG9ydF9wdHIpOworZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWsvYXBwcy9zX2NiLmMuZXBoZW1lcmFsIG9wZW5zc2wtMS4wLjFrL2FwcHMv c19jYi5jCistLS0gb3BlbnNzbC0xLjAuMWsvYXBwcy9zX2NiLmMuZXBoZW1lcmFsCTIwMTUtMDEt MDggMTU6MDA6MzYuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWsvYXBwcy9zX2Ni LmMJMjAxNS0wMS0wOSAxMDoyMjowMy4zNzM4OTgxMTEgKzAxMDAKK0BAIC0zMzgsNiArMzM4LDM4 IEBAIHZvaWQgTVNfQ0FMTEJBQ0sgYXBwc19zc2xfaW5mb19jYWxsYmFjaygKKyAJCX0KKyAJfQor IAorK2ludCBzc2xfcHJpbnRfdG1wX2tleShCSU8gKm91dCwgU1NMICpzKQorKwl7CisrCUVWUF9Q S0VZICprZXk7CisrCWlmICghU1NMX2dldF9zZXJ2ZXJfdG1wX2tleShzLCAma2V5KSkKKysJCXJl dHVybiAxOworKwlCSU9fcHV0cyhvdXQsICJTZXJ2ZXIgVGVtcCBLZXk6ICIpOworKwlzd2l0Y2gg KEVWUF9QS0VZX2lkKGtleSkpCisrCQl7CisrCWNhc2UgRVZQX1BLRVlfUlNBOgorKwkJQklPX3By aW50ZihvdXQsICJSU0EsICVkIGJpdHNcbiIsIEVWUF9QS0VZX2JpdHMoa2V5KSk7CisrCQlicmVh azsKKysKKysJY2FzZSBFVlBfUEtFWV9ESDoKKysJCUJJT19wcmludGYob3V0LCAiREgsICVkIGJp dHNcbiIsIEVWUF9QS0VZX2JpdHMoa2V5KSk7CisrCQlicmVhazsKKysKKysJY2FzZSBFVlBfUEtF WV9FQzoKKysJCQl7CisrCQkJRUNfS0VZICplYyA9IEVWUF9QS0VZX2dldDFfRUNfS0VZKGtleSk7 CisrCQkJaW50IG5pZDsKKysJCQljb25zdCBjaGFyICpjbmFtZTsKKysJCQluaWQgPSBFQ19HUk9V UF9nZXRfY3VydmVfbmFtZShFQ19LRVlfZ2V0MF9ncm91cChlYykpOworKwkJCUVDX0tFWV9mcmVl KGVjKTsKKysJCQljbmFtZSA9IE9CSl9uaWQyc24obmlkKTsKKysJCQlCSU9fcHJpbnRmKG91dCwg IkVDREgsICVzLCAlZCBiaXRzXG4iLAorKwkJCQkJCWNuYW1lLCBFVlBfUEtFWV9iaXRzKGtleSkp OworKwkJCX0KKysJCX0KKysJRVZQX1BLRVlfZnJlZShrZXkpOworKwlyZXR1cm4gMTsKKysJfQor KwkJCisgCisgdm9pZCBNU19DQUxMQkFDSyBtc2dfY2IoaW50IHdyaXRlX3AsIGludCB2ZXJzaW9u LCBpbnQgY29udGVudF90eXBlLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4sIFNTTCAqc3Ns LCB2b2lkICphcmcpCisgCXsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2FwcHMvc19jbGllbnQu Yy5lcGhlbWVyYWwgb3BlbnNzbC0xLjAuMWsvYXBwcy9zX2NsaWVudC5jCistLS0gb3BlbnNzbC0x LjAuMWsvYXBwcy9zX2NsaWVudC5jLmVwaGVtZXJhbAkyMDE1LTAxLTA5IDEwOjIyOjAzLjM2Nzg5 Nzk3NSArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2FwcHMvc19jbGllbnQuYwkyMDE1LTAxLTA5 IDEwOjIyOjAzLjM3Mzg5ODExMSArMDEwMAorQEAgLTIwNTgsNiArMjA1OCw4IEBAIHN0YXRpYyB2 b2lkIHByaW50X3N0dWZmKEJJTyAqYmlvLCBTU0wgKnMKKyAJCQlCSU9fd3JpdGUoYmlvLCJcbiIs MSk7CisgCQkJfQorIAorKwkJc3NsX3ByaW50X3RtcF9rZXkoYmlvLCBzKTsKKysKKyAJCUJJT19w cmludGYoYmlvLCItLS1cblNTTCBoYW5kc2hha2UgaGFzIHJlYWQgJWxkIGJ5dGVzIGFuZCB3cml0 dGVuICVsZCBieXRlc1xuIiwKKyAJCQlCSU9fbnVtYmVyX3JlYWQoU1NMX2dldF9yYmlvKHMpKSwK KyAJCQlCSU9fbnVtYmVyX3dyaXR0ZW4oU1NMX2dldF93YmlvKHMpKSk7CitkaWZmIC11cCBvcGVu c3NsLTEuMC4xay9zc2wvc3NsLmguZXBoZW1lcmFsIG9wZW5zc2wtMS4wLjFrL3NzbC9zc2wuaAor LS0tIG9wZW5zc2wtMS4wLjFrL3NzbC9zc2wuaC5lcGhlbWVyYWwJMjAxNS0wMS0wOSAxMDoyMjow My4zNTg4OTc3NzIgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9zc2wvc3NsLmgJMjAxNS0wMS0w OSAxMDoyNTowOC42NDQwODgxNDYgKzAxMDAKK0BAIC0xNTkzLDYgKzE1OTMsNyBAQCBERUNMQVJF X1BFTV9ydyhTU0xfU0VTU0lPTiwgU1NMX1NFU1NJT04pCisgI2RlZmluZSBTU0xfQ1RSTF9HRVRf RVhUUkFfQ0hBSU5fQ0VSVFMJCTgyCisgI2RlZmluZSBTU0xfQ1RSTF9DTEVBUl9FWFRSQV9DSEFJ Tl9DRVJUUwk4MworIAorKyNkZWZpbmUgU1NMX0NUUkxfR0VUX1NFUlZFUl9UTVBfS0VZCQkxMDkK KyAjZGVmaW5lIFNTTF9DVFJMX0NIRUNLX1BST1RPX1ZFUlNJT04JCTExOQorICNkZWZpbmUgRFRM U19DVFJMX1NFVF9MSU5LX01UVQkJCTEyMAorICNkZWZpbmUgRFRMU19DVFJMX0dFVF9MSU5LX01J Tl9NVFUJCTEyMQorQEAgLTE2MzgsNiArMTYzOSw5IEBAIERFQ0xBUkVfUEVNX3J3KFNTTF9TRVNT SU9OLCBTU0xfU0VTU0lPTikKKyAjZGVmaW5lIFNTTF9DVFhfY2xlYXJfZXh0cmFfY2hhaW5fY2Vy dHMoY3R4KSBcCisgCVNTTF9DVFhfY3RybChjdHgsU1NMX0NUUkxfQ0xFQVJfRVhUUkFfQ0hBSU5f Q0VSVFMsMCxOVUxMKQorIAorKyNkZWZpbmUgU1NMX2dldF9zZXJ2ZXJfdG1wX2tleShzLCBwaykg XAorKwlTU0xfY3RybChzLFNTTF9DVFJMX0dFVF9TRVJWRVJfVE1QX0tFWSwwLHBrKQorKworICNp Zm5kZWYgT1BFTlNTTF9OT19CSU8KKyBCSU9fTUVUSE9EICpCSU9fZl9zc2wodm9pZCk7CisgQklP ICpCSU9fbmV3X3NzbChTU0xfQ1RYICpjdHgsaW50IGNsaWVudCk7CitkaWZmIC11cCBvcGVuc3Ns LTEuMC4xay9zc2wvczNfbGliLmMuZXBoZW1lcmFsIG9wZW5zc2wtMS4wLjFrL3NzbC9zM19saWIu YworLS0tIG9wZW5zc2wtMS4wLjFrL3NzbC9zM19saWIuYy5lcGhlbWVyYWwJMjAxNS0wMS0wOCAx NTowMDo1Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9zc2wvczNfbGliLmMJ MjAxNS0wMS0wOSAxMDoyMjowMy4zNzQ4OTgxMzMgKzAxMDAKK0BAIC0zMzU2LDYgKzMzNTYsNDUg QEAgbG9uZyBzc2wzX2N0cmwoU1NMICpzLCBpbnQgY21kLCBsb25nIGxhcgorIAorICNlbmRpZiAv KiAhT1BFTlNTTF9OT19UTFNFWFQgKi8KKyAKKysJY2FzZSBTU0xfQ1RSTF9HRVRfU0VSVkVSX1RN UF9LRVk6CisrCQlpZiAocy0+c2VydmVyIHx8ICFzLT5zZXNzaW9uIHx8ICFzLT5zZXNzaW9uLT5z ZXNzX2NlcnQpCisrCQkJcmV0dXJuIDA7CisrCQllbHNlCisrCQkJeworKwkJCVNFU1NfQ0VSVCAq c2M7CisrCQkJRVZQX1BLRVkgKnB0bXA7CisrCQkJaW50IHJ2ID0gMDsKKysJCQlzYyA9IHMtPnNl c3Npb24tPnNlc3NfY2VydDsKKysjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19SU0EpICYmICFkZWZp bmVkKE9QRU5TU0xfTk9fREgpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fRUMpCisrCQkJaWYgKCFz Yy0+cGVlcl9yc2FfdG1wICYmICFzYy0+cGVlcl9kaF90bXAKKysJCQkJCQkJJiYgIXNjLT5wZWVy X2VjZGhfdG1wKQorKwkJCQlyZXR1cm4gMDsKKysjZW5kaWYKKysJCQlwdG1wID0gRVZQX1BLRVlf bmV3KCk7CisrCQkJaWYgKCFwdG1wKQorKwkJCQlyZXR1cm4gMDsKKysJCQlpZiAoMCk7CisrI2lm bmRlZiBPUEVOU1NMX05PX1JTQQorKwkJCWVsc2UgaWYgKHNjLT5wZWVyX3JzYV90bXApCisrCQkJ CXJ2ID0gRVZQX1BLRVlfc2V0MV9SU0EocHRtcCwgc2MtPnBlZXJfcnNhX3RtcCk7CisrI2VuZGlm CisrI2lmbmRlZiBPUEVOU1NMX05PX0RICisrCQkJZWxzZSBpZiAoc2MtPnBlZXJfZGhfdG1wKQor KwkJCQlydiA9IEVWUF9QS0VZX3NldDFfREgocHRtcCwgc2MtPnBlZXJfZGhfdG1wKTsKKysjZW5k aWYKKysjaWZuZGVmIE9QRU5TU0xfTk9fRUNESAorKwkJCWVsc2UgaWYgKHNjLT5wZWVyX2VjZGhf dG1wKQorKwkJCQlydiA9IEVWUF9QS0VZX3NldDFfRUNfS0VZKHB0bXAsIHNjLT5wZWVyX2VjZGhf dG1wKTsKKysjZW5kaWYKKysJCQlpZiAocnYpCisrCQkJCXsKKysJCQkJKihFVlBfUEtFWSAqKilw YXJnID0gcHRtcDsKKysJCQkJcmV0dXJuIDE7CisrCQkJCX0KKysJCQlFVlBfUEtFWV9mcmVlKHB0 bXApOworKwkJCXJldHVybiAwOworKwkJCX0KKysKKyAJY2FzZSBTU0xfQ1RSTF9DSEVDS19QUk9U T19WRVJTSU9OOgorIAkJLyogRm9yIGxpYnJhcnktaW50ZXJuYWwgdXNlOyBjaGVja3MgdGhhdCB0 aGUgY3VycmVudCBwcm90b2NvbAorIAkJICogaXMgdGhlIGhpZ2hlc3QgZW5hYmxlZCB2ZXJzaW9u IChhY2NvcmRpbmcgdG8gcy0+Y3R4LT5tZXRob2QsCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAu MWstZmlwcy5wYXRjaCBiL29wZW5zc2wtMS4wLjFrLWZpcHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uZjc1MzI5YwotLS0gL2Rldi9udWxsCisrKyBiL29wZW5zc2wt MS4wLjFrLWZpcHMucGF0Y2gKQEAgLTAsMCArMSwyMDQwMCBAQAorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWsvYXBwcy9zcGVlZC5jLmZpcHMgb3BlbnNzbC0xLjAuMWsvYXBwcy9zcGVlZC5jCistLS0g b3BlbnNzbC0xLjAuMWsvYXBwcy9zcGVlZC5jLmZpcHMJMjAxNS0wMS0wOCAxNTowMDo1Ni4wMDAw MDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9hcHBzL3NwZWVkLmMJMjAxNS0wMS0wOSAw OTo1MTo1MS41Mzg5MjE5OTcgKzAxMDAKK0BAIC0xOTUsNyArMTk1LDYgQEAKKyAjaWZkZWYgT1BF TlNTTF9ET0lOR19NQUtFREVQRU5ECisgI3VuZGVmIEFFU19zZXRfZW5jcnlwdF9rZXkKKyAjdW5k ZWYgQUVTX3NldF9kZWNyeXB0X2tleQorLSN1bmRlZiBERVNfc2V0X2tleV91bmNoZWNrZWQKKyAj ZW5kaWYKKyAjZGVmaW5lIEJGX3NldF9rZXkJcHJpdmF0ZV9CRl9zZXRfa2V5CisgI2RlZmluZSBD QVNUX3NldF9rZXkJcHJpdmF0ZV9DQVNUX3NldF9rZXkKK0BAIC0yMDMsNyArMjAyLDYgQEAKKyAj ZGVmaW5lIFNFRURfc2V0X2tleQlwcml2YXRlX1NFRURfc2V0X2tleQorICNkZWZpbmUgUkMyX3Nl dF9rZXkJcHJpdmF0ZV9SQzJfc2V0X2tleQorICNkZWZpbmUgUkM0X3NldF9rZXkJcHJpdmF0ZV9S QzRfc2V0X2tleQorLSNkZWZpbmUgREVTX3NldF9rZXlfdW5jaGVja2VkCXByaXZhdGVfREVTX3Nl dF9rZXlfdW5jaGVja2VkCisgI2RlZmluZSBBRVNfc2V0X2VuY3J5cHRfa2V5CXByaXZhdGVfQUVT X3NldF9lbmNyeXB0X2tleQorICNkZWZpbmUgQUVTX3NldF9kZWNyeXB0X2tleQlwcml2YXRlX0FF U19zZXRfZGVjcnlwdF9rZXkKKyAjZGVmaW5lIENhbWVsbGlhX3NldF9rZXkJcHJpdmF0ZV9DYW1l bGxpYV9zZXRfa2V5CitAQCAtOTQxLDcgKzkzOSwxMiBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCisgI2lmbmRlZiBPUEVOU1NMX05PX1JTQQorIAkJCWlmIChzdHJjbXAoKmFyZ3Ys InJzYSIpID09IDApCisgCQkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCQkJaWYgKCFGSVBT X21vZGUoKSkKKysjZW5kaWYKKysJCQkJeworIAkJCXJzYV9kb2l0W1JfUlNBXzUxMl09MTsKKysJ CQkJfQorIAkJCXJzYV9kb2l0W1JfUlNBXzEwMjRdPTE7CisgCQkJcnNhX2RvaXRbUl9SU0FfMjA0 OF09MTsKKyAJCQlyc2FfZG9pdFtSX1JTQV80MDk2XT0xOworQEAgLTk1MSw3ICs5NTQsMTIgQEAg aW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICNpZm5kZWYgT1BFTlNTTF9OT19EU0EK KyAJCQlpZiAoc3RyY21wKCphcmd2LCJkc2EiKSA9PSAwKQorIAkJCXsKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrCQkJCWlmICghRklQU19tb2RlKCkpCisrI2VuZGlmCisrCQkJCXsKKyAJCQlkc2Ff ZG9pdFtSX0RTQV81MTJdPTE7CisrCQkJCX0KKyAJCQlkc2FfZG9pdFtSX0RTQV8xMDI0XT0xOwor IAkJCWRzYV9kb2l0W1JfRFNBXzIwNDhdPTE7CisgCQkJfQorQEAgLTExNjIsMTIgKzExNzAsMTgg QEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJeworIAkJZm9yIChpPTA7IGk8 QUxHT1JfTlVNOyBpKyspCisgCQkJeworLQkJCWlmIChpICE9IERfRVZQKQorKwkJCWlmIChpICE9 IERfRVZQICYmCisrCQkJICAgICghRklQU19tb2RlKCkgfHwgKGkgIT0gRF9XSElSTFBPT0wgJiYK KysJCQkJaSAhPSBEX01EMiAmJiBpICE9IERfTUQ0ICYmCisrCQkJCWkgIT0gRF9NRDUgJiYgaSAh PSBEX01EQzIgJiYKKysJCQkJaSAhPSBEX1JNRDE2MCkpKQorIAkJCQlkb2l0W2ldPTE7CisgCQkJ fQorIAkJZm9yIChpPTA7IGk8UlNBX05VTTsgaSsrKQorKwkJICAgIGlmICghRklQU19tb2RlKCkg fHwgaSAhPSBSX1JTQV81MTIpCisgCQkJcnNhX2RvaXRbaV09MTsKKyAJCWZvciAoaT0wOyBpPERT QV9OVU07IGkrKykKKysJCSAgICBpZiAoIUZJUFNfbW9kZSgpIHx8IGkgIT0gUl9EU0FfNTEyKQor IAkJCWRzYV9kb2l0W2ldPTE7CisgI2lmbmRlZiBPUEVOU1NMX05PX0VDRFNBCisgCQlmb3IgKGk9 MDsgaTxFQ19OVU07IGkrKykKK0BAIC0xMjI2LDMwICsxMjQwLDU0IEBAIGludCBNQUlOKGludCBh cmdjLCBjaGFyICoqYXJndikKKyAJQUVTX3NldF9lbmNyeXB0X2tleShrZXkzMiwyNTYsJmFlc19r czMpOworICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19DQU1FTExJQQorKwlpZiAoZG9pdFtE X0NCQ18xMjhfQ01MXSB8fCBkb2l0W0RfQ0JDXzE5Ml9DTUxdIHx8IGRvaXRbRF9DQkNfMjU2X0NN TF0pCisrCSAgICB7CisgCUNhbWVsbGlhX3NldF9rZXkoa2V5MTYsMTI4LCZjYW1lbGxpYV9rczEp OworIAlDYW1lbGxpYV9zZXRfa2V5KGNrZXkyNCwxOTIsJmNhbWVsbGlhX2tzMik7CisgCUNhbWVs bGlhX3NldF9rZXkoY2tleTMyLDI1NiwmY2FtZWxsaWFfa3MzKTsKKysJICAgIH0KKyAjZW5kaWYK KyAjaWZuZGVmIE9QRU5TU0xfTk9fSURFQQorKwlpZiAoZG9pdFtEX0NCQ19JREVBXSkKKysJICAg IHsKKyAJaWRlYV9zZXRfZW5jcnlwdF9rZXkoa2V5MTYsJmlkZWFfa3MpOworKwkgICAgfQorICNl bmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19TRUVECisrCWlmIChkb2l0W0RfQ0JDX1NFRURdKQor KwkgICAgeworIAlTRUVEX3NldF9rZXkoa2V5MTYsJnNlZWRfa3MpOworKwkgICAgfQorICNlbmRp ZgorICNpZm5kZWYgT1BFTlNTTF9OT19SQzQKKysJaWYgKGRvaXRbRF9SQzRdKQorKwkgICAgewor IAlSQzRfc2V0X2tleSgmcmM0X2tzLDE2LGtleTE2KTsKKysJICAgIH0KKyAjZW5kaWYKKyAjaWZu ZGVmIE9QRU5TU0xfTk9fUkMyCisrCWlmIChkb2l0W0RfQ0JDX1JDMl0pCisrCSAgICB7CisgCVJD Ml9zZXRfa2V5KCZyYzJfa3MsMTYsa2V5MTYsMTI4KTsKKysJICAgIH0KKyAjZW5kaWYKKyAjaWZu ZGVmIE9QRU5TU0xfTk9fUkM1CisrCWlmIChkb2l0W0RfQ0JDX1JDNV0pCisrCSAgICB7CisgCVJD NV8zMl9zZXRfa2V5KCZyYzVfa3MsMTYsa2V5MTYsMTIpOworKwkgICAgfQorICNlbmRpZgorICNp Zm5kZWYgT1BFTlNTTF9OT19CRgorKwlpZiAoZG9pdFtEX0NCQ19CRl0pCisrCSAgICB7CisgCUJG X3NldF9rZXkoJmJmX2tzLDE2LGtleTE2KTsKKysJICAgIH0KKyAjZW5kaWYKKyAjaWZuZGVmIE9Q RU5TU0xfTk9fQ0FTVAorKwlpZiAoZG9pdFtEX0NCQ19DQVNUXSkKKysJICAgIHsKKyAJQ0FTVF9z ZXRfa2V5KCZjYXN0X2tzLDE2LGtleTE2KTsKKysJICAgIH0KKyAjZW5kaWYKKyAjaWZuZGVmIE9Q RU5TU0xfTk9fUlNBCisgCW1lbXNldChyc2FfYywwLHNpemVvZihyc2FfYykpOworQEAgLTE1NjQs NiArMTYwMiw3IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCUhNQUNfQ1RY IGhjdHg7CisgCisgCQlITUFDX0NUWF9pbml0KCZoY3R4KTsKKysJCUhNQUNfQ1RYX3NldF9mbGFn cygmaGN0eCwgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKKyAJCUhNQUNfSW5pdF9l eCgmaGN0eCwodW5zaWduZWQgY2hhciAqKSJUaGlzIGlzIGEga2V5Li4uIiwKKyAJCQkxNixFVlBf bWQ1KCksIE5VTEwpOworIAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvQ29uZmlndXJlLmZpcHMg b3BlbnNzbC0xLjAuMWsvQ29uZmlndXJlCistLS0gb3BlbnNzbC0xLjAuMWsvQ29uZmlndXJlLmZp cHMJMjAxNS0wMS0wOSAwOTo1MTo1MS4yNTc5MTU2NDIgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4x ay9Db25maWd1cmUJMjAxNS0wMS0wOSAwOTo1MTo1MS41Mzk5MjIwMjAgKzAxMDAKK0BAIC0xMDAz LDExICsxMDAzLDYgQEAgaWYgKGRlZmluZWQoJGRpc2FibGVkeyJtZDUifSkgfHwgZGVmaW5lZAor IAkkZGlzYWJsZWR7InNzbDIifSA9ICJmb3JjZWQiOworIAl9CisgCistaWYgKCRmaXBzICYmICRm aXBzbGliZGlyIGVxICIiKQorLQl7CistCSRmaXBzbGliZGlyID0gJGZpcHNkaXIgLiAiL2xpYi8i OworLQl9CistCisgIyBSU0FYIEVOR0lORSBzZXRzIGRlZmF1bHQgbm9uLUZJUFMgUlNBIG1ldGhv ZC4KKyBpZiAoJGZpcHMpCisgCXsKK0BAIC0xNDgyLDcgKzE0NzcsNiBAQCAkY2ZsYWdzLj0iIC1E T1BFTlNTTF9CTl9BU01fR0YybSIgaWYgKCRiCisgaWYgKCRmaXBzKQorIAl7CisgCSRvcGVuc3Ns X290aGVyX2RlZmluZXMuPSIjZGVmaW5lIE9QRU5TU0xfRklQU1xuIjsKKy0JJGNmbGFncyAuPSAi IC1JXCQoRklQU0RJUikvaW5jbHVkZSI7CisgCX0KKyAKKyAkY3B1aWRfb2JqPSJtZW1fY2xyLm8i CXVubGVzcyAoJGNwdWlkX29iaiA9fiAvXC5vJC8pOworQEAgLTE2NjksOSArMTY2MywxMiBAQCB3 aGlsZSAoPElOPikKKyAKKyAJcy9eRklQU0RJUj0uKi9GSVBTRElSPSRmaXBzZGlyLzsKKyAJcy9e RklQU0xJQkRJUj0uKi9GSVBTTElCRElSPSRmaXBzbGliZGlyLzsKKy0Jcy9eRklQU0NBTkxJQj0u Ki9GSVBTQ0FOTElCPWxpYmNyeXB0by8gaWYgJGZpcHM7CisgCXMvXkJBU0VBRERSPS4qL0JBU0VB RERSPSRiYXNlYWRkci87CisgCisrCWlmICgkZmlwcykKKysJCXsKKysJCXMvXkZJUFM9LiovRklQ Uz15ZXMvOworKwkJfQorIAlzL15TSExJQl9UQVJHRVQ9LiovU0hMSUJfVEFSR0VUPSRzaGFyZWRf dGFyZ2V0LzsKKyAJcy9eU0hMSUJfTUFSSz0uKi9TSExJQl9NQVJLPSRzaGFyZWRfbWFyay87Cisg CXMvXlNIQVJFRF9MSUJTPS4qL1NIQVJFRF9MSUJTPVwkKFNIQVJFRF9DUllQVE8pIFwkKFNIQVJF RF9TU0wpLyBpZiAoISRub19zaGFyZWQpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvY3J5cHRv L2Flcy9hZXNfbWlzYy5jLmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2Flcy9hZXNfbWlzYy5j CistLS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2Flcy9hZXNfbWlzYy5jLmZpcHMJMjAxNS0wMS0w OCAxNTowMDozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vYWVz L2Flc19taXNjLmMJMjAxNS0wMS0wOSAwOTo1MTo1MS41Mzk5MjIwMjAgKzAxMDAKK0BAIC02OSwx NyArNjksMTEgQEAgY29uc3QgY2hhciAqQUVTX29wdGlvbnModm9pZCkgeworIGludCBBRVNfc2V0 X2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRz LAorIAkJCUFFU19LRVkgKmtleSkKKyAJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JZmlwc19j aXBoZXJfYWJvcnQoQUVTKTsKKy0jZW5kaWYKKyAJcmV0dXJuIHByaXZhdGVfQUVTX3NldF9lbmNy eXB0X2tleSh1c2VyS2V5LCBiaXRzLCBrZXkpOworIAl9CisgCisgaW50IEFFU19zZXRfZGVjcnlw dF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisgCQkJ QUVTX0tFWSAqa2V5KQorIAl7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQlmaXBzX2NpcGhlcl9h Ym9ydChBRVMpOworLSNlbmRpZgorIAlyZXR1cm4gcHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5 KHVzZXJLZXksIGJpdHMsIGtleSk7CisgCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2NyeXB0 by9jbWFjL2NtYWMuYy5maXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9jbWFjL2NtYWMuYworLS0t IG9wZW5zc2wtMS4wLjFrL2NyeXB0by9jbWFjL2NtYWMuYy5maXBzCTIwMTUtMDEtMDggMTU6MDA6 MzYuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2NtYWMvY21hYy5j CTIwMTUtMDEtMDkgMDk6NTE6NTEuNTQwOTIyMDQyICswMTAwCitAQCAtMTA3LDEzICsxMDcsNiBA QCBDTUFDX0NUWCAqQ01BQ19DVFhfbmV3KHZvaWQpCisgCisgdm9pZCBDTUFDX0NUWF9jbGVhbnVw KENNQUNfQ1RYICpjdHgpCisgCXsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWlmIChGSVBTX21v ZGUoKSAmJiAhY3R4LT5jY3R4LmVuZ2luZSkKKy0JCXsKKy0JCUZJUFNfY21hY19jdHhfY2xlYW51 cChjdHgpOworLQkJcmV0dXJuOworLQkJfQorLSNlbmRpZgorIAlFVlBfQ0lQSEVSX0NUWF9jbGVh bnVwKCZjdHgtPmNjdHgpOworIAlPUEVOU1NMX2NsZWFuc2UoY3R4LT50YmwsIEVWUF9NQVhfQkxP Q0tfTEVOR1RIKTsKKyAJT1BFTlNTTF9jbGVhbnNlKGN0eC0+azEsIEVWUF9NQVhfQkxPQ0tfTEVO R1RIKTsKK0BAIC0xNjQsMTEgKzE1Nyw2IEBAIGludCBDTUFDX0luaXQoQ01BQ19DVFggKmN0eCwg Y29uc3Qgdm9pZAorIAkJCUVWUGVycihFVlBfRl9DTUFDX0lOSVQsIEVWUF9SX0RJU0FCTEVEX0ZP Ul9GSVBTKTsKKyAJCQlyZXR1cm4gMDsKKyAJCQl9CistCQkvKiBPdGhlciBhbGdvcml0aG0gYmxv Y2tpbmcgd2lsbCBiZSBkb25lIGluIEZJUFNfY21hY19pbml0LAorLQkJICogdmlhIEZJUFNfY2lw aGVyaW5pdCgpLgorLQkJICovCistCQlpZiAoIWltcGwgJiYgIWN0eC0+Y2N0eC5lbmdpbmUpCist CQkJcmV0dXJuIEZJUFNfY21hY19pbml0KGN0eCwga2V5LCBrZXlsZW4sIGNpcGhlciwgTlVMTCk7 CisgCQl9CisgI2VuZGlmCisgCS8qIEFsbCB6ZXJvcyBtZWFucyByZXN0YXJ0ICovCitAQCAtMjE2 LDEwICsyMDQsNiBAQCBpbnQgQ01BQ19VcGRhdGUoQ01BQ19DVFggKmN0eCwgY29uc3Qgdm9pCisg CXsKKyAJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSA9IGluOworIAlzaXplX3QgYmw7CistI2lm ZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+Y2N0eC5lbmdpbmUp CistCQlyZXR1cm4gRklQU19jbWFjX3VwZGF0ZShjdHgsIGluLCBkbGVuKTsKKy0jZW5kaWYKKyAJ aWYgKGN0eC0+bmxhc3RfYmxvY2sgPT0gLTEpCisgCQlyZXR1cm4gMDsKKyAJaWYgKGRsZW4gPT0g MCkKK0BAIC0yNjEsMTAgKzI0NSw2IEBAIGludCBDTUFDX1VwZGF0ZShDTUFDX0NUWCAqY3R4LCBj b25zdCB2b2kKKyBpbnQgQ01BQ19GaW5hbChDTUFDX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpv dXQsIHNpemVfdCAqcG91dGxlbikKKyAJeworIAlpbnQgaSwgYmwsIGxiOworLSNpZmRlZiBPUEVO U1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmNjdHguZW5naW5lKQorLQkJcmV0 dXJuIEZJUFNfY21hY19maW5hbChjdHgsIG91dCwgcG91dGxlbik7CistI2VuZGlmCisgCWlmIChj dHgtPm5sYXN0X2Jsb2NrID09IC0xKQorIAkJcmV0dXJuIDA7CisgCWJsID0gRVZQX0NJUEhFUl9D VFhfYmxvY2tfc2l6ZSgmY3R4LT5jY3R4KTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2NyeXB0 by9jcnlwdG8uaC5maXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9jcnlwdG8uaAorLS0tIG9wZW5z c2wtMS4wLjFrL2NyeXB0by9jcnlwdG8uaC5maXBzCTIwMTUtMDEtMDkgMDk6NTE6NTEuMTM4OTEy OTUwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2NyeXB0by5oCTIwMTUtMDEtMDkg MDk6NTE6NTEuNTQwOTIyMDQyICswMTAwCitAQCAtNTUzLDI0ICs1NTMsMjkgQEAgaW50IEZJUFNf bW9kZV9zZXQoaW50IHIpOworIHZvaWQgT1BFTlNTTF9pbml0KHZvaWQpOworIAorICNkZWZpbmUg Zmlwc19tZF9pbml0KGFsZykgZmlwc19tZF9pbml0X2N0eChhbGcsIGFsZykKKysjZGVmaW5lIG5v bmZpcHNfbWRfaW5pdChhbGcpIG5vbmZpcHNfbWRfaW5pdF9jdHgoYWxnLCBhbGcpCisrI2RlZmlu ZSBmaXBzX21kX2luaXRfY3R4KGFsZywgY3gpIFwKKysJaW50IGFsZyMjX0luaXQoY3gjI19DVFgg KmMpCisgCisgI2lmZGVmIE9QRU5TU0xfRklQUworLSNkZWZpbmUgZmlwc19tZF9pbml0X2N0eChh bGcsIGN4KSBcCisrI2RlZmluZSBub25maXBzX21kX2luaXRfY3R4KGFsZywgY3gpIFwKKyAJaW50 IGFsZyMjX0luaXQoY3gjI19DVFggKmMpIFwKKyAJeyBcCisgCWlmIChGSVBTX21vZGUoKSkgT3Bl blNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKKy0JCSJMb3cgbGV2ZWwgQVBJIGNhbGwgdG8g ZGlnZXN0ICIgI2FsZyAiIGZvcmJpZGRlbiBpbiBGSVBTIG1vZGUhIik7IFwKKysJCSJEaWdlc3Qg IiAjYWxnICIgZm9yYmlkZGVuIGluIEZJUFMgbW9kZSEiKTsgXAorIAlyZXR1cm4gcHJpdmF0ZV8j I2FsZyMjX0luaXQoYyk7IFwKKyAJfSBcCisgCWludCBwcml2YXRlXyMjYWxnIyNfSW5pdChjeCMj X0NUWCAqYykKKyAKKyAjZGVmaW5lIGZpcHNfY2lwaGVyX2Fib3J0KGFsZykgXAorIAlpZiAoRklQ U19tb2RlKCkpIE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElORV9fLCBcCistCQkiTG93IGxldmVs IEFQSSBjYWxsIHRvIGNpcGhlciAiICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQUyBtb2RlISIpCisr CQkiQ2lwaGVyICIgI2FsZyAiIGZvcmJpZGRlbiBpbiBGSVBTIG1vZGUhIikKKysKKysvKiBkaWUg aWYgRklQUyBzZWxmdGVzdCBmYWlsZWQgKi8KKyt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2sodm9p ZCk7CisgCisgI2Vsc2UKKy0jZGVmaW5lIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkgXAorLQlp bnQgYWxnIyNfSW5pdChjeCMjX0NUWCAqYykKKysjZGVmaW5lIG5vbmZpcHNfbWRfaW5pdF9jdHgo YWxnLCBjeCkgZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KQorICNkZWZpbmUgZmlwc19jaXBoZXJf YWJvcnQoYWxnKSB3aGlsZSgwKQorICNlbmRpZgorIAorQEAgLTU4Nyw2ICs1OTIsOSBAQCBpbnQg Q1JZUFRPX21lbWNtcChjb25zdCB2b2lkICphLCBjb25zdCB2CisgICovCisgdm9pZCBFUlJfbG9h ZF9DUllQVE9fc3RyaW5ncyh2b2lkKTsKKyAKKysjZGVmaW5lIE9QRU5TU0xfSEFWRV9JTklUCTEK Kyt2b2lkIE9QRU5TU0xfaW5pdF9saWJyYXJ5KHZvaWQpOworKworIC8qIEVycm9yIGNvZGVzIGZv ciB0aGUgQ1JZUFRPIGZ1bmN0aW9ucy4gKi8KKyAKKyAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9kZXMvZGVzLmguZmlwcyBvcGVuc3NsLTEuMC4x ay9jcnlwdG8vZGVzL2Rlcy5oCistLS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2Rlcy9kZXMuaC5m aXBzCTIwMTUtMDEtMDkgMDk6NTE6NTEuMTY4OTEzNjI5ICswMTAwCisrKysgb3BlbnNzbC0xLjAu MWsvY3J5cHRvL2Rlcy9kZXMuaAkyMDE1LTAxLTA5IDA5OjUxOjUxLjU0MDkyMjA0MiArMDEwMAor QEAgLTIyNCw5ICsyMjQsNiBAQCBpbnQgREVTX3NldF9rZXkoY29uc3RfREVTX2NibG9jayAqa2V5 LERFCisgaW50IERFU19rZXlfc2NoZWQoY29uc3RfREVTX2NibG9jayAqa2V5LERFU19rZXlfc2No ZWR1bGUgKnNjaGVkdWxlKTsKKyBpbnQgREVTX3NldF9rZXlfY2hlY2tlZChjb25zdF9ERVNfY2Js b2NrICprZXksREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpOworIHZvaWQgREVTX3NldF9rZXlf dW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSxERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVs ZSk7CistI2lmZGVmIE9QRU5TU0xfRklQUworLXZvaWQgcHJpdmF0ZV9ERVNfc2V0X2tleV91bmNo ZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsK Ky0jZW5kaWYKKyB2b2lkIERFU19zdHJpbmdfdG9fa2V5KGNvbnN0IGNoYXIgKnN0cixERVNfY2Js b2NrICprZXkpOworIHZvaWQgREVTX3N0cmluZ190b18ya2V5cyhjb25zdCBjaGFyICpzdHIsREVT X2NibG9jayAqa2V5MSxERVNfY2Jsb2NrICprZXkyKTsKKyB2b2lkIERFU19jZmI2NF9lbmNyeXB0 KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVkIGNoYXIgKm91dCxsb25nIGxlbmd0aCwK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9kZXMvc2V0X2tleS5jLmZpcHMgb3BlbnNz bC0xLjAuMWsvY3J5cHRvL2Rlcy9zZXRfa2V5LmMKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8v ZGVzL3NldF9rZXkuYy5maXBzCTIwMTUtMDEtMDggMTU6MDA6MzYuMDAwMDAwMDAwICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2Rlcy9zZXRfa2V5LmMJMjAxNS0wMS0wOSAwOTo1MTo1 MS41NDE5MjIwNjUgKzAxMDAKK0BAIC0zMzYsMTMgKzMzNiw2IEBAIGludCBERVNfc2V0X2tleV9j aGVja2VkKGNvbnN0X0RFU19jYmxvY2sKKyAJfQorIAorIHZvaWQgREVTX3NldF9rZXlfdW5jaGVj a2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSwgREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpCist I2lmZGVmIE9QRU5TU0xfRklQUworLQl7CistCWZpcHNfY2lwaGVyX2Fib3J0KERFUyk7CistCXBy aXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2VkKGtleSwgc2NoZWR1bGUpOworLQl9Cistdm9pZCBw cml2YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksIERFU19r ZXlfc2NoZWR1bGUgKnNjaGVkdWxlKQorLSNlbmRpZgorIAl7CisgCXN0YXRpYyBjb25zdCBpbnQg c2hpZnRzMlsxNl09ezAsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDB9OworIAlyZWdpc3Rl ciBERVNfTE9ORyBjLGQsdCxzLHQyOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2Ro L2RoX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2RoL2RoX2dlbi5jCistLS0gb3Bl bnNzbC0xLjAuMWsvY3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMJMjAxNS0wMS0wOCAxNTowMDozNi4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZGgvZGhfZ2VuLmMJMjAx NS0wMS0wOSAwOTo1MTo1MS41NDE5MjIwNjUgKzAxMDAKK0BAIC04NCwxMSArODQsNiBAQCBpbnQg REhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChESCAqcmV0LCBpCisgI2VuZGlmCisgCWlmKHJldC0+ bWV0aC0+Z2VuZXJhdGVfcGFyYW1zKQorIAkJcmV0dXJuIHJldC0+bWV0aC0+Z2VuZXJhdGVfcGFy YW1zKHJldCwgcHJpbWVfbGVuLCBnZW5lcmF0b3IsIGNiKTsKKy0jaWZkZWYgT1BFTlNTTF9GSVBT CistCWlmIChGSVBTX21vZGUoKSkKKy0JCXJldHVybiBGSVBTX2RoX2dlbmVyYXRlX3BhcmFtZXRl cnNfZXgocmV0LCBwcmltZV9sZW4sCistCQkJCQkJCWdlbmVyYXRvciwgY2IpOworLSNlbmRpZgor IAlyZXR1cm4gZGhfYnVpbHRpbl9nZW5wYXJhbXMocmV0LCBwcmltZV9sZW4sIGdlbmVyYXRvciwg Y2IpOworIAl9CisgCitAQCAtMTIzLDYgKzExOCwyMCBAQCBzdGF0aWMgaW50IGRoX2J1aWx0aW5f Z2VucGFyYW1zKERIICpyZXQsCisgCWludCBnLG9rPSAtMTsKKyAJQk5fQ1RYICpjdHg9TlVMTDsK KyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisr CQl7CisrCQlGSVBTZXJyKEZJUFNfRl9ESF9CVUlMVElOX0dFTlBBUkFNUyxGSVBTX1JfRklQU19T RUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCisrCWlmIChGSVBTX21vZGUo KSAmJiAocHJpbWVfbGVuIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJ eworKwkJREhlcnIoREhfRl9ESF9CVUlMVElOX0dFTlBBUkFNUywgREhfUl9LRVlfU0laRV9UT09f U01BTEwpOworKwkJZ290byBlcnI7CisrCQl9CisrI2VuZGlmCisrCisgCWN0eD1CTl9DVFhfbmV3 KCk7CisgCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7CisgCUJOX0NUWF9zdGFydChjdHgpOwor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2RoL2RoLmguZmlwcyBvcGVuc3NsLTEuMC4x ay9jcnlwdG8vZGgvZGguaAorLS0tIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9kaC9kaC5oLmZpcHMJ MjAxNS0wMS0wOSAwOTo1MTo1MS4xMTI5MTIzNjIgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9j cnlwdG8vZGgvZGguaAkyMDE1LTAxLTA5IDA5OjUxOjUxLjU0MTkyMjA2NSArMDEwMAorQEAgLTc3 LDYgKzc3LDggQEAKKyAjIGRlZmluZSBPUEVOU1NMX0RIX01BWF9NT0RVTFVTX0JJVFMJMTAwMDAK KyAjZW5kaWYKKyAKKysjZGVmaW5lIE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTIDEw MjQKKysKKyAjZGVmaW5lIERIX0ZMQUdfQ0FDSEVfTU9OVF9QICAgICAweDAxCisgI2RlZmluZSBE SF9GTEFHX05PX0VYUF9DT05TVFRJTUUgMHgwMiAvKiBuZXcgd2l0aCAwLjkuN2g7IHRoZSBidWls dC1pbiBESAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW1wbGVt ZW50YXRpb24gbm93IHVzZXMgY29uc3RhbnQgdGltZQorQEAgLTIxMCw2ICsyMTIsNyBAQCBpbnQJ REhfY2hlY2soY29uc3QgREggKmRoLGludCAqY29kZXMpOworIGludAlESF9jaGVja19wdWJfa2V5 KGNvbnN0IERIICpkaCxjb25zdCBCSUdOVU0gKnB1Yl9rZXksIGludCAqY29kZXMpOworIGludAlE SF9nZW5lcmF0ZV9rZXkoREggKmRoKTsKKyBpbnQJREhfY29tcHV0ZV9rZXkodW5zaWduZWQgY2hh ciAqa2V5LGNvbnN0IEJJR05VTSAqcHViX2tleSxESCAqZGgpOworK2ludAlESF9jb21wdXRlX2tl eV9wYWRkZWQodW5zaWduZWQgY2hhciAqa2V5LGNvbnN0IEJJR05VTSAqcHViX2tleSxESCAqZGgp OworIERIICoJZDJpX0RIcGFyYW1zKERIICoqYSxjb25zdCB1bnNpZ25lZCBjaGFyICoqcHAsIGxv bmcgbGVuZ3RoKTsKKyBpbnQJaTJkX0RIcGFyYW1zKGNvbnN0IERIICphLHVuc2lnbmVkIGNoYXIg KipwcCk7CisgI2lmbmRlZiBPUEVOU1NMX05PX0ZQX0FQSQorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWsvY3J5cHRvL2RoL2RoX2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2RoL2RoX2tl eS5jCistLS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2RoL2RoX2tleS5jLmZpcHMJMjAxNS0wMS0w OCAxNTowMDozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZGgv ZGhfa2V5LmMJMjAxNS0wMS0wOSAwOTo1MTo1MS41NDI5MjIwODcgKzAxMDAKK0BAIC02MSw2ICs2 MSw5IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yYW5k Lmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorIHN0YXRpYyBpbnQgZ2VuZXJhdGVf a2V5KERIICpkaCk7Cisgc3RhdGljIGludCBjb21wdXRlX2tleSh1bnNpZ25lZCBjaGFyICprZXks IGNvbnN0IEJJR05VTSAqcHViX2tleSwgREggKmRoKTsKK0BAIC05Nyw2ICsxMDAsMjEgQEAgaW50 IERIX2NvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIgKmtleSwgYworIAlyZXR1cm4gZGgtPm1ldGgt PmNvbXB1dGVfa2V5KGtleSwgcHViX2tleSwgZGgpOworIAl9CisgCisraW50IERIX2NvbXB1dGVf a2V5X3BhZGRlZCh1bnNpZ25lZCBjaGFyICprZXksIGNvbnN0IEJJR05VTSAqcHViX2tleSwgREgg KmRoKQorKwl7CisrCWludCBydiwgcGFkOworKwlydiA9IERIX2NvbXB1dGVfa2V5KGtleSwgcHVi X2tleSwgZGgpOworKwlpZiAocnYgPD0gMCkKKysJCXJldHVybiBydjsKKysJcGFkID0gQk5fbnVt X2J5dGVzKGRoLT5wKSAtIHJ2OworKwlpZiAocGFkID4gMCkKKysJCXsKKysJCW1lbW1vdmUoa2V5 ICsgcGFkLCBrZXksIHJ2KTsKKysJCW1lbXNldChrZXksIDAsIHBhZCk7CisrCQl9CisrCXJldHVy biBydiArIHBhZDsKKysJfQorKworIHN0YXRpYyBESF9NRVRIT0QgZGhfb3NzbCA9IHsKKyAiT3Bl blNTTCBESCBNZXRob2QiLAorIGdlbmVyYXRlX2tleSwKK0BAIC0xMDQsNyArMTIyLDcgQEAgY29t cHV0ZV9rZXksCisgZGhfYm5fbW9kX2V4cCwKKyBkaF9pbml0LAorIGRoX2ZpbmlzaCwKKy0wLAor K0RIX0ZMQUdfRklQU19NRVRIT0QsCisgTlVMTCwKKyBOVUxMCisgfTsKK0BAIC0xMjMsNiArMTQx LDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXJhdGVfa2V5KERIICpkaCkKKyAJQk5fTU9OVF9DVFggKm1v bnQ9TlVMTDsKKyAJQklHTlVNICpwdWJfa2V5PU5VTEwsKnByaXZfa2V5PU5VTEw7CisgCisrI2lm ZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgKEJOX251bV9iaXRzKGRoLT5w KSA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCXsKKysJCURIZXJyKERI X0ZfR0VORVJBVEVfS0VZLCBESF9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQlyZXR1cm4gMDsK KysJCX0KKysjZW5kaWYKKysKKyAJY3R4ID0gQk5fQ1RYX25ldygpOworIAlpZiAoY3R4ID09IE5V TEwpIGdvdG8gZXJyOworIAorQEAgLTIxMyw2ICsyMzksMTMgQEAgc3RhdGljIGludCBjb21wdXRl X2tleSh1bnNpZ25lZCBjaGFyICprZQorIAkJREhlcnIoREhfRl9DT01QVVRFX0tFWSxESF9SX01P RFVMVVNfVE9PX0xBUkdFKTsKKyAJCWdvdG8gZXJyOworIAkJfQorKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0cyhkaC0+cCkgPCBPUEVOU1NMX0RI X0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQl7CisrCQlESGVycihESF9GX0NPTVBVVEVfS0VZ LCBESF9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysjZW5kaWYK KyAKKyAJY3R4ID0gQk5fQ1RYX25ldygpOworIAlpZiAoY3R4ID09IE5VTEwpIGdvdG8gZXJyOwor QEAgLTI4MCw2ICszMTMsOSBAQCBzdGF0aWMgaW50IGRoX2JuX21vZF9leHAoY29uc3QgREggKmRo LCBCCisgCisgc3RhdGljIGludCBkaF9pbml0KERIICpkaCkKKyAJeworKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAlkaC0+ZmxhZ3MgfD0g REhfRkxBR19DQUNIRV9NT05UX1A7CisgCXJldHVybigxKTsKKyAJfQorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWsvY3J5cHRvL2RoL2RoX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2Ro L2RoX2xpYi5jCistLS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2RoL2RoX2xpYi5jLmZpcHMJMjAx NS0wMS0wOCAxNTowMDozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9jcnlw dG8vZGgvZGhfbGliLmMJMjAxNS0wMS0wOSAwOTo1MTo1MS41NDI5MjIwODcgKzAxMDAKK0BAIC04 MSwxNCArODEsNyBAQCBjb25zdCBESF9NRVRIT0QgKkRIX2dldF9kZWZhdWx0X21ldGhvZCh2Cisg CXsKKyAJaWYoIWRlZmF1bHRfREhfbWV0aG9kKQorIAkJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMK Ky0JCWlmIChGSVBTX21vZGUoKSkKKy0JCQlyZXR1cm4gRklQU19kaF9vcGVuc3NsKCk7CistCQll bHNlCistCQkJcmV0dXJuIERIX09wZW5TU0woKTsKKy0jZWxzZQorIAkJZGVmYXVsdF9ESF9tZXRo b2QgPSBESF9PcGVuU1NMKCk7CistI2VuZGlmCisgCQl9CisgCXJldHVybiBkZWZhdWx0X0RIX21l dGhvZDsKKyAJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2RzYS9kc2FfZXJyLmMu ZmlwcyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZHNhL2RzYV9lcnIuYworLS0tIG9wZW5zc2wtMS4w LjFrL2NyeXB0by9kc2EvZHNhX2Vyci5jLmZpcHMJMjAxNS0wMS0wOCAxNTowMDozNi4wMDAwMDAw MDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZHNhL2RzYV9lcnIuYwkyMDE1LTAx LTA5IDA5OjUxOjUxLjU0MjkyMjA4NyArMDEwMAorQEAgLTc0LDYgKzc0LDggQEAgc3RhdGljIEVS Ul9TVFJJTkdfREFUQSBEU0Ffc3RyX2Z1bmN0c1tdPQorIHtFUlJfRlVOQyhEU0FfRl9ET19EU0Ff UFJJTlQpLAkiRE9fRFNBX1BSSU5UIn0sCisge0VSUl9GVU5DKERTQV9GX0RTQVBBUkFNU19QUklO VCksCSJEU0FwYXJhbXNfcHJpbnQifSwKKyB7RVJSX0ZVTkMoRFNBX0ZfRFNBUEFSQU1TX1BSSU5U X0ZQKSwJIkRTQXBhcmFtc19wcmludF9mcCJ9LAorK3tFUlJfRlVOQyhEU0FfRl9EU0FfQlVJTFRJ Tl9LRVlHRU4pLAkiZHNhX2J1aWx0aW5fa2V5Z2VuIn0sCisre0VSUl9GVU5DKERTQV9GX0RTQV9C VUlMVElOX1BBUkFNR0VOKSwJImRzYV9idWlsdGluX3BhcmFtZ2VuIn0sCisge0VSUl9GVU5DKERT QV9GX0RTQV9ET19TSUdOKSwJIkRTQV9kb19zaWduIn0sCisge0VSUl9GVU5DKERTQV9GX0RTQV9E T19WRVJJRlkpLAkiRFNBX2RvX3ZlcmlmeSJ9LAorIHtFUlJfRlVOQyhEU0FfRl9EU0FfR0VORVJB VEVfS0VZKSwJIkRTQV9nZW5lcmF0ZV9rZXkifSwKK0BAIC0xMDYsNiArMTA4LDggQEAgc3RhdGlj IEVSUl9TVFJJTkdfREFUQSBEU0Ffc3RyX3JlYXNvbnNbXQorIHtFUlJfUkVBU09OKERTQV9SX0RB VEFfVE9PX0xBUkdFX0ZPUl9LRVlfU0laRSksImRhdGEgdG9vIGxhcmdlIGZvciBrZXkgc2l6ZSJ9 LAorIHtFUlJfUkVBU09OKERTQV9SX0RFQ09ERV9FUlJPUikgICAgICAgICAgLCJkZWNvZGUgZXJy b3IifSwKKyB7RVJSX1JFQVNPTihEU0FfUl9JTlZBTElEX0RJR0VTVF9UWVBFKSAgICwiaW52YWxp ZCBkaWdlc3QgdHlwZSJ9LAorK3tFUlJfUkVBU09OKERTQV9SX0tFWV9TSVpFX0lOVkFMSUQpICAg ICAgLCJrZXkgc2l6ZSBpbnZhbGlkIn0sCisre0VSUl9SRUFTT04oRFNBX1JfS0VZX1NJWkVfVE9P X1NNQUxMKSAgICAsImtleSBzaXplIHRvbyBzbWFsbCJ9LAorIHtFUlJfUkVBU09OKERTQV9SX01J U1NJTkdfUEFSQU1FVEVSUykgICAgLCJtaXNzaW5nIHBhcmFtZXRlcnMifSwKKyB7RVJSX1JFQVNP TihEU0FfUl9NT0RVTFVTX1RPT19MQVJHRSkgICAgICwibW9kdWx1cyB0b28gbGFyZ2UifSwKKyB7 RVJSX1JFQVNPTihEU0FfUl9ORUVEX05FV19TRVRVUF9WQUxVRVMpICwibmVlZCBuZXcgc2V0dXAg dmFsdWVzIn0sCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZHNhL2RzYV9nZW4uYy5m aXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9kc2EvZHNhX2dlbi5jCistLS0gb3BlbnNzbC0xLjAu MWsvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcwkyMDE1LTAxLTA4IDE1OjAwOjM2LjAwMDAwMDAw MCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9kc2EvZHNhX2dlbi5jCTIwMTUtMDEt MDkgMDk6NTE6NTEuNTQzOTIyMTEwICswMTAwCitAQCAtODUsNiArODUsMTQgQEAKKyAjaW5jbHVk ZSA8b3BlbnNzbC9maXBzLmg+CisgI2VuZGlmCisgCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKytz dGF0aWMgaW50IEZJUFNfZHNhX2dlbmVyYXRlX3BxKEJOX0NUWCAqY3R4LCBzaXplX3QgYml0cywg c2l6ZV90IHFiaXRzLAorKwkJY29uc3QgRVZQX01EICpldnBtZCwgdW5zaWduZWQgY2hhciAqc2Vl ZCwgaW50IHNlZWRfbGVuLAorKwkJQklHTlVNICoqcF9yZXQsIEJJR05VTSAqKnFfcmV0LCBpbnQg KmNvdW50ZXJfcmV0LCBCTl9HRU5DQiAqY2IpOworK3N0YXRpYyBpbnQgRklQU19kc2FfZ2VuZXJh dGVfZyhCTl9DVFggKmN0eCwgQklHTlVNICpwLCBCSUdOVU0gKnEsCisrCQlCSUdOVU0gKipnX3Jl dCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYik7CisrI2VuZGlmCisrCisgaW50 IERTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KERTQSAqcmV0LCBpbnQgYml0cywKKyAJCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIGludCBzZWVkX2xlbiwKKyAJCWludCAqY291bnRlcl9y ZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpCitAQCAtMTAwLDE0ICsxMDgs NiBAQCBpbnQgRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoRFNBICpyZXQsCisgCWlmKHJldC0+ bWV0aC0+ZHNhX3BhcmFtZ2VuKQorIAkJcmV0dXJuIHJldC0+bWV0aC0+ZHNhX3BhcmFtZ2VuKHJl dCwgYml0cywgc2VlZF9pbiwgc2VlZF9sZW4sCisgCQkJCWNvdW50ZXJfcmV0LCBoX3JldCwgY2Ip OworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JZWxzZSBpZiAoRklQU19tb2RlKCkpCistCQl7Cist CQlyZXR1cm4gRklQU19kc2FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChyZXQsIGJpdHMsIAorLQkJ CQkJCQlzZWVkX2luLCBzZWVkX2xlbiwKKy0JCQkJCQkJY291bnRlcl9yZXQsIGhfcmV0LCBjYik7 CistCQl9CistI2VuZGlmCisgCWVsc2UKKyAJCXsKKyAJCWNvbnN0IEVWUF9NRCAqZXZwbWQ7CitA QCAtMTI1LDI3ICsxMjUsMTE5IEBAIGludCBEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChEU0Eg KnJldCwKKyAJCQl9CisgCisgCQlyZXR1cm4gZHNhX2J1aWx0aW5fcGFyYW1nZW4ocmV0LCBiaXRz LCBxYml0cywgZXZwbWQsCistCQkJc2VlZF9pbiwgc2VlZF9sZW4sIE5VTEwsIGNvdW50ZXJfcmV0 LCBoX3JldCwgY2IpOworKwkJCQlzZWVkX2luLCBzZWVkX2xlbiwgY291bnRlcl9yZXQsIGhfcmV0 LCBjYik7CisgCQl9CisgCX0KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IEZJUFNfZHNh X2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCisr CWNvbnN0IEVWUF9NRCAqZXZwbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIHNpemVf dCBzZWVkX2xlbiwKKysJaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJO X0dFTkNCICpjYikKKysJeworKwlyZXR1cm4gZHNhX2J1aWx0aW5fcGFyYW1nZW4ocmV0LCBiaXRz LCBxYml0cywKKysJCWV2cG1kLCBzZWVkX2luLCBzZWVkX2xlbiwKKysJCWNvdW50ZXJfcmV0LCBo X3JldCwgY2IpOworKwl9CisrI2VuZGlmCisrCisgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERT QSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAorIAljb25zdCBFVlBfTUQgKmV2cG1k LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBzaXplX3Qgc2VlZF9sZW4sCistCXVuc2ln bmVkIGNoYXIgKnNlZWRfb3V0LAorIAlpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpo X3JldCwgQk5fR0VOQ0IgKmNiKQorIAl7CisgCWludCBvaz0wOworIAl1bnNpZ25lZCBjaGFyIHNl ZWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOworKwlCSUdOVU0gKmc9TlVMTCwqcT1OVUxMLCpwPU5V TEw7CisrCXNpemVfdCBxc2l6ZSA9IHFiaXRzID4+IDM7CisrCUJOX0NUWCAqY3R4PU5VTEw7Cisr CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkg ICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4sCisrCQkgICAg RklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAgIGdvdG8gZXJyOworKwkgICAgfQor KworKwlpZiAoRklQU19tb2R1bGVfbW9kZSgpICYmCisrCSAgICAoYml0cyAhPSAxMDI0IHx8IHFi aXRzICE9IDE2MCkgJiYKKysJICAgIChiaXRzICE9IDIwNDggfHwgcWJpdHMgIT0gMjI0KSAmJgor KwkgICAgKGJpdHMgIT0gMjA0OCB8fCBxYml0cyAhPSAyNTYpICYmCisrCSAgICAoYml0cyAhPSAz MDcyIHx8IHFiaXRzICE9IDI1NikpCisrCQl7CisrCQlEU0FlcnIoRFNBX0ZfRFNBX0JVSUxUSU5f UEFSQU1HRU4sIERTQV9SX0tFWV9TSVpFX0lOVkFMSUQpOworKwkJZ290byBlcnI7CisrCQl9Cisr I2VuZGlmCisrCWlmIChzZWVkX2xlbiAmJiAoc2VlZF9sZW4gPCAoc2l6ZV90KXFzaXplKSkKKysJ CXNlZWRfaW4gPSBOVUxMOwkJLyogc2VlZCBidWZmZXIgdG9vIHNtYWxsIC0tIGlnbm9yZSAqLwor KwlpZiAoc2VlZF9sZW4gPiBzaXplb2Yoc2VlZCkpIAorKwkJc2VlZF9sZW4gPSBzaXplb2Yoc2Vl ZCk7CS8qIEFwcC4gMi4yIG9mIEZJUFMgUFVCIDE4NiBhbGxvd3MgbGFyZ2VyIFNFRUQsCisrCQkJ CQkJICogYnV0IG91ciBpbnRlcm5hbCBidWZmZXJzIGFyZSByZXN0cmljdGVkIHRvIDI1NiBiaXRz Ki8KKysJaWYgKHNlZWRfaW4gIT0gTlVMTCkKKysJCW1lbWNweShzZWVkLCBzZWVkX2luLCBzZWVk X2xlbik7CisrCWVsc2UKKysJCXNlZWRfbGVuID0gMDsKKysKKysJaWYgKChjdHg9Qk5fQ1RYX25l dygpKSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCisrCUJOX0NUWF9zdGFydChjdHgpOworKwor KwlpZiAoIUZJUFNfZHNhX2dlbmVyYXRlX3BxKGN0eCwgYml0cywgcWJpdHMsIGV2cG1kLAorKwkJ c2VlZCwgc2VlZF9sZW4sICZwLCAmcSwgY291bnRlcl9yZXQsIGNiKSkKKysJCWdvdG8gZXJyOwor KworKwlpZiAoIUZJUFNfZHNhX2dlbmVyYXRlX2coY3R4LCBwLCBxLCAmZywgaF9yZXQsIGNiKSkK KysJCWdvdG8gZXJyOworKworKwlvaz0xOworK2VycjoKKysJaWYgKG9rKQorKwkJeworKwkJaWYo cmV0LT5wKQorKwkJCXsKKysJCQlCTl9mcmVlKHJldC0+cCk7CisrCQkJcmV0LT5wID0gTlVMTDsK KysJCQl9CisrCQlpZihyZXQtPnEpCisrCQkJeworKwkJCUJOX2ZyZWUocmV0LT5xKTsKKysJCQly ZXQtPnEgPSBOVUxMOworKwkJCX0KKysJCWlmKHJldC0+ZykKKysJCQl7CisrCQkJQk5fZnJlZShy ZXQtPmcpOworKwkJCXJldC0+ZyA9IE5VTEw7CisrCQkJfQorKwkJcmV0LT5wPUJOX2R1cChwKTsK KysJCXJldC0+cT1CTl9kdXAocSk7CisrCQlyZXQtPmc9Qk5fZHVwKGcpOworKwkJaWYgKHJldC0+ cCA9PSBOVUxMIHx8IHJldC0+cSA9PSBOVUxMIHx8IHJldC0+ZyA9PSBOVUxMKQorKwkJCW9rPTA7 CisrCQl9CisrCWlmKGN0eCkKKysJCXsKKysJCUJOX0NUWF9lbmQoY3R4KTsKKysJCUJOX0NUWF9m cmVlKGN0eCk7CisrCQl9CisrCXJldHVybiBvazsKKysJfQorKworKyNpZm5kZWYgT1BFTlNTTF9G SVBTCisrc3RhdGljCisrI2VuZGlmCisraW50IEZJUFNfZHNhX2dlbmVyYXRlX3BxKEJOX0NUWCAq Y3R4LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAorKwkJY29uc3QgRVZQX01EICpldnBtZCwg dW5zaWduZWQgY2hhciAqc2VlZCwgaW50IHNlZWRfbGVuLAorKwkJQklHTlVNICoqcF9yZXQsIEJJ R05VTSAqKnFfcmV0LCBpbnQgKmNvdW50ZXJfcmV0LCBCTl9HRU5DQiAqY2IpCisrCXsKKysJaW50 IG9rPTA7CisgCXVuc2lnbmVkIGNoYXIgbWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOworLQl1bnNp Z25lZCBjaGFyIGJ1ZltTSEEyNTZfRElHRVNUX0xFTkdUSF0sYnVmMltTSEEyNTZfRElHRVNUX0xF TkdUSF07CisrCXVuc2lnbmVkIGNoYXIgYnVmW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKKyAJQklH TlVNICpyMCwqVywqWCwqYywqdGVzdDsKKy0JQklHTlVNICpnPU5VTEwsKnE9TlVMTCwqcD1OVUxM OworLQlCTl9NT05UX0NUWCAqbW9udD1OVUxMOworLQlpbnQgaSwgaywgbj0wLCBtPTAsIHFzaXpl ID0gcWJpdHMgPj4gMzsKKysJQklHTlVNICpxPU5VTEwsKnA9TlVMTDsKKysJaW50IGksIGssIGIs IG49MCwgbT0wLCBxc2l6ZSA9IHFiaXRzID4+IDM7CisgCWludCBjb3VudGVyPTA7CisgCWludCBy PTA7CistCUJOX0NUWCAqY3R4PU5VTEw7CistCXVuc2lnbmVkIGludCBoPTI7CisgCisgCWlmIChx c2l6ZSAhPSBTSEFfRElHRVNUX0xFTkdUSCAmJiBxc2l6ZSAhPSBTSEEyMjRfRElHRVNUX0xFTkdU SCAmJgorIAkgICAgcXNpemUgIT0gU0hBMjU2X0RJR0VTVF9MRU5HVEgpCitAQCAtMTUzLDUxICsy NDUsNDMgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXworIAkJcmV0 dXJuIDA7CisgCisgCWlmIChldnBtZCA9PSBOVUxMKQorLQkJLyogdXNlIFNIQTEgYXMgZGVmYXVs dCAqLworLQkJZXZwbWQgPSBFVlBfc2hhMSgpOworKwkgICAgeworKwkJaWYgKHFiaXRzIDw9IDE2 MCkKKysJCQlldnBtZCA9IEVWUF9zaGExKCk7CisrCQllbHNlIGlmIChxYml0cyA8PSAyMjQpCisr CQkJZXZwbWQgPSBFVlBfc2hhMjI0KCk7CisrCQllbHNlCisrCQkJZXZwbWQgPSBFVlBfc2hhMjU2 KCk7CisrCSAgICB9CisgCisgCWlmIChiaXRzIDwgNTEyKQorIAkJYml0cyA9IDUxMjsKKyAKKyAJ Yml0cyA9IChiaXRzKzYzKS82NCo2NDsKKyAKKy0JLyogTkI6IHNlZWRfbGVuID09IDAgaXMgc3Bl Y2lhbCBjYXNlOiBjb3B5IGdlbmVyYXRlZCBzZWVkIHRvCistIAkgKiBzZWVkX2luIGlmIGl0IGlz IG5vdCBOVUxMLgorLSAJICovCistCWlmIChzZWVkX2xlbiAmJiAoc2VlZF9sZW4gPCAoc2l6ZV90 KXFzaXplKSkKKy0JCXNlZWRfaW4gPSBOVUxMOwkJLyogc2VlZCBidWZmZXIgdG9vIHNtYWxsIC0t IGlnbm9yZSAqLworLQlpZiAoc2VlZF9sZW4gPiAoc2l6ZV90KXFzaXplKSAKKy0JCXNlZWRfbGVu ID0gcXNpemU7CS8qIEFwcC4gMi4yIG9mIEZJUFMgUFVCIDE4NiBhbGxvd3MgbGFyZ2VyIFNFRUQs CistCQkJCQkgKiBidXQgb3VyIGludGVybmFsIGJ1ZmZlcnMgYXJlIHJlc3RyaWN0ZWQgdG8gMTYw IGJpdHMqLworLQlpZiAoc2VlZF9pbiAhPSBOVUxMKQorLQkJbWVtY3B5KHNlZWQsIHNlZWRfaW4s IHNlZWRfbGVuKTsKKy0KKy0JaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBOVUxMKQorLQkJZ290 byBlcnI7CistCistCWlmICgobW9udD1CTl9NT05UX0NUWF9uZXcoKSkgPT0gTlVMTCkKKy0JCWdv dG8gZXJyOworLQorLQlCTl9DVFhfc3RhcnQoY3R4KTsKKyAJcjAgPSBCTl9DVFhfZ2V0KGN0eCk7 CistCWcgPSBCTl9DVFhfZ2V0KGN0eCk7CisgCVcgPSBCTl9DVFhfZ2V0KGN0eCk7CistCXEgPSBC Tl9DVFhfZ2V0KGN0eCk7CisrCSpxX3JldCA9IHEgPSBCTl9DVFhfZ2V0KGN0eCk7CisgCVggPSBC Tl9DVFhfZ2V0KGN0eCk7CisgCWMgPSBCTl9DVFhfZ2V0KGN0eCk7CistCXAgPSBCTl9DVFhfZ2V0 KGN0eCk7CisrCSpwX3JldCA9IHAgPSBCTl9DVFhfZ2V0KGN0eCk7CisgCXRlc3QgPSBCTl9DVFhf Z2V0KGN0eCk7CisgCisgCWlmICghQk5fbHNoaWZ0KHRlc3QsQk5fdmFsdWVfb25lKCksYml0cy0x KSkKKyAJCWdvdG8gZXJyOworIAorKwkvKiBzdGVwIDMgbiA9IFxsY2VpbCBiaXRzIC8gcWJpdHMg XHJjZWlsIC0gMSAqLworKwluID0gKGJpdHMrcWJpdHMtMSkvcWJpdHMgLSAxOworKwkvKiBzdGVw IDQgYiA9IGJpdHMgLSAxIC0gbiAqIHFiaXRzICovCisrCWIgPSBiaXRzIC0gMSAtIG4qcWJpdHM7 CisrCisgCWZvciAoOzspCisgCQl7CisgCQlmb3IgKDs7KSAvKiBmaW5kIHEgKi8KKyAJCQl7Cisg CQkJaW50IHNlZWRfaXNfcmFuZG9tOworIAorLQkJCS8qIHN0ZXAgMSAqLworKwkJCS8qIHN0ZXAg NSBnZW5lcmF0ZSBzZWVkICovCisgCQkJaWYoIUJOX0dFTkNCX2NhbGwoY2IsIDAsIG0rKykpCisg CQkJCWdvdG8gZXJyOworIAorQEAgLTIxMiwzMCArMjk2LDE4IEBAIGludCBkc2FfYnVpbHRpbl9w YXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KKyAJCQkJc2VlZF9sZW49MDsgLyogdXNlIHJhbmRvbSBz ZWVkIGlmICdzZWVkX2luJyB0dXJucyBvdXQgdG8gYmUgYmFkKi8KKyAJCQkJfQorIAkJCW1lbWNw eShidWYgLCBzZWVkLCBxc2l6ZSk7CistCQkJbWVtY3B5KGJ1ZjIsIHNlZWQsIHFzaXplKTsKKy0J CQkvKiBwcmVjb21wdXRlICJTRUVEICsgMSIgZm9yIHN0ZXAgNzogKi8KKy0JCQlmb3IgKGkgPSBx c2l6ZS0xOyBpID49IDA7IGktLSkKKy0JCQkJeworLQkJCQlidWZbaV0rKzsKKy0JCQkJaWYgKGJ1 ZltpXSAhPSAwKQorLQkJCQkJYnJlYWs7CistCQkJCX0KKyAKKy0JCQkvKiBzdGVwIDIgKi8KKysJ CQkvKiBzdGVwIDYgVSA9IGhhc2goc2VlZCkgKi8KKyAJCQlpZiAoIUVWUF9EaWdlc3Qoc2VlZCwg cXNpemUsIG1kLCAgIE5VTEwsIGV2cG1kLCBOVUxMKSkKKyAJCQkJZ290byBlcnI7CistCQkJaWYg KCFFVlBfRGlnZXN0KGJ1ZiwgIHFzaXplLCBidWYyLCBOVUxMLCBldnBtZCwgTlVMTCkpCistCQkJ CWdvdG8gZXJyOworLQkJCWZvciAoaSA9IDA7IGkgPCBxc2l6ZTsgaSsrKQorLQkJCQltZFtpXV49 YnVmMltpXTsKKyAKKy0JCQkvKiBzdGVwIDMgKi8KKysJCQkvKiBzdGVwIDcgcSA9IDJeKHFiaXRz LTEpICsgVSArIDEgLSAoVSBtb2QgMikgKi8KKyAJCQltZFswXSB8PSAweDgwOworIAkJCW1kW3Fz aXplLTFdIHw9IDB4MDE7CisgCQkJaWYgKCFCTl9iaW4yYm4obWQsIHFzaXplLCBxKSkKKyAJCQkJ Z290byBlcnI7CisgCistCQkJLyogc3RlcCA0ICovCisrCQkJLyogc3RlcCA4IHRlc3QgZm9yIHBy aW1lICg2NCByb3VuZCBvZiBSYWJpbi1NaWxsZXIpICovCisgCQkJciA9IEJOX2lzX3ByaW1lX2Zh c3R0ZXN0X2V4KHEsIERTU19wcmltZV9jaGVja3MsIGN0eCwKKyAJCQkJCXNlZWRfaXNfcmFuZG9t LCBjYik7CisgCQkJaWYgKHIgPiAwKQorQEAgLTI0MywyNyArMzE1LDIyIEBAIGludCBkc2FfYnVp bHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KKyAJCQlpZiAociAhPSAwKQorIAkJCQlnb3Rv IGVycjsKKyAKKy0JCQkvKiBkbyBhIGNhbGxiYWNrIGNhbGwgKi8KKy0JCQkvKiBzdGVwIDUgKi8K KyAJCQl9CisgCisgCQlpZighQk5fR0VOQ0JfY2FsbChjYiwgMiwgMCkpIGdvdG8gZXJyOworIAkJ aWYoIUJOX0dFTkNCX2NhbGwoY2IsIDMsIDApKSBnb3RvIGVycjsKKyAKKy0JCS8qIHN0ZXAgNiAq LworKwkJLyogc3RlcCAxMSAqLworIAkJY291bnRlcj0wOworLQkJLyogIm9mZnNldCA9IDIiICov CistCistCQluPShiaXRzLTEpLzE2MDsKKysJCS8qICJvZmZzZXQgPSAxIiAqLworIAorIAkJZm9y ICg7OykKKyAJCQl7CisgCQkJaWYgKChjb3VudGVyICE9IDApICYmICFCTl9HRU5DQl9jYWxsKGNi LCAwLCBjb3VudGVyKSkKKyAJCQkJZ290byBlcnI7CisgCistCQkJLyogc3RlcCA3ICovCisrCQkJ Lyogc3RlcCAxMS4xLCAxMS4yIG9idGFpbiBXICovCisgCQkJQk5femVybyhXKTsKKy0JCQkvKiBu b3cgJ2J1ZicgY29udGFpbnMgIlNFRUQgKyBvZmZzZXQgLSAxIiAqLworIAkJCWZvciAoaz0wOyBr PD1uOyBrKyspCisgCQkJCXsKKyAJCQkJLyogb2J0YWluICJTRUVEICsgb2Zmc2V0ICsgayIgYnkg aW5jcmVtZW50aW5nOiAqLworQEAgLTI3OCwyOCArMzQ1LDMwIEBAIGludCBkc2FfYnVpbHRpbl9w YXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KKyAJCQkJCQkJCQlOVUxMKSkKKyAJCQkJCWdvdG8gZXJy OworIAorLQkJCQkvKiBzdGVwIDggKi8KKyAJCQkJaWYgKCFCTl9iaW4yYm4obWQsIHFzaXplLCBy MCkpCisgCQkJCQlnb3RvIGVycjsKKy0JCQkJaWYgKCFCTl9sc2hpZnQocjAscjAsKHFzaXplIDw8 IDMpKmspKSBnb3RvIGVycjsKKysJCQkJaWYgKGsgPT0gbikKKysJCQkJCUJOX21hc2tfYml0cyhy MCxiKTsKKysJCQkJaWYgKCFCTl9sc2hpZnQocjAscjAscWJpdHMqaykpIGdvdG8gZXJyOworIAkJ CQlpZiAoIUJOX2FkZChXLFcscjApKSBnb3RvIGVycjsKKyAJCQkJfQorIAorLQkJCS8qIG1vcmUg b2Ygc3RlcCA4ICovCistCQkJaWYgKCFCTl9tYXNrX2JpdHMoVyxiaXRzLTEpKSBnb3RvIGVycjsK KysJCQkvKiBzdGVwIDExLjMgWCA9IFcgKyAyXihMLTEpICovCisgCQkJaWYgKCFCTl9jb3B5KFgs VykpIGdvdG8gZXJyOworIAkJCWlmICghQk5fYWRkKFgsWCx0ZXN0KSkgZ290byBlcnI7CisgCist CQkJLyogc3RlcCA5ICovCisrCQkJLyogc3RlcCAxMS40IGMgPSBYIG1vZCAyKnEgKi8KKyAJCQlp ZiAoIUJOX2xzaGlmdDEocjAscSkpIGdvdG8gZXJyOworIAkJCWlmICghQk5fbW9kKGMsWCxyMCxj dHgpKSBnb3RvIGVycjsKKysKKysJCQkvKiBzdGVwIDExLjUgcCA9IFggLSAoYyAtIDEpICovCisg CQkJaWYgKCFCTl9zdWIocjAsYyxCTl92YWx1ZV9vbmUoKSkpIGdvdG8gZXJyOworIAkJCWlmICgh Qk5fc3ViKHAsWCxyMCkpIGdvdG8gZXJyOworIAorLQkJCS8qIHN0ZXAgMTAgKi8KKysJCQkvKiBz dGVwIDExLjYgKi8KKyAJCQlpZiAoQk5fY21wKHAsdGVzdCkgPj0gMCkKKyAJCQkJeworLQkJCQkv KiBzdGVwIDExICovCisrCQkJCS8qIHN0ZXAgMTEuNyAqLworIAkJCQlyID0gQk5faXNfcHJpbWVf ZmFzdHRlc3RfZXgocCwgRFNTX3ByaW1lX2NoZWNrcywKKyAJCQkJCQljdHgsIDEsIGNiKTsKKyAJ CQkJaWYgKHIgPiAwKQorQEAgLTMwOCwxOSArMzc3LDQ1IEBAIGludCBkc2FfYnVpbHRpbl9wYXJh bWdlbihEU0EgKnJldCwgc2l6ZV8KKyAJCQkJCWdvdG8gZXJyOworIAkJCQl9CisgCistCQkJLyog c3RlcCAxMyAqLworKwkJCS8qIHN0ZXAgMTEuOSAqLworIAkJCWNvdW50ZXIrKzsKKyAJCQkvKiAi b2Zmc2V0ID0gb2Zmc2V0ICsgbiArIDEiICovCisgCistCQkJLyogc3RlcCAxNCAqLworLQkJCWlm IChjb3VudGVyID49IDQwOTYpIGJyZWFrOworKwkJCS8qIHN0ZXAgMTIgKi8KKysJCQlpZiAoY291 bnRlciA+PSA0KmJpdHMpIGJyZWFrOworIAkJCX0KKyAJCX0KKyBlbmQ6CisgCWlmKCFCTl9HRU5D Ql9jYWxsKGNiLCAyLCAxKSkKKyAJCWdvdG8gZXJyOworIAorLQkvKiBXZSBub3cgbmVlZCB0byBn ZW5lcmF0ZSBnICovCisrCW9rPTE7CisrZXJyOgorKwlpZiAob2spCisrCQl7CisrCQlpZiAoY291 bnRlcl9yZXQgIT0gTlVMTCkgKmNvdW50ZXJfcmV0PWNvdW50ZXI7CisrCQl9CisrCXJldHVybiBv azsKKysJfQorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrc3RhdGljCisrI2VuZGlmCisraW50 IEZJUFNfZHNhX2dlbmVyYXRlX2coQk5fQ1RYICpjdHgsIEJJR05VTSAqcCwgQklHTlVNICpxLAor KwkJQklHTlVNICoqZ19yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpCisr CXsKKysJaW50IG9rPTA7CisrCUJJR05VTSAqcjAsICp0ZXN0LCAqZyA9IE5VTEw7CisrCUJOX01P TlRfQ1RYICptb250OworKwl1bnNpZ25lZCBpbnQgaD0yOworKworKwlpZiAoKG1vbnQ9Qk5fTU9O VF9DVFhfbmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysKKysJcjAgPSBCTl9DVFhfZ2V0 KGN0eCk7CisrCSpnX3JldCA9IGcgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCXRlc3QgPSBCTl9DVFhf Z2V0KGN0eCk7CisrCisgCS8qIFNldCByMD0ocC0xKS9xICovCisgCWlmICghQk5fc3ViKHRlc3Qs cCxCTl92YWx1ZV9vbmUoKSkpIGdvdG8gZXJyOworIAlpZiAoIUJOX2RpdihyMCxOVUxMLHRlc3Qs cSxjdHgpKSBnb3RvIGVycjsKK0BAIC0zNDQsMjYgKzQzOSw3IEBAIGVuZDoKKyBlcnI6CisgCWlm IChvaykKKyAJCXsKKy0JCWlmKHJldC0+cCkgQk5fZnJlZShyZXQtPnApOworLQkJaWYocmV0LT5x KSBCTl9mcmVlKHJldC0+cSk7CistCQlpZihyZXQtPmcpIEJOX2ZyZWUocmV0LT5nKTsKKy0JCXJl dC0+cD1CTl9kdXAocCk7CistCQlyZXQtPnE9Qk5fZHVwKHEpOworLQkJcmV0LT5nPUJOX2R1cChn KTsKKy0JCWlmIChyZXQtPnAgPT0gTlVMTCB8fCByZXQtPnEgPT0gTlVMTCB8fCByZXQtPmcgPT0g TlVMTCkKKy0JCQl7CistCQkJb2s9MDsKKy0JCQlnb3RvIGVycjsKKy0JCQl9CistCQlpZiAoY291 bnRlcl9yZXQgIT0gTlVMTCkgKmNvdW50ZXJfcmV0PWNvdW50ZXI7CisgCQlpZiAoaF9yZXQgIT0g TlVMTCkgKmhfcmV0PWg7CistCQlpZiAoc2VlZF9vdXQpCistCQkJbWVtY3B5KHNlZWRfb3V0LCBz ZWVkLCBxc2l6ZSk7CistCQl9CistCWlmKGN0eCkKKy0JCXsKKy0JCUJOX0NUWF9lbmQoY3R4KTsK Ky0JCUJOX0NUWF9mcmVlKGN0eCk7CisgCQl9CisgCWlmIChtb250ICE9IE5VTEwpIEJOX01PTlRf Q1RYX2ZyZWUobW9udCk7CisgCXJldHVybiBvazsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2Ny eXB0by9kc2EvZHNhLmguZmlwcyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZHNhL2RzYS5oCistLS0g b3BlbnNzbC0xLjAuMWsvY3J5cHRvL2RzYS9kc2EuaC5maXBzCTIwMTUtMDEtMDkgMDk6NTE6NTEu MDMzOTEwNTc2ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2RzYS9kc2EuaAkyMDE1 LTAxLTA5IDA5OjUxOjUxLjU0MzkyMjExMCArMDEwMAorQEAgLTg4LDYgKzg4LDggQEAKKyAjIGRl ZmluZSBPUEVOU1NMX0RTQV9NQVhfTU9EVUxVU19CSVRTCTEwMDAwCisgI2VuZGlmCisgCisrI2Rl ZmluZSBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAorKworICNkZWZpbmUg RFNBX0ZMQUdfQ0FDSEVfTU9OVF9QCTB4MDEKKyAjZGVmaW5lIERTQV9GTEFHX05PX0VYUF9DT05T VFRJTUUgICAgICAgMHgwMiAvKiBuZXcgd2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBEU0EKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbXBsZW1lbnRh dGlvbiBub3cgdXNlcyBjb25zdGFudCB0aW1lCitAQCAtMjY0LDYgKzI2NiwxNyBAQCBpbnQJRFNB X3ByaW50X2ZwKEZJTEUgKmJwLCBjb25zdCBEU0EgKngsCisgREggKkRTQV9kdXBfREgoY29uc3Qg RFNBICpyKTsKKyAjZW5kaWYKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IEZJUFNfZHNh X2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCisr CWNvbnN0IEVWUF9NRCAqZXZwbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIHNpemVf dCBzZWVkX2xlbiwKKysJaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJO X0dFTkNCICpjYik7CisraW50IEZJUFNfZHNhX2dlbmVyYXRlX3BxKEJOX0NUWCAqY3R4LCBzaXpl X3QgYml0cywgc2l6ZV90IHFiaXRzLAorKwkJY29uc3QgRVZQX01EICpldnBtZCwgdW5zaWduZWQg Y2hhciAqc2VlZCwgaW50IHNlZWRfbGVuLAorKwkJQklHTlVNICoqcF9yZXQsIEJJR05VTSAqKnFf cmV0LCBpbnQgKmNvdW50ZXJfcmV0LCBCTl9HRU5DQiAqY2IpOworK2ludCBGSVBTX2RzYV9nZW5l cmF0ZV9nKEJOX0NUWCAqY3R4LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwKKysJCUJJR05VTSAqKmdf cmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKTsKKysjZW5kaWYKKysKKyAj ZGVmaW5lIEVWUF9QS0VZX0NUWF9zZXRfZHNhX3BhcmFtZ2VuX2JpdHMoY3R4LCBuYml0cykgXAor IAlFVlBfUEtFWV9DVFhfY3RybChjdHgsIEVWUF9QS0VZX0RTQSwgRVZQX1BLRVlfT1BfUEFSQU1H RU4sIFwKKyAJCQkJRVZQX1BLRVlfQ1RSTF9EU0FfUEFSQU1HRU5fQklUUywgbmJpdHMsIE5VTEwp CitAQCAtMjg1LDEwICsyOTgsMTMgQEAgdm9pZCBFUlJfbG9hZF9EU0Ffc3RyaW5ncyh2b2lkKTsK KyAjZGVmaW5lIERTQV9GX0RPX0RTQV9QUklOVAkJCQkgMTA0CisgI2RlZmluZSBEU0FfRl9EU0FQ QVJBTVNfUFJJTlQJCQkJIDEwMAorICNkZWZpbmUgRFNBX0ZfRFNBUEFSQU1TX1BSSU5UX0ZQCQkJ IDEwMQorKyNkZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5fS0VZR0VOCQkJIDEyNAorKyNkZWZpbmUg RFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4JCQkgMTIzCisgI2RlZmluZSBEU0FfRl9EU0FfRE9f U0lHTgkJCQkgMTEyCisgI2RlZmluZSBEU0FfRl9EU0FfRE9fVkVSSUZZCQkJCSAxMTMKKy0jZGVm aW5lIERTQV9GX0RTQV9HRU5FUkFURV9LRVkJCQkJIDEyNAorLSNkZWZpbmUgRFNBX0ZfRFNBX0dF TkVSQVRFX1BBUkFNRVRFUlNfRVgJCSAxMjMKKysjZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9L RVkJCQkJIDEyNgorKyNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRFUlNfRVgJCSAx MjcKKysjZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9QQVJBTUVURVJTCS8qIHVudXNlZCAqLwkg MTI1CisgI2RlZmluZSBEU0FfRl9EU0FfTkVXX01FVEhPRAkJCQkgMTAzCisgI2RlZmluZSBEU0Ff Rl9EU0FfUEFSQU1fREVDT0RFCQkJCSAxMTkKKyAjZGVmaW5lIERTQV9GX0RTQV9QUklOVF9GUAkJ CQkgMTA1CitAQCAtMzE0LDExICszMzAsMTUgQEAgdm9pZCBFUlJfbG9hZF9EU0Ffc3RyaW5ncyh2 b2lkKTsKKyAjZGVmaW5lIERTQV9SX0RBVEFfVE9PX0xBUkdFX0ZPUl9LRVlfU0laRQkJIDEwMAor ICNkZWZpbmUgRFNBX1JfREVDT0RFX0VSUk9SCQkJCSAxMDQKKyAjZGVmaW5lIERTQV9SX0lOVkFM SURfRElHRVNUX1RZUEUJCQkgMTA2CisrI2RlZmluZSBEU0FfUl9LRVlfU0laRV9JTlZBTElECQkJ CSAxMTMKKysjZGVmaW5lIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTAkJCSAxMTAKKyAjZGVmaW5l IERTQV9SX01JU1NJTkdfUEFSQU1FVEVSUwkJCSAxMDEKKyAjZGVmaW5lIERTQV9SX01PRFVMVVNf VE9PX0xBUkdFCQkJCSAxMDMKKy0jZGVmaW5lIERTQV9SX05FRURfTkVXX1NFVFVQX1ZBTFVFUwkJ CSAxMTAKKysjZGVmaW5lIERTQV9SX05FRURfTkVXX1NFVFVQX1ZBTFVFUwkJCSAxMTIKKyAjZGVm aW5lIERTQV9SX05PTl9GSVBTX0RTQV9NRVRIT0QJCQkgMTExCisrI2RlZmluZSBEU0FfUl9OT05f RklQU19NRVRIT0QJCQkJIDExMQorICNkZWZpbmUgRFNBX1JfTk9fUEFSQU1FVEVSU19TRVQJCQkJ IDEwNworKyNkZWZpbmUgRFNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSAv KiB1bnVzZWQgKi8gMTEyCisgI2RlZmluZSBEU0FfUl9QQVJBTUVURVJfRU5DT0RJTkdfRVJST1IJ CQkgMTA1CisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsv Y3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZHNhL2RzYV9r ZXkuYworLS0tIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9kc2EvZHNhX2tleS5jLmZpcHMJMjAxNS0w MS0wOCAxNTowMDozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9jcnlwdG8v ZHNhL2RzYV9rZXkuYwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU0MzkyMjExMCArMDEwMAorQEAgLTY2 LDYgKzY2LDM1IEBACisgCisgI2lmZGVmIE9QRU5TU0xfRklQUworICNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysKKytzdGF0aWMgaW50IGZpcHNf Y2hlY2tfZHNhKERTQSAqZHNhKQorKwl7CisrCUVWUF9QS0VZICpwazsKKysJdW5zaWduZWQgY2hh ciB0YnNbXSA9ICJEU0EgUGFpcndpc2UgQ2hlY2sgRGF0YSI7CisrCWludCByZXQgPSAwOworKwor KwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCisrCUVW UF9QS0VZX3NldDFfRFNBKHBrLCBkc2EpOworKworKwlpZiAoZmlwc19wa2V5X3NpZ25hdHVyZV90 ZXN0KHBrLCB0YnMsIC0xLCBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMKSkKKysJCXJldCA9IDE7Cisr CisrCWVycjoKKysJaWYgKHJldCA9PSAwKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19D SEVDS19EU0EsRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVEKTsKKysJCWZpcHNfc2V0X3NlbGZ0 ZXN0X2ZhaWwoKTsKKysJCX0KKysKKysJaWYgKHBrKQorKwkJRVZQX1BLRVlfZnJlZShwayk7Cisr CisrCXJldHVybiByZXQ7CisrCX0KKysKKyAjZW5kaWYKKyAKKyBzdGF0aWMgaW50IGRzYV9idWls dGluX2tleWdlbihEU0EgKmRzYSk7CitAQCAtODIsMTAgKzExMSw2IEBAIGludCBEU0FfZ2VuZXJh dGVfa2V5KERTQSAqZHNhKQorICNlbmRpZgorIAlpZihkc2EtPm1ldGgtPmRzYV9rZXlnZW4pCisg CQlyZXR1cm4gZHNhLT5tZXRoLT5kc2Ffa2V5Z2VuKGRzYSk7CistI2lmZGVmIE9QRU5TU0xfRklQ UworLQlpZiAoRklQU19tb2RlKCkpCistCQlyZXR1cm4gRklQU19kc2FfZ2VuZXJhdGVfa2V5KGRz YSk7CistI2VuZGlmCisgCXJldHVybiBkc2FfYnVpbHRpbl9rZXlnZW4oZHNhKTsKKyAJfQorIAor QEAgLTk1LDYgKzEyMCwxNSBAQCBzdGF0aWMgaW50IGRzYV9idWlsdGluX2tleWdlbihEU0EgKmRz YSkKKyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAJQklHTlVNICpwdWJfa2V5PU5VTEwsKnByaXZfa2V5 PU5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgIShk c2EtPmZsYWdzICYgRFNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrCQkmJiAoQk5fbnVtX2JpdHMo ZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQl7CisrCQlE U0FlcnIoRFNBX0ZfRFNBX0JVSUxUSU5fS0VZR0VOLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwp OworKwkJZ290byBlcnI7CisrCQl9CisrI2VuZGlmCisrCisgCWlmICgoY3R4PUJOX0NUWF9uZXco KSkgPT0gTlVMTCkgZ290byBlcnI7CisgCisgCWlmIChkc2EtPnByaXZfa2V5ID09IE5VTEwpCitA QCAtMTMzLDYgKzE2NywxNCBAQCBzdGF0aWMgaW50IGRzYV9idWlsdGluX2tleWdlbihEU0EgKmRz YSkKKyAKKyAJZHNhLT5wcml2X2tleT1wcml2X2tleTsKKyAJZHNhLT5wdWJfa2V5PXB1Yl9rZXk7 CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX21vZGUoKSAmJiAhZmlwc19jaGVja19k c2EoZHNhKSkKKysJCXsKKysJCWRzYS0+cHViX2tleSA9IE5VTEw7CisrCQlkc2EtPnByaXZfa2V5 ID0gTlVMTDsKKysJICAgIAlnb3RvIGVycjsKKysJCX0KKysjZW5kaWYKKyAJb2s9MTsKKyAKKyBl cnI6CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZHNhL2RzYV9saWIuYy5maXBzIG9w ZW5zc2wtMS4wLjFrL2NyeXB0by9kc2EvZHNhX2xpYi5jCistLS0gb3BlbnNzbC0xLjAuMWsvY3J5 cHRvL2RzYS9kc2FfbGliLmMuZmlwcwkyMDE1LTAxLTA4IDE1OjAwOjM2LjAwMDAwMDAwMCArMDEw MAorKysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9kc2EvZHNhX2xpYi5jCTIwMTUtMDEtMDkgMDk6 NTE6NTEuNTQzOTIyMTEwICswMTAwCitAQCAtODcsMTQgKzg3LDcgQEAgY29uc3QgRFNBX01FVEhP RCAqRFNBX2dldF9kZWZhdWx0X21ldGhvZAorIAl7CisgCWlmKCFkZWZhdWx0X0RTQV9tZXRob2Qp CisgCQl7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQkJaWYgKEZJUFNfbW9kZSgpKQorLQkJCXJl dHVybiBGSVBTX2RzYV9vcGVuc3NsKCk7CistCQllbHNlCistCQkJcmV0dXJuIERTQV9PcGVuU1NM KCk7CistI2Vsc2UKKyAJCWRlZmF1bHRfRFNBX21ldGhvZCA9IERTQV9PcGVuU1NMKCk7CistI2Vu ZGlmCisgCQl9CisgCXJldHVybiBkZWZhdWx0X0RTQV9tZXRob2Q7CisgCX0KK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjFrL2NyeXB0by9kc2EvZHNhX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjFrL2Ny eXB0by9kc2EvZHNhX2xvY2wuaAorLS0tIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9kc2EvZHNhX2xv Y2wuaC5maXBzCTIwMTUtMDEtMDkgMDk6NTE6NTEuMDM1OTEwNjIxICswMTAwCisrKysgb3BlbnNz bC0xLjAuMWsvY3J5cHRvL2RzYS9kc2FfbG9jbC5oCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTQ0OTIy MTMzICswMTAwCitAQCAtNTYsNSArNTYsNCBAQAorIAorIGludCBkc2FfYnVpbHRpbl9wYXJhbWdl bihEU0EgKnJldCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKKyAJY29uc3QgRVZQX01EICpl dnBtZCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwgc2l6ZV90IHNlZWRfbGVuLAorLQl1 bnNpZ25lZCBjaGFyICpzZWVkX291dCwKKyAJaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9u ZyAqaF9yZXQsIEJOX0dFTkNCICpjYik7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8v ZHNhL2RzYV9vc3NsLmMuZmlwcyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZHNhL2RzYV9vc3NsLmMK Ky0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZHNhL2RzYV9vc3NsLmMuZmlwcwkyMDE1LTAxLTA4 IDE1OjAwOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9kc2Ev ZHNhX29zc2wuYwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU0NDkyMjEzMyArMDEwMAorQEAgLTY1LDYg KzY1LDkgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9y YW5kLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvYXNuMS5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisgc3RhdGljIERTQV9TSUcg KmRzYV9kb19zaWduKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRnc3QsIGludCBkbGVuLCBEU0EgKmRz YSk7Cisgc3RhdGljIGludCBkc2Ffc2lnbl9zZXR1cChEU0EgKmRzYSwgQk5fQ1RYICpjdHhfaW4s IEJJR05VTSAqKmtpbnZwLCBCSUdOVU0gKipycCk7CitAQCAtODIsNyArODUsNyBAQCBOVUxMLCAv KiBkc2FfbW9kX2V4cCwgKi8KKyBOVUxMLCAvKiBkc2FfYm5fbW9kX2V4cCwgKi8KKyBkc2FfaW5p dCwKKyBkc2FfZmluaXNoLAorLTAsCisrRFNBX0ZMQUdfRklQU19NRVRIT0QsCisgTlVMTCwKKyBO VUxMLAorIE5VTEwKK0BAIC0xMzgsNiArMTQxLDIxIEBAIHN0YXRpYyBEU0FfU0lHICpkc2FfZG9f c2lnbihjb25zdCB1bnNpZ24KKyAJRFNBX1NJRyAqcmV0PU5VTEw7CisgCWludCBub3JlZG8gPSAw OworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkK KysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0RTQV9ET19TSUdOLEZJUFNfUl9GSVBTX1NF TEZURVNUX0ZBSUxFRCk7CisrCSAgICByZXR1cm4gTlVMTDsKKysJICAgIH0KKysKKysJaWYgKEZJ UFNfbW9kZSgpICYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSAKKysJ CSYmIChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19C SVRTKSkKKysJCXsKKysJCURTQWVycihEU0FfRl9EU0FfRE9fU0lHTiwgRFNBX1JfS0VZX1NJWkVf VE9PX1NNQUxMKTsKKysJCXJldHVybiBOVUxMOworKwkJfQorKyNlbmRpZgorKworIAlCTl9pbml0 KCZtKTsKKyAJQk5faW5pdCgmeHIpOworIAorQEAgLTMyNSw2ICszNDMsMjEgQEAgc3RhdGljIGlu dCBkc2FfZG9fdmVyaWZ5KGNvbnN0IHVuc2lnbmVkCisgCQlyZXR1cm4gLTE7CisgCQl9CisgCisr I2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkgICAg eworKwkgICAgRklQU2VycihGSVBTX0ZfRFNBX0RPX1ZFUklGWSxGSVBTX1JfRklQU19TRUxGVEVT VF9GQUlMRUQpOworKwkgICAgcmV0dXJuIC0xOworKwkgICAgfQorKworKwlpZiAoRklQU19tb2Rl KCkgJiYgIShkc2EtPmZsYWdzICYgRFNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpIAorKwkJJiYgKEJO X251bV9iaXRzKGRzYS0+cCkgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQor KwkJeworKwkJRFNBZXJyKERTQV9GX0RTQV9ET19WRVJJRlksIERTQV9SX0tFWV9TSVpFX1RPT19T TUFMTCk7CisrCQlyZXR1cm4gLTE7CisrCQl9CisrI2VuZGlmCisrCisgCWlmIChCTl9udW1fYml0 cyhkc2EtPnApID4gT1BFTlNTTF9EU0FfTUFYX01PRFVMVVNfQklUUykKKyAJCXsKKyAJCURTQWVy cihEU0FfRl9EU0FfRE9fVkVSSUZZLERTQV9SX01PRFVMVVNfVE9PX0xBUkdFKTsKK0BAIC0zOTks NiArNDMyLDkgQEAgc3RhdGljIGludCBkc2FfZG9fdmVyaWZ5KGNvbnN0IHVuc2lnbmVkCisgCisg c3RhdGljIGludCBkc2FfaW5pdChEU0EgKmRzYSkKKyB7CisrI2lmZGVmIE9QRU5TU0xfRklQUwor KwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCWRzYS0+ZmxhZ3N8PURTQV9GTEFH X0NBQ0hFX01PTlRfUDsKKyAJcmV0dXJuKDEpOworIH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFr L2NyeXB0by9kc2EvZHNhX3BtZXRoLmMuZmlwcyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZHNhL2Rz YV9wbWV0aC5jCistLS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2RzYS9kc2FfcG1ldGguYy5maXBz CTIwMTUtMDEtMDggMTU6MDA6MzYuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWsv Y3J5cHRvL2RzYS9kc2FfcG1ldGguYwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU0NDkyMjEzMyArMDEw MAorQEAgLTI1NSw3ICsyNTUsNyBAQCBzdGF0aWMgaW50IHBrZXlfZHNhX3BhcmFtZ2VuKEVWUF9Q S0VZX0NUCisgCWlmICghZHNhKQorIAkJcmV0dXJuIDA7CisgCXJldCA9IGRzYV9idWlsdGluX3Bh cmFtZ2VuKGRzYSwgZGN0eC0+bmJpdHMsIGRjdHgtPnFiaXRzLCBkY3R4LT5wbWQsCistCSAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIHBjYik7Cisr CSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIE5VTEwsIE5VTEwsIHBjYik7Cisg CWlmIChyZXQpCisgCQlFVlBfUEtFWV9hc3NpZ25fRFNBKHBrZXksIGRzYSk7CisgCWVsc2UKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9kc2EvZHNhdGVzdC5jLmZpcHMgb3BlbnNzbC0x LjAuMWsvY3J5cHRvL2RzYS9kc2F0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZHNh L2RzYXRlc3QuYy5maXBzCTIwMTUtMDEtMDggMTU6MDA6MzYuMDAwMDAwMDAwICswMTAwCisrKysg b3BlbnNzbC0xLjAuMWsvY3J5cHRvL2RzYS9kc2F0ZXN0LmMJMjAxNS0wMS0wOSAwOTo1MTo1MS41 NDU5MjIxNTUgKzAxMDAKK0BAIC05NiwzNiArOTYsNDEgQEAgc3RhdGljIGludCBNU19DQUxMQkFD SyBkc2FfY2IoaW50IHAsIGludAorIC8qIHNlZWQsIG91dF9wLCBvdXRfcSwgb3V0X2cgYXJlIHRh a2VuIGZyb20gdGhlIHVwZGF0ZWQgQXBwZW5kaXggNSB0bworICAqIEZJUFMgUFVCIDE4NiBhbmQg YWxzbyBhcHBlYXIgaW4gQXBwZW5kaXggNSB0byBGSVBTIFBJQiAxODYtMSAqLworIHN0YXRpYyB1 bnNpZ25lZCBjaGFyIHNlZWRbMjBdPXsKKy0JMHhkNSwweDAxLDB4NGUsMHg0YiwweDYwLDB4ZWYs MHgyYiwweGE4LDB4YjYsMHgyMSwweDFiLDB4NDAsCistCTB4NjIsMHhiYSwweDMyLDB4MjQsMHhl MCwweDQyLDB4N2QsMHhkMywKKysJMHgwMiwweDQ3LDB4MTEsMHg5MiwweDExLDB4ODgsMHhDOCww eEZCLDB4QUYsMHg0OCwweDRDLDB4NjIsCisrCTB4REYsMHhBNSwweEJFLDB4QTAsMHhBNCwweDND LDB4NTYsMHhFMywKKyAJfTsKKyAKKyBzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRfcFtdPXsKKy0J MHg4ZCwweGYyLDB4YTQsMHg5NCwweDQ5LDB4MjIsMHg3NiwweGFhLAorLQkweDNkLDB4MjUsMHg3 NSwweDliLDB4YjAsMHg2OCwweDY5LDB4Y2IsCistCTB4ZWEsMHhjMCwweGQ4LDB4M2EsMHhmYiww eDhkLDB4MGMsMHhmNywKKy0JMHhjYiwweGI4LDB4MzIsMHg0ZiwweDBkLDB4NzgsMHg4MiwweGU1 LAorLQkweGQwLDB4NzYsMHgyZiwweGM1LDB4YjcsMHgyMSwweDBlLDB4YWYsCistCTB4YzIsMHhl OSwweGFkLDB4YWMsMHgzMiwweGFiLDB4N2EsMHhhYywKKy0JMHg0OSwweDY5LDB4M2QsMHhmYiww eGY4LDB4MzcsMHgyNCwweGMyLAorLQkweGVjLDB4MDcsMHgzNiwweGVlLDB4MzEsMHhjOCwweDAy LDB4OTEsCisrCTB4QUMsMHhDQiwweDFFLDB4NjMsMHg2MCwweDY5LDB4MEMsMHhGQiwweDA2LDB4 MTksMHg2OCwweDNFLAorKwkweEE1LDB4MDEsMHg1QSwweEEyLDB4MTUsMHg1QywweEUyLDB4OTks MHgyRCwweEQ1LDB4MzAsMHg5OSwKKysJMHg3RSwweDVGLDB4OEQsMHhFMiwweEY3LDB4QzYsMHgy RSwweDhELDB4QTMsMHg5RiwweDU4LDB4QUQsCisrCTB4RDYsMHhBOSwweDdELDB4MEUsMHgwRCww eDk1LDB4NTMsMHhBNiwweDcxLDB4M0EsMHhERSwweEFCLAorKwkweEFDLDB4RTksMHhGNCwweDM2 LDB4NTUsMHg5RSwweEI5LDB4RDYsMHg5MywweEJGLDB4RjMsMHgxOCwKKysJMHgxQywweDE0LDB4 N0IsMHhBNSwweDQyLDB4MkUsMHhDRCwweDAwLDB4RUIsMHgzNSwweDNCLDB4MUIsCisrCTB4QTgs MHg1MSwweEJCLDB4RTEsMHg1OCwweDQyLDB4ODUsMHg4NCwweDIyLDB4QTcsMHg5NywweDVFLAor KwkweDk5LDB4NkYsMHgzOCwweDIwLDB4QkQsMHg5RCwweEI2LDB4RDksMHgzMywweDM3LDB4MkEs MHhGRCwKKysJMHhCQiwweEQ0LDB4QkMsMHgwQywweDJBLDB4NjcsMHhDQiwweDlGLDB4QkIsMHhE RiwweEY5LDB4OTMsCisrCTB4QUEsMHhENiwweEYwLDB4RDYsMHg5NSwweDBCLDB4NUQsMHg2NSww eDE0LDB4RDAsMHgxOCwweDlELAorKwkweEM2LDB4QUYsMHhGMCwweEM2LDB4MzcsMHg3QywweEYz LDB4NUYsCisgCX07CisgCisgc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X3FbXT17CistCTB4Yzcs MHg3MywweDIxLDB4OGMsMHg3MywweDdlLDB4YzgsMHhlZSwKKy0JMHg5OSwweDNiLDB4NGYsMHgy ZCwweGVkLDB4MzAsMHhmNCwweDhlLAorLQkweGRhLDB4Y2UsMHg5MSwweDVmLAorKwkweEUzLDB4 OEUsMHg1RSwweDZELDB4QkYsMHgyQiwweDc5LDB4RjgsMHhDNSwweDRCLDB4ODksMHg4QiwKKysJ MHhCQSwweDJELDB4OTEsMHhDMywweDZDLDB4ODAsMHhBQywweDg3LAorIAl9OworIAorIHN0YXRp YyB1bnNpZ25lZCBjaGFyIG91dF9nW109eworLQkweDYyLDB4NmQsMHgwMiwweDc4LDB4MzksMHhl YSwweDBhLDB4MTMsCistCTB4NDEsMHgzMSwweDYzLDB4YTUsMHg1YiwweDRjLDB4YjUsMHgwMCwK Ky0JMHgyOSwweDlkLDB4NTUsMHgyMiwweDk1LDB4NmMsMHhlZiwweGNiLAorLQkweDNiLDB4ZmYs MHgxMCwweGYzLDB4OTksMHhjZSwweDJjLDB4MmUsCistCTB4NzEsMHhjYiwweDlkLDB4ZTUsMHhm YSwweDI0LDB4YmEsMHhiZiwKKy0JMHg1OCwweGU1LDB4YjcsMHg5NSwweDIxLDB4OTIsMHg1Yyww eDljLAorLQkweGM0LDB4MmUsMHg5ZiwweDZmLDB4NDYsMHg0YiwweDA4LDB4OGMsCistCTB4YzUs MHg3MiwweGFmLDB4NTMsMHhlNiwweGQ3LDB4ODgsMHgwMiwKKysJMHg0MiwweDRBLDB4MDQsMHg0 RSwweDc5LDB4QjQsMHg5OSwweDdGLDB4RkQsMHg1OCwweDM2LDB4MkMsCisrCTB4MUIsMHg1Riww eDE4LDB4N0UsMHgwRCwweENDLDB4QUIsMHg4MSwweEM5LDB4NUQsMHgxMCwweENFLAorKwkweDRF LDB4ODAsMHg3RSwweDU4LDB4QjQsMHgzNCwweDNGLDB4QTcsMHg0NSwweEM3LDB4QUEsMHgzNiwK KysJMHgyNCwweDQyLDB4QTksMHgzQiwweEU4LDB4MEUsMHgwNCwweDAyLDB4MkQsMHhGQiwweEE2 LDB4MTMsCisrCTB4QjksMHhCNSwweDE1LDB4QTUsMHg1NiwweDA3LDB4MzUsMHhFNCwweDAzLDB4 QjYsMHg3OSwweDdDLAorKwkweDYyLDB4REQsMHhERiwweDNGLDB4NzEsMHgzQSwweDlELDB4OEIs MHhDNCwweEY2LDB4RTcsMHgxRCwKKysJMHg1MiwweEE4LDB4QTksMHg0MywweDFELDB4MzMsMHg1 MSwweDg4LDB4MzksMHhCRCwweDczLDB4RTksCisrCTB4NUYsMHhCRSwweDgyLDB4NDksMHgyNyww eEU2LDB4QjUsMHg1MywweEMxLDB4MzgsMHhBQywweDJGLAorKwkweDZELDB4OTcsMHg2QywweEVC LDB4NjcsMHhDMSwweDVGLDB4NjcsMHhGOCwweDM1LDB4MDUsMHg1RSwKKysJMHhENSwweDY4LDB4 ODAsMHhBQSwweDk2LDB4Q0EsMHgwQiwweDhBLDB4RTYsMHhGMSwweEIxLDB4NDEsCisrCTB4QzYs MHg3NSwweDk0LDB4MEEsMHgwQSwweDJBLDB4RkEsMHgyOSwKKyAJfTsKKyAKKyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzdHIxW109IjEyMzQ1Njc4OTAxMjM0NTY3ODkwIjsKK0BAIC0xNTcs NyArMTYyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlCSU9fcHJpbnRm KGJpb19lcnIsInRlc3QgZ2VuZXJhdGlvbiBvZiBEU0EgcGFyYW1ldGVyc1xuIik7CisgCisgCUJO X0dFTkNCX3NldCgmY2IsIGRzYV9jYiwgYmlvX2Vycik7CistCWlmKCgoZHNhID0gRFNBX25ldygp KSA9PSBOVUxMKSB8fCAhRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCA1MTIsCisrCWlm KCgoZHNhID0gRFNBX25ldygpKSA9PSBOVUxMKSB8fCAhRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNf ZXgoZHNhLCAxMDI0LAorIAkJCQlzZWVkLCAyMCwgJmNvdW50ZXIsICZoLCAmY2IpKQorIAkJZ290 byBlbmQ7CisgCitAQCAtMTcwLDkgKzE3NSw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKKyAJQklPX3ByaW50ZihiaW9fZXJyLCJcbmNvdW50ZXI9JWQgaD0lbGRcbiIsY291bnRl cixoKTsKKyAJCQorIAlEU0FfcHJpbnQoYmlvX2Vycixkc2EsMCk7CistCWlmIChjb3VudGVyICE9 IDEwNSkgCisrCWlmIChjb3VudGVyICE9IDIzOSkgCisgCQl7CistCQlCSU9fcHJpbnRmKGJpb19l cnIsImNvdW50ZXIgc2hvdWxkIGJlIDEwNVxuIik7CisrCQlCSU9fcHJpbnRmKGJpb19lcnIsImNv dW50ZXIgc2hvdWxkIGJlIDIzOVxuIik7CisgCQlnb3RvIGVuZDsKKyAJCX0KKyAJaWYgKGggIT0g MikKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jLmZpcHMg b3BlbnNzbC0xLjAuMWsvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMKKy0tLSBvcGVuc3NsLTEuMC4x ay9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYy5maXBzCTIwMTUtMDEtMDggMTU6MDA6MzYuMDAwMDAw MDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMJMjAx NS0wMS0wOSAwOTo1MTo1MS41NDU5MjIxNTUgKzAxMDAKK0BAIC01OCwxMSArNTgsMjUgQEAKKyAK KyAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKyAjaW5jbHVkZSAiZW5nX2ludC5oIgorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisgdm9p ZCBFTkdJTkVfbG9hZF9idWlsdGluX2VuZ2luZXModm9pZCkKKyAJeworIAkvKiBTb21lIEVOR0lO RXMgbmVlZCB0aGlzICovCisgCU9QRU5TU0xfY3B1aWRfc2V0dXAoKTsKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrCU9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7CisrCWlmIChGSVBTX21vZGUoKSkgewor KwkJLyogV2UgYWxsb3cgbG9hZGluZyBkeW5hbWljIGVuZ2luZSBhcyBhIHRoaXJkIHBhcnR5Cisr CQkgICBlbmdpbmUgbWlnaHQgYmUgRklQUyB2YWxpZGF0ZWQuCisrCQkgICBVc2VyIGlzIGRpc2Fs bG93ZWQgdG8gbG9hZCBub24tdmFsaWRhdGVkIGVuZ2luZXMKKysJCSAgIGJ5IHNlY3VyaXR5IHBv bGljeS4gKi8KKysJCUVOR0lORV9sb2FkX2R5bmFtaWMoKTsKKysJCXJldHVybjsKKysJfQorKyNl bmRpZgorICNpZiAwCisgCS8qIFRoZXJlJ3Mgbm8gbG9uZ2VyIGFueSBuZWVkIGZvciBhbiAib3Bl bnNzbCIgRU5HSU5FIHVubGVzcywgb25lIGRheSwKKyAJICogaXQgaXMgdGhlICpvbmx5KiB3YXkg Zm9yIHN0YW5kYXJkIGJ1aWx0aW4gaW1wbGVtZW50YXRpb25zIHRvIGJlIGJlCitkaWZmIC11cCBv cGVuc3NsLTEuMC4xay9jcnlwdG8vZXZwL2NfYWxsYy5jLmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5 cHRvL2V2cC9jX2FsbGMuYworLS0tIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9ldnAvY19hbGxjLmMu ZmlwcwkyMDE1LTAxLTA4IDE1OjAwOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjFrL2NyeXB0by9ldnAvY19hbGxjLmMJMjAxNS0wMS0wOSAwOTo1MTo1MS41NDU5MjIxNTUgKzAx MDAKK0BAIC02NSw2ICs2NSwxMSBAQAorIHZvaWQgT3BlblNTTF9hZGRfYWxsX2NpcGhlcnModm9p ZCkKKyAJeworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJT1BFTlNTTF9pbml0X2xpYnJhcnko KTsKKysJaWYoIUZJUFNfbW9kZSgpKSAKKysJCXsKKysjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xf Tk9fREVTCisgCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfY2ZiKCkpOworIAlFVlBfYWRkX2NpcGhl cihFVlBfZGVzX2NmYjEoKSk7CitAQCAtMjI3LDQgKzIzMiw2MCBAQCB2b2lkIE9wZW5TU0xfYWRk X2FsbF9jaXBoZXJzKHZvaWQpCisgCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2NhbWVsbGlhXzI1 Nl9jYmMsIkNBTUVMTElBMjU2Iik7CisgCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2NhbWVsbGlh XzI1Nl9jYmMsImNhbWVsbGlhMjU2Iik7CisgI2VuZGlmCisrI2lmZGVmIE9QRU5TU0xfRklQUwor KwkJfQorKwllbHNlCisrCQl7CisrI2lmbmRlZiBPUEVOU1NMX05PX0RFUworKwlFVlBfYWRkX2Np cGhlcihFVlBfZGVzX2VkZV9jZmIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19j ZmIoKSk7CisrCisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlX29mYigpKTsKKysJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Rlc19lZGUzX29mYigpKTsKKysKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Rl c19lZGVfY2JjKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfY2JjKCkpOworKwlF VlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9kZXNfZWRlM19jYmMsIkRFUzMiKTsKKysJRVZQX2FkZF9j aXBoZXJfYWxpYXMoU05fZGVzX2VkZTNfY2JjLCJkZXMzIik7CisrCisrCUVWUF9hZGRfY2lwaGVy KEVWUF9kZXNfZWRlKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTMoKSk7CisrI2Vu ZGlmCisrCisrI2lmbmRlZiBPUEVOU1NMX05PX0FFUworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzEyOF9lY2IoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NiYygpKTsKKysJRVZQ X2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2ZiKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzEyOF9jZmIxKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jZmI4KCkpOworKwlF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9vZmIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9h ZXNfMTI4X2N0cigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfZ2NtKCkpOworKwlF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF94dHMoKSk7CisrCUVWUF9hZGRfY2lwaGVyX2FsaWFz KFNOX2Flc18xMjhfY2JjLCJBRVMxMjgiKTsKKysJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVz XzEyOF9jYmMsImFlczEyOCIpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9lY2IoKSk7 CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NiYygpKTsKKysJRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18xOTJfY2ZiKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jZmIxKCkp OworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jZmI4KCkpOworKwlFVlBfYWRkX2NpcGhl cihFVlBfYWVzXzE5Ml9vZmIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2N0cigp KTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfZ2NtKCkpOworKwlFVlBfYWRkX2NpcGhl cl9hbGlhcyhTTl9hZXNfMTkyX2NiYywiQUVTMTkyIik7CisrCUVWUF9hZGRfY2lwaGVyX2FsaWFz KFNOX2Flc18xOTJfY2JjLCJhZXMxOTIiKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZf ZWNiKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jYmMoKSk7CisrCUVWUF9hZGRf Y2lwaGVyKEVWUF9hZXNfMjU2X2NmYigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZf Y2ZiMSgpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2ZiOCgpKTsKKysJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Flc18yNTZfb2ZiKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1 Nl9jdHIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2djbSgpKTsKKysJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Flc18yNTZfeHRzKCkpOworKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9h ZXNfMjU2X2NiYywiQUVTMjU2Iik7CisrCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18yNTZf Y2JjLCJhZXMyNTYiKTsKKysjZW5kaWYKKysJCX0KKysjZW5kaWYKKyAJfQorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWsvY3J5cHRvL2V2cC9jX2FsbGQuYy5maXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0 by9ldnAvY19hbGxkLmMKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZXZwL2NfYWxsZC5jLmZp cHMJMjAxNS0wMS0wOCAxNTowMDozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4x ay9jcnlwdG8vZXZwL2NfYWxsZC5jCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTQ1OTIyMTU1ICswMTAw CitAQCAtNjQsNiArNjQsMTEgQEAKKyAKKyB2b2lkIE9wZW5TU0xfYWRkX2FsbF9kaWdlc3RzKHZv aWQpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCU9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7 CisrCWlmICghRklQU19tb2RlKCkpCisrCQl7CisrI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05P X01ENAorIAlFVlBfYWRkX2RpZ2VzdChFVlBfbWQ0KCkpOworICNlbmRpZgorQEAgLTExMSw0ICsx MTYsMzIgQEAgdm9pZCBPcGVuU1NMX2FkZF9hbGxfZGlnZXN0cyh2b2lkKQorICNpZm5kZWYgT1BF TlNTTF9OT19XSElSTFBPT0wKKyAJRVZQX2FkZF9kaWdlc3QoRVZQX3doaXJscG9vbCgpKTsKKyAj ZW5kaWYKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQl9CisrCWVsc2UKKysJCXsKKysjaWYgIWRl ZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBMSkKKysJRVZQ X2FkZF9kaWdlc3QoRVZQX3NoYTEoKSk7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTEs InNzbDMtc2hhMSIpOworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExV2l0aFJTQUVuY3J5 cHRpb24sU05fc2hhMVdpdGhSU0EpOworKyNpZm5kZWYgT1BFTlNTTF9OT19EU0EKKysJRVZQX2Fk ZF9kaWdlc3QoRVZQX2RzczEoKSk7CisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhT SEExLFNOX2RzYVdpdGhTSEExXzIpOworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRo U0hBMSwiRFNTMSIpOworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwiZHNz MSIpOworKyNlbmRpZgorKyNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQorKwlFVlBfYWRkX2RpZ2Vz dChFVlBfZWNkc2EoKSk7CisrI2VuZGlmCisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX1NI QTI1NgorKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjI0KCkpOworKwlFVlBfYWRkX2RpZ2VzdChF VlBfc2hhMjU2KCkpOworKyNlbmRpZgorKyNpZm5kZWYgT1BFTlNTTF9OT19TSEE1MTIKKysJRVZQ X2FkZF9kaWdlc3QoRVZQX3NoYTM4NCgpKTsKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTUxMigp KTsKKysjZW5kaWYKKysJCX0KKysjZW5kaWYKKyAJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsv Y3J5cHRvL2V2cC9kaWdlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9ldnAvZGlnZXN0 LmMKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZXZwL2RpZ2VzdC5jLmZpcHMJMjAxNS0wMS0w OCAxNTowMDozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZXZw L2RpZ2VzdC5jCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTQ2OTIyMTc4ICswMTAwCitAQCAtMTQyLDkg KzE0Miw1MCBAQCBpbnQgRVZQX0RpZ2VzdEluaXQoRVZQX01EX0NUWCAqY3R4LCBjb25zCisgCXJl dHVybiBFVlBfRGlnZXN0SW5pdF9leChjdHgsIHR5cGUsIE5VTEwpOworIAl9CisgCisrI2lmZGVm IE9QRU5TU0xfRklQUworKworKy8qIFRoZSBwdXJwb3NlIG9mIHRoZXNlIGlzIHRvIHRyYXAgcHJv Z3JhbXMgdGhhdCBhdHRlbXB0IHRvIHVzZSBub24gRklQUworKyAqIGFsZ29yaXRobXMgaW4gRklQ UyBtb2RlIGFuZCBpZ25vcmUgdGhlIGVycm9ycy4KKysgKi8KKysKKytzdGF0aWMgaW50IGJhZF9p bml0KEVWUF9NRF9DVFggKmN0eCkKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCBpbml0 Iik7IHJldHVybiAwO30KKysKKytzdGF0aWMgaW50IGJhZF91cGRhdGUoRVZQX01EX0NUWCAqY3R4 LGNvbnN0IHZvaWQgKmRhdGEsc2l6ZV90IGNvdW50KQorKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgi RGlnZXN0IHVwZGF0ZSIpOyByZXR1cm4gMDt9CisrCisrc3RhdGljIGludCBiYWRfZmluYWwoRVZQ X01EX0NUWCAqY3R4LHVuc2lnbmVkIGNoYXIgKm1kKQorKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgi RGlnZXN0IEZpbmFsIik7IHJldHVybiAwO30KKysKKytzdGF0aWMgY29uc3QgRVZQX01EIGJhZF9t ZCA9CisrCXsKKysJMCwKKysJMCwKKysJMCwKKysJMCwKKysJYmFkX2luaXQsCisrCWJhZF91cGRh dGUsCisrCWJhZF9maW5hbCwKKysJTlVMTCwKKysJTlVMTCwKKysJTlVMTCwKKysJMCwKKysJezAs MCwwLDB9LAorKwl9OworKworKyNlbmRpZgorKworIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBf TURfQ1RYICpjdHgsIGNvbnN0IEVWUF9NRCAqdHlwZSwgRU5HSU5FICppbXBsKQorIAl7CisgCUVW UF9NRF9DVFhfY2xlYXJfZmxhZ3MoY3R4LEVWUF9NRF9DVFhfRkxBR19DTEVBTkVEKTsKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQl7CisrCQlG SVBTZXJyKEZJUFNfRl9FVlBfRElHRVNUSU5JVF9FWCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlM RUQpOworKwkJY3R4LT5kaWdlc3QgPSAmYmFkX21kOworKwkJcmV0dXJuIDA7CisrCQl9CisrI2Vu ZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorIAkvKiBXaGV0aGVyIGl0J3MgbmljZSBv ciBub3QsICJJbml0cyIgY2FuIGJlIHVzZWQgb24gIkZpbmFsIidkIGNvbnRleHRzCisgCSAqIHNv IHRoaXMgY29udGV4dCBtYXkgYWxyZWFkeSBoYXZlIGFuIEVOR0lORSEgVHJ5IHRvIGF2b2lkIHJl bGVhc2luZworQEAgLTIwMSw2ICsyNDIsMTggQEAgaW50IEVWUF9EaWdlc3RJbml0X2V4KEVWUF9N RF9DVFggKmN0eCwgYworICNlbmRpZgorIAlpZiAoY3R4LT5kaWdlc3QgIT0gdHlwZSkKKyAJCXsK KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQlpZiAoRklQU19tb2RlKCkpCisrCQkJeworKwkJCWlm ICghKHR5cGUtPmZsYWdzICYgRVZQX01EX0ZMQUdfRklQUykgCisrCQkJICYmICEoY3R4LT5mbGFn cyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykpCisrCQkJCXsKKysJCQkJRVZQZXJy KEVWUF9GX0VWUF9ESUdFU1RJTklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7CisrCQkJ CWN0eC0+ZGlnZXN0ID0gJmJhZF9tZDsKKysJCQkJcmV0dXJuIDA7CisrCQkJCX0KKysJCQl9Cisr I2VuZGlmCisgCQlpZiAoY3R4LT5kaWdlc3QgJiYgY3R4LT5kaWdlc3QtPmN0eF9zaXplKQorIAkJ CU9QRU5TU0xfZnJlZShjdHgtPm1kX2RhdGEpOworIAkJY3R4LT5kaWdlc3Q9dHlwZTsKK0BAIC0y MjksMjYgKzI4MiwxNSBAQCBza2lwX3RvX2luaXQ6CisgCQl9CisgCWlmIChjdHgtPmZsYWdzICYg RVZQX01EX0NUWF9GTEFHX05PX0lOSVQpCisgCQlyZXR1cm4gMTsKKy0jaWZkZWYgT1BFTlNTTF9G SVBTCistCWlmIChGSVBTX21vZGUoKSkKKy0JCXsKKy0JCWlmIChGSVBTX2RpZ2VzdGluaXQoY3R4 LCB0eXBlKSkKKy0JCQlyZXR1cm4gMTsKKy0JCU9QRU5TU0xfZnJlZShjdHgtPm1kX2RhdGEpOwor LQkJY3R4LT5tZF9kYXRhID0gTlVMTDsKKy0JCXJldHVybiAwOworLQkJfQorLSNlbmRpZgorIAly ZXR1cm4gY3R4LT5kaWdlc3QtPmluaXQoY3R4KTsKKyAJfQorIAorIGludCBFVlBfRGlnZXN0VXBk YXRlKEVWUF9NRF9DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGNvdW50KQorIAl7 CisgI2lmZGVmIE9QRU5TU0xfRklQUworLQlyZXR1cm4gRklQU19kaWdlc3R1cGRhdGUoY3R4LCBk YXRhLCBjb3VudCk7CistI2Vsc2UKKy0JcmV0dXJuIGN0eC0+dXBkYXRlKGN0eCxkYXRhLGNvdW50 KTsKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworICNlbmRpZgorKwlyZXR1cm4gY3R4LT51cGRh dGUoY3R4LGRhdGEsY291bnQpOworIAl9CisgCisgLyogVGhlIGNhbGxlciBjYW4gYXNzdW1lIHRo YXQgdGhpcyByZW1vdmVzIGFueSBzZWNyZXQgZGF0YSBmcm9tIHRoZSBjb250ZXh0ICovCitAQCAt MjYzLDExICszMDUsMTEgQEAgaW50IEVWUF9EaWdlc3RGaW5hbChFVlBfTURfQ1RYICpjdHgsIHVu cworIC8qIFRoZSBjYWxsZXIgY2FuIGFzc3VtZSB0aGF0IHRoaXMgcmVtb3ZlcyBhbnkgc2VjcmV0 IGRhdGEgZnJvbSB0aGUgY29udGV4dCAqLworIGludCBFVlBfRGlnZXN0RmluYWxfZXgoRVZQX01E X0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICptZCwgdW5zaWduZWQgaW50ICpzaXplKQorIAl7Cist I2lmZGVmIE9QRU5TU0xfRklQUworLQlyZXR1cm4gRklQU19kaWdlc3RmaW5hbChjdHgsIG1kLCBz aXplKTsKKy0jZWxzZQorIAlpbnQgcmV0OworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQ U19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAlPUEVOU1NMX2Fzc2VydChjdHgtPmRpZ2Vz dC0+bWRfc2l6ZSA8PSBFVlBfTUFYX01EX1NJWkUpOworIAlyZXQ9Y3R4LT5kaWdlc3QtPmZpbmFs KGN0eCxtZCk7CisgCWlmIChzaXplICE9IE5VTEwpCitAQCAtMjc5LDcgKzMyMSw2IEBAIGludCBF VlBfRGlnZXN0RmluYWxfZXgoRVZQX01EX0NUWCAqY3R4LAorIAkJfQorIAltZW1zZXQoY3R4LT5t ZF9kYXRhLDAsY3R4LT5kaWdlc3QtPmN0eF9zaXplKTsKKyAJcmV0dXJuIHJldDsKKy0jZW5kaWYK KyAJfQorIAorIGludCBFVlBfTURfQ1RYX2NvcHkoRVZQX01EX0NUWCAqb3V0LCBjb25zdCBFVlBf TURfQ1RYICppbikKK0BAIC0zNzYsNyArNDE3LDYgQEAgdm9pZCBFVlBfTURfQ1RYX2Rlc3Ryb3ko RVZQX01EX0NUWCAqY3R4KQorIC8qIFRoaXMgY2FsbCBmcmVlcyByZXNvdXJjZXMgYXNzb2NpYXRl ZCB3aXRoIHRoZSBjb250ZXh0ICovCisgaW50IEVWUF9NRF9DVFhfY2xlYW51cChFVlBfTURfQ1RY ICpjdHgpCisgCXsKKy0jaWZuZGVmIE9QRU5TU0xfRklQUworIAkvKiBEb24ndCBhc3N1bWUgY3R4 LT5tZF9kYXRhIHdhcyBjbGVhbmVkIGluIEVWUF9EaWdlc3RfRmluYWwsCisgCSAqIGJlY2F1c2Ug c29tZXRpbWVzIG9ubHkgY29waWVzIG9mIHRoZSBjb250ZXh0IGFyZSBldmVyIGZpbmFsaXNlZC4K KyAJICovCitAQCAtMzg5LDcgKzQyOSw2IEBAIGludCBFVlBfTURfQ1RYX2NsZWFudXAoRVZQX01E X0NUWCAqY3R4KQorIAkJT1BFTlNTTF9jbGVhbnNlKGN0eC0+bWRfZGF0YSxjdHgtPmRpZ2VzdC0+ Y3R4X3NpemUpOworIAkJT1BFTlNTTF9mcmVlKGN0eC0+bWRfZGF0YSk7CisgCQl9CistI2VuZGlm CisgCWlmIChjdHgtPnBjdHgpCisgCQlFVlBfUEtFWV9DVFhfZnJlZShjdHgtPnBjdHgpOworICNp Zm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKK0BAIC0zOTgsOSArNDM3LDYgQEAgaW50IEVWUF9NRF9D VFhfY2xlYW51cChFVlBfTURfQ1RYICpjdHgpCisgCQkgKiBmdW5jdGlvbmFsIHJlZmVyZW5jZSB3 ZSBoZWxkIGZvciB0aGlzIHJlYXNvbi4gKi8KKyAJCUVOR0lORV9maW5pc2goY3R4LT5lbmdpbmUp OworICNlbmRpZgorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JRklQU19tZF9jdHhfY2xlYW51cChj dHgpOworLSNlbmRpZgorIAltZW1zZXQoY3R4LCdcMCcsc2l6ZW9mICpjdHgpOworIAorIAlyZXR1 cm4gMTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9ldnAvZV9hZXMuYy5maXBzIG9w ZW5zc2wtMS4wLjFrL2NyeXB0by9ldnAvZV9hZXMuYworLS0tIG9wZW5zc2wtMS4wLjFrL2NyeXB0 by9ldnAvZV9hZXMuYy5maXBzCTIwMTUtMDEtMDkgMDk6NTE6NTEuMjUwOTE1NDg0ICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2V2cC9lX2Flcy5jCTIwMTUtMDEtMDkgMDk6NTE6NTEu NTQ2OTIyMTc4ICswMTAwCitAQCAtNTYsNyArNTYsNiBAQAorICNpbmNsdWRlIDxhc3NlcnQuaD4K KyAjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKyAjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKy0jaWZu ZGVmIE9QRU5TU0xfRklQUworICNpbmNsdWRlICJtb2Rlc19sY2wuaCIKKyAjaW5jbHVkZSA8b3Bl bnNzbC9yYW5kLmg+CisgCitAQCAtNzMwLDcgKzcyOSw3IEBAIHN0YXRpYyBpbnQgYWVzX2djbV9j dHJsKEVWUF9DSVBIRVJfQ1RYICoKKyAJCWlmIChhcmcgPD0gMCkKKyAJCQlyZXR1cm4gMDsKKyAj aWZkZWYgT1BFTlNTTF9GSVBTCistCQlpZiAoRklQU19tb2R1bGVfbW9kZSgpICYmICEoYy0+Zmxh Z3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKQorKwkJaWYgKEZJUFNfbW9kZSgpICYm ICEoYy0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKQorIAkJCQkJCSAmJiBh cmcgPCAxMikKKyAJCQlyZXR1cm4gMDsKKyAjZW5kaWYKK0BAIC0xMTg5LDcgKzExODgsNyBAQCBz dGF0aWMgaW50IGFlc194dHNfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYCisgCQlyZXR1cm4gMDsKKyAj aWZkZWYgT1BFTlNTTF9GSVBTCisgCS8qIFJlcXVpcmVtZW50IG9mIFNQODAwLTM4RSAqLworLQlp ZiAoRklQU19tb2R1bGVfbW9kZSgpICYmICEoY3R4LT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9O X0ZJUFNfQUxMT1cpICYmCisrCWlmIChGSVBTX21vZGUoKSAmJiAhKGN0eC0+ZmxhZ3MgJiBFVlBf Q0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKSAmJgorIAkJCShsZW4gPiAoMVVMPDwyMCkqMTYpKQor IAkJeworIAkJRVZQZXJyKEVWUF9GX0FFU19YVFNfQ0lQSEVSLCBFVlBfUl9UT09fTEFSR0UpOwor QEAgLTEzODYsNCArMTM4NSwzIEBAIEJMT0NLX0NJUEhFUl9jdXN0b20oTklEX2FlcywxOTIsMSwx MixjY20KKyBCTE9DS19DSVBIRVJfY3VzdG9tKE5JRF9hZXMsMjU2LDEsMTIsY2NtLENDTSxFVlBf Q0lQSF9GTEFHX0ZJUFN8Q1VTVE9NX0ZMQUdTKQorIAorICNlbmRpZgorLSNlbmRpZgorZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2V2cC9lX2RlczMuYy5maXBzIG9wZW5zc2wtMS4wLjFr L2NyeXB0by9ldnAvZV9kZXMzLmMKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZXZwL2VfZGVz My5jLmZpcHMJMjAxNS0wMS0wOCAxNTowMDo1Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4xay9jcnlwdG8vZXZwL2VfZGVzMy5jCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTQ3OTIyMjAx ICswMTAwCitAQCAtNjUsOCArNjUsNiBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgorICNp bmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKyAKKy0jaWZuZGVmIE9QRU5TU0xfRklQUworLQorIHN0 YXRpYyBpbnQgZGVzX2VkZV9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNp Z25lZCBjaGFyICprZXksCisgCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LGludCBlbmMp OworIAorQEAgLTIwNyw5ICsyMDUsOSBAQCBzdGF0aWMgaW50IGRlc19lZGUzX2NmYjhfY2lwaGVy KEVWUF9DSVBICisgICAgIH0KKyAKKyBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlLCBERVNfRURF X0tFWSwgTklEX2Rlc19lZGUsIDgsIDE2LCA4LCA2NCwKKy0JCQlFVlBfQ0lQSF9SQU5EX0tFWSwg ZGVzX2VkZV9pbml0X2tleSwgTlVMTCwgCistCQkJRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKy0J CQlFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAorKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhf RkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAorKwkJCWRlc19lZGVfaW5pdF9r ZXksCisrCQkJTlVMTCwgTlVMTCwgTlVMTCwKKyAJCQlkZXMzX2N0cmwpCisgCisgI2RlZmluZSBk ZXNfZWRlM19jZmI2NF9jaXBoZXIgZGVzX2VkZV9jZmI2NF9jaXBoZXIKK0BAIC0yMTgsMjEgKzIx NiwyMSBAQCBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlLCBERVNfRURFX0tFWSwKKyAjZGVmaW5l IGRlc19lZGUzX2VjYl9jaXBoZXIgZGVzX2VkZV9lY2JfY2lwaGVyCisgCisgQkxPQ0tfQ0lQSEVS X2RlZnMoZGVzX2VkZTMsIERFU19FREVfS0VZLCBOSURfZGVzX2VkZTMsIDgsIDI0LCA4LCA2NCwK Ky0JCQlFVlBfQ0lQSF9SQU5EX0tFWSwgZGVzX2VkZTNfaW5pdF9rZXksIE5VTEwsIAorLQkJCUVW UF9DSVBIRVJfc2V0X2FzbjFfaXYsCistCQkJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKKysJCUVW UF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRf QVNOMSwKKysJCQlkZXNfZWRlM19pbml0X2tleSwKKysJCQlOVUxMLCBOVUxMLCBOVUxMLAorIAkJ CWRlczNfY3RybCkKKyAKKyBCTE9DS19DSVBIRVJfZGVmX2NmYihkZXNfZWRlMyxERVNfRURFX0tF WSxOSURfZGVzX2VkZTMsMjQsOCwxLAorLQkJICAgICBFVlBfQ0lQSF9SQU5EX0tFWSwgZGVzX2Vk ZTNfaW5pdF9rZXksTlVMTCwKKy0JCSAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKy0JCSAg ICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKKysJCUVWUF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBI X0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKKysJCSAgICAgZGVzX2VkZTNf aW5pdF9rZXksCisrCQkgICAgIE5VTEwsIE5VTEwsIE5VTEwsCisgCQkgICAgIGRlczNfY3RybCkK KyAKKyBCTE9DS19DSVBIRVJfZGVmX2NmYihkZXNfZWRlMyxERVNfRURFX0tFWSxOSURfZGVzX2Vk ZTMsMjQsOCw4LAorLQkJICAgICBFVlBfQ0lQSF9SQU5EX0tFWSwgZGVzX2VkZTNfaW5pdF9rZXks TlVMTCwKKy0JCSAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKy0JCSAgICAgRVZQX0NJUEhF Ul9nZXRfYXNuMV9pdiwKKysJCUVWUF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQU3xF VlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKKysJCSAgICAgZGVzX2VkZTNfaW5pdF9rZXksCisr CQkgICAgIE5VTEwsIE5VTEwsIE5VTEwsCisgCQkgICAgIGRlczNfY3RybCkKKyAKKyBzdGF0aWMg aW50IGRlc19lZGVfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQg Y2hhciAqa2V5LAorQEAgLTMxNSw0ICszMTMsMyBAQCBjb25zdCBFVlBfQ0lQSEVSICpFVlBfZGVz X2VkZTModm9pZCkKKyAJcmV0dXJuICZkZXNfZWRlM19lY2I7CisgfQorICNlbmRpZgorLSNlbmRp ZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2V2cC9lX251bGwuYy5maXBzIG9wZW5z c2wtMS4wLjFrL2NyeXB0by9ldnAvZV9udWxsLmMKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8v ZXZwL2VfbnVsbC5jLmZpcHMJMjAxNS0wMS0wOCAxNTowMDozNi4wMDAwMDAwMDAgKzAxMDAKKysr KyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZXZwL2VfbnVsbC5jCTIwMTUtMDEtMDkgMDk6NTE6NTEu NTQ3OTIyMjAxICswMTAwCitAQCAtNjEsOCArNjEsNiBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2V2 cC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyAKKy0jaWZuZGVmIE9QRU5TU0xf RklQUworLQorIHN0YXRpYyBpbnQgbnVsbF9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBj b25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgCWNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LGludCBl bmMpOworIHN0YXRpYyBpbnQgbnVsbF9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWdu ZWQgY2hhciAqb3V0LAorQEAgLTcxLDcgKzY5LDcgQEAgc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIg bl9jaXBoZXI9CisgCXsKKyAJTklEX3VuZGVmLAorIAkxLDAsMCwKKy0JMCwKKysJRVZQX0NJUEhf RkxBR19GSVBTLAorIAludWxsX2luaXRfa2V5LAorIAludWxsX2NpcGhlciwKKyAJTlVMTCwKK0BA IC0xMDEsNCArOTksMyBAQCBzdGF0aWMgaW50IG51bGxfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpj CisgCQltZW1jcHkoKGNoYXIgKilvdXQsKGNvbnN0IGNoYXIgKilpbixpbmwpOworIAlyZXR1cm4g MTsKKyAJfQorLSNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2V2cC9ldnBf ZW5jLmMuZmlwcyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZXZwL2V2cF9lbmMuYworLS0tIG9wZW5z c2wtMS4wLjFrL2NyeXB0by9ldnAvZXZwX2VuYy5jLmZpcHMJMjAxNS0wMS0wOCAxNTowMDo1Ni4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZXZwL2V2cF9lbmMuYwky MDE1LTAxLTA5IDA5OjU3OjU3LjM5MzE5NjA4NyArMDEwMAorQEAgLTY5LDE3ICs2OSw1OCBAQAor ICNlbmRpZgorICNpbmNsdWRlICJldnBfbG9jbC5oIgorIAorLSNpZmRlZiBPUEVOU1NMX0ZJUFMK Ky0jZGVmaW5lIE1fZG9fY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKSBGSVBTX2NpcGhlcihjdHgs IG91dCwgaW4sIGlubCkKKy0jZWxzZQorICNkZWZpbmUgTV9kb19jaXBoZXIoY3R4LCBvdXQsIGlu LCBpbmwpIGN0eC0+Y2lwaGVyLT5kb19jaXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpCistI2VuZGlm CisgCisgCisgY29uc3QgY2hhciBFVlBfdmVyc2lvbltdPSJFVlAiIE9QRU5TU0xfVkVSU0lPTl9Q VEVYVDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrLyogVGhlIHB1cnBvc2Ugb2YgdGhl c2UgaXMgdG8gdHJhcCBwcm9ncmFtcyB0aGF0IGF0dGVtcHQgdG8gdXNlIG5vbiBGSVBTCisrICog YWxnb3JpdGhtcyBpbiBGSVBTIG1vZGUgYW5kIGlnbm9yZSB0aGUgZXJyb3JzLgorKyAqLworKwor K3N0YXRpYyBpbnQgYmFkX2luaXQoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQg Y2hhciAqa2V5LAorKwkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBpbnQgZW5jKQorKwl7 IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIGluaXQiKTsgcmV0dXJuIDA7fQorKworK3N0YXRp YyBpbnQgYmFkX2RvX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpv dXQsCisrCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQorKwl7 IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIHVwZGF0ZSIpOyByZXR1cm4gMDt9CisrCisrLyog TkI6IG5vIGNsZWFudXAgYmVjYXVzZSBpdCBpcyBhbGxvd2VkIGFmdGVyIGZhaWxlZCBpbml0ICov CisrCisrc3RhdGljIGludCBiYWRfc2V0X2FzbjEoRVZQX0NJUEhFUl9DVFggKmN0eCwgQVNOMV9U WVBFICp0eXApCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgc2V0X2FzbjEiKTsgcmV0 dXJuIDA7fQorK3N0YXRpYyBpbnQgYmFkX2dldF9hc24xKEVWUF9DSVBIRVJfQ1RYICpjdHgsIEFT TjFfVFlQRSAqdHlwKQorKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIGdldF9hc24xIik7 IHJldHVybiAwO30KKytzdGF0aWMgaW50IGJhZF9jdHJsKEVWUF9DSVBIRVJfQ1RYICpjdHgsIGlu dCB0eXBlLCBpbnQgYXJnLCB2b2lkICpwdHIpCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBo ZXIgY3RybCIpOyByZXR1cm4gMDt9CisrCisrc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgYmFkX2Np cGhlciA9CisrCXsKKysJMCwKKysJMCwKKysJMCwKKysJMCwKKysJMCwKKysJYmFkX2luaXQsCisr CWJhZF9kb19jaXBoZXIsCisrCU5VTEwsCisrCTAsCisrCWJhZF9zZXRfYXNuMSwKKysJYmFkX2dl dF9hc24xLAorKwliYWRfY3RybCwKKysJTlVMTAorKwl9OworKworKyNlbmRpZgorKworIHZvaWQg RVZQX0NJUEhFUl9DVFhfaW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4KQorIAl7CisrI2lmZGVmIE9Q RU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCW1lbXNldChj dHgsMCxzaXplb2YoRVZQX0NJUEhFUl9DVFgpKTsKKyAJLyogY3R4LT5jaXBoZXI9TlVMTDsgKi8K KyAJfQorQEAgLTExMSw2ICsxNTIsMTQgQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBI RVJfQ1RYICpjdAorIAkJCWVuYyA9IDE7CisgCQljdHgtPmVuY3J5cHQgPSBlbmM7CisgCQl9Cisr I2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJewor KwkJRklQU2VycihGSVBTX0ZfRVZQX0NJUEhFUklOSVRfRVgsRklQU19SX0ZJUFNfU0VMRlRFU1Rf RkFJTEVEKTsKKysJCWN0eC0+Y2lwaGVyID0gJmJhZF9jaXBoZXI7CisrCQlyZXR1cm4gMDsKKysJ CX0KKysjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisgCS8qIFdoZXRoZXIgaXQn cyBuaWNlIG9yIG5vdCwgIkluaXRzIiBjYW4gYmUgdXNlZCBvbiAiRmluYWwiJ2QgY29udGV4dHMK KyAJICogc28gdGhpcyBjb250ZXh0IG1heSBhbHJlYWR5IGhhdmUgYW4gRU5HSU5FISBUcnkgdG8g YXZvaWQgcmVsZWFzaW5nCitAQCAtMTY5LDEwICsyMTgsNiBAQCBpbnQgRVZQX0NpcGhlckluaXRf ZXgoRVZQX0NJUEhFUl9DVFggKmN0CisgCQkJY3R4LT5lbmdpbmUgPSBOVUxMOworICNlbmRpZgor IAorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JCWlmIChGSVBTX21vZGUoKSkKKy0JCQlyZXR1cm4g RklQU19jaXBoZXJpbml0KGN0eCwgY2lwaGVyLCBrZXksIGl2LCBlbmMpOworLSNlbmRpZgorIAkJ Y3R4LT5jaXBoZXI9Y2lwaGVyOworIAkJaWYgKGN0eC0+Y2lwaGVyLT5jdHhfc2l6ZSkKKyAJCQl7 CitAQCAtMjA2LDEwICsyNTEsNiBAQCBpbnQgRVZQX0NpcGhlckluaXRfZXgoRVZQX0NJUEhFUl9D VFggKmN0CisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorIHNraXBfdG9faW5pdDoKKyAjZW5k aWYKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWlmIChGSVBTX21vZGUoKSkKKy0JCXJldHVybiBG SVBTX2NpcGhlcmluaXQoY3R4LCBjaXBoZXIsIGtleSwgaXYsIGVuYyk7CistI2VuZGlmCisgCS8q IHdlIGFzc3VtZSBibG9jayBzaXplIGlzIGEgcG93ZXIgb2YgMiBpbiAqY3J5cHRVcGRhdGUgKi8K KyAJT1BFTlNTTF9hc3NlcnQoY3R4LT5jaXBoZXItPmJsb2NrX3NpemUgPT0gMQorIAkgICAgfHwg Y3R4LT5jaXBoZXItPmJsb2NrX3NpemUgPT0gOAorQEAgLTI0OSw2ICsyOTAsMjIgQEAgc2tpcF90 b19pbml0OgorIAkJfQorIAl9CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkvKiBBZnRlciAn a2V5JyBpcyBzZXQgbm8gZnVydGhlciBwYXJhbWV0ZXJzIGNoYW5nZXMgYXJlIHBlcm1pc3NpYmxl LgorKwkgKiBTbyBvbmx5IGNoZWNrIGZvciBub24gRklQUyBlbmFibGluZyBhdCB0aGlzIHBvaW50 LgorKwkgKi8KKysJaWYgKGtleSAmJiBGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmICghKGN0eC0+ Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfRklQUykKKysJCQkmICEoY3R4LT5mbGFncyAm IEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorKwkJCXsKKysJCQlFVlBlcnIoRVZQX0Zf RVZQX0NJUEhFUklOSVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKKysJCQljdHgtPmNp cGhlciA9ICZiYWRfY2lwaGVyOworKwkJCXJldHVybiAwOworKwkJCX0KKysJCX0KKysjZW5kaWYK KysKKyAJaWYoa2V5IHx8IChjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9BTFdBWVNfQ0FM TF9JTklUKSkgeworIAkJaWYoIWN0eC0+Y2lwaGVyLT5pbml0KGN0eCxrZXksaXYsZW5jKSkgcmV0 dXJuIDA7CisgCX0KK0BAIC01NzMsNyArNjMwLDYgQEAgdm9pZCBFVlBfQ0lQSEVSX0NUWF9mcmVl KEVWUF9DSVBIRVJfQ1RYCisgCisgaW50IEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoRVZQX0NJUEhF Ul9DVFggKmMpCisgCXsKKy0jaWZuZGVmIE9QRU5TU0xfRklQUworIAlpZiAoYy0+Y2lwaGVyICE9 IE5VTEwpCisgCQl7CisgCQlpZihjLT5jaXBoZXItPmNsZWFudXAgJiYgIWMtPmNpcGhlci0+Y2xl YW51cChjKSkKK0BAIC01ODQsMTYgKzY0MCwxMiBAQCBpbnQgRVZQX0NJUEhFUl9DVFhfY2xlYW51 cChFVlBfQ0lQSEVSX0NUCisgCQl9CisgCWlmIChjLT5jaXBoZXJfZGF0YSkKKyAJCU9QRU5TU0xf ZnJlZShjLT5jaXBoZXJfZGF0YSk7CistI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lO RQorIAlpZiAoYy0+ZW5naW5lKQorIAkJLyogVGhlIEVWUF9DSVBIRVIgd2UgdXNlZCBiZWxvbmdz IHRvIGFuIEVOR0lORSwgcmVsZWFzZSB0aGUKKyAJCSAqIGZ1bmN0aW9uYWwgcmVmZXJlbmNlIHdl IGhlbGQgZm9yIHRoaXMgcmVhc29uLiAqLworIAkJRU5HSU5FX2ZpbmlzaChjLT5lbmdpbmUpOwor ICNlbmRpZgorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JRklQU19jaXBoZXJfY3R4X2NsZWFudXAo Yyk7CistI2VuZGlmCisgCW1lbXNldChjLDAsc2l6ZW9mKEVWUF9DSVBIRVJfQ1RYKSk7CisgCXJl dHVybiAxOworIAl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZXZwL2V2cC5oLmZp cHMgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2V2cC9ldnAuaAorLS0tIG9wZW5zc2wtMS4wLjFrL2Ny eXB0by9ldnAvZXZwLmguZmlwcwkyMDE1LTAxLTA5IDA5OjUxOjUxLjE1MDkxMzIyMiArMDEwMAor KysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9ldnAvZXZwLmgJMjAxNS0wMS0wOSAwOTo1MTo1MS41 NDg5MjIyMjMgKzAxMDAKK0BAIC03NSw2ICs3NSwxMCBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2Jp by5oPgorICNlbmRpZgorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+CisrI2VuZGlmCisrCisgLyoKKyAjZGVmaW5lIEVWUF9SQzJfS0VZX1NJWkUJCTE2 CisgI2RlZmluZSBFVlBfUkM0X0tFWV9TSVpFCQkxNgorQEAgLTI4MiwxMCArMjg2LDYgQEAgc3Ry dWN0IGVudl9tZF9jdHhfc3QKKyAJCQkJCQkqIGNsZWFuZWQgKi8KKyAjZGVmaW5lIEVWUF9NRF9D VFhfRkxBR19SRVVTRQkJMHgwMDA0IC8qIERvbid0IGZyZWUgdXAgY3R4LT5tZF9kYXRhCisgCQkJ CQkJKiBpbiBFVlBfTURfQ1RYX2NsZWFudXAgKi8KKy0vKiBGSVBTIGFuZCBwYWQgb3B0aW9ucyBh cmUgaWdub3JlZCBpbiAxLjAuMCwgZGVmaW5pdGlvbnMgYXJlIGhlcmUKKy0gKiBzbyB3ZSBkb24n dCBhY2NpZGVudGFsbHkgcmV1c2UgdGhlIHZhbHVlcyBmb3Igb3RoZXIgcHVycG9zZXMuCistICov CistCisgI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJMHgwMDA4CS8qIEFs bG93IHVzZSBvZiBub24gRklQUyBkaWdlc3QKKyAJCQkJCQkgKiBpbiBGSVBTIG1vZGUgKi8KKyAK K0BAIC0yOTcsNiArMjk3LDEwIEBAIHN0cnVjdCBlbnZfbWRfY3R4X3N0CisgI2RlZmluZSBFVlBf TURfQ1RYX0ZMQUdfUEFEX1BLQ1MxCTB4MDAJLyogUEtDUyMxIHYxLjUgbW9kZSAqLworICNkZWZp bmUgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxCTB4MTAJLyogWDkuMzEgbW9kZSAqLworICNkZWZp bmUgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MJCTB4MjAJLyogUFNTIG1vZGUgKi8KKysjZGVmaW5l IE1fRVZQX01EX0NUWF9GTEFHX1BTU19TQUxUKGN0eCkgXAorKwkJKChjdHgtPmZsYWdzPj4xNikg JjB4RkZGRikgLyogc2VlZCBsZW5ndGggKi8KKysjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QU1Nf TURMRU4JMHhGRkZGCS8qIHNhbHQgbGVuIHNhbWUgYXMgZGlnZXN0ICovCisrI2RlZmluZSBFVlBf TURfQ1RYX0ZMQUdfUFNTX01SRUMJMHhGRkZFCS8qIHNhbHQgbWF4IG9yIGF1dG8gcmVjb3ZlcmVk ICovCisgCisgI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfTk9fSU5JVAkJMHgwMTAwIC8qIERvbid0 IGluaXRpYWxpemUgbWRfZGF0YSAqLworIAorQEAgLTM0OCwxNSArMzUyLDE1IEBAIHN0cnVjdCBl dnBfY2lwaGVyX3N0CisgLyogY2lwaGVyIGhhbmRsZXMgcmFuZG9tIGtleSBnZW5lcmF0aW9uICov CisgI2RlZmluZSAJRVZQX0NJUEhfUkFORF9LRVkJCTB4MjAwCisgLyogY2lwaGVyIGhhcyBpdHMg b3duIGFkZGl0aW9uYWwgY29weWluZyBsb2dpYyAqLworLSNkZWZpbmUgCUVWUF9DSVBIX0NVU1RP TV9DT1BZCQkweDQwMAorKyNkZWZpbmUgCUVWUF9DSVBIX0NVU1RPTV9DT1BZCQkweDQwMDAKKyAv KiBBbGxvdyB1c2UgZGVmYXVsdCBBU04xIGdldC9zZXQgaXYgKi8KKyAjZGVmaW5lCQlFVlBfQ0lQ SF9GTEFHX0RFRkFVTFRfQVNOMQkweDEwMDAKKyAvKiBCdWZmZXIgbGVuZ3RoIGluIGJpdHMgbm90 IGJ5dGVzOiBDRkIxIG1vZGUgb25seSAqLworICNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfTEVOR1RI X0JJVFMJMHgyMDAwCisgLyogTm90ZSBpZiBzdWl0YWJsZSBmb3IgdXNlIGluIEZJUFMgbW9kZSAq LworLSNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfRklQUwkJMHg0MDAwCisrI2RlZmluZQkJRVZQX0NJ UEhfRkxBR19GSVBTCQkweDQwMAorIC8qIEFsbG93IG5vbiBGSVBTIGNpcGhlciBpbiBGSVBTIG1v ZGUgKi8KKy0jZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XCTB4ODAwMAorKyNk ZWZpbmUJCUVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJMHg4MDAKKyAvKiBDaXBoZXIgaGFu ZGxlcyBhbnkgYW5kIGFsbCBwYWRkaW5nIGxvZ2ljIGFzIHdlbGwKKyAgKiBhcyBmaW5hbGlzYXRp b24uCisgICovCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZXZwL2V2cF9saWIuYy5m aXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9ldnAvZXZwX2xpYi5jCistLS0gb3BlbnNzbC0xLjAu MWsvY3J5cHRvL2V2cC9ldnBfbGliLmMuZmlwcwkyMDE1LTAxLTA4IDE1OjAwOjM2LjAwMDAwMDAw MCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9ldnAvZXZwX2xpYi5jCTIwMTUtMDEt MDkgMDk6NTE6NTEuNTQ4OTIyMjIzICswMTAwCitAQCAtMTkwLDYgKzE5MCw5IEBAIGludCBFVlBf Q0lQSEVSX0NUWF9ibG9ja19zaXplKGNvbnN0IEVWUF8KKyAKKyBpbnQgRVZQX0NpcGhlcihFVlBf Q0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmluLCB1bnNpZ25lZCBpbnQgaW5sKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBT X3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCXJldHVybiBjdHgtPmNpcGhlci0+ZG9fY2lw aGVyKGN0eCxvdXQsaW4saW5sKTsKKyAJfQorIAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvY3J5 cHRvL2V2cC9ldnBfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2V2cC9ldnBfbG9j bC5oCistLS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2V2cC9ldnBfbG9jbC5oLmZpcHMJMjAxNS0w MS0wOSAwOTo1MTo1MS4xNDc5MTMxNTQgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9jcnlwdG8v ZXZwL2V2cF9sb2NsLmgJMjAxNS0wMS0wOSAwOTo1MTo1MS41NDk5MjIyNDYgKzAxMDAKK0BAIC0y NTgsMTAgKzI1OCw5IEBAIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF8jI2NuYW1lIyNfZWNiKHZvaWQK KyAJQkxPQ0tfQ0lQSEVSX2Z1bmNfY2ZiKGNpcGhlciMjXyMja2V5c2l6ZSxjcHJlZml4LGNiaXRz LGtzdHJ1Y3Qsa3NjaGVkKSBcCisgCUJMT0NLX0NJUEhFUl9kZWZfY2ZiKGNpcGhlciMjXyMja2V5 c2l6ZSxrc3RydWN0LCBcCisgCQkJICAgICBOSURfIyNjaXBoZXIjI18jI2tleXNpemUsIGtleXNp emUvOCwgaXZfbGVuLCBjYml0cywgXAorLQkJCSAgICAgMCwgY2lwaGVyIyNfaW5pdF9rZXksIE5V TEwsIFwKKy0JCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsIFwKKy0JCQkgICAgIEVWUF9D SVBIRVJfZ2V0X2FzbjFfaXYsIFwKKy0JCQkgICAgIE5VTEwpCisrCQkJICAgICBFVlBfQ0lQSF9G TEFHX0RFRkFVTFRfQVNOMSwgXAorKwkJCSAgICAgY2lwaGVyIyNfaW5pdF9rZXksIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwpCisrCisgCisgc3RydWN0IGV2cF9wa2V5X2N0eF9zdAorIAl7CitAQCAt MzY3LDExICszNjYsNiBAQCBpbnQgUEtDUzVfdjJfUEJLREYyX2tleWl2Z2VuKEVWUF9DSVBIRVJf CisgI2RlZmluZSBNRDJfSW5pdAlwcml2YXRlX01EMl9Jbml0CisgI2RlZmluZSBNREMyX0luaXQJ cHJpdmF0ZV9NREMyX0luaXQKKyAjZGVmaW5lIFNIQV9Jbml0CXByaXZhdGVfU0hBX0luaXQKKy0j ZGVmaW5lIFNIQTFfSW5pdAlwcml2YXRlX1NIQTFfSW5pdAorLSNkZWZpbmUgU0hBMjI0X0luaXQJ cHJpdmF0ZV9TSEEyMjRfSW5pdAorLSNkZWZpbmUgU0hBMjU2X0luaXQJcHJpdmF0ZV9TSEEyNTZf SW5pdAorLSNkZWZpbmUgU0hBMzg0X0luaXQJcHJpdmF0ZV9TSEEzODRfSW5pdAorLSNkZWZpbmUg U0hBNTEyX0luaXQJcHJpdmF0ZV9TSEE1MTJfSW5pdAorIAorICNkZWZpbmUgQkZfc2V0X2tleQlw cml2YXRlX0JGX3NldF9rZXkKKyAjZGVmaW5lIENBU1Rfc2V0X2tleQlwcml2YXRlX0NBU1Rfc2V0 X2tleQorQEAgLTM3OSw3ICszNzMsNiBAQCBpbnQgUEtDUzVfdjJfUEJLREYyX2tleWl2Z2VuKEVW UF9DSVBIRVJfCisgI2RlZmluZSBTRUVEX3NldF9rZXkJcHJpdmF0ZV9TRUVEX3NldF9rZXkKKyAj ZGVmaW5lIFJDMl9zZXRfa2V5CXByaXZhdGVfUkMyX3NldF9rZXkKKyAjZGVmaW5lIFJDNF9zZXRf a2V5CXByaXZhdGVfUkM0X3NldF9rZXkKKy0jZGVmaW5lIERFU19zZXRfa2V5X3VuY2hlY2tlZAlw cml2YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tlZAorICNkZWZpbmUgQ2FtZWxsaWFfc2V0X2tleQlw cml2YXRlX0NhbWVsbGlhX3NldF9rZXkKKyAKKyAjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjFrL2NyeXB0by9ldnAvTWFrZWZpbGUuZmlwcyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZXZwL01h a2VmaWxlCistLS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2V2cC9NYWtlZmlsZS5maXBzCTIwMTUt MDEtMDggMTU6MDM6MzIuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWsvY3J5cHRv L2V2cC9NYWtlZmlsZQkyMDE1LTAxLTA5IDA5OjUxOjUxLjU0OTkyMjI0NiArMDEwMAorQEAgLTI4 LDcgKzI4LDcgQEAgTElCU1JDPSBlbmNvZGUuYyBkaWdlc3QuYyBldnBfZW5jLmMgZXZwXworIAli aW9fbWQuYyBiaW9fYjY0LmMgYmlvX2VuYy5jIGV2cF9lcnIuYyBlX251bGwuYyBcCisgCWNfYWxs LmMgY19hbGxjLmMgY19hbGxkLmMgZXZwX2xpYi5jIGJpb19vay5jIFwKKyAJZXZwX3BrZXkuYyBl dnBfcGJlLmMgcDVfY3JwdC5jIHA1X2NycHQyLmMgXAorLQllX29sZC5jIHBtZXRoX2xpYi5jIHBt ZXRoX2ZuLmMgcG1ldGhfZ24uYyBtX3NpZ3Zlci5jIGV2cF9maXBzLmMJXAorKwllX29sZC5jIHBt ZXRoX2xpYi5jIHBtZXRoX2ZuLmMgcG1ldGhfZ24uYyBtX3NpZ3Zlci5jIFwKKyAJZV9hZXNfY2Jj X2htYWNfc2hhMS5jIGVfcmM0X2htYWNfbWQ1LmMKKyAKKyBMSUJPQko9CWVuY29kZS5vIGRpZ2Vz dC5vIGV2cF9lbmMubyBldnBfa2V5Lm8gZXZwX2FjbmYubyBldnBfY25mLm8gXAorQEAgLTQxLDcg KzQxLDcgQEAgTElCT0JKPQllbmNvZGUubyBkaWdlc3QubyBldnBfZW5jLm8gZXZwXworIAliaW9f bWQubyBiaW9fYjY0Lm8gYmlvX2VuYy5vIGV2cF9lcnIubyBlX251bGwubyBcCisgCWNfYWxsLm8g Y19hbGxjLm8gY19hbGxkLm8gZXZwX2xpYi5vIGJpb19vay5vIFwKKyAJZXZwX3BrZXkubyBldnBf cGJlLm8gcDVfY3JwdC5vIHA1X2NycHQyLm8gXAorLQllX29sZC5vIHBtZXRoX2xpYi5vIHBtZXRo X2ZuLm8gcG1ldGhfZ24ubyBtX3NpZ3Zlci5vIGV2cF9maXBzLm8gXAorKwllX29sZC5vIHBtZXRo X2xpYi5vIHBtZXRoX2ZuLm8gcG1ldGhfZ24ubyBtX3NpZ3Zlci5vIFwKKyAJZV9hZXNfY2JjX2ht YWNfc2hhMS5vIGVfcmM0X2htYWNfbWQ1Lm8KKyAKKyBTUkM9ICQoTElCU1JDKQorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWsvY3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5 cHRvL2V2cC9tX2Rzcy5jCistLS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2V2cC9tX2Rzcy5jLmZp cHMJMjAxNS0wMS0wOCAxNTowMDozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4x ay9jcnlwdG8vZXZwL21fZHNzLmMJMjAxNS0wMS0wOSAwOTo1MTo1MS41NDk5MjIyNDYgKzAxMDAK K0BAIC02Niw3ICs2Niw2IEBACisgI2VuZGlmCisgCisgI2lmbmRlZiBPUEVOU1NMX05PX1NIQQor LSNpZm5kZWYgT1BFTlNTTF9GSVBTCisgCisgc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0 eCkKKyAJeyByZXR1cm4gU0hBMV9Jbml0KGN0eC0+bWRfZGF0YSk7IH0KK0BAIC04Miw3ICs4MSw3 IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgZHNhX21kPQorIAlOSURfZHNhV2l0aFNIQSwKKyAJTklE X2RzYVdpdGhTSEEsCisgCVNIQV9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX0RJ R0VTVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1R8RVZQX01EX0ZMQUdfRklQUywKKyAJaW5p dCwKKyAJdXBkYXRlLAorIAlmaW5hbCwKK0BAIC05OCw0ICs5NywzIEBAIGNvbnN0IEVWUF9NRCAq RVZQX2Rzcyh2b2lkKQorIAlyZXR1cm4oJmRzYV9tZCk7CisgCX0KKyAjZW5kaWYKKy0jZW5kaWYK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9ldnAvbV9kc3MxLmMuZmlwcyBvcGVuc3Ns LTEuMC4xay9jcnlwdG8vZXZwL21fZHNzMS5jCistLS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2V2 cC9tX2RzczEuYy5maXBzCTIwMTUtMDEtMDggMTU6MDA6MzYuMDAwMDAwMDAwICswMTAwCisrKysg b3BlbnNzbC0xLjAuMWsvY3J5cHRvL2V2cC9tX2RzczEuYwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU0 OTkyMjI0NiArMDEwMAorQEAgLTY4LDggKzY4LDYgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9kc2Eu aD4KKyAjZW5kaWYKKyAKKy0jaWZuZGVmIE9QRU5TU0xfRklQUyAKKy0KKyBzdGF0aWMgaW50IGlu aXQoRVZQX01EX0NUWCAqY3R4KQorIAl7IHJldHVybiBTSEExX0luaXQoY3R4LT5tZF9kYXRhKTsg fQorIAorQEAgLTg0LDcgKzgyLDcgQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBkc3MxX21kPQorIAlO SURfZHNhLAorIAlOSURfZHNhV2l0aFNIQTEsCisgCVNIQV9ESUdFU1RfTEVOR1RILAorLQlFVlBf TURfRkxBR19QS0VZX0RJR0VTVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1R8RVZQX01EX0ZM QUdfRklQUywKKyAJaW5pdCwKKyAJdXBkYXRlLAorIAlmaW5hbCwKK0BAIC0xMDAsNCArOTgsMyBA QCBjb25zdCBFVlBfTUQgKkVWUF9kc3MxKHZvaWQpCisgCXJldHVybigmZHNzMV9tZCk7CisgCX0K KyAjZW5kaWYKKy0jZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9ldnAvbV9t ZDIuYy5maXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9ldnAvbV9tZDIuYworLS0tIG9wZW5zc2wt MS4wLjFrL2NyeXB0by9ldnAvbV9tZDIuYy5maXBzCTIwMTQtMTAtMTUgMTU6NDk6MTUuMDAwMDAw MDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2V2cC9tX21kMi5jCTIwMTUtMDEt MDkgMDk6NTE6NTEuNTUwOTIyMjY4ICswMTAwCitAQCAtNjgsNiArNjgsNyBAQAorICNpZm5kZWYg T1BFTlNTTF9OT19SU0EKKyAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAjZW5kaWYKKysjaW5j bHVkZSAiZXZwX2xvY2wuaCIKKyAKKyBzdGF0aWMgaW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQor IAl7IHJldHVybiBNRDJfSW5pdChjdHgtPm1kX2RhdGEpOyB9CitkaWZmIC11cCBvcGVuc3NsLTEu MC4xay9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2V2cC9t X3NoYTEuYworLS0tIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9ldnAvbV9zaGExLmMuZmlwcwkyMDE1 LTAxLTA4IDE1OjAwOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0 by9ldnAvbV9zaGExLmMJMjAxNS0wMS0wOSAwOTo1MTo1MS41NTA5MjIyNjggKzAxMDAKK0BAIC01 OSw4ICs1OSw2IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgImNyeXB0bGliLmgi CisgCistI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKy0KKyAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBCisg CisgI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CitAQCAtODUsNyArODMsOCBAQCBzdGF0aWMgY29u c3QgRVZQX01EIHNoYTFfbWQ9CisgCU5JRF9zaGExLAorIAlOSURfc2hhMVdpdGhSU0FFbmNyeXB0 aW9uLAorIAlTSEFfRElHRVNUX0xFTkdUSCwKKy0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lH TkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9N RVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKKysJCUVWUF9NRF9G TEFHX0ZJUFMsCisgCWluaXQsCisgCXVwZGF0ZSwKKyAJZmluYWwsCitAQCAtMTIyLDcgKzEyMSw4 IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMjI0X21kPQorIAlOSURfc2hhMjI0LAorIAlOSURf c2hhMjI0V2l0aFJTQUVuY3J5cHRpb24sCisgCVNIQTIyNF9ESUdFU1RfTEVOR1RILAorLQlFVlBf TURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5U LAorKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxH SURfQUJTRU5UfAorKwkJRVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdDIyNCwKKyAJdXBkYXRlMjU2 LAorIAlmaW5hbDI1NiwKK0BAIC0xNDEsNyArMTQxLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBz aGEyNTZfbWQ9CisgCU5JRF9zaGEyNTYsCisgCU5JRF9zaGEyNTZXaXRoUlNBRW5jcnlwdGlvbiwK KyAJU0hBMjU2X0RJR0VTVF9MRU5HVEgsCistCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05B VFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCisrCUVWUF9NRF9GTEFHX1BLRVlfTUVU SE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8CisrCQlFVlBfTURfRkxB R19GSVBTLAorIAlpbml0MjU2LAorIAl1cGRhdGUyNTYsCisgCWZpbmFsMjU2LAorQEAgLTE3Miw3 ICsxNzMsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTM4NF9tZD0KKyAJTklEX3NoYTM4NCwK KyAJTklEX3NoYTM4NFdpdGhSU0FFbmNyeXB0aW9uLAorIAlTSEEzODRfRElHRVNUX0xFTkdUSCwK Ky0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lE X0FCU0VOVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFH X0RJR0FMR0lEX0FCU0VOVHwKKysJCUVWUF9NRF9GTEFHX0ZJUFMsCisgCWluaXQzODQsCisgCXVw ZGF0ZTUxMiwKKyAJZmluYWw1MTIsCitAQCAtMTkxLDcgKzE5Myw4IEBAIHN0YXRpYyBjb25zdCBF VlBfTUQgc2hhNTEyX21kPQorIAlOSURfc2hhNTEyLAorIAlOSURfc2hhNTEyV2l0aFJTQUVuY3J5 cHRpb24sCisgCVNIQTUxMl9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX01FVEhP RF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAorKwlFVlBfTURfRkxBR19Q S0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAorKwkJRVZQ X01EX0ZMQUdfRklQUywKKyAJaW5pdDUxMiwKKyAJdXBkYXRlNTEyLAorIAlmaW5hbDUxMiwKK0BA IC0yMDYsNCArMjA5LDMgQEAgY29uc3QgRVZQX01EICpFVlBfc2hhNTEyKHZvaWQpCisgCXsgcmV0 dXJuKCZzaGE1MTJfbWQpOyB9CisgI2VuZGlmCS8qIGlmbmRlZiBPUEVOU1NMX05PX1NIQTUxMiAq LworIAorLSNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2V2cC9wX3NpZ24u Yy5maXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9ldnAvcF9zaWduLmMKKy0tLSBvcGVuc3NsLTEu MC4xay9jcnlwdG8vZXZwL3Bfc2lnbi5jLmZpcHMJMjAxNS0wMS0wOCAxNTowMDozNi4wMDAwMDAw MDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZXZwL3Bfc2lnbi5jCTIwMTUtMDEt MDkgMDk6NTE6NTEuNTUwOTIyMjY4ICswMTAwCitAQCAtNjEsNiArNjEsNyBAQAorICNpbmNsdWRl IDxvcGVuc3NsL2V2cC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyAjaW5jbHVk ZSA8b3BlbnNzbC94NTA5Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisgCisgI2lmZGVm IHVuZGVmCisgdm9pZCBFVlBfU2lnbkluaXQoRVZQX01EX0NUWCAqY3R4LCBFVlBfTUQgKnR5cGUp CitAQCAtMTAzLDYgKzEwNCwyMiBAQCBpbnQgRVZQX1NpZ25GaW5hbChFVlBfTURfQ1RYICpjdHgs IHVuc2lnCisgCQkJZ290byBlcnI7CisgCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9zaWduYXR1cmVf bWQocGtjdHgsIGN0eC0+ZGlnZXN0KSA8PSAwKQorIAkJCWdvdG8gZXJyOworKwkJaWYgKGN0eC0+ ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpCisrCQkJaWYgKEVWUF9QS0VZX0NUWF9z ZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9YOTMxX1BBRERJTkcpIDw9IDApCisrCQkJCWdvdG8g ZXJyOworKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUykKKysJCQl7 CisrCQkJaW50IHNhbHRsZW47CisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmco cGtjdHgsIFJTQV9QS0NTMV9QU1NfUEFERElORykgPD0gMCkKKysJCQkJZ290byBlcnI7CisrCQkJ c2FsdGxlbiA9IE1fRVZQX01EX0NUWF9GTEFHX1BTU19TQUxUKGN0eCk7CisrCQkJaWYgKHNhbHRs ZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTikKKysJCQkJc2FsdGxlbiA9IC0xOworKwkJ CWVsc2UgaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDKQorKwkJCQlzYWx0 bGVuID0gLTI7CisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3Bzc19zYWx0bGVuKHBrY3R4 LCBzYWx0bGVuKSA8PSAwKQorKwkJCQlnb3RvIGVycjsKKysJCQl9CisgCQlpZiAoRVZQX1BLRVlf c2lnbihwa2N0eCwgc2lncmV0LCAmc2x0bXAsIG0sIG1fbGVuKSA8PSAwKQorIAkJCWdvdG8gZXJy OworIAkJKnNpZ2xlbiA9IHNsdG1wOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2V2 cC9wX3ZlcmlmeS5jLmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jCist LS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jLmZpcHMJMjAxNS0wMS0wOCAx NTowMDozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZXZwL3Bf dmVyaWZ5LmMJMjAxNS0wMS0wOSAwOTo1MTo1MS41NTA5MjIyNjggKzAxMDAKK0BAIC02MSw2ICs2 MSw3IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvb2Jq ZWN0cy5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9y c2EuaD4KKyAKKyBpbnQgRVZQX1ZlcmlmeUZpbmFsKEVWUF9NRF9DVFggKmN0eCwgY29uc3QgdW5z aWduZWQgY2hhciAqc2lnYnVmLAorIAkgICAgIHVuc2lnbmVkIGludCBzaWdsZW4sIEVWUF9QS0VZ ICpwa2V5KQorQEAgLTg4LDYgKzg5LDIyIEBAIGludCBFVlBfVmVyaWZ5RmluYWwoRVZQX01EX0NU WCAqY3R4LCBjb24KKyAJCQlnb3RvIGVycjsKKyAJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3NpZ25h dHVyZV9tZChwa2N0eCwgY3R4LT5kaWdlc3QpIDw9IDApCisgCQkJZ290byBlcnI7CisrCQlpZiAo Y3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSkKKysJCQlpZiAoRVZQX1BLRVlf Q1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1g5MzFfUEFERElORykgPD0gMCkKKysJCQkJ Z290byBlcnI7CisrCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTKQor KwkJCXsKKysJCQlpbnQgc2FsdGxlbjsKKysJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFk ZGluZyhwa2N0eCwgUlNBX1BLQ1MxX1BTU19QQURESU5HKSA8PSAwKQorKwkJCQlnb3RvIGVycjsK KysJCQlzYWx0bGVuID0gTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NBTFQoY3R4KTsKKysJCQlpZiAo c2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVOKQorKwkJCQlzYWx0bGVuID0gLTE7 CisrCQkJZWxzZSBpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01SRUMpCisrCQkJ CXNhbHRsZW4gPSAtMjsKKysJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcHNzX3NhbHRsZW4o cGtjdHgsIHNhbHRsZW4pIDw9IDApCisrCQkJCWdvdG8gZXJyOworKwkJCX0KKyAJCWkgPSBFVlBf UEtFWV92ZXJpZnkocGtjdHgsIHNpZ2J1Ziwgc2lnbGVuLCBtLCBtX2xlbik7CisgCQllcnI6Cisg CQlFVlBfUEtFWV9DVFhfZnJlZShwa2N0eCk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMuZmlwcyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfYWVzYXZzLmMKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfYWVzYXZzLmMuZmlwcwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU1MTkyMjI5MSArMDEwMAor KysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYwkyMDE1LTAx LTA5IDA5OjUxOjUxLjU1MTkyMjI5MSArMDEwMAorQEAgLTAsMCArMSw5MzkgQEAKKysvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAq IGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisr ICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4g VGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5v dCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNz bC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAi T3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAq ICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlz dHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dp bmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoK KysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBB UyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1Qg T1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisr ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCisrICoKKysgKi8KKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorKyAgTklTVCBBRVMgQWxnb3JpdGhtIFZhbGlkYXRpb24gU3VpdGUKKysgIFRl c3QgUHJvZ3JhbQorKworKyAgRG9uYXRlZCB0byBPcGVuU1NMIGJ5OgorKyAgVi1PTkUgQ29ycG9y YXRpb24KKysgIDIwMjUwIENlbnR1cnkgQmx2ZCwgU3VpdGUgMzAwCisrICBHZXJtYW50b3duLCBN RCAyMDg3NAorKyAgVS5TLkEuCisrICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGli Lmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRl IDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9hZXMu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgor KworKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlICJlX29zLmgiCisrCisrI2lm bmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQor K3sKKysgICAgcHJpbnRmKCJObyBGSVBTIEFFUyBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDAp OworK30KKysKKysjZWxzZQorKworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVk ZSAiZmlwc191dGwuaCIKKysKKysjZGVmaW5lIEFFU19CTE9DS19TSVpFIDE2CisrCisrI2RlZmlu ZSBWRVJCT1NFIDAKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKi8KKysKKytpbnQgQUVTVGVzdChFVlBfQ0lQSEVSX0NUWCAqY3R4LAorKwkgICAg Y2hhciAqYW1vZGUsIGludCBha2V5c3osIHVuc2lnbmVkIGNoYXIgKmFLZXksIAorKwkgICAgdW5z aWduZWQgY2hhciAqaVZlYywgCisrCSAgICBpbnQgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBl bmNyeXB0ICovCisrCSAgICB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsIHVuc2lnbmVkIGNoYXIg KmNpcGhlcnRleHQsIGludCBsZW4pCisrICAgIHsKKysgICAgY29uc3QgRVZQX0NJUEhFUiAqY2lw aGVyID0gTlVMTDsKKysKKysgICAgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJDQkMiKSA9PSAwKQor Kwl7CisrCXN3aXRjaCAoYWtleXN6KQorKwkJeworKwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBF VlBfYWVzXzEyOF9jYmMoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAxOTI6CisrCQljaXBoZXIg PSBFVlBfYWVzXzE5Ml9jYmMoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAyNTY6CisrCQljaXBo ZXIgPSBFVlBfYWVzXzI1Nl9jYmMoKTsKKysJCWJyZWFrOworKwkJfQorKworKwl9CisrICAgIGVs c2UgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJFQ0IiKSA9PSAwKQorKwl7CisrCXN3aXRjaCAoYWtl eXN6KQorKwkJeworKwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9lY2IoKTsK KysJCWJyZWFrOworKworKwkJY2FzZSAxOTI6CisrCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9lY2Io KTsKKysJCWJyZWFrOworKworKwkJY2FzZSAyNTY6CisrCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9l Y2IoKTsKKysJCWJyZWFrOworKwkJfQorKwl9CisrICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1v ZGUsICJDRkIxMjgiKSA9PSAwKQorKwl7CisrCXN3aXRjaCAoYWtleXN6KQorKwkJeworKwkJY2Fz ZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jZmIxMjgoKTsKKysJCWJyZWFrOworKwor KwkJY2FzZSAxOTI6CisrCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jZmIxMjgoKTsKKysJCWJyZWFr OworKworKwkJY2FzZSAyNTY6CisrCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jZmIxMjgoKTsKKysJ CWJyZWFrOworKwkJfQorKworKwl9CisrICAgIGVsc2UgaWYgKHN0cm5jYXNlY21wKGFtb2RlLCAi T0ZCIiwgMykgPT0gMCkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4 OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfb2ZiKCk7CisrCQlicmVhazsKKysKKysJCWNhc2Ug MTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfb2ZiKCk7CisrCQlicmVhazsKKysKKysJCWNh c2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfb2ZiKCk7CisrCQlicmVhazsKKysJCX0K KysJfQorKyAgICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikpCisrCXsKKysJc3dp dGNoIChha2V5c3opCisrCQl7CisrCQljYXNlIDEyODoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTI4 X2NmYjEoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAxOTI6CisrCQljaXBoZXIgPSBFVlBfYWVz XzE5Ml9jZmIxKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQ X2Flc18yNTZfY2ZiMSgpOworKwkJYnJlYWs7CisrCQl9CisrCX0KKysgICAgZWxzZSBpZighc3Ry Y2FzZWNtcChhbW9kZSwiQ0ZCOCIpKQorKwl7CisrCXN3aXRjaCAoYWtleXN6KQorKwkJeworKwkJ Y2FzZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jZmI4KCk7CisrCQlicmVhazsKKysK KysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2ZiOCgpOworKwkJYnJlYWs7 CisrCisrCQljYXNlIDI1NjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2NmYjgoKTsKKysJCWJy ZWFrOworKwkJfQorKwl9CisrICAgIGVsc2UKKysJeworKwlwcmludGYoIlVua25vd24gbW9kZTog JXNcbiIsIGFtb2RlKTsKKysJcmV0dXJuIDA7CisrCX0KKysgICAgaWYgKCFjaXBoZXIpCisrCXsK KysJcHJpbnRmKCJJbnZhbGlkIGtleSBzaXplOiAlZFxuIiwgYWtleXN6KTsKKysJcmV0dXJuIDA7 IAorKwl9CisrICAgIGlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwgYUtl eSwgaVZlYywgZGlyKSA8PSAwKQorKwlyZXR1cm4gMDsKKysgICAgaWYoIXN0cmNhc2VjbXAoYW1v ZGUsIkNGQjEiKSkKKysJTV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoY3R4LCBFVlBfQ0lQSF9G TEFHX0xFTkdUSF9CSVRTKTsKKysgICAgaWYgKGRpcikKKysJCUVWUF9DaXBoZXIoY3R4LCBjaXBo ZXJ0ZXh0LCBwbGFpbnRleHQsIGxlbik7CisrCWVsc2UKKysJCUVWUF9DaXBoZXIoY3R4LCBwbGFp bnRleHQsIGNpcGhlcnRleHQsIGxlbik7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrY2hhciAq dF90YWdbMl0gPSB7IlBMQUlOVEVYVCIsICJDSVBIRVJURVhUIn07CisrY2hhciAqdF9tb2RlWzZd ID0geyJDQkMiLCJFQ0IiLCJPRkIiLCJDRkIxIiwiQ0ZCOCIsIkNGQjEyOCJ9OworK2VudW0gTW9k ZSB7Q0JDLCBFQ0IsIE9GQiwgQ0ZCMSwgQ0ZCOCwgQ0ZCMTI4fTsKKytlbnVtIFhDcnlwdCB7WERF Q1JZUFQsIFhFTkNSWVBUfTsKKysKKysvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8K KysvKiAgTW9udGUgQ2FybG8gVGVzdHMgICAgICAgICAgKi8KKysvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKi8KKysKKysvKiNkZWZpbmUgZ2IoYSxiKSAoKChhKVsoYikvOF0gPj4gKChi KSU4KSkmMSkqLworKy8qI2RlZmluZSBzYihhLGIsdikgKChhKVsoYikvOF09KChhKVsoYikvOF0m figxIDw8ICgoYiklOCkpKXwoISEodikgPDwgKChiKSU4KSkpKi8KKysKKysjZGVmaW5lIGdiKGEs YikgKCgoYSlbKGIpLzhdID4+ICg3LShiKSU4KSkmMSkKKysjZGVmaW5lIHNiKGEsYix2KSAoKGEp WyhiKS84XT0oKGEpWyhiKS84XSZ+KDEgPDwgKDctKGIpJTgpKSl8KCEhKHYpIDw8ICg3LShiKSU4 KSkpCisrCisraW50IGRvX21jdChjaGFyICphbW9kZSwgCisrCSAgIGludCBha2V5c3osIHVuc2ln bmVkIGNoYXIgKmFLZXksdW5zaWduZWQgY2hhciAqaVZlYywKKysJICAgaW50IGRpciwgdW5zaWdu ZWQgY2hhciAqdGV4dCwgaW50IGxlbiwKKysJICAgRklMRSAqcmZwKQorKyAgICB7CisrICAgIGlu dCByZXQgPSAwOworKyAgICB1bnNpZ25lZCBjaGFyIGtleVsxMDFdWzMyXTsKKysgICAgdW5zaWdu ZWQgY2hhciBpdlsxMDFdW0FFU19CTE9DS19TSVpFXTsKKysgICAgdW5zaWduZWQgY2hhciBwdGV4 dFsxMDAxXVszMl07CisrICAgIHVuc2lnbmVkIGNoYXIgY3RleHRbMTAwMV1bMzJdOworKyAgICB1 bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbNjQrNF07CisrICAgIGludCBpLCBqLCBuLCBuMSwgbjI7 CisrICAgIGludCBpbW9kZSA9IDAsIG5rZXlzeiA9IGFrZXlzei84OworKyAgICBFVlBfQ0lQSEVS X0NUWCBjdHg7CisrICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCisrICAgIGlmIChs ZW4gPiAzMikKKysJeworKwlwcmludGYoIlxuPj4+PiBMZW5ndGggZXhjZWVkcyAzMiBmb3IgJXMg JWQgPDw8PFxuXG4iLCAKKysJICAgICAgIGFtb2RlLCBha2V5c3opOworKwlyZXR1cm4gLTE7Cisr CX0KKysgICAgZm9yIChpbW9kZSA9IDA7IGltb2RlIDwgNjsgKytpbW9kZSkKKysJaWYgKHN0cmNt cChhbW9kZSwgdF9tb2RlW2ltb2RlXSkgPT0gMCkKKysJICAgIGJyZWFrOworKyAgICBpZiAoaW1v ZGUgPT0gNikKKysJeyAKKysJcHJpbnRmKCJVbnJlY29nbml6ZWQgbW9kZTogJXNcbiIsIGFtb2Rl KTsKKysJcmV0dXJuIC0xOworKwl9CisrCisrICAgIG1lbWNweShrZXlbMF0sIGFLZXksIG5rZXlz eik7CisrICAgIGlmIChpVmVjKQorKwltZW1jcHkoaXZbMF0sIGlWZWMsIEFFU19CTE9DS19TSVpF KTsKKysgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJbWVtY3B5KHB0ZXh0WzBdLCB0ZXh0LCBs ZW4pOworKyAgICBlbHNlCisrCW1lbWNweShjdGV4dFswXSwgdGV4dCwgbGVuKTsKKysgICAgZm9y IChpID0gMDsgaSA8IDEwMDsgKytpKQorKwl7CisrCS8qIHByaW50ZigiSXRlcmF0aW9uICVkXG4i LCBpKTsgKi8KKysJaWYgKGkgPiAwKQorKwkgICAgeworKwkgICAgZnByaW50ZihyZnAsIkNPVU5U ID0gJWRcbiIsaSk7CisrCSAgICBPdXRwdXRWYWx1ZSgiS0VZIixrZXlbaV0sbmtleXN6LHJmcCww KTsKKysJICAgIGlmIChpbW9kZSAhPSBFQ0IpICAvKiBFQ0IgKi8KKysJCU91dHB1dFZhbHVlKCJJ ViIsaXZbaV0sQUVTX0JMT0NLX1NJWkUscmZwLDApOworKwkgICAgLyogT3V0cHV0IENpcGhlcnRl eHQgfCBQbGFpbnRleHQgKi8KKysJICAgIE91dHB1dFZhbHVlKHRfdGFnW2Rpcl4xXSxkaXIgPyBw dGV4dFswXSA6IGN0ZXh0WzBdLGxlbixyZnAsCisrCQkJaW1vZGUgPT0gQ0ZCMSk7CisrCSAgICB9 CisrCWZvciAoaiA9IDA7IGogPCAxMDAwOyArK2opCisrCSAgICB7CisrCSAgICBzd2l0Y2ggKGlt b2RlKQorKwkJeworKwkgICAgY2FzZSBFQ0I6CisrCQlpZiAoaiA9PSAwKQorKwkJICAgIHsgLyog c2V0IHVwIGVuY3J5cHRpb24gKi8KKysJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBh a2V5c3osIGtleVtpXSwgTlVMTCwgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBl bmNyeXB0ICovCisrCQkJCSAgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIGlmIChk aXIgPT0gWEVOQ1JZUFQpCisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2pdLCBsZW4pOwor KwkJICAgIGVsc2UKKysJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbal0sIGxlbik7CisrCQkg ICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQorKwkJ CXsKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKKysJCQlt ZW1jcHkocHRleHRbaisxXSwgY3RleHRbal0sIGxlbik7CisrCQkJfQorKwkJICAgIGVsc2UKKysJ CQl7CisrCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7CisrCQkJ bWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2pdLCBsZW4pOworKwkJCX0KKysJCSAgICB9CisrCQli cmVhazsKKysKKysJICAgIGNhc2UgQ0JDOgorKwkgICAgY2FzZSBPRkI6ICAKKysJICAgIGNhc2Ug Q0ZCMTI4OgorKwkJaWYgKGogPT0gMCkKKysJCSAgICB7CisrCQkgICAgcmV0ID0gQUVTVGVzdCgm Y3R4LCBhbW9kZSwgYWtleXN6LCBrZXlbaV0sIGl2W2ldLCAKKysJCQkJICBkaXIsICAvKiAwID0g ZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJCQkJICBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7 CisrCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJCQltZW1jcHkocHRleHRbaisxXSwgaXZb aV0sIGxlbik7CisrCQkgICAgZWxzZQorKwkJCW1lbWNweShjdGV4dFtqKzFdLCBpdltpXSwgbGVu KTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZ UFQpCisrCQkJeworKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4p OworKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqLTFdLCBsZW4pOworKwkJCX0KKysJCSAg ICBlbHNlCisrCQkJeworKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBs ZW4pOworKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtqLTFdLCBsZW4pOworKwkJCX0KKysJ CSAgICB9CisrCQlicmVhazsKKysKKysJICAgIGNhc2UgQ0ZCODoKKysJCWlmIChqID09IDApCisr CQkgICAgeworKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwga2V5W2ld LCBpdltpXSwgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisr CQkJCSAgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAg ICB7CisrCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0 ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKKysJCSAgICBlbHNlCisrCQkJRVZQX0NpcGhlcigmY3R4 LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7CisrCQkgICAgfQorKwkJaWYgKGRpciA9PSBYRU5D UllQVCkKKysJCSAgICB7CisrCQkgICAgaWYgKGogPCAxNikKKysJCQltZW1jcHkocHRleHRbaisx XSwgJml2W2ldW2pdLCBsZW4pOworKwkJICAgIGVsc2UKKysJCQltZW1jcHkocHRleHRbaisxXSwg Y3RleHRbai0xNl0sIGxlbik7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBp ZiAoaiA8IDE2KQorKwkJCW1lbWNweShjdGV4dFtqKzFdLCAmaXZbaV1bal0sIGxlbik7CisrCQkg ICAgZWxzZQorKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtqLTE2XSwgbGVuKTsKKysJCSAg ICB9CisrCQlicmVhazsKKysKKysJICAgIGNhc2UgQ0ZCMToKKysJCWlmKGogPT0gMCkKKysJCSAg ICB7CisrI2lmIDAKKysJCSAgICAvKiBjb21wZW5zYXRlIGZvciB3cm9uZyBlbmRpYW5uZXNzIG9m IGlucHV0IGZpbGUgKi8KKysJCSAgICBpZihpID09IDApCisrCQkJcHRleHRbMF1bMF08PD03Owor KyNlbmRpZgorKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCxhbW9kZSxha2V5c3osa2V5W2ldLGl2 W2ldLGRpciwKKysJCQkJcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIH0KKysJCWVs c2UKKysJCSAgICB7CisrCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJCQlFVlBfQ2lwaGVy KCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKKysJCSAgICBlbHNlCisrCQkJRVZQX0Np cGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7CisrCisrCQkgICAgfQorKwkJaWYo ZGlyID09IFhFTkNSWVBUKQorKwkJICAgIHsKKysJCSAgICBpZihqIDwgMTI4KQorKwkJCXNiKHB0 ZXh0W2orMV0sMCxnYihpdltpXSxqKSk7CisrCQkgICAgZWxzZQorKwkJCXNiKHB0ZXh0W2orMV0s MCxnYihjdGV4dFtqLTEyOF0sMCkpOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkg ICAgaWYoaiA8IDEyOCkKKysJCQlzYihjdGV4dFtqKzFdLDAsZ2IoaXZbaV0saikpOworKwkJICAg IGVsc2UKKysJCQlzYihjdGV4dFtqKzFdLDAsZ2IocHRleHRbai0xMjhdLDApKTsKKysJCSAgICB9 CisrCQlicmVhazsKKysJCX0KKysJICAgIH0KKysJLS1qOyAvKiByZXNldCB0byBsYXN0IG9mIHJh bmdlICovCisrCS8qIE91dHB1dCBDaXBoZXJ0ZXh0IHwgUGxhaW50ZXh0ICovCisrCU91dHB1dFZh bHVlKHRfdGFnW2Rpcl0sZGlyID8gY3RleHRbal0gOiBwdGV4dFtqXSxsZW4scmZwLAorKwkJICAg IGltb2RlID09IENGQjEpOworKwlmcHJpbnRmKHJmcCwgIlxuIik7ICAvKiBhZGQgc2VwYXJhdG9y ICovCisrCisrCS8qIENvbXB1dGUgbmV4dCBLRVkgKi8KKysJaWYgKGRpciA9PSBYRU5DUllQVCkK KysJICAgIHsKKysJICAgIGlmIChpbW9kZSA9PSBDRkI4KQorKwkJeyAvKiBjdCA9IENUW2otMTVd IHx8IENUW2otMTRdIHx8IC4uLiB8fCBDVFtqXSAqLworKwkJZm9yIChuMSA9IDAsIG4yID0gbmtl eXN6LTE7IG4xIDwgbmtleXN6OyArK24xLCAtLW4yKQorKwkJICAgIGNpcGhlcnRleHRbbjFdID0g Y3RleHRbai1uMl1bMF07CisrCQl9CisrCSAgICBlbHNlIGlmKGltb2RlID09IENGQjEpCisrCQl7 CisrCQlmb3IobjE9MCxuMj1ha2V5c3otMSA7IG4xIDwgYWtleXN6IDsgKytuMSwtLW4yKQorKwkJ ICAgIHNiKGNpcGhlcnRleHQsbjEsZ2IoY3RleHRbai1uMl0sMCkpOworKwkJfQorKwkgICAgZWxz ZQorKwkJc3dpdGNoIChha2V5c3opCisrCQkgICAgeworKwkJY2FzZSAxMjg6CisrCQkgICAgbWVt Y3B5KGNpcGhlcnRleHQsIGN0ZXh0W2pdLCAxNik7CisrCQkgICAgYnJlYWs7CisrCQljYXNlIDE5 MjoKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3RleHRbai0xXSs4LCA4KTsKKysJCSAgICBt ZW1jcHkoY2lwaGVydGV4dCs4LCBjdGV4dFtqXSwgMTYpOworKwkJICAgIGJyZWFrOworKwkJY2Fz ZSAyNTY6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIGN0ZXh0W2otMV0sIDE2KTsKKysJCSAg ICBtZW1jcHkoY2lwaGVydGV4dCsxNiwgY3RleHRbal0sIDE2KTsKKysJCSAgICBicmVhazsKKysJ CSAgICB9CisrCSAgICB9CisrCWVsc2UKKysJICAgIHsKKysJICAgIGlmIChpbW9kZSA9PSBDRkI4 KQorKwkJeyAvKiBjdCA9IENUW2otMTVdIHx8IENUW2otMTRdIHx8IC4uLiB8fCBDVFtqXSAqLwor KwkJZm9yIChuMSA9IDAsIG4yID0gbmtleXN6LTE7IG4xIDwgbmtleXN6OyArK24xLCAtLW4yKQor KwkJICAgIGNpcGhlcnRleHRbbjFdID0gcHRleHRbai1uMl1bMF07CisrCQl9CisrCSAgICBlbHNl IGlmKGltb2RlID09IENGQjEpCisrCQl7CisrCQlmb3IobjE9MCxuMj1ha2V5c3otMSA7IG4xIDwg YWtleXN6IDsgKytuMSwtLW4yKQorKwkJICAgIHNiKGNpcGhlcnRleHQsbjEsZ2IocHRleHRbai1u Ml0sMCkpOworKwkJfQorKwkgICAgZWxzZQorKwkJc3dpdGNoIChha2V5c3opCisrCQkgICAgewor KwkJY2FzZSAxMjg6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIHB0ZXh0W2pdLCAxNik7Cisr CQkgICAgYnJlYWs7CisrCQljYXNlIDE5MjoKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgcHRl eHRbai0xXSs4LCA4KTsKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCs4LCBwdGV4dFtqXSwgMTYp OworKwkJICAgIGJyZWFrOworKwkJY2FzZSAyNTY6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQs IHB0ZXh0W2otMV0sIDE2KTsKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCsxNiwgcHRleHRbal0s IDE2KTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCSAgICB9CisrCS8qIENvbXB1dGUgbmV4 dCBrZXk6IEtleVtpKzFdID0gS2V5W2ldIHhvciBjdCAqLworKwlmb3IgKG4gPSAwOyBuIDwgbmtl eXN6OyArK24pCisrCSAgICBrZXlbaSsxXVtuXSA9IGtleVtpXVtuXSBeIGNpcGhlcnRleHRbbl07 CisrCQorKwkvKiBDb21wdXRlIG5leHQgSVYgYW5kIHRleHQgKi8KKysJaWYgKGRpciA9PSBYRU5D UllQVCkKKysJICAgIHsKKysJICAgIHN3aXRjaCAoaW1vZGUpCisrCQl7CisrCSAgICBjYXNlIEVD QjoKKysJCW1lbWNweShwdGV4dFswXSwgY3RleHRbal0sIEFFU19CTE9DS19TSVpFKTsKKysJCWJy ZWFrOworKwkgICAgY2FzZSBDQkM6CisrCSAgICBjYXNlIE9GQjoKKysJICAgIGNhc2UgQ0ZCMTI4 OgorKwkJbWVtY3B5KGl2W2krMV0sIGN0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7CisrCQltZW1j cHkocHRleHRbMF0sIGN0ZXh0W2otMV0sIEFFU19CTE9DS19TSVpFKTsKKysJCWJyZWFrOworKwkg ICAgY2FzZSBDRkI4OgorKwkJLyogSVZbaSsxXSA9IGN0ICovCisrCQlmb3IgKG4xID0gMCwgbjIg PSAxNTsgbjEgPCAxNjsgKytuMSwgLS1uMikKKysJCSAgICBpdltpKzFdW24xXSA9IGN0ZXh0W2ot bjJdWzBdOworKwkJcHRleHRbMF1bMF0gPSBjdGV4dFtqLTE2XVswXTsKKysJCWJyZWFrOworKwkg ICAgY2FzZSBDRkIxOgorKwkJZm9yKG4xPTAsbjI9MTI3IDsgbjEgPCAxMjggOyArK24xLC0tbjIp CisrCQkgICAgc2IoaXZbaSsxXSxuMSxnYihjdGV4dFtqLW4yXSwwKSk7CisrCQlwdGV4dFswXVsw XT1jdGV4dFtqLTEyOF1bMF0mMHg4MDsKKysJCWJyZWFrOworKwkJfQorKwkgICAgfQorKwllbHNl CisrCSAgICB7CisrCSAgICBzd2l0Y2ggKGltb2RlKQorKwkJeworKwkgICAgY2FzZSBFQ0I6Cisr CQltZW1jcHkoY3RleHRbMF0sIHB0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7CisrCQlicmVhazsK KysJICAgIGNhc2UgQ0JDOgorKwkgICAgY2FzZSBPRkI6CisrCSAgICBjYXNlIENGQjEyODoKKysJ CW1lbWNweShpdltpKzFdLCBwdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOworKwkJbWVtY3B5KGN0 ZXh0WzBdLCBwdGV4dFtqLTFdLCBBRVNfQkxPQ0tfU0laRSk7CisrCQlicmVhazsKKysJICAgIGNh c2UgQ0ZCODoKKysJCWZvciAobjEgPSAwLCBuMiA9IDE1OyBuMSA8IDE2OyArK24xLCAtLW4yKQor KwkJICAgIGl2W2krMV1bbjFdID0gcHRleHRbai1uMl1bMF07CisrCQljdGV4dFswXVswXSA9IHB0 ZXh0W2otMTZdWzBdOworKwkJYnJlYWs7CisrCSAgICBjYXNlIENGQjE6CisrCQlmb3IobjE9MCxu Mj0xMjcgOyBuMSA8IDEyOCA7ICsrbjEsLS1uMikKKysJCSAgICBzYihpdltpKzFdLG4xLGdiKHB0 ZXh0W2otbjJdLDApKTsKKysJCWN0ZXh0WzBdWzBdPXB0ZXh0W2otMTI4XVswXSYweDgwOworKwkJ YnJlYWs7CisrCQl9CisrCSAgICB9CisrCX0KKysgICAgCisrICAgIHJldHVybiByZXQ7CisrICAg IH0KKysKKysvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PSovCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrICAjIENvbmZpZyBpbmZvIGZv ciB2LW9uZQorKyAgIyBBRVNWUyBNTVQgdGVzdCBkYXRhIGZvciBFQ0IKKysgICMgU3RhdGUgOiBF bmNyeXB0IGFuZCBEZWNyeXB0CisrICAjIEtleSBMZW5ndGggOiAyNTYKKysgICMgRnJpIEF1ZyAz MCAwNDowNzoyMiBQTQorKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisraW50 IHByb2NfZmlsZShjaGFyICpycWZpbGUsIGNoYXIgKnJzcGZpbGUpCisrICAgIHsKKysgICAgY2hh ciBhZm5bMjU2XSwgcmZuWzI1Nl07CisrICAgIEZJTEUgKmFmcCA9IE5VTEwsICpyZnAgPSBOVUxM OworKyAgICBjaGFyIGlidWZbMjA0OF07CisrICAgIGNoYXIgdGJ1ZlsyMDQ4XTsKKysgICAgaW50 IGlsZW4sIGxlbiwgcmV0ID0gMDsKKysgICAgY2hhciBhbGdvWzhdID0gIiI7CisrICAgIGNoYXIg YW1vZGVbOF0gPSAiIjsKKysgICAgY2hhciBhdGVzdFs4XSA9ICIiOworKyAgICBpbnQgYWtleXN6 ID0gMDsKKysgICAgdW5zaWduZWQgY2hhciBpVmVjWzIwXSwgYUtleVs0MF07CisrICAgIGludCBk aXIgPSAtMSwgZXJyID0gMCwgc3RlcCA9IDA7CisrICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0 WzIwNDhdOworKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbMjA0OF07CisrICAgIGNoYXIg KnJwOworKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7CisrICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQo JmN0eCk7CisrCisrICAgIGlmICghcnFmaWxlIHx8ICEoKnJxZmlsZSkpCisrCXsKKysJcHJpbnRm KCJObyByZXEgZmlsZVxuIik7CisrCXJldHVybiAtMTsKKysJfQorKyAgICBzdHJjcHkoYWZuLCBy cWZpbGUpOworKworKyAgICBpZiAoKGFmcCA9IGZvcGVuKGFmbiwgInIiKSkgPT0gTlVMTCkKKysJ eworKwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCisrCSAgICAgICBhZm4s IHN0cmVycm9yKGVycm5vKSk7CisrCXJldHVybiAtMTsKKysJfQorKyAgICBpZiAoIXJzcGZpbGUp CisrCXsKKysJc3RyY3B5KHJmbixhZm4pOworKwlycD1zdHJzdHIocmZuLCJyZXEvIik7CisrI2lm ZGVmIE9QRU5TU0xfU1lTX1dJTjMyCisrCWlmICghcnApCisrCSAgICBycD1zdHJzdHIocmZuLCJy ZXFcXCIpOworKyNlbmRpZgorKwlhc3NlcnQocnApOworKwltZW1jcHkocnAsInJzcCIsMyk7Cisr CXJwID0gc3Ryc3RyKHJmbiwgIi5yZXEiKTsKKysJbWVtY3B5KHJwLCAiLnJzcCIsIDQpOworKwly c3BmaWxlID0gcmZuOworKwl9CisrICAgIGlmICgocmZwID0gZm9wZW4ocnNwZmlsZSwgInciKSkg PT0gTlVMTCkKKysJeworKwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCisr CSAgICAgICByZm4sIHN0cmVycm9yKGVycm5vKSk7CisrCWZjbG9zZShhZnApOworKwlhZnAgPSBO VUxMOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgd2hpbGUgKCFlcnIgJiYgKGZnZXRzKGlidWYs IHNpemVvZihpYnVmKSwgYWZwKSkgIT0gTlVMTCkKKysJeworKwl0aWR5X2xpbmUodGJ1ZiwgaWJ1 Zik7CisrCWlsZW4gPSBzdHJsZW4oaWJ1Zik7CisrCS8qICAgICAgcHJpbnRmKCJzdGVwPSVkIGli dWY9JXMiLHN0ZXAsaWJ1Zik7ICovCisrCXN3aXRjaCAoc3RlcCkKKysJICAgIHsKKysJY2FzZSAw OiAgLyogcmVhZCBwcmVhbWJsZSAqLworKwkgICAgaWYgKGlidWZbMF0gPT0gJ1xuJykKKysJCXsg LyogZW5kIG9mIHByZWFtYmxlICovCisrCQlpZiAoKCphbGdvID09ICdcMCcpIHx8CisrCQkgICAg KCphbW9kZSA9PSAnXDAnKSB8fAorKwkJICAgIChha2V5c3ogPT0gMCkpCisrCQkgICAgeworKwkJ ICAgIHByaW50ZigiTWlzc2luZyBBbGdvcml0aG0sIE1vZGUgb3IgS2V5U2l6ZSAoJXMvJXMvJWQp XG4iLAorKwkJCSAgIGFsZ28sYW1vZGUsYWtleXN6KTsKKysJCSAgICBlcnIgPSAxOworKwkJICAg IH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCSAgICAr KyBzdGVwOworKwkJICAgIH0KKysJCX0KKysJICAgIGVsc2UgaWYgKGlidWZbMF0gIT0gJyMnKQor KwkJeworKwkJcHJpbnRmKCJJbnZhbGlkIHByZWFtYmxlIGl0ZW06ICVzXG4iLCBpYnVmKTsKKysJ CWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7IC8qIHByb2Nlc3MgcHJlYW1ibGUgKi8K KysJCWNoYXIgKnhwLCAqcHAgPSBpYnVmKzI7CisrCQlpbnQgbjsKKysJCWlmIChha2V5c3opCisr CQkgICAgeyAvKiBpbnNlcnQgY3VycmVudCB0aW1lICYgZGF0ZSAqLworKwkJICAgIHRpbWVfdCBy dGltID0gdGltZSgwKTsKKysJCSAgICBmcHJpbnRmKHJmcCwgIiMgJXMiLCBjdGltZSgmcnRpbSkp OworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsK KysJCSAgICBpZiAoc3RybmNtcChwcCwgIkFFU1ZTICIsIDYpID09IDApCisrCQkJeworKwkJCXN0 cmNweShhbGdvLCAiQUVTIik7CisrCQkJLyogZ2V0IHRlc3QgdHlwZSAqLworKwkJCXBwICs9IDY7 CisrCQkJeHAgPSBzdHJjaHIocHAsICcgJyk7CisrCQkJbiA9IHhwLXBwOworKwkJCXN0cm5jcHko YXRlc3QsIHBwLCBuKTsKKysJCQlhdGVzdFtuXSA9ICdcMCc7CisrCQkJLyogZ2V0IG1vZGUgKi8K KysJCQl4cCA9IHN0cnJjaHIocHAsICcgJyk7IC8qIGdldCBtb2RlIiAqLworKwkJCW4gPSBzdHJs ZW4oeHArMSktMTsKKysJCQlzdHJuY3B5KGFtb2RlLCB4cCsxLCBuKTsKKysJCQlhbW9kZVtuXSA9 ICdcMCc7CisrCQkJLyogYW1vZGVbM10gPSAnXDAnOyAqLworKwkJCWlmIChWRVJCT1NFKQorKwkJ CQlwcmludGYoIlRlc3QgPSAlcywgTW9kZSA9ICVzXG4iLCBhdGVzdCwgYW1vZGUpOworKwkJCX0K KysJCSAgICBlbHNlIGlmIChzdHJuY2FzZWNtcChwcCwgIktleSBMZW5ndGggOiAiLCAxMykgPT0g MCkKKysJCQl7CisrCQkJYWtleXN6ID0gYXRvaShwcCsxMyk7CisrCQkJaWYgKFZFUkJPU0UpCisr CQkJCXByaW50ZigiS2V5IHNpemUgPSAlZFxuIiwgYWtleXN6KTsKKysJCQl9CisrCQkgICAgfQor KwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgMTogIC8qIFtFTkNSWVBUXSB8IFtERUNSWVBU XSAqLworKwkgICAgaWYgKGlidWZbMF0gPT0gJ1snKQorKwkJeworKwkJZnB1dHMoaWJ1ZiwgcmZw KTsKKysJCSsrc3RlcDsKKysJCWlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0VOQ1JZUFRdIiwgOSkg PT0gMCkKKysJCSAgICBkaXIgPSAxOworKwkJZWxzZSBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltE RUNSWVBUXSIsIDkpID09IDApCisrCQkgICAgZGlyID0gMDsKKysJCWVsc2UKKysJCSAgICB7Cisr CQkgICAgcHJpbnRmKCJJbnZhbGlkIGtleXdvcmQ6ICVzXG4iLCBpYnVmKTsKKysJCSAgICBlcnIg PSAxOworKwkJICAgIH0KKysJCWJyZWFrOworKwkJfQorKwkgICAgZWxzZSBpZiAoZGlyID09IC0x KQorKwkJeworKwkJZXJyID0gMTsKKysJCXByaW50ZigiTWlzc2luZyBFTkNSWVBUL0RFQ1JZUFQg a2V5d29yZFxuIik7CisrCQlicmVhazsKKysJCX0KKysJICAgIGVsc2UgCisrCQlzdGVwID0gMjsK KysKKysJY2FzZSAyOiAvKiBLRVkgPSB4eHh4ICovCisrCSAgICBmcHV0cyhpYnVmLCByZnApOwor KwkgICAgaWYoKmlidWYgPT0gJ1xuJykKKysJCWJyZWFrOworKwkgICAgaWYoIXN0cm5jYXNlY21w KGlidWYsIkNPVU5UID0gIiw4KSkKKysJCWJyZWFrOworKworKwkgICAgaWYgKHN0cm5jYXNlY21w KGlidWYsICJLRVkgPSAiLCA2KSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxu Iik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJbGVuID0gaGV4MmJp bigoY2hhciopaWJ1Zis2LCBhS2V5KTsKKysJCWlmIChsZW4gPCAwKQorKwkJICAgIHsKKysJCSAg ICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsKKysJCSAgICBlcnIgPTE7CisrCQkgICAgYnJlYWs7 CisrCQkgICAgfQorKwkJUHJpbnRWYWx1ZSgiS0VZIiwgYUtleSwgbGVuKTsKKysJCWlmIChzdHJj bXAoYW1vZGUsICJFQ0IiKSA9PSAwKQorKwkJICAgIHsKKysJCSAgICBtZW1zZXQoaVZlYywgMCwg c2l6ZW9mKGlWZWMpKTsKKysJCSAgICBzdGVwID0gKGRpcik/IDQ6IDU7ICAvKiBubyBpdmVjIGZv ciBFQ0IgKi8KKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgKytzdGVwOworKwkJfQorKwkgICAg YnJlYWs7CisrCisrCWNhc2UgMzogLyogSVYgPSB4eHh4ICovCisrCSAgICBmcHV0cyhpYnVmLCBy ZnApOworKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJJViA9ICIsIDUpICE9IDApCisrCQl7 CisrCQlwcmludGYoIk1pc3NpbmcgSVZcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVs c2UKKysJCXsKKysJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNSwgaVZlYyk7CisrCQlpZiAo bGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIElWXG4iKTsKKysJCSAg ICBlcnIgPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJUHJpbnRWYWx1ZSgiSVYiLCBp VmVjLCBsZW4pOworKwkJc3RlcCA9IChkaXIpPyA0OiA1OworKwkJfQorKwkgICAgYnJlYWs7Cisr CisrCWNhc2UgNDogLyogUExBSU5URVhUID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZw KTsKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiUExBSU5URVhUID0gIiwgMTIpICE9IDAp CisrCQl7CisrCQlwcmludGYoIk1pc3NpbmcgUExBSU5URVhUXG4iKTsKKysJCWVyciA9IDE7Cisr CQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlpbnQgbm4gPSBzdHJsZW4oaWJ1ZisxMik7CisrCQlp Zighc3RyY21wKGFtb2RlLCJDRkIxIikpCisrCQkgICAgbGVuPWJpbnQyYmluKGlidWYrMTIsbm4t MSxwbGFpbnRleHQpOworKwkJZWxzZQorKwkJICAgIGxlbj1oZXgyYmluKGlidWYrMTIsIHBsYWlu dGV4dCk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlk IFBMQUlOVEVYVDogJXMiLCBpYnVmKzEyKTsKKysJCSAgICBlcnIgPTE7CisrCQkgICAgYnJlYWs7 CisrCQkgICAgfQorKwkJaWYgKGxlbiA+PSBzaXplb2YocGxhaW50ZXh0KSkKKysJCSAgICB7Cisr CQkgICAgcHJpbnRmKCJCdWZmZXIgb3ZlcmZsb3dcbiIpOworKwkJICAgIH0KKysJCVByaW50VmFs dWUoIlBMQUlOVEVYVCIsICh1bnNpZ25lZCBjaGFyKilwbGFpbnRleHQsIGxlbik7CisrCQlpZiAo c3RyY21wKGF0ZXN0LCAiTUNUIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KKysJCSAg ICB7CisrCQkgICAgaWYoZG9fbWN0KGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAorKwkJCSAg ICAgIGRpciwgKHVuc2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVuLCAKKysJCQkgICAgICByZnAp IDwgMCkKKysJCQlFWElUKDEpOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAg cmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKKysJCQkJICBk aXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJCQkJICBwbGFpbnRleHQsIGNp cGhlcnRleHQsIGxlbik7CisrCQkgICAgT3V0cHV0VmFsdWUoIkNJUEhFUlRFWFQiLGNpcGhlcnRl eHQsbGVuLHJmcCwKKysJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKKysJCSAgICB9CisrCQlz dGVwID0gNjsKKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDU6IC8qIENJUEhFUlRFWFQg PSB4eHh4ICovCisrCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkgICAgaWYgKHN0cm5jYXNlY21w KGlidWYsICJDSVBIRVJURVhUID0gIiwgMTMpICE9IDApCisrCQl7CisrCQlwcmludGYoIk1pc3Np bmcgS0VZXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlpZigh c3RyY21wKGFtb2RlLCJDRkIxIikpCisrCQkgICAgbGVuPWJpbnQyYmluKGlidWYrMTMsc3RybGVu KGlidWYrMTMpLTEsY2lwaGVydGV4dCk7CisrCQllbHNlCisrCQkgICAgbGVuID0gaGV4MmJpbihp YnVmKzEzLGNpcGhlcnRleHQpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHBy aW50ZigiSW52YWxpZCBDSVBIRVJURVhUXG4iKTsKKysJCSAgICBlcnIgPTE7CisrCQkgICAgYnJl YWs7CisrCQkgICAgfQorKworKwkJUHJpbnRWYWx1ZSgiQ0lQSEVSVEVYVCIsIGNpcGhlcnRleHQs IGxlbik7CisrCQlpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgPT0gMCkgIC8qIE1vbnRlIENhcmxv IFRlc3QgKi8KKysJCSAgICB7CisrCQkgICAgZG9fbWN0KGFtb2RlLCBha2V5c3osIGFLZXksIGlW ZWMsIAorKwkJCSAgIGRpciwgY2lwaGVydGV4dCwgbGVuLCByZnApOworKwkJICAgIH0KKysJCWVs c2UKKysJCSAgICB7CisrCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBh S2V5LCBpVmVjLCAKKysJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8K KysJCQkJICBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7CisrCQkgICAgT3V0cHV0VmFsdWUo IlBMQUlOVEVYVCIsKHVuc2lnbmVkIGNoYXIgKilwbGFpbnRleHQsbGVuLHJmcCwKKysJCQkJIXN0 cmNtcChhbW9kZSwiQ0ZCMSIpKTsKKysJCSAgICB9CisrCQlzdGVwID0gNjsKKysJCX0KKysJICAg IGJyZWFrOworKworKwljYXNlIDY6CisrCSAgICBpZiAoaWJ1ZlswXSAhPSAnXG4nKQorKwkJewor KwkJZXJyID0gMTsKKysJCXByaW50ZigiTWlzc2luZyB0ZXJtaW5hdG9yXG4iKTsKKysJCX0KKysJ ICAgIGVsc2UgaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpICE9IDApCisrCQl7IC8qIE1DVCBhbHJl YWR5IGFkZGVkIHRlcm1pbmF0aW5nIG5sICovCisrCQlmcHV0cyhpYnVmLCByZnApOworKwkJfQor KwkgICAgc3RlcCA9IDE7CisrCSAgICBicmVhazsKKysJICAgIH0KKysJfQorKyAgICBpZiAocmZw KQorKwlmY2xvc2UocmZwKTsKKysgICAgaWYgKGFmcCkKKysJZmNsb3NlKGFmcCk7CisrICAgIHJl dHVybiBlcnI7CisrICAgIH0KKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisrICBQcm9jZXNzZXMgZWl0aGVyIGEgc2luZ2xlIGZpbGUgb3Ig CisrICBhIHNldCBvZiBmaWxlcyB3aG9zZSBuYW1lcyBhcmUgcGFzc2VkIGluIGEgZmlsZS4KKysg IEEgc2luZ2xlIGZpbGUgaXMgc3BlY2lmaWVkIGFzOgorKyAgICBhZXNfdGVzdCAtZiB4eHgucmVx CisrICBBIHNldCBvZiBmaWxlcyBpcyBzcGVjaWZpZWQgYXM6CisrICAgIGFlc190ZXN0IC1kIHh4 eHh4Lnh4eAorKyAgVGhlIGRlZmF1bHQgaXM6IC1kIHJlcS50eHQKKystLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisraW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQorKyAgICB7CisrICAgIGNoYXIgKnJxbGlzdCA9ICJyZXEudHh0IiwgKnJz cGZpbGUgPSBOVUxMOworKyAgICBGSUxFICpmcCA9IE5VTEw7CisrICAgIGNoYXIgZm5bMjUwXSA9 ICIiLCByZm5bMjU2XSA9ICIiOworKyAgICBpbnQgZl9vcHQgPSAwLCBkX29wdCA9IDE7CisrCisr I2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKKysJeworKwlk b19wcmludF9lcnJvcnMoKTsKKysJRVhJVCgxKTsKKysJfQorKyNlbmRpZgorKyAgICBpZiAoYXJn YyA+IDEpCisrCXsKKysJaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1kIikgPT0gMCkKKysJICAg IHsKKysJICAgIGRfb3B0ID0gMTsKKysJICAgIH0KKysJZWxzZSBpZiAoc3RyY2FzZWNtcChhcmd2 WzFdLCAiLWYiKSA9PSAwKQorKwkgICAgeworKwkgICAgZl9vcHQgPSAxOworKwkgICAgZF9vcHQg PSAwOworKwkgICAgfQorKwllbHNlCisrCSAgICB7CisrCSAgICBwcmludGYoIkludmFsaWQgcGFy YW1ldGVyOiAlc1xuIiwgYXJndlsxXSk7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJaWYg KGFyZ2MgPCAzKQorKwkgICAgeworKwkgICAgcHJpbnRmKCJNaXNzaW5nIHBhcmFtZXRlclxuIik7 CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJaWYgKGRfb3B0KQorKwkgICAgcnFsaXN0ID0g YXJndlsyXTsKKysJZWxzZQorKwkgICAgeworKwkgICAgc3RyY3B5KGZuLCBhcmd2WzJdKTsKKysJ ICAgIHJzcGZpbGUgPSBhcmd2WzNdOworKwkgICAgfQorKwl9CisrICAgIGlmIChkX29wdCkKKysJ eyAvKiBsaXN0IG9mIGZpbGVzIChkaXJlY3RvcnkpICovCisrCWlmICghKGZwID0gZm9wZW4ocnFs aXN0LCAiciIpKSkKKysJICAgIHsKKysJICAgIHByaW50ZigiQ2Fubm90IG9wZW4gcmVxIGxpc3Qg ZmlsZVxuIik7CisrCSAgICByZXR1cm4gLTE7CisrCSAgICB9CisrCXdoaWxlIChmZ2V0cyhmbiwg c2l6ZW9mKGZuKSwgZnApKQorKwkgICAgeworKwkgICAgc3RydG9rKGZuLCAiXHJcbiIpOworKwkg ICAgc3RyY3B5KHJmbiwgZm4pOworKwkgICAgaWYgKFZFUkJPU0UpCisrCQlwcmludGYoIlByb2Nl c3Npbmc6ICVzXG4iLCByZm4pOworKwkgICAgaWYgKHByb2NfZmlsZShyZm4sIHJzcGZpbGUpKQor KwkJeworKwkJcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIHJm bik7CisrCQlFWElUKDEpOworKwkJfQorKwkgICAgfQorKwlmY2xvc2UoZnApOworKwl9CisrICAg IGVsc2UgLyogc2luZ2xlIGZpbGUgKi8KKysJeworKwlpZiAoVkVSQk9TRSkKKysJICAgIHByaW50 ZigiUHJvY2Vzc2luZzogJXNcbiIsIGZuKTsKKysJaWYgKHByb2NfZmlsZShmbiwgcnNwZmlsZSkp CisrCSAgICB7CisrCSAgICBwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8 PFxuIiwgZm4pOworKwkgICAgfQorKwl9CisrICAgIEVYSVQoMCk7CisrICAgIHJldHVybiAwOwor KyAgICB9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9j YXZzL2ZpcHNfY21hY3Rlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2NhdnMv Zmlwc19jbWFjdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X2NtYWN0ZXN0LmMuZmlwcwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU1MjkyMjMxNCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2NhdnMvZmlwc19jbWFjdGVzdC5jCTIwMTUtMDEt MDkgMDk6NTE6NTEuNTUyOTIyMzE0ICswMTAwCitAQCAtMCwwICsxLDUxNyBAQAorKy8qIGZpcHNf Y21hY3Rlc3QuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVA b3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QgMjAwNS4KKysgKi8KKysv KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0 LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRp b24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh dHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZv bGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisr ICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBt dXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAg bGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1h eSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgor KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJl ZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xs b3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisr ICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1Qg YGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pF Q1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs CisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKgorKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRl cyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworKyAqIChlYXlA Y3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBi eSBUaW0KKysgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKgorKyAqLworKworKyNk ZWZpbmUgT1BFTlNTTF9GSVBTQVBJCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUg PGN0eXBlLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NtYWMuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKwor KyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBDTUFDIHN1cHBvcnRcbiIpOworKyAgICByZXR1 cm4oMCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNp bmNsdWRlICJmaXBzX3V0bC5oIgorKworK3N0YXRpYyBpbnQgY21hY190ZXN0KGNvbnN0IEVWUF9D SVBIRVIgKmNpcGhlciwgRklMRSAqb3V0LCBGSUxFICppbiwKKysJaW50IG1vZGUsIGludCBLbGVu X2NvdW50c19rZXlzLCBpbnQga25vd25fa2V5bGVuKTsKKytzdGF0aWMgaW50IHByaW50X2NtYWNf Z2VuKGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hh ciAqS2V5LCBpbnQgS2xlbiwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1zZ2xlbiwKKysJ CWludCBUbGVuKTsKKytzdGF0aWMgaW50IHByaW50X2NtYWNfdmVyKGNvbnN0IEVWUF9DSVBIRVIg KmNpcGhlciwgRklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hhciAqS2V5LCBpbnQgS2xlbiwKKysJ CXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1zZ2xlbiwKKysJCXVuc2lnbmVkIGNoYXIgKk1hYywg aW50IE1hY2xlbiwKKysJCWludCBUbGVuKTsKKysKKysjaWZkZWYgRklQU19BTEdWUworK2ludCBm aXBzX2NtYWN0ZXN0X21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKyNlbHNlCisraW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKyNlbmRpZgorKwl7CisrCUZJTEUgKmluID0gTlVM TCwgKm91dCA9IE5VTEw7CisrCWludCBtb2RlID0gMDsJCS8qIDAgPT4gR2VuZXJhdGUsIDEgPT4g VmVyaWZ5ICovCisrCWludCBLbGVuX2NvdW50c19rZXlzID0gMDsgLyogMCA9PiBLbGVuIGlzIHNp emUgb2Ygb25lIGtleQorKwkJCQkgICAgIDEgPT4gS2xlbiBpcyBhbW91bnQgb2Yga2V5cworKwkJ CQkgICovCisrCWludCBrbm93bl9rZXlsZW4gPSAwOwkvKiBPbmx5IHNldCB3aGVuIEtsZW5fY291 bnRzX2tleXMgPSAxICovCisrCWNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciA9IDA7CisrCWludCBy ZXQgPSAxOworKwlmaXBzX2FsZ3Rlc3RfaW5pdCgpOworKworKwl3aGlsZSAoYXJnYyA+IDEgJiYg YXJndlsxXVswXSA9PSAnLScpCisrCQl7CisrCQlzd2l0Y2ggKGFyZ3ZbMV1bMV0pCisrCQkJewor KwkJY2FzZSAnYSc6CisrCQkJeworKwkJCWNoYXIgKnAgPSAmYXJndlsxXVsyXTsKKysJCQlpZiAo KnAgPT0gJ1wwJykKKysJCQkJeworKwkJCQlpZiAoYXJnYyA8PSAyKQorKwkJCQkJeworKwkJCQkJ ZnByaW50ZihzdGRlcnIsICJPcHRpb24gJXMgbmVlZHMgYSB2YWx1ZVxuIiwgYXJndlsxXSk7Cisr CQkJCQlnb3RvIGVuZDsKKysJCQkJCX0KKysJCQkJYXJndisrOworKwkJCQlhcmdjLS07CisrCQkJ CXAgPSAmYXJndlsxXVswXTsKKysJCQkJfQorKwkJCWlmICghc3RyY21wKHAsICJhZXMxMjgiKSkK KysJCQkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2JjKCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcChw LCAiYWVzMTkyIikpCisrCQkJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NiYygpOworKwkJCWVsc2Ug aWYgKCFzdHJjbXAocCwgImFlczI1NiIpKQorKwkJCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jYmMo KTsKKysJCQllbHNlIGlmICghc3RyY21wKHAsICJ0ZGVhMyIpIHx8ICFzdHJjbXAocCwgInRkZXMz IikpCisrCQkJCXsKKysJCQkJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2NiYygpOworKwkJCQlLbGVu X2NvdW50c19rZXlzID0gMTsKKysJCQkJa25vd25fa2V5bGVuID0gODsKKysJCQkJfQorKwkJCWVs c2UKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gYWxnb3JpdGhtICVzXG4i LCBwKTsKKysJCQkJZ290byBlbmQ7CisrCQkJCX0KKysJCQl9CisrCQkJYnJlYWs7CisrCQljYXNl ICdnJzoKKysJCQltb2RlID0gMDsKKysJCQlicmVhazsKKysJCWNhc2UgJ3YnOgorKwkJCW1vZGUg PSAxOworKwkJCWJyZWFrOworKwkJZGVmYXVsdDoKKysJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25v d24gb3B0aW9uICVzXG4iLCBhcmd2WzFdKTsKKysJCQlnb3RvIGVuZDsKKysJCQl9CisrCQlhcmd2 Kys7CisrCQlhcmdjLS07CisrCQl9CisrCWlmIChhcmdjID09IDEpCisrCQlpbiA9IHN0ZGluOwor KwllbHNlCisrCQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7CisrCisrCWlmIChhcmdjIDwgMikK KysJCW91dCA9IHN0ZG91dDsKKysJZWxzZQorKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsK KysKKysJaWYgKCFpbikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5p dGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghb3V0 KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24g ZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghY21hY190ZXN0KGNpcGhl ciwgb3V0LCBpbiwgbW9kZSwKKysJCQlLbGVuX2NvdW50c19rZXlzLCBrbm93bl9rZXlsZW4pKQor KwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBjbWFjIGZpbGUgcHJvY2Vzc2luZyBlcnJv clxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysJZWxzZQorKwkJcmV0ID0gMDsKKysKKysJZW5k OgorKworKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKKysJCWZjbG9zZShpbik7CisrCWlmIChv dXQgJiYgKG91dCAhPSBzdGRvdXQpKQorKwkJZmNsb3NlKG91dCk7CisrCisrCXJldHVybiByZXQ7 CisrCisrCX0KKysKKysjZGVmaW5lIENNQUNfVEVTVF9NQVhMSU5FTEVOCTE1MDAwMAorKworK2lu dCBjbWFjX3Rlc3QoY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxFICpvdXQsIEZJTEUgKmlu LAorKwlpbnQgbW9kZSwgaW50IEtsZW5fY291bnRzX2tleXMsIGludCBrbm93bl9rZXlsZW4pCisr CXsKKysJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7CisrCWNoYXIgKmtleXdvcmQs ICp2YWx1ZTsKKysJdW5zaWduZWQgY2hhciAqKktleXMgPSBOVUxMLCAqTXNnID0gTlVMTCwgKk1h YyA9IE5VTEw7CisrCXVuc2lnbmVkIGNoYXIgKktleSA9IE5VTEw7CisrCWludCBDb3VudCwgS2xl biwgTWxlbiwgVGxlbjsKKysJbG9uZyBLZXlsZW4sIE1zZ2xlbiwgTWFjbGVuOworKwlpbnQgcmV0 ID0gMDsKKysJaW50IGxudW0gPSAwOworKworKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKENN QUNfVEVTVF9NQVhMSU5FTEVOKTsKKysJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKENNQUNfVEVT VF9NQVhMSU5FTEVOKTsKKysKKysJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKKysJCWdvdG8g ZXJyb3I7CisrCisrCUNvdW50ID0gLTE7CisrCUtsZW4gPSAtMTsKKysJTWxlbiA9IC0xOworKwlU bGVuID0gLTE7CisrCisrCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgQ01BQ19URVNUX01BWExJTkVM RU4sIGluKSkKKysJCXsKKysJCWxudW0rKzsKKysJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7 CisrCQlrZXl3b3JkID0gbGluZWJ1ZjsKKysJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLworKwkJ d2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQorKwkJCWtleXdvcmQrKzsK KysKKysJCS8qIFNraXAgY29tbWVudHMgKi8KKysJCWlmIChrZXl3b3JkWzBdID09ICcjJykKKysJ CQl7CisrCQkJaWYgKGZwdXRzKG9saW5lYnVmLCBvdXQpIDwgMCkKKysJCQkJZ290byBlcnJvcjsK KysJCQljb250aW51ZTsKKysJCQl9CisrCisrCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KKysJCXAg PSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysKKysJCS8qIElmIG5vID0gb3Igc3RhcnRzIHdpdGgg WyAoZm9yIFtMPTIwXSBsaW5lKSBqdXN0IGNvcHkgKi8KKysJCWlmICghcCkKKysJCQl7CisrCQkJ aWYgKGZwdXRzKG9saW5lYnVmLCBvdXQpIDwgMCkKKysJCQkJZ290byBlcnJvcjsKKysJCQljb250 aW51ZTsKKysJCQl9CisrCisrCQlxID0gcCAtIDE7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcg c3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCQkqcS0t ID0gMDsKKysKKysJCSpwID0gMDsKKysJCXZhbHVlID0gcCArIDE7CisrCisrCQkvKiBSZW1vdmUg bGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQg Y2hhcikqdmFsdWUpKQorKwkJCXZhbHVlKys7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3Bh Y2UgZnJvbSB2YWx1ZSAqLworKwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisr CQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkq cC0tID0gMDsKKysKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJDb3VudCIpKQorKwkJCXsKKysJ CQlpZiAoQ291bnQgIT0gLTEpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJQ291bnQgPSBh dG9pKHZhbHVlKTsKKysJCQlpZiAoQ291bnQgPCAwKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwor KwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIktsZW4iKSkKKysJCQl7CisrCQkJ aWYgKEtsZW4gIT0gLTEpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJS2xlbiA9IGF0b2ko dmFsdWUpOworKwkJCWlmIChLbGVuIDwgMCkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlp ZiAoS2xlbl9jb3VudHNfa2V5cykKKysJCQkJeworKwkJCQlLZXlzID0gT1BFTlNTTF9tYWxsb2Mo c2l6ZW9mKCpLZXlzKSAqIEtsZW4pOworKwkJCQltZW1zZXQoS2V5cywgJ1wwJywgc2l6ZW9mKCpL ZXlzKSAqIEtsZW4pOworKwkJCQl9CisrCQkJZWxzZQorKwkJCQl7CisrCQkJCUtleXMgPSBPUEVO U1NMX21hbGxvYyhzaXplb2YoKktleXMpKTsKKysJCQkJbWVtc2V0KEtleXMsICdcMCcsIHNpemVv ZigqS2V5cykpOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAi TWxlbiIpKQorKwkJCXsKKysJCQlpZiAoTWxlbiAhPSAtMSkKKysJCQkJZ290byBwYXJzZV9lcnJv cjsKKysJCQlNbGVuID0gYXRvaSh2YWx1ZSk7CisrCQkJaWYgKE1sZW4gPCAwKQorKwkJCQlnb3Rv IHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlRsZW4i KSkKKysJCQl7CisrCQkJaWYgKFRsZW4gIT0gLTEpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7Cisr CQkJVGxlbiA9IGF0b2kodmFsdWUpOworKwkJCWlmIChUbGVuIDwgMCkKKysJCQkJZ290byBwYXJz ZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJLZXkiKSAmJiAh S2xlbl9jb3VudHNfa2V5cykKKysJCQl7CisrCQkJaWYgKEtleXNbMF0pCisrCQkJCWdvdG8gcGFy c2VfZXJyb3I7CisrCQkJS2V5c1swXSA9IGhleDJiaW5fbSh2YWx1ZSwgJktleWxlbik7CisrCQkJ aWYgKCFLZXlzWzBdKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYg KCFzdHJuY21wKGtleXdvcmQsICJLZXkiLCAzKSAmJiBLbGVuX2NvdW50c19rZXlzKQorKwkJCXsK KysJCQlpbnQga2V5bnVtID0gYXRvaShrZXl3b3JkICsgMyk7CisrCQkJaWYgKCFrZXludW0gfHwg a2V5bnVtID4gS2xlbiB8fCBLZXlzW2tleW51bS0xXSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsK KysJCQlLZXlzW2tleW51bS0xXSA9IGhleDJiaW5fbSh2YWx1ZSwgJktleWxlbik7CisrCQkJaWYg KCFLZXlzW2tleW51bS0xXSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNl IGlmICghc3RyY21wKGtleXdvcmQsICJNc2ciKSkKKysJCQl7CisrCQkJaWYgKE1zZykKKysJCQkJ Z290byBwYXJzZV9lcnJvcjsKKysJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZNc2dsZW4pOwor KwkJCWlmICghTXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgIk1hYyIpKQorKwkJCXsKKysJCQlpZiAobW9kZSA9PSAwKQorKwkJ CQljb250aW51ZTsKKysJCQlpZiAoTWFjKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCU1h YyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1hY2xlbik7CisrCQkJaWYgKCFNYWMpCisrCQkJCWdvdG8g cGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUmVzdWx0 IikpCisrCQkJeworKwkJCWlmIChtb2RlID09IDEpCisrCQkJCWNvbnRpbnVlOworKwkJCWdvdG8g cGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZQorKwkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCisr CQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKKysKKysJCWlmIChLZXlzICYmIE1zZyAmJiAoIW1vZGUg fHwgTWFjKSAmJiAoVGxlbiA+IDApICYmIChLbGVuID4gMCkpCisrCQkJeworKwkJCWlmIChLbGVu X2NvdW50c19rZXlzKQorKwkJCQl7CisrCQkJCWludCB4OworKwkJCQlLZXkgPSBPUEVOU1NMX21h bGxvYyhLbGVuICoga25vd25fa2V5bGVuKTsKKysJCQkJZm9yICh4ID0gMDsgeCA8IEtsZW47IHgr KykKKysJCQkJCXsKKysJCQkJCW1lbWNweShLZXkgKyB4ICoga25vd25fa2V5bGVuLAorKwkJCQkJ CUtleXNbeF0sIGtub3duX2tleWxlbik7CisrCQkJCQlPUEVOU1NMX2ZyZWUoS2V5c1t4XSk7Cisr CQkJCQl9CisrCQkJCUtsZW4gKj0ga25vd25fa2V5bGVuOworKwkJCQl9CisrCQkJZWxzZQorKwkJ CQl7CisrCQkJCUtleSA9IE9QRU5TU0xfbWFsbG9jKEtsZW4pOworKwkJCQltZW1jcHkoS2V5LCBL ZXlzWzBdLCBLbGVuKTsKKysJCQkJT1BFTlNTTF9mcmVlKEtleXNbMF0pOworKwkJCQl9CisrCQkJ T1BFTlNTTF9mcmVlKEtleXMpOworKworKwkJCXN3aXRjaChtb2RlKQorKwkJCQl7CisrCQkJY2Fz ZSAwOgorKwkJCQlpZiAoIXByaW50X2NtYWNfZ2VuKGNpcGhlciwgb3V0LAorKwkJCQkJCUtleSwg S2xlbiwKKysJCQkJCQlNc2csIE1sZW4sCisrCQkJCQkJVGxlbikpCisrCQkJCQlnb3RvIGVycm9y OworKwkJCQlicmVhazsKKysJCQljYXNlIDE6CisrCQkJCWlmICghcHJpbnRfY21hY192ZXIoY2lw aGVyLCBvdXQsCisrCQkJCQkJS2V5LCBLbGVuLAorKwkJCQkJCU1zZywgTWxlbiwKKysJCQkJCQlN YWMsIE1hY2xlbiwKKysJCQkJCQlUbGVuKSkKKysJCQkJCWdvdG8gZXJyb3I7CisrCQkJCWJyZWFr OworKwkJCQl9CisrCisrCQkJT1BFTlNTTF9mcmVlKEtleSk7CisrCQkJS2V5ID0gTlVMTDsKKysJ CQlPUEVOU1NMX2ZyZWUoTXNnKTsKKysJCQlNc2cgPSBOVUxMOworKwkJCU9QRU5TU0xfZnJlZShN YWMpOworKwkJCU1hYyA9IE5VTEw7CisrCQkJS2xlbiA9IC0xOworKwkJCU1sZW4gPSAtMTsKKysJ CQlUbGVuID0gLTE7CisrCQkJQ291bnQgPSAtMTsKKysJCQl9CisrCQl9CisrCisrCisrCXJldCA9 IDE7CisrCisrCisrCWVycm9yOgorKworKwlpZiAob2xpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUo b2xpbmVidWYpOworKwlpZiAobGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKKysJ aWYgKEtleSkKKysJCU9QRU5TU0xfZnJlZShLZXkpOworKwlpZiAoTXNnKQorKwkJT1BFTlNTTF9m cmVlKE1zZyk7CisrCWlmIChNYWMpCisrCQlPUEVOU1NMX2ZyZWUoTWFjKTsKKysKKysJcmV0dXJu IHJldDsKKysKKysJcGFyc2VfZXJyb3I6CisrCisrCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFy c2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKKysKKysJZ290byBlcnJvcjsK KysKKysJfQorKworK3N0YXRpYyBpbnQgcHJpbnRfY21hY19nZW4oY29uc3QgRVZQX0NJUEhFUiAq Y2lwaGVyLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpLZXksIGludCBLbGVuLAorKwkJ dW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTWxlbiwKKysJCWludCBUbGVuKQorKwl7CisrCWludCBy YywgaTsKKysJc2l6ZV90IHJlc2xlbjsKKysJdW5zaWduZWQgY2hhciByZXNbMTI4XTsKKysJQ01B Q19DVFggKmNtYWNfY3R4ID0gQ01BQ19DVFhfbmV3KCk7CisrCisrCUNNQUNfSW5pdChjbWFjX2N0 eCwgS2V5LCBLbGVuLCBjaXBoZXIsIDApOworKwlDTUFDX1VwZGF0ZShjbWFjX2N0eCwgTXNnLCBN bGVuKTsKKysJaWYgKCFDTUFDX0ZpbmFsKGNtYWNfY3R4LCByZXMsICZyZXNsZW4pKQorKwkJewor KwkJZnB1dHMoIkVycm9yIGNhbGN1bGF0aW5nIENNQUNcbiIsIHN0ZGVycik7CisrCQlyYyA9IDA7 CisrCQl9CisrCWVsc2UgaWYgKFRsZW4gPiAoaW50KXJlc2xlbikKKysJCXsKKysJCWZwdXRzKCJQ YXJhbWV0ZXIgZXJyb3IsIFRsZW4gPiBDTUFDIGxlbmd0aFxuIiwgc3RkZXJyKTsKKysJCXJjID0g MDsKKysJCX0KKysJZWxzZQorKwkJeworKwkJZnB1dHMoIk1hYyA9ICIsIG91dCk7CisrCQlmb3Ig KGkgPSAwOyBpIDwgVGxlbjsgaSsrKQorKwkJCWZwcmludGYob3V0LCAiJTAyeCIsIHJlc1tpXSk7 CisrCQlmcHV0cyhSRVNQX0VPTCwgb3V0KTsKKysJCXJjID0gMTsKKysJCX0KKysJQ01BQ19DVFhf ZnJlZShjbWFjX2N0eCk7CisrCXJldHVybiByYzsKKysJfQorKworK3N0YXRpYyBpbnQgcHJpbnRf Y21hY192ZXIoY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxFICpvdXQsCisrCQl1bnNpZ25l ZCBjaGFyICpLZXksIGludCBLbGVuLAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTWxlbiwK KysJCXVuc2lnbmVkIGNoYXIgKk1hYywgaW50IE1hY2xlbiwKKysJCWludCBUbGVuKQorKwl7Cisr CWludCByYyA9IDE7CisrCXNpemVfdCByZXNsZW47CisrCXVuc2lnbmVkIGNoYXIgcmVzWzEyOF07 CisrCUNNQUNfQ1RYICpjbWFjX2N0eCA9IENNQUNfQ1RYX25ldygpOworKworKwlDTUFDX0luaXQo Y21hY19jdHgsIEtleSwgS2xlbiwgY2lwaGVyLCAwKTsKKysJQ01BQ19VcGRhdGUoY21hY19jdHgs IE1zZywgTWxlbik7CisrCWlmICghQ01BQ19GaW5hbChjbWFjX2N0eCwgcmVzLCAmcmVzbGVuKSkK KysJCXsKKysJCWZwdXRzKCJFcnJvciBjYWxjdWxhdGluZyBDTUFDXG4iLCBzdGRlcnIpOworKwkJ cmMgPSAwOworKwkJfQorKwllbHNlIGlmIChUbGVuID4gKGludClyZXNsZW4pCisrCQl7CisrCQlm cHV0cygiUGFyYW1ldGVyIGVycm9yLCBUbGVuID4gQ01BQyBsZW5ndGhcbiIsIHN0ZGVycik7Cisr CQlyYyA9IDA7CisrCQl9CisrCWVsc2UgaWYgKFRsZW4gIT0gTWFjbGVuKQorKwkJeworKwkJZnB1 dHMoIlBhcmFtZXRlciBlcnJvciwgVGxlbiAhPSByZXN1bHRpbmcgTWFjIGxlbmd0aFxuIiwgc3Rk ZXJyKTsKKysJCXJjID0gMDsKKysJCX0KKysJZWxzZQorKwkJeworKwkJaWYgKCFtZW1jbXAoTWFj LCByZXMsIE1hY2xlbikpCisrCQkJZnB1dHMoIlJlc3VsdCA9IFAiIFJFU1BfRU9MLCBvdXQpOwor KwkJZWxzZQorKwkJCWZwdXRzKCJSZXN1bHQgPSBGIiBSRVNQX0VPTCwgb3V0KTsKKysJCX0KKysJ Q01BQ19DVFhfZnJlZShjbWFjX2N0eCk7CisrCXJldHVybiByYzsKKysJfQorKworKyNlbmRpZgor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMuYy5m aXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMKKy0tLSBv cGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jLmZpcHMJMjAxNS0w MS0wOSAwOTo1MTo1MS41NTI5MjIzMTQgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTUyOTIyMzE0ICsw MTAwCitAQCAtMCwwICsxLDcwMiBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChj KSAyMDA0IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisr ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisr ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNv ZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8v d3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtp dCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lv biwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoK KysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNh bGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIg bmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3Bl blNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdo YXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQg KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJF U1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMg QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK KysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBB TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAor KyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrICBOSVNUIERFUyBN b2RlcyBvZiBPcGVyYXRpb24gVmFsaWRhdGlvbiBTeXN0ZW0KKysgIFRlc3QgUHJvZ3JhbQorKwor KyAgQmFzZWQgb24gdGhlIEFFUyBWYWxpZGF0aW9uIFN1aXRlLCB3aGljaCB3YXM6CisrICBEb25h dGVkIHRvIE9wZW5TU0wgYnk6CisrICBWLU9ORSBDb3Jwb3JhdGlvbgorKyAgMjAyNTAgQ2VudHVy eSBCbHZkLCBTdWl0ZSAzMDAKKysgIEdlcm1hbnRvd24sIE1EIDIwODc0CisrICBVLlMuQS4KKysg IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKworKyNp bmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5n Lmg+CisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRl IDxjdHlwZS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrCisrI2luY2x1ZGUgPG9wZW5zc2wv ZXJyLmg+CisrI2luY2x1ZGUgImVfb3MuaCIKKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKwor K2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAgICBwcmludGYoIk5vIEZJ UFMgREVTIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKworKyNlbHNlCisrCisr I2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworKyNk ZWZpbmUgREVTX0JMT0NLX1NJWkUgOAorKworKyNkZWZpbmUgVkVSQk9TRSAwCisrCisraW50IERF U1Rlc3QoRVZQX0NJUEhFUl9DVFggKmN0eCwKKysJICAgIGNoYXIgKmFtb2RlLCBpbnQgYWtleXN6 LCB1bnNpZ25lZCBjaGFyICphS2V5LCAKKysJICAgIHVuc2lnbmVkIGNoYXIgKmlWZWMsIAorKwkg ICAgaW50IGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkgICAgdW5zaWdu ZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBjaGFyICppbiwgaW50IGxlbikKKysgICAgeworKyAgICBj b25zdCBFVlBfQ0lQSEVSICpjaXBoZXIgPSBOVUxMOworKworKyAgICBpZiAoYWtleXN6ICE9IDE5 MikKKysJeworKwlwcmludGYoIkludmFsaWQga2V5IHNpemU6ICVkXG4iLCBha2V5c3opOworKwlF WElUKDEpOworKwl9CisrCisrICAgIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0JDIikgPT0gMCkK KysJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2NiYygpOworKyAgICBlbHNlIGlmIChzdHJjYXNlY21w KGFtb2RlLCAiRUNCIikgPT0gMCkKKysJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2VjYigpOworKyAg ICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0ZCNjQiKSA9PSAwKQorKwljaXBoZXIgPSBF VlBfZGVzX2VkZTNfY2ZiNjQoKTsKKysgICAgZWxzZSBpZiAoc3RybmNhc2VjbXAoYW1vZGUsICJP RkIiLCAzKSA9PSAwKQorKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfb2ZiKCk7CisrICAgIGVsc2Ug aWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjgiKSkKKysJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2Nm YjgoKTsKKysgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQorKwljaXBoZXIg PSBFVlBfZGVzX2VkZTNfY2ZiMSgpOworKyAgICBlbHNlCisrCXsKKysJcHJpbnRmKCJVbmtub3du IG1vZGU6ICVzXG4iLCBhbW9kZSk7CisrCUVYSVQoMSk7CisrCX0KKysKKysgICAgaWYgKEVWUF9D aXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBhS2V5LCBpVmVjLCBkaXIpIDw9IDApCisr CXJldHVybiAwOworKyAgICBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQorKwlNX0VWUF9D SVBIRVJfQ1RYX3NldF9mbGFncyhjdHgsIEVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpOworKyAg ICBFVlBfQ2lwaGVyKGN0eCwgb3V0LCBpbiwgbGVuKTsKKysKKysgICAgcmV0dXJuIDE7CisrICAg IH0KKysKKyt2b2lkIERlYnVnVmFsdWUoY2hhciAqdGFnLCB1bnNpZ25lZCBjaGFyICp2YWwsIGlu dCBsZW4pCisrICAgIHsKKysgICAgY2hhciBvYnVmWzIwNDhdOworKyAgICBpbnQgb2xlbjsKKysg ICAgb2xlbiA9IGJpbjJoZXgodmFsLCBsZW4sIG9idWYpOworKyAgICBwcmludGYoIiVzID0gJS4q c1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsKKysgICAgfQorKworK3ZvaWQgc2hpZnRpbih1bnNpZ25l ZCBjaGFyICpkc3QsdW5zaWduZWQgY2hhciAqc3JjLGludCBuYml0cykKKysgICAgeworKyAgICBp bnQgbjsKKysKKysgICAgLyogbW92ZSB0aGUgYnl0ZXMuLi4gKi8KKysgICAgbWVtbW92ZShkc3Qs ZHN0K25iaXRzLzgsMyo4LW5iaXRzLzgpOworKyAgICAvKiBhcHBlbmQgbmV3IGRhdGEgKi8KKysg ICAgbWVtY3B5KGRzdCszKjgtbmJpdHMvOCxzcmMsKG5iaXRzKzcpLzgpOworKyAgICAvKiBsZWZ0 IHNoaWZ0IHRoZSBiaXRzICovCisrICAgIGlmKG5iaXRzJTgpCisrCWZvcihuPTAgOyBuIDwgMyo4 IDsgKytuKQorKwkgICAgZHN0W25dPShkc3Rbbl0gPDwgKG5iaXRzJTgpKXwoZHN0W24rMV0gPj4g KDgtbmJpdHMlOCkpOworKyAgICB9CQorKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK2NoYXIgKnRfdGFnWzJdID0geyJQTEFJTlRFWFQiLCAi Q0lQSEVSVEVYVCJ9OworK2NoYXIgKnRfbW9kZVs2XSA9IHsiQ0JDIiwiRUNCIiwiT0ZCIiwiQ0ZC MSIsIkNGQjgiLCJDRkI2NCJ9OworK2VudW0gTW9kZSB7Q0JDLCBFQ0IsIE9GQiwgQ0ZCMSwgQ0ZC OCwgQ0ZCNjR9OworK2ludCBTaXplc1s2XT17NjQsNjQsNjQsMSw4LDY0fTsKKysKKyt2b2lkIGRv X21jdChjaGFyICphbW9kZSwgCisrCSAgICBpbnQgYWtleXN6LCBpbnQgbnVta2V5cywgdW5zaWdu ZWQgY2hhciAqYWtleSx1bnNpZ25lZCBjaGFyICppdmVjLAorKwkgICAgaW50IGRpciwgdW5zaWdu ZWQgY2hhciAqdGV4dCwgaW50IGxlbiwKKysJICAgIEZJTEUgKnJmcCkKKysgICAgeworKyAgICBp bnQgaSxpbW9kZTsKKysgICAgdW5zaWduZWQgY2hhciBua1s0KjhdOyAvKiBsb25nZXN0IGtleSs4 ICovCisrICAgIHVuc2lnbmVkIGNoYXIgdGV4dDBbOF07CisrCisrICAgIGZvciAoaW1vZGU9MCA7 IGltb2RlIDwgNiA7ICsraW1vZGUpCisrCWlmKCFzdHJjbXAoYW1vZGUsdF9tb2RlW2ltb2RlXSkp CisrCSAgICBicmVhazsKKysgICAgaWYgKGltb2RlID09IDYpCisrCXsgCisrCXByaW50ZigiVW5y ZWNvZ25pemVkIG1vZGU6ICVzXG4iLCBhbW9kZSk7CisrCUVYSVQoMSk7CisrCX0KKysKKysgICAg Zm9yKGk9MCA7IGkgPCA0MDAgOyArK2kpCisrCXsKKysJaW50IGo7CisrCWludCBuOworKwlpbnQg a3A9YWtleXN6LzY0OworKwl1bnNpZ25lZCBjaGFyIG9sZF9pdls4XTsKKysJRVZQX0NJUEhFUl9D VFggY3R4OworKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKwlmcHJpbnRmKHJmcCwi XG5DT1VOVCA9ICVkXG4iLGkpOworKwlpZihrcCA9PSAxKQorKwkgICAgT3V0cHV0VmFsdWUoIktF WSIsYWtleSw4LHJmcCwwKTsKKysJZWxzZQorKwkgICAgZm9yKG49MCA7IG4gPCBrcCA7ICsrbikK KysJCXsKKysJCWZwcmludGYocmZwLCJLRVklZCIsbisxKTsKKysJCU91dHB1dFZhbHVlKCIiLGFr ZXkrbio4LDgscmZwLDApOworKwkJfQorKworKwlpZihpbW9kZSAhPSBFQ0IpCisrCSAgICBPdXRw dXRWYWx1ZSgiSVYiLGl2ZWMsOCxyZnAsMCk7CisrCU91dHB1dFZhbHVlKHRfdGFnW2Rpcl4xXSx0 ZXh0LGxlbixyZnAsaW1vZGUgPT0gQ0ZCMSk7CisrI2lmIDAKKysJLyogY29tcGVuc2F0ZSBmb3Ig ZW5kaWFubmVzcyAqLworKwlpZihpbW9kZSA9PSBDRkIxKQorKwkgICAgdGV4dFswXTw8PTc7Cisr I2VuZGlmCisrCW1lbWNweSh0ZXh0MCx0ZXh0LDgpOworKworKwlmb3Ioaj0wIDsgaiA8IDEwMDAw IDsgKytqKQorKwkgICAgeworKwkgICAgdW5zaWduZWQgY2hhciBvbGRfdGV4dFs4XTsKKysKKysJ ICAgIG1lbWNweShvbGRfdGV4dCx0ZXh0LDgpOworKwkgICAgaWYoaiA9PSAwKQorKwkJeworKwkJ bWVtY3B5KG9sZF9pdixpdmVjLDgpOworKwkJREVTVGVzdCgmY3R4LGFtb2RlLGFrZXlzeixha2V5 LGl2ZWMsZGlyLHRleHQsdGV4dCxsZW4pOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJbWVt Y3B5KG9sZF9pdixjdHguaXYsOCk7CisrCQlFVlBfQ2lwaGVyKCZjdHgsdGV4dCx0ZXh0LGxlbik7 CisrCQl9CisrCSAgICBpZihqID09IDk5OTkpCisrCQl7CisrCQlPdXRwdXRWYWx1ZSh0X3RhZ1tk aXJdLHRleHQsbGVuLHJmcCxpbW9kZSA9PSBDRkIxKTsKKysJCS8qCQltZW1jcHkoaXZlYyx0ZXh0 LDgpOyAqLworKwkJfQorKwkgICAgLyoJICAgIERlYnVnVmFsdWUoIml2IixjdHguaXYsOCk7ICov CisrCSAgICAvKiBhY2N1bXVsYXRlIG1hdGVyaWFsIGZvciB0aGUgbmV4dCBrZXkgKi8KKysJICAg IHNoaWZ0aW4obmssdGV4dCxTaXplc1tpbW9kZV0pOworKwkgICAgLyoJICAgIERlYnVnVmFsdWUo Im5rIixuaywyNCk7Ki8KKysJICAgIGlmKChkaXIgJiYgKGltb2RlID09IENGQjEgfHwgaW1vZGUg PT0gQ0ZCOCB8fCBpbW9kZSA9PSBDRkI2NAorKwkJCXx8IGltb2RlID09IENCQykpIHx8IGltb2Rl ID09IE9GQikKKysJCW1lbWNweSh0ZXh0LG9sZF9pdiw4KTsKKysKKysJICAgIGlmKCFkaXIgJiYg KGltb2RlID09IENGQjEgfHwgaW1vZGUgPT0gQ0ZCOCB8fCBpbW9kZSA9PSBDRkI2NCkpCisrCQl7 CisrCQkvKiB0aGUgdGVzdCBzcGVjaWZpZXMgdXNpbmcgdGhlIG91dHB1dCBvZiB0aGUgcmF3IERF UyBvcGVyYXRpb24KKysJCSAgIHdoaWNoIHdlIGRvbid0IGhhdmUsIHNvIHJlY29uc3RydWN0IGl0 Li4uICovCisrCQlmb3Iobj0wIDsgbiA8IDggOyArK24pCisrCQkgICAgdGV4dFtuXV49b2xkX3Rl eHRbbl07CisrCQl9CisrCSAgICB9CisrCWZvcihuPTAgOyBuIDwgOCA7ICsrbikKKysJICAgIGFr ZXlbbl1ePW5rWzE2K25dOworKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCisrCSAgICBha2V5Wzgr bl1ePW5rWzgrbl07CisrCWZvcihuPTAgOyBuIDwgOCA7ICsrbikKKysJICAgIGFrZXlbMTYrbl1e PW5rW25dOworKwlpZihudW1rZXlzIDwgMykKKysJICAgIG1lbWNweSgmYWtleVsyKjhdLGFrZXks OCk7CisrCWlmKG51bWtleXMgPCAyKQorKwkgICAgbWVtY3B5KCZha2V5WzhdLGFrZXksOCk7Cisr CURFU19zZXRfb2RkX3Bhcml0eSgoREVTX2NibG9jayAqKWFrZXkpOworKwlERVNfc2V0X29kZF9w YXJpdHkoKERFU19jYmxvY2sgKikoYWtleSs4KSk7CisrCURFU19zZXRfb2RkX3Bhcml0eSgoREVT X2NibG9jayAqKShha2V5KzE2KSk7CisrCW1lbWNweShpdmVjLGN0eC5pdiw4KTsKKysKKysJLyog cG9pbnRsZXNzIGV4ZXJjaXNlIC0gdGhlIGZpbmFsIHRleHQgZG9lc24ndCBkZXBlbmQgb24gdGhl CisrCSAgIGluaXRpYWwgdGV4dCBpbiBPRkIgbW9kZSwgc28gd2hvIGNhcmVzIHdoYXQgaXQgaXM/ IChXaG8KKysJICAgZGVzaWduZWQgdGhlc2UgdGVzdHM/KSAqLworKwlpZihpbW9kZSA9PSBPRkIp CisrCSAgICBmb3Iobj0wIDsgbiA8IDggOyArK24pCisrCQl0ZXh0W25dPXRleHQwW25dXm9sZF9p dltuXTsKKysJfQorKyAgICB9CisrICAgIAorK2ludCBwcm9jX2ZpbGUoY2hhciAqcnFmaWxlLCBj aGFyICpyc3BmaWxlKQorKyAgICB7CisrICAgIGNoYXIgYWZuWzI1Nl0sIHJmblsyNTZdOworKyAg ICBGSUxFICphZnAgPSBOVUxMLCAqcmZwID0gTlVMTDsKKysgICAgY2hhciBpYnVmWzIwNDhdLCB0 YnVmWzIwNDhdOworKyAgICBpbnQgaWxlbiwgbGVuLCByZXQgPSAwOworKyAgICBjaGFyIGFtb2Rl WzhdID0gIiI7CisrICAgIGNoYXIgYXRlc3RbMTAwXSA9ICIiOworKyAgICBpbnQgYWtleXN6PTA7 CisrICAgIHVuc2lnbmVkIGNoYXIgaVZlY1syMF0sIGFLZXlbNDBdOworKyAgICBpbnQgZGlyID0g LTEsIGVyciA9IDAsIHN0ZXAgPSAwOworKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsyMDQ4 XTsKKysgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzIwNDhdOworKyAgICBjaGFyICpycDsK KysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBpbnQgbnVta2V5cz0xOworKyAgICBFVlBf Q0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKyAgICBpZiAoIXJxZmlsZSB8fCAhKCpycWZpbGUp KQorKwl7CisrCXByaW50ZigiTm8gcmVxIGZpbGVcbiIpOworKwlyZXR1cm4gLTE7CisrCX0KKysg ICAgc3RyY3B5KGFmbiwgcnFmaWxlKTsKKysKKysgICAgaWYgKChhZnAgPSBmb3BlbihhZm4sICJy IikpID09IE5VTEwpCisrCXsKKysJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIs IAorKwkgICAgICAgYWZuLCBzdHJlcnJvcihlcnJubykpOworKwlyZXR1cm4gLTE7CisrCX0KKysg ICAgaWYgKCFyc3BmaWxlKQorKwl7CisrCXN0cmNweShyZm4sYWZuKTsKKysJcnA9c3Ryc3RyKHJm biwicmVxLyIpOworKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgorKwlpZiAoIXJwKQorKwkgICAg cnA9c3Ryc3RyKHJmbiwicmVxXFwiKTsKKysjZW5kaWYKKysJYXNzZXJ0KHJwKTsKKysJbWVtY3B5 KHJwLCJyc3AiLDMpOworKwlycCA9IHN0cnN0cihyZm4sICIucmVxIik7CisrCW1lbWNweShycCwg Ii5yc3AiLCA0KTsKKysJcnNwZmlsZSA9IHJmbjsKKysJfQorKyAgICBpZiAoKHJmcCA9IGZvcGVu KHJzcGZpbGUsICJ3IikpID09IE5VTEwpCisrCXsKKysJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxl OiAlcywgJXNcbiIsIAorKwkgICAgICAgcmZuLCBzdHJlcnJvcihlcnJubykpOworKwlmY2xvc2Uo YWZwKTsKKysJYWZwID0gTlVMTDsKKysJcmV0dXJuIC0xOworKwl9CisrICAgIHdoaWxlICghZXJy ICYmIChmZ2V0cyhpYnVmLCBzaXplb2YoaWJ1ZiksIGFmcCkpICE9IE5VTEwpCisrCXsKKysJdGlk eV9saW5lKHRidWYsIGlidWYpOworKwlpbGVuID0gc3RybGVuKGlidWYpOworKwkvKglwcmludGYo InN0ZXA9JWQgaWJ1Zj0lcyIsc3RlcCxpYnVmKTsqLworKwlpZihzdGVwID09IDMgJiYgIXN0cmNt cChhbW9kZSwiRUNCIikpCisrCSAgICB7CisrCSAgICBtZW1zZXQoaVZlYywgMCwgc2l6ZW9mKGlW ZWMpKTsKKysJICAgIHN0ZXAgPSAoZGlyKT8gNDogNTsgIC8qIG5vIGl2ZWMgZm9yIEVDQiAqLwor KwkgICAgfQorKwlzd2l0Y2ggKHN0ZXApCisrCSAgICB7CisrCWNhc2UgMDogIC8qIHJlYWQgcHJl YW1ibGUgKi8KKysJICAgIGlmIChpYnVmWzBdID09ICdcbicpCisrCQl7IC8qIGVuZCBvZiBwcmVh bWJsZSAqLworKwkJaWYgKCphbW9kZSA9PSAnXDAnKQorKwkJICAgIHsKKysJCSAgICBwcmludGYo Ik1pc3NpbmcgTW9kZVxuIik7CisrCQkgICAgZXJyID0gMTsKKysJCSAgICB9CisrCQllbHNlCisr CQkgICAgeworKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCQkgICAgKysgc3RlcDsKKysJCSAg ICB9CisrCQl9CisrCSAgICBlbHNlIGlmIChpYnVmWzBdICE9ICcjJykKKysJCXsKKysJCXByaW50 ZigiSW52YWxpZCBwcmVhbWJsZSBpdGVtOiAlc1xuIiwgaWJ1Zik7CisrCQllcnIgPSAxOworKwkJ fQorKwkgICAgZWxzZQorKwkJeyAvKiBwcm9jZXNzIHByZWFtYmxlICovCisrCQljaGFyICp4cCwg KnBwID0gaWJ1ZisyOworKwkJaW50IG47CisrCQlpZigqYW1vZGUpCisrCQkgICAgeyAvKiBpbnNl cnQgY3VycmVudCB0aW1lICYgZGF0ZSAqLworKwkJICAgIHRpbWVfdCBydGltID0gdGltZSgwKTsK KysJCSAgICBmcHJpbnRmKHJmcCwgIiMgJXMiLCBjdGltZSgmcnRpbSkpOworKwkJICAgIH0KKysJ CWVsc2UKKysJCSAgICB7CisrCQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCSAgICBpZighc3Ry bmNtcChwcCwiSU5WRVJTRSAiLDgpIHx8ICFzdHJuY21wKHBwLCJERVMgIiw0KQorKwkJICAgICAg IHx8ICFzdHJuY21wKHBwLCJUREVTICIsNSkKKysJCSAgICAgICB8fCAhc3RybmNtcChwcCwiUEVS TVVUQVRJT04gIiwxMikKKysJCSAgICAgICB8fCAhc3RybmNtcChwcCwiU1VCU1RJVFVUSU9OICIs MTMpCisrCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlZBUklBQkxFICIsOSkpCisrCQkJeworKwkJ CS8qIGdldCB0ZXN0IHR5cGUgKi8KKysJCQlpZighc3RybmNtcChwcCwiREVTICIsNCkpCisrCQkJ ICAgIHBwKz00OworKwkJCWVsc2UgaWYoIXN0cm5jbXAocHAsIlRERVMgIiw1KSkKKysJCQkgICAg cHArPTU7CisrCQkJeHAgPSBzdHJjaHIocHAsICcgJyk7CisrCQkJbiA9IHhwLXBwOworKwkJCXN0 cm5jcHkoYXRlc3QsIHBwLCBuKTsKKysJCQlhdGVzdFtuXSA9ICdcMCc7CisrCQkJLyogZ2V0IG1v ZGUgKi8KKysJCQl4cCA9IHN0cnJjaHIocHAsICcgJyk7IC8qIGdldCBtb2RlIiAqLworKwkJCW4g PSBzdHJsZW4oeHArMSktMTsKKysJCQlzdHJuY3B5KGFtb2RlLCB4cCsxLCBuKTsKKysJCQlhbW9k ZVtuXSA9ICdcMCc7CisrCQkJLyogYW1vZGVbM10gPSAnXDAnOyAqLworKwkJCWlmIChWRVJCT1NF KQorKwkJCQlwcmludGYoIlRlc3Q9JXMsIE1vZGU9JXNcbiIsYXRlc3QsYW1vZGUpOworKwkJCX0K KysJCSAgICB9CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSAxOiAgLyogW0VOQ1JZUFRd IHwgW0RFQ1JZUFRdICovCisrCSAgICBpZihpYnVmWzBdID09ICdcbicpCisrCQlicmVhazsKKysJ ICAgIGlmIChpYnVmWzBdID09ICdbJykKKysJCXsKKysJCWZwdXRzKGlidWYsIHJmcCk7CisrCQkr K3N0ZXA7CisrCQlpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltFTkNSWVBUXSIsIDkpID09IDApCisr CQkgICAgZGlyID0gMTsKKysJCWVsc2UgaWYgKHN0cm5jYXNlY21wKGlidWYsICJbREVDUllQVF0i LCA5KSA9PSAwKQorKwkJICAgIGRpciA9IDA7CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIHBy aW50ZigiSW52YWxpZCBrZXl3b3JkOiAlc1xuIiwgaWJ1Zik7CisrCQkgICAgZXJyID0gMTsKKysJ CSAgICB9CisrCQlicmVhazsKKysJCX0KKysJICAgIGVsc2UgaWYgKGRpciA9PSAtMSkKKysJCXsK KysJCWVyciA9IDE7CisrCQlwcmludGYoIk1pc3NpbmcgRU5DUllQVC9ERUNSWVBUIGtleXdvcmRc biIpOworKwkJYnJlYWs7CisrCQl9CisrCSAgICBlbHNlIAorKwkJc3RlcCA9IDI7CisrCisrCWNh c2UgMjogLyogS0VZID0geHh4eCAqLworKwkgICAgaWYoKmlidWYgPT0gJ1xuJykKKysJCXsKKysJ ICAgICAgICBmcHV0cyhpYnVmLCByZnApOworKwkJYnJlYWs7CisrICAgICAgICAgICAgICAgIH0K KysJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJDT1VOVCA9ICIsOCkpCisrCQl7CisrCSAgICAg ICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCWJyZWFrOworKyAgICAgICAgICAgICAgICB9CisrCSAg ICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQ9Iiw2KSkKKysJCXsKKysJICAgICAgICBmcHV0 cyhpYnVmLCByZnApOworKwkJYnJlYWs7CisrICAgICAgICAgICAgICAgIH0KKysJICAgIGlmKCFz dHJuY2FzZWNtcChpYnVmLCJOdW1LZXlzID0gIiwxMCkpCisrCQl7CisrCQludW1rZXlzPWF0b2ko aWJ1ZisxMCk7CisrCQlicmVhazsKKysJCX0KKysJICAKKysJICAgIGZwdXRzKGlidWYsIHJmcCk7 CisrCSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiS0VZID0gIiw2KSkKKysJCXsKKysJCWFrZXlz ej02NDsKKysJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNiwgYUtleSk7CisrCQlpZiAobGVu IDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7CisrCQkgICAg ZXJyPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJUHJpbnRWYWx1ZSgiS0VZIiwgYUtl eSwgbGVuKTsKKysJCSsrc3RlcDsKKysJCX0KKysJICAgIGVsc2UgaWYoIXN0cm5jYXNlY21wKGli dWYsIktFWXMgPSAiLDcpKQorKwkJeworKwkJYWtleXN6PTY0KjM7CisrCQlsZW49aGV4MmJpbihp YnVmKzcsYUtleSk7CisrCQlpZihsZW4gIT0gOCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJ bnZhbGlkIEtFWVxuIik7CisrCQkgICAgZXJyPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQor KwkJbWVtY3B5KGFLZXkrOCxhS2V5LDgpOworKwkJbWVtY3B5KGFLZXkrMTYsYUtleSw4KTsKKysJ CWlidWZbNF09J1wwJzsKKysJCVByaW50VmFsdWUoIktFWXMiLGFLZXksbGVuKTsKKysJCSsrc3Rl cDsKKysJCX0KKysJICAgIGVsc2UgaWYoIXN0cm5jYXNlY21wKGlidWYsIktFWSIsMykpCisrCQl7 CisrCQlpbnQgbj1pYnVmWzNdLScxJzsKKysKKysJCWFrZXlzej02NCozOworKwkJbGVuPWhleDJi aW4oaWJ1Zis3LGFLZXkrbio4KTsKKysJCWlmKGxlbiAhPSA4KQorKwkJICAgIHsKKysJCSAgICBw cmludGYoIkludmFsaWQgS0VZXG4iKTsKKysJCSAgICBlcnI9MTsKKysJCSAgICBicmVhazsKKysJ CSAgICB9CisrCQlpYnVmWzRdPSdcMCc7CisrCQlQcmludFZhbHVlKGlidWYsYUtleSxsZW4pOwor KwkJaWYobiA9PSAyKQorKwkJICAgICsrc3RlcDsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJ CXByaW50ZigiTWlzc2luZyBLRVlcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGJyZWFr OworKworKwljYXNlIDM6IC8qIElWID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsK KysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiSVYgPSAiLCA1KSAhPSAwKQorKwkJeworKwkJ cHJpbnRmKCJNaXNzaW5nIElWXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisr CQl7CisrCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzUsIGlWZWMpOworKwkJaWYgKGxlbiA8 IDApCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBJVlxuIik7CisrCQkgICAgZXJy ID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCVByaW50VmFsdWUoIklWIiwgaVZlYywg bGVuKTsKKysJCXN0ZXAgPSAoZGlyKT8gNDogNTsKKysJCX0KKysJICAgIGJyZWFrOworKworKwlj YXNlIDQ6IC8qIFBMQUlOVEVYVCA9IHh4eHggKi8KKysJICAgIGZwdXRzKGlidWYsIHJmcCk7Cisr CSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIlBMQUlOVEVYVCA9ICIsIDEyKSAhPSAwKQorKwkJ eworKwkJcHJpbnRmKCJNaXNzaW5nIFBMQUlOVEVYVFxuIik7CisrCQllcnIgPSAxOworKwkJfQor KwkgICAgZWxzZQorKwkJeworKwkJaW50IG5uID0gc3RybGVuKGlidWYrMTIpOworKwkJaWYoIXN0 cmNtcChhbW9kZSwiQ0ZCMSIpKQorKwkJICAgIGxlbj1iaW50MmJpbihpYnVmKzEyLG5uLTEscGxh aW50ZXh0KTsKKysJCWVsc2UKKysJCSAgICBsZW49aGV4MmJpbihpYnVmKzEyLCBwbGFpbnRleHQp OworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBQTEFJ TlRFWFQ6ICVzIiwgaWJ1ZisxMik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJ ICAgIH0KKysJCWlmIChsZW4gPj0gc2l6ZW9mKHBsYWludGV4dCkpCisrCQkgICAgeworKwkJICAg IHByaW50ZigiQnVmZmVyIG92ZXJmbG93XG4iKTsKKysJCSAgICB9CisrCQlQcmludFZhbHVlKCJQ TEFJTlRFWFQiLCAodW5zaWduZWQgY2hhciopcGxhaW50ZXh0LCBsZW4pOworKwkJaWYgKHN0cmNt cChhdGVzdCwgIk1vbnRlIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KKysJCSAgICB7 CisrCQkgICAgZG9fbWN0KGFtb2RlLGFrZXlzeixudW1rZXlzLGFLZXksaVZlYyxkaXIscGxhaW50 ZXh0LGxlbixyZnApOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgYXNzZXJ0 KGRpciA9PSAxKTsKKysJCSAgICByZXQgPSBERVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFL ZXksIGlWZWMsIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwor KwkJCQkgIGNpcGhlcnRleHQsIHBsYWludGV4dCwgbGVuKTsKKysJCSAgICBPdXRwdXRWYWx1ZSgi Q0lQSEVSVEVYVCIsY2lwaGVydGV4dCxsZW4scmZwLAorKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIx IikpOworKwkJICAgIH0KKysJCXN0ZXAgPSA2OworKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNh c2UgNTogLyogQ0lQSEVSVEVYVCA9IHh4eHggKi8KKysJICAgIGZwdXRzKGlidWYsIHJmcCk7Cisr CSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIkNJUEhFUlRFWFQgPSAiLCAxMykgIT0gMCkKKysJ CXsKKysJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAg IGVsc2UKKysJCXsKKysJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKKysJCSAgICBsZW49Ymlu dDJiaW4oaWJ1ZisxMyxzdHJsZW4oaWJ1ZisxMyktMSxjaXBoZXJ0ZXh0KTsKKysJCWVsc2UKKysJ CSAgICBsZW4gPSBoZXgyYmluKGlidWYrMTMsY2lwaGVydGV4dCk7CisrCQlpZiAobGVuIDwgMCkK KysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIENJUEhFUlRFWFRcbiIpOworKwkJICAg IGVyciA9MTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCQkKKysJCVByaW50VmFsdWUoIkNJ UEhFUlRFWFQiLCBjaXBoZXJ0ZXh0LCBsZW4pOworKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1vbnRl IikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KKysJCSAgICB7CisrCQkgICAgZG9fbWN0 KGFtb2RlLCBha2V5c3osIG51bWtleXMsIGFLZXksIGlWZWMsIAorKwkJCSAgIGRpciwgY2lwaGVy dGV4dCwgbGVuLCByZnApOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgYXNz ZXJ0KGRpciA9PSAwKTsKKysJCSAgICByZXQgPSBERVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3os IGFLZXksIGlWZWMsIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAq LworKwkJCQkgIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKKysJCSAgICBPdXRwdXRWYWx1 ZSgiUExBSU5URVhUIiwodW5zaWduZWQgY2hhciAqKXBsYWludGV4dCxsZW4scmZwLAorKwkJCQkh c3RyY21wKGFtb2RlLCJDRkIxIikpOworKwkJICAgIH0KKysJCXN0ZXAgPSA2OworKwkJfQorKwkg ICAgYnJlYWs7CisrCisrCWNhc2UgNjoKKysJICAgIGlmIChpYnVmWzBdICE9ICdcbicpCisrCQl7 CisrCQllcnIgPSAxOworKwkJcHJpbnRmKCJNaXNzaW5nIHRlcm1pbmF0b3JcbiIpOworKwkJfQor KwkgICAgZWxzZSBpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgIT0gMCkKKysJCXsgLyogTUNUIGFs cmVhZHkgYWRkZWQgdGVybWluYXRpbmcgbmwgKi8KKysJCWZwdXRzKGlidWYsIHJmcCk7CisrCQl9 CisrCSAgICBzdGVwID0gMTsKKysJICAgIGJyZWFrOworKwkgICAgfQorKwl9CisrICAgIGlmIChy ZnApCisrCWZjbG9zZShyZnApOworKyAgICBpZiAoYWZwKQorKwlmY2xvc2UoYWZwKTsKKysgICAg cmV0dXJuIGVycjsKKysgICAgfQorKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgIFByb2Nlc3NlcyBlaXRoZXIgYSBzaW5nbGUgZmlsZSBv ciAKKysgIGEgc2V0IG9mIGZpbGVzIHdob3NlIG5hbWVzIGFyZSBwYXNzZWQgaW4gYSBmaWxlLgor KyAgQSBzaW5nbGUgZmlsZSBpcyBzcGVjaWZpZWQgYXM6CisrICAgIGFlc190ZXN0IC1mIHh4eC5y ZXEKKysgIEEgc2V0IG9mIGZpbGVzIGlzIHNwZWNpZmllZCBhczoKKysgICAgYWVzX3Rlc3QgLWQg eHh4eHgueHh4CisrICBUaGUgZGVmYXVsdCBpczogLWQgcmVxLnR4dAorKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKytpbnQgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCisrICAgIHsKKysgICAgY2hhciAqcnFsaXN0ID0gInJlcS50eHQiLCAq cnNwZmlsZSA9IE5VTEw7CisrICAgIEZJTEUgKmZwID0gTlVMTDsKKysgICAgY2hhciBmblsyNTBd ID0gIiIsIHJmblsyNTZdID0gIiI7CisrICAgIGludCBmX29wdCA9IDAsIGRfb3B0ID0gMTsKKysK KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwl7Cisr CWRvX3ByaW50X2Vycm9ycygpOworKwlFWElUKDEpOworKwl9CisrI2VuZGlmCisrICAgIGlmIChh cmdjID4gMSkKKysJeworKwlpZiAoc3RyY2FzZWNtcChhcmd2WzFdLCAiLWQiKSA9PSAwKQorKwkg ICAgeworKwkgICAgZF9vcHQgPSAxOworKwkgICAgfQorKwllbHNlIGlmIChzdHJjYXNlY21wKGFy Z3ZbMV0sICItZiIpID09IDApCisrCSAgICB7CisrCSAgICBmX29wdCA9IDE7CisrCSAgICBkX29w dCA9IDA7CisrCSAgICB9CisrCWVsc2UKKysJICAgIHsKKysJICAgIHByaW50ZigiSW52YWxpZCBw YXJhbWV0ZXI6ICVzXG4iLCBhcmd2WzFdKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKwlp ZiAoYXJnYyA8IDMpCisrCSAgICB7CisrCSAgICBwcmludGYoIk1pc3NpbmcgcGFyYW1ldGVyXG4i KTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKwlpZiAoZF9vcHQpCisrCSAgICBycWxpc3Qg PSBhcmd2WzJdOworKwllbHNlCisrCSAgICB7CisrCSAgICBzdHJjcHkoZm4sIGFyZ3ZbMl0pOwor KwkgICAgcnNwZmlsZSA9IGFyZ3ZbM107CisrCSAgICB9CisrCX0KKysgICAgaWYgKGRfb3B0KQor Kwl7IC8qIGxpc3Qgb2YgZmlsZXMgKGRpcmVjdG9yeSkgKi8KKysJaWYgKCEoZnAgPSBmb3Blbihy cWxpc3QsICJyIikpKQorKwkgICAgeworKwkgICAgcHJpbnRmKCJDYW5ub3Qgb3BlbiByZXEgbGlz dCBmaWxlXG4iKTsKKysJICAgIHJldHVybiAtMTsKKysJICAgIH0KKysJd2hpbGUgKGZnZXRzKGZu LCBzaXplb2YoZm4pLCBmcCkpCisrCSAgICB7CisrCSAgICBzdHJ0b2soZm4sICJcclxuIik7Cisr CSAgICBzdHJjcHkocmZuLCBmbik7CisrCSAgICBwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCBy Zm4pOworKwkgICAgaWYgKHByb2NfZmlsZShyZm4sIHJzcGZpbGUpKQorKwkJeworKwkJcHJpbnRm KCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIHJmbik7CisrCQlFWElUKDEp OworKwkJfQorKwkgICAgfQorKwlmY2xvc2UoZnApOworKwl9CisrICAgIGVsc2UgLyogc2luZ2xl IGZpbGUgKi8KKysJeworKwlpZiAoVkVSQk9TRSkKKysJCXByaW50ZigiUHJvY2Vzc2luZzogJXNc biIsIGZuKTsKKysJaWYgKHByb2NfZmlsZShmbiwgcnNwZmlsZSkpCisrCSAgICB7CisrCSAgICBw cmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwgZm4pOworKwkgICAg fQorKwl9CisrICAgIEVYSVQoMCk7CisrICAgIHJldHVybiAwOworKyAgICB9CisrCisrI2VuZGlm CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGh2cy5jLmZp cHMgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RodnMuYworLS0tIG9wZW5z c2wtMS4wLjFrL2NyeXB0by9maXBzL2NhdnMvZmlwc19kaHZzLmMuZmlwcwkyMDE1LTAxLTA5IDA5 OjUxOjUxLjU1MzkyMjMzNiArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2Nh dnMvZmlwc19kaHZzLmMJMjAxNS0wMS0wOSAwOTo1MTo1MS41NTM5MjIzMzYgKzAxMDAKK0BAIC0w LDAgKzEsMjkyIEBACisrLyogZmlwcy9kaC9maXBzX2RodnMuYyAqLworKy8qIFdyaXR0ZW4gYnkg RHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAor KyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIw MTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK KysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAg ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdh cmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cu T3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBh bmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Cisr ICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBw bGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisr CisrCisrI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Ns Y29uZi5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPHN0ZGlvLmg+Cisr CisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgICAgcHJpbnRmKCJObyBG SVBTIERIIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKyNlbHNlCisrCisrI2lu Y2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9kaC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8 c3RyaW5nLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgi CisrCisrc3RhdGljIGNvbnN0IEVWUF9NRCAqcGFyc2VfbWQoY2hhciAqbGluZSkKKysJeworKwlj aGFyICpwOworKwlpZiAobGluZVswXSAhPSAnWycgfHwgbGluZVsxXSAhPSAnRicpCisrCQlyZXR1 cm4gTlVMTDsKKysJcCA9IHN0cmNocihsaW5lLCAnLScpOworKwlpZiAoIXApCisrCQlyZXR1cm4g TlVMTDsKKysJbGluZSA9IHAgKyAxOworKwlwID0gc3RyY2hyKGxpbmUsICddJyk7CisrCWlmICgh cCkKKysJCXJldHVybiBOVUxMOworKwkqcCA9IDA7CisrCXAgPSBsaW5lOworKwl3aGlsZShpc3Nw YWNlKCpwKSkKKysJCXArKzsKKysJaWYgKCFzdHJjbXAocCwgIlNIQTEiKSkKKysJCXJldHVybiBF VlBfc2hhMSgpOworKwllbHNlIGlmICghc3RyY21wKHAsICJTSEEyMjQiKSkKKysJCXJldHVybiBF VlBfc2hhMjI0KCk7CisrCWVsc2UgaWYgKCFzdHJjbXAocCwgIlNIQTI1NiIpKQorKwkJcmV0dXJu IEVWUF9zaGEyNTYoKTsKKysJZWxzZSBpZiAoIXN0cmNtcChwLCAiU0hBMzg0IikpCisrCQlyZXR1 cm4gRVZQX3NoYTM4NCgpOworKwllbHNlIGlmICghc3RyY21wKHAsICJTSEE1MTIiKSkKKysJCXJl dHVybiBFVlBfc2hhNTEyKCk7CisrCWVsc2UKKysJCXJldHVybiBOVUxMOworKwl9CisrCisrc3Rh dGljIHZvaWQgb3V0cHV0X1poYXNoKEZJTEUgKm91dCwgaW50IGV4b3V0LAorKwkJCQlESCAqZGgs IEJJR05VTSAqcGVlcmtleSwgY29uc3QgRVZQX01EICptZCwKKysJCQkJdW5zaWduZWQgY2hhciAq cmhhc2gsIHNpemVfdCByaGFzaGxlbikKKysJeworKwl1bnNpZ25lZCBjaGFyICpaOworKwl1bnNp Z25lZCBjaGFyIGNoYXNoW0VWUF9NQVhfTURfU0laRV07CisrCWludCBabGVuOworKwlpZiAocmhh c2ggPT0gTlVMTCkKKysJCXsKKysJCXJoYXNobGVuID0gTV9FVlBfTURfc2l6ZShtZCk7CisrCQlp ZiAoIURIX2dlbmVyYXRlX2tleShkaCkpCisrCQkJZXhpdCAoMSk7CisrCQlkb19ibl9wcmludF9u YW1lKG91dCwgIlllcGhlbUlVVCIsIGRoLT5wdWJfa2V5KTsKKysJCWlmIChleG91dCkKKysJCQlk b19ibl9wcmludF9uYW1lKG91dCwgIlhlcGhlbUlVVCIsIGRoLT5wcml2X2tleSk7CisrCQl9Cisr CVogPSBPUEVOU1NMX21hbGxvYyhCTl9udW1fYnl0ZXMoZGgtPnApKTsKKysJaWYgKCFaKQorKwkJ ZXhpdCgxKTsKKysJWmxlbiA9IERIX2NvbXB1dGVfa2V5X3BhZGRlZChaLCBwZWVya2V5LCBkaCk7 CisrCWlmIChleG91dCkKKysJCU91dHB1dFZhbHVlKCJaIiwgWiwgWmxlbiwgb3V0LCAwKTsKKysJ RklQU19kaWdlc3QoWiwgWmxlbiwgY2hhc2gsIE5VTEwsIG1kKTsKKysJT3V0cHV0VmFsdWUocmhh c2ggPyAiSVVUSGFzaFpaIiA6ICJIYXNoWloiLCBjaGFzaCwgcmhhc2hsZW4sIG91dCwgMCk7Cisr CWlmIChyaGFzaCkKKysJCXsKKysJCWZwcmludGYob3V0LCAiUmVzdWx0ID0gJXNcbiIsCisrCQkJ CW1lbWNtcChjaGFzaCwgcmhhc2gsIHJoYXNobGVuKSA/ICJGIiA6ICJQIik7CisrCQl9CisrCWVs c2UKKysJCXsKKysJCUJOX2NsZWFyX2ZyZWUoZGgtPnByaXZfa2V5KTsKKysJCUJOX2NsZWFyX2Zy ZWUoZGgtPnB1Yl9rZXkpOworKwkJZGgtPnByaXZfa2V5ID0gTlVMTDsKKysJCWRoLT5wdWJfa2V5 ID0gTlVMTDsKKysJCX0KKysJT1BFTlNTTF9jbGVhbnNlKFosIFpsZW4pOworKwlPUEVOU1NMX2Zy ZWUoWik7CisrCX0KKysKKysjaWZkZWYgRklQU19BTEdWUworK2ludCBmaXBzX2RodnNfbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCisrI2Vsc2UKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCisrI2VuZGlmCisrCXsKKysJY2hhciAqKmFyZ3MgPSBhcmd2ICsgMTsKKysJaW50IGFy Z24gPSBhcmdjIC0gMTsKKysJRklMRSAqaW4sICpvdXQ7CisrCWNoYXIgYnVmWzIwNDhdLCBsYnVm WzIwNDhdOworKwl1bnNpZ25lZCBjaGFyICpyaGFzaDsKKysJbG9uZyByaGFzaGxlbjsKKysJREgg KmRoID0gTlVMTDsKKysJY29uc3QgRVZQX01EICptZCA9IE5VTEw7CisrCUJJR05VTSAqcGVlcmtl eSA9IE5VTEw7CisrCWNoYXIgKmtleXdvcmQgPSBOVUxMLCAqdmFsdWUgPSBOVUxMOworKwlpbnQg ZG9fdmVyaWZ5ID0gLTEsIGV4b3V0ID0gMDsKKysKKysJZmlwc19hbGd0ZXN0X2luaXQoKTsKKysK KysJaWYgKGFyZ24gJiYgIXN0cmNtcCgqYXJncywgImRodmVyIikpCisrCQl7CisrCQlkb192ZXJp ZnkgPSAxOworKwkJYXJncysrOworKwkJYXJnbi0tOworKwkJfQorKwllbHNlIGlmIChhcmduICYm ICFzdHJjbXAoKmFyZ3MsICJkaGdlbiIpKQorKwkJeworKwkJZG9fdmVyaWZ5ID0gMDsKKysJCWFy Z3MrKzsKKysJCWFyZ24tLTsKKysJCX0KKysKKysJaWYgKGFyZ24gJiYgIXN0cmNtcCgqYXJncywg Ii1leG91dCIpKQorKwkJeworKwkJZXhvdXQgPSAxOworKwkJYXJncysrOworKwkJYXJnbi0tOwor KwkJfQorKworKwlpZiAoZG9fdmVyaWZ5ID09IC0xKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIs IiVzIFtkaHZlcnxkaGdlbnxdIFstZXhvdXRdIChpbmZpbGUgb3V0ZmlsZSlcbiIsYXJndlswXSk7 CisrCQlleGl0KDEpOworKwkJfQorKworKwlpZiAoYXJnbiA9PSAyKQorKwkJeworKwkJaW4gPSBm b3BlbigqYXJncywgInIiKTsKKysJCWlmICghaW4pCisrCQkJeworKwkJCWZwcmludGYoc3RkZXJy LCAiRXJyb3Igb3BlbmluZyBpbnB1dCBmaWxlXG4iKTsKKysJCQlleGl0KDEpOworKwkJCX0KKysJ CW91dCA9IGZvcGVuKGFyZ3NbMV0sICJ3Iik7CisrCQlpZiAoIW91dCkKKysJCQl7CisrCQkJZnBy aW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIG91dHB1dCBmaWxlXG4iKTsKKysJCQlleGl0KDEp OworKwkJCX0KKysJCX0KKysJZWxzZSBpZiAoYXJnbiA9PSAwKQorKwkJeworKwkJaW4gPSBzdGRp bjsKKysJCW91dCA9IHN0ZG91dDsKKysJCX0KKysJZWxzZQorKwkJeworKwkJZnByaW50ZihzdGRl cnIsIiVzIFtkaHZlcnxkaGdlbnxdIFstZXhvdXRdIChpbmZpbGUgb3V0ZmlsZSlcbiIsYXJndlsw XSk7CisrCQlleGl0KDEpOworKwkJfQorKworKwlkaCA9IEZJUFNfZGhfbmV3KCk7CisrCisrCXdo aWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBpbikgIT0gTlVMTCkKKysJCXsKKysJCWZwdXRz KGJ1Ziwgb3V0KTsKKysJCWlmIChzdHJsZW4oYnVmKSA+IDYgJiYgIXN0cm5jbXAoYnVmLCAiW0Yi LCAyKSkKKysJCQl7CisrCQkJbWQgPSBwYXJzZV9tZChidWYpOworKwkJCWlmIChtZCA9PSBOVUxM KQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCWlmIChkaCkKKysJCQkJRklQU19kaF9mcmVl KGRoKTsKKysJCQlkaCA9IEZJUFNfZGhfbmV3KCk7CisrCQkJY29udGludWU7CisrCQkJfQorKwkJ aWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQkJY29udGlu dWU7CisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiUCIpKQorKwkJCXsKKysJCQlpZiAoIWRvX2hl eDJibigmZGgtPnAsIHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQll bHNlIGlmICghc3RyY21wKGtleXdvcmQsICJRIikpCisrCQkJeworKwkJCWlmICghZG9faGV4MmJu KCZkaC0+cSwgdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwgIkciKSkKKysJCQl7CisrCQkJaWYgKCFkb19oZXgyYm4oJmRo LT5nLCB2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCAiWGVwaGVtSVVUIikpCisrCQkJeworKwkJCWlmICghZG9faGV4MmJu KCZkaC0+cHJpdl9rZXksIHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9Cisr CQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJZZXBoZW1JVVQiKSkKKysJCQl7CisrCQkJaWYg KCFkb19oZXgyYm4oJmRoLT5wdWJfa2V5LCB2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7 CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWWVwaGVtQ0FWUyIpKQorKwkJ CXsKKysJCQlpZiAoIWRvX2hleDJibigmcGVlcmtleSwgdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNl X2Vycm9yOworKwkJCWlmIChkb192ZXJpZnkgPT0gMCkKKysJCQkJb3V0cHV0X1poYXNoKG91dCwg ZXhvdXQsIGRoLCBwZWVya2V5LCBtZCwKKysJCQkJCQkJTlVMTCwgMCk7CisrCQkJfQorKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiQ0FWU0hhc2haWiIpKQorKwkJCXsKKysJCQlpZiAoIW1k KQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCXJoYXNoID0gaGV4MmJpbl9tKHZhbHVlLCAm cmhhc2hsZW4pOworKwkJCWlmICghcmhhc2ggfHwgcmhhc2hsZW4gIT0gTV9FVlBfTURfc2l6ZSht ZCkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJb3V0cHV0X1poYXNoKG91dCwgZXhvdXQs IGRoLCBwZWVya2V5LCBtZCwKKysJCQkJCQkJcmhhc2gsIHJoYXNobGVuKTsKKysJCQl9CisrCQl9 CisrCWlmIChpbiAmJiBpbiAhPSBzdGRpbikKKysJCWZjbG9zZShpbik7CisrCWlmIChvdXQgJiYg b3V0ICE9IHN0ZG91dCkKKysJCWZjbG9zZShvdXQpOworKwlyZXR1cm4gMDsKKysJcGFyc2VfZXJy b3I6CisrCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgUGFyc2luZyByZXF1ZXN0IGZpbGVcbiIpOwor KwlleGl0KDEpOworKwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfZHJiZ3ZzLmMuZmlwcyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfZHJiZ3ZzLmMKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfZHJiZ3ZzLmMuZmlwcwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU1MzkyMjMzNiArMDEwMAor KysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2NhdnMvZmlwc19kcmJndnMuYwkyMDE1LTAx LTA5IDA5OjUxOjUxLjU1MzkyMjMzNiArMDEwMAorQEAgLTAsMCArMSw0MTYgQEAKKysvKiBmaXBz L3JhbmQvZmlwc19kcmJndnMuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNv biAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICov CisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJv amVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAq CisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJp YnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysg KgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVj dCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAq ICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5v ciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0 ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2 LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUg Zm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8p IgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9K RUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAq IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQ Uk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisrCisrI2RlZmluZSBPUEVO U1NMX0ZJUFNBUEkKKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZm5k ZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisraW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIERSQkcgc3VwcG9ydFxu Iik7CisrICAgIHJldHVybigwKTsKKyt9CisrI2Vsc2UKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9i bi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+Cisr I2luY2x1ZGUgPGN0eXBlLmg+CisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrc3RhdGlj IGludCBkcGFyc2VfbWQoY2hhciAqc3RyKQorKwl7CisrCXN3aXRjaChhdG9pKHN0ciArIDUpKQor KwkJeworKwkJY2FzZSAxOgorKwkJcmV0dXJuIE5JRF9zaGExOworKworKwkJY2FzZSAyMjQ6Cisr CQlyZXR1cm4gTklEX3NoYTIyNDsKKysKKysJCWNhc2UgMjU2OgorKwkJcmV0dXJuIE5JRF9zaGEy NTY7CisrCisrCQljYXNlIDM4NDoKKysJCXJldHVybiBOSURfc2hhMzg0OworKworKwkJY2FzZSA1 MTI6CisrCQlyZXR1cm4gTklEX3NoYTUxMjsKKysKKysJCX0KKysKKysJcmV0dXJuIE5JRF91bmRl ZjsKKysJfQorKworK3N0YXRpYyBpbnQgcGFyc2VfZWMoY2hhciAqc3RyKQorKwl7CisrCWludCBj dXJ2ZV9uaWQsIG1kX25pZDsKKysJY2hhciAqbWQ7CisrCW1kID0gc3RyY2hyKHN0ciwgJyAnKTsK KysJaWYgKCFtZCkKKysJCXJldHVybiBOSURfdW5kZWY7CisrCWlmICghc3RybmNtcChzdHIsICJb UC0yNTYiLCA2KSkKKysJCWN1cnZlX25pZCA9IE5JRF9YOV82Ml9wcmltZTI1NnYxOworKwllbHNl IGlmICghc3RybmNtcChzdHIsICJbUC0zODQiLCA2KSkKKysJCWN1cnZlX25pZCA9IE5JRF9zZWNw Mzg0cjE7CisrCWVsc2UgaWYgKCFzdHJuY21wKHN0ciwgIltQLTUyMSIsIDYpKQorKwkJY3VydmVf bmlkID0gTklEX3NlY3A1MjFyMTsKKysJZWxzZQorKwkJcmV0dXJuIE5JRF91bmRlZjsKKysJbWRf bmlkID0gZHBhcnNlX21kKG1kKTsKKysJaWYgKG1kX25pZCA9PSBOSURfdW5kZWYpCisrCQlyZXR1 cm4gTklEX3VuZGVmOworKwlyZXR1cm4gKGN1cnZlX25pZCA8PCAxNikgfCBtZF9uaWQ7CisrCX0K KysKKytzdGF0aWMgaW50IHBhcnNlX2FlcyhjaGFyICpzdHIsIGludCAqcGRmKQorKwl7CisrCisr CWlmICghc3RybmNtcChzdHIgKyA5LCAibm8iLCAyKSkKKysJCSpwZGYgPSAwOworKwllbHNlCisr CQkqcGRmID0gRFJCR19GTEFHX0NUUl9VU0VfREY7CisrCisrCXN3aXRjaChhdG9pKHN0ciArIDUp KQorKwkJeworKwkJY2FzZSAxMjg6CisrCQlyZXR1cm4gTklEX2Flc18xMjhfY3RyOworKworKwkJ Y2FzZSAxOTI6CisrCQlyZXR1cm4gTklEX2Flc18xOTJfY3RyOworKworKwkJY2FzZSAyNTY6Cisr CQlyZXR1cm4gTklEX2Flc18yNTZfY3RyOworKworKwkJZGVmYXVsdDoKKysJCXJldHVybiBOSURf dW5kZWY7CisrCisrCQl9CisrCX0KKysKKyt0eXBlZGVmIHN0cnVjdCAKKysJeworKwl1bnNpZ25l ZCBjaGFyICplbnQ7CisrCXNpemVfdCBlbnRsZW47CisrCXVuc2lnbmVkIGNoYXIgKm5vbmNlOwor KwlzaXplX3Qgbm9uY2VsZW47CisrCX0gVEVTVF9FTlQ7CisrCisrc3RhdGljIHNpemVfdCB0ZXN0 X2VudHJvcHkoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXpl X3QgbWF4X2xlbikKKysJeworKwlURVNUX0VOVCAqdCA9IEZJUFNfZHJiZ19nZXRfYXBwX2RhdGEo ZGN0eCk7CisrCSpwb3V0ID0gKHVuc2lnbmVkIGNoYXIgKil0LT5lbnQ7CisrCXJldHVybiB0LT5l bnRsZW47CisrCX0KKysKKytzdGF0aWMgc2l6ZV90IHRlc3Rfbm9uY2UoRFJCR19DVFggKmRjdHgs IHVuc2lnbmVkIGNoYXIgKipwb3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbikKKysJeworKwlURVNU X0VOVCAqdCA9IEZJUFNfZHJiZ19nZXRfYXBwX2RhdGEoZGN0eCk7CisrCSpwb3V0ID0gKHVuc2ln bmVkIGNoYXIgKil0LT5ub25jZTsKKysJcmV0dXJuIHQtPm5vbmNlbGVuOworKwl9CisrCisrI2lm ZGVmIEZJUFNfQUxHVlMKKytpbnQgZmlwc19kcmJndnNfbWFpbihpbnQgYXJnYyxjaGFyICoqYXJn dikKKysjZWxzZQorK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQorKyNlbmRpZgorKwl7 CisrCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7CisrCURSQkdfQ1RYICpkY3R4ID0gTlVM TDsKKysJVEVTVF9FTlQgdDsKKysJaW50IHIsIG5pZCA9IDA7CisrCWludCBwciA9IDA7CisrCWNo YXIgYnVmWzIwNDhdLCBsYnVmWzIwNDhdOworKwl1bnNpZ25lZCBjaGFyIHJhbmRvdXRbMjA0OF07 CisrCWNoYXIgKmtleXdvcmQgPSBOVUxMLCAqdmFsdWUgPSBOVUxMOworKworKwl1bnNpZ25lZCBj aGFyICplbnQgPSBOVUxMLCAqbm9uY2UgPSBOVUxMLCAqcGVycyA9IE5VTEwsICphZGluID0gTlVM TDsKKysJbG9uZyBlbnRsZW4sIG5vbmNlbGVuLCBwZXJzbGVuLCBhZGlubGVuOworKwlpbnQgZGYg PSAwOworKworKwllbnVtIGR0eXBlIHsgRFJCR19OT05FLCBEUkJHX0NUUiwgRFJCR19IQVNILCBE UkJHX0hNQUMsIERSQkdfRFVBTF9FQyB9CisrCQlkcmJnX3R5cGUgPSBEUkJHX05PTkU7CisrCisr CWludCByYW5kb3V0bGVuID0gMDsKKysKKysJaW50IGdlbiA9IDA7CisrCisrCWZpcHNfYWxndGVz dF9pbml0KCk7CisrCisrCWlmIChhcmdjID09IDMpCisrCQl7CisrCQlpbiA9IGZvcGVuKGFyZ3Zb MV0sICJyIik7CisrCQlpZiAoIWluKQorKwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9y IG9wZW5pbmcgaW5wdXQgZmlsZVxuIik7CisrCQkJZXhpdCgxKTsKKysJCQl9CisrCQlvdXQgPSBm b3Blbihhcmd2WzJdLCAidyIpOworKwkJaWYgKCFvdXQpCisrCQkJeworKwkJCWZwcmludGYoc3Rk ZXJyLCAiRXJyb3Igb3BlbmluZyBvdXRwdXQgZmlsZVxuIik7CisrCQkJZXhpdCgxKTsKKysJCQl9 CisrCQl9CisrCWVsc2UgaWYgKGFyZ2MgPT0gMSkKKysJCXsKKysJCWluID0gc3RkaW47CisrCQlv dXQgPSBzdGRvdXQ7CisrCQl9CisrCWVsc2UKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCIlcyAo aW5maWxlIG91dGZpbGUpXG4iLGFyZ3ZbMF0pOworKwkJZXhpdCgxKTsKKysJCX0KKysKKysJd2hp bGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGluKSAhPSBOVUxMKQorKwkJeworKwkJZnB1dHMo YnVmLCBvdXQpOworKwkJaWYgKGRyYmdfdHlwZSA9PSBEUkJHX05PTkUpCisrCQkJeworKwkJCWlm IChzdHJzdHIoYnVmLCAiQ1RSX0RSQkciKSkKKysJCQkJZHJiZ190eXBlID0gRFJCR19DVFI7Cisr CQkJZWxzZSBpZiAoc3Ryc3RyKGJ1ZiwgIkhhc2hfRFJCRyIpKQorKwkJCQlkcmJnX3R5cGUgPSBE UkJHX0hBU0g7CisrCQkJZWxzZSBpZiAoc3Ryc3RyKGJ1ZiwgIkhNQUNfRFJCRyIpKQorKwkJCQlk cmJnX3R5cGUgPSBEUkJHX0hNQUM7CisrCQkJZWxzZSBpZiAoc3Ryc3RyKGJ1ZiwgIkR1YWxfRUNf RFJCRyIpKQorKwkJCQlkcmJnX3R5cGUgPSBEUkJHX0RVQUxfRUM7CisrCQkJZWxzZQorKwkJCQlj b250aW51ZTsKKysJCQl9CisrCQlpZiAoc3RybGVuKGJ1ZikgPiA0ICYmICFzdHJuY21wKGJ1Ziwg IltTSEEtIiwgNSkpCisrCQkJeworKwkJCW5pZCA9IGRwYXJzZV9tZChidWYpOworKwkJCWlmIChu aWQgPT0gTklEX3VuZGVmKQorKwkJCQlleGl0KDEpOworKwkJCWlmIChkcmJnX3R5cGUgPT0gRFJC R19ITUFDKQorKwkJCQl7CisrCQkJCXN3aXRjaCAobmlkKQorKwkJCQkJeworKwkJCQkJY2FzZSBO SURfc2hhMToKKysJCQkJCW5pZCA9IE5JRF9obWFjV2l0aFNIQTE7CisrCQkJCQlicmVhazsKKysK KysJCQkJCWNhc2UgTklEX3NoYTIyNDoKKysJCQkJCW5pZCA9IE5JRF9obWFjV2l0aFNIQTIyNDsK KysJCQkJCWJyZWFrOworKworKwkJCQkJY2FzZSBOSURfc2hhMjU2OgorKwkJCQkJbmlkID0gTklE X2htYWNXaXRoU0hBMjU2OworKwkJCQkJYnJlYWs7CisrCisrCQkJCQljYXNlIE5JRF9zaGEzODQ6 CisrCQkJCQluaWQgPSBOSURfaG1hY1dpdGhTSEEzODQ7CisrCQkJCQlicmVhazsKKysKKysJCQkJ CWNhc2UgTklEX3NoYTUxMjoKKysJCQkJCW5pZCA9IE5JRF9obWFjV2l0aFNIQTUxMjsKKysJCQkJ CWJyZWFrOworKworKwkJCQkJZGVmYXVsdDoKKysJCQkJCWV4aXQoMSk7CisrCQkJCQl9CisrCQkJ CX0KKysJCQl9CisrCQlpZiAoc3RybGVuKGJ1ZikgPiAxMiAmJiAhc3RybmNtcChidWYsICJbQUVT LSIsIDUpKQorKwkJCXsKKysJCQluaWQgPSBwYXJzZV9hZXMoYnVmLCAmZGYpOworKwkJCWlmIChu aWQgPT0gTklEX3VuZGVmKQorKwkJCQlleGl0KDEpOworKwkJCX0KKysJCWlmIChzdHJsZW4oYnVm KSA+IDEyICYmICFzdHJuY21wKGJ1ZiwgIltQLSIsIDMpKQorKwkJCXsKKysJCQluaWQgPSBwYXJz ZV9lYyhidWYpOworKwkJCWlmIChuaWQgPT0gTklEX3VuZGVmKQorKwkJCQlleGl0KDEpOworKwkJ CX0KKysJCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJ CWNvbnRpbnVlOworKworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIltQcmVkaWN0aW9uUmVzaXN0 YW5jZSIpKQorKwkJCXsKKysJCQlpZiAoIXN0cmNtcCh2YWx1ZSwgIlRydWVdIikpCisrCQkJCXBy ID0gMTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiRmFsc2VdIikpCisrCQkJCXByID0g MDsKKysJCQllbHNlCisrCQkJCWV4aXQoMSk7CisrCQkJfQorKworKwkJaWYgKCFzdHJjbXAoa2V5 d29yZCwgIkVudHJvcHlJbnB1dCIpKQorKwkJCXsKKysJCQllbnQgPSBoZXgyYmluX20odmFsdWUs ICZlbnRsZW4pOworKwkJCXQuZW50ID0gZW50OworKwkJCXQuZW50bGVuID0gZW50bGVuOworKwkJ CX0KKysKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJOb25jZSIpKQorKwkJCXsKKysJCQlub25j ZSA9IGhleDJiaW5fbSh2YWx1ZSwgJm5vbmNlbGVuKTsKKysJCQl0Lm5vbmNlID0gbm9uY2U7Cisr CQkJdC5ub25jZWxlbiA9IG5vbmNlbGVuOworKwkJCX0KKysKKysJCWlmICghc3RyY21wKGtleXdv cmQsICJQZXJzb25hbGl6YXRpb25TdHJpbmciKSkKKysJCQl7CisrCQkJcGVycyA9IGhleDJiaW5f bSh2YWx1ZSwgJnBlcnNsZW4pOworKwkJCWlmIChuaWQgPT0gMCkKKysJCQkJeworKwkJCQlmcHJp bnRmKHN0ZGVyciwgIkRSQkcgdHlwZSBub3QgcmVjb2duaXNlZCFcbiIpOworKwkJCQlleGl0ICgx KTsKKysJCQkJfQorKwkJCWRjdHggPSBGSVBTX2RyYmdfbmV3KG5pZCwgZGYgfCBEUkJHX0ZMQUdf VEVTVCk7CisrCQkJaWYgKCFkY3R4KQorKwkJCQlleGl0ICgxKTsKKysJCQlGSVBTX2RyYmdfc2V0 X2NhbGxiYWNrcyhkY3R4LCB0ZXN0X2VudHJvcHksIDAsIDAsCisrCQkJCQkJCXRlc3Rfbm9uY2Us IDApOworKwkJCUZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoZGN0eCwgJnQpOworKwkJCXJhbmRvdXRs ZW4gPSAoaW50KUZJUFNfZHJiZ19nZXRfYmxvY2tsZW5ndGgoZGN0eCk7CisrCQkJciA9IEZJUFNf ZHJiZ19pbnN0YW50aWF0ZShkY3R4LCBwZXJzLCBwZXJzbGVuKTsKKysJCQlpZiAoIXIpCisrCQkJ CXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBpbnN0YW50aWF0aW5nIERSQkdcbiIpOwor KwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJT1BFTlNTTF9mcmVlKHBlcnMpOworKwkJCU9QRU5T U0xfZnJlZShlbnQpOworKwkJCU9QRU5TU0xfZnJlZShub25jZSk7CisrCQkJZW50ID0gbm9uY2Ug PSBwZXJzID0gTlVMTDsKKysJCQlnZW4gPSAwOworKwkJCX0KKysKKysJCWlmICghc3RyY21wKGtl eXdvcmQsICJBZGRpdGlvbmFsSW5wdXQiKSkKKysJCQl7CisrCQkJYWRpbiA9IGhleDJiaW5fbSh2 YWx1ZSwgJmFkaW5sZW4pOworKwkJCWlmIChwcikKKysJCQkJY29udGludWU7CisrCQkJciA9IEZJ UFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCByYW5kb3V0bGVuLCAwLAorKwkJCQkJCQkJ YWRpbiwgYWRpbmxlbik7CisrCQkJaWYgKCFyKQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJy LCAiRXJyb3IgZ2VuZXJhdGluZyBEUkJHIGJpdHNcbiIpOworKwkJCQlleGl0KDEpOworKwkJCQl9 CisrCQkJaWYgKCFyKQorKwkJCQlleGl0KDEpOworKwkJCU9QRU5TU0xfZnJlZShhZGluKTsKKysJ CQlhZGluID0gTlVMTDsKKysJCQlnZW4rKzsKKysJCQl9CisrCisrCQlpZiAocHIpCisrCQkJewor KwkJCWlmICghc3RyY21wKGtleXdvcmQsICJFbnRyb3B5SW5wdXRQUiIpKQorKwkJCQl7CisrCQkJ CWVudCA9IGhleDJiaW5fbSh2YWx1ZSwgJmVudGxlbik7CisrCQkJCXQuZW50ID0gZW50OworKwkJ CQl0LmVudGxlbiA9IGVudGxlbjsKKysJCQkJciA9IEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LAor KwkJCQkJCQlyYW5kb3V0LCByYW5kb3V0bGVuLAorKwkJCQkJCQkxLCBhZGluLCBhZGlubGVuKTsK KysJCQkJaWYgKCFyKQorKwkJCQkJeworKwkJCQkJZnByaW50ZihzdGRlcnIsCisrCQkJCQkJIkVy cm9yIGdlbmVyYXRpbmcgRFJCRyBiaXRzXG4iKTsKKysJCQkJCWV4aXQoMSk7CisrCQkJCQl9Cisr CQkJCU9QRU5TU0xfZnJlZShhZGluKTsKKysJCQkJT1BFTlNTTF9mcmVlKGVudCk7CisrCQkJCWFk aW4gPSBlbnQgPSBOVUxMOworKwkJCQlnZW4rKzsKKysJCQkJfQorKwkJCX0KKysJCWlmICghc3Ry Y21wKGtleXdvcmQsICJFbnRyb3B5SW5wdXRSZXNlZWQiKSkKKysJCQl7CisrCQkJZW50ID0gaGV4 MmJpbl9tKHZhbHVlLCAmZW50bGVuKTsKKysJCQl0LmVudCA9IGVudDsKKysJCQl0LmVudGxlbiA9 IGVudGxlbjsKKysJCQl9CisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiQWRkaXRpb25hbElucHV0 UmVzZWVkIikpCisrCQkJeworKwkJCWFkaW4gPSBoZXgyYmluX20odmFsdWUsICZhZGlubGVuKTsK KysJCQlGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIGFkaW4sIGFkaW5sZW4pOworKwkJCU9QRU5TU0xf ZnJlZShlbnQpOworKwkJCU9QRU5TU0xfZnJlZShhZGluKTsKKysJCQllbnQgPSBhZGluID0gTlVM TDsKKysJCQl9CisrCQlpZiAoZ2VuID09IDIpCisrCQkJeworKwkJCU91dHB1dFZhbHVlKCJSZXR1 cm5lZEJpdHMiLCByYW5kb3V0LCByYW5kb3V0bGVuLAorKwkJCQkJCQkJCW91dCwgMCk7CisrCQkJ RklQU19kcmJnX2ZyZWUoZGN0eCk7CisrCQkJZGN0eCA9IE5VTEw7CisrCQkJZ2VuID0gMDsKKysJ CQl9CisrCisrCQl9CisrCWlmIChpbiAmJiBpbiAhPSBzdGRpbikKKysJCWZjbG9zZShpbik7Cisr CWlmIChvdXQgJiYgb3V0ICE9IHN0ZG91dCkKKysJCWZjbG9zZShvdXQpOworKwlyZXR1cm4gMDsK KysJfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX2Rzc3ZzLmMuZmlwcyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNf ZHNzdnMuYworLS0tIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2NhdnMvZmlwc19kc3N2cy5j LmZpcHMJMjAxNS0wMS0wOSAwOTo1MTo1MS41NTM5MjIzMzYgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4xay9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMuYwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU1 MzkyMjMzNiArMDEwMAorQEAgLTAsMCArMSw1MzcgQEAKKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVu c3NsY29uZi5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPHN0ZGlvLmg+ CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgICAgcHJpbnRmKCJO byBGSVBTIERTQSBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysjZWxzZQorKwor KyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8Y3R5 cGUuaD4KKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytzdGF0aWMgdm9pZCBwYm4oY29u c3QgY2hhciAqbmFtZSwgQklHTlVNICpibikKKysJeworKwlpbnQgbGVuLCBpOworKwl1bnNpZ25l ZCBjaGFyICp0bXA7CisrCWxlbiA9IEJOX251bV9ieXRlcyhibik7CisrCXRtcCA9IE9QRU5TU0xf bWFsbG9jKGxlbik7CisrCWlmICghdG1wKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJNZW1v cnkgYWxsb2NhdGlvbiBlcnJvclxuIik7CisrCQlyZXR1cm47CisrCQl9CisrCUJOX2JuMmJpbihi biwgdG1wKTsKKysJcHJpbnRmKCIlcyA9ICIsIG5hbWUpOworKwlmb3IgKGkgPSAwOyBpIDwgbGVu OyBpKyspCisrCQlwcmludGYoIiUwMlgiLCB0bXBbaV0pOworKwlmcHV0cygiXG4iLCBzdGRvdXQp OworKwlPUEVOU1NMX2ZyZWUodG1wKTsKKysJcmV0dXJuOworKwl9CisrCisrdm9pZCBwcmltZXMo KQorKyAgICB7CisrICAgIGNoYXIgYnVmWzEwMjQwXTsKKysgICAgY2hhciBsYnVmWzEwMjQwXTsK KysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6 ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlmcHV0cyhidWYsc3Rkb3V0KTsKKysJaWYg KCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQljb250aW51ZTsK KysJaWYoIXN0cmNtcChrZXl3b3JkLCJQcmltZSIpKQorKwkgICAgeworKwkgICAgQklHTlVNICpw cDsKKysKKysJICAgIHBwPUJOX25ldygpOworKwkgICAgZG9faGV4MmJuKCZwcCx2YWx1ZSk7Cisr CSAgICBwcmludGYoInJlc3VsdD0gJWNcbiIsCisrCQkgICBCTl9pc19wcmltZV9leChwcCwyMCxO VUxMLE5VTEwpID8gJ1AnIDogJ0YnKTsKKysJICAgIH0JICAgIAorKwl9CisrICAgIH0KKysKKyt2 b2lkIHBxZygpCisrICAgIHsKKysgICAgY2hhciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1Zlsx MDI0XTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKyAgICBpbnQgbm1vZD0wOworKwor KyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlp ZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJCWZw dXRzKGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9CisrCWlmKCFzdHJjbXAoa2V5d29y ZCwiW21vZCIpKQorKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtl eXdvcmQsIk4iKSkKKysJICAgIHsKKysJICAgIGludCBuPWF0b2kodmFsdWUpOworKworKwkgICAg cHJpbnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7CisrCisrCSAgICB3aGlsZShuLS0pCisrCQl7 CisrCQl1bnNpZ25lZCBjaGFyIHNlZWRbMjBdOworKwkJRFNBICpkc2E7CisrCQlpbnQgY291bnRl cjsKKysJCXVuc2lnbmVkIGxvbmcgaDsKKysJCWRzYSA9IEZJUFNfZHNhX25ldygpOworKworKwkJ aWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2Qsc2VlZCwwLCZjb3VudGVy LCZoLE5VTEwpKQorKwkJCXsKKysJCQlkb19wcmludF9lcnJvcnMoKTsKKysJCQlleGl0KDEpOwor KwkJCX0KKysJCXBibigiUCIsZHNhLT5wKTsKKysJCXBibigiUSIsZHNhLT5xKTsKKysJCXBibigi RyIsZHNhLT5nKTsKKysJCXB2KCJTZWVkIixzZWVkLDIwKTsKKysJCXByaW50ZigiYyA9ICVkXG4i LGNvdW50ZXIpOworKwkJcHJpbnRmKCJIID0gJWx4XG4iLGgpOworKwkJcHV0YygnXG4nLHN0ZG91 dCk7CisrCQl9CisrCSAgICB9CisrCWVsc2UKKysJICAgIGZwdXRzKGJ1ZixzdGRvdXQpOworKwl9 CisrICAgIH0KKysKKyt2b2lkIHBxZ3ZlcigpCisrICAgIHsKKysgICAgY2hhciBidWZbMTAyNF07 CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKyAg ICBCSUdOVU0gKnAgPSBOVUxMLCAqcSA9IE5VTEwsICpnID0gTlVMTDsKKysgICAgaW50IGNvdW50 ZXIsIGNvdW50ZXIyOworKyAgICB1bnNpZ25lZCBsb25nIGgsIGgyOworKyAgICBEU0EgKmRzYT1O VUxMOworKyAgICBpbnQgbm1vZD0wOworKyAgICB1bnNpZ25lZCBjaGFyIHNlZWRbMTAyNF07Cisr CisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7Cisr CWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJeworKwkJ ZnB1dHMoYnVmLHN0ZG91dCk7CisrCQljb250aW51ZTsKKysJCX0KKysJZnB1dHMoYnVmLCBzdGRv dXQpOworKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKKysJICAgIG5tb2Q9YXRvaSh2YWx1 ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJQIikpCisrCSAgICBwPWhleDJibih2YWx1 ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJRIikpCisrCSAgICBxPWhleDJibih2YWx1 ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCisrCSAgICBnPWhleDJibih2YWx1 ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJTZWVkIikpCisrCSAgICB7CisrCSAgICBp bnQgc2xlbiA9IGhleDJiaW4odmFsdWUsIHNlZWQpOworKwkgICAgaWYgKHNsZW4gIT0gMjApCisr CQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIlNlZWQgcGFyc2UgbGVuZ3RoIGVycm9yXG4iKTsKKysJ CWV4aXQgKDEpOworKwkJfQorKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiYyIp KQorKwkgICAgY291bnRlciA9YXRvaShidWYrNCk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3Jk LCJIIikpCisrCSAgICB7CisrCSAgICBoID0gYXRvaSh2YWx1ZSk7CisrCSAgICBpZiAoIXAgfHwg IXEgfHwgIWcpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIlBhcnNlIEVycm9yXG4iKTsKKysJ CWV4aXQgKDEpOworKwkJfQorKwkgICAgZHNhID0gRklQU19kc2FfbmV3KCk7CisrCSAgICBpZiAo IURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxzZWVkLDIwICwmY291bnRlcjIs JmgyLE5VTEwpKQorKwkJCXsKKysJCQlkb19wcmludF9lcnJvcnMoKTsKKysJCQlleGl0KDEpOwor KwkJCX0KKysgICAgICAgICAgICBpZiAoQk5fY21wKGRzYS0+cCwgcCkgfHwgQk5fY21wKGRzYS0+ cSwgcSkgfHwgQk5fY21wKGRzYS0+ZywgZykKKysJCXx8IChjb3VudGVyICE9IGNvdW50ZXIyKSB8 fCAoaCAhPSBoMikpCisrCSAgICAJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsKKysJICAgIGVsc2UK KysJICAgIAlwcmludGYoIlJlc3VsdCA9IFBcbiIpOworKwkgICAgQk5fZnJlZShwKTsKKysJICAg IEJOX2ZyZWUocSk7CisrCSAgICBCTl9mcmVlKGcpOworKwkgICAgcCA9IE5VTEw7CisrCSAgICBx ID0gTlVMTDsKKysJICAgIGcgPSBOVUxMOworKwkgICAgRklQU19kc2FfZnJlZShkc2EpOworKwkg ICAgZHNhID0gTlVMTDsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisrLyogS2V5cGFpciB2ZXJp ZmljYXRpb24gcm91dGluZS4gTkI6IHRoaXMgaXNuJ3QgcGFydCBvZiB0aGUgc3RhbmRhcmQgRklQ UzE0MC0yCisrICogYWxnb3JpdGhtIHRlc3RzLiBJdCBpcyBhbiBhZGRpdGlvbmFsIHRlc3QgdG8g cGVyZm9ybSBzYW5pdHkgY2hlY2tzIG9uIHRoZQorKyAqIG91dHB1dCBvZiB0aGUgS2V5UGFpciB0 ZXN0LgorKyAqLworKworK3N0YXRpYyBpbnQgZHNzX3BhcmFtY2hlY2soaW50IG5tb2QsIEJJR05V TSAqcCwgQklHTlVNICpxLCBCSUdOVU0gKmcsCisrCQkJCQkJCUJOX0NUWCAqY3R4KQorKyAgICB7 CisrICAgIEJJR05VTSAqcmVtID0gTlVMTDsKKysgICAgaWYgKEJOX251bV9iaXRzKHApICE9IG5t b2QpCisrCXJldHVybiAwOworKyAgICBpZiAoQk5fbnVtX2JpdHMocSkgIT0gMTYwKQorKwlyZXR1 cm4gMDsKKysgICAgaWYgKEJOX2lzX3ByaW1lX2V4KHAsIEJOX3ByaW1lX2NoZWNrcywgY3R4LCBO VUxMKSAhPSAxKQorKwlyZXR1cm4gMDsKKysgICAgaWYgKEJOX2lzX3ByaW1lX2V4KHEsIEJOX3By aW1lX2NoZWNrcywgY3R4LCBOVUxMKSAhPSAxKQorKwlyZXR1cm4gMDsKKysgICAgcmVtID0gQk5f bmV3KCk7CisrICAgIGlmICghQk5fbW9kKHJlbSwgcCwgcSwgY3R4KSB8fCAhQk5faXNfb25lKHJl bSkKKysgICAgCXx8IChCTl9jbXAoZywgQk5fdmFsdWVfb25lKCkpIDw9IDApCisrCXx8ICFCTl9t b2RfZXhwKHJlbSwgZywgcSwgcCwgY3R4KSB8fCAhQk5faXNfb25lKHJlbSkpCisrCXsKKysJQk5f ZnJlZShyZW0pOworKwlyZXR1cm4gMDsKKysJfQorKyAgICAvKiBUb2RvOiBjaGVjayBnICovCisr ICAgIEJOX2ZyZWUocmVtKTsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKyt2b2lkIGtleXZl cigpCisrICAgIHsKKysgICAgY2hhciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsK KysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKyAgICBCSUdOVU0gKnAgPSBOVUxMLCAqcSA9 IE5VTEwsICpnID0gTlVMTCwgKlggPSBOVUxMLCAqWSA9IE5VTEw7CisrICAgIEJJR05VTSAqWTI7 CisrICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsKKysgICAgaW50IG5tb2Q9MCwgcGFyYW1jaGVjayA9 IDA7CisrCisrICAgIGN0eCA9IEJOX0NUWF9uZXcoKTsKKysgICAgWTIgPSBCTl9uZXcoKTsKKysK KysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJ aWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7CisrCQlm cHV0cyhidWYsc3Rkb3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlpZighc3RyY21wKGtleXdv cmQsIlttb2QiKSkKKysJICAgIHsKKysJICAgIGlmIChwKQorKwkJQk5fZnJlZShwKTsKKysJICAg IHAgPSBOVUxMOworKwkgICAgaWYgKHEpCisrCQlCTl9mcmVlKHEpOworKwkgICAgcSA9IE5VTEw7 CisrCSAgICBpZiAoZykKKysJCUJOX2ZyZWUoZyk7CisrCSAgICBnID0gTlVMTDsKKysJICAgIHBh cmFtY2hlY2sgPSAwOworKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKKysJICAgIH0KKysJZWxzZSBp Zighc3RyY21wKGtleXdvcmQsIlAiKSkKKysJICAgIHA9aGV4MmJuKHZhbHVlKTsKKysJZWxzZSBp Zighc3RyY21wKGtleXdvcmQsIlEiKSkKKysJICAgIHE9aGV4MmJuKHZhbHVlKTsKKysJZWxzZSBp Zighc3RyY21wKGtleXdvcmQsIkciKSkKKysJICAgIGc9aGV4MmJuKHZhbHVlKTsKKysJZWxzZSBp Zighc3RyY21wKGtleXdvcmQsIlgiKSkKKysJICAgIFg9aGV4MmJuKHZhbHVlKTsKKysJZWxzZSBp Zighc3RyY21wKGtleXdvcmQsIlkiKSkKKysJICAgIHsKKysJICAgIFk9aGV4MmJuKHZhbHVlKTsK KysJICAgIGlmICghcCB8fCAhcSB8fCAhZyB8fCAhWCB8fCAhWSkKKysJCXsKKysJCWZwcmludGYo c3RkZXJyLCAiUGFyc2UgRXJyb3JcbiIpOworKwkJZXhpdCAoMSk7CisrCQl9CisrCSAgICBwYm4o IlAiLHApOworKwkgICAgcGJuKCJRIixxKTsKKysJICAgIHBibigiRyIsZyk7CisrCSAgICBwYm4o IlgiLFgpOworKwkgICAgcGJuKCJZIixZKTsKKysJICAgIGlmICghcGFyYW1jaGVjaykKKysJCXsK KysJCWlmIChkc3NfcGFyYW1jaGVjayhubW9kLCBwLCBxLCBnLCBjdHgpKQorKwkJCXBhcmFtY2hl Y2sgPSAxOworKwkJZWxzZQorKwkJCXBhcmFtY2hlY2sgPSAtMTsKKysJCX0KKysJICAgIGlmIChw YXJhbWNoZWNrICE9IDEpCisrCSAgIAlwcmludGYoIlJlc3VsdCA9IEZcbiIpOworKwkgICAgZWxz ZQorKwkJeworKwkJaWYgKCFCTl9tb2RfZXhwKFkyLCBnLCBYLCBwLCBjdHgpIHx8IEJOX2NtcChZ MiwgWSkpCisrCSAgICAJCXByaW50ZigiUmVzdWx0ID0gRlxuIik7CisrCSAgICAgICAgZWxzZQor KwkgICAgCQlwcmludGYoIlJlc3VsdCA9IFBcbiIpOworKwkJfQorKwkgICAgQk5fZnJlZShYKTsK KysJICAgIEJOX2ZyZWUoWSk7CisrCSAgICBYID0gTlVMTDsKKysJICAgIFkgPSBOVUxMOworKwkg ICAgfQorKwl9CisrCWlmIChwKQorKwkgICAgQk5fZnJlZShwKTsKKysJaWYgKHEpCisrCSAgICBC Tl9mcmVlKHEpOworKwlpZiAoZykKKysJICAgIEJOX2ZyZWUoZyk7CisrCWlmIChZMikKKysJICAg IEJOX2ZyZWUoWTIpOworKyAgICB9CisrCisrdm9pZCBrZXlwYWlyKCkKKysgICAgeworKyAgICBj aGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICBjaGFyICprZXl3b3Jk LCAqdmFsdWU7CisrICAgIGludCBubW9kPTA7CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXpl b2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwg JnZhbHVlLCBsYnVmLCBidWYpKQorKwkJeworKwkJZnB1dHMoYnVmLHN0ZG91dCk7CisrCQljb250 aW51ZTsKKysJCX0KKysJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCisrCSAgICBubW9kPWF0 b2kodmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTiIpKQorKwkgICAgeworKwkg ICAgRFNBICpkc2E7CisrCSAgICBpbnQgbj1hdG9pKHZhbHVlKTsKKysKKysJICAgIHByaW50Zigi W21vZCA9ICVkXVxuXG4iLG5tb2QpOworKwkgICAgZHNhID0gRklQU19kc2FfbmV3KCk7CisrCSAg ICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxOVUxMLDAsTlVMTCxO VUxMLE5VTEwpKQorKwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQlleGl0KDEpOworKwkJ fQorKwkgICAgcGJuKCJQIixkc2EtPnApOworKwkgICAgcGJuKCJRIixkc2EtPnEpOworKwkgICAg cGJuKCJHIixkc2EtPmcpOworKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7CisrCisrCSAgICB3aGls ZShuLS0pCisrCQl7CisrCQlpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKKysJCQl7CisrCQkJ ZG9fcHJpbnRfZXJyb3JzKCk7CisrCQkJZXhpdCgxKTsKKysJCQl9CisrCisrCQlwYm4oIlgiLGRz YS0+cHJpdl9rZXkpOworKwkJcGJuKCJZIixkc2EtPnB1Yl9rZXkpOworKwkJcHV0YygnXG4nLHN0 ZG91dCk7CisrCQl9CisrCSAgICB9CisrCX0KKysgICAgfQorKworK3ZvaWQgc2lnZ2VuKCkKKysg ICAgeworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICBj aGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIGludCBubW9kPTA7CisrICAgIERTQSAqZHNhPU5V TEw7CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQor Kwl7CisrCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJ eworKwkJZnB1dHMoYnVmLHN0ZG91dCk7CisrCQljb250aW51ZTsKKysJCX0KKysJaWYoIXN0cmNt cChrZXl3b3JkLCJbbW9kIikpCisrCSAgICB7CisrCSAgICBubW9kPWF0b2kodmFsdWUpOworKwkg ICAgcHJpbnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7CisrCSAgICBpZiAoZHNhKQorKwkJRklQ U19kc2FfZnJlZShkc2EpOworKwkgICAgZHNhID0gRklQU19kc2FfbmV3KCk7CisrCSAgICBpZiAo IURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxOVUxMLDAsTlVMTCxOVUxMLE5V TEwpKQorKwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQlleGl0KDEpOworKwkJfQorKwkg ICAgcGJuKCJQIixkc2EtPnApOworKwkgICAgcGJuKCJRIixkc2EtPnEpOworKwkgICAgcGJuKCJH Iixkc2EtPmcpOworKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7CisrCSAgICB9CisrCWVsc2UgaWYo IXN0cmNtcChrZXl3b3JkLCJNc2ciKSkKKysJICAgIHsKKysJICAgIHVuc2lnbmVkIGNoYXIgbXNn WzEwMjRdOworKwkgICAgdW5zaWduZWQgY2hhciBzYnVmWzYwXTsKKysJICAgIHVuc2lnbmVkIGlu dCBzbGVuOworKwkgICAgaW50IG47CisrCSAgICBFVlBfUEtFWSBwazsKKysJICAgIEVWUF9NRF9D VFggbWN0eDsKKysJICAgIERTQV9TSUcgKnNpZzsKKysJICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0 eCk7CisrCisrCSAgICBuPWhleDJiaW4odmFsdWUsbXNnKTsKKysJICAgIHB2KCJNc2ciLG1zZyxu KTsKKysKKysJICAgIGlmICghRFNBX2dlbmVyYXRlX2tleShkc2EpKQorKwkJeworKwkJZG9fcHJp bnRfZXJyb3JzKCk7CisrCQlleGl0KDEpOworKwkJfQorKwkgICAgcGsudHlwZSA9IEVWUF9QS0VZ X0RTQTsKKysJICAgIHBrLnBrZXkuZHNhID0gZHNhOworKwkgICAgcGJuKCJZIixkc2EtPnB1Yl9r ZXkpOworKworKwkgICAgRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKTsK KysJICAgIEVWUF9TaWduVXBkYXRlKCZtY3R4LCBtc2csIG4pOworKwkgICAgRVZQX1NpZ25GaW5h bCgmbWN0eCwgc2J1ZiwgJnNsZW4sICZwayk7CisrCisrCSAgICBzaWcgPSBEU0FfU0lHX25ldygp OworKwkgICAgRklQU19kc2Ffc2lnX2RlY29kZShzaWcsIHNidWYsIHNsZW4pOworKworKwkgICAg cGJuKCJSIixzaWctPnIpOworKwkgICAgcGJuKCJTIixzaWctPnMpOworKwkgICAgcHV0YygnXG4n LHN0ZG91dCk7CisrCSAgICBEU0FfU0lHX2ZyZWUoc2lnKTsKKysJICAgIEVWUF9NRF9DVFhfY2xl YW51cCgmbWN0eCk7CisrCSAgICB9CisrCX0KKysJaWYgKGRzYSkKKysJCUZJUFNfZHNhX2ZyZWUo ZHNhKTsKKysgICAgfQorKworK3ZvaWQgc2lndmVyKCkKKysgICAgeworKyAgICBEU0EgKmRzYT1O VUxMOworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICB1 bnNpZ25lZCBjaGFyIG1zZ1sxMDI0XTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKyAg ICBpbnQgbm1vZD0wLCBuPTA7CisrICAgIERTQV9TSUcgc2csICpzaWcgPSAmc2c7CisrCisrICAg IHNpZy0+ciA9IE5VTEw7CisrICAgIHNpZy0+cyA9IE5VTEw7CisrCisrICAgIHdoaWxlKGZnZXRz KGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWlmICghcGFyc2VfbGluZSgm a2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJeworKwkJZnB1dHMoYnVmLHN0ZG91dCk7 CisrCQljb250aW51ZTsKKysJCX0KKysJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCisrCSAg ICB7CisrCSAgICBubW9kPWF0b2kodmFsdWUpOworKwkgICAgaWYoZHNhKQorKwkJRklQU19kc2Ff ZnJlZShkc2EpOworKwkgICAgZHNhPUZJUFNfZHNhX25ldygpOworKwkgICAgfQorKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiUCIpKQorKwkgICAgZHNhLT5wPWhleDJibih2YWx1ZSk7CisrCWVs c2UgaWYoIXN0cmNtcChrZXl3b3JkLCJRIikpCisrCSAgICBkc2EtPnE9aGV4MmJuKHZhbHVlKTsK KysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkciKSkKKysJICAgIHsKKysJICAgIGRzYS0+Zz1o ZXgyYm4odmFsdWUpOworKworKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7Cisr CSAgICBwYm4oIlAiLGRzYS0+cCk7CisrCSAgICBwYm4oIlEiLGRzYS0+cSk7CisrCSAgICBwYm4o IkciLGRzYS0+Zyk7CisrCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKKysJICAgIH0KKysJZWxzZSBp Zighc3RyY21wKGtleXdvcmQsIk1zZyIpKQorKwkgICAgeworKwkgICAgbj1oZXgyYmluKHZhbHVl LG1zZyk7CisrCSAgICBwdigiTXNnIixtc2csbik7CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNt cChrZXl3b3JkLCJZIikpCisrCSAgICBkc2EtPnB1Yl9rZXk9aGV4MmJuKHZhbHVlKTsKKysJZWxz ZSBpZighc3RyY21wKGtleXdvcmQsIlIiKSkKKysJICAgIHNpZy0+cj1oZXgyYm4odmFsdWUpOwor KwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUyIpKQorKwkgICAgeworKwkgICAgRVZQX01EX0NU WCBtY3R4OworKwkgICAgRVZQX1BLRVkgcGs7CisrCSAgICB1bnNpZ25lZCBjaGFyIHNpZ2J1Zls2 MF07CisrCSAgICB1bnNpZ25lZCBpbnQgc2xlbjsKKysJICAgIGludCByOworKwkgICAgRVZQX01E X0NUWF9pbml0KCZtY3R4KTsKKysJICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9EU0E7CisrCSAgICBw ay5wa2V5LmRzYSA9IGRzYTsKKysJICAgIHNpZy0+cz1oZXgyYm4odmFsdWUpOworKwkKKysJICAg IHBibigiWSIsZHNhLT5wdWJfa2V5KTsKKysJICAgIHBibigiUiIsc2lnLT5yKTsKKysJICAgIHBi bigiUyIsc2lnLT5zKTsKKysKKysJICAgIHNsZW4gPSBGSVBTX2RzYV9zaWdfZW5jb2RlKHNpZ2J1 Ziwgc2lnKTsKKysJICAgIEVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxM KTsKKysJICAgIEVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIG1zZywgbik7CisrCSAgICByID0gRVZQ X1ZlcmlmeUZpbmFsKCZtY3R4LCBzaWdidWYsIHNsZW4sICZwayk7CisrCSAgICBFVlBfTURfQ1RY X2NsZWFudXAoJm1jdHgpOworKwkKKysJICAgIHByaW50ZigiUmVzdWx0ID0gJWNcbiIsIHIgPT0g MSA/ICdQJyA6ICdGJyk7CisrCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKKysJICAgIH0KKysJfQor KyAgICB9CisrCisraW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCisrICAgIHsKKysgICAg aWYoYXJnYyAhPSAyKQorKwl7CisrCWZwcmludGYoc3RkZXJyLCIlcyBbcHJpbWV8cHFnfHBxZ3Zl cnxrZXlwYWlyfHNpZ2dlbnxzaWd2ZXJdXG4iLGFyZ3ZbMF0pOworKwlleGl0KDEpOworKwl9Cisr ICAgIGlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwl7CisrCWRvX3ByaW50X2Vycm9ycygpOworKwll eGl0KDEpOworKwl9CisrICAgIGlmKCFzdHJjbXAoYXJndlsxXSwicHJpbWUiKSkKKysJcHJpbWVz KCk7CisrICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJwcWciKSkKKysJcHFnKCk7CisrICAg IGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJwcWd2ZXIiKSkKKysJcHFndmVyKCk7CisrICAgIGVs c2UgaWYoIXN0cmNtcChhcmd2WzFdLCJrZXlwYWlyIikpCisrCWtleXBhaXIoKTsKKysgICAgZWxz ZSBpZighc3RyY21wKGFyZ3ZbMV0sImtleXZlciIpKQorKwlrZXl2ZXIoKTsKKysgICAgZWxzZSBp Zighc3RyY21wKGFyZ3ZbMV0sInNpZ2dlbiIpKQorKwlzaWdnZW4oKTsKKysgICAgZWxzZSBpZigh c3RyY21wKGFyZ3ZbMV0sInNpZ3ZlciIpKQorKwlzaWd2ZXIoKTsKKysgICAgZWxzZQorKwl7Cisr CWZwcmludGYoc3RkZXJyLCJEb24ndCBrbm93IGhvdyB0byAlcy5cbiIsYXJndlsxXSk7CisrCWV4 aXQoMSk7CisrCX0KKysKKysgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysjZW5kaWYKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2NhdnMvZmlwc19nY210ZXN0LmMuZmlwcyBv cGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZ2NtdGVzdC5jCistLS0gb3BlbnNz bC0xLjAuMWsvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2djbXRlc3QuYy5maXBzCTIwMTUtMDEtMDkg MDk6NTE6NTEuNTU0OTIyMzU5ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX2djbXRlc3QuYwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU1NDkyMjM1OSArMDEwMAor QEAgLTAsMCArMSw1NzEgQEAKKysvKiBmaXBzL2Flcy9maXBzX2djbXRlc3QuYyAqLworKy8qIFdy aXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUg T3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmln aHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisr ICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVy dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICog ICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Cisr ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0 dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBU b29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAg IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3 aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysg KgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUg Y2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVp ciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBP cGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0g d2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQ UkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV VAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S IFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE CisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisrICovCisrCisrCisrI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKKysjaW5jbHVkZSA8b3BlbnNz bC9vcGVuc3NsY29uZi5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPHN0 ZGlvLmg+CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgICAgcHJp bnRmKCJObyBGSVBTIEdDTSBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysjZWxz ZQorKworKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVk ZSA8Y3R5cGUuaD4KKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytzdGF0aWMgdm9pZCBn Y210ZXN0KEZJTEUgKmluLCBGSUxFICpvdXQsIGludCBlbmNyeXB0KQorKwl7CisrCWNoYXIgYnVm WzIwNDhdOworKwljaGFyIGxidWZbMjA0OF07CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysJ aW50IGtleWxlbiA9IC0xLCBpdmxlbiA9IC0xLCBhYWRsZW4gPSAtMSwgdGFnbGVuID0gLTEsIHB0 bGVuID0gLTE7CisrCWludCBydjsKKysJbG9uZyBsOworKwl1bnNpZ25lZCBjaGFyICprZXkgPSBO VUxMLCAqaXYgPSBOVUxMLCAqYWFkID0gTlVMTCwgKnRhZyA9IE5VTEw7CisrCXVuc2lnbmVkIGNo YXIgKmN0ID0gTlVMTCwgKnB0ID0gTlVMTDsKKysJRVZQX0NJUEhFUl9DVFggY3R4OworKwljb25z dCBFVlBfQ0lQSEVSICpnY20gPSBOVUxMOworKwlGSVBTX2NpcGhlcl9jdHhfaW5pdCgmY3R4KTsK KysKKysJd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsaW4pICE9IE5VTEwpCisrCQl7CisrCQlm cHV0cyhidWYsb3V0KTsKKysJCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVm LCBidWYpKQorKwkJCWNvbnRpbnVlOworKwkJaWYoIXN0cmNtcChrZXl3b3JkLCJbS2V5bGVuIikp CisrCQkJeworKwkJCWtleWxlbiA9IGF0b2kodmFsdWUpOworKwkJCWlmIChrZXlsZW4gPT0gMTI4 KQorKwkJCQlnY20gPSBFVlBfYWVzXzEyOF9nY20oKTsKKysJCQllbHNlIGlmIChrZXlsZW4gPT0g MTkyKQorKwkJCQlnY20gPSBFVlBfYWVzXzE5Ml9nY20oKTsKKysJCQllbHNlIGlmIChrZXlsZW4g PT0gMjU2KQorKwkJCQlnY20gPSBFVlBfYWVzXzI1Nl9nY20oKTsKKysJCQllbHNlIAorKwkJCQl7 CisrCQkJCWZwcmludGYoc3RkZXJyLCAiVW5zdXBwb3J0ZWQga2V5bGVuICVkXG4iLAorKwkJCQkJ CQlrZXlsZW4pOworKwkJCQl9CisrCQkJa2V5bGVuID4+PSAzOworKwkJCX0KKysJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgIltJVmxlbiIpKQorKwkJCWl2bGVuID0gYXRvaSh2YWx1ZSkgPj4g MzsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIltBQURsZW4iKSkKKysJCQlhYWRsZW4g PSBhdG9pKHZhbHVlKSA+PiAzOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiW1RhZ2xl biIpKQorKwkJCXRhZ2xlbiA9IGF0b2kodmFsdWUpID4+IDM7CisrCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsICJbUFRsZW4iKSkKKysJCQlwdGxlbiA9IGF0b2kodmFsdWUpID4+IDM7CisrCQll bHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCisrCQkJeworKwkJCWtleSA9IGhleDJiaW5f bSh2YWx1ZSwgJmwpOworKwkJCWlmIChsICE9IGtleWxlbikKKysJCQkJeworKwkJCQlmcHJpbnRm KHN0ZGVyciwgIkluY29uc2lzdGVudCBLZXkgbGVuZ3RoXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJ CQkJfQorKwkJCX0KKysJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJJViIpKQorKwkJCXsKKysJ CQlpdiA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOworKwkJCWlmIChsICE9IGl2bGVuKQorKwkJCQl7 CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IElWIGxlbmd0aFxuIik7CisrCQkJ CWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUFQi KSkKKysJCQl7CisrCQkJcHQgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlpZiAobCAhPSBw dGxlbikKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBQVCBsZW5n dGhcbiIpOworKwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZighc3RyY21w KGtleXdvcmQsIkNUIikpCisrCQkJeworKwkJCWN0ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Cisr CQkJaWYgKGwgIT0gcHRsZW4pCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNp c3RlbnQgQ1QgbGVuZ3RoXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVs c2UgaWYoIXN0cmNtcChrZXl3b3JkLCJBQUQiKSkKKysJCQl7CisrCQkJYWFkID0gaGV4MmJpbl9t KHZhbHVlLCAmbCk7CisrCQkJaWYgKGwgIT0gYWFkbGVuKQorKwkJCQl7CisrCQkJCWZwcmludGYo c3RkZXJyLCAiSW5jb25zaXN0ZW50IEFBRCBsZW5ndGhcbiIpOworKwkJCQlleGl0KDEpOworKwkJ CQl9CisrCQkJfQorKwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlRhZyIpKQorKwkJCXsKKysJ CQl0YWcgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlpZiAobCAhPSB0YWdsZW4pCisrCQkJ CXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgVGFnIGxlbmd0aFxuIik7Cisr CQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQlpZiAoZW5jcnlwdCAmJiBwdCAmJiBhYWQg JiYgKGl2IHx8IGVuY3J5cHQ9PTEpKQorKwkJCXsKKysJCQl0YWcgPSBPUEVOU1NMX21hbGxvYyh0 YWdsZW4pOworKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBnY20sIE5VTEwsIE5VTEwsIDEpOwor KwkJCS8qIFJlbGF4IEZJUFMgY29uc3RyYWludHMgZm9yIHRlc3RpbmcgKi8KKysJCQlNX0VWUF9D SVBIRVJfQ1RYX3NldF9mbGFncygmY3R4LCBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKTsK KysJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX0lWTEVOLCBp dmxlbiwgMCk7CisrCQkJaWYgKGVuY3J5cHQgPT0gMSkKKysJCQkJeworKwkJCQlzdGF0aWMgdW5z aWduZWQgY2hhciBpdl9maXhlZFs0XSA9IHsxLDIsMyw0fTsKKysJCQkJaWYgKCFpdikKKysJCQkJ CWl2ID0gT1BFTlNTTF9tYWxsb2MoaXZsZW4pOworKwkJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwg TlVMTCwga2V5LCBOVUxMLCAxKTsKKysJCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwKKysJ CQkJCQlFVlBfQ1RSTF9HQ01fU0VUX0lWX0ZJWEVELAorKwkJCQkJCTQsIGl2X2ZpeGVkKTsKKysJ CQkJaWYgKCFGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LAorKwkJCQkJRVZQX0NUUkxfR0NNX0lW X0dFTiwgMCwgaXYpKQorKwkJCQkJeworKwkJCQkJZnByaW50ZihzdGRlcnIsICJJViBnZW4gZXJy b3JcbiIpOworKwkJCQkJZXhpdCgxKTsKKysJCQkJCX0KKysJCQkJT3V0cHV0VmFsdWUoIklWIiwg aXYsIGl2bGVuLCBvdXQsIDApOworKwkJCQl9CisrCQkJZWxzZQorKwkJCQlGSVBTX2NpcGhlcmlu aXQoJmN0eCwgTlVMTCwga2V5LCBpdiwgMSk7CisrCisrCisrCQkJaWYgKGFhZGxlbikKKysJCQkJ RklQU19jaXBoZXIoJmN0eCwgTlVMTCwgYWFkLCBhYWRsZW4pOworKwkJCWlmIChwdGxlbikKKysJ CQkJeworKwkJCQljdCA9IE9QRU5TU0xfbWFsbG9jKHB0bGVuKTsKKysJCQkJcnYgPSBGSVBTX2Np cGhlcigmY3R4LCBjdCwgcHQsIHB0bGVuKTsKKysJCQkJfQorKwkJCUZJUFNfY2lwaGVyKCZjdHgs IE5VTEwsIE5VTEwsIDApOworKwkJCUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJM X0dDTV9HRVRfVEFHLAorKwkJCQkJCQkJdGFnbGVuLCB0YWcpOwkKKysJCQlPdXRwdXRWYWx1ZSgi Q1QiLCBjdCwgcHRsZW4sIG91dCwgMCk7CisrCQkJT3V0cHV0VmFsdWUoIlRhZyIsIHRhZywgdGFn bGVuLCBvdXQsIDApOworKwkJCWlmIChpdikKKysJCQkJT1BFTlNTTF9mcmVlKGl2KTsKKysJCQlp ZiAoYWFkKQorKwkJCQlPUEVOU1NMX2ZyZWUoYWFkKTsKKysJCQlpZiAoY3QpCisrCQkJCU9QRU5T U0xfZnJlZShjdCk7CisrCQkJaWYgKHB0KQorKwkJCQlPUEVOU1NMX2ZyZWUocHQpOworKwkJCWlm IChrZXkpCisrCQkJCU9QRU5TU0xfZnJlZShrZXkpOworKwkJCWlmICh0YWcpCisrCQkJCU9QRU5T U0xfZnJlZSh0YWcpOworKwkJCWl2ID0gYWFkID0gY3QgPSBwdCA9IGtleSA9IHRhZyA9IE5VTEw7 CisrCQkJfQkKKysJCWlmICghZW5jcnlwdCAmJiB0YWcpCisrCQkJeworKwkJCUZJUFNfY2lwaGVy aW5pdCgmY3R4LCBnY20sIE5VTEwsIE5VTEwsIDApOworKwkJCS8qIFJlbGF4IEZJUFMgY29uc3Ry YWludHMgZm9yIHRlc3RpbmcgKi8KKysJCQlNX0VWUF9DSVBIRVJfQ1RYX3NldF9mbGFncygmY3R4 LCBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKKysJCQlGSVBTX2NpcGhlcl9jdHhfY3Ry bCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX0lWTEVOLCBpdmxlbiwgMCk7CisrCQkJRklQU19jaXBo ZXJpbml0KCZjdHgsIE5VTEwsIGtleSwgaXYsIDApOworKwkJCUZJUFNfY2lwaGVyX2N0eF9jdHJs KCZjdHgsIEVWUF9DVFJMX0dDTV9TRVRfVEFHLCB0YWdsZW4sIHRhZyk7CisrCQkJaWYgKGFhZGxl bikKKysJCQkJRklQU19jaXBoZXIoJmN0eCwgTlVMTCwgYWFkLCBhYWRsZW4pOworKwkJCWlmIChw dGxlbikKKysJCQkJeworKwkJCQlwdCA9IE9QRU5TU0xfbWFsbG9jKHB0bGVuKTsKKysJCQkJcnYg PSBGSVBTX2NpcGhlcigmY3R4LCBwdCwgY3QsIHB0bGVuKTsKKysJCQkJfQorKwkJCXJ2ID0gRklQ U19jaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgMCk7CisrCQkJaWYgKHJ2IDwgMCkKKysJCQkJZnBy aW50ZihvdXQsICJGQUlMIiBSRVNQX0VPTCk7CisrCQkJZWxzZQorKwkJCQlPdXRwdXRWYWx1ZSgi UFQiLCBwdCwgcHRsZW4sIG91dCwgMCk7CisrCQkJaWYgKGl2KQorKwkJCQlPUEVOU1NMX2ZyZWUo aXYpOworKwkJCWlmIChhYWQpCisrCQkJCU9QRU5TU0xfZnJlZShhYWQpOworKwkJCWlmIChjdCkK KysJCQkJT1BFTlNTTF9mcmVlKGN0KTsKKysJCQlpZiAocHQpCisrCQkJCU9QRU5TU0xfZnJlZShw dCk7CisrCQkJaWYgKGtleSkKKysJCQkJT1BFTlNTTF9mcmVlKGtleSk7CisrCQkJaWYgKHRhZykK KysJCQkJT1BFTlNTTF9mcmVlKHRhZyk7CisrCQkJaXYgPSBhYWQgPSBjdCA9IHB0ID0ga2V5ID0g dGFnID0gTlVMTDsKKysJCQl9CisrCQl9CisrCUZJUFNfY2lwaGVyX2N0eF9jbGVhbnVwKCZjdHgp OwkKKysJfQorKworK3N0YXRpYyB2b2lkIHh0c3Rlc3QoRklMRSAqaW4sIEZJTEUgKm91dCkKKysJ eworKwljaGFyIGJ1ZlsyMDQ4MDBdOworKwljaGFyIGxidWZbMjA0ODAwXTsKKysJY2hhciAqa2V5 d29yZCwgKnZhbHVlOworKwlpbnQgaW5sZW4gPSAwOworKwlpbnQgZW5jcnlwdCA9IDA7CisrCWxv bmcgbDsKKysJdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTCwgKml2ID0gTlVMTDsKKysJdW5zaWdu ZWQgY2hhciAqaW5idWYgPSBOVUxMLCAqb3V0YnVmID0gTlVMTDsKKysJRVZQX0NJUEhFUl9DVFgg Y3R4OworKwljb25zdCBFVlBfQ0lQSEVSICp4dHMgPSBOVUxMOworKwlGSVBTX2NpcGhlcl9jdHhf aW5pdCgmY3R4KTsKKysKKysJd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsaW4pICE9IE5VTEwp CisrCQl7CisrCQlmcHV0cyhidWYsb3V0KTsKKysJCWlmIChidWZbMF0gPT0gJ1snICYmIHN0cmxl bihidWYpID49IDkpCisrCQkJeworKwkJCWlmKCFzdHJuY21wKGJ1ZiwiW0VOQ1JZUFRdIiwgOSkp CisrCQkJCWVuY3J5cHQgPSAxOworKwkJCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbREVDUllQVF0i LCA5KSkKKysJCQkJZW5jcnlwdCA9IDA7CisrCQkJfQorKwkJaWYgICghcGFyc2VfbGluZSgma2V5 d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZighc3Ry Y21wKGtleXdvcmQsIktleSIpKQorKwkJCXsKKysJCQlrZXkgPSBoZXgyYmluX20odmFsdWUsICZs KTsKKysJCQlpZiAobCA9PSAzMikKKysJCQkJeHRzID0gRVZQX2Flc18xMjhfeHRzKCk7CisrCQkJ ZWxzZSBpZiAobCA9PSA2NCkKKysJCQkJeHRzID0gRVZQX2Flc18yNTZfeHRzKCk7CisrCQkJZWxz ZQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IEtleSBsZW5ndGhc biIpOworKwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZighc3RyY21wKGtl eXdvcmQsImkiKSkKKysJCQl7CisrCQkJaXYgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlp ZiAobCAhPSAxNikKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBp IGxlbmd0aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmKGVu Y3J5cHQgJiYgIXN0cmNtcChrZXl3b3JkLCJQVCIpKQorKwkJCXsKKysJCQlpbmJ1ZiA9IGhleDJi aW5fbSh2YWx1ZSwgJmwpOworKwkJCWlubGVuID0gbDsKKysJCQl9CisrCQllbHNlIGlmKCFlbmNy eXB0ICYmICFzdHJjbXAoa2V5d29yZCwiQ1QiKSkKKysJCQl7CisrCQkJaW5idWYgPSBoZXgyYmlu X20odmFsdWUsICZsKTsKKysJCQlpbmxlbiA9IGw7CisrCQkJfQorKwkJaWYgKGluYnVmKQorKwkJ CXsKKysJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgeHRzLCBrZXksIGl2LCBlbmNyeXB0KTsKKysJ CQlvdXRidWYgPSBPUEVOU1NMX21hbGxvYyhpbmxlbik7CisrCQkJRklQU19jaXBoZXIoJmN0eCwg b3V0YnVmLCBpbmJ1ZiwgaW5sZW4pOworKwkJCU91dHB1dFZhbHVlKGVuY3J5cHQgPyAiQ1QiOiJQ VCIsIG91dGJ1ZiwgaW5sZW4sIG91dCwgMCk7CisrCQkJT1BFTlNTTF9mcmVlKGluYnVmKTsKKysJ CQlPUEVOU1NMX2ZyZWUob3V0YnVmKTsKKysJCQlPUEVOU1NMX2ZyZWUoa2V5KTsKKysJCQlPUEVO U1NMX2ZyZWUoaXYpOworKwkJCWl2ID0ga2V5ID0gaW5idWYgPSBvdXRidWYgPSBOVUxMOworKwkJ CX0JCisrCQl9CisrCUZJUFNfY2lwaGVyX2N0eF9jbGVhbnVwKCZjdHgpOwkKKysJfQorKworK3N0 YXRpYyB2b2lkIGNjbXRlc3QoRklMRSAqaW4sIEZJTEUgKm91dCkKKysJeworKwljaGFyIGJ1Zlsy MDAwNDhdOworKwljaGFyIGxidWZbMjAwMDQ4XTsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVlOwor Kwlsb25nIGw7CisrCXVuc2lnbmVkIGNoYXIgKktleSA9IE5VTEwsICpOb25jZSA9IE5VTEw7Cisr CXVuc2lnbmVkIGNoYXIgKkFkYXRhID0gTlVMTCwgKlBheWxvYWQgPSBOVUxMOworKwl1bnNpZ25l ZCBjaGFyICpDVCA9IE5VTEw7CisrCWludCBQbGVuID0gLTEsIE5sZW4gPSAtMSwgVGxlbiA9IC0x LCBBbGVuID0gLTE7CisrCWludCBkZWNyID0gMDsKKysJRVZQX0NJUEhFUl9DVFggY3R4OworKwlj b25zdCBFVlBfQ0lQSEVSICpjY20gPSBOVUxMOworKwlGSVBTX2NpcGhlcl9jdHhfaW5pdCgmY3R4 KTsKKysKKysJd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsaW4pICE9IE5VTEwpCisrCQl7Cisr CQljaGFyICpwOworKwkJZnB1dHMoYnVmLG91dCk7CisrCQlyZWRvOgorKwkJaWYgKCFwYXJzZV9s aW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQkJY29udGludWU7CisrCisrCQkv KiBJZiBzdXJyb3VuZGVkIGJ5IHNxdWFyZSBicmFja2V0cyB6YXAgdGhlbSAqLworKwkJaWYgKGtl eXdvcmRbMF0gPT0gJ1snKQorKwkJCXsKKysJCQlrZXl3b3JkKys7CisrCQkJcCA9IHN0cmNocih2 YWx1ZSwgJ10nKTsKKysJCQlpZiAocCkKKysJCQkJKnAgPSAwOworKwkJCX0KKysJCS8qIFNlZSBp ZiB3ZSBoYXZlIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgcGFyYW1ldGVycworKwkJICogaWYg c28gY29weSByZXN0IG9mIGxpbmUgYmFjayB0byBidWZmZXIgYW5kIHJlZG8gbGF0ZXIuCisrCQkg Ki8KKysJCXAgPSBzdHJjaHIodmFsdWUsICcsJyk7CisrCQlpZiAocCkKKysJCQl7CisrCQkJKnAg PSAwOworKwkJCXN0cmNweShidWYsIHAgKyAxKTsKKysJCQlzdHJjYXQoYnVmLCAiXG4iKTsKKysJ CQlkZWNyID0gMTsKKysJCQl9CisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCJQbGVuIikpCisrCQkJ UGxlbiA9IGF0b2kodmFsdWUpOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCJObGVuIikp CisrCQkJTmxlbiA9IGF0b2kodmFsdWUpOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCJU bGVuIikpCisrCQkJVGxlbiA9IGF0b2kodmFsdWUpOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCJBbGVuIikpCisrCQkJQWxlbiA9IGF0b2kodmFsdWUpOworKwkJaWYgKHApCisrCQkJZ290 byByZWRvOworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCisrCQkJeworKwkJCWlmIChL ZXkpCisrCQkJCU9QRU5TU0xfZnJlZShLZXkpOworKwkJCUtleSA9IGhleDJiaW5fbSh2YWx1ZSwg JmwpOworKwkJCWlmIChsID09IDE2KQorKwkJCQljY20gPSBFVlBfYWVzXzEyOF9jY20oKTsKKysJ CQllbHNlIGlmIChsID09IDI0KQorKwkJCQljY20gPSBFVlBfYWVzXzE5Ml9jY20oKTsKKysJCQll bHNlIGlmIChsID09IDMyKQorKwkJCQljY20gPSBFVlBfYWVzXzI1Nl9jY20oKTsKKysJCQllbHNl CisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgS2V5IGxlbmd0aFxu Iik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsIk5vbmNlIikpCisrCQkJeworKwkJCWlmIChOb25jZSkKKysJCQkJT1BFTlNTTF9mcmVl KE5vbmNlKTsKKysJCQlOb25jZSA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOworKwkJCWlmIChsICE9 IE5sZW4pCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgbm9uY2Ug bGVuZ3RoXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwiUGF5bG9hZCIpICYmICFkZWNyKQorKwkJCXsKKysJCQlQYXlsb2FkID0g aGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaWYgKFBsZW4gJiYgbCAhPSBQbGVuKQorKwkJCQl7 CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IFBheWxvYWQgbGVuZ3RoXG4iKTsK KysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29y ZCwiQWRhdGEiKSkKKysJCQl7CisrCQkJaWYgKEFkYXRhKQorKwkJCQlPUEVOU1NMX2ZyZWUoQWRh dGEpOworKwkJCUFkYXRhID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaWYgKEFsZW4gJiYg bCAhPSBBbGVuKQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IFBh eWxvYWQgbGVuZ3RoXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwiQ1QiKSAmJiBkZWNyKQorKwkJCXsKKysJCQlDVCA9IGhleDJi aW5fbSh2YWx1ZSwgJmwpOworKwkJCWlmIChsICE9IChQbGVuICsgVGxlbikpCisrCQkJCXsKKysJ CQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgQ1QgbGVuZ3RoXG4iKTsKKysJCQkJZXhp dCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWlmIChQYXlsb2FkKQorKwkJCXsKKysJCQlGSVBTX2Np cGhlcmluaXQoJmN0eCwgY2NtLCBOVUxMLCBOVUxMLCAxKTsKKysJCQlGSVBTX2NpcGhlcl9jdHhf Y3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX0lWTEVOLCBObGVuLCAwKTsKKysJCQlGSVBTX2Np cGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywgVGxlbiwgMCk7CisrCQkJ RklQU19jaXBoZXJpbml0KCZjdHgsIE5VTEwsIEtleSwgTm9uY2UsIDEpOworKworKwkJCUZJUFNf Y2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIFBsZW4pOworKwkJCUZJUFNfY2lwaGVyKCZjdHgsIE5V TEwsIEFkYXRhLCBBbGVuKTsKKysJCQlDVCA9IE9QRU5TU0xfbWFsbG9jKFBsZW4gKyBUbGVuKTsK KysJCQlGSVBTX2NpcGhlcigmY3R4LCBDVCwgUGF5bG9hZCwgUGxlbik7CisrCQkJRklQU19jaXBo ZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX0dFVF9UQUcsIFRsZW4sCisrCQkJCQkJQ1Qg KyBQbGVuKTsKKysJCQlPdXRwdXRWYWx1ZSgiQ1QiLCBDVCwgUGxlbiArIFRsZW4sIG91dCwgMCk7 CisrCQkJT1BFTlNTTF9mcmVlKENUKTsKKysJCQlPUEVOU1NMX2ZyZWUoUGF5bG9hZCk7CisrCQkJ Q1QgPSBQYXlsb2FkID0gTlVMTDsKKysJCQl9CisrCQlpZiAoQ1QpCisrCQkJeworKwkJCWludCBy djsKKysJCQlpbnQgbGVuID0gUGxlbiA9PSAwID8gMTogUGxlbjsKKysJCQlGSVBTX2NpcGhlcmlu aXQoJmN0eCwgY2NtLCBOVUxMLCBOVUxMLCAwKTsKKysJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgm Y3R4LCBFVlBfQ1RSTF9DQ01fU0VUX0lWTEVOLCBObGVuLCAwKTsKKysJCQlGSVBTX2NpcGhlcl9j dHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywKKysJCQkJCQlUbGVuLCBDVCArIFBs ZW4pOworKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBOVUxMLCBLZXksIE5vbmNlLCAwKTsKKysJ CQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCBQbGVuKTsKKysJCQlGSVBTX2NpcGhlcigm Y3R4LCBOVUxMLCBBZGF0YSwgQWxlbik7CisrCQkJUGF5bG9hZCA9IE9QRU5TU0xfbWFsbG9jKGxl bik7CisrCQkJcnYgPSBGSVBTX2NpcGhlcigmY3R4LCBQYXlsb2FkLCBDVCwgUGxlbik7CisrCQkJ aWYgKHJ2ID49IDApCisrCQkJCXsKKysJCQkJaWYgKHJ2ID09IDApCisrCQkJCQlQYXlsb2FkWzBd ID0gMDsKKysJCQkJZnB1dHMoIlJlc3VsdCA9IFBhc3MiIFJFU1BfRU9MLCBvdXQpOworKwkJCQlP dXRwdXRWYWx1ZSgiUGF5bG9hZCIsIFBheWxvYWQsIGxlbiwgb3V0LCAwKTsKKysJCQkJfQorKwkJ CWVsc2UKKysJCQkJZnB1dHMoIlJlc3VsdCA9IEZhaWwiIFJFU1BfRU9MLCBvdXQpOworKwkJCU9Q RU5TU0xfZnJlZShDVCk7CisrCQkJT1BFTlNTTF9mcmVlKFBheWxvYWQpOworKwkJCUNUID0gUGF5 bG9hZCA9IE5VTEw7CisrCQkJfQorKwkJfQorKwlpZiAoS2V5KQorKwkJT1BFTlNTTF9mcmVlKEtl eSk7CisrCWlmIChOb25jZSkKKysJCU9QRU5TU0xfZnJlZShOb25jZSk7CisrCWlmIChBZGF0YSkK KysJCU9QRU5TU0xfZnJlZShBZGF0YSk7CisrCUZJUFNfY2lwaGVyX2N0eF9jbGVhbnVwKCZjdHgp OworKwl9CisrCisrI2lmZGVmIEZJUFNfQUxHVlMKKytpbnQgZmlwc19nY210ZXN0X21haW4oaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQorKyNlbHNlCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQorKyNlbmRpZgorKwl7CisrCWludCBlbmNyeXB0OworKwlpbnQgeHRzID0gMCwgY2NtID0g MDsKKysJRklMRSAqaW4sICpvdXQ7CisrCWlmIChhcmdjID09IDQpCisrCQl7CisrCQlpbiA9IGZv cGVuKGFyZ3ZbMl0sICJyIik7CisrCQlpZiAoIWluKQorKwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVy ciwgIkVycm9yIG9wZW5pbmcgaW5wdXQgZmlsZVxuIik7CisrCQkJZXhpdCgxKTsKKysJCQl9Cisr CQlvdXQgPSBmb3Blbihhcmd2WzNdLCAidyIpOworKwkJaWYgKCFvdXQpCisrCQkJeworKwkJCWZw cmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBvdXRwdXQgZmlsZVxuIik7CisrCQkJZXhpdCgx KTsKKysJCQl9CisrCQl9CisrCWVsc2UgaWYgKGFyZ2MgPT0gMikKKysJCXsKKysJCWluID0gc3Rk aW47CisrCQlvdXQgPSBzdGRvdXQ7CisrCQl9CisrCWVsc2UKKysJCXsKKysJCWZwcmludGYoc3Rk ZXJyLCIlcyBbLWVuY3J5cHR8LWRlY3J5cHRdXG4iLGFyZ3ZbMF0pOworKwkJZXhpdCgxKTsKKysJ CX0KKysJZmlwc19hbGd0ZXN0X2luaXQoKTsKKysJaWYoIXN0cmNtcChhcmd2WzFdLCItZW5jcnlw dCIpKQorKwkJZW5jcnlwdCA9IDE7CisrCWVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCItZW5jcnlw dElWZXh0IikpCisrCQllbmNyeXB0ID0gMjsKKysJZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sIi1k ZWNyeXB0IikpCisrCQllbmNyeXB0ID0gMDsKKysJZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sIi1j Y20iKSkKKysJCWNjbSA9IDE7CisrCWVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCIteHRzIikpCisr CQl4dHMgPSAxOworKwllbHNlCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwiRG9uJ3Qga25vdyBo b3cgdG8gJXMuXG4iLGFyZ3ZbMV0pOworKwkJZXhpdCgxKTsKKysJCX0KKysKKysJaWYgKGNjbSkK KysJCWNjbXRlc3QoaW4sIG91dCk7CisrCWVsc2UgaWYgKHh0cykKKysJCXh0c3Rlc3QoaW4sIG91 dCk7CisrCWVsc2UKKysJCWdjbXRlc3QoaW4sIG91dCwgZW5jcnlwdCk7CisrCisrCWlmIChhcmdj ID09IDQpCisrCQl7CisrCQlmY2xvc2UoaW4pOworKwkJZmNsb3NlKG91dCk7CisrCQl9CisrCisr CXJldHVybiAwOworK30KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2NyeXB0 by9maXBzL2NhdnMvZmlwc19ybmd2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX3JuZ3ZzLmMKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfcm5ndnMuYy5maXBzCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTU0OTIyMzU5ICswMTAwCisrKysg b3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMJMjAxNS0wMS0wOSAw OTo1MTo1MS41NTQ5MjIzNTkgKzAxMDAKK0BAIC0wLDAgKzEsMjMwIEBACisrLyoKKysgKiBDcnVk ZSB0ZXN0IGRyaXZlciBmb3IgcHJvY2Vzc2luZyB0aGUgVlNUIGFuZCBNQ1QgdGVzdHZlY3RvciBm aWxlcworKyAqIGdlbmVyYXRlZCBieSB0aGUgQ01WUCBSTkdWUyBwcm9kdWN0LgorKyAqCisrICog Tm90ZSB0aGUgaW5wdXQgZmlsZXMgYXJlIGFzc3VtZWQgdG8gaGF2ZSBhIF92ZXJ5XyBzcGVjaWZp YyBmb3JtYXQKKysgKiBhcyBkZXNjcmliZWQgaW4gdGhlIE5JU1QgZG9jdW1lbnQgIlRoZSBSYW5k b20gTnVtYmVyIEdlbmVyYXRvcgorKyAqIFZhbGlkYXRpb24gU3lzdGVtIChSTkdWUykiLCBNYXkg MjUsIDIwMDQuCisrICoKKysgKi8KKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgor KworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisraW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIFJORyBz dXBwb3J0XG4iKTsKKysgICAgcmV0dXJuIDA7CisrfQorKyNlbHNlCisrCisrI2luY2x1ZGUgPG9w ZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv cmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL3g1MDl2My5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4K KysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKyt2b2lkIHZzdCgpCisrICAgIHsKKysgICAg dW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTDsKKysgICAgdW5zaWduZWQgY2hhciAqdiA9IE5VTEw7 CisrICAgIHVuc2lnbmVkIGNoYXIgKmR0ID0gTlVMTDsKKysgICAgdW5zaWduZWQgY2hhciByZXRb MTZdOworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICBj aGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIGxvbmcgaSwga2V5bGVuOworKworKyAgICBrZXls ZW4gPSAwOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVM TCkKKysJeworKwlmcHV0cyhidWYsc3Rkb3V0KTsKKysJaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDEy OC1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMTY7CisrCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJb QUVTIDE5Mi1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMjQ7CisrCWVsc2UgaWYoIXN0cm5jbXAo YnVmLCJbQUVTIDI1Ni1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMzI7CisrCWlmICghcGFyc2Vf bGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJY29udGludWU7CisrCWlmKCFz dHJjbXAoa2V5d29yZCwiS2V5IikpCisrCSAgICB7CisrCSAgICBrZXk9aGV4MmJpbl9tKHZhbHVl LCZpKTsKKysJICAgIGlmIChpICE9IGtleWxlbikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAi SW52YWxpZCBrZXkgbGVuZ3RoLCBleHBlY3RpbmcgJWxkXG4iLCBrZXlsZW4pOworKwkJcmV0dXJu OworKwkJfQorKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRFQiKSkKKysJICAg IHsKKysJICAgIGR0PWhleDJiaW5fbSh2YWx1ZSwmaSk7CisrCSAgICBpZiAoaSAhPSAxNikKKysJ CXsKKysJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBEVCBsZW5ndGhcbiIpOworKwkJcmV0dXJu OworKwkJfQorKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiViIpKQorKwkgICAg eworKwkgICAgdj1oZXgyYmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0gMTYpCisrCQl7 CisrCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgViBsZW5ndGhcbiIpOworKwkJcmV0dXJuOwor KwkJfQorKworKwkgICAgaWYgKCFrZXkgfHwgIWR0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIs ICJNaXNzaW5nIGtleSBvciBEVFxuIik7CisrCQlyZXR1cm47CisrCQl9CisrCisrCSAgICBGSVBT X3g5MzFfc2V0X2tleShrZXksIGtleWxlbik7CisrCSAgICBGSVBTX3g5MzFfc2VlZCh2LDE2KTsK KysJICAgIEZJUFNfeDkzMV9zZXRfZHQoZHQpOworKwkgICAgaWYgKEZJUFNfeDkzMV9ieXRlcyhy ZXQsMTYpIDw9IDApCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGdldHRpbmcgUFJO RyB2YWx1ZVxuIik7CisrCSAgICAgICAgcmV0dXJuOworKwkgICAgICAgIH0KKysKKysJICAgIHB2 KCJSIixyZXQsMTYpOworKwkgICAgT1BFTlNTTF9mcmVlKGtleSk7CisrCSAgICBrZXkgPSBOVUxM OworKwkgICAgT1BFTlNTTF9mcmVlKGR0KTsKKysJICAgIGR0ID0gTlVMTDsKKysJICAgIE9QRU5T U0xfZnJlZSh2KTsKKysJICAgIHYgPSBOVUxMOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKyt2 b2lkIG1jdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTDsKKysgICAg dW5zaWduZWQgY2hhciAqdiA9IE5VTEw7CisrICAgIHVuc2lnbmVkIGNoYXIgKmR0ID0gTlVMTDsK KysgICAgdW5zaWduZWQgY2hhciByZXRbMTZdOworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAg Y2hhciBsYnVmWzEwMjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIGxvbmcg aSwga2V5bGVuOworKyAgICBpbnQgajsKKysKKysgICAga2V5bGVuID0gMDsKKysKKysgICAgd2hp bGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJZnB1dHMoYnVm LHN0ZG91dCk7CisrCWlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxMjgtS2V5XSIsIDEzKSkKKysJCWtl eWxlbiA9IDE2OworKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxOTItS2V5XSIsIDEzKSkK KysJCWtleWxlbiA9IDI0OworKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAyNTYtS2V5XSIs IDEzKSkKKysJCWtleWxlbiA9IDMyOworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1 ZSwgbGJ1ZiwgYnVmKSkKKysJCWNvbnRpbnVlOworKwlpZighc3RyY21wKGtleXdvcmQsIktleSIp KQorKwkgICAgeworKwkgICAga2V5PWhleDJiaW5fbSh2YWx1ZSwmaSk7CisrCSAgICBpZiAoaSAh PSBrZXlsZW4pCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQga2V5IGxlbmd0aCwg ZXhwZWN0aW5nICVsZFxuIiwga2V5bGVuKTsKKysJCXJldHVybjsKKysJCX0KKysJICAgIH0KKysJ ZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkRUIikpCisrCSAgICB7CisrCSAgICBkdD1oZXgyYmlu X20odmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0gMTYpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVy ciwgIkludmFsaWQgRFQgbGVuZ3RoXG4iKTsKKysJCXJldHVybjsKKysJCX0KKysJICAgIH0KKysJ ZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlYiKSkKKysJICAgIHsKKysJICAgIHY9aGV4MmJpbl9t KHZhbHVlLCZpKTsKKysJICAgIGlmIChpICE9IDE2KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIs ICJJbnZhbGlkIFYgbGVuZ3RoXG4iKTsKKysJCXJldHVybjsKKysJCX0KKysKKysJICAgIGlmICgh a2V5IHx8ICFkdCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiTWlzc2luZyBrZXkgb3IgRFRc biIpOworKwkJcmV0dXJuOworKwkJfQorKworKwkgICAgRklQU194OTMxX3NldF9rZXkoa2V5LCBr ZXlsZW4pOworKwkgICAgRklQU194OTMxX3NlZWQodiwxNik7CisrCSAgICBmb3IgKGkgPSAwOyBp IDwgMTAwMDA7IGkrKykKKysJCXsKKysJCSAgICBGSVBTX3g5MzFfc2V0X2R0KGR0KTsKKysJCSAg ICBpZiAoRklQU194OTMxX2J5dGVzKHJldCwxNikgPD0gMCkKKysJCQl7CisrCQkJZnByaW50Zihz dGRlcnIsICJFcnJvciBnZXR0aW5nIFBSTkcgdmFsdWVcbiIpOworKwkJICAgICAgICByZXR1cm47 CisrCQkgICAgICAgIH0KKysJCSAgICAvKiBJbmNyZW1lbnQgRFQgKi8KKysJCSAgICBmb3IgKGog PSAxNTsgaiA+PSAwOyBqLS0pCisrCQkJeworKwkJCWR0W2pdKys7CisrCQkJaWYgKGR0W2pdKQor KwkJCQlicmVhazsKKysJCQl9CisrCQl9CisrCisrCSAgICBwdigiUiIscmV0LDE2KTsKKysJICAg IE9QRU5TU0xfZnJlZShrZXkpOworKwkgICAga2V5ID0gTlVMTDsKKysJICAgIE9QRU5TU0xfZnJl ZShkdCk7CisrCSAgICBkdCA9IE5VTEw7CisrCSAgICBPUEVOU1NMX2ZyZWUodik7CisrCSAgICB2 ID0gTlVMTDsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisraW50IG1haW4oaW50IGFyZ2MsY2hh ciAqKmFyZ3YpCisrICAgIHsKKysgICAgaWYoYXJnYyAhPSAyKQorKwl7CisrCWZwcmludGYoc3Rk ZXJyLCIlcyBbbWN0fHZzdF1cbiIsYXJndlswXSk7CisrCWV4aXQoMSk7CisrCX0KKysgICAgaWYo IUZJUFNfbW9kZV9zZXQoMSkpCisrCXsKKysJZG9fcHJpbnRfZXJyb3JzKCk7CisrCWV4aXQoMSk7 CisrCX0KKysgICAgRklQU194OTMxX3Jlc2V0KCk7CisrICAgIGlmICghRklQU194OTMxX3Rlc3Rf bW9kZSgpKQorKwl7CisrCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igc2V0dGluZyBQUk5HIHRlc3Qg bW9kZVxuIik7CisrCWRvX3ByaW50X2Vycm9ycygpOworKwlleGl0KDEpOworKwl9CisrICAgIGlm KCFzdHJjbXAoYXJndlsxXSwibWN0IikpCisrCW1jdCgpOworKyAgICBlbHNlIGlmKCFzdHJjbXAo YXJndlsxXSwidnN0IikpCisrCXZzdCgpOworKyAgICBlbHNlCisrCXsKKysJZnByaW50ZihzdGRl cnIsIkRvbid0IGtub3cgaG93IHRvICVzLlxuIixhcmd2WzFdKTsKKysJZXhpdCgxKTsKKysJfQor KworKyAgICByZXR1cm4gMDsKKysgICAgfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWsvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xay9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFrL2NyeXB0 by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jLmZpcHMJMjAxNS0wMS0wOSAwOTo1MTo1MS41NTU5 MjIzODEgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNh Z3Rlc3QuYwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU1NTkyMjM4MSArMDEwMAorQEAgLTAsMCArMSwz OTAgQEAKKysvKiBmaXBzX3JzYWd0ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4g TiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0 IDIwMDUuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUsMjAw NyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2Fy ZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5P cGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFu ZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBv ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysg KiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBs ZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4g UHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9w ZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdp dGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJv amVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVy IG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8v d3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisr ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBU SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKgorKyAq IFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkg RXJpYyBZb3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29t KS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxjdHlwZS5o PgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KKysKKysjaWZuZGVm IE9QRU5TU0xfRklQUworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisrewor KyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7Cisr fQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisraW50IHJzYV90ZXN0 KEZJTEUgKm91dCwgRklMRSAqaW4pOworK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MShGSUxFICpv dXQsIFJTQSAqcnNhLAorKwkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLCBCSUdOVU0gKlhwLAor KwkJQklHTlVNICplKTsKKytzdGF0aWMgaW50IHJzYV9wcmludGtleTIoRklMRSAqb3V0LCBSU0Eg KnJzYSwKKysJCUJJR05VTSAqWHExLCBCSUdOVU0gKlhxMiwgQklHTlVNICpYcSk7CisrCisraW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKwl7CisrCUZJTEUgKmluID0gTlVMTCwgKm91 dCA9IE5VTEw7CisrCisrCWludCByZXQgPSAxOworKworKwlpZighRklQU19tb2RlX3NldCgxKSkK KysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlm IChhcmdjID09IDEpCisrCQlpbiA9IHN0ZGluOworKwllbHNlCisrCQlpbiA9IGZvcGVuKGFyZ3Zb MV0sICJyIik7CisrCisrCWlmIChhcmdjIDwgMikKKysJCW91dCA9IHN0ZG91dDsKKysJZWxzZQor KwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKKysKKysJaWYgKCFpbikKKysJCXsKKysJCWZw cmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJ Z290byBlbmQ7CisrCQl9CisrCisrCWlmICghb3V0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIs ICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7Cisr CQl9CisrCisrCWlmICghcnNhX3Rlc3Qob3V0LCBpbikpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVy ciwgIkZBVEFMIFJTQUdURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7CisrCQlnb3RvIGVu ZDsKKysJCX0KKysJZWxzZQorKwkJcmV0ID0gMDsKKysKKysJZW5kOgorKworKwlpZiAocmV0KQor KwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCisrCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4pKQorKwkJ ZmNsb3NlKGluKTsKKysJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCisrCQlmY2xvc2Uob3V0 KTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJfQorKworKyNkZWZpbmUgUlNBX1RFU1RfTUFYTElO RUxFTgkxMDI0MAorKworK2ludCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluKQorKwl7Cisr CWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOworKwljaGFyICprZXl3b3JkLCAqdmFs dWU7CisrCVJTQSAqcnNhID0gTlVMTDsKKysJQklHTlVNICpYcDEgPSBOVUxMLCAqWHAyID0gTlVM TCwgKlhwID0gTlVMTDsKKysJQklHTlVNICpYcTEgPSBOVUxMLCAqWHEyID0gTlVMTCwgKlhxID0g TlVMTDsKKysJQklHTlVNICplID0gTlVMTDsKKysJaW50IHJldCA9IDA7CisrCWludCBsbnVtID0g MDsKKysKKysJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsK KysJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOworKworKwlp ZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQorKwkJZ290byBlcnJvcjsKKysKKysJd2hpbGUgKGZn ZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBpbikpCisrCQl7CisrCQlsbnVtKys7 CisrCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwkJa2V5d29yZCA9IGxpbmVidWY7Cisr CQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBj aGFyKSprZXl3b3JkKSkKKysJCQlrZXl3b3JkKys7CisrCisrCQkvKiBMb29rIGZvciA9IHNpZ24g Ki8KKysJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysKKysJCS8qIElmIG5vID0gb3Igc3Rh cnRzIHdpdGggWyAoZm9yIFtmb28gPSBiYXJdIGxpbmUpIGp1c3QgY29weSAqLworKwkJaWYgKCFw IHx8ICprZXl3b3JkPT0nWycpCisrCQkJeworKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8 IDApCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJY29udGludWU7CisrCQkJfQorKworKwkJcSA9IHAg LSAxOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFj ZSgodW5zaWduZWQgY2hhcikqcSkpCisrCQkJKnEtLSA9IDA7CisrCisrCQkqcCA9IDA7CisrCQl2 YWx1ZSA9IHAgKyAxOworKworKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAq LworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKKysJCQl2YWx1ZSsr OworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXAgPSB2 YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKworKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNz cGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkJKnAtLSA9IDA7CisrCisrCQlpZiAoIXN0cmNt cChrZXl3b3JkLCAieHAxIikpCisrCQkJeworKwkJCWlmIChYcDEgfHwgIWRvX2hleDJibigmWHAx LHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsICJ4cDIiKSkKKysJCQl7CisrCQkJaWYgKFhwMiB8fCAhZG9faGV4MmJuKCZY cDIsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwgIlhwIikpCisrCQkJeworKwkJCWlmIChYcCB8fCAhZG9faGV4MmJuKCZY cCx2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0 cmNtcChrZXl3b3JkLCAieHExIikpCisrCQkJeworKwkJCWlmIChYcTEgfHwgIWRvX2hleDJibigm WHExLHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICgh c3RyY21wKGtleXdvcmQsICJ4cTIiKSkKKysJCQl7CisrCQkJaWYgKFhxMiB8fCAhZG9faGV4MmJu KCZYcTIsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgIlhxIikpCisrCQkJeworKwkJCWlmIChYcSB8fCAhZG9faGV4MmJu KCZYcSx2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCAiZSIpKQorKwkJCXsKKysJCQlpZiAoZSB8fCAhZG9faGV4MmJuKCZl LHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsICJwMSIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChr ZXl3b3JkLCAicDIiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29y ZCwgInAiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInEx IikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJxMiIpKQor KwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicSIpKQorKwkJCWNv bnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAibiIpKQorKwkJCWNvbnRpbnVl OworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiZCIpKQorKwkJCWNvbnRpbnVlOworKwkJ ZWxzZQorKwkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCisrCQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsK KysKKysJCWlmIChlICYmIFhwMSAmJiBYcDIgJiYgWHApCisrCQkJeworKwkJCXJzYSA9IEZJUFNf cnNhX25ldygpOworKwkJCWlmICghcnNhKQorKwkJCQlnb3RvIGVycm9yOworKwkJCWlmICghcnNh X3ByaW50a2V5MShvdXQsIHJzYSwgWHAxLCBYcDIsIFhwLCBlKSkKKysJCQkJZ290byBlcnJvcjsK KysJCQlCTl9mcmVlKFhwMSk7CisrCQkJWHAxID0gTlVMTDsKKysJCQlCTl9mcmVlKFhwMik7Cisr CQkJWHAyID0gTlVMTDsKKysJCQlCTl9mcmVlKFhwKTsKKysJCQlYcCA9IE5VTEw7CisrCQkJQk5f ZnJlZShlKTsKKysJCQllID0gTlVMTDsKKysJCQl9CisrCisrCQlpZiAocnNhICYmIFhxMSAmJiBY cTIgJiYgWHEpCisrCQkJeworKwkJCWlmICghcnNhX3ByaW50a2V5MihvdXQsIHJzYSwgWHExLCBY cTIsIFhxKSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlCTl9mcmVlKFhxMSk7CisrCQkJWHExID0g TlVMTDsKKysJCQlCTl9mcmVlKFhxMik7CisrCQkJWHEyID0gTlVMTDsKKysJCQlCTl9mcmVlKFhx KTsKKysJCQlYcSA9IE5VTEw7CisrCQkJRklQU19yc2FfZnJlZShyc2EpOworKwkJCXJzYSA9IE5V TEw7CisrCQkJfQorKwkJfQorKworKwlyZXQgPSAxOworKworKwllcnJvcjoKKysKKysJaWYgKG9s aW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKKysJaWYgKGxpbmVidWYpCisrCQlP UEVOU1NMX2ZyZWUobGluZWJ1Zik7CisrCisrCWlmIChYcDEpCisrCQlCTl9mcmVlKFhwMSk7Cisr CWlmIChYcDIpCisrCQlCTl9mcmVlKFhwMik7CisrCWlmIChYcCkKKysJCUJOX2ZyZWUoWHApOwor KwlpZiAoWHExKQorKwkJQk5fZnJlZShYcTEpOworKwlpZiAoWHExKQorKwkJQk5fZnJlZShYcTEp OworKwlpZiAoWHEyKQorKwkJQk5fZnJlZShYcTIpOworKwlpZiAoWHEpCisrCQlCTl9mcmVlKFhx KTsKKysJaWYgKGUpCisrCQlCTl9mcmVlKGUpOworKwlpZiAocnNhKQorKwkJRklQU19yc2FfZnJl ZShyc2EpOworKworKwlyZXR1cm4gcmV0OworKworKwlwYXJzZV9lcnJvcjoKKysKKysJZnByaW50 ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0p OworKworKwlnb3RvIGVycm9yOworKworKwl9CisrCisrc3RhdGljIGludCByc2FfcHJpbnRrZXkx KEZJTEUgKm91dCwgUlNBICpyc2EsCisrCQlCSUdOVU0gKlhwMSwgQklHTlVNICpYcDIsIEJJR05V TSAqWHAsCisrCQlCSUdOVU0gKmUpCisrCXsKKysJaW50IHJldCA9IDA7CisrCUJJR05VTSAqcDEg PSBOVUxMLCAqcDIgPSBOVUxMOworKwlwMSA9IEJOX25ldygpOworKwlwMiA9IEJOX25ldygpOwor KwlpZiAoIXAxIHx8ICFwMikKKysJCWdvdG8gZXJyb3I7CisrCisrCWlmICghUlNBX1g5MzFfZGVy aXZlX2V4KHJzYSwgcDEsIHAyLCBOVUxMLCBOVUxMLCBYcDEsIFhwMiwgWHAsCisrCQkJCQkJTlVM TCwgTlVMTCwgTlVMTCwgZSwgTlVMTCkpCisrCQlnb3RvIGVycm9yOworKworKwlkb19ibl9wcmlu dF9uYW1lKG91dCwgInAxIiwgcDEpOworKwlkb19ibl9wcmludF9uYW1lKG91dCwgInAyIiwgcDIp OworKwlkb19ibl9wcmludF9uYW1lKG91dCwgInAiLCByc2EtPnApOworKworKwlyZXQgPSAxOwor KworKwllcnJvcjoKKysJaWYgKHAxKQorKwkJQk5fZnJlZShwMSk7CisrCWlmIChwMikKKysJCUJO X2ZyZWUocDIpOworKworKwlyZXR1cm4gcmV0OworKwl9CisrCisrc3RhdGljIGludCByc2FfcHJp bnRrZXkyKEZJTEUgKm91dCwgUlNBICpyc2EsCisrCQlCSUdOVU0gKlhxMSwgQklHTlVNICpYcTIs IEJJR05VTSAqWHEpCisrCXsKKysJaW50IHJldCA9IDA7CisrCUJJR05VTSAqcTEgPSBOVUxMLCAq cTIgPSBOVUxMOworKwlxMSA9IEJOX25ldygpOworKwlxMiA9IEJOX25ldygpOworKwlpZiAoIXEx IHx8ICFxMikKKysJCWdvdG8gZXJyb3I7CisrCisrCWlmICghUlNBX1g5MzFfZGVyaXZlX2V4KHJz YSwgTlVMTCwgTlVMTCwgcTEsIHEyLCBOVUxMLCBOVUxMLCBOVUxMLAorKwkJCQkJCVhxMSwgWHEy LCBYcSwgTlVMTCwgTlVMTCkpCisrCQlnb3RvIGVycm9yOworKworKwlkb19ibl9wcmludF9uYW1l KG91dCwgInExIiwgcTEpOworKwlkb19ibl9wcmludF9uYW1lKG91dCwgInEyIiwgcTIpOworKwlk b19ibl9wcmludF9uYW1lKG91dCwgInEiLCByc2EtPnEpOworKwlkb19ibl9wcmludF9uYW1lKG91 dCwgIm4iLCByc2EtPm4pOworKwlkb19ibl9wcmludF9uYW1lKG91dCwgImQiLCByc2EtPmQpOwor KworKwlyZXQgPSAxOworKworKwllcnJvcjoKKysJaWYgKHExKQorKwkJQk5fZnJlZShxMSk7Cisr CWlmIChxMikKKysJCUJOX2ZyZWUocTIpOworKworKwlyZXR1cm4gcmV0OworKwl9CisrCisrI2Vu ZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhc3Rl c3QuYy5maXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5j CistLS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMuZmlw cwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU1NTkyMjM4MSArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFr L2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTU1 OTIyMzgxICswMTAwCitAQCAtMCwwICsxLDM3MCBAQAorKy8qIGZpcHNfcnNhc3Rlc3QuYyAqLwor Ky8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZv ciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QgMjAwNS4KKysgKi8KKysvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor KyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6 CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5T U0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg bWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBw ZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Np b24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBv ZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBh Y2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBB TlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMg Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAq IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKysgKgorKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGlj IHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSku ICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRz b24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5o PgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9iaW8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvcnNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC94 NTA5djMuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKworK2ludCBtYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCisreworKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIp OworKyAgICByZXR1cm4oMCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgImZpcHNfdXRs LmgiCisrCisrc3RhdGljIGludCByc2Ffc3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50IFNh bHRsZW4pOworK3N0YXRpYyBpbnQgcnNhX3ByaW50c2lnKEZJTEUgKm91dCwgUlNBICpyc2EsIGNv bnN0IEVWUF9NRCAqZGdzdCwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sIGlu dCBTYWx0bGVuKTsKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrCXsKKysJ RklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKKysKKysJaW50IHJldCA9IDEsIFNhbHRsZW4g PSAtMTsKKysKKysJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCQl7CisrCQlkb19wcmludF9lcnJv cnMoKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoKGFyZ2MgPiAyKSAmJiAhc3RyY21w KCItc2FsdGxlbiIsIGFyZ3ZbMV0pKQorKwkJeworKwkJU2FsdGxlbiA9IGF0b2koYXJndlsyXSk7 CisrCQlpZiAoU2FsdGxlbiA8IDApCisrCQkJeworKwkJCWZwcmludGYoc3RkZXJyLCAiRkFUQUw6 IEludmFsaWQgc2FsdCBsZW5ndGhcbiIpOworKwkJCWdvdG8gZW5kOworKwkJCX0KKysJCWFyZ2Mg LT0gMjsKKysJCWFyZ3YgKz0gMjsKKysJCX0KKysJZWxzZSBpZiAoKGFyZ2MgPiAxKSAmJiAhc3Ry Y21wKCIteDkzMSIsIGFyZ3ZbMV0pKQorKwkJeworKwkJU2FsdGxlbiA9IC0yOworKwkJYXJnYy0t OworKwkJYXJndisrOworKwkJfQorKworKwlpZiAoYXJnYyA9PSAxKQorKwkJaW4gPSBzdGRpbjsK KysJZWxzZQorKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOworKworKwlpZiAoYXJnYyA8IDIp CisrCQlvdXQgPSBzdGRvdXQ7CisrCWVsc2UKKysJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7 CisrCisrCWlmICghaW4pCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGlu aXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIW91 dCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9u IGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIXJzYV9zdGVzdChvdXQs IGluLCBTYWx0bGVuKSkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBU1RFU1Qg ZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKwllbHNlCisr CQlyZXQgPSAwOworKworKwllbmQ6CisrCisrCWlmIChyZXQpCisrCQlkb19wcmludF9lcnJvcnMo KTsKKysKKysJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCisrCQlmY2xvc2UoaW4pOworKwlpZiAo b3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKKysJCWZjbG9zZShvdXQpOworKworKwlyZXR1cm4gcmV0 OworKworKwl9CisrCisrI2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCisrCisraW50 IHJzYV9zdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBpbnQgU2FsdGxlbikKKysJeworKwljaGFy ICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVlOwor KwlSU0EgKnJzYSA9IE5VTEw7CisrCWNvbnN0IEVWUF9NRCAqZGdzdCA9IE5VTEw7CisrCXVuc2ln bmVkIGNoYXIgKk1zZyA9IE5VTEw7CisrCWxvbmcgTXNnbGVuID0gLTE7CisrCWludCBrZXlsZW4g PSAtMSwgY3VycmVudF9rZXlsZW4gPSAtMTsKKysJaW50IHJldCA9IDA7CisrCWludCBsbnVtID0g MDsKKysKKysJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsK KysJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOworKworKwlp ZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQorKwkJZ290byBlcnJvcjsKKysKKysJd2hpbGUgKGZn ZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBpbikpCisrCQl7CisrCQlsbnVtKys7 CisrCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwkJa2V5d29yZCA9IGxpbmVidWY7Cisr CQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBj aGFyKSprZXl3b3JkKSkKKysJCQlrZXl3b3JkKys7CisrCisrCQkvKiBMb29rIGZvciA9IHNpZ24g Ki8KKysJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysKKysJCS8qIElmIG5vID0ganVzdCBj b3B5ICovCisrCQlpZiAoIXApCisrCQkJeworKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8 IDApCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJY29udGludWU7CisrCQkJfQorKworKwkJcSA9IHAg LSAxOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFj ZSgodW5zaWduZWQgY2hhcikqcSkpCisrCQkJKnEtLSA9IDA7CisrCisrCQkqcCA9IDA7CisrCQl2 YWx1ZSA9IHAgKyAxOworKworKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAq LworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKKysJCQl2YWx1ZSsr OworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXAgPSB2 YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKworKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNz cGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkJKnAtLSA9IDA7CisrCisrCQkvKiBMb29rIGZv ciBbbW9kID0gWFhYXSBmb3Iga2V5IGxlbmd0aCAqLworKworKwkJaWYgKCFzdHJjbXAoa2V5d29y ZCwgIlttb2QiKSkKKysJCQl7CisrCQkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Cisr CQkJaWYgKCpwICE9ICddJykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQkqcCA9IDA7Cisr CQkJa2V5bGVuID0gYXRvaSh2YWx1ZSk7CisrCQkJaWYgKGtleWxlbiA8IDApCisrCQkJCWdvdG8g cGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiU0hBQWxn IikpCisrCQkJeworKwkJCWlmICghc3RyY21wKHZhbHVlLCAiU0hBMSIpKQorKwkJCQlkZ3N0ID0g RVZQX3NoYTEoKTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMjI0IikpCisrCQkJ CWRnc3QgPSBFVlBfc2hhMjI0KCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTI1 NiIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTI1NigpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFs dWUsICJTSEEzODQiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGEzODQoKTsKKysJCQllbHNlIGlmICgh c3RyY21wKHZhbHVlLCAiU0hBNTEyIikpCisrCQkJCWRnc3QgPSBFVlBfc2hhNTEyKCk7CisrCQkJ ZWxzZQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLAorKwkJCQkJIkZBVEFMOiB1bnN1cHBv cnRlZCBhbGdvcml0aG0gXCIlc1wiXG4iLAorKwkJCQkJCQkJdmFsdWUpOworKwkJCQlnb3RvIHBh cnNlX2Vycm9yOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAi TXNnIikpCisrCQkJeworKwkJCWlmIChNc2cpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJ aWYgKHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkqKC0tdmFsdWUpID0gJzAnOworKwkJCU1zZyA9 IGhleDJiaW5fbSh2YWx1ZSwgJk1zZ2xlbik7CisrCQkJaWYgKCFNc2cpCisrCQkJCWdvdG8gcGFy c2VfZXJyb3I7CisrCQkJfQorKworKwkJZnB1dHMob2xpbmVidWYsIG91dCk7CisrCisrCQkvKiBJ ZiBrZXkgbGVuZ3RoIGhhcyBjaGFuZ2VkLCBnZW5lcmF0ZSBhbmQgb3V0cHV0IHB1YmxpYworKwkJ ICoga2V5IGNvbXBvbmVudHMgb2YgbmV3IFJTQSBwcml2YXRlIGtleS4KKysJCSAqLworKworKwkJ aWYgKGtleWxlbiAhPSBjdXJyZW50X2tleWxlbikKKysJCQl7CisrCQkJQklHTlVNICpibl9lOwor KwkJCWlmIChyc2EpCisrCQkJCUZJUFNfcnNhX2ZyZWUocnNhKTsKKysJCQlyc2EgPSBGSVBTX3Jz YV9uZXcoKTsKKysJCQlpZiAoIXJzYSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlibl9lID0gQk5f bmV3KCk7CisrCQkJaWYgKCFibl9lIHx8ICFCTl9zZXRfd29yZChibl9lLCAweDEwMDEpKQorKwkJ CQlnb3RvIGVycm9yOworKwkJCWlmICghUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KHJzYSwga2V5 bGVuLCBibl9lLCBOVUxMKSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlCTl9mcmVlKGJuX2UpOwor KwkJCWZwdXRzKCJuID0gIiwgb3V0KTsKKysJCQlkb19ibl9wcmludChvdXQsIHJzYS0+bik7Cisr CQkJZnB1dHMoIlxuZSA9ICIsIG91dCk7CisrCQkJZG9fYm5fcHJpbnQob3V0LCByc2EtPmUpOwor KwkJCWZwdXRzKCJcbiIsIG91dCk7CisrCQkJY3VycmVudF9rZXlsZW4gPSBrZXlsZW47CisrCQkJ fQorKworKwkJaWYgKE1zZyAmJiBkZ3N0KQorKwkJCXsKKysJCQlpZiAoIXJzYV9wcmludHNpZyhv dXQsIHJzYSwgZGdzdCwgTXNnLCBNc2dsZW4sCisrCQkJCQkJCQlTYWx0bGVuKSkKKysJCQkJZ290 byBlcnJvcjsKKysJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKKysJCQlNc2cgPSBOVUxMOworKwkJCX0K KysKKysJCX0KKysKKysJcmV0ID0gMTsKKysKKysJZXJyb3I6CisrCisrCWlmIChvbGluZWJ1ZikK KysJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7CisrCWlmIChsaW5lYnVmKQorKwkJT1BFTlNTTF9m cmVlKGxpbmVidWYpOworKwlpZiAocnNhKQorKwkJRklQU19yc2FfZnJlZShyc2EpOworKworKwly ZXR1cm4gcmV0OworKworKwlwYXJzZV9lcnJvcjoKKysKKysJZnByaW50ZihzdGRlcnIsICJGQVRB TCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOworKworKwlnb3RvIGVy cm9yOworKworKwl9CisrCisrc3RhdGljIGludCByc2FfcHJpbnRzaWcoRklMRSAqb3V0LCBSU0Eg KnJzYSwgY29uc3QgRVZQX01EICpkZ3N0LAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBsb25nIE1z Z2xlbiwgaW50IFNhbHRsZW4pCisrCXsKKysJaW50IHJldCA9IDA7CisrCXVuc2lnbmVkIGNoYXIg KnNpZ2J1ZiA9IE5VTEw7CisrCWludCBpLCBzaWdsZW47CisrCS8qIEVWUF9QS0VZIHN0cnVjdHVy ZSAqLworKwlFVlBfUEtFWSBwazsKKysJRVZQX01EX0NUWCBjdHg7CisrCXBrLnR5cGUgPSBFVlBf UEtFWV9SU0E7CisrCXBrLnBrZXkucnNhID0gcnNhOworKworKwlzaWdsZW4gPSBSU0Ffc2l6ZShy c2EpOworKwlzaWdidWYgPSBPUEVOU1NMX21hbGxvYyhzaWdsZW4pOworKwlpZiAoIXNpZ2J1ZikK KysJCWdvdG8gZXJyb3I7CisrCisrCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKKysKKysJaWYgKFNh bHRsZW4gPj0gMCkKKysJCXsKKysJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwKKysJCQlF VlBfTURfQ1RYX0ZMQUdfUEFEX1BTUyB8IChTYWx0bGVuIDw8IDE2KSk7CisrCQl9CisrCWVsc2Ug aWYgKFNhbHRsZW4gPT0gLTIpCisrCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9N RF9DVFhfRkxBR19QQURfWDkzMSk7CisrCWlmICghRVZQX1NpZ25Jbml0X2V4KCZjdHgsIGRnc3Qs IE5VTEwpKQorKwkJZ290byBlcnJvcjsKKysJaWYgKCFFVlBfU2lnblVwZGF0ZSgmY3R4LCBNc2cs IE1zZ2xlbikpCisrCQlnb3RvIGVycm9yOworKwlpZiAoIUVWUF9TaWduRmluYWwoJmN0eCwgc2ln YnVmLCAodW5zaWduZWQgaW50ICopJnNpZ2xlbiwgJnBrKSkKKysJCWdvdG8gZXJyb3I7CisrCisr CUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKKysKKysJZnB1dHMoIlMgPSAiLCBvdXQpOworKwor Kwlmb3IgKGkgPSAwOyBpIDwgc2lnbGVuOyBpKyspCisrCQlmcHJpbnRmKG91dCwgIiUwMlgiLCBz aWdidWZbaV0pOworKworKwlmcHV0cygiXG4iLCBvdXQpOworKworKwlyZXQgPSAxOworKworKwll cnJvcjoKKysKKysJcmV0dXJuIHJldDsKKysJfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWsvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4x ay9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhdnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFrL2Ny eXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jLmZpcHMJMjAxNS0wMS0wOSAwOTo1MTo1MS41 NTU5MjIzODEgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNf cnNhdnRlc3QuYwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU1NTkyMjM4MSArMDEwMAorQEAgLTAsMCAr MSwzNzcgQEAKKysvKiBmaXBzX3JzYXZ0ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBo ZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9q ZWN0IDIwMDUuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl CisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3Bl blNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQg Ik9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICog ICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVh c2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVu U1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRo b3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2pl Y3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBt dXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3 dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhF IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBU aGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVy aWMgWW91bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSku CisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4K KysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrCisrI2lmbmRlZiBP UEVOU1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysg ICAgcHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30K KysKKysjZWxzZQorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK2ludCByc2FfdGVzdChG SUxFICpvdXQsIEZJTEUgKmluLCBpbnQgc2FsdGxlbik7Cisrc3RhdGljIGludCByc2FfcHJpbnR2 ZXIoRklMRSAqb3V0LAorKwkJQklHTlVNICpuLCBCSUdOVU0gKmUsCisrCQljb25zdCBFVlBfTUQg KmRnc3QsCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLAorKwkJdW5zaWduZWQg Y2hhciAqUywgbG9uZyBTbGVuLCBpbnQgU2FsdGxlbik7CisrCisraW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQorKwl7CisrCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7CisrCisr CWludCByZXQgPSAxOworKwlpbnQgU2FsdGxlbiA9IC0xOworKworKwlpZighRklQU19tb2RlX3Nl dCgxKSkKKysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZ290byBlbmQ7CisrCQl9Cisr CisrCWlmICgoYXJnYyA+IDIpICYmICFzdHJjbXAoIi1zYWx0bGVuIiwgYXJndlsxXSkpCisrCQl7 CisrCQlTYWx0bGVuID0gYXRvaShhcmd2WzJdKTsKKysJCWlmIChTYWx0bGVuIDwgMCkKKysJCQl7 CisrCQkJZnByaW50ZihzdGRlcnIsICJGQVRBTDogSW52YWxpZCBzYWx0IGxlbmd0aFxuIik7Cisr CQkJZ290byBlbmQ7CisrCQkJfQorKwkJYXJnYyAtPSAyOworKwkJYXJndiArPSAyOworKwkJfQor KwllbHNlIGlmICgoYXJnYyA+IDEpICYmICFzdHJjbXAoIi14OTMxIiwgYXJndlsxXSkpCisrCQl7 CisrCQlTYWx0bGVuID0gLTI7CisrCQlhcmdjLS07CisrCQlhcmd2Kys7CisrCQl9CisrCisrCWlm IChhcmdjID09IDEpCisrCQlpbiA9IHN0ZGluOworKwllbHNlCisrCQlpbiA9IGZvcGVuKGFyZ3Zb MV0sICJyIik7CisrCisrCWlmIChhcmdjIDwgMikKKysJCW91dCA9IHN0ZG91dDsKKysJZWxzZQor KwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKKysKKysJaWYgKCFpbikKKysJCXsKKysJCWZw cmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJ Z290byBlbmQ7CisrCQl9CisrCisrCWlmICghb3V0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIs ICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7Cisr CQl9CisrCisrCWlmICghcnNhX3Rlc3Qob3V0LCBpbiwgU2FsdGxlbikpCisrCQl7CisrCQlmcHJp bnRmKHN0ZGVyciwgIkZBVEFMIFJTQVZURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7Cisr CQlnb3RvIGVuZDsKKysJCX0KKysJZWxzZQorKwkJcmV0ID0gMDsKKysKKysJZW5kOgorKworKwlp ZiAocmV0KQorKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCisrCWlmIChpbiAmJiAoaW4gIT0gc3Rk aW4pKQorKwkJZmNsb3NlKGluKTsKKysJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCisrCQlm Y2xvc2Uob3V0KTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJfQorKworKyNkZWZpbmUgUlNBX1RF U1RfTUFYTElORUxFTgkxMDI0MAorKworK2ludCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmlu LCBpbnQgU2FsdGxlbikKKysJeworKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsK KysJY2hhciAqa2V5d29yZCwgKnZhbHVlOworKwljb25zdCBFVlBfTUQgKmRnc3QgPSBOVUxMOwor KwlCSUdOVU0gKm4gPSBOVUxMLCAqZSA9IE5VTEw7CisrCXVuc2lnbmVkIGNoYXIgKk1zZyA9IE5V TEwsICpTID0gTlVMTDsKKysJbG9uZyBNc2dsZW4sIFNsZW47CisrCWludCByZXQgPSAwOworKwlp bnQgbG51bSA9IDA7CisrCisrCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFY TElORUxFTik7CisrCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVO KTsKKysKKysJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKKysJCWdvdG8gZXJyb3I7CisrCisr CXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwgaW4pKQorKwkJewor KwkJbG51bSsrOworKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKKysJCWtleXdvcmQgPSBs aW5lYnVmOworKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgo dW5zaWduZWQgY2hhcikqa2V5d29yZCkpCisrCQkJa2V5d29yZCsrOworKworKwkJLyogTG9vayBm b3IgPSBzaWduICovCisrCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7CisrCisrCQkvKiBJZiBu byA9IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbZm9vID0gYmFyXSBsaW5lKSBqdXN0IGNvcHkgKi8K KysJCWlmICghcCB8fCAqa2V5d29yZD09J1snKQorKwkJCXsKKysJCQlpZiAoZnB1dHMob2xpbmVi dWYsIG91dCkgPCAwKQorKwkJCQlnb3RvIGVycm9yOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysK KysJCXEgPSBwIC0gMTsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLworKwkJd2hp bGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJCSpxLS0gPSAwOworKworKwkJKnAg PSAwOworKwkJdmFsdWUgPSBwICsgMTsKKysKKysJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZy b20gdmFsdWUgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisr CQkJdmFsdWUrKzsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICov CisrCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysKKysJCXdoaWxlICgqcCA9PSAn XG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJCSpwLS0gPSAwOworKworKwkJ aWYgKCFzdHJjbXAoa2V5d29yZCwgIm4iKSkKKysJCQl7CisrCQkJaWYgKCFkb19oZXgyYm4oJm4s dmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJj bXAoa2V5d29yZCwgImUiKSkKKysJCQl7CisrCQkJaWYgKCFkb19oZXgyYm4oJmUsdmFsdWUpKQor KwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29y ZCwgIlNIQUFsZyIpKQorKwkJCXsKKysJCQlpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTEiKSkKKysJ CQkJZGdzdCA9IEVWUF9zaGExKCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTIy NCIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTIyNCgpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFs dWUsICJTSEEyNTYiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGEyNTYoKTsKKysJCQllbHNlIGlmICgh c3RyY21wKHZhbHVlLCAiU0hBMzg0IikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMzg0KCk7CisrCQkJ ZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTUxMiIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTUx MigpOworKwkJCWVsc2UKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwKKysJCQkJCSJGQVRB TDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIFwiJXNcIlxuIiwKKysJCQkJCQkJCXZhbHVlKTsKKysJ CQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwgIk1zZyIpKQorKwkJCXsKKysJCQlpZiAoTXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vy cm9yOworKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKKysJCQkJKigtLXZhbHVlKSA9ICcwJzsK KysJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZNc2dsZW4pOworKwkJCWlmICghTXNnKQorKwkJ CQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwg IlMiKSkKKysJCQl7CisrCQkJaWYgKFMpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJaWYg KHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkqKC0tdmFsdWUpID0gJzAnOworKwkJCVMgPSBoZXgy YmluX20odmFsdWUsICZTbGVuKTsKKysJCQlpZiAoIVMpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7 CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUmVzdWx0IikpCisrCQkJY29u dGludWU7CisrCQllbHNlCisrCQkJZ290byBwYXJzZV9lcnJvcjsKKysKKysJCWZwdXRzKG9saW5l YnVmLCBvdXQpOworKworKwkJaWYgKG4gJiYgZSAmJiBNc2cgJiYgUyAmJiBkZ3N0KQorKwkJCXsK KysJCQlpZiAoIXJzYV9wcmludHZlcihvdXQsIG4sIGUsIGRnc3QsCisrCQkJCQlNc2csIE1zZ2xl biwgUywgU2xlbiwgU2FsdGxlbikpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJT1BFTlNTTF9mcmVl KE1zZyk7CisrCQkJTXNnID0gTlVMTDsKKysJCQlPUEVOU1NMX2ZyZWUoUyk7CisrCQkJUyA9IE5V TEw7CisrCQkJfQorKworKwkJfQorKworKworKwlyZXQgPSAxOworKworKworKwllcnJvcjoKKysK KysJaWYgKG9saW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKKysJaWYgKGxpbmVi dWYpCisrCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7CisrCWlmIChuKQorKwkJQk5fZnJlZShuKTsK KysJaWYgKGUpCisrCQlCTl9mcmVlKGUpOworKworKwlyZXR1cm4gcmV0OworKworKwlwYXJzZV9l cnJvcjoKKysKKysJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5n IGxpbmUgJWRcbiIsIGxudW0pOworKworKwlnb3RvIGVycm9yOworKworKwl9CisrCisrc3RhdGlj IGludCByc2FfcHJpbnR2ZXIoRklMRSAqb3V0LAorKwkJQklHTlVNICpuLCBCSUdOVU0gKmUsCisr CQljb25zdCBFVlBfTUQgKmRnc3QsCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVu LAorKwkJdW5zaWduZWQgY2hhciAqUywgbG9uZyBTbGVuLCBpbnQgU2FsdGxlbikKKysJeworKwlp bnQgcmV0ID0gMCwgcjsKKysJLyogU2V0dXAgUlNBIGFuZCBFVlBfUEtFWSBzdHJ1Y3R1cmVzICov CisrCVJTQSAqcnNhX3B1YmtleSA9IE5VTEw7CisrCUVWUF9QS0VZIHBrOworKwlFVlBfTURfQ1RY IGN0eDsKKysJdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKKysJcnNhX3B1YmtleSA9IEZJUFNf cnNhX25ldygpOworKwlpZiAoIXJzYV9wdWJrZXkpCisrCQlnb3RvIGVycm9yOworKwlyc2FfcHVi a2V5LT5uID0gQk5fZHVwKG4pOworKwlyc2FfcHVia2V5LT5lID0gQk5fZHVwKGUpOworKwlpZiAo IXJzYV9wdWJrZXktPm4gfHwgIXJzYV9wdWJrZXktPmUpCisrCQlnb3RvIGVycm9yOworKwlway50 eXBlID0gRVZQX1BLRVlfUlNBOworKwlway5wa2V5LnJzYSA9IHJzYV9wdWJrZXk7CisrCisrCUVW UF9NRF9DVFhfaW5pdCgmY3R4KTsKKysKKysJaWYgKFNhbHRsZW4gPj0gMCkKKysJCXsKKysJCU1f RVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwKKysJCQlFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUyB8 IChTYWx0bGVuIDw8IDE2KSk7CisrCQl9CisrCWVsc2UgaWYgKFNhbHRsZW4gPT0gLTIpCisrCQlN X0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSk7Cisr CWlmICghRVZQX1ZlcmlmeUluaXRfZXgoJmN0eCwgZGdzdCwgTlVMTCkpCisrCQlnb3RvIGVycm9y OworKwlpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJmN0eCwgTXNnLCBNc2dsZW4pKQorKwkJZ290byBl cnJvcjsKKysKKysJciA9IEVWUF9WZXJpZnlGaW5hbCgmY3R4LCBTLCBTbGVuLCAmcGspOworKwor KworKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7CisrCisrCWlmIChyIDwgMCkKKysJCWdvdG8g ZXJyb3I7CisrCUVSUl9jbGVhcl9lcnJvcigpOworKworKwlpZiAociA9PSAwKQorKwkJZnB1dHMo IlJlc3VsdCA9IEZcbiIsIG91dCk7CisrCWVsc2UKKysJCWZwdXRzKCJSZXN1bHQgPSBQXG4iLCBv dXQpOworKworKwlyZXQgPSAxOworKworKwllcnJvcjoKKysJaWYgKHJzYV9wdWJrZXkpCisrCQlG SVBTX3JzYV9mcmVlKHJzYV9wdWJrZXkpOworKwlpZiAoYnVmKQorKwkJT1BFTlNTTF9mcmVlKGJ1 Zik7CisrCisrCXJldHVybiByZXQ7CisrCX0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjFrL2NyeXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xay9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRv L2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYy5maXBzCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTU2OTIy NDA0ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRl c3QuYwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU1NjkyMjQwNCArMDEwMAorQEAgLTAsMCArMSwzODgg QEAKKysvKiBmaXBzX3NoYXRlc3QuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhl bnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QgMjAw NS4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3Bl blNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAg ICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRp c3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9y Zy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNT TCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3Rl IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250 YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisr ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysg KgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5T U0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKgorKyAqIFRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3Vu ZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKgor KyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNs dWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorKworKyNpZm5kZWYgT1BFTlNT TF9GSVBTCisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHBy aW50ZigiTm8gRklQUyBTSEFYWFggc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9Cisr CisrI2Vsc2UKKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytzdGF0aWMgaW50IGRnc3Rf dGVzdChGSUxFICpvdXQsIEZJTEUgKmluKTsKKytzdGF0aWMgaW50IHByaW50X2Rnc3QoY29uc3Qg RVZQX01EICptZCwgRklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTXNnbGVu KTsKKytzdGF0aWMgaW50IHByaW50X21vbnRlKGNvbnN0IEVWUF9NRCAqbWQsIEZJTEUgKm91dCwK KysJCXVuc2lnbmVkIGNoYXIgKlNlZWQsIGludCBTZWVkTGVuKTsKKysKKytpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCisrCXsKKysJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsK KysKKysJaW50IHJldCA9IDE7CisrCisrCWlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwkJeworKwkJ ZG9fcHJpbnRfZXJyb3JzKCk7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKGFyZ2MgPT0g MSkKKysJCWluID0gc3RkaW47CisrCWVsc2UKKysJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsK KysKKysJaWYgKGFyZ2MgPCAyKQorKwkJb3V0ID0gc3Rkb3V0OworKwllbHNlCisrCQlvdXQgPSBm b3Blbihhcmd2WzJdLCAidyIpOworKworKwlpZiAoIWluKQorKwkJeworKwkJZnByaW50ZihzdGRl cnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsK KysJCX0KKysKKysJaWYgKCFvdXQpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91 dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJ aWYgKCFkZ3N0X3Rlc3Qob3V0LCBpbikpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFM IGRpZ2VzdCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9Cisr CWVsc2UKKysJCXJldCA9IDA7CisrCisrCWVuZDoKKysKKysJaWYgKHJldCkKKysJCWRvX3ByaW50 X2Vycm9ycygpOworKworKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKKysJCWZjbG9zZShpbik7 CisrCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQorKwkJZmNsb3NlKG91dCk7CisrCisrCXJl dHVybiByZXQ7CisrCisrCX0KKysKKysjZGVmaW5lIFNIQV9URVNUX01BWF9CSVRTCTEwMjQwMAor KyNkZWZpbmUgU0hBX1RFU1RfTUFYTElORUxFTgkoKChTSEFfVEVTVF9NQVhfQklUUyA+PiAzKSAq IDIpICsgMTAwKQorKworK2ludCBkZ3N0X3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbikKKysJewor Kwljb25zdCBFVlBfTUQgKm1kID0gTlVMTDsKKysJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAq cCwgKnE7CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysJdW5zaWduZWQgY2hhciAqTXNnID0g TlVMTCwgKlNlZWQgPSBOVUxMOworKwlsb25nIE1zZ0xlbiA9IC0xLCBMZW4gPSAtMSwgU2VlZExl biA9IC0xOworKwlpbnQgcmV0ID0gMDsKKysJaW50IGxudW0gPSAwOworKworKwlvbGluZWJ1ZiA9 IE9QRU5TU0xfbWFsbG9jKFNIQV9URVNUX01BWExJTkVMRU4pOworKwlsaW5lYnVmID0gT1BFTlNT TF9tYWxsb2MoU0hBX1RFU1RfTUFYTElORUxFTik7CisrCisrCWlmICghbGluZWJ1ZiB8fCAhb2xp bmVidWYpCisrCQlnb3RvIGVycm9yOworKworKworKwl3aGlsZSAoZmdldHMob2xpbmVidWYsIFNI QV9URVNUX01BWExJTkVMRU4sIGluKSkKKysJCXsKKysJCWxudW0rKzsKKysJCXN0cmNweShsaW5l YnVmLCBvbGluZWJ1Zik7CisrCQlrZXl3b3JkID0gbGluZWJ1ZjsKKysJCS8qIFNraXAgbGVhZGlu ZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQor KwkJCWtleXdvcmQrKzsKKysKKysJCS8qIExvb2sgZm9yID0gc2lnbiAqLworKwkJcCA9IHN0cmNo cihsaW5lYnVmLCAnPScpOworKworKwkJLyogSWYgbm8gPSBvciBzdGFydHMgd2l0aCBbIChmb3Ig W0w9MjBdIGxpbmUpIGp1c3QgY29weSAqLworKwkJaWYgKCFwKQorKwkJCXsKKysJCQlmcHV0cyhv bGluZWJ1Ziwgb3V0KTsKKysJCQljb250aW51ZTsKKysJCQl9CisrCisrCQlxID0gcCAtIDE7Cisr CisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNp Z25lZCBjaGFyKSpxKSkKKysJCQkqcS0tID0gMDsKKysKKysJCSpwID0gMDsKKysJCXZhbHVlID0g cCArIDE7CisrCisrCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQl3 aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQorKwkJCXZhbHVlKys7CisrCisr CQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJcCA9IHZhbHVlICsg c3RybGVuKHZhbHVlKSAtIDE7CisrCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNp Z25lZCBjaGFyKSpwKSkKKysJCQkqcC0tID0gMDsKKysKKysJCWlmICghc3RyY21wKGtleXdvcmQs IltMIikgJiYgKnA9PSddJykKKysJCQl7CisrCQkJc3dpdGNoIChhdG9pKHZhbHVlKSkKKysJCQkJ eworKwkJCQljYXNlIDIwOiBtZD1FVlBfc2hhMSgpOyAgIGJyZWFrOworKwkJCQljYXNlIDI4OiBt ZD1FVlBfc2hhMjI0KCk7IGJyZWFrOworKwkJCQljYXNlIDMyOiBtZD1FVlBfc2hhMjU2KCk7IGJy ZWFrOworKwkJCQljYXNlIDQ4OiBtZD1FVlBfc2hhMzg0KCk7IGJyZWFrOworKwkJCQljYXNlIDY0 OiBtZD1FVlBfc2hhNTEyKCk7IGJyZWFrOworKwkJCQlkZWZhdWx0OiBnb3RvIHBhcnNlX2Vycm9y OworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTGVuIikpCisr CQkJeworKwkJCWlmIChMZW4gIT0gLTEpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJTGVu ID0gYXRvaSh2YWx1ZSk7CisrCQkJaWYgKExlbiA8IDApCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7 CisrCQkJLyogT25seSBoYW5kbGUgbXVsdGlwbGVzIG9mIDggYml0cyAqLworKwkJCWlmIChMZW4g JiAweDcpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJaWYgKExlbiA+IFNIQV9URVNUX01B WF9CSVRTKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCU1zZ0xlbiA9IExlbiA+PiAzOwor KwkJCX0KKysKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQorKwkJCXsKKysJ CQlsb25nIHRtcGxlbjsKKysJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCisrCQkJCSooLS12YWx1 ZSkgPSAnMCc7CisrCQkJaWYgKE1zZykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlNc2cg PSBoZXgyYmluX20odmFsdWUsICZ0bXBsZW4pOworKwkJCWlmICghTXNnKQorKwkJCQlnb3RvIHBh cnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlNlZWQiKSkK KysJCQl7CisrCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkqKC0tdmFsdWUpID0gJzAn OworKwkJCWlmIChTZWVkKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCVNlZWQgPSBoZXgy YmluX20odmFsdWUsICZTZWVkTGVuKTsKKysJCQlpZiAoIVNlZWQpCisrCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTUQiKSkKKysJCQlj b250aW51ZTsKKysJCWVsc2UKKysJCQlnb3RvIHBhcnNlX2Vycm9yOworKworKwkJZnB1dHMob2xp bmVidWYsIG91dCk7CisrCisrCQlpZiAobWQgJiYgTXNnICYmIChNc2dMZW4gPj0gMCkpCisrCQkJ eworKwkJCWlmICghcHJpbnRfZGdzdChtZCwgb3V0LCBNc2csIE1zZ0xlbikpCisrCQkJCWdvdG8g ZXJyb3I7CisrCQkJT1BFTlNTTF9mcmVlKE1zZyk7CisrCQkJTXNnID0gTlVMTDsKKysJCQlNc2dM ZW4gPSAtMTsKKysJCQlMZW4gPSAtMTsKKysJCQl9CisrCQllbHNlIGlmIChtZCAmJiBTZWVkICYm IChTZWVkTGVuID4gMCkpCisrCQkJeworKwkJCWlmICghcHJpbnRfbW9udGUobWQsIG91dCwgU2Vl ZCwgU2VlZExlbikpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJT1BFTlNTTF9mcmVlKFNlZWQpOwor KwkJCVNlZWQgPSBOVUxMOworKwkJCVNlZWRMZW4gPSAtMTsKKysJCQl9CisrCQorKworKwkJfQor KworKworKwlyZXQgPSAxOworKworKworKwllcnJvcjoKKysKKysJaWYgKG9saW5lYnVmKQorKwkJ T1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKKysJaWYgKGxpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUo bGluZWJ1Zik7CisrCWlmIChNc2cpCisrCQlPUEVOU1NMX2ZyZWUoTXNnKTsKKysJaWYgKFNlZWQp CisrCQlPUEVOU1NMX2ZyZWUoU2VlZCk7CisrCisrCXJldHVybiByZXQ7CisrCisrCXBhcnNlX2Vy cm9yOgorKworKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3Npbmcg bGluZSAlZFxuIiwgbG51bSk7CisrCisrCWdvdG8gZXJyb3I7CisrCisrCX0KKysKKytzdGF0aWMg aW50IHByaW50X2Rnc3QoY29uc3QgRVZQX01EICplbWQsIEZJTEUgKm91dCwKKysJCXVuc2lnbmVk IGNoYXIgKk1zZywgaW50IE1zZ2xlbikKKysJeworKwlpbnQgaSwgbWRsZW47CisrCXVuc2lnbmVk IGNoYXIgbWRbRVZQX01BWF9NRF9TSVpFXTsKKysJaWYgKCFFVlBfRGlnZXN0KE1zZywgTXNnbGVu LCBtZCwgKHVuc2lnbmVkIGludCAqKSZtZGxlbiwgZW1kLCBOVUxMKSkKKysJCXsKKysJCWZwdXRz KCJFcnJvciBjYWxjdWxhdGluZyBIQVNIXG4iLCBzdGRlcnIpOworKwkJcmV0dXJuIDA7CisrCQl9 CisrCWZwdXRzKCJNRCA9ICIsIG91dCk7CisrCWZvciAoaSA9IDA7IGkgPCBtZGxlbjsgaSsrKQor KwkJZnByaW50ZihvdXQsICIlMDJ4IiwgbWRbaV0pOworKwlmcHV0cygiXG4iLCBvdXQpOworKwly ZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgcHJpbnRfbW9udGUoY29uc3QgRVZQX01EICpt ZCwgRklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hhciAqU2VlZCwgaW50IFNlZWRMZW4pCisrCXsK KysJdW5zaWduZWQgaW50IGksIGosIGs7CisrCWludCByZXQgPSAwOworKwlFVlBfTURfQ1RYIGN0 eDsKKysJdW5zaWduZWQgY2hhciAqbTEsICptMiwgKm0zLCAqcDsKKysJdW5zaWduZWQgaW50IG1s ZW4sIG0xbGVuLCBtMmxlbiwgbTNsZW47CisrCisrCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKKysK KysJaWYgKFNlZWRMZW4gPiBFVlBfTUFYX01EX1NJWkUpCisrCQltbGVuID0gU2VlZExlbjsKKysJ ZWxzZQorKwkJbWxlbiA9IEVWUF9NQVhfTURfU0laRTsKKysKKysJbTEgPSBPUEVOU1NMX21hbGxv YyhtbGVuKTsKKysJbTIgPSBPUEVOU1NMX21hbGxvYyhtbGVuKTsKKysJbTMgPSBPUEVOU1NMX21h bGxvYyhtbGVuKTsKKysKKysJaWYgKCFtMSB8fCAhbTIgfHwgIW0zKQorKwkJZ290byBtY19lcnJv cjsKKysKKysJbTFsZW4gPSBtMmxlbiA9IG0zbGVuID0gU2VlZExlbjsKKysJbWVtY3B5KG0xLCBT ZWVkLCBTZWVkTGVuKTsKKysJbWVtY3B5KG0yLCBTZWVkLCBTZWVkTGVuKTsKKysJbWVtY3B5KG0z LCBTZWVkLCBTZWVkTGVuKTsKKysKKysJZnB1dHMoIlxuIiwgb3V0KTsKKysKKysJZm9yIChqID0g MDsgaiA8IDEwMDsgaisrKQorKwkJeworKwkJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykKKysJ CQl7CisrCQkJRVZQX0RpZ2VzdEluaXRfZXgoJmN0eCwgbWQsIE5VTEwpOworKwkJCUVWUF9EaWdl c3RVcGRhdGUoJmN0eCwgbTEsIG0xbGVuKTsKKysJCQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIG0y LCBtMmxlbik7CisrCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMywgbTNsZW4pOworKwkJCXAg PSBtMTsKKysJCQltMSA9IG0yOworKwkJCW0xbGVuID0gbTJsZW47CisrCQkJbTIgPSBtMzsKKysJ CQltMmxlbiA9IG0zbGVuOworKwkJCW0zID0gcDsKKysJCQlFVlBfRGlnZXN0RmluYWxfZXgoJmN0 eCwgbTMsICZtM2xlbik7CisrCQkJfQorKwkJZnByaW50ZihvdXQsICJDT1VOVCA9ICVkXG4iLCBq KTsKKysJCWZwdXRzKCJNRCA9ICIsIG91dCk7CisrCQlmb3IgKGsgPSAwOyBrIDwgbTNsZW47IGsr KykKKysJCQlmcHJpbnRmKG91dCwgIiUwMngiLCBtM1trXSk7CisrCQlmcHV0cygiXG5cbiIsIG91 dCk7CisrCQltZW1jcHkobTEsIG0zLCBtM2xlbik7CisrCQltZW1jcHkobTIsIG0zLCBtM2xlbik7 CisrCQltMWxlbiA9IG0ybGVuID0gbTNsZW47CisrCQl9CisrCisrCXJldCA9IDE7CisrCisrCW1j X2Vycm9yOgorKwlpZiAobTEpCisrCQlPUEVOU1NMX2ZyZWUobTEpOworKwlpZiAobTIpCisrCQlP UEVOU1NMX2ZyZWUobTIpOworKwlpZiAobTMpCisrCQlPUEVOU1NMX2ZyZWUobTMpOworKworKwlF VlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7CisrCisrCXJldHVybiByZXQ7CisrCX0KKysKKysjZW5k aWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwuaC5m aXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwuaAorLS0tIG9wZW5z c2wtMS4wLjFrL2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwuaC5maXBzCTIwMTUtMDEtMDkgMDk6 NTE6NTEuNTU2OTIyNDA0ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX3V0bC5oCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTU2OTIyNDA0ICswMTAwCitAQCAtMCww ICsxLDM0MyBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA3IFRoZSBP cGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRv Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAq ICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3Qg ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wu b3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVu U1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21v dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHBy aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNv bnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNT TCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91 dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0 LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVz dCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cu b3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF IE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg VEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysg KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQ T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworK3ZvaWQgZG9fcHJpbnRf ZXJyb3JzKHZvaWQpCisrCXsKKysJY29uc3QgY2hhciAqZmlsZSwgKmRhdGE7CisrCWludCBsaW5l LCBmbGFnczsKKysJdW5zaWduZWQgbG9uZyBsOworKwl3aGlsZSAoKGwgPSBFUlJfZ2V0X2Vycm9y X2xpbmVfZGF0YSgmZmlsZSwgJmxpbmUsICZkYXRhLCAmZmxhZ3MpKSkKKysJCXsKKysJCWZwcmlu dGYoc3RkZXJyLCAiRVJST1I6JWx4OmxpYj0lZCxmdW5jPSVkLHJlYXNvbj0lZCIKKysJCQkJIjpm aWxlPSVzOmxpbmU9JWQ6JXNcbiIsCisrCQkJbCwgRVJSX0dFVF9MSUIobCksIEVSUl9HRVRfRlVO QyhsKSwgRVJSX0dFVF9SRUFTT04obCksCisrCQkJZmlsZSwgbGluZSwgZmxhZ3MgJiBFUlJfVFhU X1NUUklORyA/IGRhdGEgOiAiIik7CisrCQl9CisrCX0KKysKKytpbnQgaGV4MmJpbihjb25zdCBj aGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0KQorKyAgICB7CisrICAgIGludCBuMSwgbjI7Cisr ICAgIHVuc2lnbmVkIGNoYXIgY2g7CisrCisrICAgIGZvciAobjE9MCxuMj0wIDsgaW5bbjFdICYm IGluW24xXSAhPSAnXG4nIDsgKQorKwl7IC8qIGZpcnN0IGJ5dGUgKi8KKysJaWYgKChpbltuMV0g Pj0gJzAnKSAmJiAoaW5bbjFdIDw9ICc5JykpCisrCSAgICBjaCA9IGluW24xKytdIC0gJzAnOwor KwllbHNlIGlmICgoaW5bbjFdID49ICdBJykgJiYgKGluW24xXSA8PSAnRicpKQorKwkgICAgY2gg PSBpbltuMSsrXSAtICdBJyArIDEwOworKwllbHNlIGlmICgoaW5bbjFdID49ICdhJykgJiYgKGlu W24xXSA8PSAnZicpKQorKwkgICAgY2ggPSBpbltuMSsrXSAtICdhJyArIDEwOworKwllbHNlCisr CSAgICByZXR1cm4gLTE7CisrCWlmKCFpbltuMV0pCisrCSAgICB7CisrCSAgICBvdXRbbjIrK109 Y2g7CisrCSAgICBicmVhazsKKysJICAgIH0KKysJb3V0W24yXSA9IGNoIDw8IDQ7CisrCS8qIHNl Y29uZCBieXRlICovCisrCWlmICgoaW5bbjFdID49ICcwJykgJiYgKGluW24xXSA8PSAnOScpKQor KwkgICAgY2ggPSBpbltuMSsrXSAtICcwJzsKKysJZWxzZSBpZiAoKGluW24xXSA+PSAnQScpICYm IChpbltuMV0gPD0gJ0YnKSkKKysJICAgIGNoID0gaW5bbjErK10gLSAnQScgKyAxMDsKKysJZWxz ZSBpZiAoKGluW24xXSA+PSAnYScpICYmIChpbltuMV0gPD0gJ2YnKSkKKysJICAgIGNoID0gaW5b bjErK10gLSAnYScgKyAxMDsKKysJZWxzZQorKwkgICAgcmV0dXJuIC0xOworKwlvdXRbbjIrK10g fD0gY2g7CisrCX0KKysgICAgcmV0dXJuIG4yOworKyAgICB9CisrCisrdW5zaWduZWQgY2hhciAq aGV4MmJpbl9tKGNvbnN0IGNoYXIgKmluLCBsb25nICpwbGVuKQorKwl7CisrCXVuc2lnbmVkIGNo YXIgKnA7CisrCXAgPSBPUEVOU1NMX21hbGxvYygoc3RybGVuKGluKSArIDEpLzIpOworKwkqcGxl biA9IGhleDJiaW4oaW4sIHApOworKwlyZXR1cm4gcDsKKysJfQorKworK2ludCBkb19oZXgyYm4o QklHTlVNICoqcHIsIGNvbnN0IGNoYXIgKmluKQorKwl7CisrCXVuc2lnbmVkIGNoYXIgKnA7Cisr CWxvbmcgcGxlbjsKKysJaW50IHIgPSAwOworKwlwID0gaGV4MmJpbl9tKGluLCAmcGxlbik7Cisr CWlmICghcCkKKysJCXJldHVybiAwOworKwlpZiAoISpwcikKKysJCSpwciA9IEJOX25ldygpOwor KwlpZiAoISpwcikKKysJCXJldHVybiAwOworKwlpZiAoQk5fYmluMmJuKHAsIHBsZW4sICpwcikp CisrCQlyID0gMTsKKysJT1BFTlNTTF9mcmVlKHApOworKwlyZXR1cm4gcjsKKysJfQorKworK2lu dCBkb19ibl9wcmludChGSUxFICpvdXQsIEJJR05VTSAqYm4pCisrCXsKKysJaW50IGxlbiwgaTsK KysJdW5zaWduZWQgY2hhciAqdG1wOworKwlsZW4gPSBCTl9udW1fYnl0ZXMoYm4pOworKwlpZiAo bGVuID09IDApCisrCQl7CisrCQlmcHV0cygiMDAiLCBvdXQpOworKwkJcmV0dXJuIDE7CisrCQl9 CisrCisrCXRtcCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7CisrCWlmICghdG1wKQorKwkJeworKwkJ ZnByaW50ZihzdGRlcnIsICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7CisrCQlyZXR1cm4g MDsKKysJCX0KKysJQk5fYm4yYmluKGJuLCB0bXApOworKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBp KyspCisrCQlmcHJpbnRmKG91dCwgIiUwMngiLCB0bXBbaV0pOworKwlPUEVOU1NMX2ZyZWUodG1w KTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytpbnQgZG9fYm5fcHJpbnRfbmFtZShGSUxFICpvdXQs IGNvbnN0IGNoYXIgKm5hbWUsIEJJR05VTSAqYm4pCisrCXsKKysJaW50IHI7CisrCWZwcmludGYo b3V0LCAiJXMgPSAiLCBuYW1lKTsKKysJciA9IGRvX2JuX3ByaW50KG91dCwgYm4pOworKwlpZiAo IXIpCisrCQlyZXR1cm4gMDsKKysJZnB1dHMoIlxuIiwgb3V0KTsKKysJcmV0dXJuIDE7CisrCX0K KysKKytpbnQgcGFyc2VfbGluZShjaGFyICoqcGt3LCBjaGFyICoqcHZhbCwgY2hhciAqbGluZWJ1 ZiwgY2hhciAqb2xpbmVidWYpCisrCXsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVlLCAqcCwgKnE7 CisrCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7CisrCWtleXdvcmQgPSBsaW5lYnVmOworKwkv KiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIp KmtleXdvcmQpKQorKwkJa2V5d29yZCsrOworKworKwkvKiBMb29rIGZvciA9IHNpZ24gKi8KKysJ cCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKworKwkvKiBJZiBubyAnPScgZXhpdCAqLworKwlp ZiAoIXApCisrCQlyZXR1cm4gMDsKKysKKysJcSA9IHAgLSAxOworKworKwkvKiBSZW1vdmUgdHJh aWxpbmcgc3BhY2UgKi8KKysJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJ KnEtLSA9IDA7CisrCisrCSpwID0gMDsKKysJdmFsdWUgPSBwICsgMTsKKysKKysJLyogUmVtb3Zl IGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQg Y2hhcikqdmFsdWUpKQorKwkJdmFsdWUrKzsKKysKKysJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNl IGZyb20gdmFsdWUgKi8KKysJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisrCXdo aWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJKnAtLSA9 IDA7CisrCisrCSpwa3cgPSBrZXl3b3JkOworKwkqcHZhbCA9IHZhbHVlOworKwlyZXR1cm4gMTsK KysJfQorKworK0JJR05VTSAqaGV4MmJuKGNvbnN0IGNoYXIgKmluKQorKyAgICB7CisrICAgIEJJ R05VTSAqcD1OVUxMOworKworKyAgICBpZiAoIWRvX2hleDJibigmcCwgaW4pKQorKwlyZXR1cm4g TlVMTDsKKysKKysgICAgcmV0dXJuIHA7CisrICAgIH0KKysKKytpbnQgYmluMmhleChjb25zdCB1 bnNpZ25lZCBjaGFyICppbixpbnQgbGVuLGNoYXIgKm91dCkKKysgICAgeworKyAgICBpbnQgbjEs IG4yOworKyAgICB1bnNpZ25lZCBjaGFyIGNoOworKworKyAgICBmb3IgKG4xPTAsbjI9MCA7IG4x IDwgbGVuIDsgKytuMSkKKysJeworKwljaD1pbltuMV0gPj4gNDsKKysJaWYgKGNoIDw9IDB4MDkp CisrCSAgICBvdXRbbjIrK109Y2grJzAnOworKwllbHNlCisrCSAgICBvdXRbbjIrK109Y2gtMTAr J2EnOworKwljaD1pbltuMV0gJiAweDBmOworKwlpZihjaCA8PSAweDA5KQorKwkgICAgb3V0W24y KytdPWNoKycwJzsKKysJZWxzZQorKwkgICAgb3V0W24yKytdPWNoLTEwKydhJzsKKysJfQorKyAg ICBvdXRbbjJdPSdcMCc7CisrICAgIHJldHVybiBuMjsKKysgICAgfQorKworK3ZvaWQgcHYoY29u c3QgY2hhciAqdGFnLGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZhbCxpbnQgbGVuKQorKyAgICB7Cisr ICAgIGNoYXIgb2J1ZlsyMDQ4XTsKKysKKysgICAgYmluMmhleCh2YWwsbGVuLG9idWYpOworKyAg ICBwcmludGYoIiVzID0gJXNcbiIsdGFnLG9idWYpOworKyAgICB9CisrCisrLyogVG8gYXZvaWQg ZXh0ZW5zaXZlIGNoYW5nZXMgdG8gdGVzdCBwcm9ncmFtIGF0IHRoaXMgc3RhZ2UganVzdCBjb252 ZXJ0CisrICogdGhlIGlucHV0IGxpbmUgaW50byBhbiBhY2NlcHRhYmxlIGZvcm0uIEtleXdvcmQg bGluZXMgY29udmVydGVkIHRvIGZvcm0KKysgKiAia2V5d29yZCA9IHZhbHVlXG4iIG5vIG1hdHRl ciB3aGF0IHdoaXRlIHNwYWNlIHByZXNlbnQsIGFsbCBvdGhlciBsaW5lcworKyAqIGp1c3QgaGF2 ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZSByZW1vdmVkLgorKyAqLworKworK2ludCB0aWR5 X2xpbmUoY2hhciAqbGluZWJ1ZiwgY2hhciAqb2xpbmVidWYpCisrCXsKKysJY2hhciAqa2V5d29y ZCwgKnZhbHVlLCAqcCwgKnE7CisrCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7CisrCWtleXdv cmQgPSBsaW5lYnVmOworKwkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJd2hpbGUgKGlzc3Bh Y2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQorKwkJa2V5d29yZCsrOworKwkvKiBMb29rIGZv ciA9IHNpZ24gKi8KKysJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKworKwkvKiBJZiBubyAn PScganVzdCBjaG9wIGxlYWRpbmcsIHRyYWlsaW5nIHdzICovCisrCWlmICghcCkKKysJCXsKKysJ CXAgPSBrZXl3b3JkICsgc3RybGVuKGtleXdvcmQpIC0gMTsKKysJCXdoaWxlICgqcCA9PSAnXG4n IHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJCSpwLS0gPSAwOworKwkJc3RyY3B5 KG9saW5lYnVmLCBrZXl3b3JkKTsKKysJCXN0cmNhdChvbGluZWJ1ZiwgIlxuIik7CisrCQlyZXR1 cm4gMTsKKysJCX0KKysKKysJcSA9IHAgLSAxOworKworKwkvKiBSZW1vdmUgdHJhaWxpbmcgc3Bh Y2UgKi8KKysJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJKnEtLSA9IDA7 CisrCisrCSpwID0gMDsKKysJdmFsdWUgPSBwICsgMTsKKysKKysJLyogUmVtb3ZlIGxlYWRpbmcg c3BhY2UgZnJvbSB2YWx1ZSAqLworKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFs dWUpKQorKwkJdmFsdWUrKzsKKysKKysJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFs dWUgKi8KKysJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisrCXdoaWxlICgqcCA9 PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJKnAtLSA9IDA7CisrCisr CXN0cmNweShvbGluZWJ1Ziwga2V5d29yZCk7CisrCXN0cmNhdChvbGluZWJ1ZiwgIiA9ICIpOwor KwlzdHJjYXQob2xpbmVidWYsIHZhbHVlKTsKKysJc3RyY2F0KG9saW5lYnVmLCAiXG4iKTsKKysK KysJcmV0dXJuIDE7CisrCX0KKysKKysvKiBOQjogdGhpcyByZXR1cm4gdGhlIG51bWJlciBvZiBf Yml0c18gcmVhZCAqLworK2ludCBiaW50MmJpbihjb25zdCBjaGFyICppbiwgaW50IGxlbiwgdW5z aWduZWQgY2hhciAqb3V0KQorKyAgICB7CisrICAgIGludCBuOworKworKyAgICBtZW1zZXQob3V0 LDAsbGVuKTsKKysgICAgZm9yKG49MCA7IG4gPCBsZW4gOyArK24pCisrCWlmKGluW25dID09ICcx JykKKysJICAgIG91dFtuLzhdfD0oMHg4MCA+PiAobiU4KSk7CisrICAgIHJldHVybiBsZW47Cisr ICAgIH0KKysKKytpbnQgYmluMmJpbnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4saW50IGxlbixj aGFyICpvdXQpCisrICAgIHsKKysgICAgaW50IG47CisrCisrICAgIGZvcihuPTAgOyBuIDwgbGVu IDsgKytuKQorKwlvdXRbbl09KGluW24vOF0mKDB4ODAgPj4gKG4lOCkpKSA/ICcxJyA6ICcwJzsK KysgICAgcmV0dXJuIG47CisrICAgIH0KKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKyt2b2lkIFByaW50VmFsdWUoY2hhciAqdGFnLCB1 bnNpZ25lZCBjaGFyICp2YWwsIGludCBsZW4pCisreworKyNpZiBWRVJCT1NFCisrICBjaGFyIG9i dWZbMjA0OF07CisrICBpbnQgb2xlbjsKKysgIG9sZW4gPSBiaW4yaGV4KHZhbCwgbGVuLCBvYnVm KTsKKysgIHByaW50ZigiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOworKyNlbmRpZgor K30KKysKKyt2b2lkIE91dHB1dFZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBp bnQgbGVuLCBGSUxFICpyZnAsaW50IGJpdG1vZGUpCisrICAgIHsKKysgICAgY2hhciBvYnVmWzIw NDhdOworKyAgICBpbnQgb2xlbjsKKysKKysgICAgaWYoYml0bW9kZSkKKysJb2xlbj1iaW4yYmlu dCh2YWwsbGVuLG9idWYpOworKyAgICBlbHNlCisrCW9sZW49YmluMmhleCh2YWwsbGVuLG9idWYp OworKworKyAgICBmcHJpbnRmKHJmcCwgIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsK KysjaWYgVkVSQk9TRQorKyAgICBwcmludGYoIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVm KTsKKysjZW5kaWYKKysgICAgfQorKworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2Zp cHMvZmlwc19hZXNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2Zp cHNfYWVzX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9maXBzX2Fl c19zZWxmdGVzdC5jLmZpcHMJMjAxNS0wMS0wOSAwOTo1MTo1MS41NTY5MjI0MDQgKzAxMDAKKysr KyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jCTIwMTUtMDEt MDkgMDk6NTE6NTEuNTU2OTIyNDA0ICswMTAwCitAQCAtMCwwICsxLDM1OSBAQAorKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwg cmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICog YXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysg KgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBv ciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBU aGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90 IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3Ns LWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJP cGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICog ICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0 cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2lu ZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgor KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFT IElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBP UgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysg KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKworKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKytzdGF0aWMgY29uc3Qgc3RydWN0CisrICAgIHsKKysgICAgY29uc3QgdW5zaWdu ZWQgY2hhciBrZXlbMTZdOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsxNl07 CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsxNl07CisrICAgIH0gdGVzdHNb XT0KKysJeworKwl7CisrCXsgMHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3 LAorKwkgIDB4MDgsMHgwOSwweDBBLDB4MEIsMHgwQywweDBELDB4MEUsMHgwRiB9LAorKwl7IDB4 MDAsMHgxMSwweDIyLDB4MzMsMHg0NCwweDU1LDB4NjYsMHg3NywKKysJICAweDg4LDB4OTksMHhB QSwweEJCLDB4Q0MsMHhERCwweEVFLDB4RkYgfSwKKysJeyAweDY5LDB4QzQsMHhFMCwweEQ4LDB4 NkEsMHg3QiwweDA0LDB4MzAsCisrCSAgMHhEOCwweENELDB4QjcsMHg4MCwweDcwLDB4QjQsMHhD NSwweDVBIH0sCisrCX0sCisrCX07CisrCisrc3RhdGljIGludCBjb3JydXB0X2FlczsKKysKKyt2 b2lkIEZJUFNfY29ycnVwdF9hZXMoKQorKyAgICB7CisrICAgIGNvcnJ1cHRfYWVzID0gMTsKKysg ICAgfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X2FlcygpCisrICAgIHsKKysgICAgaW50IG47Cisr ICAgIGludCByZXQgPSAwOworKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7CisrICAgIEVWUF9DSVBI RVJfQ1RYX2luaXQoJmN0eCk7CisrCisrICAgIGZvcihuPTAgOyBuIDwgMSA7ICsrbikKKysJewor Kwl1bnNpZ25lZCBjaGFyIGtleVsxNl07CisrCisrCW1lbWNweShrZXksIHRlc3RzW25dLmtleSwg c2l6ZW9mKGtleSkpOworKwlpZiAoY29ycnVwdF9hZXMpCisrCQlrZXlbMF0rKzsKKysJaWYgKGZp cHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksCisrCQkJCWtleSwgTlVMTCwK KysJCQkJdGVzdHNbbl0ucGxhaW50ZXh0LAorKwkJCQl0ZXN0c1tuXS5jaXBoZXJ0ZXh0LAorKwkJ CQkxNikgPD0gMCkKKysJCWdvdG8gZXJyOworKwl9CisrICAgIHJldCA9IDE7CisrICAgIGVycjoK KysgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysgICAgaWYgKHJldCA9PSAwKQor KwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVMsRklQU19SX1NFTEZURVNUX0ZB SUxFRCk7CisrICAgIHJldHVybiByZXQ7CisrICAgIH0KKysKKysvKiBBRVMtQ0NNIHRlc3QgZGF0 YSBmcm9tIE5JU1QgcHVibGljIHRlc3QgdmVjdG9ycyAqLworKworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGNjbV9rZXlbXSA9IHsKKysJMHhjZSwweGIwLDB4MDksMHhhZSwweGE0LDB4NDUs MHg0NCwweDUxLDB4ZmUsMHhhZCwweGYwLDB4ZTYsCisrCTB4YjMsMHg2ZiwweDQ1LDB4NTUsMHg1 ZCwweGQwLDB4NDcsMHgyMywweGJhLDB4YTQsMHg0OCwweGU4CisrfTsKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBjY21fbm9uY2VbXSA9IHsKKysJMHg3NiwweDQwLDB4NDMsMHhjNCwweDk0 LDB4NjAsMHhiNworK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX2FkYXRhW10g PSB7CisrCTB4NmUsMHg4MCwweGRkLDB4N2YsMHgxYiwweGFkLDB4ZjMsMHhhMSwweGM5LDB4YWIs MHgyNSwweGM3LAorKwkweDVmLDB4MTAsMHhiZCwweGU3LDB4OGMsMHgyMywweGZhLDB4MGUsMHhi OCwweGY5LDB4YWEsMHhhNSwKKysJMHgzYSwweGRlLDB4ZmIsMHhmNCwweGNiLDB4ZjcsMHg4Ziww eGU0CisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjY21fcHRbXSA9IHsKKysJMHhj OCwweGQyLDB4NzUsMHhmOSwweDE5LDB4ZTEsMHg3ZCwweDdmLDB4ZTYsMHg5YywweDJhLDB4MWYs CisrCTB4NTgsMHg5MywweDlkLDB4ZmUsMHg0ZCwweDQwLDB4MzcsMHg5MSwweGI1LDB4ZGYsMHgx MywweDEwCisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjY21fY3RbXSA9IHsKKysJ MHg4YSwweDBmLDB4M2QsMHg4MiwweDI5LDB4ZTQsMHg4ZSwweDc0LDB4ODcsMHhmZCwweDk1LDB4 YTIsCisrCTB4OGEsMHhkMywweDkyLDB4YzgsMHgwYiwweDM2LDB4ODEsMHhkNCwweGZiLDB4Yzcs MHhiYiwweGZkCisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjY21fdGFnW10gPSB7 CisrCTB4MmQsMHhkNiwweGVmLDB4MWMsMHg0NSwweGQ0LDB4Y2MsMHhiNywweDIzLDB4ZGMsMHgw NywweDQ0LAorKwkweDE0LDB4ZGIsMHg1MCwweDZkCisrfTsKKysKKytpbnQgRklQU19zZWxmdGVz dF9hZXNfY2NtKHZvaWQpCisrCXsKKysJaW50IHJldCA9IDA7CisrCXVuc2lnbmVkIGNoYXIgb3V0 WzEyOF0sIHRhZ1sxNl07CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsKKysJRVZQX0NJUEhFUl9DVFhf aW5pdCgmY3R4KTsKKysJbWVtc2V0KG91dCwgMCwgc2l6ZW9mKG91dCkpOworKwlpZiAoIUVWUF9D aXBoZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMTkyX2NjbSgpLE5VTEwsIE5VTEwsIE5VTEwsIDEp KQorKwkJZ290byBlcnI7CisrCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RS TF9DQ01fU0VUX0lWTEVOLAorKwkJCQkJc2l6ZW9mKGNjbV9ub25jZSksIE5VTEwpKQorKwkJZ290 byBlcnI7CisrCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VU X1RBRywKKysJCQkJCXNpemVvZihjY21fdGFnKSwgTlVMTCkpCisrCQlnb3RvIGVycjsKKysJaWYg KCFFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBOVUxMLCBOVUxMLCBjY21fa2V5LCBjY21fbm9uY2Us IDEpKQorKwkJZ290byBlcnI7CisrCWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIHNp emVvZihjY21fcHQpKSAhPSBzaXplb2YoY2NtX3B0KSkKKysJCWdvdG8gZXJyOworKwlpZiAoRVZQ X0NpcGhlcigmY3R4LCBOVUxMLCBjY21fYWRhdGEsIHNpemVvZihjY21fYWRhdGEpKSA8IDApCisr CQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBjY21fcHQsIHNpemVvZihj Y21fcHQpKSAhPSBzaXplb2YoY2NtX2N0KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIUVWUF9D SVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX0dFVF9UQUcsIDE2LCB0YWcpKQorKwkJ Z290byBlcnI7CisrCWlmIChtZW1jbXAodGFnLCBjY21fdGFnLCBzaXplb2YoY2NtX3RhZykpCisr CQl8fCBtZW1jbXAob3V0LCBjY21fY3QsIHNpemVvZihjY21fY3QpKSkKKysJCWdvdG8gZXJyOwor KworKwltZW1zZXQob3V0LCAwLCBzaXplb2Yob3V0KSk7CisrCisrCWlmICghRVZQX0NpcGhlcklu aXRfZXgoJmN0eCwgRVZQX2Flc18xOTJfY2NtKCksIE5VTEwsIE5VTEwsIE5VTEwsIDApKQorKwkJ Z290byBlcnI7CisrCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01f U0VUX0lWTEVOLAorKwkJCQkJc2l6ZW9mKGNjbV9ub25jZSksIE5VTEwpKQorKwkJZ290byBlcnI7 CisrCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywg MTYsIHRhZykpCisrCQlnb3RvIGVycjsKKysJaWYgKCFFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBO VUxMLCBOVUxMLCBjY21fa2V5LCBjY21fbm9uY2UsIDApKQorKwkJZ290byBlcnI7CisrCWlmIChF VlBfQ2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIHNpemVvZihjY21fY3QpKSAhPSBzaXplb2YoY2Nt X2N0KSkKKysJCWdvdG8gZXJyOworKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBjY21fYWRh dGEsIHNpemVvZihjY21fYWRhdGEpKSA8IDApCisrCQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBo ZXIoJmN0eCwgb3V0LCBjY21fY3QsIHNpemVvZihjY21fY3QpKSAhPSBzaXplb2YoY2NtX3B0KSkK KysJCWdvdG8gZXJyOworKworKwlpZiAobWVtY21wKG91dCwgY2NtX3B0LCBzaXplb2YoY2NtX3B0 KSkpCisrCQlnb3RvIGVycjsKKysKKysJcmV0ID0gMTsKKysKKysJZXJyOgorKwlFVlBfQ0lQSEVS X0NUWF9jbGVhbnVwKCZjdHgpOworKworKwlpZiAocmV0ID09IDApCisrCQl7CisrCQlGSVBTZXJy KEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19DQ00sRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Cisr CQlyZXR1cm4gMDsKKysJCX0KKysJZWxzZQorKwkJcmV0dXJuIHJldDsKKysKKysJfQorKworKy8q IEFFUy1HQ00gdGVzdCBkYXRhIGZyb20gTklTVCBwdWJsaWMgdGVzdCB2ZWN0b3JzICovCisrCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX2tleVtdID0geworKwkweGVlLDB4YmMsMHgx ZiwweDU3LDB4NDgsMHg3ZiwweDUxLDB4OTIsMHgxYywweDA0LDB4NjUsMHg2NiwKKysJMHg1Ziww eDhhLDB4ZTYsMHhkMSwweDY1LDB4OGIsMHhiMiwweDZkLDB4ZTYsMHhmOCwweGEwLDB4NjksCisr CTB4YTMsMHg1MiwweDAyLDB4OTMsMHhhNSwweDcyLDB4MDcsMHg4ZgorK307Cisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgZ2NtX2l2W10gPSB7CisrCTB4OTksMHhhYSwweDNlLDB4NjgsMHhl ZCwweDgxLDB4NzMsMHhhMCwweGVlLDB4ZDAsMHg2NiwweDg0CisrfTsKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBnY21fcHRbXSA9IHsKKysJMHhmNSwweDZlLDB4ODcsMHgwNSwweDViLDB4 YzMsMHgyZCwweDBlLDB4ZWIsMHgzMSwweGIyLDB4ZWEsCisrCTB4Y2MsMHgyYiwweGYyLDB4YTUK Kyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9hYWRbXSA9IHsKKysJMHg0ZCww eDIzLDB4YzMsMHhjZSwweGMzLDB4MzQsMHhiNCwweDliLDB4ZGIsMHgzNywweDBjLDB4NDMsCisr CTB4N2YsMHhlYywweDc4LDB4ZGUKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdj bV9jdFtdID0geworKwkweGY3LDB4MjYsMHg0NCwweDEzLDB4YTgsMHg0YywweDBlLDB4N2MsMHhk NSwweDM2LDB4ODYsMHg3ZSwKKysJMHhiOSwweGYyLDB4MTcsMHgzNgorK307Cisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgZ2NtX3RhZ1tdID0geworKwkweDY3LDB4YmEsMHgwNSwweDEwLDB4 MjYsMHgyYSwweGU0LDB4ODcsMHhkNywweDM3LDB4ZWUsMHg2MiwKKysJMHg5OCwweGY3LDB4N2Us MHgwYworK307CisrCisraW50IEZJUFNfc2VsZnRlc3RfYWVzX2djbSh2b2lkKQorKwl7CisrCWlu dCByZXQgPSAwOworKwl1bnNpZ25lZCBjaGFyIG91dFsxMjhdLCB0YWdbMTZdOworKwlFVlBfQ0lQ SEVSX0NUWCBjdHg7CisrCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCW1lbXNldChvdXQs IDAsIHNpemVvZihvdXQpKTsKKysJbWVtc2V0KHRhZywgMCwgc2l6ZW9mKHRhZykpOworKwlpZiAo IUVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMjU2X2djbSgpLCBOVUxMLCBOVUxMLCBO VUxMLCAxKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwg RVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwKKysJCQkJCXNpemVvZihnY21faXYpLCBOVUxMKSkKKysJ CWdvdG8gZXJyOworKwlpZiAoIUVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIE5VTEwsIE5VTEwsIGdj bV9rZXksIGdjbV9pdiwgMSkpCisrCQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0eCwg TlVMTCwgZ2NtX2FhZCwgc2l6ZW9mKGdjbV9hYWQpKSA8IDApCisrCQlnb3RvIGVycjsKKysJaWYg KEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBnY21fcHQsIHNpemVvZihnY21fcHQpKSAhPSBzaXplb2Yo Z2NtX2N0KSkKKysJCWdvdG8gZXJyOworKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBOVUxM LCAwKSA8IDApCisrCQlnb3RvIGVycjsKKysKKysJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZj dHgsIEVWUF9DVFJMX0dDTV9HRVRfVEFHLCAxNiwgdGFnKSkKKysJCWdvdG8gZXJyOworKworKwlp ZiAobWVtY21wKHRhZywgZ2NtX3RhZywgMTYpIHx8IG1lbWNtcChvdXQsIGdjbV9jdCwgMTYpKQor KwkJZ290byBlcnI7CisrCisrCW1lbXNldChvdXQsIDAsIHNpemVvZihvdXQpKTsKKysKKysJaWYg KCFFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfYWVzXzI1Nl9nY20oKSwgTlVMTCwgTlVMTCwg TlVMTCwgMCkpCisrCQlnb3RvIGVycjsKKysJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgs IEVWUF9DVFJMX0dDTV9TRVRfSVZMRU4sCisrCQkJCQlzaXplb2YoZ2NtX2l2KSwgTlVMTCkpCisr CQlnb3RvIGVycjsKKysJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dD TV9TRVRfVEFHLCAxNiwgdGFnKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIUVWUF9DaXBoZXJJbml0 X2V4KCZjdHgsIE5VTEwsIE5VTEwsIGdjbV9rZXksIGdjbV9pdiwgMCkpCisrCQlnb3RvIGVycjsK KysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgZ2NtX2FhZCwgc2l6ZW9mKGdjbV9hYWQpKSA8 IDApCisrCQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBnY21fY3QsIHNp emVvZihnY21fY3QpKSAhPSBzaXplb2YoZ2NtX3B0KSkKKysJCWdvdG8gZXJyOworKwlpZiAoRVZQ X0NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCAwKSA8IDApCisrCQlnb3RvIGVycjsKKysKKysJaWYg KG1lbWNtcChvdXQsIGdjbV9wdCwgMTYpKQorKwkJZ290byBlcnI7CisrCisrCXJldCA9IDE7Cisr CisrCWVycjoKKysJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysKKysJaWYgKHJldCA9 PSAwKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfR0NNLEZJUFNf Ul9TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWVsc2UKKysJCXJldHVy biByZXQ7CisrCisrCX0KKysKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMTI4 X2tleVtdID0geworKwkweGExLDB4YjksMHgwYywweGJhLDB4M2YsMHgwNiwweGFjLDB4MzUsMHgz YiwweDJjLDB4MzQsMHgzOCwKKysJMHg3NiwweDA4LDB4MTcsMHg2MiwweDA5LDB4MDksMHgyMyww eDAyLDB4NmUsMHg5MSwweDc3LDB4MTgsCisrCTB4MTUsMHhmMiwweDlkLDB4YWIsMHgwMSwweDkz LDB4MmYsMHgyZgorK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9pW10g PSB7CisrCTB4NGYsMHhhZSwweGY3LDB4MTEsMHg3YywweGRhLDB4NTksMHhjNiwweDZlLDB4NGIs MHg5MiwweDAxLAorKwkweDNlLDB4NzYsMHg4YSwweGQ1CisrfTsKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBYVFNfMTI4X3B0W10gPSB7CisrCTB4ZWIsMHhhYiwweGNlLDB4OTUsMHhiMSww eDRkLDB4M2MsMHg4ZCwweDZmLDB4YjMsMHg1MCwweDM5LAorKwkweDA3LDB4OTAsMHgzMSwweDFj CisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMTI4X2N0W10gPSB7CisrCTB4 NzcsMHg4YSwweGU4LDB4YjQsMHgzYywweGI5LDB4OGQsMHg1YSwweDgyLDB4NTAsMHg4MSwweGQ1 LAorKwkweGJlLDB4NDcsMHgxYywweDYzCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBYVFNfMjU2X2tleVtdID0geworKwkweDFlLDB4YTYsMHg2MSwweGM1LDB4OGQsMHg5NCww eDNhLDB4MGUsMHg0OCwweDAxLDB4ZTQsMHgyZiwKKysJMHg0YiwweDA5LDB4NDcsMHgxNCwweDll LDB4N2YsMHg5ZiwweDhlLDB4M2UsMHg2OCwweGQwLDB4YzcsCisrCTB4NTAsMHg1MiwweDEwLDB4 YmQsMHgzMSwweDFhLDB4MGUsMHg3YywweGQ2LDB4ZTEsMHgzZiwweGZkLAorKwkweGYyLDB4NDEs MHg4ZCwweDhkLDB4MTksMHgxMSwweGMwLDB4MDQsMHhjZCwweGE1LDB4OGQsMHhhMywKKysJMHhk NiwweDE5LDB4YjcsMHhlMiwweGI5LDB4MTQsMHgxZSwweDU4LDB4MzEsMHg4ZSwweGVhLDB4Mzks CisrCTB4MmMsMHhmNCwweDFiLDB4MDgKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IFhUU18yNTZfaVtdID0geworKwkweGFkLDB4ZjgsMHhkOSwweDI2LDB4MjcsMHg0NiwweDRhLDB4 ZDIsMHhmMCwweDQyLDB4OGUsMHg4NCwKKysJMHhhOSwweGY4LDB4NzUsMHg2NAorK307Cisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzI1Nl9wdFtdID0geworKwkweDJlLDB4ZWQsMHhl YSwweDUyLDB4Y2QsMHg4MiwweDE1LDB4ZTEsMHhhYywweGM2LDB4NDcsMHhlOCwKKysJMHgxMCww eGJiLDB4YzMsMHg2NCwweDJlLDB4ODcsMHgyOCwweDdmLDB4OGQsMHgyZSwweDU3LDB4ZTMsCisr CTB4NmMsMHgwYSwweDI0LDB4ZmIsMHhjMSwweDJhLDB4MjAsMHgyZQorK307Cisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgWFRTXzI1Nl9jdFtdID0geworKwkweGNiLDB4YWEsMHhkMCwweGUy LDB4ZjYsMHhjZSwweGEzLDB4ZjUsMHgwYiwweDM3LDB4ZjksMHgzNCwKKysJMHhkNCwweDZhLDB4 OWIsMHgxMywweDBiLDB4OWQsMHg1NCwweGYwLDB4N2UsMHgzNCwweGYzLDB4NmEsCisrCTB4Zjcs MHg5MywweGU4LDB4NmYsMHg3MywweGM2LDB4ZDcsMHhkYgorK307CisrCisraW50IEZJUFNfc2Vs ZnRlc3RfYWVzX3h0cygpCisrCXsKKysJaW50IHJldCA9IDE7CisrCUVWUF9DSVBIRVJfQ1RYIGN0 eDsKKysJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysKKysJaWYgKGZpcHNfY2lwaGVyX3Rl c3QoJmN0eCwgRVZQX2Flc18xMjhfeHRzKCksCisrCQkJCVhUU18xMjhfa2V5LCBYVFNfMTI4X2ks IFhUU18xMjhfcHQsIFhUU18xMjhfY3QsCisrCQkJCXNpemVvZihYVFNfMTI4X3B0KSkgPD0gMCkK KysJCXJldCA9IDA7CisrCisrCWlmIChmaXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9hZXNfMjU2 X3h0cygpLAorKwkJCQlYVFNfMjU2X2tleSwgWFRTXzI1Nl9pLCBYVFNfMjU2X3B0LCBYVFNfMjU2 X2N0LAorKwkJCQlzaXplb2YoWFRTXzI1Nl9wdCkpIDw9IDApCisrCQlyZXQgPSAwOworKworKwlF VlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOworKwlpZiAocmV0ID09IDApCisrCQlGSVBTZXJy KEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19YVFMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Cisr CXJldHVybiByZXQ7CisrCX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2Ny eXB0by9maXBzL2ZpcHMuYy5maXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHMuYwor LS0tIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHMuYy5maXBzCTIwMTUtMDEtMDkgMDk6 NTE6NTEuNTU3OTIyNDI3ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvZmlw cy5jCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTU3OTIyNDI3ICswMTAwCitAQCAtMCwwICsxLDQ5MSBA 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 KGhleCk7CisrCX0gZWxzZSB7CisrCQlydiA9IC0xOworKwl9CisrCisrZW5kOgorKwlmcmVlKGht YWMpOworKwlmcmVlKGhtYWNwYXRoKTsKKysJZmNsb3NlKGhmKTsKKysKKysJaWYgKHJ2IDwgMCkK KysJCXJldHVybiAwOworKworKwkvKiBjaGVjayBzdWNjZXNzZnVsICovCisrCXJldHVybiAxOwkK Kyt9CisrCisraW50IEZJUFNfbW9kdWxlX21vZGVfc2V0KGludCBvbm9mZiwgY29uc3QgY2hhciAq YXV0aCkKKysgICAgeworKyAgICBpbnQgcmV0ID0gMDsKKysKKysgICAgZmlwc193X2xvY2soKTsK KysgICAgZmlwc19zdGFydGVkID0gMTsKKysgICAgZmlwc19zZXRfb3duaW5nX3RocmVhZCgpOwor KworKyAgICBpZihvbm9mZikKKysJeworKworKwlmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAwOworKwor KwkvKiBEb24ndCBnbyBpbnRvIEZJUFMgbW9kZSB0d2ljZSwganVzdCBzbyB3ZSBjYW4gZG8gYXV0 b21hZ2ljCisrCSAgIHNlZWRpbmcgKi8KKysJaWYoRklQU19tb2R1bGVfbW9kZSgpKQorKwkgICAg eworKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQsRklQU19SX0ZJUFNf TU9ERV9BTFJFQURZX1NFVCk7CisrCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOworKwkgICAg cmV0ID0gMDsKKysJICAgIGdvdG8gZW5kOworKwkgICAgfQorKworKyNpZmRlZiBPUEVOU1NMX0lB MzJfU1NFMgorKwl7CisrCWV4dGVybiB1bnNpZ25lZCBpbnQgT1BFTlNTTF9pYTMyY2FwX1BbMl07 CisrCWlmICgoT1BFTlNTTF9pYTMyY2FwX1BbMF0gJiAoMTw8MjV8MTw8MjYpKSAhPSAoMTw8MjV8 MTw8MjYpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9T RVQsRklQU19SX1VOU1VQUE9SVEVEX1BMQVRGT1JNKTsKKysJICAgIGZpcHNfc2VsZnRlc3RfZmFp bCA9IDE7CisrCSAgICByZXQgPSAwOworKwkgICAgZ290byBlbmQ7CisrCSAgICB9CisrCU9QRU5T U0xfaWEzMmNhcF9QWzBdIHw9ICgxPDwyOCk7CS8qIHNldCAic2hhcmVkIGNhY2hlIgkqLworKwlP UEVOU1NMX2lhMzJjYXBfUFsxXSAmPSB+KDE8PCg2MC0zMikpOwkvKiBjbGVhciBBVlgJCSovCisr CX0KKysjZW5kaWYKKysKKysJaWYoIUZJUFNDSEVDS192ZXJpZnkoImxpYmNyeXB0by5zby4iIFNI TElCX1ZFUlNJT05fTlVNQkVSLCJGSVBTX21vZGVfc2V0IikpCisrCSAgICB7CisrCSAgICBGSVBT ZXJyKEZJUFNfRl9GSVBTX01PRFVMRV9NT0RFX1NFVCxGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19O T1RfTUFUQ0gpOworKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysJICAgIHJldCA9IDA7 CisrCSAgICBnb3RvIGVuZDsKKysJICAgIH0KKysKKysJaWYoIUZJUFNDSEVDS192ZXJpZnkoImxp YnNzbC5zby4iIFNITElCX1ZFUlNJT05fTlVNQkVSLCJTU0xfQ1RYX25ldyIpKQorKwkgICAgewor KwkgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQsRklQU19SX0ZJTkdFUlBS SU5UX0RPRVNfTk9UX01BVENIKTsKKysJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrCSAg ICByZXQgPSAwOworKwkgICAgZ290byBlbmQ7CisrCSAgICB9CisrCisrCWlmKEZJUFNfc2VsZnRl c3QoKSkKKysJICAgIGZpcHNfc2V0X21vZGUob25vZmYpOworKwllbHNlCisrCSAgICB7CisrCSAg ICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOworKwkgICAgcmV0ID0gMDsKKysJICAgIGdvdG8gZW5k OworKwkgICAgfQorKwlyZXQgPSAxOworKwlnb3RvIGVuZDsKKysJfQorKyAgICBmaXBzX3NldF9t b2RlKDApOworKyAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAwOworKyAgICByZXQgPSAxOworK2Vu ZDoKKysgICAgZmlwc19jbGVhcl9vd25pbmdfdGhyZWFkKCk7CisrICAgIGZpcHNfd191bmxvY2so KTsKKysgICAgcmV0dXJuIHJldDsKKysgICAgfQorKworK3N0YXRpYyBDUllQVE9fVEhSRUFESUQg Zmlwc190aHJlYWQ7Cisrc3RhdGljIGludCBmaXBzX3RocmVhZF9zZXQgPSAwOworKworK3N0YXRp YyBpbnQgZmlwc19pc19vd25pbmdfdGhyZWFkKHZvaWQpCisrCXsKKysJaW50IHJldCA9IDA7Cisr CisrCWlmIChmaXBzX3N0YXJ0ZWQpCisrCQl7CisrCQlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NL X0ZJUFMyKTsKKysJCWlmIChmaXBzX3RocmVhZF9zZXQpCisrCQkJeworKwkJCUNSWVBUT19USFJF QURJRCBjdXI7CisrCQkJQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQoJmN1cik7CisrCQkJaWYgKCFD UllQVE9fVEhSRUFESURfY21wKCZjdXIsICZmaXBzX3RocmVhZCkpCisrCQkJCXJldCA9IDE7Cisr CQkJfQorKwkJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKKysJCX0KKysJcmV0 dXJuIHJldDsKKysJfQorKworK2ludCBmaXBzX3NldF9vd25pbmdfdGhyZWFkKHZvaWQpCisrCXsK KysJaW50IHJldCA9IDA7CisrCisrCWlmIChmaXBzX3N0YXJ0ZWQpCisrCQl7CisrCQlDUllQVE9f d19sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKKysJCWlmICghZmlwc190aHJlYWRfc2V0KQorKwkJ CXsKKysJCQlDUllQVE9fVEhSRUFESURfY3VycmVudCgmZmlwc190aHJlYWQpOworKwkJCXJldCA9 IDE7CisrCQkJZmlwc190aHJlYWRfc2V0ID0gMTsKKysJCQl9CisrCQlDUllQVE9fd191bmxvY2so Q1JZUFRPX0xPQ0tfRklQUzIpOworKwkJfQorKwlyZXR1cm4gcmV0OworKwl9CisrCisraW50IGZp cHNfY2xlYXJfb3duaW5nX3RocmVhZCh2b2lkKQorKwl7CisrCWludCByZXQgPSAwOworKworKwlp ZiAoZmlwc19zdGFydGVkKQorKwkJeworKwkJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBT Mik7CisrCQlpZiAoZmlwc190aHJlYWRfc2V0KQorKwkJCXsKKysJCQlDUllQVE9fVEhSRUFESUQg Y3VyOworKwkJCUNSWVBUT19USFJFQURJRF9jdXJyZW50KCZjdXIpOworKwkJCWlmICghQ1JZUFRP X1RIUkVBRElEX2NtcCgmY3VyLCAmZmlwc190aHJlYWQpKQorKwkJCQlmaXBzX3RocmVhZF9zZXQg PSAwOworKwkJCX0KKysJCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrCQl9 CisrCXJldHVybiByZXQ7CisrCX0KKysKKysKKysjaWYgMAorKy8qIFRoZSBwdXJwb3NlIG9mIHRo aXMgaXMgdG8gZW5zdXJlIHRoZSBlcnJvciBjb2RlIGV4aXN0cyBhbmQgdGhlIGZ1bmN0aW9uCisr ICogbmFtZSBpcyB0byBrZWVwIHRoZSBlcnJvciBjaGVja2luZyBzY3JpcHQgcXVpZXQKKysgKi8K Kyt2b2lkIGhhc2hfZmluYWwodm9pZCkKKysJeworKwlGSVBTZXJyKEZJUFNfRl9IQVNIX0ZJTkFM LEZJUFNfUl9OT05fRklQU19NRVRIT0QpOworKwl9CisrI2VuZGlmCisrCisrCisrI2VuZGlmCitk aWZmIC11cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9maXBzX2NtYWNfc2VsZnRlc3QuYy5m aXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHNfY21hY19zZWxmdGVzdC5jCistLS0g b3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvZmlwc19jbWFjX3NlbGZ0ZXN0LmMuZmlwcwkyMDE1 LTAxLTA5IDA5OjUxOjUxLjU1NzkyMjQyNyArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0 by9maXBzL2ZpcHNfY21hY19zZWxmdGVzdC5jCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTU3OTIyNDI3 ICswMTAwCitAQCAtMCwwICsxLDE2MSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0 IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAq CisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu CisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRp c2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAg IHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9v bGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBl bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0 aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlz c2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisr ICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJl IGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhl aXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUg T3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3Jt IHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdt ZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVY UFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRP UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC VVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBP UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJ TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKwor KyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY21hYy5oPgorKyNpbmNsdWRl ICJmaXBzX2xvY2wuaCIKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrdHlwZWRlZiBzdHJ1Y3Qg eworKwlpbnQgbmlkOworKwljb25zdCB1bnNpZ25lZCBjaGFyIGtleVtFVlBfTUFYX0tFWV9MRU5H VEhdOyBzaXplX3Qga2V5c2l6ZTsKKysJY29uc3QgdW5zaWduZWQgY2hhciBtc2dbNjRdOyBzaXpl X3QgbXNnc2l6ZTsKKysJY29uc3QgdW5zaWduZWQgY2hhciBtYWNbMzJdOyBzaXplX3QgbWFjc2l6 ZTsKKyt9IENNQUNfS0FUOworKworKy8qIGZyb20gaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGlj YXRpb25zL25pc3RwdWJzLzgwMC0zOEIvU1BfODAwLTM4Qi5wZGYgKi8KKytzdGF0aWMgY29uc3Qg Q01BQ19LQVQgdmVjdG9yW10gPSB7CisrICAgIHsJTklEX2Flc18xMjhfY2JjLAkvKiBDb3VudCA9 IDMyIGZyb20gQ01BQ0dlbkFFUzEyOC50eHQgKi8KKysJeyAweDc3LDB4YTcsMHg3ZiwweGFmLCAw eDI5LDB4MGMsMHgxZiwweGEzLAorKwkgIDB4MGMsMHg2OCwweDNkLDB4ZjEsIDB4NmIsMHhhNyww eGE3LDB4N2IsIH0sIDEyOCwKKysJeyAweDAyLDB4MDYsMHg4MywweGUxLCAweGYwLDB4MzksMHgy ZiwweDRjLAorKwkgIDB4YWMsMHg1NCwweDMxLDB4OGIsIDB4NjAsMHgyOSwweDI1LDB4OWUsCisr CSAgMHg5YywweDU1LDB4M2QsMHhiYywgMHg0YiwweDZhLDB4ZDksMHg5OCwKKysJICAweGU2LDB4 NGQsMHg1OCwweGU0LCAweGU3LDB4ZGMsMHgyZSwweDEzLCB9LCAyNTYsCisrCXsgMHhmYiwweGZl LDB4YTQsMHgxYiwgfSwgMzIKKysgICAgfSwKKysgICAgewlOSURfYWVzXzE5Ml9jYmMsCS8qIENv dW50ID0gMjMgZnJvbSBDTUFDR2VuQUVTMTkyLnR4dCAqLworKwl7IDB4N2IsMHgzMiwweDM5LDB4 MTMsIDB4NjksMHhhYSwweDRjLDB4YTksCisrCSAgMHg3NSwweDU4LDB4MDksMHg1YiwgMHhlMyww eGMzLDB4ZWMsMHg4NiwKKysJICAweDJiLDB4ZDAsMHg1NywweGNlLCAweGYxLDB4ZTMsMHgyZCww eDYyLCB9LCAxOTIsCisrCXsgMHgwIH0sIDAsCisrCXsgMHhlNCwweGQ5LDB4MzQsMHgwYiwgMHgw MywweGU2LDB4N2QsMHhlZiwKKysJICAweGQ0LDB4OTYsMHg5YywweGMxLCAweGVkLDB4MzcsMHgz NSwweGU2LCB9LCAxMjgsCisrICAgIH0sCisrICAgIHsJTklEX2Flc18yNTZfY2JjLAkvKiBDb3Vu dCA9IDMzIGZyb20gQ01BQ0dlbkFFUzI1Ni50eHQgKi8KKysJeyAweDBiLDB4MTIsMHgyYSwweGM4 LCAweGYzLDB4NGUsMHhkMSwweGZlLAorKwkgIDB4MDgsMHgyYSwweDM2LDB4MjUsIDB4ZDEsMHg1 NywweDU2LDB4MTQsCisrCSAgMHg1NCwweDE2LDB4N2EsMHhjMSwgMHg0NSwweGExLDB4MGIsMHhi ZiwKKysJICAweDc3LDB4YzYsMHhhNywweDA1LCAweDk2LDB4ZDUsMHg3NCwweGYxLCB9LCAyNTYs CisrCXsgMHg0OSwweDhiLDB4NTMsMHhmZCwgMHhlYywweDg3LDB4ZWQsMHhjYiwKKysJICAweGYw LDB4NzAsMHg5NywweGRjLCAweGNkLDB4ZTksMHgzYSwweDA4LAorKwkgIDB4NGIsMHhhZCwweDc1 LDB4MDEsIDB4YTIsMHgyNCwweGUzLDB4ODgsCisrCSAgMHhkZiwweDM0LDB4OWMsMHhlMSwgMHg4 OSwweDU5LDB4ZmUsMHg4NCwKKysJICAweDg1LDB4ZjgsMHhhZCwweDE1LCAweDM3LDB4ZjAsMHhk OCwweDk2LAorKwkgIDB4ZWEsMHg3MywweGJlLDB4ZGMsIDB4NzIsMHgxNCwweDcxLDB4M2YsIH0s IDM4NCwKKysJeyAweGY2LDB4MmMsMHg0NiwweDMyLCAweDliLCB9LCA0MCwKKysgICAgfSwKKysg ICAgewlOSURfZGVzX2VkZTNfY2JjLAkvKiBDb3VudCA9IDQxIGZyb20gQ01BQ0dlblRERVMzLnJl cSAqLworKwl7IDB4ODksMHhiYywweGQ5LDB4NTIsIDB4YTgsMHhjOCwweGFiLDB4MzcsCisrCSAg MHgxYSwweGY0LDB4OGEsMHhjNywgMHhkMCwweDcwLDB4ODUsMHhkNSwKKysJICAweGVmLDB4Zjcs MHgwMiwweGU2LCAweGQ2LDB4MmMsMHhkYywweDIzLCB9LCAxOTIsCisrCXsgMHhmYSwweDYyLDB4 MGMsMHgxYiwgMHhiZSwweDk3LDB4MzEsMHg5ZSwKKysJICAweDlhLDB4MGMsMHhmMCwweDQ5LCAw eDIxLDB4MjEsMHhmNywweGEyLAorKwkgIDB4MGUsMHhiMCwweDhhLDB4NmEsIDB4NzAsMHg5ZCww eGNiLDB4ZDAsCisrCSAgMHgwYSwweGFmLDB4MzgsMHhlNCwgMHhmOSwweDllLDB4NzUsMHg0ZSwg fSwgMjU2LAorKwl7IDB4OGYsMHg0OSwweGExLDB4YjcsIDB4ZDYsMHhhYSwweDIyLDB4NTgsIH0s IDY0LAorKyAgICB9LAorK307CisrCisraW50IEZJUFNfc2VsZnRlc3RfY21hYygpCisrCXsKKysJ c2l6ZV90IG4sIG91dGxlbjsKKysJdW5zaWduZWQgY2hhciAgICBvdXRbMzJdOworKwljb25zdCBF VlBfQ0lQSEVSICpjaXBoZXI7CisrCUNNQUNfQ1RYICpjdHggPSBDTUFDX0NUWF9uZXcoKTsKKysJ Y29uc3QgQ01BQ19LQVQgKnQ7CisrCWludCBydiA9IDE7CisrCisrCWZvcihuPTAsdD12ZWN0b3I7 IG48c2l6ZW9mKHZlY3Rvcikvc2l6ZW9mKHZlY3RvclswXSk7IG4rKyx0KyspCisrCQl7CisrCQlj aXBoZXIgPSBGSVBTX2dldF9jaXBoZXJieW5pZCh0LT5uaWQpOworKwkJaWYgKCFjaXBoZXIpCisr CQkJeworKwkJCXJ2ID0gLTE7CisrCQkJZ290byBlcnI7CisrCQkJfQorKwkJaWYgKCFDTUFDX0lu aXQoY3R4LCB0LT5rZXksIHQtPmtleXNpemUvOCwgY2lwaGVyLCAwKSkKKysJCQl7CisrCQkJcnYg PSAtMTsKKysJCQlnb3RvIGVycjsKKysJCQl9CisrCQlpZiAoIUNNQUNfVXBkYXRlKGN0eCwgdC0+ bXNnLCB0LT5tc2dzaXplLzgpKQorKwkJCXsKKysJCQlydiA9IC0xOworKwkJCWdvdG8gZXJyOwor KwkJCX0KKysJCQkKKysJCWlmICghQ01BQ19GaW5hbChjdHgsIG91dCwgJm91dGxlbikpCisrCQkJ eworKwkJCXJ2ID0gLTE7CisrCQkJZ290byBlcnI7CisrCQkJfQorKwkJQ01BQ19DVFhfY2xlYW51 cChjdHgpOworKworKwkJaWYob3V0bGVuIDwgdC0+bWFjc2l6ZS84IHx8IG1lbWNtcChvdXQsdC0+ bWFjLHQtPm1hY3NpemUvOCkpCisrCQkJeworKwkJICAgIAlydiA9IDA7CisrCQkgICAgCX0KKysJ CX0KKysKKysJZXJyOgorKwlDTUFDX0NUWF9mcmVlKGN0eCk7CisrCisrCWlmIChydiA9PSAtMSkK KysJCXsKKysJCXJ2ID0gMDsKKysJCX0KKysJaWYgKCFydikKKysJCSAgIEZJUFNlcnIoRklQU19G X0ZJUFNfU0VMRlRFU1RfQ01BQyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysKKysJcmV0dXJu IHJ2OworKwl9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9m aXBzX2Rlc19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvZmlwc19k ZXNfc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHNfZGVzX3Nl bGZ0ZXN0LmMuZmlwcwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU1NzkyMjQyNyArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMJMjAxNS0wMS0wOSAw OTo1MTo1MS41NTc5MjI0MjcgKzAxMDAKK0BAIC0wLDAgKzEsMTQ3IEBACisrLyogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUg bWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisr ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBu YW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUg dXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBG b3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29y ZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5T U0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBw ZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1 dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisr ICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMn JyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisr ICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ CisrI2VuZGlmCisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv b3BlbnNzbGNvbmYuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrc3RhdGljIGNvbnN0 IHN0cnVjdAorKyAgICB7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKKysgICAg Y29uc3QgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbOF07CisrICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgY2lwaGVydGV4dFs4XTsKKysgICAgfSB0ZXN0czJbXT0KKysJeworKwl7CisrCXsgMHg3Yyww eDRmLDB4NmUsMHhmNywweGEyLDB4MDQsMHgxNiwweGVjLAorKwkgIDB4MGIsMHg2YiwweDdjLDB4 OWUsMHg1ZSwweDE5LDB4YTcsMHhjNCB9LAorKwl7IDB4MDYsMHhhNywweGQ4LDB4NzksMHhhYSww eGNlLDB4NjksMHhlZiB9LAorKwl7IDB4NGMsMHgxMSwweDE3LDB4NTUsMHhiZiwweGM0LDB4NGUs MHhmZCB9CisrCX0sCisrCXsKKysJeyAweDVkLDB4OWUsMHgwMSwweGQzLDB4MjUsMHhjNywweDNl LDB4MzQsCisrCSAgMHgwMSwweDE2LDB4N2MsMHg4NSwweDIzLDB4ZGYsMHhlMCwweDY4IH0sCisr CXsgMHg5YywweDUwLDB4MDksMHgwZiwweDVlLDB4N2QsMHg2OSwweDdlIH0sCisrCXsgMHhkMiww eDBiLDB4MTgsMHhkZiwweGQ5LDB4MGQsMHg5ZSwweGZmIH0sCisrCX0KKysJfTsKKysKKytzdGF0 aWMgY29uc3Qgc3RydWN0CisrICAgIHsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbMjRd OworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsKKysgICAgY29uc3QgdW5z aWduZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOworKyAgICB9IHRlc3RzM1tdPQorKwl7CisrCXsKKysJ eyAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCSAgMHhGRSwweERD LDB4QkEsMHg5OCwweDc2LDB4NTQsMHgzMiwweDEwLAorKwkgIDB4MTIsMHgzNCwweDU2LDB4Nzgs MHg5YSwweGJjLDB4ZGUsMHhmMCB9LAorKwl7IDB4OGYsMHg4ZiwweGJmLDB4OWIsMHg1ZCwweDQ4 LDB4YjQsMHgxYyB9LAorKwl7IDB4NTksMHg4YywweGU1LDB4ZDMsMHg2YywweGEyLDB4ZWEsMHgx YiB9LAorKwl9LAorKwl7CisrCXsgMHhEQywweEJBLDB4OTgsMHg3NiwweDU0LDB4MzIsMHgxMCww eEZFLAorKwkgIDB4MDEsMHgyMywweDQ1LDB4NjcsMHg4OSwweEFCLDB4Q0QsMHhFRiwKKysJICAw eEVELDB4MzksMHhEOSwweDUwLDB4RkEsMHg3NCwweEJDLDB4QzQgfSwKKysJeyAweDAxLDB4MjMs MHg0NSwweDY3LDB4ODksMHhBQiwweENELDB4RUYgfSwKKysJeyAweDExLDB4MjUsMHhiMCwweDM1 LDB4YmUsMHhhMCwweDgyLDB4ODYgfSwKKysJfSwKKysJfTsKKysKKysKKytzdGF0aWMgaW50IGNv cnJ1cHRfZGVzOworKworK3ZvaWQgRklQU19jb3JydXB0X2RlcygpCisrICAgIHsKKysgICAgY29y cnVwdF9kZXMgPSAxOworKyAgICB9CisrCisraW50IEZJUFNfc2VsZnRlc3RfZGVzKCkKKysgICAg eworKyAgICBpbnQgbiwgcmV0ID0gMDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBF VlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKyAgICAvKiBFbmNyeXB0L2RlY3J5cHQgd2l0aCAy LWtleSAzREVTIGFuZCBjb21wYXJlIHRvIGtub3duIGFuc3dlcnMgKi8KKysgICAgZm9yKG49MCA7 IG4gPCAyIDsgKytuKQorKwl7CisrCXVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzhdOworKworKwlt ZW1jcHkocGxhaW50ZXh0LCB0ZXN0czJbbl0ucGxhaW50ZXh0LCBzaXplb2YocGxhaW50ZXh0KSk7 CisrCWlmIChjb3JydXB0X2RlcykKKysJCXBsYWludGV4dFswXSsrOworKwlpZiAoIWZpcHNfY2lw aGVyX3Rlc3QoJmN0eCwgRVZQX2Rlc19lZGVfZWNiKCksCisrCQkJCXRlc3RzMltuXS5rZXksIE5V TEwsCisrCQkJCXBsYWludGV4dCwgdGVzdHMyW25dLmNpcGhlcnRleHQsIDgpKQorKwkJZ290byBl cnI7CisrCX0KKysKKysgICAgLyogRW5jcnlwdC9kZWNyeXB0IHdpdGggM0RFUyBhbmQgY29tcGFy ZSB0byBrbm93biBhbnN3ZXJzICovCisrICAgIGZvcihuPTAgOyBuIDwgMiA7ICsrbikKKysJewor KwlpZiAoIWZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLAorKwkJCQl0 ZXN0czNbbl0ua2V5LCBOVUxMLAorKwkJCQl0ZXN0czNbbl0ucGxhaW50ZXh0LCB0ZXN0czNbbl0u Y2lwaGVydGV4dCwgOCkpCisrCQlnb3RvIGVycjsKKysJfQorKyAgICByZXQgPSAxOworKyAgICBl cnI6CisrICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrICAgIGlmIChyZXQgPT0g MCkKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfREVTLEZJUFNfUl9TRUxGVEVT VF9GQUlMRUQpOworKworKyAgICByZXR1cm4gcmV0OworKyAgICB9CisrI2VuZGlmCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9maXBzX2RyYmdfY3RyLmMuZmlwcyBvcGVuc3Ns LTEuMC4xay9jcnlwdG8vZmlwcy9maXBzX2RyYmdfY3RyLmMKKy0tLSBvcGVuc3NsLTEuMC4xay9j cnlwdG8vZmlwcy9maXBzX2RyYmdfY3RyLmMuZmlwcwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU1ODky MjQ0OSArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19jdHIu YwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU1ODkyMjQ0OSArMDEwMAorQEAgLTAsMCArMSw0MzYgQEAK KysvKiBmaXBzL3JhbmQvZmlwc19kcmJnX2N0ci5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVw aGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJv amVjdC4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUg T3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysg KiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Cisr ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NM Lm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3Bl blNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBj b250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wi CisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQg cHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4K KysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3Qg cmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9w ZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBP cGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICog TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK KysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9T U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKysjaW5j bHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSAiZmlwc19yYW5kX2xjbC5oIgorKworK3N0YXRpYyB2 b2lkIGluY18xMjgoRFJCR19DVFJfQ1RYICpjY3R4KQorKwl7CisrCWludCBpOworKwl1bnNpZ25l ZCBjaGFyIGM7CisrCXVuc2lnbmVkIGNoYXIgKnAgPSBjY3R4LT5WICsgMTU7CisrCWZvciAoaSA9 IDA7IGkgPCAxNjsgaSsrKQorKwkJeworKwkJYyA9ICpwOworKwkJYysrOworKwkJKnAgPSBjOwor KwkJaWYgKGMpCisrCQkJcmV0dXJuOworKwkJcC0tOworKwkJfQorKwl9CisrCisrc3RhdGljIHZv aWQgY3RyX1hPUihEUkJHX0NUUl9DVFggKmNjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBz aXplX3QgaW5sZW4pCisrCXsKKysJc2l6ZV90IGksIG47CisrCS8qIEFueSB6ZXJvIHBhZGRpbmcg d2lsbCBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgcmVzdWx0IGFzIHdlCisrCSAqIGFyZSBYT1Jpbmcu IFNvIGp1c3QgcHJvY2VzcyBob3dldmVyIG11Y2ggaW5wdXQgd2UgaGF2ZS4KKysJICovCisrCisr CWlmICghaW4gfHwgIWlubGVuKQorKwkJcmV0dXJuOworKworKwlpZiAoaW5sZW4gPCBjY3R4LT5r ZXlsZW4pCisrCQluID0gaW5sZW47CisrCWVsc2UKKysJCW4gPSBjY3R4LT5rZXlsZW47CisrCisr CWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisrCQljY3R4LT5LW2ldIF49IGluW2ldOworKwlpZiAo aW5sZW4gPD0gY2N0eC0+a2V5bGVuKQorKwkJcmV0dXJuOworKworKwluID0gaW5sZW4gLSBjY3R4 LT5rZXlsZW47CisrCS8qIFNob3VsZCBuZXZlciBoYXBwZW4gKi8KKysJaWYgKG4gPiAxNikKKysJ CW4gPSAxNjsKKysJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisrCQljY3R4LT5WW2ldIF49IGlu W2kgKyBjY3R4LT5rZXlsZW5dOworKwl9CisrCisrLyogUHJvY2VzcyBhIGNvbXBsZXRlIGJsb2Nr IHVzaW5nIEJDQyBhbGdvcml0aG0gb2YgU1BQIDgwMC05MCAxMC40LjMgKi8KKysKKytzdGF0aWMg dm9pZCBjdHJfQkNDX2Jsb2NrKERSQkdfQ1RSX0NUWCAqY2N0eCwgdW5zaWduZWQgY2hhciAqb3V0 LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbikKKysJeworKwlpbnQgaTsKKysJZm9yIChp ID0gMDsgaSA8IDE2OyBpKyspCisrCQlvdXRbaV0gXj0gaW5baV07CisrCUFFU19lbmNyeXB0KG91 dCwgb3V0LCAmY2N0eC0+ZGZfa3MpOworKyNpZiAwCisrZnByaW50ZihzdGRlcnIsICJCQ0MgaW4r b3V0XG4iKTsKKytCSU9fZHVtcF9mcChzdGRlcnIsIGluLCAxNik7CisrQklPX2R1bXBfZnAoc3Rk ZXJyLCBvdXQsIDE2KTsKKysjZW5kaWYKKysJfQorKworKy8qIEhhbmRsZSBzZXZlcmFsIEJDQyBv cGVyYXRpb25zIGZvciBhcyBtdWNoIGRhdGEgYXMgd2UgbmVlZCBmb3IgSyBhbmQgWCAqLworK3N0 YXRpYyB2b2lkIGN0cl9CQ0NfYmxvY2tzKERSQkdfQ1RSX0NUWCAqY2N0eCwgY29uc3QgdW5zaWdu ZWQgY2hhciAqaW4pCisrCXsKKysJY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCwgaW4pOwor KwljdHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktYICsgMTYsIGluKTsKKysJaWYgKGNjdHgtPmtl eWxlbiAhPSAxNikKKysJCWN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1ggKyAzMiwgaW4pOwor Kwl9CisrLyogSW5pdGlhbGlzZSBCQ0MgYmxvY2tzOiB0aGVzZSBoYXZlIHRoZSB2YWx1ZSAwLDEs MiBpbiBsZWZ0bW9zdCBwb3NpdGlvbnM6CisrICogc2VlIDEwLjQuMiBzdGFnZSA3LgorKyAqLwor K3N0YXRpYyB2b2lkIGN0cl9CQ0NfaW5pdChEUkJHX0NUUl9DVFggKmNjdHgpCisrCXsKKysJbWVt c2V0KGNjdHgtPktYLCAwLCA0OCk7CisrCW1lbXNldChjY3R4LT5ibHRtcCwgMCwgMTYpOworKwlj dHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktYLCBjY3R4LT5ibHRtcCk7CisrCWNjdHgtPmJsdG1w WzNdID0gMTsKKysJY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCArIDE2LCBjY3R4LT5ibHRt cCk7CisrCWlmIChjY3R4LT5rZXlsZW4gIT0gMTYpCisrCQl7CisrCQljY3R4LT5ibHRtcFszXSA9 IDI7CisrCQljdHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktYICsgMzIsIGNjdHgtPmJsdG1wKTsK KysJCX0KKysJfQorKworKy8qIFByb2Nlc3Mgc2V2ZXJhbCBibG9ja3MgaW50byBCQ0MgYWxnb3Jp dGhtLCBzb21lIHBvc3NpYmx5IHBhcnRpYWwgKi8KKytzdGF0aWMgdm9pZCBjdHJfQkNDX3VwZGF0 ZShEUkJHX0NUUl9DVFggKmNjdHgsCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXpl X3QgaW5sZW4pCisrCXsKKysJaWYgKCFpbiB8fCAhaW5sZW4pCisrCQlyZXR1cm47CisrCS8qIElm IHdlIGhhdmUgcGFydGlhbCBibG9jayBoYW5kbGUgaXQgZmlyc3QgKi8KKysJaWYgKGNjdHgtPmJs dG1wX3BvcykKKysJCXsKKysJCXNpemVfdCBsZWZ0ID0gMTYgLSBjY3R4LT5ibHRtcF9wb3M7Cisr CQkvKiBJZiB3ZSBub3cgaGF2ZSBhIGNvbXBsZXRlIGJsb2NrIHByb2Nlc3MgaXQgKi8KKysJCWlm IChpbmxlbiA+PSBsZWZ0KQorKwkJCXsKKysJCQltZW1jcHkoY2N0eC0+Ymx0bXAgKyBjY3R4LT5i bHRtcF9wb3MsIGluLCBsZWZ0KTsKKysJCQljdHJfQkNDX2Jsb2NrcyhjY3R4LCBjY3R4LT5ibHRt cCk7CisrCQkJY2N0eC0+Ymx0bXBfcG9zID0gMDsKKysJCQlpbmxlbiAtPSBsZWZ0OworKwkJCWlu ICs9IGxlZnQ7CisrCQkJfQorKwkJfQorKwkvKiBQcm9jZXNzIHplcm8gb3IgbW9yZSBjb21wbGV0 ZSBibG9ja3MgKi8KKysJd2hpbGUgKGlubGVuID49IDE2KQorKwkJeworKwkJY3RyX0JDQ19ibG9j a3MoY2N0eCwgaW4pOworKwkJaW4gKz0gMTY7CisrCQlpbmxlbiAtPSAxNjsKKysJCX0KKysJLyog Q29weSBhbnkgcmVtYWluaW5nIHBhcnRpYWwgYmxvY2sgdG8gdGhlIHRlbXBvcmFyeSBidWZmZXIg Ki8KKysJaWYgKGlubGVuID4gMCkKKysJCXsKKysJCW1lbWNweShjY3R4LT5ibHRtcCArIGNjdHgt PmJsdG1wX3BvcywgaW4sIGlubGVuKTsKKysJCWNjdHgtPmJsdG1wX3BvcyArPSBpbmxlbjsKKysJ CX0KKysJfQorKworK3N0YXRpYyB2b2lkIGN0cl9CQ0NfZmluYWwoRFJCR19DVFJfQ1RYICpjY3R4 KQorKwl7CisrCWlmIChjY3R4LT5ibHRtcF9wb3MpCisrCQl7CisrCQltZW1zZXQoY2N0eC0+Ymx0 bXAgKyBjY3R4LT5ibHRtcF9wb3MsIDAsIDE2IC0gY2N0eC0+Ymx0bXBfcG9zKTsKKysJCWN0cl9C Q0NfYmxvY2tzKGNjdHgsIGNjdHgtPmJsdG1wKTsKKysJCX0KKysJfQorKworK3N0YXRpYyB2b2lk IGN0cl9kZihEUkJHX0NUUl9DVFggKmNjdHgsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4x LCBzaXplX3QgaW4xbGVuLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMiwgc2l6ZV90IGlu MmxlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjMsIHNpemVfdCBpbjNsZW4pCisrCXsK KysJc2l6ZV90IGlubGVuOworKwl1bnNpZ25lZCBjaGFyICpwID0gY2N0eC0+Ymx0bXA7CisrCXN0 YXRpYyB1bnNpZ25lZCBjaGFyIGM4MCA9IDB4ODA7CisrCisrCWN0cl9CQ0NfaW5pdChjY3R4KTsK KysJaWYgKCFpbjEpCisrCQlpbjFsZW4gPSAwOworKwlpZiAoIWluMikKKysJCWluMmxlbiA9IDA7 CisrCWlmICghaW4zKQorKwkJaW4zbGVuID0gMDsKKysJaW5sZW4gPSBpbjFsZW4gKyBpbjJsZW4g KyBpbjNsZW47CisrCS8qIEluaXRpYWxpc2UgTHx8TiBpbiB0ZW1wb3JhcnkgYmxvY2sgKi8KKysJ KnArKyA9IChpbmxlbiA+PiAyNCkgJiAweGZmOworKwkqcCsrID0gKGlubGVuID4+IDE2KSAmIDB4 ZmY7CisrCSpwKysgPSAoaW5sZW4gPj4gOCkgJiAweGZmOworKwkqcCsrID0gaW5sZW4gJiAweGZm OworKwkvKiBOQiBrZXlsZW4gaXMgYXQgbW9zdCAzMiBieXRlcyAqLworKwkqcCsrID0gMDsKKysJ KnArKyA9IDA7CisrCSpwKysgPSAwOworKwkqcCA9ICh1bnNpZ25lZCBjaGFyKSgoY2N0eC0+a2V5 bGVuICsgMTYpICYgMHhmZik7CisrCWNjdHgtPmJsdG1wX3BvcyA9IDg7CisrCWN0cl9CQ0NfdXBk YXRlKGNjdHgsIGluMSwgaW4xbGVuKTsKKysJY3RyX0JDQ191cGRhdGUoY2N0eCwgaW4yLCBpbjJs ZW4pOworKwljdHJfQkNDX3VwZGF0ZShjY3R4LCBpbjMsIGluM2xlbik7CisrCWN0cl9CQ0NfdXBk YXRlKGNjdHgsICZjODAsIDEpOworKwljdHJfQkNDX2ZpbmFsKGNjdHgpOworKwkvKiBTZXQgdXAg a2V5IEsgKi8KKysJQUVTX3NldF9lbmNyeXB0X2tleShjY3R4LT5LWCwgY2N0eC0+a2V5bGVuICog OCwgJmNjdHgtPmRmX2t4a3MpOworKwkvKiBYIGZvbGxvd3Mga2V5IEsgKi8KKysJQUVTX2VuY3J5 cHQoY2N0eC0+S1ggKyBjY3R4LT5rZXlsZW4sIGNjdHgtPktYLCAmY2N0eC0+ZGZfa3hrcyk7Cisr CUFFU19lbmNyeXB0KGNjdHgtPktYLCBjY3R4LT5LWCArIDE2LCAmY2N0eC0+ZGZfa3hrcyk7Cisr CWlmIChjY3R4LT5rZXlsZW4gIT0gMTYpCisrCQlBRVNfZW5jcnlwdChjY3R4LT5LWCArIDE2LCBj Y3R4LT5LWCArIDMyLCAmY2N0eC0+ZGZfa3hrcyk7CisrI2lmIDAKKytmcHJpbnRmKHN0ZGVyciwg Ik91dHB1dCBvZiBjdHJfZGY6XG4iKTsKKytCSU9fZHVtcF9mcChzdGRlcnIsIGNjdHgtPktYLCBj Y3R4LT5rZXlsZW4gKyAxNik7CisrI2VuZGlmCisrCX0KKysKKysvKiBOQiB0aGUgbm8tZGYgIFVw ZGF0ZSBpbiBTUDgwMC05MCBzcGVjaWZpZXMgYSBjb25zdGFudCBpbnB1dCBsZW5ndGgKKysgKiBv ZiBzZWVkbGVuLCBob3dldmVyIG90aGVyIHVzZXMgb2YgdGhpcyBhbGdvcml0aG0gcGFkIHRoZSBp bnB1dCB3aXRoCisrICogemVyb2VzIGlmIG5lY2Vzc2FyeSBhbmQgaGF2ZSB1cCB0byB0d28gcGFy YW1ldGVycyBYT1JlZCB0b2dldGhlciwKKysgKiBoYW5kbGUgYm90aCBjYXNlcyBpbiB0aGlzIGZ1 bmN0aW9uIGluc3RlYWQuCisrICovCisrCisrc3RhdGljIHZvaWQgY3RyX1VwZGF0ZShEUkJHX0NU WCAqZGN0eCwKKysJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKKysJ CWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMiwgc2l6ZV90IGluMmxlbiwKKysJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VsZW4pCisrCXsKKysJRFJCR19DVFJfQ1RYICpj Y3R4ID0gJmRjdHgtPmQuY3RyOworKwkvKiBrcyBpcyBhbHJlYWR5IHNldHVwIGZvciBjb3JyZWN0 IGtleSAqLworKwlpbmNfMTI4KGNjdHgpOworKwlBRVNfZW5jcnlwdChjY3R4LT5WLCBjY3R4LT5L LCAmY2N0eC0+a3MpOworKwkvKiBJZiBrZXlsZW4gbG9uZ2VyIHRoYW4gMTI4IGJpdHMgbmVlZCBl eHRyYSBlbmNyeXB0ICovCisrCWlmIChjY3R4LT5rZXlsZW4gIT0gMTYpCisrCQl7CisrCQlpbmNf MTI4KGNjdHgpOworKwkJQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+SyArIDE2LCAmY2N0eC0+ a3MpOworKwkJfQorKwlpbmNfMTI4KGNjdHgpOworKwlBRVNfZW5jcnlwdChjY3R4LT5WLCBjY3R4 LT5WLCAmY2N0eC0+a3MpOworKwkvKiBJZiAxOTIgYml0IGtleSBwYXJ0IG9mIFYgaXMgb24gZW5k IG9mIEsgKi8KKysJaWYgKGNjdHgtPmtleWxlbiA9PSAyNCkKKysJCXsKKysJCW1lbWNweShjY3R4 LT5WICsgOCwgY2N0eC0+ViwgOCk7CisrCQltZW1jcHkoY2N0eC0+ViwgY2N0eC0+SyArIDI0LCA4 KTsKKysJCX0KKysKKysJaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19DVFJfVVNFX0RGKQor KwkJeworKwkJLyogSWYgbm8gaW5wdXQgcmV1c2UgZXhpc3RpbmcgZGVyaXZlZCB2YWx1ZSAqLwor KwkJaWYgKGluMSB8fCBub25jZSB8fCBpbjIpCisrCQkJY3RyX2RmKGNjdHgsIGluMSwgaW4xbGVu LCBub25jZSwgbm9uY2VsZW4sIGluMiwgaW4ybGVuKTsKKysJCS8qIElmIHRoaXMgYSByZXVzZSBp bnB1dCBpbjFsZW4gIT0gMCAqLworKwkJaWYgKGluMWxlbikKKysJCQljdHJfWE9SKGNjdHgsIGNj dHgtPktYLCBkY3R4LT5zZWVkbGVuKTsKKysJCX0KKysJZWxzZQorKwkJeworKwkJY3RyX1hPUihj Y3R4LCBpbjEsIGluMWxlbik7CisrCQljdHJfWE9SKGNjdHgsIGluMiwgaW4ybGVuKTsKKysJCX0K KysKKysJQUVTX3NldF9lbmNyeXB0X2tleShjY3R4LT5LLCBkY3R4LT5zdHJlbmd0aCwgJmNjdHgt PmtzKTsKKysjaWYgMAorK2ZwcmludGYoc3RkZXJyLCAiSytWIGFmdGVyIHVwZGF0ZSBpczpcbiIp OworK0JJT19kdW1wX2ZwKHN0ZGVyciwgY2N0eC0+SywgY2N0eC0+a2V5bGVuKTsKKytCSU9fZHVt cF9mcChzdGRlcnIsIGNjdHgtPlYsIDE2KTsKKysjZW5kaWYKKysJfQorKworK3N0YXRpYyBpbnQg ZHJiZ19jdHJfaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgsCisrCQkJY29uc3QgdW5zaWduZWQg Y2hhciAqZW50LCBzaXplX3QgZW50bGVuLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNl LCBzaXplX3Qgbm9uY2VsZW4sCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGVycywgc2l6ZV90 IHBlcnNsZW4pCisrCXsKKysJRFJCR19DVFJfQ1RYICpjY3R4ID0gJmRjdHgtPmQuY3RyOworKwlt ZW1zZXQoY2N0eC0+SywgMCwgc2l6ZW9mKGNjdHgtPkspKTsKKysJbWVtc2V0KGNjdHgtPlYsIDAs IHNpemVvZihjY3R4LT5WKSk7CisrCUFFU19zZXRfZW5jcnlwdF9rZXkoY2N0eC0+SywgZGN0eC0+ c3RyZW5ndGgsICZjY3R4LT5rcyk7CisrCWN0cl9VcGRhdGUoZGN0eCwgZW50LCBlbnRsZW4sIHBl cnMsIHBlcnNsZW4sIG5vbmNlLCBub25jZWxlbik7CisrCXJldHVybiAxOworKwl9CisrCisrc3Rh dGljIGludCBkcmJnX2N0cl9yZXNlZWQoRFJCR19DVFggKmRjdHgsIAorKwkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudGxlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICph ZGluLCBzaXplX3QgYWRpbmxlbikKKysJeworKwljdHJfVXBkYXRlKGRjdHgsIGVudCwgZW50bGVu LCBhZGluLCBhZGlubGVuLCBOVUxMLCAwKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMg aW50IGRyYmdfY3RyX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJCXVuc2lnbmVkIGNoYXIg Km91dCwgc2l6ZV90IG91dGxlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXpl X3QgYWRpbmxlbikKKysJeworKwlEUkJHX0NUUl9DVFggKmNjdHggPSAmZGN0eC0+ZC5jdHI7Cisr CWlmIChhZGluICYmIGFkaW5sZW4pCisrCQl7CisrCQljdHJfVXBkYXRlKGRjdHgsIGFkaW4sIGFk aW5sZW4sIE5VTEwsIDAsIE5VTEwsIDApOworKwkJLyogVGhpcyBtZWFucyB3ZSByZXVzZSBkZXJp dmVkIHZhbHVlICovCisrCQlpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX0NUUl9VU0VfREYp CisrCQkJeworKwkJCWFkaW4gPSBOVUxMOworKwkJCWFkaW5sZW4gPSAxOworKwkJCX0KKysJCX0K KysJZWxzZQorKwkJYWRpbmxlbiA9IDA7CisrCisrCWZvciAoOzspCisrCQl7CisrCQlpbmNfMTI4 KGNjdHgpOworKwkJaWYgKCEoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpICYmICFkY3R4 LT5sYl92YWxpZCkKKysJCQl7CisrCQkJQUVTX2VuY3J5cHQoY2N0eC0+ViwgZGN0eC0+bGIsICZj Y3R4LT5rcyk7CisrCQkJZGN0eC0+bGJfdmFsaWQgPSAxOworKwkJCWNvbnRpbnVlOworKwkJCX0K KysJCWlmIChvdXRsZW4gPCAxNikKKysJCQl7CisrCQkJLyogVXNlIEsgYXMgdGVtcCBzcGFjZSBh cyBpdCB3aWxsIGJlIHVwZGF0ZWQgKi8KKysJCQlBRVNfZW5jcnlwdChjY3R4LT5WLCBjY3R4LT5L LCAmY2N0eC0+a3MpOworKwkJCWlmICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgY2N0eC0+ SykpCisrCQkJCXJldHVybiAwOworKwkJCW1lbWNweShvdXQsIGNjdHgtPkssIG91dGxlbik7Cisr CQkJYnJlYWs7CisrCQkJfQorKwkJQUVTX2VuY3J5cHQoY2N0eC0+Viwgb3V0LCAmY2N0eC0+a3Mp OworKwkJaWYgKCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBvdXQpKQorKwkJCXJldHVybiAw OworKwkJb3V0ICs9IDE2OworKwkJb3V0bGVuIC09IDE2OworKwkJaWYgKG91dGxlbiA9PSAwKQor KwkJCWJyZWFrOworKwkJfQorKworKwljdHJfVXBkYXRlKGRjdHgsIGFkaW4sIGFkaW5sZW4sIE5V TEwsIDAsIE5VTEwsIDApOworKworKwlyZXR1cm4gMTsKKysKKysJfQorKworK3N0YXRpYyBpbnQg ZHJiZ19jdHJfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkKKysJeworKwltZW1zZXQoJmRj dHgtPmQuY3RyLCAwLCBzaXplb2YoRFJCR19DVFJfQ1RYKSk7CisrCXJldHVybiAxOworKwl9Cisr CisraW50IGZpcHNfZHJiZ19jdHJfaW5pdChEUkJHX0NUWCAqZGN0eCkKKysJeworKwlEUkJHX0NU Ul9DVFggKmNjdHggPSAmZGN0eC0+ZC5jdHI7CisrCisrCXNpemVfdCBrZXlsZW47CisrCisrCXN3 aXRjaCAoZGN0eC0+dHlwZSkKKysJCXsKKysJCWNhc2UgTklEX2Flc18xMjhfY3RyOgorKwkJa2V5 bGVuID0gMTY7CisrCQlicmVhazsKKysKKysJCWNhc2UgTklEX2Flc18xOTJfY3RyOgorKwkJa2V5 bGVuID0gMjQ7CisrCQlicmVhazsKKysKKysJCWNhc2UgTklEX2Flc18yNTZfY3RyOgorKwkJa2V5 bGVuID0gMzI7CisrCQlicmVhazsKKysKKysJCWRlZmF1bHQ6CisrCQlyZXR1cm4gLTI7CisrCQl9 CisrCisrCWRjdHgtPmluc3RhbnRpYXRlID0gZHJiZ19jdHJfaW5zdGFudGlhdGU7CisrCWRjdHgt PnJlc2VlZCA9IGRyYmdfY3RyX3Jlc2VlZDsKKysJZGN0eC0+Z2VuZXJhdGUgPSBkcmJnX2N0cl9n ZW5lcmF0ZTsKKysJZGN0eC0+dW5pbnN0YW50aWF0ZSA9IGRyYmdfY3RyX3VuaW5zdGFudGlhdGU7 CisrCisrCWNjdHgtPmtleWxlbiA9IGtleWxlbjsKKysJZGN0eC0+c3RyZW5ndGggPSBrZXlsZW4g KiA4OworKwlkY3R4LT5ibG9ja2xlbmd0aCA9IDE2OworKwlkY3R4LT5zZWVkbGVuID0ga2V5bGVu ICsgMTY7CisrCisrCWlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfQ1RSX1VTRV9ERikKKysJ CXsKKysJCS8qIGRmIGluaXRpYWxpc2F0aW9uICovCisrCQlzdGF0aWMgdW5zaWduZWQgY2hhciBk Zl9rZXlbMzJdID0KKysJCQl7CisrCQkJMHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgw NiwweDA3LAorKwkJCTB4MDgsMHgwOSwweDBhLDB4MGIsMHgwYywweDBkLDB4MGUsMHgwZiwKKysJ CQkweDEwLDB4MTEsMHgxMiwweDEzLDB4MTQsMHgxNSwweDE2LDB4MTcsCisrCQkJMHgxOCwweDE5 LDB4MWEsMHgxYiwweDFjLDB4MWQsMHgxZSwweDFmIAorKwkJCX07CisrCQkvKiBTZXQga2V5IHNj aGVkdWxlIGZvciBkZl9rZXkgKi8KKysJCUFFU19zZXRfZW5jcnlwdF9rZXkoZGZfa2V5LCBkY3R4 LT5zdHJlbmd0aCwgJmNjdHgtPmRmX2tzKTsKKysKKysJCWRjdHgtPm1pbl9lbnRyb3B5ID0gY2N0 eC0+a2V5bGVuOworKwkJZGN0eC0+bWF4X2VudHJvcHkgPSBEUkJHX01BWF9MRU5HVEg7CisrCQlk Y3R4LT5taW5fbm9uY2UgPSBkY3R4LT5taW5fZW50cm9weSAvIDI7CisrCQlkY3R4LT5tYXhfbm9u Y2UgPSBEUkJHX01BWF9MRU5HVEg7CisrCQlkY3R4LT5tYXhfcGVycyA9IERSQkdfTUFYX0xFTkdU SDsKKysJCWRjdHgtPm1heF9hZGluID0gRFJCR19NQVhfTEVOR1RIOworKwkJfQorKwllbHNlCisr CQl7CisrCQlkY3R4LT5taW5fZW50cm9weSA9IGRjdHgtPnNlZWRsZW47CisrCQlkY3R4LT5tYXhf ZW50cm9weSA9IGRjdHgtPnNlZWRsZW47CisrCQkvKiBOb25jZSBub3QgdXNlZCAqLworKwkJZGN0 eC0+bWluX25vbmNlID0gMDsKKysJCWRjdHgtPm1heF9ub25jZSA9IDA7CisrCQlkY3R4LT5tYXhf cGVycyA9IGRjdHgtPnNlZWRsZW47CisrCQlkY3R4LT5tYXhfYWRpbiA9IGRjdHgtPnNlZWRsZW47 CisrCQl9CisrCisrCWRjdHgtPm1heF9yZXF1ZXN0ID0gMTw8MTY7CisrCWRjdHgtPnJlc2VlZF9p bnRlcnZhbCA9IDE8PDI0OworKworKwlyZXR1cm4gMTsKKysJfQorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWsvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2guYy5maXBzIG9wZW5zc2wtMS4wLjFrL2Ny eXB0by9maXBzL2ZpcHNfZHJiZ19oYXNoLmMKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlw cy9maXBzX2RyYmdfaGFzaC5jLmZpcHMJMjAxNS0wMS0wOSAwOTo1MTo1MS41NTg5MjI0NDkgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaGFzaC5jCTIwMTUt MDEtMDkgMDk6NTE6NTEuNTU4OTIyNDQ5ICswMTAwCitAQCAtMCwwICsxLDM3OCBAQAorKy8qIGZp cHMvcmFuZC9maXBzX2RyYmdfaGFzaC5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4g SGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdC4K KysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g CisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBk aXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8p IgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQ cm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0 CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICog ICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Ig d3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgor KyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWlu IHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Cisr ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wu b3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NM IFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS CisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVu U1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKysjZGVmaW5lIE9Q RU5TU0xfRklQU0FQSQorKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5n Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlICJmaXBzX3Jh bmRfbGNsLmgiCisrCisrLyogVGhpcyBpcyBIYXNoX2RmIGZyb20gU1AgODAwLTkwIDEwLjQuMSAq LworKworK3N0YXRpYyBpbnQgaGFzaF9kZihEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAq b3V0LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKKysJCQlj b25zdCB1bnNpZ25lZCBjaGFyICppbjIsIHNpemVfdCBpbjJsZW4sCisrCQkJY29uc3QgdW5zaWdu ZWQgY2hhciAqaW4zLCBzaXplX3QgaW4zbGVuLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmlu NCwgc2l6ZV90IGluNGxlbikKKysJeworKwlFVlBfTURfQ1RYICptY3R4ID0gJmRjdHgtPmQuaGFz aC5tY3R4OworKwl1bnNpZ25lZCBjaGFyICp2dG1wID0gZGN0eC0+ZC5oYXNoLnZ0bXA7CisrCXVu c2lnbmVkIGNoYXIgdG1wWzZdOworKwkvKiBTdGFuZGFyZCBvbmx5IGV2ZXIgbmVlZHMgc2VlZGxl biBieXRlcyB3aGljaCBpcyBhbHdheXMgbGVzcyB0aGFuCisrCSAqIG1heGltdW0gcGVybWl0dGVk IHNvIG5vIG5lZWQgdG8gY2hlY2sgbGVuZ3RoLgorKwkgKi8KKysJc2l6ZV90IG91dGxlbiA9IGRj dHgtPnNlZWRsZW47CisrCXRtcFswXSA9IDE7CisrCXRtcFsxXSA9ICgob3V0bGVuICogOCkgPj4g MjQpICYgMHhmZjsKKysJdG1wWzJdID0gKChvdXRsZW4gKiA4KSA+PiAxNikgJiAweGZmOworKwl0 bXBbM10gPSAoKG91dGxlbiAqIDgpID4+IDgpICYgMHhmZjsKKysJdG1wWzRdID0gKG91dGxlbiAq IDgpICYgMHhmZjsKKysJaWYgKCFpbjEpCisrCQl7CisrCQl0bXBbNV0gPSAodW5zaWduZWQgY2hh cilpbjFsZW47CisrCQlpbjEgPSB0bXAgKyA1OworKwkJaW4xbGVuID0gMTsKKysJCX0KKysJZm9y ICg7OykKKysJCXsKKysJCWlmICghRklQU19kaWdlc3Rpbml0KG1jdHgsIGRjdHgtPmQuaGFzaC5t ZCkpCisrCQkJcmV0dXJuIDA7CisrCQlpZiAoIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIHRtcCwg NSkpCisrCQkJcmV0dXJuIDA7CisrCQlpZiAoaW4xICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4 LCBpbjEsIGluMWxlbikpCisrCQkJcmV0dXJuIDA7CisrCQlpZiAoaW4yICYmICFGSVBTX2RpZ2Vz dHVwZGF0ZShtY3R4LCBpbjIsIGluMmxlbikpCisrCQkJcmV0dXJuIDA7CisrCQlpZiAoaW4zICYm ICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjMsIGluM2xlbikpCisrCQkJcmV0dXJuIDA7Cisr CQlpZiAoaW40ICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjQsIGluNGxlbikpCisrCQkJ cmV0dXJuIDA7CisrCQlpZiAob3V0bGVuIDwgZGN0eC0+YmxvY2tsZW5ndGgpCisrCQkJeworKwkJ CWlmICghRklQU19kaWdlc3RmaW5hbChtY3R4LCB2dG1wLCBOVUxMKSkKKysJCQkJcmV0dXJuIDA7 CisrCQkJbWVtY3B5KG91dCwgdnRtcCwgb3V0bGVuKTsKKysJCQlPUEVOU1NMX2NsZWFuc2UodnRt cCwgZGN0eC0+YmxvY2tsZW5ndGgpOworKwkJCXJldHVybiAxOworKwkJCX0KKysJCWVsc2UgaWYo IUZJUFNfZGlnZXN0ZmluYWwobWN0eCwgb3V0LCBOVUxMKSkKKysJCQlyZXR1cm4gMDsKKysKKysJ CW91dGxlbiAtPSBkY3R4LT5ibG9ja2xlbmd0aDsKKysJCWlmIChvdXRsZW4gPT0gMCkKKysJCQly ZXR1cm4gMTsKKysJCXRtcFswXSsrOworKwkJb3V0ICs9IGRjdHgtPmJsb2NrbGVuZ3RoOworKwkJ fQorKwl9CisrCisrCisrLyogQWRkIGFuIHVuc2lnbmVkIGJ1ZmZlciB0byB0aGUgYnVmIHZhbHVl LCBzdG9yaW5nIHRoZSByZXN1bHQgaW4gYnVmLiBGb3IKKysgKiB0aGlzIGFsZ29yaXRobSB0aGUg bGVuZ3RoIG9mIGlucHV0IG5ldmVyIGV4Y2VlZHMgdGhlIHNlZWQgbGVuZ3RoLgorKyAqLworKwor K3N0YXRpYyB2b2lkIGN0eF9hZGRfYnVmKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICpi dWYsCisrCQkJCXVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4pCisrCXsKKysJc2l6ZV90 IGkgPSBpbmxlbjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqcTsKKysJdW5zaWduZWQgY2hhciBj LCAqcDsKKysJcCA9IGJ1ZiArIGRjdHgtPnNlZWRsZW47CisrCXEgPSBpbiArIGlubGVuOworKwor KwlPUEVOU1NMX2Fzc2VydChpIDw9IGRjdHgtPnNlZWRsZW4pOworKworKwkvKiBTcGVjaWFsIGNh c2U6IHplcm8gbGVuZ3RoLCBqdXN0IGluY3JlbWVudCBidWZmZXIgKi8KKysJaWYgKGkpCisrCQlj ID0gMDsKKysJZWxzZSAKKysJCWMgPSAxOworKworKwl3aGlsZSAoaSkKKysJCXsKKysJCWludCBy OworKwkJcC0tOworKwkJcS0tOworKwkJciA9ICpwICsgKnEgKyBjOworKwkJLyogQ2FycnkgKi8K KysJCWlmIChyID4gMHhmZikKKysJCQljID0gMTsKKysJCWVsc2UKKysJCQljID0gMDsKKysJCSpw ID0gciAmIDB4ZmY7CisrCQlpLS07CisrCQl9CisrCisrCWkgPSBkY3R4LT5zZWVkbGVuIC0gaW5s ZW47CisrCisrCS8qIElmIG5vdCBhZGRpbmcgd2hvbGUgYnVmZmVyIGhhbmRsZSBmaW5hbCBjYXJy aWVzICovCisrCWlmIChjICYmIGkpCisrCQl7CisrCQlkbworKwkJCXsKKysJCQlwLS07CisrCQkJ YyA9ICpwOworKwkJCWMrKzsKKysJCQkqcCA9IGM7CisrCQkJaWYoYykKKysJCQkJcmV0dXJuOwor KwkJCX0gd2hpbGUoaS0tKTsKKysJCX0KKysJfQorKworKy8qIEZpbmFsaXNlIGFuZCBhZGQgaGFz aCB0byBWICovCisrCQorK3N0YXRpYyBpbnQgY3R4X2FkZF9tZChEUkJHX0NUWCAqZGN0eCkKKysJ eworKwlpZiAoIUZJUFNfZGlnZXN0ZmluYWwoJmRjdHgtPmQuaGFzaC5tY3R4LCBkY3R4LT5kLmhh c2gudnRtcCwgTlVMTCkpCisrCQkJcmV0dXJuIDA7CisrCWN0eF9hZGRfYnVmKGRjdHgsIGRjdHgt PmQuaGFzaC5WLCBkY3R4LT5kLmhhc2gudnRtcCwgZGN0eC0+YmxvY2tsZW5ndGgpOworKwlyZXR1 cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgaGFzaF9nZW4oRFJCR19DVFggKmRjdHgsIHVuc2ln bmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbikKKysJeworKwlEUkJHX0hBU0hfQ1RYICpoY3R4 ID0gJmRjdHgtPmQuaGFzaDsKKysJaWYgKG91dGxlbiA9PSAwKQorKwkJcmV0dXJuIDE7CisrCW1l bWNweShoY3R4LT52dG1wLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsKKysJZm9yKDs7KQorKwkJ eworKwkJRklQU19kaWdlc3Rpbml0KCZoY3R4LT5tY3R4LCBoY3R4LT5tZCk7CisrCQlGSVBTX2Rp Z2VzdHVwZGF0ZSgmaGN0eC0+bWN0eCwgaGN0eC0+dnRtcCwgZGN0eC0+c2VlZGxlbik7CisrCQlp ZiAoIShkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkgJiYgIWRjdHgtPmxiX3ZhbGlkKQor KwkJCXsKKysJCQlGSVBTX2RpZ2VzdGZpbmFsKCZoY3R4LT5tY3R4LCBkY3R4LT5sYiwgTlVMTCk7 CisrCQkJZGN0eC0+bGJfdmFsaWQgPSAxOworKwkJCX0KKysJCWVsc2UgaWYgKG91dGxlbiA8IGRj dHgtPmJsb2NrbGVuZ3RoKQorKwkJCXsKKysJCQlGSVBTX2RpZ2VzdGZpbmFsKCZoY3R4LT5tY3R4 LCBoY3R4LT52dG1wLCBOVUxMKTsKKysJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgs IGhjdHgtPnZ0bXApKQorKwkJCQlyZXR1cm4gMDsKKysJCQltZW1jcHkob3V0LCBoY3R4LT52dG1w LCBvdXRsZW4pOworKwkJCXJldHVybiAxOworKwkJCX0KKysJCWVsc2UKKysJCQl7CisrCQkJRklQ U19kaWdlc3RmaW5hbCgmaGN0eC0+bWN0eCwgb3V0LCBOVUxMKTsKKysJCQlpZiAoIWZpcHNfZHJi Z19jcHJuZ190ZXN0KGRjdHgsIG91dCkpCisrCQkJCXJldHVybiAwOworKwkJCW91dGxlbiAtPSBk Y3R4LT5ibG9ja2xlbmd0aDsKKysJCQlpZiAob3V0bGVuID09IDApCisrCQkJCXJldHVybiAxOwor KwkJCW91dCArPSBkY3R4LT5ibG9ja2xlbmd0aDsKKysJCQl9CisrCQljdHhfYWRkX2J1ZihkY3R4 LCBoY3R4LT52dG1wLCBOVUxMLCAwKTsKKysJCX0KKysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19o YXNoX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFy ICplbnQsIHNpemVfdCBlbnRfbGVuLAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwg c2l6ZV90IG5vbmNlX2xlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcHN0ciwgc2l6ZV90 IHBzdHJfbGVuKQorKwl7CisrCURSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOwor KwlpZiAoIWhhc2hfZGYoZGN0eCwgaGN0eC0+ViwgCisrCQkJZW50LCBlbnRfbGVuLCBub25jZSwg bm9uY2VfbGVuLCBwc3RyLCBwc3RyX2xlbiwKKysJCQlOVUxMLCAwKSkKKysJCXJldHVybiAwOwor KwlpZiAoIWhhc2hfZGYoZGN0eCwgaGN0eC0+QywgCisrCQkJTlVMTCwgMCwgaGN0eC0+ViwgZGN0 eC0+c2VlZGxlbiwKKysJCQlOVUxMLCAwLCBOVUxMLCAwKSkKKysJCXJldHVybiAwOworKworKyNp ZmRlZiBIQVNIX0RSQkdfVFJBQ0UKKysJZnByaW50ZihzdGRlcnIsICJWK0MgYWZ0ZXIgaW5zdGFu dGlhdGU6XG4iKTsKKysJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsK KysJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKKysjZW5kaWYKKysJ cmV0dXJuIDE7CisrCX0KKysKKysJCisrc3RhdGljIGludCBkcmJnX2hhc2hfcmVzZWVkKERSQkdf Q1RYICpkY3R4LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVu LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4pCisrCXsK KysJRFJCR19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhhc2g7CisrCS8qIFYgYWJvdXQgdG8g YmUgdXBkYXRlZCBzbyB1c2UgQyBhcyBvdXRwdXQgaW5zdGVhZCAqLworKwlpZiAoIWhhc2hfZGYo ZGN0eCwgaGN0eC0+QywKKysJCQlOVUxMLCAxLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuLAorKwkJ CWVudCwgZW50X2xlbiwgYWRpbiwgYWRpbl9sZW4pKQorKwkJcmV0dXJuIDA7CisrCW1lbWNweSho Y3R4LT5WLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKKysJaWYgKCFoYXNoX2RmKGRjdHgsIGhj dHgtPkMsIE5VTEwsIDAsCisrCQkJaGN0eC0+ViwgZGN0eC0+c2VlZGxlbiwgTlVMTCwgMCwgTlVM TCwgMCkpCisrCQlyZXR1cm4gMDsKKysjaWZkZWYgSEFTSF9EUkJHX1RSQUNFCisrCWZwcmludGYo c3RkZXJyLCAiVitDIGFmdGVyIHJlc2VlZDpcbiIpOworKwloZXhwcmludChzdGRlcnIsIGhjdHgt PlYsIGRjdHgtPnNlZWRsZW4pOworKwloZXhwcmludChzdGRlcnIsIGhjdHgtPkMsIGRjdHgtPnNl ZWRsZW4pOworKyNlbmRpZgorKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19o YXNoX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJCQl1bnNpZ25lZCBjaGFyICpvdXQsIHNp emVfdCBvdXRsZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlu X2xlbikKKysJeworKwlEUkJHX0hBU0hfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsKKysJRVZQ X01EX0NUWCAqbWN0eCA9ICZoY3R4LT5tY3R4OworKwl1bnNpZ25lZCBjaGFyIHRtcFs0XTsKKysJ aWYgKGFkaW4gJiYgYWRpbl9sZW4pCisrCQl7CisrCQl0bXBbMF0gPSAyOworKwkJaWYgKCFGSVBT X2RpZ2VzdGluaXQobWN0eCwgaGN0eC0+bWQpKQorKwkJCXJldHVybiAwOworKwkJaWYgKCFFVlBf RGlnZXN0VXBkYXRlKG1jdHgsIHRtcCwgMSkpCisrCQkJcmV0dXJuIDA7CisrCQlpZiAoIUVWUF9E aWdlc3RVcGRhdGUobWN0eCwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbikpCisrCQkJcmV0dXJuIDA7 CisrCQlpZiAoIUVWUF9EaWdlc3RVcGRhdGUobWN0eCwgYWRpbiwgYWRpbl9sZW4pKQorKwkJCXJl dHVybiAwOworKwkJaWYgKCFjdHhfYWRkX21kKGRjdHgpKQorKwkJCXJldHVybiAwOworKwkJfQor KwlpZiAoIWhhc2hfZ2VuKGRjdHgsIG91dCwgb3V0bGVuKSkKKysJCXJldHVybiAwOworKworKwl0 bXBbMF0gPSAzOworKwlpZiAoIUZJUFNfZGlnZXN0aW5pdChtY3R4LCBoY3R4LT5tZCkpCisrCQly ZXR1cm4gMDsKKysJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1jdHgsIHRtcCwgMSkpCisrCQlyZXR1 cm4gMDsKKysJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1jdHgsIGhjdHgtPlYsIGRjdHgtPnNlZWRs ZW4pKQorKwkJcmV0dXJuIDA7CisrCisrCWlmICghY3R4X2FkZF9tZChkY3R4KSkKKysJCXJldHVy biAwOworKworKwljdHhfYWRkX2J1ZihkY3R4LCBoY3R4LT5WLCBoY3R4LT5DLCBkY3R4LT5zZWVk bGVuKTsKKysKKysJdG1wWzBdID0gKGRjdHgtPnJlc2VlZF9jb3VudGVyID4+IDI0KSAmIDB4ZmY7 CisrCXRtcFsxXSA9IChkY3R4LT5yZXNlZWRfY291bnRlciA+PiAxNikgJiAweGZmOworKwl0bXBb Ml0gPSAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj4gOCkgJiAweGZmOworKwl0bXBbM10gPSBkY3R4 LT5yZXNlZWRfY291bnRlciAmIDB4ZmY7CisrCWN0eF9hZGRfYnVmKGRjdHgsIGhjdHgtPlYsIHRt cCwgNCk7CisrI2lmZGVmIEhBU0hfRFJCR19UUkFDRQorKwlmcHJpbnRmKHN0ZGVyciwgIlYrQyBh ZnRlciBnZW5lcmF0ZTpcbiIpOworKwloZXhwcmludChzdGRlcnIsIGhjdHgtPlYsIGRjdHgtPnNl ZWRsZW4pOworKwloZXhwcmludChzdGRlcnIsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOworKyNl bmRpZgorKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19oYXNoX3VuaW5zdGFu dGlhdGUoRFJCR19DVFggKmRjdHgpCisrCXsKKysJRVZQX01EX0NUWF9jbGVhbnVwKCZkY3R4LT5k Lmhhc2gubWN0eCk7CisrCU9QRU5TU0xfY2xlYW5zZSgmZGN0eC0+ZC5oYXNoLCBzaXplb2YoRFJC R19IQVNIX0NUWCkpOworKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBmaXBzX2RyYmdfaGFzaF9p bml0KERSQkdfQ1RYICpkY3R4KQorKwl7CisrCWNvbnN0IEVWUF9NRCAqbWQ7CisrCURSQkdfSEFT SF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOworKwltZCA9IEZJUFNfZ2V0X2RpZ2VzdGJ5bmlk KGRjdHgtPnR5cGUpOworKwlpZiAoIW1kKQorKwkJcmV0dXJuIC0yOworKwlzd2l0Y2ggKGRjdHgt PnR5cGUpCisrCQl7CisrCQljYXNlIE5JRF9zaGExOgorKwkJZGN0eC0+c3RyZW5ndGggPSAxMjg7 CisrCQlicmVhazsKKysKKysJCWNhc2UgTklEX3NoYTIyNDoKKysJCWRjdHgtPnN0cmVuZ3RoID0g MTkyOworKwkJYnJlYWs7CisrCisrCQlkZWZhdWx0OgorKwkJZGN0eC0+c3RyZW5ndGggPSAyNTY7 CisrCQlicmVhazsKKysJCX0KKysKKysJZGN0eC0+aW5zdGFudGlhdGUgPSBkcmJnX2hhc2hfaW5z dGFudGlhdGU7CisrCWRjdHgtPnJlc2VlZCA9IGRyYmdfaGFzaF9yZXNlZWQ7CisrCWRjdHgtPmdl bmVyYXRlID0gZHJiZ19oYXNoX2dlbmVyYXRlOworKwlkY3R4LT51bmluc3RhbnRpYXRlID0gZHJi Z19oYXNoX3VuaW5zdGFudGlhdGU7CisrCisrCWRjdHgtPmQuaGFzaC5tZCA9IG1kOworKwlFVlBf TURfQ1RYX2luaXQoJmhjdHgtPm1jdHgpOworKworKwkvKiBUaGVzZSBhcmUgdGFrZW4gZnJvbSBT UCA4MDAtOTAgMTAuMSB0YWJsZSAyICovCisrCisrCWRjdHgtPmJsb2NrbGVuZ3RoID0gTV9FVlBf TURfc2l6ZShtZCk7CisrCWlmIChkY3R4LT5ibG9ja2xlbmd0aCA+IDMyKQorKwkJZGN0eC0+c2Vl ZGxlbiA9IDExMTsKKysJZWxzZQorKwkJZGN0eC0+c2VlZGxlbiA9IDU1OworKworKworKwlkY3R4 LT5taW5fZW50cm9weSA9IGRjdHgtPnN0cmVuZ3RoIC8gODsKKysJZGN0eC0+bWF4X2VudHJvcHkg PSBEUkJHX01BWF9MRU5HVEg7CisrCisrCWRjdHgtPm1pbl9ub25jZSA9IGRjdHgtPm1pbl9lbnRy b3B5IC8gMjsKKysJZGN0eC0+bWF4X25vbmNlID0gRFJCR19NQVhfTEVOR1RIOworKworKwlkY3R4 LT5tYXhfcGVycyA9IERSQkdfTUFYX0xFTkdUSDsKKysJZGN0eC0+bWF4X2FkaW4gPSBEUkJHX01B WF9MRU5HVEg7CisrCisrCWRjdHgtPm1heF9yZXF1ZXN0ID0gMTw8MTY7CisrCWRjdHgtPnJlc2Vl ZF9pbnRlcnZhbCA9IDE8PDI0OworKworKwlyZXR1cm4gMTsKKysJfQorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWsvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2htYWMuYy5maXBzIG9wZW5zc2wtMS4wLjFr L2NyeXB0by9maXBzL2ZpcHNfZHJiZ19obWFjLmMKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8v Zmlwcy9maXBzX2RyYmdfaG1hYy5jLmZpcHMJMjAxNS0wMS0wOSAwOTo1MTo1MS41NTk5MjI0NzIg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaG1hYy5jCTIw MTUtMDEtMDkgMDk6NTE6NTEuNTU4OTIyNDQ5ICswMTAwCitAQCAtMCwwICsxLDI4MSBAQAorKy8q IGZpcHMvcmFuZC9maXBzX2RyYmdfaG1hYy5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVu IE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVj dC4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3Bl blNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAg ICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRp c3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9y Zy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNT TCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3Rl IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250 YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisr ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysg KgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5T U0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKysjaW5jbHVk ZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Ny eXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ht YWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgImZpcHNfcmFu ZF9sY2wuaCIKKysKKytzdGF0aWMgaW50IGRyYmdfaG1hY191cGRhdGUoRFJCR19DVFggKmRjdHgs CisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKKysJCQkJY29u c3QgdW5zaWduZWQgY2hhciAqaW4yLCBzaXplX3QgaW4ybGVuLAorKwkJCQljb25zdCB1bnNpZ25l ZCBjaGFyICppbjMsIHNpemVfdCBpbjNsZW4KKysJCQkpCisrCXsKKysJc3RhdGljIHVuc2lnbmVk IGNoYXIgYzAgPSAwLCBjMSA9IDE7CisrCURSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5o bWFjOworKwlITUFDX0NUWCAqaGN0eCA9ICZobWFjLT5oY3R4OworKworKwlpZiAoIUhNQUNfSW5p dF9leChoY3R4LCBobWFjLT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQor KwkJcmV0dXJuIDA7CisrCWlmICghSE1BQ19VcGRhdGUoaGN0eCwgaG1hYy0+ViwgZGN0eC0+Ymxv Y2tsZW5ndGgpKQorKwkJcmV0dXJuIDA7CisrCWlmICghSE1BQ19VcGRhdGUoaGN0eCwgJmMwLCAx KSkKKysJCXJldHVybiAwOworKwlpZiAoaW4xbGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjEs IGluMWxlbikpCisrCQlyZXR1cm4gMDsKKysJaWYgKGluMmxlbiAmJiAhSE1BQ19VcGRhdGUoaGN0 eCwgaW4yLCBpbjJsZW4pKQorKwkJcmV0dXJuIDA7CisrCWlmIChpbjNsZW4gJiYgIUhNQUNfVXBk YXRlKGhjdHgsIGluMywgaW4zbGVuKSkKKysJCXJldHVybiAwOworKworKwlpZiAoIUhNQUNfRmlu YWwoaGN0eCwgaG1hYy0+SywgTlVMTCkpCisrCQlyZXR1cm4gMDsKKysKKysJaWYgKCFITUFDX0lu aXRfZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgsIGhtYWMtPm1kLCBOVUxMKSkK KysJCXJldHVybiAwOworKwlpZiAoIUhNQUNfVXBkYXRlKGhjdHgsIGhtYWMtPlYsIGRjdHgtPmJs b2NrbGVuZ3RoKSkKKysJCXJldHVybiAwOworKworKwlpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1h Yy0+ViwgTlVMTCkpCisrCQlyZXR1cm4gMDsKKysKKysJaWYgKCFpbjFsZW4gJiYgIWluMmxlbiAm JiAhaW4zbGVuKQorKwkJcmV0dXJuIDE7CisrCisrCWlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGht YWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCisrCQlyZXR1cm4gMDsK KysJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBobWFjLT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkpCisr CQlyZXR1cm4gMDsKKysJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCAmYzEsIDEpKQorKwkJcmV0dXJu IDA7CisrCWlmIChpbjFsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMSwgaW4xbGVuKSkKKysJ CXJldHVybiAwOworKwlpZiAoaW4ybGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjIsIGluMmxl bikpCisrCQlyZXR1cm4gMDsKKysJaWYgKGluM2xlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4z LCBpbjNsZW4pKQorKwkJcmV0dXJuIDA7CisrCisrCWlmICghSE1BQ19GaW5hbChoY3R4LCBobWFj LT5LLCBOVUxMKSkKKysJCXJldHVybiAwOworKworKwlpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBo bWFjLT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQorKwkJcmV0dXJuIDA7 CisrCWlmICghSE1BQ19VcGRhdGUoaGN0eCwgaG1hYy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQor KwkJcmV0dXJuIDA7CisrCisrCWlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5WLCBOVUxMKSkK KysJCXJldHVybiAwOworKworKwlyZXR1cm4gMTsKKysKKysJfQorKworK3N0YXRpYyBpbnQgZHJi Z19obWFjX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJCQljb25zdCB1bnNpZ25lZCBj aGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpub25j ZSwgc2l6ZV90IG5vbmNlX2xlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcHN0ciwgc2l6 ZV90IHBzdHJfbGVuKQorKwl7CisrCURSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5obWFj OworKwltZW1zZXQoaG1hYy0+SywgMCwgZGN0eC0+YmxvY2tsZW5ndGgpOworKwltZW1zZXQoaG1h Yy0+ViwgMSwgZGN0eC0+YmxvY2tsZW5ndGgpOworKwlpZiAoIWRyYmdfaG1hY191cGRhdGUoZGN0 eCwKKysJCQllbnQsIGVudF9sZW4sIG5vbmNlLCBub25jZV9sZW4sIHBzdHIsIHBzdHJfbGVuKSkK KysJCXJldHVybiAwOworKworKyNpZmRlZiBITUFDX0RSQkdfVFJBQ0UKKysJZnByaW50ZihzdGRl cnIsICJLK1YgYWZ0ZXIgaW5zdGFudGlhdGU6XG4iKTsKKysJaGV4cHJpbnQoc3RkZXJyLCBobWFj LT5LLCBobWFjLT5ibG9ja2xlbmd0aCk7CisrCWhleHByaW50KHN0ZGVyciwgaG1hYy0+ViwgaG1h Yy0+YmxvY2tsZW5ndGgpOworKyNlbmRpZgorKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBp bnQgZHJiZ19obWFjX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwKKysJCQkJY29uc3QgdW5zaWduZWQg Y2hhciAqZW50LCBzaXplX3QgZW50X2xlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRp biwgc2l6ZV90IGFkaW5fbGVuKQorKwl7CisrCWlmICghZHJiZ19obWFjX3VwZGF0ZShkY3R4LAor KwkJCWVudCwgZW50X2xlbiwgYWRpbiwgYWRpbl9sZW4sIE5VTEwsIDApKQorKwkJcmV0dXJuIDA7 CisrCisrI2lmZGVmIEhNQUNfRFJCR19UUkFDRQorKwl7CisrCQlEUkJHX0hNQUNfQ1RYICpobWFj ID0gJmRjdHgtPmQuaG1hYzsKKysJCWZwcmludGYoc3RkZXJyLCAiSytWIGFmdGVyIHJlc2VlZDpc biIpOworKwkJaGV4cHJpbnQoc3RkZXJyLCBobWFjLT5LLCBobWFjLT5ibG9ja2xlbmd0aCk7Cisr CQloZXhwcmludChzdGRlcnIsIGhtYWMtPlYsIGhtYWMtPmJsb2NrbGVuZ3RoKTsKKysJfQorKyNl bmRpZgorKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19obWFjX2dlbmVyYXRl KERSQkdfQ1RYICpkY3R4LAorKwkJCQl1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4s CisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGluX2xlbikKKysJewor KwlEUkJHX0hNQUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1hYzsKKysJSE1BQ19DVFggKmhjdHgg PSAmaG1hYy0+aGN0eDsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqVnRtcCA9IGhtYWMtPlY7Cisr CWlmIChhZGluX2xlbiAmJiAhZHJiZ19obWFjX3VwZGF0ZShkY3R4LCBhZGluLCBhZGluX2xlbiwK KysJCQkJCQlOVUxMLCAwLCBOVUxMLCAwKSkKKysJCXJldHVybiAwOworKwlmb3IgKDs7KQorKwkJ eworKwkJaWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgs CisrCQkJCQkJCWhtYWMtPm1kLCBOVUxMKSkKKysJCQlyZXR1cm4gMDsKKysJCWlmICghSE1BQ19V cGRhdGUoaGN0eCwgVnRtcCwgZGN0eC0+YmxvY2tsZW5ndGgpKQorKwkJCXJldHVybiAwOworKwkJ aWYgKCEoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpICYmICFkY3R4LT5sYl92YWxpZCkK KysJCQl7CisrCQkJaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGRjdHgtPmxiLCBOVUxMKSkKKysJCQkJ cmV0dXJuIDA7CisrCQkJZGN0eC0+bGJfdmFsaWQgPSAxOworKwkJCVZ0bXAgPSBkY3R4LT5sYjsK KysJCQljb250aW51ZTsKKysJCQl9CisrCQllbHNlIGlmIChvdXRsZW4gPiBkY3R4LT5ibG9ja2xl bmd0aCkKKysJCQl7CisrCQkJaWYgKCFITUFDX0ZpbmFsKGhjdHgsIG91dCwgTlVMTCkpCisrCQkJ CXJldHVybiAwOworKwkJCWlmICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgb3V0KSkKKysJ CQkJcmV0dXJuIDA7CisrCQkJVnRtcCA9IG91dDsKKysJCQl9CisrCQllbHNlCisrCQkJeworKwkJ CWlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5WLCBOVUxMKSkKKysJCQkJcmV0dXJuIDA7Cisr CQkJaWYgKCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBobWFjLT5WKSkKKysJCQkJcmV0dXJu IDA7CisrCQkJbWVtY3B5KG91dCwgaG1hYy0+Viwgb3V0bGVuKTsKKysJCQlicmVhazsKKysJCQl9 CisrCQlvdXQgKz0gZGN0eC0+YmxvY2tsZW5ndGg7CisrCQlvdXRsZW4gLT0gZGN0eC0+YmxvY2ts ZW5ndGg7CisrCQl9CisrCWlmICghZHJiZ19obWFjX3VwZGF0ZShkY3R4LCBhZGluLCBhZGluX2xl biwgTlVMTCwgMCwgTlVMTCwgMCkpCisrCQlyZXR1cm4gMDsKKysKKysJcmV0dXJuIDE7CisrCX0K KysKKytzdGF0aWMgaW50IGRyYmdfaG1hY191bmluc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4KQor Kwl7CisrCUhNQUNfQ1RYX2NsZWFudXAoJmRjdHgtPmQuaG1hYy5oY3R4KTsKKysJT1BFTlNTTF9j bGVhbnNlKCZkY3R4LT5kLmhtYWMsIHNpemVvZihEUkJHX0hNQUNfQ1RYKSk7CisrCXJldHVybiAx OworKwl9CisrCisraW50IGZpcHNfZHJiZ19obWFjX2luaXQoRFJCR19DVFggKmRjdHgpCisrCXsK KysJY29uc3QgRVZQX01EICptZCA9IE5VTEw7CisrCURSQkdfSE1BQ19DVFggKmhjdHggPSAmZGN0 eC0+ZC5obWFjOworKwlkY3R4LT5zdHJlbmd0aCA9IDI1NjsKKysJc3dpdGNoIChkY3R4LT50eXBl KQorKwkJeworKwkJY2FzZSBOSURfaG1hY1dpdGhTSEExOgorKwkJbWQgPSBFVlBfc2hhMSgpOwor KwkJZGN0eC0+c3RyZW5ndGggPSAxMjg7CisrCQlicmVhazsKKysKKysJCWNhc2UgTklEX2htYWNX aXRoU0hBMjI0OgorKwkJbWQgPSBFVlBfc2hhMjI0KCk7CisrCQlkY3R4LT5zdHJlbmd0aCA9IDE5 MjsKKysJCWJyZWFrOworKworKwkJY2FzZSBOSURfaG1hY1dpdGhTSEEyNTY6CisrCQltZCA9IEVW UF9zaGEyNTYoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSBOSURfaG1hY1dpdGhTSEEzODQ6Cisr CQltZCA9IEVWUF9zaGEzODQoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSBOSURfaG1hY1dpdGhT SEE1MTI6CisrCQltZCA9IEVWUF9zaGE1MTIoKTsKKysJCWJyZWFrOworKworKwkJZGVmYXVsdDoK KysJCWRjdHgtPnN0cmVuZ3RoID0gMDsKKysJCXJldHVybiAtMjsKKysJCX0KKysgICAgICAgIGRj dHgtPmluc3RhbnRpYXRlID0gZHJiZ19obWFjX2luc3RhbnRpYXRlOworKyAgICAgICAgZGN0eC0+ cmVzZWVkID0gZHJiZ19obWFjX3Jlc2VlZDsKKysgICAgICAgIGRjdHgtPmdlbmVyYXRlID0gZHJi Z19obWFjX2dlbmVyYXRlOworKyAgICAgICAgZGN0eC0+dW5pbnN0YW50aWF0ZSA9IGRyYmdfaG1h Y191bmluc3RhbnRpYXRlOworKwlITUFDX0NUWF9pbml0KCZoY3R4LT5oY3R4KTsKKysJaGN0eC0+ bWQgPSBtZDsKKysJZGN0eC0+YmxvY2tsZW5ndGggPSBNX0VWUF9NRF9zaXplKG1kKTsKKysJZGN0 eC0+c2VlZGxlbiA9IE1fRVZQX01EX3NpemUobWQpOworKworKyAgICAgICAgZGN0eC0+bWluX2Vu dHJvcHkgPSBkY3R4LT5zdHJlbmd0aCAvIDg7CisrICAgICAgICBkY3R4LT5tYXhfZW50cm9weSA9 IERSQkdfTUFYX0xFTkdUSDsKKysKKysgICAgICAgIGRjdHgtPm1pbl9ub25jZSA9IGRjdHgtPm1p bl9lbnRyb3B5IC8gMjsKKysgICAgICAgIGRjdHgtPm1heF9ub25jZSA9IERSQkdfTUFYX0xFTkdU SDsKKysKKysgICAgICAgIGRjdHgtPm1heF9wZXJzID0gRFJCR19NQVhfTEVOR1RIOworKyAgICAg ICAgZGN0eC0+bWF4X2FkaW4gPSBEUkJHX01BWF9MRU5HVEg7CisrCisrICAgICAgICBkY3R4LT5t YXhfcmVxdWVzdCA9IDE8PDE2OworKyAgICAgICAgZGN0eC0+cmVzZWVkX2ludGVydmFsID0gMTw8 MjQ7CisrCisrCXJldHVybiAxOworKwl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8v Zmlwcy9maXBzX2RyYmdfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9maXBz X2RyYmdfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGli LmMuZmlwcwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU1OTkyMjQ3MiArMDEwMAorKysrIG9wZW5zc2wt MS4wLjFrL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19saWIuYwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU1 OTkyMjQ3MiArMDEwMAorQEAgLTAsMCArMSw1NzggQEAKKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBo ZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9q ZWN0LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBP cGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRv Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAq ICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3Qg ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wu b3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVu U1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21v dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHBy aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNv bnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK KysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgor KyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3Bl blNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqLworKworKyNpbmNs dWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVk ZSAiZmlwc19sb2NsLmgiCisrI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKKysKKysvKiBTdXBw b3J0IGZyYW1ld29yayBmb3IgU1A4MDAtOTAgRFJCR3MgKi8KKysKKytpbnQgRklQU19kcmJnX2lu aXQoRFJCR19DVFggKmRjdHgsIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCisrCXsKKysJ aW50IHJ2OworKwltZW1zZXQoZGN0eCwgMCwgc2l6ZW9mKERSQkdfQ1RYKSk7CisrCWRjdHgtPnN0 YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQ7CisrCWRjdHgtPnhmbGFncyA9IGZsYWdz OworKwlkY3R4LT50eXBlID0gdHlwZTsKKysKKysJZGN0eC0+aWZsYWdzID0gMDsKKysJZGN0eC0+ ZW50cm9weV9ibG9ja2xlbiA9IDA7CisrCWRjdHgtPmhlYWx0aF9jaGVja19jbnQgPSAwOworKwlk Y3R4LT5oZWFsdGhfY2hlY2tfaW50ZXJ2YWwgPSBEUkJHX0hFQUxUSF9JTlRFUlZBTDsKKysKKysJ cnYgPSBmaXBzX2RyYmdfaGFzaF9pbml0KGRjdHgpOworKworKwlpZiAocnYgPT0gLTIpCisrCQly diA9IGZpcHNfZHJiZ19jdHJfaW5pdChkY3R4KTsKKysJaWYgKHJ2ID09IC0yKQorKwkJcnYgPSBm aXBzX2RyYmdfaG1hY19pbml0KGRjdHgpOworKworKwlpZiAocnYgPD0gMCkKKysJCXsKKysJCWlm IChydiA9PSAtMikKKysJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5JVCwgRklQU19SX1VO U1VQUE9SVEVEX0RSQkdfVFlQRSk7CisrCQllbHNlCisrCQkJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0lOSVQsIEZJUFNfUl9FUlJPUl9JTklUSUFMSVNJTkdfRFJCRyk7CisrCQl9CisrCisrCS8q IElmIG5vdCBpbiB0ZXN0IG1vZGUgcnVuIHNlbGZ0ZXN0cyBvbiBEUkJHIG9mIHRoZSBzYW1lIHR5 cGUgKi8KKysKKysJaWYgKCEoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpKQorKwkJewor KwkJaWYgKCFGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKGRjdHgpKQorKwkJCXsKKysJCQlGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfSU5JVCwgRklQU19SX1NFTEZURVNUX0ZBSUxVUkUpOworKwkJCXJl dHVybiAwOworKwkJCX0KKysJCX0KKysKKysJcmV0dXJuIHJ2OworKwl9CisrCisrRFJCR19DVFgg KkZJUFNfZHJiZ19uZXcoaW50IHR5cGUsIHVuc2lnbmVkIGludCBmbGFncykKKysJeworKwlEUkJH X0NUWCAqZGN0eDsKKysJZGN0eCA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZihEUkJHX0NUWCkpOwor KwlpZiAoIWRjdHgpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfTkVXLCBFUlJf Ul9NQUxMT0NfRkFJTFVSRSk7CisrCQlyZXR1cm4gTlVMTDsKKysJCX0KKysKKysJaWYgKHR5cGUg PT0gMCkKKysJCXsKKysJCW1lbXNldChkY3R4LCAwLCBzaXplb2YoRFJCR19DVFgpKTsKKysJCWRj dHgtPnR5cGUgPSAwOworKwkJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNF RDsKKysJCXJldHVybiBkY3R4OworKwkJfQorKworKwlpZiAoRklQU19kcmJnX2luaXQoZGN0eCwg dHlwZSwgZmxhZ3MpIDw9IDApCisrCQl7CisrCQlPUEVOU1NMX2ZyZWUoZGN0eCk7CisrCQlyZXR1 cm4gTlVMTDsKKysJCX0KKysJCQorKwlyZXR1cm4gZGN0eDsKKysJfQorKworK3ZvaWQgRklQU19k cmJnX2ZyZWUoRFJCR19DVFggKmRjdHgpCisrCXsKKysJaWYgKGRjdHgtPnVuaW5zdGFudGlhdGUp CisrCQlkY3R4LT51bmluc3RhbnRpYXRlKGRjdHgpOworKwkvKiBEb24ndCBmcmVlIHVwIGRlZmF1 bHQgRFJCRyAqLworKwlpZiAoZGN0eCA9PSBGSVBTX2dldF9kZWZhdWx0X2RyYmcoKSkKKysJCXsK KysJCW1lbXNldChkY3R4LCAwLCBzaXplb2YoRFJCR19DVFgpKTsKKysJCWRjdHgtPnR5cGUgPSAw OworKwkJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRDsKKysJCX0KKysJ ZWxzZQorKwkJeworKwkJT1BFTlNTTF9jbGVhbnNlKCZkY3R4LT5kLCBzaXplb2YoZGN0eC0+ZCkp OworKwkJT1BFTlNTTF9mcmVlKGRjdHgpOworKwkJfQorKwl9CisrCisrc3RhdGljIHNpemVfdCBm aXBzX2dldF9lbnRyb3B5KERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysJ CQkJaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbikKKysJeworKwl1 bnNpZ25lZCBjaGFyICp0b3V0LCAqcDsKKysJc2l6ZV90IGJsID0gZGN0eC0+ZW50cm9weV9ibG9j a2xlbiwgcnY7CisrCWlmICghZGN0eC0+Z2V0X2VudHJvcHkpCisrCQlyZXR1cm4gMDsKKysJaWYg KGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUIHx8ICFibCkKKysJCXJldHVybiBkY3R4LT5n ZXRfZW50cm9weShkY3R4LCBwb3V0LCBlbnRyb3B5LCBtaW5fbGVuLCBtYXhfbGVuKTsKKysJcnYg PSBkY3R4LT5nZXRfZW50cm9weShkY3R4LCAmdG91dCwgZW50cm9weSArIGJsLAorKwkJCQltaW5f bGVuICsgYmwsIG1heF9sZW4gKyBibCk7CisrCWlmICh0b3V0ID09IE5VTEwpCisrCQlyZXR1cm4g MDsKKysJKnBvdXQgPSB0b3V0ICsgYmw7CisrCWlmIChydiA8IChtaW5fbGVuICsgYmwpIHx8IChy diAlIGJsKSkKKysJCXJldHVybiAwOworKwkvKiBDb21wYXJlIGNvbnNlY3V0aXZlIGJsb2NrcyBm b3IgY29udGludW91cyBQUk5HIHRlc3QgKi8KKysJZm9yIChwID0gdG91dDsgcCA8IHRvdXQgKyBy diAtIGJsOyBwICs9IGJsKQorKwkJeworKwkJaWYgKCFtZW1jbXAocCwgcCArIGJsLCBibCkpCisr CQkJeworKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfR0VUX0VOVFJPUFksIEZJUFNfUl9FTlRST1BZ X1NPVVJDRV9TVFVDSyk7CisrCQkJcmV0dXJuIDA7CisrCQkJfQorKwkJfQorKwlydiAtPSBibDsK KysJaWYgKHJ2ID4gbWF4X2xlbikKKysJCXJldHVybiBtYXhfbGVuOworKwlyZXR1cm4gcnY7Cisr CX0KKysKKytzdGF0aWMgdm9pZCBmaXBzX2NsZWFudXBfZW50cm9weShEUkJHX0NUWCAqZGN0eCwK KysJCQkJCXVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pCisrCXsKKysJc2l6ZV90IGJs OworKwlpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpCisrCQlibCA9IDA7CisrCWVs c2UKKysJCWJsID0gZGN0eC0+ZW50cm9weV9ibG9ja2xlbjsKKysJLyogQ2FsbCBjbGVhbnVwIHdp dGggb3JpZ2luYWwgYXJndW1lbnRzICovCisrCWRjdHgtPmNsZWFudXBfZW50cm9weShkY3R4LCBv dXQgLSBibCwgb2xlbiArIGJsKTsKKysJfQorKworKworK2ludCBGSVBTX2RyYmdfaW5zdGFudGlh dGUoRFJCR19DVFggKmRjdHgsCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVf dCBwZXJzbGVuKQorKwl7CisrCXNpemVfdCBlbnRsZW4gPSAwLCBub25jZWxlbiA9IDA7CisrCXVu c2lnbmVkIGNoYXIgKm5vbmNlID0gTlVMTCwgKmVudHJvcHkgPSBOVUxMOworKworKyNpZiAwCisr CS8qIFB1dCBoZXJlIHNvIGVycm9yIHNjcmlwdCBwaWNrcyB0aGVtIHVwICovCisrCUZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwKKysJCQkJRklQU19SX1BFUlNPTkFMSVNBVElP Tl9TVFJJTkdfVE9PX0xPTkcpOworKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElB VEUsIEZJUFNfUl9JTl9FUlJPUl9TVEFURSk7CisrCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19J TlNUQU5USUFURSwgRklQU19SX0FMUkVBRFlfSU5TVEFOVElBVEVEKTsKKysJRklQU2VycihGSVBT X0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRST1BZ KTsKKysJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfRVJST1Jf UkVUUklFVklOR19OT05DRSk7CisrCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFU RSwgRklQU19SX0lOU1RBTlRJQVRFX0VSUk9SKTsKKysJRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0lOU1RBTlRJQVRFLCBGSVBTX1JfRFJCR19OT1RfSU5JVElBTElTRUQpOworKyNlbmRpZgorKwor KwlpbnQgciA9IDA7CisrCisrCWlmIChwZXJzbGVuID4gZGN0eC0+bWF4X3BlcnMpCisrCQl7Cisr CQlyID0gRklQU19SX1BFUlNPTkFMSVNBVElPTl9TVFJJTkdfVE9PX0xPTkc7CisrCQlnb3RvIGVu ZDsKKysJCX0KKysKKysJaWYgKCFkY3R4LT5pbnN0YW50aWF0ZSkKKysJCXsKKysJCXIgPSBGSVBT X1JfRFJCR19OT1RfSU5JVElBTElTRUQ7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKGRj dHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKQorKwkJeworKwkJaWYgKGRj dHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19FUlJPUikKKysJCQlyID0gRklQU19SX0lOX0VSUk9S X1NUQVRFOworKwkJZWxzZQorKwkJCXIgPSBGSVBTX1JfQUxSRUFEWV9JTlNUQU5USUFURUQ7Cisr CQlnb3RvIGVuZDsKKysJCX0KKysKKysJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfRVJST1I7 CisrCisrCWVudGxlbiA9IGZpcHNfZ2V0X2VudHJvcHkoZGN0eCwgJmVudHJvcHksIGRjdHgtPnN0 cmVuZ3RoLAorKwkJCQlkY3R4LT5taW5fZW50cm9weSwgZGN0eC0+bWF4X2VudHJvcHkpOworKwor KwlpZiAoZW50bGVuIDwgZGN0eC0+bWluX2VudHJvcHkgfHwgZW50bGVuID4gZGN0eC0+bWF4X2Vu dHJvcHkpCisrCQl7CisrCQlyID0gRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWTsKKysJ CWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoZGN0eC0+bWF4X25vbmNlID4gMCAmJiBkY3R4LT5n ZXRfbm9uY2UpCisrCQl7CisrCQlub25jZWxlbiA9IGRjdHgtPmdldF9ub25jZShkY3R4LCAmbm9u Y2UsCisrCQkJCQlkY3R4LT5zdHJlbmd0aCAvIDIsCisrCQkJCQlkY3R4LT5taW5fbm9uY2UsIGRj dHgtPm1heF9ub25jZSk7CisrCisrCQlpZiAobm9uY2VsZW4gPCBkY3R4LT5taW5fbm9uY2UgfHwg bm9uY2VsZW4gPiBkY3R4LT5tYXhfbm9uY2UpCisrCQkJeworKwkJCXIgPSBGSVBTX1JfRVJST1Jf UkVUUklFVklOR19OT05DRTsKKysJCQlnb3RvIGVuZDsKKysJCQl9CisrCisrCQl9CisrCisrCWlm ICghZGN0eC0+aW5zdGFudGlhdGUoZGN0eCwgCisrCQkJCWVudHJvcHksIGVudGxlbiwKKysJCQkJ bm9uY2UsIG5vbmNlbGVuLAorKwkJCQlwZXJzLCBwZXJzbGVuKSkKKysJCXsKKysJCXIgPSBGSVBT X1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCisr CWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1JFQURZOworKwlpZiAoIShkY3R4LT5pZmxhZ3Mg JiBEUkJHX0NVU1RPTV9SRVNFRUQpKQorKwkJZGN0eC0+cmVzZWVkX2NvdW50ZXIgPSAxOworKwor KwllbmQ6CisrCisrCWlmIChlbnRyb3B5ICYmIGRjdHgtPmNsZWFudXBfZW50cm9weSkKKysJCWZp cHNfY2xlYW51cF9lbnRyb3B5KGRjdHgsIGVudHJvcHksIGVudGxlbik7CisrCisrCWlmIChub25j ZSAmJiBkY3R4LT5jbGVhbnVwX25vbmNlKQorKwkJZGN0eC0+Y2xlYW51cF9ub25jZShkY3R4LCBu b25jZSwgbm9uY2VsZW4pOworKworKwlpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JF QURZKQorKwkJcmV0dXJuIDE7CisrCisrCWlmIChyICYmICEoZGN0eC0+aWZsYWdzICYgRFJCR19G TEFHX05PRVJSKSkKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgcik7 CisrCisrCXJldHVybiAwOworKworKwl9CisrCisrc3RhdGljIGludCBkcmJnX3Jlc2VlZChEUkJH X0NUWCAqZGN0eCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxl biwgaW50IGhjaGVjaykKKysJeworKwl1bnNpZ25lZCBjaGFyICplbnRyb3B5ID0gTlVMTDsKKysJ c2l6ZV90IGVudGxlbiA9IDA7CisrCWludCByID0gMDsKKysKKysjaWYgMAorKwlGSVBTZXJyKEZJ UFNfRl9EUkJHX1JFU0VFRCwgRklQU19SX05PVF9JTlNUQU5USUFURUQpOworKwlGSVBTZXJyKEZJ UFNfRl9EUkJHX1JFU0VFRCwgRklQU19SX0FERElUSU9OQUxfSU5QVVRfVE9PX0xPTkcpOworKyNl bmRpZgorKwlpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1JFQURZCisrCQkmJiBkY3R4 LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfUkVTRUVEKQorKwkJeworKwkJaWYgKGRjdHgtPnN0YXR1 cyA9PSBEUkJHX1NUQVRVU19FUlJPUikKKysJCQlyID0gRklQU19SX0lOX0VSUk9SX1NUQVRFOwor KwkJZWxzZSBpZihkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKKysJ CQlyID0gRklQU19SX05PVF9JTlNUQU5USUFURUQ7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJ aWYgKCFhZGluKQorKwkJYWRpbmxlbiA9IDA7CisrCWVsc2UgaWYgKGFkaW5sZW4gPiBkY3R4LT5t YXhfYWRpbikKKysJCXsKKysJCXIgPSBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9ORzsK KysJCWdvdG8gZW5kOworKwkJfQorKworKwlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19FUlJP UjsKKysJLyogUGVmb3JtIGhlYWx0aCBjaGVjayBvbiBhbGwgcmVzZWVkIG9wZXJhdGlvbnMgaWYg bm90IGEgcHJlZGljdGlvbgorKwkgKiByZXNpc3RhbmNlIHJlcXVlc3QgYW5kIG5vdCBpbiB0ZXN0 IG1vZGUuCisrCSAqLworKwlpZiAoaGNoZWNrICYmICEoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFH X1RFU1QpKQorKwkJeworKwkJaWYgKCFGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKGRjdHgpKQorKwkJ CXsKKysJCQlyID0gRklQU19SX1NFTEZURVNUX0ZBSUxVUkU7CisrCQkJZ290byBlbmQ7CisrCQkJ fQorKwkJfQorKworKwllbnRsZW4gPSBmaXBzX2dldF9lbnRyb3B5KGRjdHgsICZlbnRyb3B5LCBk Y3R4LT5zdHJlbmd0aCwKKysJCQkJZGN0eC0+bWluX2VudHJvcHksIGRjdHgtPm1heF9lbnRyb3B5 KTsKKysKKysJaWYgKGVudGxlbiA8IGRjdHgtPm1pbl9lbnRyb3B5IHx8IGVudGxlbiA+IGRjdHgt Pm1heF9lbnRyb3B5KQorKwkJeworKwkJciA9IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VOVFJP UFk7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFkY3R4LT5yZXNlZWQoZGN0eCwgZW50 cm9weSwgZW50bGVuLCBhZGluLCBhZGlubGVuKSkKKysJCWdvdG8gZW5kOworKworKwlkY3R4LT5z dGF0dXMgPSBEUkJHX1NUQVRVU19SRUFEWTsKKysJaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJCR19D VVNUT01fUkVTRUVEKSkKKysJCWRjdHgtPnJlc2VlZF9jb3VudGVyID0gMTsKKysJZW5kOgorKwor KwlpZiAoZW50cm9weSAmJiBkY3R4LT5jbGVhbnVwX2VudHJvcHkpCisrCQlmaXBzX2NsZWFudXBf ZW50cm9weShkY3R4LCBlbnRyb3B5LCBlbnRsZW4pOworKworKwlpZiAoZGN0eC0+c3RhdHVzID09 IERSQkdfU1RBVFVTX1JFQURZKQorKwkJcmV0dXJuIDE7CisrCisrCWlmIChyICYmICEoZGN0eC0+ aWZsYWdzICYgRFJCR19GTEFHX05PRVJSKSkKKysJCUZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVE LCByKTsKKysKKysJcmV0dXJuIDA7CisrCX0KKysKKytpbnQgRklQU19kcmJnX3Jlc2VlZChEUkJH X0NUWCAqZGN0eCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxl bikKKysJeworKwlyZXR1cm4gZHJiZ19yZXNlZWQoZGN0eCwgYWRpbiwgYWRpbmxlbiwgMSk7Cisr CX0KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19jaGVjayhEUkJHX0NUWCAqZGN0eCkKKysJewor KwlpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpCisrCQlyZXR1cm4gMTsKKysJZGN0 eC0+aGVhbHRoX2NoZWNrX2NudCsrOworKwlpZiAoZGN0eC0+aGVhbHRoX2NoZWNrX2NudCA+PSBk Y3R4LT5oZWFsdGhfY2hlY2tfaW50ZXJ2YWwpCisrCQl7CisrCQlpZiAoIUZJUFNfZHJiZ19oZWFs dGhfY2hlY2soZGN0eCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19DSEVD SywgRklQU19SX1NFTEZURVNUX0ZBSUxVUkUpOworKwkJCXJldHVybiAwOworKwkJCX0KKysJCX0K KysJcmV0dXJuIDE7CisrCX0KKysKKytpbnQgRklQU19kcmJnX2dlbmVyYXRlKERSQkdfQ1RYICpk Y3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCisrCQkJaW50IHByZWRpY3Rp b25fcmVzaXN0YW5jZSwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRp bmxlbikKKysJeworKwlpbnQgciA9IDA7CisrCisrCWlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgp KQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0dFTkVSQVRFLCBGSVBTX1JfU0VM RlRFU1RfRkFJTEVEKTsKKysJCXJldHVybiAwOworKwkJfQorKworKwlpZiAoIWZpcHNfZHJiZ19j aGVjayhkY3R4KSkKKysJCXJldHVybiAwOworKworKwlpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdf U1RBVFVTX1JFQURZCisrCQkmJiBkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfUkVTRUVEKQor KwkJeworKwkJaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19FUlJPUikKKysJCQlyID0g RklQU19SX0lOX0VSUk9SX1NUQVRFOworKwkJZWxzZSBpZihkY3R4LT5zdGF0dXMgPT0gRFJCR19T VEFUVVNfVU5JTklUSUFMSVNFRCkKKysJCQlyID0gRklQU19SX05PVF9JTlNUQU5USUFURUQ7Cisr CQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKG91dGxlbiA+IGRjdHgtPm1heF9yZXF1ZXN0KQor KwkJeworKwkJciA9IEZJUFNfUl9SRVFVRVNUX1RPT19MQVJHRV9GT1JfRFJCRzsKKysJCXJldHVy biAwOworKwkJfQorKworKwlpZiAoYWRpbmxlbiA+IGRjdHgtPm1heF9hZGluKQorKwkJeworKwkJ ciA9IEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX1RPT19MT05HOworKwkJZ290byBlbmQ7CisrCQl9 CisrCisrCWlmIChkY3R4LT5pZmxhZ3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQpCisrCQlkY3R4LT5n ZW5lcmF0ZShkY3R4LCBOVUxMLCBvdXRsZW4sIE5VTEwsIDApOworKwllbHNlIGlmIChkY3R4LT5y ZXNlZWRfY291bnRlciA+PSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWwpCisrCQlkY3R4LT5zdGF0dXMg PSBEUkJHX1NUQVRVU19SRVNFRUQ7CisrCisrCWlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFU VVNfUkVTRUVEIHx8IHByZWRpY3Rpb25fcmVzaXN0YW5jZSkKKysJCXsKKysJCS8qIElmIHByZWRp Y3Rpb24gcmVzaXN0YW5jZSByZXF1ZXN0IGRvbid0IGRvIGhlYWx0aCBjaGVjayAqLworKwkJaW50 IGhjaGVjayA9IHByZWRpY3Rpb25fcmVzaXN0YW5jZSA/IDAgOiAxOworKwkJCisrCQlpZiAoIWRy YmdfcmVzZWVkKGRjdHgsIGFkaW4sIGFkaW5sZW4sIGhjaGVjaykpCisrCQkJeworKwkJCXIgPSBG SVBTX1JfUkVTRUVEX0VSUk9SOworKwkJCWdvdG8gZW5kOworKwkJCX0KKysJCWFkaW4gPSBOVUxM OworKwkJYWRpbmxlbiA9IDA7CisrCQl9CisrCisrCWlmICghZGN0eC0+Z2VuZXJhdGUoZGN0eCwg b3V0LCBvdXRsZW4sIGFkaW4sIGFkaW5sZW4pKQorKwkJeworKwkJciA9IEZJUFNfUl9HRU5FUkFU RV9FUlJPUjsKKysJCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX0VSUk9SOworKwkJZ290byBl bmQ7CisrCQl9CisrCWlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfQ1VTVE9NX1JFU0VFRCkpCisr CQl7CisrCQlpZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj0gZGN0eC0+cmVzZWVkX2ludGVydmFs KQorKwkJCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1JFU0VFRDsKKysJCWVsc2UKKysJCQlk Y3R4LT5yZXNlZWRfY291bnRlcisrOworKwkJfQorKworKwllbmQ6CisrCWlmIChyKQorKwkJewor KwkJaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJCR19GTEFHX05PRVJSKSkKKysJCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfR0VORVJBVEUsIHIpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCisrCXJl dHVybiAxOworKwl9CisrCisraW50IEZJUFNfZHJiZ191bmluc3RhbnRpYXRlKERSQkdfQ1RYICpk Y3R4KQorKwl7CisrCWludCBydjsKKysJaWYgKCFkY3R4LT51bmluc3RhbnRpYXRlKQorKwkJcnYg PSAxOworKwllbHNlCisrCQlydiA9IGRjdHgtPnVuaW5zdGFudGlhdGUoZGN0eCk7CisrCS8qIEFs dGhvdWdoIHdlJ2QgbGlrZSB0byBjbGVhbnNlIGhlcmUgd2UgY2FuJ3QgYmVjYXVzZSB3ZSBoYXZl IHRvCisrCSAqIHRlc3QgdGhlIHVuaW5zdGFudGlhdGUgcmVhbGx5IHplcm9lcyB0aGUgZGF0YS4K KysJICovCisrCW1lbXNldCgmZGN0eC0+ZCwgMCwgc2l6ZW9mKGRjdHgtPmQpKTsKKysJZGN0eC0+ c3RhdHVzID0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRDsKKysJLyogSWYgbWV0aG9kIGhhcyBw cm9ibGVtcyB1bmluc3RhbnRpYXRpbmcsIHJldHVybiBlcnJvciAqLworKwlyZXR1cm4gcnY7Cisr CX0KKysKKytpbnQgRklQU19kcmJnX3NldF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgsCisrCXNp emVfdCAoKmdldF9lbnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwK KysJCQkJaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbiksCisrCXZv aWQgKCpjbGVhbnVwX2VudHJvcHkpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwg c2l6ZV90IG9sZW4pLAorKwlzaXplX3QgZW50cm9weV9ibG9ja2xlbiwKKysJc2l6ZV90ICgqZ2V0 X25vbmNlKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysJCQkJaW50IGVu dHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbiksCisrCXZvaWQgKCpjbGVhbnVw X25vbmNlKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKSkK KysJeworKwlpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQpCisr CQlyZXR1cm4gMDsKKysJZGN0eC0+ZW50cm9weV9ibG9ja2xlbiA9IGVudHJvcHlfYmxvY2tsZW47 CisrCWRjdHgtPmdldF9lbnRyb3B5ID0gZ2V0X2VudHJvcHk7CisrCWRjdHgtPmNsZWFudXBfZW50 cm9weSA9IGNsZWFudXBfZW50cm9weTsKKysJZGN0eC0+Z2V0X25vbmNlID0gZ2V0X25vbmNlOwor KwlkY3R4LT5jbGVhbnVwX25vbmNlID0gY2xlYW51cF9ub25jZTsKKysJcmV0dXJuIDE7CisrCX0K KysKKytpbnQgRklQU19kcmJnX3NldF9yYW5kX2NhbGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwKKysJ c2l6ZV90ICgqZ2V0X2FkaW4pKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0KSwK KysJdm9pZCAoKmNsZWFudXBfYWRpbikoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0 LCBzaXplX3Qgb2xlbiksCisrCWludCAoKnJhbmRfc2VlZF9jYikoRFJCR19DVFggKmN0eCwgY29u c3Qgdm9pZCAqYnVmLCBpbnQgbnVtKSwKKysJaW50ICgqcmFuZF9hZGRfY2IpKERSQkdfQ1RYICpj dHgsCisrCQkJCWNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSwgZG91YmxlIGVudHJvcHkpKQorKwl7 CisrCWlmIChkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKKysJCXJl dHVybiAwOworKwlkY3R4LT5nZXRfYWRpbiA9IGdldF9hZGluOworKwlkY3R4LT5jbGVhbnVwX2Fk aW4gPSBjbGVhbnVwX2FkaW47CisrCWRjdHgtPnJhbmRfc2VlZF9jYiA9IHJhbmRfc2VlZF9jYjsK KysJZGN0eC0+cmFuZF9hZGRfY2IgPSByYW5kX2FkZF9jYjsKKysJcmV0dXJuIDE7CisrCX0KKysK Kyt2b2lkICpGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKERSQkdfQ1RYICpkY3R4KQorKwl7CisrCXJl dHVybiBkY3R4LT5hcHBfZGF0YTsKKysJfQorKworK3ZvaWQgRklQU19kcmJnX3NldF9hcHBfZGF0 YShEUkJHX0NUWCAqZGN0eCwgdm9pZCAqYXBwX2RhdGEpCisrCXsKKysJZGN0eC0+YXBwX2RhdGEg PSBhcHBfZGF0YTsKKysJfQorKworK3NpemVfdCBGSVBTX2RyYmdfZ2V0X2Jsb2NrbGVuZ3RoKERS QkdfQ1RYICpkY3R4KQorKwl7CisrCXJldHVybiBkY3R4LT5ibG9ja2xlbmd0aDsKKysJfQorKwor K2ludCBGSVBTX2RyYmdfZ2V0X3N0cmVuZ3RoKERSQkdfQ1RYICpkY3R4KQorKwl7CisrCXJldHVy biBkY3R4LT5zdHJlbmd0aDsKKysJfQorKworK3ZvaWQgRklQU19kcmJnX3NldF9jaGVja19pbnRl cnZhbChEUkJHX0NUWCAqZGN0eCwgaW50IGludGVydmFsKQorKwl7CisrCWRjdHgtPmhlYWx0aF9j aGVja19pbnRlcnZhbCA9IGludGVydmFsOworKwl9CisrCisrdm9pZCBGSVBTX2RyYmdfc2V0X3Jl c2VlZF9pbnRlcnZhbChEUkJHX0NUWCAqZGN0eCwgaW50IGludGVydmFsKQorKwl7CisrCWRjdHgt PnJlc2VlZF9pbnRlcnZhbCA9IGludGVydmFsOworKwl9CisrCisrc3RhdGljIGludCBkcmJnX3N0 aWNrID0gMDsKKysKKyt2b2lkIEZJUFNfZHJiZ19zdGljayhpbnQgb25vZmYpCisrCXsKKysJZHJi Z19zdGljayA9IG9ub2ZmOworKwl9CisrCisrLyogQ29udGludW91cyBEUkJHIHV0aWxpdHkgZnVu Y3Rpb24gKi8KKytpbnQgZmlwc19kcmJnX2Nwcm5nX3Rlc3QoRFJCR19DVFggKmRjdHgsIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKm91dCkKKysJeworKwkvKiBObyBDUFJORyBpbiB0ZXN0IG1vZGUgKi8K KysJaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKQorKwkJcmV0dXJuIDE7CisrCS8q IENoZWNrIGJsb2NrIGlzIHZhbGlkOiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisrCWlmIChkY3R4 LT5sYl92YWxpZCA9PSAwKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0NQUk5H X1RFU1QsIEZJUFNfUl9JTlRFUk5BTF9FUlJPUik7CisrCQlmaXBzX3NldF9zZWxmdGVzdF9mYWls KCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKGRyYmdfc3RpY2spCisrCQltZW1jcHkoZGN0 eC0+bGIsIG91dCwgZGN0eC0+YmxvY2tsZW5ndGgpOworKwkvKiBDaGVjayBhZ2FpbnN0IGxhc3Qg YmxvY2s6IGZhaWwgaWYgbWF0Y2ggKi8KKysJaWYgKCFtZW1jbXAoZGN0eC0+bGIsIG91dCwgZGN0 eC0+YmxvY2tsZW5ndGgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0NQUk5H X1RFU1QsIEZJUFNfUl9EUkJHX1NUVUNLKTsKKysJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsK KysJCXJldHVybiAwOworKwkJfQorKwkvKiBTYXZlIGxhc3QgYmxvY2sgZm9yIG5leHQgY29tcGFy aXNvbiAqLworKwltZW1jcHkoZGN0eC0+bGIsIG91dCwgZGN0eC0+YmxvY2tsZW5ndGgpOworKwly ZXR1cm4gMTsKKysJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvZmlwc19k cmJnX3JhbmQuYy5maXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5k LmMKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9maXBzX2RyYmdfcmFuZC5jLmZpcHMJ MjAxNS0wMS0wOSAwOTo1MTo1MS41NTk5MjI0NzIgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9j cnlwdG8vZmlwcy9maXBzX2RyYmdfcmFuZC5jCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTU5OTIyNDcy ICswMTAwCitAQCAtMCwwICsxLDE3MiBAQAorKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdfcmFuZC5j ICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9y ZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdC4KKysgKi8KKysvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor KyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6 CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5T U0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg bWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBw ZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Np b24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBv ZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBh Y2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBB TlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMg Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAq IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRl ICJmaXBzX3JhbmRfbGNsLmgiCisrCisrLyogTWFwcGluZyBvZiBTUDgwMC05MCBEUkJHcyB0byBP cGVuU1NMIFJBTkRfTUVUSE9EICovCisrCisrLyogU2luY2Ugd2Ugb25seSBoYXZlIG9uZSBnbG9i YWwgUFJORyB1c2VkIGF0IGFueSB0aW1lIGluIE9wZW5TU0wgdXNlIGEgZ2xvYmFsCisrICogdmFy aWFibGUgdG8gc3RvcmUgY29udGV4dC4KKysgKi8KKysKKytzdGF0aWMgRFJCR19DVFggb3NzbF9k Y3R4OworKworK0RSQkdfQ1RYICpGSVBTX2dldF9kZWZhdWx0X2RyYmcodm9pZCkKKysJeworKwly ZXR1cm4gJm9zc2xfZGN0eDsKKysJfQorKworK3N0YXRpYyBpbnQgZmlwc19kcmJnX2J5dGVzKHVu c2lnbmVkIGNoYXIgKm91dCwgaW50IGNvdW50KQorKwl7CisrCURSQkdfQ1RYICpkY3R4ID0gJm9z c2xfZGN0eDsKKysJaW50IHJ2ID0gMDsKKysJdW5zaWduZWQgY2hhciAqYWRpbiA9IE5VTEw7Cisr CXNpemVfdCBhZGlubGVuID0gMDsKKysJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsK KysJZG8gCisrCQl7CisrCQlzaXplX3QgcmNudDsKKysJCWlmIChjb3VudCA+IChpbnQpZGN0eC0+ bWF4X3JlcXVlc3QpCisrCQkJcmNudCA9IGRjdHgtPm1heF9yZXF1ZXN0OworKwkJZWxzZQorKwkJ CXJjbnQgPSBjb3VudDsKKysJCWlmIChkY3R4LT5nZXRfYWRpbikKKysJCQl7CisrCQkJYWRpbmxl biA9IGRjdHgtPmdldF9hZGluKGRjdHgsICZhZGluKTsKKysJCQlpZiAoYWRpbmxlbiAmJiAhYWRp bikKKysJCQkJeworKwkJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfQllURVMsIEZJUFNfUl9F UlJPUl9SRVRSSUVWSU5HX0FERElUSU9OQUxfSU5QVVQpOworKwkJCQlnb3RvIGVycjsKKysJCQkJ fQorKwkJCX0KKysJCXJ2ID0gRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIG91dCwgcmNudCwgMCwg YWRpbiwgYWRpbmxlbik7CisrCQlpZiAoYWRpbikKKysJCQl7CisrCQkJaWYgKGRjdHgtPmNsZWFu dXBfYWRpbikKKysJCQkJZGN0eC0+Y2xlYW51cF9hZGluKGRjdHgsIGFkaW4sIGFkaW5sZW4pOwor KwkJCWFkaW4gPSBOVUxMOworKwkJCX0KKysJCWlmICghcnYpCisrCQkJZ290byBlcnI7CisrCQlv dXQgKz0gcmNudDsKKysJCWNvdW50IC09IHJjbnQ7CisrCQl9CisrCXdoaWxlIChjb3VudCk7Cisr CXJ2ID0gMTsKKysJZXJyOgorKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Cisr CXJldHVybiBydjsKKysJfQorKworK3N0YXRpYyBpbnQgZmlwc19kcmJnX3BzZXVkbyh1bnNpZ25l ZCBjaGFyICpvdXQsIGludCBjb3VudCkKKysJeworKwlpZiAoZmlwc19kcmJnX2J5dGVzKG91dCwg Y291bnQpIDw9IDApCisrCQlyZXR1cm4gLTE7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGlj IGludCBmaXBzX2RyYmdfc3RhdHVzKHZvaWQpCisrCXsKKysJRFJCR19DVFggKmRjdHggPSAmb3Nz bF9kY3R4OworKwlpbnQgcnY7CisrCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Cisr CXJ2ID0gZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFQURZID8gMSA6IDA7CisrCUNSWVBU T19yX3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0dXJuIHJ2OworKwl9CisrCisrc3Rh dGljIHZvaWQgZmlwc19kcmJnX2NsZWFudXAodm9pZCkKKysJeworKwlEUkJHX0NUWCAqZGN0eCA9 ICZvc3NsX2RjdHg7CisrCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCUZJUFNf ZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpOworKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tf UkFORCk7CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19zZWVkKGNvbnN0IHZvaWQgKnNl ZWQsIGludCBzZWVkbGVuKQorKwl7CisrCURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKKysJ aWYgKGRjdHgtPnJhbmRfc2VlZF9jYikKKysJCXJldHVybiBkY3R4LT5yYW5kX3NlZWRfY2IoZGN0 eCwgc2VlZCwgc2VlZGxlbik7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGludCBmaXBz X2RyYmdfYWRkKGNvbnN0IHZvaWQgKnNlZWQsIGludCBzZWVkbGVuLAorKwkJCQkJZG91YmxlIGFk ZF9lbnRyb3B5KQorKwl7CisrCURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKKysJaWYgKGRj dHgtPnJhbmRfYWRkX2NiKQorKwkJcmV0dXJuIGRjdHgtPnJhbmRfYWRkX2NiKGRjdHgsIHNlZWQs IHNlZWRsZW4sIGFkZF9lbnRyb3B5KTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgY29u c3QgUkFORF9NRVRIT0QgcmFuZF9kcmJnX21ldGggPQorKwl7CisrCWZpcHNfZHJiZ19zZWVkLAor KwlmaXBzX2RyYmdfYnl0ZXMsCisrCWZpcHNfZHJiZ19jbGVhbnVwLAorKwlmaXBzX2RyYmdfYWRk LAorKwlmaXBzX2RyYmdfcHNldWRvLAorKwlmaXBzX2RyYmdfc3RhdHVzCisrCX07CisrCisrY29u c3QgUkFORF9NRVRIT0QgKkZJUFNfZHJiZ19tZXRob2Qodm9pZCkKKysJeworKwlyZXR1cm4gJnJh bmRfZHJiZ19tZXRoOworKwl9CisrCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlw cy9maXBzX2RyYmdfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2Zp cHNfZHJiZ19zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvZmlwc19k cmJnX3NlbGZ0ZXN0LmMuZmlwcwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU2MDkyMjQ5NSArMDEwMAor KysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5jCTIwMTUt MDEtMDkgMDk6NTE6NTEuNTYwOTIyNDk1ICswMTAwCitAQCAtMCwwICsxLDg2MiBAQAorKy8qIGZp cHMvcmFuZC9maXBzX2RyYmdfc2VsZnRlc3QuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhl biBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2pl Y3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9w 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 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisrI2luY2x1 ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRl ICJmaXBzX3JhbmRfbGNsLmgiCisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKworKyNpbmNsdWRl ICJmaXBzX2RyYmdfc2VsZnRlc3QuaCIKKysKKyt0eXBlZGVmIHN0cnVjdCB7CisrCWludCBwb3N0 OworKwlpbnQgbmlkOworKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisrCisrCS8qIEtBVCBkYXRhIGZv ciBubyBQUiAqLworKwljb25zdCB1bnNpZ25lZCBjaGFyICplbnQ7CisrCXNpemVfdCBlbnRsZW47 CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlOworKwlzaXplX3Qgbm9uY2VsZW47CisrCWNv bnN0IHVuc2lnbmVkIGNoYXIgKnBlcnM7CisrCXNpemVfdCBwZXJzbGVuOworKwljb25zdCB1bnNp Z25lZCBjaGFyICphZGluOworKwlzaXplX3QgYWRpbmxlbjsKKysJY29uc3QgdW5zaWduZWQgY2hh ciAqZW50cmVzZWVkOworKwlzaXplX3QgZW50cmVzZWVkbGVuOworKwljb25zdCB1bnNpZ25lZCBj aGFyICphZGlucmVzZWVkOworKwlzaXplX3QgYWRpbnJlc2VlZGxlbjsKKysJY29uc3QgdW5zaWdu ZWQgY2hhciAqYWRpbjI7CisrCXNpemVfdCBhZGluMmxlbjsKKysJY29uc3QgdW5zaWduZWQgY2hh ciAqa2F0OworKwlzaXplX3Qga2F0bGVuOworKwljb25zdCB1bnNpZ25lZCBjaGFyICprYXQyOwor KwlzaXplX3Qga2F0MmxlbjsKKysKKysJLyogS0FUIGRhdGEgZm9yIFBSICovCisrCWNvbnN0IHVu c2lnbmVkIGNoYXIgKmVudF9wcjsKKysJc2l6ZV90IGVudGxlbl9wcjsKKysJY29uc3QgdW5zaWdu ZWQgY2hhciAqbm9uY2VfcHI7CisrCXNpemVfdCBub25jZWxlbl9wcjsKKysJY29uc3QgdW5zaWdu ZWQgY2hhciAqcGVyc19wcjsKKysJc2l6ZV90IHBlcnNsZW5fcHI7CisrCWNvbnN0IHVuc2lnbmVk IGNoYXIgKmFkaW5fcHI7CisrCXNpemVfdCBhZGlubGVuX3ByOworKwljb25zdCB1bnNpZ25lZCBj aGFyICplbnRwcl9wcjsKKysJc2l6ZV90IGVudHBybGVuX3ByOworKwljb25zdCB1bnNpZ25lZCBj aGFyICphZGluZ19wcjsKKysJc2l6ZV90IGFkaW5nbGVuX3ByOworKwljb25zdCB1bnNpZ25lZCBj aGFyICplbnRnX3ByOworKwlzaXplX3QgZW50Z2xlbl9wcjsKKysJY29uc3QgdW5zaWduZWQgY2hh ciAqa2F0X3ByOworKwlzaXplX3Qga2F0bGVuX3ByOworKwljb25zdCB1bnNpZ25lZCBjaGFyICpr YXQyX3ByOworKwlzaXplX3Qga2F0Mmxlbl9wcjsKKysKKysJfSBEUkJHX1NFTEZURVNUX0RBVEE7 CisrCisrI2RlZmluZSBtYWtlX2RyYmdfdGVzdF9kYXRhKG5pZCwgZmxhZywgcHIsIHApIHtwLCBu aWQsIGZsYWcgfCBEUkJHX0ZMQUdfVEVTVCwgXAorKwlwciMjX2VudHJvcHlpbnB1dCwgc2l6ZW9m KHByIyNfZW50cm9weWlucHV0KSwgXAorKwlwciMjX25vbmNlLCBzaXplb2YocHIjI19ub25jZSks IFwKKysJcHIjI19wZXJzb25hbGl6YXRpb25zdHJpbmcsIHNpemVvZihwciMjX3BlcnNvbmFsaXph dGlvbnN0cmluZyksIFwKKysJcHIjI19hZGRpdGlvbmFsaW5wdXQsIHNpemVvZihwciMjX2FkZGl0 aW9uYWxpbnB1dCksIFwKKysJcHIjI19lbnRyb3B5aW5wdXRyZXNlZWQsIHNpemVvZihwciMjX2Vu dHJvcHlpbnB1dHJlc2VlZCksIFwKKysJcHIjI19hZGRpdGlvbmFsaW5wdXRyZXNlZWQsIHNpemVv ZihwciMjX2FkZGl0aW9uYWxpbnB1dHJlc2VlZCksIFwKKysJcHIjI19hZGRpdGlvbmFsaW5wdXQy LCBzaXplb2YocHIjI19hZGRpdGlvbmFsaW5wdXQyKSwgXAorKwlwciMjX2ludF9yZXR1cm5lZGJp dHMsIHNpemVvZihwciMjX2ludF9yZXR1cm5lZGJpdHMpLCBcCisrCXByIyNfcmV0dXJuZWRiaXRz LCBzaXplb2YocHIjI19yZXR1cm5lZGJpdHMpLCBcCisrCXByIyNfcHJfZW50cm9weWlucHV0LCBz aXplb2YocHIjI19wcl9lbnRyb3B5aW5wdXQpLCBcCisrCXByIyNfcHJfbm9uY2UsIHNpemVvZihw ciMjX3ByX25vbmNlKSwgXAorKwlwciMjX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZywgc2l6ZW9m KHByIyNfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nKSwgXAorKwlwciMjX3ByX2FkZGl0aW9uYWxp bnB1dCwgc2l6ZW9mKHByIyNfcHJfYWRkaXRpb25hbGlucHV0KSwgXAorKwlwciMjX3ByX2VudHJv cHlpbnB1dHByLCBzaXplb2YocHIjI19wcl9lbnRyb3B5aW5wdXRwciksIFwKKysJcHIjI19wcl9h ZGRpdGlvbmFsaW5wdXQyLCBzaXplb2YocHIjI19wcl9hZGRpdGlvbmFsaW5wdXQyKSwgXAorKwlw ciMjX3ByX2VudHJvcHlpbnB1dHByMiwgc2l6ZW9mKHByIyNfcHJfZW50cm9weWlucHV0cHIyKSwg XAorKwlwciMjX3ByX2ludF9yZXR1cm5lZGJpdHMsIHNpemVvZihwciMjX3ByX2ludF9yZXR1cm5l ZGJpdHMpLCBcCisrCXByIyNfcHJfcmV0dXJuZWRiaXRzLCBzaXplb2YocHIjI19wcl9yZXR1cm5l ZGJpdHMpLCBcCisrCX0KKysKKysjZGVmaW5lIG1ha2VfZHJiZ190ZXN0X2RhdGFfZGYobmlkLCBw ciwgcCkgXAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKG5pZCwgRFJCR19GTEFHX0NUUl9VU0VfREYs IHByLCBwKQorKworKyNkZWZpbmUgbWFrZV9kcmJnX3Rlc3RfZGF0YV9lYyhjdXJ2ZSwgbWQsIHBy LCBwKSBcCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEoKGN1cnZlIDw8IDE2KSB8IG1kICwgMCwgcHIs IHApCisrCisrc3RhdGljIERSQkdfU0VMRlRFU1RfREFUQSBkcmJnX3Rlc3RbXSA9IHsKKysJbWFr ZV9kcmJnX3Rlc3RfZGF0YV9kZihOSURfYWVzXzEyOF9jdHIsIGFlc18xMjhfdXNlX2RmLCAwKSwK KysJbWFrZV9kcmJnX3Rlc3RfZGF0YV9kZihOSURfYWVzXzE5Ml9jdHIsIGFlc18xOTJfdXNlX2Rm LCAwKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YV9kZihOSURfYWVzXzI1Nl9jdHIsIGFlc18yNTZf dXNlX2RmLCAxKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfYWVzXzEyOF9jdHIsIDAsIGFl c18xMjhfbm9fZGYsIDApLAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9hZXNfMTkyX2N0ciwg MCwgYWVzXzE5Ml9ub19kZiwgMCksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2Flc18yNTZf Y3RyLCAwLCBhZXNfMjU2X25vX2RmLCAxKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hh MSwgMCwgc2hhMSwgMCksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTIyNCwgMCwgc2hh MjI0LCAwKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hhMjU2LCAwLCBzaGEyNTYsIDEp LAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGEzODQsIDAsIHNoYTM4NCwgMCksCisrCW1h a2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTUxMiwgMCwgc2hhNTEyLCAwKSwKKysJbWFrZV9kcmJn X3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEExLCAwLCBobWFjX3NoYTEsIDApLAorKwltYWtlX2Ry YmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNIQTIyNCwgMCwgaG1hY19zaGEyMjQsIDApLAorKwlt YWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNIQTI1NiwgMCwgaG1hY19zaGEyNTYsIDEp LAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNIQTM4NCwgMCwgaG1hY19zaGEz ODQsIDApLAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNIQTUxMiwgMCwgaG1h Y19zaGE1MTIsIDApLAorKwl7MCwwLDB9CisrCX07CisrCisrdHlwZWRlZiBzdHJ1Y3QgCisrCXsK KysJY29uc3QgdW5zaWduZWQgY2hhciAqZW50OworKwlzaXplX3QgZW50bGVuOworKwlpbnQgZW50 Y250OworKwljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZTsKKysJc2l6ZV90IG5vbmNlbGVuOwor KwlpbnQgbm9uY2VjbnQ7CisrCX0gVEVTVF9FTlQ7CisrCisrc3RhdGljIHNpemVfdCB0ZXN0X2Vu dHJvcHkoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3Qg bWF4X2xlbikKKysJeworKwlURVNUX0VOVCAqdCA9IEZJUFNfZHJiZ19nZXRfYXBwX2RhdGEoZGN0 eCk7CisrCSpwb3V0ID0gKHVuc2lnbmVkIGNoYXIgKil0LT5lbnQ7CisrCXQtPmVudGNudCsrOwor KwlyZXR1cm4gdC0+ZW50bGVuOworKwl9CisrCisrc3RhdGljIHNpemVfdCB0ZXN0X25vbmNlKERS QkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4p CisrCXsKKysJVEVTVF9FTlQgKnQgPSBGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKGRjdHgpOworKwkq cG91dCA9ICh1bnNpZ25lZCBjaGFyICopdC0+bm9uY2U7CisrCXQtPm5vbmNlY250Kys7CisrCXJl dHVybiB0LT5ub25jZWxlbjsKKysJfQorKworK3N0YXRpYyBpbnQgZmlwc19kcmJnX3NpbmdsZV9r YXQoRFJCR19DVFggKmRjdHgsIERSQkdfU0VMRlRFU1RfREFUQSAqdGQsCisrCQkJCQkJCQlpbnQg cXVpY2spCisrCXsKKysJVEVTVF9FTlQgdDsKKysJaW50IHJ2ID0gMDsKKysJc2l6ZV90IGFkaW5s ZW47CisrCXVuc2lnbmVkIGNoYXIgcmFuZG91dFsxMDI0XTsKKysKKysJLyogSW5pdGlhbCB0ZXN0 IHdpdGhvdXQgUFIgKi8KKysKKysJLyogSW5zdGFudGlhdGUgRFJCRyB3aXRoIHRlc3QgZW50cm9w eSwgbm9uY2UgYW5kIHBlcnNvbmFsaXNhdGlvbgorKwkgKiBzdHJpbmcuCisrCSAqLworKworKwlp ZiAoIUZJUFNfZHJiZ19pbml0KGRjdHgsIHRkLT5uaWQsIHRkLT5mbGFncykpCisrCQlyZXR1cm4g MDsKKysJaWYgKCFGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhkY3R4LCB0ZXN0X2VudHJvcHksIDAs IDAsIHRlc3Rfbm9uY2UsIDApKQorKwkJcmV0dXJuIDA7CisrCisrCUZJUFNfZHJiZ19zZXRfYXBw X2RhdGEoZGN0eCwgJnQpOworKworKwl0LmVudCA9IHRkLT5lbnQ7CisrCXQuZW50bGVuID0gdGQt PmVudGxlbjsKKysJdC5ub25jZSA9IHRkLT5ub25jZTsKKysJdC5ub25jZWxlbiA9IHRkLT5ub25j ZWxlbjsKKysJdC5lbnRjbnQgPSAwOworKwl0Lm5vbmNlY250ID0gMDsKKysKKysJaWYgKCFGSVBT X2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSkKKysJCWdvdG8g ZXJyOworKworKwkvKiBOb3RlIGZvciBDVFIgd2l0aG91dCBERiBzb21lIGFkZGl0aW9uYWwgaW5w dXQgdmFsdWVzCisrCSAqIGlnbm9yZSBieXRlcyBhZnRlciB0aGUga2V5bGVuZ3RoOiBzbyByZWR1 Y2UgYWRpbmxlbgorKwkgKiB0byBoYWxmIHRvIGVuc3VyZSBpbnZhbGlkIGRhdGEgaXMgZmVkIGlu LgorKwkgKi8KKysJaWYgKCFmaXBzX3Bvc3RfY29ycnVwdChGSVBTX1RFU1RfRFJCRywgZGN0eC0+ dHlwZSwgJmRjdHgtPmlmbGFncykpCisrCQlhZGlubGVuID0gdGQtPmFkaW5sZW4gLyAyOworKwll bHNlCisrCQlhZGlubGVuID0gdGQtPmFkaW5sZW47CisrCisrCS8qIEdlbmVyYXRlIHdpdGggbm8g UFIgYW5kIHZlcmlmeSBvdXRwdXQgbWF0Y2hlcyBleHBlY3RlZCBkYXRhICovCisrCWlmICghRklQ U19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCisrCQkJCXRkLT5h ZGluLCBhZGlubGVuKSkKKysJCWdvdG8gZXJyOworKworKwlpZiAobWVtY21wKHJhbmRvdXQsIHRk LT5rYXQsIHRkLT5rYXRsZW4pKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX1NJ TkdMRV9LQVQsIEZJUFNfUl9OT1BSX1RFU1QxX0ZBSUxVUkUpOworKwkJZ290byBlcnIyOworKwkJ fQorKwkvKiBJZiBhYmJyZXZpYXRlZCBQT1NUIGVuZCBvZiB0ZXN0ICovCisrCWlmIChxdWljaykK KysJCXsKKysJCXJ2ID0gMTsKKysJCWdvdG8gZXJyOworKwkJfQorKwkvKiBSZXNlZWQgRFJCRyB3 aXRoIHRlc3QgZW50cm9weSBhbmQgYWRkaXRpb25hbCBpbnB1dCAqLworKwl0LmVudCA9IHRkLT5l bnRyZXNlZWQ7CisrCXQuZW50bGVuID0gdGQtPmVudHJlc2VlZGxlbjsKKysKKysJaWYgKCFGSVBT X2RyYmdfcmVzZWVkKGRjdHgsIHRkLT5hZGlucmVzZWVkLCB0ZC0+YWRpbnJlc2VlZGxlbikpCisr CQlnb3RvIGVycjsKKysKKysJLyogR2VuZXJhdGUgd2l0aCBubyBQUiBhbmQgdmVyaWZ5IG91dHB1 dCBtYXRjaGVzIGV4cGVjdGVkIGRhdGEgKi8KKysJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0 eCwgcmFuZG91dCwgdGQtPmthdDJsZW4sIDAsCisrCQkJCXRkLT5hZGluMiwgdGQtPmFkaW4ybGVu KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAobWVtY21wKHJhbmRvdXQsIHRkLT5rYXQyLCB0ZC0+ a2F0MmxlbikpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwg RklQU19SX05PUFJfVEVTVDJfRkFJTFVSRSk7CisrCQlnb3RvIGVycjI7CisrCQl9CisrCisrCUZJ UFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpOworKworKwkvKiBOb3cgdGVzdCB3aXRoIFBSICov CisrCisrCS8qIEluc3RhbnRpYXRlIERSQkcgd2l0aCB0ZXN0IGVudHJvcHksIG5vbmNlIGFuZCBw ZXJzb25hbGlzYXRpb24KKysJICogc3RyaW5nLgorKwkgKi8KKysJaWYgKCFGSVBTX2RyYmdfaW5p dChkY3R4LCB0ZC0+bmlkLCB0ZC0+ZmxhZ3MpKQorKwkJcmV0dXJuIDA7CisrCWlmICghRklQU19k cmJnX3NldF9jYWxsYmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAwLCB0ZXN0X25vbmNlLCAw KSkKKysJCXJldHVybiAwOworKworKwlGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKGRjdHgsICZ0KTsK KysKKysJdC5lbnQgPSB0ZC0+ZW50X3ByOworKwl0LmVudGxlbiA9IHRkLT5lbnRsZW5fcHI7Cisr CXQubm9uY2UgPSB0ZC0+bm9uY2VfcHI7CisrCXQubm9uY2VsZW4gPSB0ZC0+bm9uY2VsZW5fcHI7 CisrCXQuZW50Y250ID0gMDsKKysJdC5ub25jZWNudCA9IDA7CisrCisrCWlmICghRklQU19kcmJn X2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzX3ByLCB0ZC0+cGVyc2xlbl9wcikpCisrCQlnb3Rv IGVycjsKKysKKysJLyogTm93IGdlbmVyYXRlIHdpdGggUFI6IHdlIG5lZWQgdG8gc3VwcGx5IGVu dHJvcHkgYXMgdGhpcyB3aWxsCisrCSAqIHBlcmZvcm0gYSByZXNlZWQgb3BlcmF0aW9uLiBDaGVj ayBvdXRwdXQgbWF0Y2hlcyBleHBlY3RlZCB2YWx1ZS4KKysJICovCisrCisrCXQuZW50ID0gdGQt PmVudHByX3ByOworKwl0LmVudGxlbiA9IHRkLT5lbnRwcmxlbl9wcjsKKysKKysJLyogTm90ZSBm b3IgQ1RSIHdpdGhvdXQgREYgc29tZSBhZGRpdGlvbmFsIGlucHV0IHZhbHVlcworKwkgKiBpZ25v cmUgYnl0ZXMgYWZ0ZXIgdGhlIGtleWxlbmd0aDogc28gcmVkdWNlIGFkaW5sZW4KKysJICogdG8g aGFsZiB0byBlbnN1cmUgaW52YWxpZCBkYXRhIGlzIGZlZCBpbi4KKysJICovCisrCWlmICghZmlw c19wb3N0X2NvcnJ1cHQoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT5pZmxhZ3Mp KQorKwkJYWRpbmxlbiA9IHRkLT5hZGlubGVuX3ByIC8gMjsKKysJZWxzZQorKwkJYWRpbmxlbiA9 IHRkLT5hZGlubGVuX3ByOworKwlpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0 LCB0ZC0+a2F0bGVuX3ByLCAxLAorKwkJCQl0ZC0+YWRpbl9wciwgYWRpbmxlbikpCisrCQlnb3Rv IGVycjsKKysKKysJaWYgKG1lbWNtcChyYW5kb3V0LCB0ZC0+a2F0X3ByLCB0ZC0+a2F0bGVuX3By KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FULCBGSVBTX1Jf UFJfVEVTVDFfRkFJTFVSRSk7CisrCQlnb3RvIGVycjI7CisrCQl9CisrCisrCS8qIE5vdyBnZW5l cmF0ZSBhZ2FpbiB3aXRoIFBSOiBzdXBwbHkgbmV3IGVudHJvcHkgYWdhaW4uCisrCSAqIENoZWNr IG91dHB1dCBtYXRjaGVzIGV4cGVjdGVkIHZhbHVlLgorKwkgKi8KKysKKysJdC5lbnQgPSB0ZC0+ ZW50Z19wcjsKKysJdC5lbnRsZW4gPSB0ZC0+ZW50Z2xlbl9wcjsKKysKKysJaWYgKCFGSVBTX2Ry YmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdDJsZW5fcHIsIDEsCisrCQkJCXRkLT5h ZGluZ19wciwgdGQtPmFkaW5nbGVuX3ByKSkKKysJCWdvdG8gZXJyOworKworKwlpZiAobWVtY21w KHJhbmRvdXQsIHRkLT5rYXQyX3ByLCB0ZC0+a2F0Mmxlbl9wcikpCisrCQl7CisrCQlGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX1BSX1RFU1QyX0ZBSUxVUkUpOwor KwkJZ290byBlcnIyOworKwkJfQorKwkvKiBBbGwgT0ssIHRlc3QgY29tcGxldGUgKi8KKysJcnYg PSAxOworKworKwllcnI6CisrCWlmIChydiA9PSAwKQorKwkJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwllcnIyOgorKwlGSVBT X2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KTsKKysJCisrCXJldHVybiBydjsKKysKKysJfQorKwor Ky8qIEluaXRpYWxpc2UgYSBEUkJHIGJhc2VkIG9uIHNlbGZ0ZXN0IGRhdGEgKi8KKysKKytzdGF0 aWMgaW50IGRvX2RyYmdfaW5pdChEUkJHX0NUWCAqZGN0eCwgRFJCR19TRUxGVEVTVF9EQVRBICp0 ZCwgVEVTVF9FTlQgKnQpCisrCXsKKysKKysJaWYgKCFGSVBTX2RyYmdfaW5pdChkY3R4LCB0ZC0+ bmlkLCB0ZC0+ZmxhZ3MpKQorKwkJcmV0dXJuIDA7CisrCisrCWlmICghRklQU19kcmJnX3NldF9j YWxsYmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAwLCB0ZXN0X25vbmNlLCAwKSkKKysJCXJl dHVybiAwOworKworKwlGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKGRjdHgsIHQpOworKworKwl0LT5l bnQgPSB0ZC0+ZW50OworKwl0LT5lbnRsZW4gPSB0ZC0+ZW50bGVuOworKwl0LT5ub25jZSA9IHRk LT5ub25jZTsKKysJdC0+bm9uY2VsZW4gPSB0ZC0+bm9uY2VsZW47CisrCXQtPmVudGNudCA9IDA7 CisrCXQtPm5vbmNlY250ID0gMDsKKysJcmV0dXJuIDE7CisrCX0KKysKKysvKiBJbml0aWFsaXNl IGFuZCBpbnN0YW50aWF0ZSBEUkJHIGJhc2VkIG9uIHNlbGZ0ZXN0IGRhdGEgKi8KKytzdGF0aWMg aW50IGRvX2RyYmdfaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgsIERSQkdfU0VMRlRFU1RfREFU QSAqdGQsCisrCQkJCQkJCQlURVNUX0VOVCAqdCkKKysJeworKwlpZiAoIWRvX2RyYmdfaW5pdChk Y3R4LCB0ZCwgdCkpCisrCQlyZXR1cm4gMDsKKysJaWYgKCFGSVBTX2RyYmdfaW5zdGFudGlhdGUo ZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSkKKysJCXJldHVybiAwOworKworKwlyZXR1cm4g MTsKKysJfQorKworKy8qIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgZXh0ZW5zaXZlIGVycm9yIGNo ZWNraW5nIGFzIHJlcXVpcmVkIGJ5IFNQODAwLTkwLgorKyAqIEluZHVjZSBzZXZlcmFsIGZhaWx1 cmUgbW9kZXMgYW5kIGNoZWNrIGFuIGVycm9yIGNvbmRpdGlvbiBpcyBzZXQuCisrICogVGhpcyBm dW5jdGlvbiBhbG9uZyB3aXRoIGZpcHNfZHJiZ19zaW5nbGVfa2F0IHBlZm9ybXMgdGhlIGhlYWx0 aCBjaGVja2luZworKyAqIG9wZXJhdGlvbi4KKysgKi8KKysKKytzdGF0aWMgaW50IGZpcHNfZHJi Z19lcnJvcl9jaGVjayhEUkJHX0NUWCAqZGN0eCwgRFJCR19TRUxGVEVTVF9EQVRBICp0ZCkKKysJ eworKwl1bnNpZ25lZCBjaGFyIHJhbmRvdXRbMTAyNF07CisrCVRFU1RfRU5UIHQ7CisrCXNpemVf dCBpOworKwl1bnNpZ25lZCBpbnQgcmVzZWVkX2NvdW50ZXJfdG1wOworKwl1bnNpZ25lZCBjaGFy ICpwID0gKHVuc2lnbmVkIGNoYXIgKilkY3R4OworKworKwkvKiBJbml0aWFsaXNlIERSQkcgKi8K KysKKysJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKKysJCWdvdG8gZXJyOworKwor KwkvKiBEb24ndCByZXBvcnQgaW5kdWNlZCBlcnJvcnMgKi8KKysJZGN0eC0+aWZsYWdzIHw9IERS QkdfRkxBR19OT0VSUjsKKysKKysJLyogUGVyc29uYWxpc2F0aW9uIHN0cmluZyB0ZXN0cyAqLwor KworKwkvKiBUZXN0IGRldGVjdGlvbiBvZiB0b28gbGFyZ2UgcGVyc29ubGlzYXRpb24gc3RyaW5n ICovCisrCisrCWlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIGRjdHgt Pm1heF9wZXJzICsgMSkgPiAwKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VS Uk9SX0NIRUNLLCBGSVBTX1JfUEVSU09OQUxJU0FUSU9OX0VSUk9SX1VOREVURUNURUQpOworKwkJ Z290byBlcnI7CisrCQl9CisrCisrCS8qIEVudHJvcHkgc291cmNlIHRlc3RzICovCisrCisrCS8q IFRlc3QgZW50cm9weSBzb3VyY2UgZmFpbHVyZSBkZXRlY2lvbjogaS5lLiByZXR1cm5zIG5vIGRh dGEgKi8KKysKKysJdC5lbnRsZW4gPSAwOworKworKwlpZiAoRklQU19kcmJnX2luc3RhbnRpYXRl KGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKQorKwkJeworKwkJRklQU2VycihGSVBT X0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVE KTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwkvKiBUcnkgdG8gZ2VuZXJhdGUgb3V0cHV0IGZy b20gdW5pbnN0YW50aWF0ZWQgRFJCRyAqLworKwlpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRjdHgs IHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCisrCQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCisr CQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9HRU5F UkFURV9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwlkY3R4LT5p ZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0 ZShkY3R4KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywg RklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCWlm ICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrCQlnb3RvIGVycjsKKysKKysJZGN0eC0+ aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysJLyogVGVzdCBpbnN1ZmZpY2llbnQgZW50 cm9weSAqLworKworKwl0LmVudGxlbiA9IGRjdHgtPm1pbl9lbnRyb3B5IC0gMTsKKysKKysJaWYg KEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pID4gMCkK KysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VO VFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJZGN0eC0+ aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7CisrCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlh dGUoZGN0eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ss IEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwkv KiBUZXN0IHRvbyBtdWNoIGVudHJvcHkgKi8KKysKKysJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwg dGQsICZ0KSkKKysJCWdvdG8gZXJyOworKworKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05P RVJSOworKworKwl0LmVudGxlbiA9IGRjdHgtPm1heF9lbnRyb3B5ICsgMTsKKysKKysJaWYgKEZJ UFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pID4gMCkKKysJ CXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJP UFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJZGN0eC0+aWZs YWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7CisrCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUo ZGN0eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJ UFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwkvKiBO b25jZSB0ZXN0cyAqLworKworKwkvKiBUZXN0IHRvbyBzbWFsbCBub25jZSAqLworKworKwlpZiAo ZGN0eC0+bWluX25vbmNlKQorKwkJeworKworKwkJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQs ICZ0KSkKKysJCQlnb3RvIGVycjsKKysKKysJCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9F UlI7CisrCisrCQl0Lm5vbmNlbGVuID0gZGN0eC0+bWluX25vbmNlIC0gMTsKKysKKysJCWlmIChG SVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApCisr CQkJeworKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX05P TkNFX0VSUk9SX1VOREVURUNURUQpOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysKKysJCWRjdHgt PmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOworKwkJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50 aWF0ZShkY3R4KSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NI RUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrCQkJZ290byBlcnI7CisrCQkJfQor KworKwkJfQorKworKwkvKiBUZXN0IHRvbyBsYXJnZSBub25jZSAqLworKworKwlpZiAoZGN0eC0+ bWF4X25vbmNlKQorKwkJeworKworKwkJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkK KysJCQlnb3RvIGVycjsKKysKKysJCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Cisr CisrCQl0Lm5vbmNlbGVuID0gZGN0eC0+bWF4X25vbmNlICsgMTsKKysKKysJCWlmIChGSVBTX2Ry YmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApCisrCQkJewor KwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX05PTkNFX0VS Uk9SX1VOREVURUNURUQpOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysKKysJCWRjdHgtPmlmbGFn cyAmPSB+RFJCR19GTEFHX05PRVJSOworKwkJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShk Y3R4KSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBG SVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrCQkJZ290byBlcnI7CisrCQkJfQorKworKwkJ fQorKworKwkvKiBJbnN0YW50aWF0ZSB3aXRoIHZhbGlkIGRhdGEuICovCisrCWlmICghZG9fZHJi Z19pbnN0YW50aWF0ZShkY3R4LCB0ZCwgJnQpKQorKwkJCWdvdG8gZXJyOworKworKwkvKiBDaGVj ayBnZW5lcmF0aW9uIGlzIG5vdyBPSyAqLworKwlpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4 LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAorKwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQor KwkJZ290byBlcnI7CisrCisrCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisr CS8qIFJlcXVlc3QgdG9vIG11Y2ggZGF0YSBmb3Igb25lIHJlcXVlc3QgKi8KKysJaWYgKEZJUFNf ZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCBkY3R4LT5tYXhfcmVxdWVzdCArIDEsIDAsCisr CQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBT X0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9SRVFVRVNUX0xFTkdUSF9FUlJPUl9VTkRFVEVDVEVE KTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwkvKiBUcnkgdG9vIGxhcmdlIGFkZGl0aW9uYWwg aW5wdXQgKi8KKysJaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0 bGVuLCAwLAorKwkJCQl0ZC0+YWRpbiwgZGN0eC0+bWF4X2FkaW4gKyAxKSkKKysJCXsKKysJCUZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0FERElUSU9OQUxfSU5Q VVRfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJLyogQ2hlY2sg cHJlZGljdGlvbiByZXNpc3RhbmNlIHJlcXVlc3QgZmFpbHMgaWYgZW50cm9weSBzb3VyY2UKKysJ ICogZmFpbHVyZS4KKysJICovCisrCisrCXQuZW50bGVuID0gMDsKKysKKysJaWYgKEZJUFNfZHJi Z19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAxLAorKwkJCQl0ZC0+YWRpbiwg dGQtPmFkaW5sZW4pKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NI RUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCWdvdG8gZXJyOworKwkJ fQorKwkJCisrCWRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOworKwlpZiAoIUZJUFNf ZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrCQlnb3RvIGVy cjsKKysJCX0KKysKKysKKysJLyogSW5zdGFudGlhdGUgYWdhaW4gd2l0aCB2YWxpZCBkYXRhICov CisrCisrCWlmICghZG9fZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZCwgJnQpKQorKwkJCWdvdG8g ZXJyOworKwkvKiBUZXN0IHJlc2VlZCBjb3VudGVyIHdvcmtzICovCisrCS8qIFNhdmUgaW5pdGlh bCByZXNlZWQgY291bnRlciAqLworKwlyZXNlZWRfY291bnRlcl90bXAgPSBkY3R4LT5yZXNlZWRf Y291bnRlcjsKKysJLyogU2V0IHJlc2VlZCBjb3VudGVyIHRvIGJleW9uZCBpbnRlcnZhbCAqLwor KwlkY3R4LT5yZXNlZWRfY291bnRlciA9IGRjdHgtPnJlc2VlZF9pbnRlcnZhbDsKKysKKysJLyog R2VuZXJhdGUgb3V0cHV0IGFuZCBjaGVjayBlbnRyb3B5IGhhcyBiZWVuIHJlcXVlc3RlZCBmb3Ig cmVzZWVkICovCisrCXQuZW50Y250ID0gMDsKKysJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0 eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMCwKKysJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkK KysJCWdvdG8gZXJyOworKwlpZiAodC5lbnRjbnQgIT0gMSkKKysJCXsKKysJCUZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfTk9UX1JFUVVFU1RFRF9G T1JfUkVTRUVEKTsKKysJCWdvdG8gZXJyOworKwkJfQorKwkvKiBDaGVjayByZXNlZWQgY291bnRl ciBoYXMgYmVlbiByZXNldCAqLworKwlpZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgIT0gcmVzZWVk X2NvdW50ZXJfdG1wICsgMSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJP Ul9DSEVDSywgRklQU19SX1JFU0VFRF9DT1VOVEVSX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJ fQorKworKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysJaWYgKCFGSVBTX2Ry YmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJC R19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKwkJZ290byBlcnI7 CisrCQl9CisrCisrCS8qIENoZWNrIHByZWRpY3Rpb24gcmVzaXN0YW5jZSByZXF1ZXN0IGZhaWxz IGlmIGVudHJvcHkgc291cmNlCisrCSAqIGZhaWx1cmUuCisrCSAqLworKworKwl0LmVudGxlbiA9 IDA7CisrCisrCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCWlmIChGSVBTX2Ry YmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMSwKKysJCQkJdGQtPmFkaW4s IHRkLT5hZGlubGVuKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9D SEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJ CX0KKysJCQorKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysKKysJaWYgKCFG SVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKwkJZ290 byBlcnI7CisrCQl9CisrCisrCisrCWlmICghZG9fZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZCwg JnQpKQorKwkJCWdvdG8gZXJyOworKwkvKiBUZXN0IHJlc2VlZCBjb3VudGVyIHdvcmtzICovCisr CS8qIFNhdmUgaW5pdGlhbCByZXNlZWQgY291bnRlciAqLworKwlyZXNlZWRfY291bnRlcl90bXAg PSBkY3R4LT5yZXNlZWRfY291bnRlcjsKKysJLyogU2V0IHJlc2VlZCBjb3VudGVyIHRvIGJleW9u ZCBpbnRlcnZhbCAqLworKwlkY3R4LT5yZXNlZWRfY291bnRlciA9IGRjdHgtPnJlc2VlZF9pbnRl cnZhbDsKKysKKysJLyogR2VuZXJhdGUgb3V0cHV0IGFuZCBjaGVjayBlbnRyb3B5IGhhcyBiZWVu IHJlcXVlc3RlZCBmb3IgcmVzZWVkICovCisrCXQuZW50Y250ID0gMDsKKysJaWYgKCFGSVBTX2Ry YmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMCwKKysJCQkJdGQtPmFkaW4s IHRkLT5hZGlubGVuKSkKKysJCWdvdG8gZXJyOworKwlpZiAodC5lbnRjbnQgIT0gMSkKKysJCXsK KysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlf Tk9UX1JFUVVFU1RFRF9GT1JfUkVTRUVEKTsKKysJCWdvdG8gZXJyOworKwkJfQorKwkvKiBDaGVj ayByZXNlZWQgY291bnRlciBoYXMgYmVlbiByZXNldCAqLworKwlpZiAoZGN0eC0+cmVzZWVkX2Nv dW50ZXIgIT0gcmVzZWVkX2NvdW50ZXJfdG1wICsgMSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1JFU0VFRF9DT1VOVEVSX0VSUk9SKTsKKysJ CWdvdG8gZXJyOworKwkJfQorKworKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsK KysJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1Ip OworKwkJZ290byBlcnI7CisrCQl9CisrCisrCS8qIEV4cGxpY2l0IHJlc2VlZCB0ZXN0cyAqLwor KworKwkvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRoIHRvbyBsYXJnZSBhZGRpdGlvbmFsIGlu cHV0ICovCisrCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrCQlnb3RvIGVycjsK KysKKysJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysJaWYgKEZJUFNfZHJi Z19yZXNlZWQoZGN0eCwgdGQtPmFkaW4sIGRjdHgtPm1heF9hZGluICsgMSkgPiAwKQorKwkJewor KwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfQURESVRJT05B TF9JTlBVVF9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwkvKiBU ZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRoIGVudHJvcHkgc291cmNlIGZhaWx1cmUgKi8KKysKKysJ dC5lbnRsZW4gPSAwOworKworKwlpZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwg dGQtPmFkaW5sZW4pID4gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJP Ul9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsK KysJCX0KKysKKysJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCXsKKysJ CUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElB VEVfRVJST1IpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCS8qIFRlc3QgZXhwbGljaXQgcmVz ZWVkIHdpdGggdG9vIG11Y2ggZW50cm9weSAqLworKworKwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4 LCB0ZCwgJnQpKQorKwkJZ290byBlcnI7CisrCisrCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdf Tk9FUlI7CisrCisrCXQuZW50bGVuID0gZGN0eC0+bWF4X2VudHJvcHkgKyAxOworKworKwlpZiAo RklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pID4gMCkKKysJCXsK KysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlf RVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJaWYgKCFGSVBTX2Ry YmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJC R19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKwkJZ290byBlcnI7 CisrCQl9CisrCisrCS8qIFRlc3QgZXhwbGljaXQgcmVzZWVkIHdpdGggdG9vIGxpdHRsZSBlbnRy b3B5ICovCisrCisrCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrCQlnb3RvIGVy cjsKKysKKysJZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysJdC5lbnRsZW4g PSBkY3R4LT5taW5fZW50cm9weSAtIDE7CisrCisrCWlmIChGSVBTX2RyYmdfcmVzZWVkKGRjdHgs IHRkLT5hZGluLCB0ZC0+YWRpbmxlbikgPiAwKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQ U19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKKysJ CWdvdG8gZXJyOworKwkJfQorKworKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgp KQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1Jf VU5JTlNUQU5USUFURV9FUlJPUik7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJcCA9ICh1bnNp Z25lZCBjaGFyICopJmRjdHgtPmQ7CisrCS8qIFN0YW5kYXJkIHNheXMgd2UgaGF2ZSB0byBjaGVj ayB1bmluc3RhbnRpYXRlIHJlYWxseSB6ZXJvZXMKKysJICogdGhlIGRhdGEuLi4KKysJICovCisr CWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZGN0eC0+ZCk7IGkrKykKKysJCXsKKysJCWlmICgqcCAh PSAwKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJ UFNfUl9VTklOU1RBTlRJQVRFX1pFUk9JU0VfRVJST1IpOworKwkJCWdvdG8gZXJyOworKwkJCX0K KysJCXArKzsKKysJCX0KKysKKysJcmV0dXJuIDE7CisrCisrCWVycjoKKysJLyogQSByZWFsIGVy cm9yIGFzIG9wcG9zZWQgdG8gYW4gaW5kdWNlZCBvbmU6IHVuZGVybHlpbmcgZnVuY3Rpb24gd2ls bAorKwkgKiBpbmRpY2F0ZSB0aGUgZXJyb3IuCisrCSAqLworKwlpZiAoIShkY3R4LT5pZmxhZ3Mg JiBEUkJHX0ZMQUdfTk9FUlIpKQorKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NI RUNLLCBGSVBTX1JfRlVOQ1RJT05fRVJST1IpOworKwlGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShk Y3R4KTsKKysJcmV0dXJuIDA7CisrCisrCX0KKysKKytpbnQgZmlwc19kcmJnX2thdChEUkJHX0NU WCAqZGN0eCwgaW50IG5pZCwgdW5zaWduZWQgaW50IGZsYWdzKQorKwl7CisrCURSQkdfU0VMRlRF U1RfREFUQSAqdGQ7CisrCWZsYWdzIHw9IERSQkdfRkxBR19URVNUOworKwlmb3IgKHRkID0gZHJi Z190ZXN0OyB0ZC0+bmlkICE9IDA7IHRkKyspCisrCQl7CisrCQlpZiAodGQtPm5pZCA9PSBuaWQg JiYgdGQtPmZsYWdzID09IGZsYWdzKQorKwkJCXsKKysJCQlpZiAoIWZpcHNfZHJiZ19zaW5nbGVf a2F0KGRjdHgsIHRkLCAwKSkKKysJCQkJcmV0dXJuIDA7CisrCQkJcmV0dXJuIGZpcHNfZHJiZ19l cnJvcl9jaGVjayhkY3R4LCB0ZCk7CisrCQkJfQorKwkJfQorKwlyZXR1cm4gMDsKKysJfQorKwor K2ludCBGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKERSQkdfQ1RYICpkY3R4KQorKwl7CisrCWludCBy djsKKysJRFJCR19DVFggKnRjdHggPSBOVUxMOworKwl0Y3R4ID0gRklQU19kcmJnX25ldygwLCAw KTsKKysJZmlwc19wb3N0X3N0YXJ0ZWQoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4 LT54ZmxhZ3MpOworKwlpZiAoIXRjdHgpCisrCQlyZXR1cm4gMDsKKysJcnYgPSBmaXBzX2RyYmdf a2F0KHRjdHgsIGRjdHgtPnR5cGUsIGRjdHgtPnhmbGFncyk7CisrCWlmICh0Y3R4KQorKwkJRklQ U19kcmJnX2ZyZWUodGN0eCk7CisrCWlmIChydikKKysJCWZpcHNfcG9zdF9zdWNjZXNzKEZJUFNf VEVTVF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+eGZsYWdzKTsKKysJZWxzZQorKwkJZmlwc19w b3N0X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPnhmbGFncyk7Cisr CWlmICghcnYpCisrCQlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19FUlJPUjsKKysJZWxzZQor KwkJZGN0eC0+aGVhbHRoX2NoZWNrX2NudCA9IDA7CisrCXJldHVybiBydjsKKysJfQorKworK2lu dCBGSVBTX3NlbGZ0ZXN0X2RyYmcodm9pZCkKKysJeworKwlEUkJHX0NUWCAqZGN0eDsKKysJRFJC R19TRUxGVEVTVF9EQVRBICp0ZDsKKysJaW50IHJ2ID0gMTsKKysJZGN0eCA9IEZJUFNfZHJiZ19u ZXcoMCwgMCk7CisrCWlmICghZGN0eCkKKysJCXJldHVybiAwOworKwlmb3IgKHRkID0gZHJiZ190 ZXN0OyB0ZC0+bmlkICE9IDA7IHRkKyspCisrCQl7CisrCQlpZiAodGQtPnBvc3QgIT0gMSkKKysJ CQljb250aW51ZTsKKysJCWlmICghZmlwc19wb3N0X3N0YXJ0ZWQoRklQU19URVNUX0RSQkcsIHRk LT5uaWQsICZ0ZC0+ZmxhZ3MpKQorKwkJCXJldHVybiAxOworKwkJaWYgKCFmaXBzX2RyYmdfc2lu Z2xlX2thdChkY3R4LCB0ZCwgMSkpCisrCQkJeworKwkJCWZpcHNfcG9zdF9mYWlsZWQoRklQU19U RVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpOworKwkJCXJ2ID0gMDsKKysJCQljb250aW51 ZTsKKysJCQl9CisrCQlpZiAoIWZpcHNfcG9zdF9zdWNjZXNzKEZJUFNfVEVTVF9EUkJHLCB0ZC0+ bmlkLCAmdGQtPmZsYWdzKSkKKysJCQlyZXR1cm4gMDsKKysJCX0KKysJRklQU19kcmJnX2ZyZWUo ZGN0eCk7CisrCXJldHVybiBydjsKKysJfQorKworKworK2ludCBGSVBTX3NlbGZ0ZXN0X2RyYmdf YWxsKHZvaWQpCisrCXsKKysJRFJCR19DVFggKmRjdHg7CisrCURSQkdfU0VMRlRFU1RfREFUQSAq dGQ7CisrCWludCBydiA9IDE7CisrCWRjdHggPSBGSVBTX2RyYmdfbmV3KDAsIDApOworKwlpZiAo IWRjdHgpCisrCQlyZXR1cm4gMDsKKysJZm9yICh0ZCA9IGRyYmdfdGVzdDsgdGQtPm5pZCAhPSAw OyB0ZCsrKQorKwkJeworKwkJaWYgKCFmaXBzX3Bvc3Rfc3RhcnRlZChGSVBTX1RFU1RfRFJCRywg dGQtPm5pZCwgJnRkLT5mbGFncykpCisrCQkJcmV0dXJuIDE7CisrCQlpZiAoIWZpcHNfZHJiZ19z aW5nbGVfa2F0KGRjdHgsIHRkLCAwKSkKKysJCQl7CisrCQkJZmlwc19wb3N0X2ZhaWxlZChGSVBT X1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncyk7CisrCQkJcnYgPSAwOworKwkJCWNvbnRp bnVlOworKwkJCX0KKysJCWlmICghZmlwc19kcmJnX2Vycm9yX2NoZWNrKGRjdHgsIHRkKSkKKysJ CQl7CisrCQkJZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5m bGFncyk7CisrCQkJcnYgPSAwOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysJCWlmICghZmlwc19w b3N0X3N1Y2Nlc3MoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpKQorKwkJCXJl dHVybiAwOworKwkJfQorKwlGSVBTX2RyYmdfZnJlZShkY3R4KTsKKysJcmV0dXJuIHJ2OworKwl9 CisrCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRl c3QuaC5maXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5o CistLS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmguZmlw cwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU2MTkyMjUxNyArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFr L2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5oCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTYx OTIyNTE3ICswMTAwCitAQCAtMCwwICsxLDIzMzUgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENv cHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoK KysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMK KysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVu dDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVu U1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisr ICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVu IHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlLm9yZy4KKysg KgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUg Y2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVp ciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBP cGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0g d2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQ UkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV VAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S IFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE CisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisr LyogU2VsZnRlc3QgYW5kIGhlYWx0aCBjaGVjayBkYXRhIGZvciB0aGUgU1A4MDAtOTAgRFJCRyAq LworKworKyNkZWZpbmUgX19maXBzX2NvbnN0c2VnCisrCisrLyogQUVTLTEyOCB1c2UgZGYgUFIg ICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEy OF91c2VfZGZfcHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4NjEsMHg1MiwweDdjLDB4ZTMs MHgyMywweDdkLDB4MGEsMHgwNywweDEwLDB4MGMsMHg1MCwweDMzLAorKwkweGM4LDB4ZGIsMHhm ZiwweDEyCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfbm9uY2VbXSA9CisrCXsKKysJMHg1MSwweDBkLDB4ODUs MHg3NywweGVkLDB4MjIsMHg5NywweDI4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfcGVyc29uYWxpemF0aW9u c3RyaW5nW10gPQorKwl7CisrCTB4NTksMHg5ZiwweGJiLDB4Y2QsMHhkNSwweDI1LDB4NjksMHhi NSwweGNiLDB4YjUsMHgwMywweGZlLAorKwkweGQ3LDB4ZDcsMHgwMSwweDY3CisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2Vf ZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4ZWYsMHg4OCwweDc2LDB4MDEsMHhh ZiwweDNjLDB4ZmUsMHg4YiwweGFmLDB4MjYsMHgwNiwweDllLAorKwkweDlhLDB4NDcsMHgwOCww eDc2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzEyOF91c2VfZGZfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHhlMiwweDc2 LDB4ZjksMHhmNiwweDNhLDB4YmEsMHgxMCwweDlmLDB4YmYsMHg0NywweDBlLDB4NTEsCisrCTB4 MDksMHhmYiwweGEzLDB4YjYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQor Kwl7CisrCTB4ZDQsMHg5OCwweDhhLDB4NDYsMHg4MCwweDRjLDB4ZGIsMHhhMywweDU5LDB4MDIs MHg1NywweDUyLAorKwkweDY2LDB4MWMsMHhlYSwweDViCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfYWRkaXRp b25hbGlucHV0MltdID0KKysJeworKwkweDg4LDB4OGMsMHg5MSwweGQ2LDB4YmUsMHg1NiwweDZl LDB4MDgsMHg5YSwweDYyLDB4MmIsMHgxMSwKKysJMHgzZiwweDVlLDB4MzEsMHgwNgorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhf dXNlX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJeworKwkweGMwLDB4NWMsMHg2YiwweDk4 LDB4MDEsMHgwZCwweDU4LDB4MTgsMHg1MSwweDE4LDB4OTYsMHhhZSwKKysJMHhhNywweGUzLDB4 YTgsMHg2NworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkweGNmLDB4 MDEsMHhhYywweDIyLDB4MzEsMHgwNiwweDhlLDB4ZmMsMHhjZSwweDU2LDB4ZWEsMHgyNCwKKysJ MHgwZiwweDM4LDB4NDMsMHhjNgorKwl9OworKworKworKy8qIEFFUy0xMjggdXNlIGRmIE5vIFBS ICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x MjhfdXNlX2RmX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDFmLDB4OGUsMHgzNCwweDgyLDB4 MGMsMHhiNywweGJlLDB4YzUsMHgwMSwweDNlLDB4ZDAsMHhhMywKKysJMHg5ZCwweDdkLDB4MWMs MHg5YgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xMjhfdXNlX2RmX25vbmNlW10gPQorKwl7CisrCTB4ZDUsMHg0ZCwweGJkLDB4NGEs MHg5MywweDdmLDB4YjgsMHg5NgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1td ID0KKysJeworKwkweGFiLDB4ZDYsMHgzZiwweDA0LDB4ZmUsMHgyNywweDZiLDB4MmQsMHhkNyww eGMzLDB4MWMsMHhmMywKKysJMHgzOCwweDY2LDB4YmEsMHgxYgorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2FkZGl0 aW9uYWxpbnB1dFtdID0KKysJeworKwkweGZlLDB4ZjQsMHgwOSwweGE4LDB4YjcsMHg3MywweDI3 LDB4OWMsMHg1ZiwweGE3LDB4ZWEsMHg0NiwKKysJMHhiNSwweGUyLDB4YjIsMHg0MQorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhf dXNlX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg0MiwweGU0LDB4NGUsMHg3Yiww eDI3LDB4ZGQsMHhjYiwweGJjLDB4MGEsMHhjZiwweGE2LDB4NjcsCisrCTB4ZTcsMHg1NywweDEx LDB4YjQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMTI4X3VzZV9kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHgxNCww eDI2LDB4NjksMHhkOSwweGYzLDB4NjUsMHgwMywweGQ2LDB4NmIsMHhiOSwweDQ0LDB4MGIsCisr CTB4YzcsMHhjNCwweDllLDB4MzkKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRb XSA9CisrCXsKKysJMHg1NSwweDJlLDB4NjAsMHg5YSwweDA1LDB4NzIsMHg4YSwweGE4LDB4ZWYs MHgyMiwweDgxLDB4NWEsCisrCTB4YzgsMHg5MywweGZhLDB4ODQKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9hZGRp dGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4M2MsMHg0MCwweGM4LDB4YzQsMHgxNiwweDBjLDB4 MjEsMHhhNCwweDM3LDB4MmMsMHg4ZiwweGE1LAorKwkweDA2LDB4MGMsMHgxNSwweDJjCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEy OF91c2VfZGZfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZTEsMHgzZSwweDk5LDB4OTgsMHg4 NiwweDY3LDB4MGIsMHg2MywweDdiLDB4YmUsMHgzZiwweDg4LAorKwkweDQ2LDB4ODEsMHhjNyww eDE5CisrCX07CisrCisrCisrLyogQUVTLTE5MiB1c2UgZGYgUFIgICovCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfZW50cm9w eWlucHV0W10gPQorKwl7CisrCTB4MmIsMHg0ZSwweDhiLDB4ZTEsMHhmMSwweDM0LDB4ODAsMHg1 NiwweDgxLDB4ZjksMHg3NCwweGVjLAorKwkweDE3LDB4NDQsMHgyYSwweGYxLDB4MTQsMHhiMCww eGJmLDB4OTcsMHgzOSwweGI3LDB4MDQsMHg3ZAorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX25vbmNlW10gPQor Kwl7CisrCTB4ZDYsMHg5ZCwweGViLDB4MTQsMHg0ZSwweDZjLDB4MzAsMHgxZSwweDM5LDB4NTUs MHg3MywweGQwLAorKwkweGQxLDB4ODAsMHg3OCwweGZhCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfcGVyc29u YWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4ZmMsMHg0MywweDRhLDB4ZjgsMHg5YSwweDU1 LDB4YjMsMHg1MywweDgzLDB4ZTIsMHgxOCwweDE2LAorKwkweDBjLDB4ZGMsMHhjZCwweDVlLDB4 NGYsMHhhMCwweDAzLDB4MDEsMHgyYiwweDlmLDB4ZTQsMHhkNSwKKysJMHg3ZCwweDQ5LDB4ZjAs MHg0MSwweDllLDB4M2QsMHg5OSwweDA0CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0 W10gPQorKwl7CisrCTB4NWUsMHg5ZiwweDQ5LDB4NmYsMHgyMSwweDhiLDB4MWQsMHgzMiwweGQ1 LDB4ODQsMHg1YywweGFjLAorKwkweGFmLDB4ZGYsMHhlNCwweDc5LDB4OWUsMHhhZiwweGE5LDB4 ODIsMHhkMCwweGY4LDB4NGYsMHhjYiwKKysJMHg2OSwweDEwLDB4MGEsMHg3ZSwweDgxLDB4NTcs MHhiNSwweDM2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHhk NCwweDgxLDB4MGMsMHhkNywweDY2LDB4MzksMHhlYywweDQyLDB4NTMsMHg4NywweDQxLDB4YTUs CisrCTB4MWUsMHg3ZCwweDgwLDB4OTEsMHg4ZSwweGJiLDB4ZWQsMHhhYywweDE0LDB4MDIsMHgx YSwweGQ1CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGRm LDB4MWQsMHgzOSwweDQ1LDB4N2MsMHg5YiwweGM2LDB4MmIsMHg3ZCwweDhjLDB4OTMsMHhlOSwK KysJMHgxOSwweDMwLDB4NmIsMHg2NworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJb XSA9CisrCXsKKysJMHgwMCwweDcxLDB4MjcsMHg0ZSwweGQzLDB4MTQsMHhmMSwweDIwLDB4N2Ys MHg0YSwweDQxLDB4MzIsCisrCTB4MmEsMHg5NywweDExLDB4NDMsMHg4ZiwweDRhLDB4MTUsMHg3 YiwweDliLDB4NTEsMHg3OSwweGRhLAorKwkweDQ5LDB4M2QsMHhkZSwweGU4LDB4YmMsMHg5Myww eDkxLDB4OTkKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHg5 MCwweGVlLDB4NzYsMHhhMSwweDQ1LDB4OGQsMHhiNywweDQwLDB4YjAsMHgxMSwweGJmLDB4ZDAs CisrCTB4NjUsMHhkNywweDNjLDB4N2MsMHg0ZiwweDIwLDB4M2YsMHg0ZSwweDExLDB4OWQsMHhi MywweDVlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MjQsMHgz YiwweDIwLDB4YTQsMHgzNywweDY2LDB4YmEsMHg3MiwweDM5LDB4M2YsMHhjZiwweDNjLAorKwkw eDdlLDB4MWEsMHgyYiwweDgzCisrCX07CisrCisrCisrLyogQUVTLTE5MiB1c2UgZGYgTm8gUFIg ICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5 Ml91c2VfZGZfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4OGQsMHg3NCwweGE0LDB4NTAsMHgx YSwweDAyLDB4NjgsMHgwYywweDJhLDB4NjksMHhjNCwweDgyLAorKwkweDNiLDB4YmIsMHhkYSww eDBlLDB4N2YsMHg3NywweGEzLDB4MTcsMHg3OCwweDU3LDB4YjIsMHg3YgorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2Rm X25vbmNlW10gPQorKwl7CisrCTB4NzUsMHhkNSwweDFmLDB4YWMsMHhhNCwweDhkLDB4NDIsMHg3 OCwweGQ3LDB4NjksMHg4NiwweDlkLAorKwkweDc3LDB4ZDcsMHg0MSwweDBlCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2Vf ZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4NGUsMHgzMywweDQxLDB4M2Ms MHg5YywweGMyLDB4ZDIsMHg1MywweGFmLDB4OTAsMHhlYSwweGNmLAorKwkweDE5LDB4NTAsMHgx ZSwweGU2LDB4NmYsMHg2MywweGM4LDB4MzIsMHgyMiwweGRjLDB4MDcsMHg2NSwKKysJMHg5Yyww eGQzLDB4ZjgsMHgzMCwweDllLDB4ZWQsMHgzNSwweDcwCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfYWRkaXRpb25h bGlucHV0W10gPQorKwl7CisrCTB4NWQsMHg4YiwweDhjLDB4YzEsMHhkZiwweDBlLDB4MDIsMHg3 OCwweGZiLDB4MTksMHhiOCwweDY5LAorKwkweDc4LDB4NGUsMHg5YywweDUyLDB4YmMsMHhjNyww eDIwLDB4YzksMHhlNiwweDVlLDB4NzcsMHgyMiwKKysJMHgyOCwweDNkLDB4MGMsMHg5ZSwweDY4 LDB4YTgsMHg0NSwweGQ3CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfaW50X3JldHVybmVkYml0c1tdID0KKysJewor KwkweGQ1LDB4ZTcsMHgwOCwweGM1LDB4MTksMHg5OSwweGQ1LDB4MzEsMHgwMywweDBhLDB4NzQs MHhiNiwKKysJMHhiNywweGVkLDB4ZTksMHhlYQorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2VudHJvcHlpbnB1dHJl c2VlZFtdID0KKysJeworKwkweDljLDB4MjYsMHhkYSwweGYxLDB4YWMsMHhkOSwweDVhLDB4ZDYs MHhhOCwweDY1LDB4ZjUsMHgwMiwKKysJMHg4ZiwweGRjLDB4YTIsMHgwOSwweDU0LDB4YTYsMHhl MiwweGE0LDB4ZGUsMHgzMiwweGUwLDB4MDEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRy ZXNlZWRbXSA9CisrCXsKKysJMHg5YiwweDkwLDB4YjAsMHgzYSwweDBlLDB4M2EsMHg4MCwweDA3 LDB4NGEsMHhmNCwweGRhLDB4NzYsCisrCTB4MjgsMHgzMCwweDNjLDB4ZWUsMHg1NCwweDFiLDB4 OTQsMHg1OSwweDUxLDB4NDMsMHg1NiwweDc3LAorKwkweGFmLDB4ODgsMHhkZCwweDYzLDB4ODks MHg0NywweDA2LDB4NjUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7Cisr CTB4M2MsMHgxMSwweDY0LDB4N2EsMHg5NiwweGY1LDB4ZDgsMHhiOCwweGFlLDB4ZDYsMHg3MCww eDRlLAorKwkweDE2LDB4OTYsMHhkZSwweGU5LDB4NjIsMHhiYywweGVlLDB4MjgsMHgyZiwweDI2 LDB4YTYsMHhmMCwKKysJMHg1NiwweGVmLDB4YTMsMHhmMSwweDZiLDB4YTEsMHhiMSwweDc3Cisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml91c2VfZGZfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MGIsMHhlMiwweDU2LDB4MDMs MHgxZSwweGRiLDB4MmMsMHg2ZCwweDdmLDB4MWIsMHgxNSwweDU4LAorKwkweDFhLDB4ZjksMHgx MywweDI4CisrCX07CisrCisrCisrLyogQUVTLTI1NiB1c2UgZGYgUFIgICovCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfZW50 cm9weWlucHV0W10gPQorKwl7CisrCTB4NjEsMHg2OCwweGZjLDB4MWEsMHhmMCwweGI1LDB4OTUs MHg2YiwweDg1LDB4MDksMHg5YiwweDc0LAorKwkweDNmLDB4MTMsMHg3OCwweDQ5LDB4M2IsMHg4 NSwweGVjLDB4OTMsMHgxMywweDNiLDB4YTksMHg0ZiwKKysJMHg5NiwweGFiLDB4MmMsMHhlNCww eGM4LDB4OGYsMHhkZCwweDZhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfbm9uY2VbXSA9CisrCXsKKysJMHhh ZCwweGQyLDB4YmIsMHhiYSwweGI3LDB4NjUsMHg4OSwweGMzLDB4MjEsMHg2YywweDU1LDB4MzMs CisrCTB4MmIsMHgzNiwweGZmLDB4YTQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9wZXJzb25hbGl6YXRpb25z dHJpbmdbXSA9CisrCXsKKysJMHg2ZSwweGNhLDB4ZTcsMHgyMCwweDcyLDB4ZDMsMHg4NCwweDVh LDB4MzIsMHhkMywweDRiLDB4MjQsCisrCTB4NzIsMHhjNCwweDYzLDB4MmIsMHg5ZCwweDEyLDB4 MjQsMHgwYywweDIzLDB4MjYsMHg4ZSwweDgzLAorKwkweDE2LDB4MzcsMHgwYiwweGQxLDB4MDYs MHg0ZiwweDY4LDB4NmQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsK KysJMHg3ZSwweDA4LDB4NGEsMHhiYiwweGUzLDB4MjEsMHg3YywweGM5LDB4MjMsMHhkMiwweGY4 LDB4YjAsCisrCTB4NzMsMHg5OCwweGJhLDB4ODQsMHg3NCwweDIzLDB4YWIsMHgwNiwweDhhLDB4 ZTIsMHgyMiwweGQzLAorKwkweDdiLDB4Y2UsMHg5YiwweGQyLDB4NGEsMHg3NiwweGI4LDB4ZGUK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMjU2X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweDBiLDB4MjMsMHhh ZiwweGRmLDB4ZjEsMHg2MiwweGQ3LDB4ZDMsMHg0MywweDk3LDB4ZjgsMHg3NywKKysJMHgwNCww eGE4LDB4NDIsMHgyMCwweGJkLDB4ZjYsMHgwZiwweGMxLDB4MTcsMHgyZiwweDlmLDB4NTQsCisr CTB4YmIsMHg1NiwweDE3LDB4ODYsMHg2OCwweDBlLDB4YmEsMHhhOQorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3By X2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHgzMSwweDhlLDB4YWQsMHhhZiwweDQwLDB4 ZWIsMHg2YiwweDc0LDB4MzEsMHg0NiwweDgwLDB4YzcsCisrCTB4MTcsMHhhYiwweDNjLDB4N2EK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMjU2X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4OTQsMHg2Yiww eGM5LDB4OWYsMHhhYiwweDhkLDB4YzUsMHhlYywweDcxLDB4ODgsMHgxZCwweDAwLAorKwkweDhj LDB4ODksMHg2OCwweGU0LDB4YzgsMHgwNywweDc3LDB4MzYsMHgxNywweDZkLDB4NzksMHg3OCwK KysJMHhjNywweDA2LDB4NGUsMHg5OSwweDA0LDB4MjgsMHgyOSwweGMzCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZf cHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4YmYsMHg2YywweDU5LDB4MmEsMHgwZCww eDQ0LDB4MGYsMHhhZSwweDlhLDB4NWUsMHgwMywweDczLAorKwkweGQ4LDB4YTYsMHhlMSwweGNm LDB4MjUsMHg2MSwweDM4LDB4MjQsMHg4NiwweDllLDB4NTMsMHhlOCwKKysJMHhhNCwweGRmLDB4 NTYsMHhmNCwweDA2LDB4MDcsMHg5YywweDBmCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfcmV0dXJuZWRiaXRz W10gPQorKwl7CisrCTB4MjIsMHg0YSwweGI0LDB4YjgsMHhiNiwweGVlLDB4N2QsMHhiMSwweDll LDB4YzksMHhmOSwweGEwLAorKwkweGQ5LDB4ZTIsMHg5NywweDAwCisrCX07CisrCisrCisrLyog QUVTLTI1NiB1c2UgZGYgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4 YTUsMHgzZSwweDM3LDB4MTAsMHgxNywweDQzLDB4OTEsMHg5MywweDU5LDB4MWUsMHg0NywweDUw LAorKwkweDg3LDB4YWEsMHhkZCwweGQ1LDB4YzEsMHhjMywweDg2LDB4Y2QsMHhjYSwweDBkLDB4 ZGIsMHg2OCwKKysJMHhlMCwweDAyLDB4ZDgsMHgwZiwweGRjLDB4NDAsMHgxYSwweDQ3CisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1 Nl91c2VfZGZfbm9uY2VbXSA9CisrCXsKKysJMHhhOSwweDRkLDB4YTUsMHg1YSwweGZkLDB4YzUs MHgwYywweGU1LDB4MWMsMHg5YSwweDNiLDB4OGEsCisrCTB4NGMsMHg0NCwweDg0LDB4NDAKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X3VzZV9kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg4YiwweDUyLDB4 YTIsMHg0YSwweDkzLDB4YzMsMHg0ZSwweGE3LDB4MWUsMHgxYywweGE3LDB4MDUsCisrCTB4ZWIs MHg4MiwweDliLDB4YTYsMHg1ZCwweGU0LDB4ZDQsMHhlMCwweDdmLDB4YTMsMHhkOCwweDZiLAor KwkweDM3LDB4ODQsMHg1ZiwweGYxLDB4YzcsMHhkNSwweGY2LDB4ZDIKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9h ZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHgyMCwweGY0LDB4MjIsMHhlZCwweGY4LDB4NWMs MHhhMSwweDZhLDB4MDEsMHhjZiwweGJlLDB4NWYsCisrCTB4OGQsMHg2YywweDk0LDB4N2YsMHhh ZSwweDEyLDB4YTgsMHg1NywweGRiLDB4MmEsMHhhOSwweGJmLAorKwkweGM3LDB4YjMsMHg2NSww eDgxLDB4ODAsMHg4ZCwweDBkLDB4NDYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9pbnRfcmV0dXJuZWRiaXRzW10g PQorKwl7CisrCTB4NGUsMHg0NCwweGZkLDB4ZjMsMHg5ZSwweDI5LDB4YTIsMHhiOCwweDBmLDB4 NWQsMHg2YywweGUxLAorKwkweDI4LDB4MGMsMHgzYiwweGMxCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfZW50cm9w eWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4ZGQsMHg0MCwweGU1LDB4OTgsMHg3YiwweDI3LDB4 MTYsMHg3MywweDE1LDB4NjgsMHhkMiwweDc2LAorKwkweGJmLDB4MGMsMHg2NywweDE1LDB4NzUs MHg3OSwweDAzLDB4ZDMsMHhkZSwweGRlLDB4OTEsMHg0NiwKKysJMHg0MiwweGRkLDB4ZDQsMHg2 NywweGM4LDB4NzksMHhjOCwweDFlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfYWRkaXRpb25hbGlucHV0cmVzZWVk W10gPQorKwl7CisrCTB4N2YsMHhkOCwweDFmLDB4YmQsMHgyYSwweGI1LDB4MWMsMHgxMSwweDVk LDB4ODMsMHg0ZSwweDk5LAorKwkweGY2LDB4NWMsMHhhNSwweDQwLDB4MjAsMHhlZCwweDM4LDB4 OGUsMHhkNSwweDllLDB4ZTAsMHg3NSwKKysJMHg5MywweGZlLDB4MTIsMHg1ZSwweDVkLDB4NzMs MHhmYiwweDc1CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweGNk LDB4MmMsMHhmZiwweDE0LDB4NjksMHgzZSwweDRjLDB4OWUsMHhmZCwweGZlLDB4MjYsMHgwZCwK KysJMHhlOSwweDg2LDB4MDAsMHg0OSwweDMwLDB4YmEsMHhiMSwweGM2LDB4NTAsMHg1NywweDc3 LDB4MmEsCisrCTB4NjIsMHgzOSwweDJjLDB4M2IsMHg3NCwweGViLDB4YzksMHgwZAorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZf dXNlX2RmX3JldHVybmVkYml0c1tdID0KKysJeworKwkweDRmLDB4NzgsMHhiZSwweGI5LDB4NGQs MHg5NywweDhjLDB4ZTksMHhkMCwweDk3LDB4ZmUsMHhhZCwKKysJMHhmYSwweGZkLDB4MzUsMHg1 ZQorKwl9OworKworKworKy8qIEFFUy0xMjggbm8gZGYgUFIgICovCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9lbnRyb3B5aW5w dXRbXSA9CisrCXsKKysJMHg5YSwweDI1LDB4NjUsMHgxMCwweDY3LDB4ZDUsMHhiNiwweDZiLDB4 NzAsMHhhMSwweGIzLDB4YTQsCisrCTB4NDMsMHg5NSwweDgwLDB4YzAsMHg4NCwweDBhLDB4Nzks MHhiMCwweDg4LDB4NzQsMHhmMiwweGJmLAorKwkweDMxLDB4NmMsMHgzMywweDM4LDB4MGIsMHgw MCwweGIyLDB4NWEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX25vbmNlW10gPQorKwl7CisrCTB4NzgsMHg0Nyww eDZiLDB4ZjcsMHg5MCwweDhlLDB4ODcsMHhmMQorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfcGVyc29uYWxpemF0 aW9uc3RyaW5nW10gPQorKwl7CisrCTB4ZjcsMHgyMiwweDFkLDB4M2EsMHhiZSwweDFkLDB4Y2Es MHgzMiwweDFiLDB4YmQsMHg4NywweDBjLAorKwkweDUxLDB4MjQsMHgxOSwweGVlLDB4YTMsMHgy MywweDA5LDB4NjMsMHgzMywweDNkLDB4YTgsMHgwYywKKysJMHgxYywweGZhLDB4NDIsMHg4OSww eGNjLDB4NmYsMHhhMCwweGE4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Cisr CXsKKysJMHhjOSwweGUwLDB4ODAsMHhiZiwweDhjLDB4NDUsMHg1OCwweDM5LDB4ZmYsMHgwMCww eGFiLDB4MDIsCisrCTB4NGMsMHgzZSwweDNhLDB4OTUsMHg5YiwweDgwLDB4YTgsMHgyMSwweDJh LDB4ZWUsMHhiYSwweDczLAorKwkweGIxLDB4ZDksMHhjZiwweDI4LDB4ZjYsMHg4ZiwweDliLDB4 MTIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTI4X25vX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4NGMsMHhhOCww eGM1LDB4ZjAsMHg1OSwweDllLDB4YTYsMHg4ZCwweDI2LDB4NTMsMHhkNywweDhhLAorKwkweGE5 LDB4ZDgsMHhmNywweGVkLDB4YjIsMHhmOSwweDEyLDB4NDIsMHhlMSwweGU1LDB4YmQsMHhlNywK KysJMHhlNywweDFkLDB4NzQsMHg5OSwweDAwLDB4OWQsMHgzMSwweDNlCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9w cl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZTIsMHhhYywweDIwLDB4ZjAsMHg4MCww eGU3LDB4YmMsMHg3ZSwweDljLDB4N2IsMHg2NSwweDcxLAorKwkweGFmLDB4MTksMHgzMiwweDE2 CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzEyOF9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4MzIsMHg3Ziww eDM4LDB4OGIsMHg3MywweDBhLDB4NzgsMHg4MywweGRjLDB4MzAsMHhiZSwweDlmLAorKwkweDEw LDB4MWYsMHhmNSwweDFmLDB4Y2EsMHgwMCwweGI1LDB4MGQsMHhkNiwweDlkLDB4NjAsMHg4MywK KysJMHg1MSwweDU0LDB4N2QsMHgzOCwweDIzLDB4M2EsMHg1MiwweDUwCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9w cl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHgxOCwweDYxLDB4NTMsMHg1NiwweGVkLDB4 ZWQsMHhkNywweDIwLDB4ZmIsMHg3MSwweDA0LDB4N2EsCisrCTB4YjIsMHhhYywweGMxLDB4Mjgs MHhjZCwweGYyLDB4YzIsMHhmYywweGFhLDB4YjEsMHgwNiwweDA3LAorKwkweGU5LDB4NDYsMHg5 NSwweDAyLDB4NDgsMHgwMSwweDc4LDB4ZjkKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX3JldHVybmVkYml0c1td ID0KKysJeworKwkweDI5LDB4YzgsMHgxYiwweDE1LDB4YjEsMHhkMSwweGMyLDB4ZjYsMHg3MSww eDg2LDB4NjgsMHgzMywKKysJMHg1NywweDgyLDB4MzMsMHhhZgorKwl9OworKworKworKy8qIEFF Uy0xMjggbm8gZGYgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHhjOSww eGM1LDB4NzksMHhiYywweGU4LDB4YzUsMHgxOSwweGQ4LDB4YmMsMHg2NiwweDczLDB4NjcsCisr CTB4ZjYsMHhkMywweDcyLDB4YWEsMHhhNiwweDE2LDB4YjgsMHg1MCwweGI3LDB4NDcsMHgzYSww eDQyLAorKwkweGFiLDB4ZjQsMHgxNiwweGIyLDB4OTYsMHhkMiwweGI2LDB4NjAKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25v X2RmX25vbmNlW10gPQorKwl7CisrCTB4NWYsMHhiZiwweDk3LDB4MGMsMHg0YiwweGE0LDB4ODcs MHgxMworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xMjhfbm9fZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4Y2Us MHhmYiwweDdiLDB4M2YsMHhkNCwweDZiLDB4MjksMHgwZCwweDY5LDB4MDYsMHhmZiwweGJiLAor KwkweGYyLDB4ZTUsMHhjNiwweDZjLDB4MGEsMHgxMCwweGEwLDB4Y2YsMHgxYSwweDQ4LDB4Yzcs MHg4YiwKKysJMHgzYywweDE2LDB4ODgsMHhlZCwweDUwLDB4MTMsMHg4MSwweGNlCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9u b19kZl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg0YiwweDIyLDB4NDYsMHgxOCwweDAy LDB4N2IsMHhkMiwweDFiLDB4MjIsMHg0MiwweDdjLDB4MzcsCisrCTB4ZDksMHhmNiwweGU4LDB4 OWIsMHgxMiwweDMwLDB4NWYsMHhlOSwweDkwLDB4ZTgsMHgwOCwweDI0LAorKwkweDRmLDB4MDYs MHg2NiwweGRiLDB4MTksMHgyYiwweDEzLDB4OTUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2ludF9yZXR1cm5lZGJp dHNbXSA9CisrCXsKKysJMHgyZSwweDk2LDB4NzAsMHg2NCwweGZhLDB4ZGYsMHhkZiwweDU3LDB4 YjUsMHg4MiwweGVlLDB4ZDYsCisrCTB4ZWQsMHgzZSwweDY1LDB4YzIKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2Vu dHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDI2LDB4YzAsMHg3MiwweDE2LDB4M2EsMHg0 YiwweGI3LDB4OTksMHhkNCwweDA3LDB4YWYsMHg2NiwKKysJMHg2MiwweDM2LDB4OTYsMHhhNCww eDUxLDB4MTcsMHhmYSwweDA3LDB4OGIsMHgxNywweDVlLDB4YTEsCisrCTB4MmYsMHgzYywweDEw LDB4ZTcsMHg5MCwweGQwLDB4NDYsMHgwMAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfYWRkaXRpb25hbGlucHV0cmVz ZWVkW10gPQorKwl7CisrCTB4ODMsMHgzOSwweDM3LDB4N2IsMHgwMiwweDA2LDB4ZDIsMHgxMiww eDEzLDB4OGQsMHg4YiwweGYyLAorKwkweGYwLDB4ZjYsMHgyNiwweGViLDB4YTQsMHgyMiwweDdi LDB4YzIsMHhlNywweGJhLDB4NzksMHhlNCwKKysJMHgzYiwweDc3LDB4NWQsMHg0ZCwweDQ3LDB4 YjIsMHgyZCwweGI0CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4 MGIsMHhiOSwweDY3LDB4MzcsMHhkYiwweDgzLDB4ZGYsMHhjYSwweDgxLDB4OGIsMHhmOSwweDNm LAorKwkweGYxLDB4MTEsMHgxYiwweDJmLDB4ZjAsMHg2MSwweGE2LDB4ZGYsMHhiYSwweGEzLDB4 YjEsMHhhYywKKysJMHhkMywweGU2LDB4MDksMHhiOCwweDJjLDB4NmEsMHg2NywweGQ2CisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEy OF9ub19kZl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHgxZSwweGE3LDB4YTQsMHhlNCwweGUx LDB4YTYsMHg3YywweDY5LDB4OWEsMHg0NCwweDZjLDB4MzYsCisrCTB4ODEsMHgzNywweDE5LDB4 ZDQKKysJfTsKKysKKysKKysvKiBBRVMtMTkyIG5vIGRmIFBSICAqLworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfZW50cm9weWlu cHV0W10gPQorKwl7CisrCTB4OWQsMHgyYywweGQyLDB4NTUsMHg2NiwweGVhLDB4ZTAsMHhiZSww eDE4LDB4YjcsMHg3NiwweGU3LAorKwkweDczLDB4MzUsMHhkOCwweDFmLDB4YWQsMHgzYSwweGUz LDB4ODEsMHgwZSwweDkyLDB4ZDAsMHg2MSwKKysJMHhjOSwweDEyLDB4MjYsMHhmNiwweDFjLDB4 ZGYsMHhmZSwweDQ3LDB4YWEsMHhmZSwweDdkLDB4NWEsCisrCTB4MTcsMHgxZiwweDhkLDB4OWEK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTkyX25vX2RmX3ByX25vbmNlW10gPQorKwl7CisrCTB4NDQsMHg4MiwweGVkLDB4ZTgsMHg0 YywweDI4LDB4NWEsMHgxNCwweGZmLDB4ODgsMHg4ZCwweDE5LAorKwkweDYxLDB4NWMsMHhlZSww eDBmCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzE5Ml9ub19kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg0 NywweGQ3LDB4OWIsMHg5OSwweGFhLDB4Y2IsMHhlNywweGQyLDB4NTcsMHg2NiwweDJjLDB4ZTEs CisrCTB4NzgsMHhkNiwweDJjLDB4ZWEsMHhhMywweDIzLDB4NWYsMHgyYSwweGMxLDB4M2EsMHhm MCwweGE0LAorKwkweDIwLDB4M2IsMHhmYSwweDA3LDB4ZDUsMHgwNSwweDAyLDB4ZTQsMHg1Nyww eDAxLDB4YjYsMHgxMCwKKysJMHg1NywweDJlLDB4ZTcsMHg1NQorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfYWRk aXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4NGIsMHg3NCwweDBiLDB4NDAsMHhjZSwweDZiLDB4 YzIsMHg2YSwweDI0LDB4YjQsMHhmMywweGFkLAorKwkweDdhLDB4YTUsMHg3YSwweGEyLDB4MTUs MHhlMiwweGM4LDB4NjEsMHgxNSwweGM2LDB4YjcsMHg4NSwKKysJMHg2OSwweDExLDB4YWQsMHg3 YiwweDE0LDB4ZDIsMHhmNiwweDEyLDB4YTEsMHg5NSwweDVkLDB4M2YsCisrCTB4ZTIsMHhkMCww eDBjLDB4MmYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4MGMs MHg5YywweGFkLDB4MDUsMHhlZSwweGFlLDB4NDgsMHgyMywweDg5LDB4NTksMHhhMSwweDk0LAor KwkweGQ3LDB4ZDgsMHg3NSwweGQ1LDB4NTQsMHg5MywweGM3LDB4NGEsMHhkOSwweDI2LDB4ZGUs MHhlYiwKKysJMHhiYSwweGIwLDB4N2UsMHgzMCwweDFkLDB4NWYsMHg2OSwweDQwLDB4OWMsMHgz YiwweDE3LDB4NTgsCisrCTB4MWQsMHgzMCwweGIzLDB4NzgKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2ludF9y ZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhmNywweDkzLDB4YjAsMHg2ZCwweDc3LDB4ODMsMHhk NSwweDM4LDB4MDEsMHhlMSwweDUyLDB4NDAsCisrCTB4N2UsMHgzZSwweDBjLDB4MjYKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTky X25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHhiYywweDRiLDB4MzcsMHg0 NCwweDFjLDB4YzUsMHg0NSwweDVmLDB4OGYsMHg1MSwweDYyLDB4OGEsCisrCTB4ODUsMHgzMCww eDFkLDB4N2MsMHhlNCwweGNmLDB4ZjcsMHg0NCwweGNlLDB4MzIsMHgzZSwweDU3LAorKwkweDk1 LDB4YTQsMHgyYSwweGRmLDB4ZmQsMHg5ZSwweDM4LDB4NDEsMHhiMywweGY2LDB4YzUsMHhlZSwK KysJMHgwYywweDRiLDB4ZWUsMHg2ZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfZW50cm9weWlucHV0cHIyW10g PQorKwl7CisrCTB4ZWMsMHhhZiwweGY2LDB4NGYsMHhiMSwweGEwLDB4NTQsMHhiNSwweDViLDB4 ZTMsMHg0NiwweGIwLAorKwkweDc2LDB4NWEsMHg3YywweDNmLDB4N2IsMHg5NCwweDY5LDB4MjEs MHg1MSwweDAyLDB4ZTUsMHg5ZiwKKysJMHgwNCwweDU5LDB4MDIsMHg5OCwweGM2LDB4NDMsMHgy YywweGNjLDB4MjYsMHg0YywweDg3LDB4NmIsCisrCTB4OGUsMHgwYSwweDgzLDB4ZGYKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTky X25vX2RmX3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkweDc0LDB4NDUsMHhmYiwweDUzLDB4 ODQsMHg5NiwweGJlLDB4ZmYsMHgxNSwweGNjLDB4NDEsMHg5MSwKKysJMHhiOSwweGExLDB4MjEs MHg2OAorKwl9OworKworKworKy8qIEFFUy0xOTIgbm8gZGYgTm8gUFIgICovCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9lbnRyb3B5 aW5wdXRbXSA9CisrCXsKKysJMHgzYywweDdkLDB4YjUsMHhlMCwweDU0LDB4ZDksMHg2ZSwweDhj LDB4YTksMHg4NiwweGNlLDB4NGUsCisrCTB4NmIsMHhhZiwweGViLDB4MmYsMHhlNywweDc1LDB4 ZTAsMHg4YiwweGE0LDB4M2IsMHgwNywweGZlLAorKwkweGJlLDB4MzMsMHg3NSwweDkzLDB4ODAs MHgyNywweGI1LDB4MjksMHg0NywweDhiLDB4YzcsMHgyOCwKKysJMHg5NCwweGMzLDB4NTksMHg2 MworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xOTJfbm9fZGZfbm9uY2VbXSA9CisrCXsKKysJMHg0MywweGYxLDB4N2QsMHhiOCwweGMz LDB4ZmUsMHhkMCwweDIzLDB4NmIsMHhiNCwweDkyLDB4ZGIsCisrCTB4MjksMHhmZCwweDQ1LDB4 NzEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTkyX25vX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDlmLDB4 MjQsMHgyOSwweDk5LDB4OWUsMHgwMSwweGFiLDB4ZTksMHgxOSwweGQ4LDB4MjMsMHgwOCwKKysJ MHhiNywweGQ2LDB4N2UsMHg4YywweGMwLDB4OWUsMHg3ZiwweDZlLDB4NWIsMHgzMywweDIwLDB4 OTYsCisrCTB4MGIsMHgyMywweDJjLDB4YTUsMHg2YSwweGY4LDB4MWIsMHgwNCwweDI2LDB4ZGIs MHgyZSwweDJiLAorKwkweDNiLDB4ODgsMHhjZSwweDM1CisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9hZGRpdGlvbmFs aW5wdXRbXSA9CisrCXsKKysJMHg5NCwweGU5LDB4N2MsMHgzZCwweGE3LDB4ZGIsMHg2MCwweDgz LDB4MWYsMHg5OCwweDNmLDB4MGIsCisrCTB4ODgsMHg1OSwweDU3LDB4NTEsMHg4OCwweDlmLDB4 NzYsMHg0OSwweDlmLDB4YTYsMHhkYSwweDcxLAorKwkweDFkLDB4MGQsMHg0NywweDE2LDB4NjMs MHhjNSwweDY4LDB4ZTQsMHg1ZCwweDM5LDB4NjksMHhiMywKKysJMHgzZSwweGJlLDB4ZDQsMHg4 ZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xOTJfbm9fZGZfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGY5LDB4ZDcsMHhh ZCwweDY5LDB4YWIsMHg4ZiwweDIzLDB4NTYsMHg3MCwweDE3LDB4NGYsMHgyYSwKKysJMHg0NSww eGU3LDB4NGEsMHhjNQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7Cisr CTB4YTYsMHg3MSwweDZhLDB4M2QsMHhiYSwweGQxLDB4ZTgsMHg2NiwweGE2LDB4ZWYsMHhiMiww eDBlLAorKwkweGE4LDB4OWMsMHhhYSwweDRlLDB4YWYsMHgxNywweDg5LDB4NTAsMHgwMCwweGRh LDB4YTEsMHhiMSwKKysJMHgwYiwweGE0LDB4ZDksMHgzNSwweDg5LDB4YzgsMHhlNSwweGIwLDB4 ZDksMHhiNywweGM0LDB4MzMsCisrCTB4OWIsMHhjYiwweDdlLDB4NzUKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2Fk ZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDI3LDB4MjEsMHhmYywweGMyLDB4YmQs MHhmMywweDNjLDB4Y2UsMHhjMywweGNhLDB4YzEsMHgwMSwKKysJMHhlMCwweGZmLDB4OTMsMHgx MiwweDdkLDB4NTQsMHg0MiwweGUzLDB4OWYsMHgwMywweGRmLDB4MjcsCisrCTB4MDQsMHgwNyww eDNjLDB4NTMsMHg3ZiwweGE4LDB4NjYsMHhjOCwweDk3LDB4NGIsMHg2MSwweDQwLAorKwkweDVk LDB4N2EsMHgyNSwweDc5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7Cisr CTB4MmQsMHg4ZSwweDE2LDB4NWQsMHgwYiwweDlmLDB4ZWIsMHhhYSwweGQ2LDB4ZWMsMHgyOCww eDcxLAorKwkweDdjLDB4MGIsMHhjMSwweDFkLDB4ZDQsMHg0NCwweDE5LDB4NDcsMHhmZCwweDFk LDB4N2MsMHhlNSwKKysJMHhmMywweDI3LDB4ZTEsMHhiNiwweDcyLDB4MGEsMHhlMCwweGVjLDB4 MGUsMHhjZCwweGVmLDB4MWEsCisrCTB4OTEsMHg2YSwweGUzLDB4NWYKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3Jl dHVybmVkYml0c1tdID0KKysJeworKwkweGU1LDB4ZGEsMHhiOCwweGUwLDB4NjMsMHg1OSwweDVh LDB4Y2MsMHgzZCwweGRjLDB4OWYsMHhlOCwKKysJMHg2NiwweDY3LDB4MmMsMHg5MgorKwl9Owor KworKworKy8qIEFFUy0yNTYgbm8gZGYgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9lbnRyb3B5aW5wdXRbXSA9Cisr CXsKKysJMHgxNSwweGM3LDB4NWQsMHhjYiwweDQxLDB4NGIsMHgxNiwweDAxLDB4M2EsMHhkMSww eDQ0LDB4ZTgsCisrCTB4MjIsMHgzMiwweGM2LDB4OWMsMHgzZiwweGU3LDB4NDMsMHhmNSwweDlh LDB4ZDMsMHhlYSwweGYyLAorKwkweGQ3LDB4NGUsMHg2ZSwweDZhLDB4NTUsMHg3MywweDQwLDB4 ZWYsMHg4OSwweGFkLDB4MGQsMHgwMywKKysJMHg5NiwweDdlLDB4NzgsMHg4MSwweDJmLDB4OTEs MHgxYiwweDQ0LDB4YjAsMHgwMiwweGJhLDB4MWMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX25vbmNlW10gPQor Kwl7CisrCTB4ZGMsMHhlNCwweGQ0LDB4MjcsMHg3YSwweDkwLDB4ZDcsMHg5OSwweDQzLDB4YTEs MHgzYywweDMwLAorKwkweGNjLDB4NGIsMHhlZSwweDJlCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9wZXJzb25h bGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHhlMywweGU2LDB4YjksMHgxMSwweGU0LDB4N2Es MHhhNCwweDQwLDB4NmIsMHhmOCwweDczLDB4ZjcsCisrCTB4N2UsMHhlYywweGM3LDB4YjksMHg5 NywweGJmLDB4ZjgsMHgyNSwweDdiLDB4YmUsMHgxMSwweDliLAorKwkweDViLDB4NmEsMHgwYyww eDJlLDB4MmIsMHgwMSwweDUxLDB4Y2QsMHg0MSwweDRiLDB4NmIsMHhhYywKKysJMHgzMSwweGE4 LDB4MGIsMHhmNywweGU2LDB4NTksMHg0MiwweGI4LDB4MDMsMHgwYywweGY4LDB4MDYKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2 X25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDZhLDB4OWYsMHgwMCwweDkx LDB4YWUsMHhmZSwweGNmLDB4ODQsMHg5OSwweGNlLDB4YjEsMHg0MCwKKysJMHg2ZCwweDVkLDB4 MzMsMHgyOCwweDg0LDB4ZjQsMHg4YywweDYzLDB4NGMsMHg3ZSwweGJkLDB4MmMsCisrCTB4ODAs MHg3NiwweGVlLDB4NWEsMHhhYSwweDE1LDB4MDcsMHgzMSwweGQ4LDB4YmIsMHg4YywweDY5LAor KwkweDlkLDB4OWQsMHhiYywweDdlLDB4NDksMHhhZSwweGVjLDB4MzksMHg2YiwweGQxLDB4MWYs MHg3ZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18yNTZfbm9fZGZfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHhmMywweGI5 LDB4NzUsMHg5YywweGJkLDB4ODgsMHhlYSwweGEyLDB4NTAsMHhhZCwweGQ2LDB4MTYsCisrCTB4 MWEsMHgxMiwweDNjLDB4ODYsMHg2OCwweGFmLDB4NmYsMHhiZSwweDE5LDB4ZjIsMHhlZSwweGNj LAorKwkweGE1LDB4NzAsMHg4NCwweDUzLDB4NTAsMHhjYiwweDlmLDB4MTQsMHhhOSwweGU1LDB4 ZWUsMHhiOSwKKysJMHg0OCwweDQ1LDB4NDAsMHhlMiwweGM3LDB4YzksMHg5YSwweDc0LDB4ZmYs MHg4YywweDk5LDB4MWYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsK KysJMHgyZSwweGYyLDB4NDUsMHg0YywweDYyLDB4MmUsMHgwYSwweGI5LDB4NmIsMHhhMiwweGZk LDB4NTYsCisrCTB4NzksMHg2MCwweDkzLDB4Y2YKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2FkZGl0aW9uYWxp bnB1dDJbXSA9CisrCXsKKysJMHhhZiwweDY5LDB4MjAsMHhlOSwweDNiLDB4MzcsMHg5ZCwweDNm LDB4YjQsMHg4MCwweDAyLDB4N2EsCisrCTB4MjUsMHg3ZCwweGI4LDB4ZGUsMHg3MSwweGM1LDB4 MDYsMHgwYywweGI0LDB4ZTIsMHg4ZiwweDM1LAorKwkweGQ4LDB4MTQsMHgwZCwweDdmLDB4NzYs MHg2MywweDRlLDB4YjUsMHhlZSwweGU5LDB4NmYsMHgzNCwKKysJMHhjNywweDVmLDB4NTYsMHgx NCwweDRhLDB4ZTgsMHg3MywweDk1LDB4NWIsMHgxYywweGI5LDB4Y2IKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3By X2VudHJvcHlpbnB1dHByMltdID0KKysJeworKwkweGU1LDB4YjAsMHgyZSwweDdlLDB4NTIsMHgz MCwweGUzLDB4NjMsMHg4MiwweGI2LDB4NDQsMHhkMywKKysJMHgyNSwweDE5LDB4MDUsMHgyNCww eDlhLDB4OWYsMHg1ZiwweDI3LDB4NmEsMHgyOSwweGFiLDB4ZmEsCisrCTB4MDcsMHhhMiwweDQy LDB4MGYsMHhjNSwweGE4LDB4OTQsMHg3YywweDE3LDB4N2IsMHg4NSwweDgzLAorKwkweDBjLDB4 MjUsMHgwZSwweDYzLDB4MGIsMHhlOSwweDEyLDB4NjAsMHhjZCwweGVmLDB4ODAsMHgwZgorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18y NTZfbm9fZGZfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4NWUsMHhmMiwweDI2LDB4ZWYs MHg5ZiwweDU4LDB4NWQsMHhkNSwweDRhLDB4MTAsMHhmZSwweGE3LAorKwkweDJkLDB4NWYsMHg0 YSwweDQ2CisrCX07CisrCisrCisrLyogQUVTLTI1NiBubyBkZiBObyBQUiAgKi8KKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2VudHJv cHlpbnB1dFtdID0KKysJeworKwkweGZiLDB4Y2YsMHgxYiwweDYxLDB4MTYsMHg4OSwweDc4LDB4 MjMsMHhmNSwweGQ4LDB4OTYsMHhlMywKKysJMHg0ZSwweDY0LDB4MGIsMHgyOSwweDlhLDB4M2Ys MHhmOCwweGE1LDB4ZWQsMHhmMiwweGZlLDB4ZGIsCisrCTB4MTYsMHhjYSwweDdmLDB4MTAsMHhm YSwweDVlLDB4MTgsMHg3NiwweDJjLDB4NjMsMHg1ZSwweDk2LAorKwkweGNmLDB4YjMsMHhkNiww eGZjLDB4YWYsMHg5OSwweDM5LDB4MjgsMHg5YywweDYxLDB4ZTgsMHhiMworKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZf bm9uY2VbXSA9CisrCXsKKysJMHgxMiwweDk2LDB4ZjAsMHg1MiwweGYzLDB4OGQsMHg4MSwweGNm LDB4ZGUsMHg4NiwweGYyLDB4OTksCisrCTB4NDMsMHg5NiwweGI5LDB4ZjAKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2Rm X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDYzLDB4MGQsMHg3OCwweGY1LDB4 OTAsMHg4ZSwweDMyLDB4NDcsMHhiMCwweDRkLDB4MzcsMHg2MCwKKysJMHgwOSwweDk2LDB4YmMs MHhiZiwweDk3LDB4N2EsMHg2MiwweDE0LDB4NDUsMHhiZCwweDhkLDB4Y2MsCisrCTB4NjksMHhm YiwweDAzLDB4ZTEsMHg4MCwweDFjLDB4YzcsMHhlMiwweDJhLDB4ZjksMHgzNywweDNmLAorKwkw eDY2LDB4NGQsMHg2MiwweGQ5LDB4MTAsMHhlMCwweGFkLDB4YzgsMHg5YSwweGYwLDB4YTgsMHg2 ZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18yNTZfbm9fZGZfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4MzYsMHhjNiwweDEz LDB4NjAsMHhiYiwweDE0LDB4YWQsMHgyMiwweGIwLDB4MzgsMHhhYywweGE2LAorKwkweDE4LDB4 MTYsMHg5MywweDI1LDB4ODYsMHhiNywweGRjLDB4ZGMsMHgzNiwweDk4LDB4MmIsMHhmOSwKKysJ MHg2OCwweDMzLDB4ZDMsMHhjNiwweGZmLDB4Y2UsMHg4ZCwweDE1LDB4NTksMHg4MiwweDc2LDB4 ZWQsCisrCTB4NmYsMHg4ZCwweDQ5LDB4NzQsMHgyZiwweGRhLDB4ZGMsMHgxZiwweDE3LDB4ZDAs MHhkZSwweDE3CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MTYs MHgyZiwweDhlLDB4M2YsMHgyMSwweDdhLDB4MWMsMHgyMCwweDU2LDB4ZDEsMHg5MiwweGY2LAor KwkweGQyLDB4MjUsMHg3NSwweDBlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9 CisrCXsKKysJMHg5MSwweDc5LDB4NzYsMHhlZSwweGUwLDB4Y2YsMHg5ZSwweGMyLDB4ZDUsMHhk NCwweDIzLDB4OWIsCisrCTB4MTIsMHg4YywweDdlLDB4MGEsMHhiNywweGQyLDB4OGIsMHhkNiww eDdjLDB4YTMsMHhjNiwweGU1LAorKwkweDBlLDB4YWEsMHhjNywweDZiLDB4YWUsMHgwZCwweGZh LDB4NTMsMHgwNiwweDc5LDB4YTEsMHhlZCwKKysJMHg0ZCwweDZhLDB4MGUsMHhkOCwweDlkLDB4 YmUsMHgxYiwweDMxLDB4OTMsMHg3YiwweGVjLDB4ZmIKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2FkZGl0aW9uYWxp bnB1dHJlc2VlZFtdID0KKysJeworKwkweGQyLDB4NDYsMHg1MCwweDIyLDB4MTAsMHgxNCwweDYz LDB4ZjcsMHhlYSwweDBmLDB4YjksMHg3ZSwKKysJMHgwZCwweGUxLDB4OTQsMHgwNywweGFmLDB4 MDksMHg0NCwweDMxLDB4ZWEsMHg2NCwweGE0LDB4MTgsCisrCTB4NWIsMHhmOSwweGQ4LDB4YzIs MHhmYSwweDAzLDB4NDcsMHhjNSwweDM5LDB4NDMsMHhkNSwweDNiLAorKwkweDYyLDB4ODYsMHg2 NCwweGVhLDB4MmMsMHg3MywweDhjLDB4YWUsMHg5ZCwweDk4LDB4OTgsMHgyOQorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9f ZGZfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDhjLDB4YWIsMHgxOCwweGY4LDB4YzMs MHhlYywweDE4LDB4NWMsMHhiMywweDFlLDB4OWQsMHhiZSwKKysJMHgzZiwweDAzLDB4YjQsMHgw MCwweDk4LDB4OWQsMHhhZSwweGViLDB4ZjQsMHg5NCwweGY4LDB4NDIsCisrCTB4OGYsMHhlMyww eDM5LDB4MDcsMHhlMSwweGM5LDB4YWQsMHgwYiwweDFmLDB4ZWQsMHhjMCwweGJhLAorKwkweGY2 LDB4ZDEsMHhlYywweDI3LDB4ODYsMHg3YiwweGQ2LDB4NTUsMHg5YiwweDYwLDB4YTUsMHhjNgor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18yNTZfbm9fZGZfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZWYsMHhkMiwweGQ4LDB4NWMs MHhkYywweDYyLDB4MjUsMHg5ZiwweGFhLDB4MWUsMHgyYywweDY3LAorKwkweGY2LDB4MDIsMHgz MiwweGUyCisrCX07CisrCisrCisrLyogU0hBLTEgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsK KysJMHhkMiwweDM2LDB4YTUsMHgyNywweDMxLDB4NzMsMHhkZCwweDExLDB4NGYsMHg5MywweGJk LDB4ZTIsCisrCTB4MzEsMHhhNSwweDkxLDB4MTMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX25vbmNlW10gPQorKwl7CisrCTB4 YjUsMHhiMywweDYwLDB4ZWYsMHhmNywweDYzLDB4MzEsMHhmMworKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfcGVyc29uYWxpemF0 aW9uc3RyaW5nW10gPQorKwl7CisrCTB4ZDQsMHhiYiwweDAyLDB4MTAsMHhiMiwweDcxLDB4ZGIs MHg4MSwweGQ2LDB4ZjAsMHg0MiwweDYwLAorKwkweGRhLDB4ZWEsMHg3NywweDUyCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9h ZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg0ZCwweGQyLDB4NmMsMHg4NywweGZiLDB4MmMs MHg0ZiwweGE2LDB4OGQsMHgxNiwweDYzLDB4MjIsCisrCTB4NmEsMHg1MSwweGUzLDB4ZjgKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEx X3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4YzksMHg4MywweDllLDB4MTYsMHhmNiww eDFjLDB4MGYsMHhiMiwweGVjLDB4NjAsMHgzMSwweGE5LAorKwkweGNiLDB4YTksMHgzNiwweDdh CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMV9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4YTgsMHgxMywweDRmLDB4ZjQs MHgzMSwweDAyLDB4NDQsMHhlMywweGQzLDB4M2QsMHg2MSwweDllLAorKwkweGU1LDB4YzYsMHgz ZSwweDg5LDB4YjUsMHg5YiwweDBmLDB4MzUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Cisr CXsKKysJMHhmOSwweGU4LDB4ZDIsMHg3MiwweDEzLDB4MzQsMHg5NSwweDZmLDB4MTUsMHg0OSww eDQ3LDB4OTksCisrCTB4MTYsMHgwMywweDE5LDB4NDcKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2VudHJvcHlpbnB1dHByMltd ID0KKysJeworKwkweDRlLDB4OGMsMHg0OSwweDliLDB4NGEsMHg1YywweDliLDB4OWMsMHgzYSww eGVlLDB4ZmIsMHhkMiwKKysJMHhhZSwweGNkLDB4OGMsMHhjNAorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfcmV0dXJuZWRiaXRz W10gPQorKwl7CisrCTB4NTAsMHhiNCwweGI0LDB4Y2QsMHg2OCwweDU3LDB4ZmMsMHgyZSwweGMx LDB4NTIsMHhjYywweGY2LAorKwkweDY4LDB4YTQsMHg4MSwweGVkLDB4N2UsMHhlNCwweDFkLDB4 ODcKKysJfTsKKysKKysKKysvKiBTSEEtMSBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkw eGE5LDB4NDcsMHgxYiwweDI5LDB4MmQsMHgxYywweDA1LDB4ZGYsMHg3NiwweGQwLDB4NjIsMHhm OSwKKysJMHhlMiwweDdmLDB4NGMsMHg3YgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfbm9uY2VbXSA9CisrCXsKKysJMHg1MywweDIz LDB4MjQsMHhlMywweGVjLDB4MGMsMHg1NCwweDE0CisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wZXJzb25hbGl6YXRpb25zdHJpbmdb XSA9CisrCXsKKysJMHg3YSwweDg3LDB4YTEsMHhhYywweDFjLDB4ZmQsMHhhYiwweGFlLDB4Zjcs MHhkNiwweGZiLDB4NzYsCisrCTB4MjgsMHhlYywweDZkLDB4Y2EKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2FkZGl0aW9uYWxpbnB1 dFtdID0KKysJeworKwkweGZjLDB4OTIsMHgzNSwweGQ2LDB4N2UsMHhiNywweDI0LDB4NjUsMHhm ZCwweDEyLDB4MjcsMHgzNSwKKysJMHhjMCwweDcyLDB4Y2EsMHgyOAorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfaW50X3JldHVybmVk Yml0c1tdID0KKysJeworKwkweDU3LDB4ODgsMHg4MiwweGU1LDB4MjUsMHhhNSwweDJjLDB4NGEs MHgwNiwweDIwLDB4NmMsMHg3MiwKKysJMHg1NSwweDYxLDB4ZGQsMHg5MCwweDcxLDB4OWYsMHg5 NSwweGVhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMV9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg2OSwweGE1LDB4NDAs MHg2MiwweDk4LDB4NDcsMHg1NiwweDczLDB4NGEsMHg4ZiwweDYwLDB4OTYsCisrCTB4ZDYsMHg5 OSwweDI3LDB4ZWQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGExX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweGU1LDB4 NDAsMHg0ZSwweGJkLDB4NTAsMHgwMCwweGY1LDB4MTUsMHhhNiwweGVlLDB4NDUsMHhkYSwKKysJ MHg4NCwweDNkLDB4ZDQsMHhjMAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDEx LDB4NTEsMHgxNCwweGYwLDB4MDksMHgxYiwweDRlLDB4NTYsMHgwZCwweGU5LDB4ZjYsMHgxZSwK KysJMHg1MiwweDY1LDB4Y2QsMHg5NgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4YTEs MHg5YywweDk0LDB4NmUsMHgyOSwweGUxLDB4MzMsMHgwZCwweDMyLDB4ZDYsMHhhYSwweGNlLAor KwkweDcxLDB4M2YsMHg1MiwweDcyLDB4OGIsMHg0MiwweGE4LDB4ZDcKKysJfTsKKysKKysKKysv KiBTSEEtMjI0IFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTIyNF9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHgxMiwweDY5LDB4MzIs MHg0ZiwweDgzLDB4YTYsMHhmNSwweDE0LDB4ZTMsMHg0OSwweDNlLDB4NzUsCisrCTB4M2UsMHhk ZSwweGFkLDB4YTEsMHgyOSwweGMzLDB4ZjMsMHgxOSwweDIwLDB4YjUsMHg0YywweGQ5CisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0 X3ByX25vbmNlW10gPQorKwl7CisrCTB4NmEsMHg3OCwweGQwLDB4ZWIsMHhiYiwweDVhLDB4ZjAs MHhlZSwweGU4LDB4YzMsMHhiYSwweDcxCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1td ID0KKysJeworKwkweGQ1LDB4YjgsMHhiNiwweGJjLDB4YzEsMHg1YiwweDYwLDB4MzEsMHgzYyww eGY1LDB4ZTUsMHhjMCwKKysJMHg4ZSwweDUyLDB4N2EsMHhiZCwweGVhLDB4NDcsMHhhOSwweDVm LDB4OGYsMHhmOSwweDhiLDB4YWUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7Cisr CTB4MWYsMHg1NSwweGVjLDB4YWUsMHgxNiwweDEyLDB4ODQsMHhiYSwweDg0LDB4MTYsMHgxOSww eDg4LAorKwkweDhlLDB4YjgsMHgzMywweDI1LDB4NTQsMHhmZiwweGNhLDB4NzksMHhhZiwweDA3 LDB4MjUsMHg1MAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTIyNF9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweDkyLDB4YTMs MHgzMiwweGE4LDB4OWEsMHgwYSwweDU4LDB4N2MsMHgxZCwweDVhLDB4N2UsMHhlMSwKKysJMHhi MiwweDczLDB4YWIsMHgwZSwweDE2LDB4NzksMHgyMywweGQzLDB4MjksMHg4OSwweDgxLDB4ZTEK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEyMjRfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGYzLDB4MzgsMHg5MSwweDQw LDB4MzcsMHg3YSwweDUxLDB4NzIsMHg0MiwweDc0LDB4NzgsMHgwYSwKKysJMHg2OSwweGZkLDB4 YTYsMHg0NCwweDQzLDB4NDUsMHg2YywweDBjLDB4NWEsMHgxOSwweGZmLDB4ZjEsCisrCTB4NTQs MHg2MCwweGVlLDB4NmEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEyMjRfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDc1 LDB4ZjMsMHgwNCwweDI1LDB4ZGQsMHgzNiwweGE4LDB4MzcsMHg0NiwweGFlLDB4MGMsMHg1MiwK KysJMHgwNSwweDc5LDB4NGMsMHgyNiwweGRiLDB4ZTksMHg3MSwweDE2LDB4NGMsMHgwYSwweGYy LDB4NjAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEyMjRfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4ZWEsMHhjNSwweDAz LDB4MGEsMHg0ZiwweGIwLDB4MzgsMHg4ZCwweDIzLDB4ZDQsMHhjOCwweDc3LAorKwkweGUyLDB4 NmQsMHg5YywweDBiLDB4NDQsMHhmNywweDJkLDB4NWIsMHhiZiwweDVkLDB4MmEsMHgxMQorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIy NF9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg2MCwweDUwLDB4MmIsMHhlNywweDg2LDB4 ZDgsMHgyNiwweDczLDB4ZTMsMHgxZCwweDk1LDB4MjAsCisrCTB4YjMsMHgyYywweDMyLDB4MWMs MHhmNSwweGNlLDB4NTcsMHhhNiwweDY3LDB4MmIsMHhkYywweDRlLAorKwkweGRkLDB4MTEsMHg0 YywweGM0CisrCX07CisrCisrCisrLyogU0hBLTIyNCBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfZW50cm9weWlucHV0W10gPQor Kwl7CisrCTB4YjIsMHgxYywweDc3LDB4NGQsMHhmNiwweGQzLDB4YjYsMHg0MCwweGI3LDB4MzAs MHgzZSwweDI5LAorKwkweGIwLDB4ODUsMHgxYywweGJlLDB4NGEsMHhlYSwweDZiLDB4NWEsMHhi NSwweDhhLDB4OTcsMHhlYgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9ub25jZVtdID0KKysJeworKwkweDQyLDB4MDIsMHgwYSww eDFjLDB4OTgsMHg5YSwweDc3LDB4OWUsMHg5ZiwweDgwLDB4YmEsMHhlMAorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wZXJzb25h bGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg5OCwweGI4LDB4MDQsMHg0MSwweGZjLDB4YzEs MHg1ZCwweGM1LDB4ZTksMHhiOSwweDA4LDB4ZGEsCisrCTB4ZjksMHhmYSwweDBkLDB4OTAsMHhj ZSwweGRmLDB4MWQsMHgxMCwweGE5LDB4OGQsMHg1MCwweDBjCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2FkZGl0aW9uYWxpbnB1 dFtdID0KKysJeworKwkweDlhLDB4OGQsMHgzOSwweDQ5LDB4NDIsMHhkNSwweDBiLDB4YWUsMHhl MSwweGFmLDB4YjcsMHgwMCwKKysJMHgwMiwweGZhLDB4OTYsMHhiMSwweGE1LDB4MWQsMHgyZCww eDI1LDB4NzgsMHhlZSwweDgzLDB4M2YKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfaW50X3JldHVybmVkYml0c1tdID0KKysJewor KwkweGU0LDB4ZjUsMHg1MywweDc5LDB4NWEsMHg5NywweDU4LDB4MDYsMHgwOCwweGJhLDB4N2Is MHhmYSwKKysJMHhmMCwweDgzLDB4MDUsMHg4YywweDIyLDB4YzAsMHhjOSwweGRiLDB4MTUsMHhl NywweGRlLDB4MjAsCisrCTB4NTUsMHgyMiwweDlhLDB4YWQKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfZW50cm9weWlucHV0cmVz ZWVkW10gPQorKwl7CisrCTB4NjcsMHgwOSwweDQ4LDB4YWEsMHgwNywweDE2LDB4OTksMHg4OSww eDdmLDB4NmQsMHhhMCwweGU1LAorKwkweDhmLDB4ZGYsMHhiYywweGRiLDB4ZmUsMHhlNSwweDZj LDB4N2EsMHg5NSwweDRhLDB4NjYsMHgxNworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9 CisrCXsKKysJMHgwZiwweDRiLDB4MWMsMHg2ZiwweGI3LDB4ZTMsMHg0NywweGU1LDB4NWQsMHg3 ZCwweDM4LDB4ZDYsCisrCTB4MjgsMHg5YiwweGViLDB4NTUsMHg2MywweDA5LDB4M2UsMHg3Yyww eDU2LDB4ZWEsMHhmOCwweDE5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHgy ZCwweDI2LDB4N2MsMHgzNywweGU0LDB4N2EsMHgyOCwweDVlLDB4NWEsMHgzYywweGFmLDB4M2Qs CisrCTB4NWEsMHg4ZSwweDU1LDB4YTIsMHgxYSwweDZlLDB4YzAsMHhlNSwweGY2LDB4MjEsMHhk MywweGY2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMjI0X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDRkLDB4ODMsMHgzNSwweGRm LDB4NjcsMHhhOSwweGZjLDB4MTcsMHhkYSwweDcwLDB4Y2MsMHg4YiwKKysJMHg3ZiwweDc3LDB4 YWUsMHhhMiwweDVmLDB4YjksMHg3ZSwweDc0LDB4NGMsMHgyNiwweGMxLDB4N2EsCisrCTB4M2Is MHhhNywweDVjLDB4OTMKKysJfTsKKysKKysKKysvKiBTSEEtMjU2IFBSICAqLworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9lbnRyb3B5aW5w dXRbXSA9CisrCXsKKysJMHhjZSwweDQ5LDB4MDAsMHg3YSwweDU2LDB4ZTMsMHg2NywweDhmLDB4 ZTEsMHhiNiwweGE3LDB4ZDQsCisrCTB4NGYsMHgwOCwweDdhLDB4MWIsMHgwMSwweGY0LDB4ZmEs MHg2YiwweGVmLDB4YjcsMHhlNSwweGViLAorKwkweDA3LDB4M2QsMHgxMSwweDBkLDB4YzgsMHhl YSwweDJiLDB4ZmUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEyNTZfcHJfbm9uY2VbXSA9CisrCXsKKysJMHg3MywweDQxLDB4YzgsMHg5 MiwweDk0LDB4ZTIsMHhjNSwweDVmLDB4OTMsMHhmZCwweDM5LDB4NWQsCisrCTB4MmIsMHg5MSww eDRkLDB4MzgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEyNTZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4NTAs MHg2ZCwweDAxLDB4MDEsMHgwNywweDVhLDB4ODAsMHgzNSwweDdhLDB4NTYsMHgxYSwweDU2LAor KwkweDJmLDB4OWEsMHgwYiwweDM1LDB4YjIsMHhiMSwweGM5LDB4ZTUsMHhjYSwweDY5LDB4NjEs MHg0OCwKKysJMHhmZiwweGZiLDB4MGYsMHhkOSwweDRiLDB4NzksMHgxZCwweGJhCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3By X2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDIwLDB4YjgsMHhkZiwweDQ0LDB4NzcsMHg1 YSwweGI4LDB4ZDMsMHhiZiwweGY2LDB4Y2YsMHhhYywKKysJMHg1ZSwweGE2LDB4OTYsMHg2Miww eDczLDB4NDQsMHg0MCwweDRhLDB4MzAsMHhmYiwweDM4LDB4YTUsCisrCTB4N2IsMHgwZCwweGU0 LDB4MGQsMHhjNiwweGU0LDB4OWEsMHgxZgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJ eworKwkweDA0LDB4YzQsMHg2NSwweGY0LDB4ZDMsMHhiZiwweDgzLDB4NGIsMHhhYiwweGM4LDB4 NDEsMHhhOCwKKysJMHhjMiwweGUwLDB4NDQsMHg2MywweDc3LDB4NGMsMHg2ZiwweDZjLDB4NDks MHg0NiwweGZmLDB4OTQsCisrCTB4MTcsMHhlYSwweGU2LDB4MWEsMHg5ZCwweDVlLDB4NjYsMHg3 OAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTI1Nl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MDcsMHg0ZCwweGFjLDB4 OWIsMHg4NiwweGNhLDB4NGEsMHhhYSwweDZlLDB4N2EsMHgwMywweGEyLAorKwkweDVkLDB4MTAs MHhlYSwweDBiLDB4ZjksMHg4MywweGNjLDB4ZDEsMHhmYywweGUyLDB4MDcsMHhjNywKKysJMHgw NiwweDM0LDB4NjAsMHg2ZiwweDgzLDB4OTQsMHg5OSwweDc2CisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2FkZGl0aW9uYWxp bnB1dDJbXSA9CisrCXsKKysJMHg4OSwweDRlLDB4NDUsMHg4YywweDExLDB4ZjksMHhiYywweDVi LDB4YWMsMHg3NCwweDhiLDB4NGIsCisrCTB4NWYsMHhmNywweDE5LDB4ZjMsMHhmNSwweDI0LDB4 NTQsMHgxNCwweGQxLDB4MTUsMHhiMSwweDQzLAorKwkweDEyLDB4YTQsMHg1ZiwweGQ0LDB4ZWMs MHhmYywweGNkLDB4MDkKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEyNTZfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4MGUs MHhlYiwweDFmLDB4ZDcsMHhmYywweGQxLDB4OWQsMHhkNCwweDA1LDB4MzYsMHg4YiwweGIyLAor KwkweGZiLDB4ZTQsMHhmNCwweDUxLDB4MGMsMHg4NywweDliLDB4MDIsMHg0NCwweGQ1LDB4OTIs MHg0ZCwKKysJMHg0NCwweGZlLDB4MWEsMHgwMywweDQzLDB4NTYsMHhiZCwweDg2CisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3By X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDAyLDB4YWEsMHhiNiwweDFkLDB4N2UsMHgyYSww eDQwLDB4MDMsMHg2OSwweDJkLDB4NDksMHhhMywKKysJMHg0MSwweGU3LDB4NDQsMHgwYiwweGFm LDB4N2IsMHg4NSwweGU0LDB4NWYsMHg1MywweDNiLDB4NjQsCisrCTB4YmMsMHg4OSwweGM4LDB4 ODIsMHhkNCwweDc4LDB4MzcsMHhhMgorKwl9OworKworKworKy8qIFNIQS0yNTYgTm8gUFIgICov CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2Vu dHJvcHlpbnB1dFtdID0KKysJeworKwkweDViLDB4MWIsMHhlYywweDRkLDB4YTksMHgzOCwweDc0 LDB4NWEsMHgzNCwweDBiLDB4N2IsMHhjNSwKKysJMHhlNSwweGQ3LDB4NjYsMHg3YywweGJjLDB4 ODIsMHhiOSwweDBlLDB4MmQsMHgxZiwweDkyLDB4ZDcsCisrCTB4YzEsMHhiYywweDY3LDB4Njks MHhlYywweDZiLDB4MDMsMHgzYworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9ub25jZVtdID0KKysJeworKwkweGE0LDB4MGMsMHhk OCwweDljLDB4NjEsMHhkOCwweGMzLDB4NTQsMHhmZSwweDUzLDB4YzksMHhlNSwKKysJMHg1ZCww eDZmLDB4NmQsMHgzNQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTI1Nl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHgy MiwweDVlLDB4NjIsMHg5MywweDQyLDB4ODMsMHg3OCwweDI0LDB4ZDgsMHg0MCwweDhjLDB4ZGUs CisrCTB4NmYsMHhmOSwweGE0LDB4N2EsMHhjNSwweGE3LDB4M2IsMHg4OCwweGEzLDB4ZWUsMHg0 MiwweDIwLAorKwkweGZkLDB4NjEsMHg1NiwweGM2LDB4NGMsMHgxMywweDQxLDB4OWMKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZf YWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4YmYsMHg3NCwweDViLDB4ZjYsMHhjNSwweDY0 LDB4NWUsMHg5OSwweDM0LDB4OGYsMHhiYywweGE0LAorKwkweGUyLDB4YmQsMHhkOCwweDg1LDB4 MjYsMHgzNywweGVhLDB4YmEsMHg0ZiwweGYyLDB4OWEsMHg5YSwKKysJMHg2NiwweGZjLDB4ZGYs MHg2MywweDI2LDB4MjYsMHgxOSwweDg3CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsK KysJMHhiMywweGM2LDB4MDcsMHgwNywweGQ2LDB4NzUsMHhmNiwweDJiLDB4ZDYsMHgyMSwweDk2 LDB4ZjEsCisrCTB4YWUsMHhkYiwweDJiLDB4YWMsMHgyNSwweDJhLDB4YWUsMHhhZSwweDQxLDB4 NzIsMHgwMywweDVlLAorKwkweGJmLDB4ZDMsMHg2NCwweGJjLDB4NTksMHhmOSwweGMwLDB4NzYK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEyNTZfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4YmYsMHgyMCwweDMzLDB4NTYs MHgyOSwweGE4LDB4MzcsMHgwNCwweDFmLDB4NzgsMHgzNCwweDNkLAorKwkweDgxLDB4MmEsMHhj OSwweDg2LDB4YzYsMHg3YSwweDJmLDB4ODgsMHg1ZSwweGQ1LDB4YmUsMHgzNCwKKysJMHg0Niww eDIwLDB4YTQsMHgzNSwweGViLDB4YzcsMHhlMiwweDlkCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2FkZGl0aW9uYWxpbnB1dHJl c2VlZFtdID0KKysJeworKwkweDliLDB4YWUsMHgyZCwweDJkLDB4NjEsMHhhNCwweDg5LDB4ZWIs MHg0MywweDQ2LDB4YTcsMHhkYSwKKysJMHhlZiwweDQwLDB4Y2EsMHg0YSwweDk5LDB4MTEsMHg0 MSwweGRjLDB4NWMsMHg5NCwweGU5LDB4YWMsCisrCTB4ZDQsMHhkMCwweGU2LDB4YmQsMHhmYiww eDAzLDB4OWMsMHhhOAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTI1Nl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4MjMsMHhh YSwweDBjLDB4YmQsMHgyOCwweDMzLDB4ZTIsMHg1MSwweGZjLDB4NzEsMHhkMiwweDE1LAorKwkw eDFmLDB4NzYsMHhmZCwweDBkLDB4ZTAsMHhiNywweGI1LDB4ODQsMHg3NSwweDViLDB4YmUsMHhm MywKKysJMHg1YywweGNhLDB4YzUsMHgzMCwweGYyLDB4NzUsMHgxZiwweGRhCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3JldHVy bmVkYml0c1tdID0KKysJeworKwkweDkwLDB4M2MsMHhjMSwweDEwLDB4OGMsMHgxMiwweDAxLDB4 YzYsMHhhNiwweDNhLDB4MGYsMHg0ZCwKKysJMHhiNiwweDNhLDB4NGYsMHg0MSwweDljLDB4NjEs MHg3NSwweDg0LDB4ZTksMHg3NCwweDc1LDB4ZmQsCisrCTB4ZmUsMHhmMiwweDFmLDB4NDMsMHhk OCwweDVlLDB4MjQsMHhhMworKwl9OworKworKworKy8qIFNIQS0zODQgUFIgICovCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2VudHJvcHlp bnB1dFtdID0KKysJeworKwkweDcxLDB4OWQsMHhiMiwweDVhLDB4NzEsMHg2ZCwweDA0LDB4ZTks MHgxZSwweGM3LDB4OTIsMHgyNCwKKysJMHg2ZSwweDEyLDB4MzMsMHhhOSwweDUyLDB4NjQsMHgz MSwweGVmLDB4NzEsMHhlYiwweDIyLDB4NTUsCisrCTB4MjgsMHg5NywweDA2LDB4NmEsMHhjMCww eDBjLDB4YTAsMHg3ZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9ub25jZVtdID0KKysJeworKwkweGY1LDB4MGQsMHhmYSww eGIwLDB4ZWMsMHg2YSwweDdjLDB4ZDYsMHhiZCwweDliLDB4MDUsMHhmZCwKKysJMHgzOCwweDNl LDB4MmUsMHg1NgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTM4NF9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg3 NCwweGFjLDB4N2UsMHg2ZCwweGIxLDB4YTQsMHhlNywweDIxLDB4ZDEsMHgxZSwweDZlLDB4OTYs CisrCTB4NmQsMHg0ZCwweDUzLDB4NDYsMHg4MiwweDk2LDB4NmUsMHhjZiwweGFhLDB4ODEsMHg4 ZCwweDdkLAorKwkweDllLDB4ZTEsMHgwZiwweDE1LDB4ZWEsMHg0MSwweGJmLDB4ZTMKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRf cHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4ZGEsMHg5NSwweGQ0LDB4ZDAsMHhiOCww eDExLDB4ZDMsMHg0OSwweDI3LDB4NWQsMHhhOSwweDM5LAorKwkweDY4LDB4ZjMsMHhhOCwweGU5 LDB4NWQsMHgxOSwweDhhLDB4MmIsMHg2NiwweGU4LDB4NjksMHgwNiwKKysJMHg3YywweDllLDB4 MDMsMHhhMSwweDhiLDB4MjYsMHgyZCwweDZlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2VudHJvcHlpbnB1dHByW10gPQor Kwl7CisrCTB4NDksMHhkZiwweDQ0LDB4MDAsMHhlNCwweDFjLDB4NzUsMHgwYiwweDI2LDB4NWEs MHg1OSwweDY0LAorKwkweDFmLDB4NGUsMHhiMSwweGIyLDB4MTMsMHhmMSwweDIyLDB4NGUsMHhi NCwweDZkLDB4OWEsMHhjYywKKysJMHhhMCwweDQ4LDB4ZTYsMHhjZiwweDFkLDB4ZDEsMHg5Miww eDBkCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMzg0X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhjOCwweDUyLDB4YWUs MHhiZiwweDA0LDB4M2MsMHgyNywweGI3LDB4NzgsMHgxOCwweGFhLDB4OGYsCisrCTB4ZmYsMHhj ZiwweGE0LDB4ZjEsMHhjYywweGU3LDB4NjgsMHhmYSwweDIyLDB4YTIsMHgxMywweDQ1LAorKwkw eGU4LDB4ZGQsMHg4NywweGU2LDB4ZjIsMHg2ZSwweGRkLDB4YzcsMHg1MiwweDkwLDB4OWYsMHg3 YiwKKysJMHhmYSwweDYxLDB4MmQsMHg5ZCwweDllLDB4Y2YsMHg5OCwweGFjLDB4NTIsMHg0MCww eGNlLDB4YWYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEzODRfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDYxLDB4N2Ms MHgwMywweDlhLDB4M2UsMHg1MCwweDU3LDB4NjAsMHhjNSwweDgzLDB4YzksMHhiMiwKKysJMHhk MSwweDg3LDB4ODUsMHg2NiwweDkyLDB4NWQsMHg4NCwweDBlLDB4NTMsMHhmYiwweDcwLDB4MDMs CisrCTB4NzIsMHhmZCwweGJhLDB4YWUsMHg5YywweDhmLDB4ZjgsMHgxOAorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9lbnRy b3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHhmOCwweGViLDB4ODksMHhiMSwweDhkLDB4NzgsMHhi ZSwweDIxLDB4ZTAsMHhiYiwweDlkLDB4YjcsCisrCTB4OTUsMHgwZSwweGQ5LDB4NDYsMHgwYyww eDhjLDB4ZTIsMHg2MywweGI3LDB4OWQsMHg2NywweDkwLAorKwkweGJkLDB4YzcsMHgwYiwweGE1 LDB4Y2UsMHhiMiwweDY1LDB4ODEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4 ZTYsMHg5ZiwweGZlLDB4NjgsMHhkNiwweGI1LDB4NzksMHhmMSwweDA2LDB4NWYsMHhhMywweGJi LAorKwkweDIzLDB4ODUsMHhkOCwweGYwLDB4MjksMHg1YSwweDY4LDB4OWUsMHhmNSwweGY0LDB4 YTYsMHgxMiwKKysJMHhlMCwweDlhLDB4ZTIsMHhhYywweDAwLDB4MWQsMHg5OCwweDI2LDB4ZmMs MHg1MywweDk1LDB4NTMsCisrCTB4ZTQsMHgzZSwweDE3LDB4ZDUsMHgwOCwweDBiLDB4NzAsMHgz ZCwweDY3LDB4OTksMHhhYywweDY2CisrCX07CisrCisrCisrLyogU0hBLTM4NCBObyBQUiAgKi8K KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfZW50 cm9weWlucHV0W10gPQorKwl7CisrCTB4MDcsMHgxNSwweDI3LDB4MmEsMHhhZiwweDc0LDB4MjQs MHgzNywweGJjLDB4ZDUsMHgxNCwweDY5LAorKwkweGNlLDB4MTEsMHhmZiwweGEyLDB4NmIsMHhi OCwweDA1LDB4NjcsMHgzNCwweGY4LDB4YmQsMHg2ZCwKKysJMHg2YSwweGNjLDB4Y2QsMHg2MCww eGEzLDB4NjgsMHhjYSwweGY0CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X25vbmNlW10gPQorKwl7CisrCTB4NzAsMHgxNywweGMy LDB4NWIsMHg1ZCwweDIyLDB4MGIsMHgwNiwweDE1LDB4NTQsMHg3OCwweDc3LAorKwkweDQ0LDB4 YWYsMHgyZiwweDA5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMzg0X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDg5 LDB4MzksMHgyOCwweGIwLDB4NjAsMHhlYiwweDNkLDB4ZGMsMHg1NSwweDc1LDB4ODYsMHhlYiwK KysJMHhhZSwweGEyLDB4OGYsMHhiYywweDFiLDB4NzUsMHhkNCwweGUxLDB4MGYsMHhhYSwweDM4 LDB4Y2EsCisrCTB4NjIsMHg4YiwweGNiLDB4MmMsMHgyNiwweGY2LDB4YmMsMHhiMQorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9h ZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHgzMCwweDJiLDB4NDIsMHgzNSwweGVmLDB4ZGEs MHg0MCwweDU1LDB4MjgsMHhjNiwweDk1LDB4ZmIsCisrCTB4NTQsMHgwMSwweDYyLDB4ZDcsMHg4 NywweDE0LDB4NDgsMHg2ZCwweDkwLDB4NGMsMHhhOSwweDAyLAorKwkweDU0LDB4NDAsMHgyMiww eGM4LDB4NjYsMHhhNSwweDQ4LDB4NDgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfaW50X3JldHVybmVkYml0c1tdID0KKysJewor KwkweDgyLDB4YzQsMHhhMSwweDljLDB4MjEsMHhkMiwweGU3LDB4YTUsMHhhNiwweGY2LDB4NWYs MHgwNCwKKysJMHg1YywweGM3LDB4MzEsMHg5ZCwweDhkLDB4NTksMHg3NCwweDUwLDB4MTksMHg4 OSwweDJmLDB4NjMsCisrCTB4ZDUsMHhiNywweDdlLDB4ZWIsMHgxNSwweGUzLDB4NzAsMHg4Myww eGExLDB4MjQsMHg1OSwweGZhLAorKwkweDJjLDB4NTYsMHhmNiwweDg4LDB4M2EsMHg5MiwweDkz LDB4YTEsMHhmYiwweDc5LDB4YzEsMHg3YQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Cisr CXsKKysJMHgzOSwweGE2LDB4ZTgsMHg1YywweDgyLDB4MTcsMHg3MSwweDI2LDB4NTcsMHg0Ziww eDlmLDB4YzIsCisrCTB4NTUsMHhmZiwweDVjLDB4OWIsMHg1MywweDFhLDB4ZDEsMHg1ZiwweGJj LDB4NjIsMHhlNCwweDI3LAorKwkweDJkLDB4MzIsMHhmMCwweGU0LDB4NTIsMHg4YywweGM1LDB4 MGMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEzODRfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4OGQsMHhjYiwweDhk LDB4Y2UsMHgwOCwweGVhLDB4ODAsMHhlOCwweDliLDB4NjEsMHhhOCwweDBmLAorKwkweGFmLDB4 NDksMHgyMCwweDllLDB4NzQsMHhjYiwweDU3LDB4ODAsMHg0MiwweGIwLDB4ODQsMHg1ZSwKKysJ MHgzMCwweDJhLDB4NjcsMHgwOCwweGY0LDB4ZTMsMHg0MCwweDIyCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2FkZGl0aW9uYWxp bnB1dDJbXSA9CisrCXsKKysJMHg3YywweDhmLDB4YzIsMHhhZSwweDIyLDB4NGEsMHhkNiwweGY2 LDB4MDUsMHhhNCwweDdhLDB4ZWEsCisrCTB4YmIsMHgyNSwweGQwLDB4YjcsMHg1YSwweGQ2LDB4 Y2YsMHg5ZCwweGYzLDB4NmMsMHhlMiwweGIyLAorKwkweDRlLDB4YjQsMHhiZCwweGY0LDB4ZTUs MHg0MCwweDgwLDB4OTQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEzODRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4OWUsMHg3ZSww eGZiLDB4NTksMHhiYiwweGFhLDB4M2MsMHhmNywweGUxLDB4ZjgsMHg3NiwweGRkLAorKwkweDYz LDB4NWYsMHhhZiwweDIzLDB4ZDYsMHg2NCwweDYxLDB4YzAsMHg5YSwweDA5LDB4NDcsMHhjOSwK KysJMHgzMywweGRmLDB4NmQsMHg1NSwweDkxLDB4MzQsMHg3OSwweDcwLDB4YzQsMHg5OSwweDZl LDB4NTQsCisrCTB4MDksMHg2NCwweDIxLDB4MWEsMHhiZCwweDFlLDB4ODAsMHg0MCwweDM0LDB4 YWQsMHhmYSwweGQ3CisrCX07CisrCisrCisrLyogU0hBLTUxMiBQUiAgKi8KKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfZW50cm9weWlucHV0 W10gPQorKwl7CisrCTB4MTMsMHhmNywweDYxLDB4NzUsMHg2NSwweDI4LDB4YTIsMHg1OSwweDEz LDB4NWEsMHg0YSwweDRmLAorKwkweDU2LDB4NjAsMHg4YywweDUzLDB4N2QsMHhiMCwweGJkLDB4 MDYsMHg0ZiwweGVkLDB4Y2MsMHhkMiwKKysJMHhhMiwweGI1LDB4ZmQsMHg1YiwweDNhLDB4YWIs MHhlYywweDI4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhNTEyX3ByX25vbmNlW10gPQorKwl7CisrCTB4YmUsMHhhMywweDkxLDB4OTMs MHgxZCwweGMzLDB4MzEsMHgzYSwweDIzLDB4MzMsMHg1MCwweDY3LAorKwkweDg4LDB4YzcsMHhh MiwweGM0CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhNTEyX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDFmLDB4 NTksMHg0ZCwweDdiLDB4ZTYsMHg0NiwweDkxLDB4NDgsMHhjMSwweDI1LDB4ZmEsMHhmZiwKKysJ MHg4OSwweDEyLDB4NzcsMHgzNSwweGRmLDB4M2UsMHhmNCwweDgwLDB4NWYsMHhkOSwweGIwLDB4 MDcsCisrCTB4MjIsMHg0MSwweGRkLDB4NDgsMHg3OCwweDZiLDB4NzcsMHgyYgorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9h ZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHgzMCwweGZmLDB4NjMsMHg2ZiwweGFjLDB4ZDks MHg4NCwweDM5LDB4NmYsMHhlNCwweDk5LDB4Y2UsCisrCTB4OTEsMHg3ZCwweDdlLDB4YzgsMHg1 OCwweGYyLDB4MTIsMHhjMywweGI2LDB4YWQsMHhkYSwweDIyLAorKwkweDA0LDB4YTAsMHhkMiww eDIxLDB4ZmUsMHhmMiwweDk1LDB4MWQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsK KysJMHg2NCwweDU0LDB4MTMsMHhlYywweDRmLDB4NzcsMHhkYSwweGIyLDB4OTIsMHgyZSwweDUy LDB4ODAsCisrCTB4MTEsMHgxMCwweGMyLDB4ZjgsMHhlNiwweGE3LDB4Y2QsMHg0YiwweGZjLDB4 MzIsMHgyZSwweDllLAorKwkweGViLDB4YmIsMHhiMSwweGJmLDB4MTUsMHg1YywweDczLDB4MDgK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGE1MTJfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGVmLDB4MWUsMHhkYywweDBh LDB4YTQsMHgzNiwweDkxLDB4OWMsMHgzZCwweDI3LDB4OTcsMHg1MCwKKysJMHg4ZCwweDM2LDB4 MjksMHg4ZCwweGNlLDB4NmEsMHgwYywweGY3LDB4MjEsMHhjMCwweDkxLDB4YWUsCisrCTB4MGMs MHg5NiwweDcyLDB4YmQsMHg1MiwweDgxLDB4NTgsMHhmYywweDZkLDB4ZTUsMHhmNywweGE1LAor KwkweGZkLDB4NWQsMHhhNywweDU4LDB4NjgsMHhjOCwweDk5LDB4NTgsMHg4ZSwweGM4LDB4Y2Us MHg5NSwKKysJMHgwMSwweDdkLDB4ZmYsMHhhNCwweGM4LDB4ZjcsMHg2MywweGZlLDB4NWYsMHg2 OSwweDgzLDB4NTMsCisrCTB4ZTIsMHhjNiwweDhiLDB4YzMKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfYWRkaXRpb25hbGlu cHV0MltdID0KKysJeworKwkweGU2LDB4OWIsMHhjNCwweDg4LDB4MzQsMHhjYSwweGVhLDB4Mjks MHgyZiwweDk4LDB4MDUsMHhhNCwKKysJMHhkMywweGMwLDB4N2IsMHgxMSwweGU4LDB4YmIsMHg3 NSwweGYyLDB4YmQsMHgyOSwweGI3LDB4NDAsCisrCTB4MjUsMHg3ZiwweGMxLDB4YjcsMHhiMSww eGYxLDB4MjUsMHg2MQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHgyMyww eDZkLDB4ZmYsMHhkZSwweGZiLDB4ZDEsMHhiYSwweDMzLDB4MTgsMHhlNiwweGJlLDB4YjUsCisr CTB4NDgsMHg3NywweDZkLDB4N2YsMHhhNywweGUxLDB4NGQsMHg0OCwweDFlLDB4M2MsMHhhNyww eDM0LAorKwkweDFhLDB4YzgsMHg2MCwweGRiLDB4OGYsMHg5OSwweDE1LDB4OTkKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJf cmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4NzAsMHgyNywweDMxLDB4ZGIsMHg5MiwweDcwLDB4 MjEsMHhmZSwweDE2LDB4YjYsMHhjOCwweDUxLAorKwkweDM0LDB4ODcsMHg2NSwweGQwLDB4NGUs MHhmZCwweGZlLDB4NjgsMHhlYywweGFjLDB4ZGMsMHg5MywKKysJMHg0MSwweDM4LDB4OTIsMHg5 MCwweGI0LDB4OTQsMHhmOSwweDBkLDB4YTQsMHhmNywweDRlLDB4ODAsCisrCTB4OTIsMHg2Nyww eDQ4LDB4NDAsMHhhNywweDA4LDB4YzcsMHhiYywweDY2LDB4MDAsMHhmZCwweGY3LAorKwkweDRj LDB4OGIsMHgxNywweDZlLDB4ZDEsMHg4ZiwweDliLDB4ZjMsMHg2ZiwweGY2LDB4MzQsMHhkZCwK KysJMHg2NywweGY3LDB4NjgsMHhkZAorKwl9OworKworKworKy8qIFNIQS01MTIgTm8gUFIgICov CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2Vu dHJvcHlpbnB1dFtdID0KKysJeworKwkweGI2LDB4MGIsMHhiNywweGJjLDB4ODQsMHg1NiwweGY2 LDB4MTIsMHhhZiwweDQ1LDB4NjcsMHgxNywKKysJMHg3YywweGQxLDB4YjIsMHg3OCwweDJiLDB4 YTAsMHhmMiwweGJlLDB4YjYsMHg2ZCwweDhiLDB4NTYsCisrCTB4YzYsMHhiYywweDRkLDB4ZTEs MHhmNywweGJlLDB4Y2UsMHhiZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9ub25jZVtdID0KKysJeworKwkweDlkLDB4ZWQsMHhj MCwweGU1LDB4NWEsMHg5OCwweDZhLDB4Y2IsMHg1MSwweDdkLDB4NzYsMHgzMSwKKysJMHg1YSww eDY0LDB4ZjAsMHhmNworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTUxMl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHhj MiwweDZkLDB4YTMsMHhjMywweDA2LDB4NzQsMHhlNSwweDAxLDB4NWMsMHgxMCwweDE3LDB4Yzcs CisrCTB4YWYsMHg4MywweDlkLDB4NTksMHg4ZCwweDJkLDB4MjksMHgzOCwweGM1LDB4NTksMHg3 MCwweDhiLAorKwkweDQ2LDB4NDgsMHgyZCwweGNmLDB4MzYsMHg3ZCwweDU5LDB4YzAKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJf YWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4ZWMsMHg4YywweGQ0LDB4ZjcsMHg2MSwweDZl LDB4MGQsMHg5NSwweDc5LDB4YjcsMHgyOCwweGFkLAorKwkweDVmLDB4NjksMHg3NCwweDVmLDB4 MmQsMHgzNiwweDA2LDB4OGEsMHg2YiwweGFjLDB4NTQsMHg5NywKKysJMHhjNCwweGExLDB4MTIs MHg4NSwweDBhLDB4ZGYsMHg0YiwweDM0CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsK KysJMHg4NCwweDJmLDB4MWYsMHg2OCwweDZhLDB4YTMsMHhhZCwweDFlLDB4ZmIsMHhmNCwweDE1 LDB4YmQsCisrCTB4ZGUsMHgzOCwweGQ0LDB4MzAsMHg4MCwweDUxLDB4ZTksMHhkMywweGM3LDB4 MjAsMHg4OCwweGU5LAorKwkweGY1LDB4Y2MsMHhkZiwweDU3LDB4NWMsMHg0NywweDJmLDB4NTcs MHgzYywweDVmLDB4MTMsMHg1NiwKKysJMHhjYywweGM1LDB4NGYsMHg4NCwweGY4LDB4MTAsMHg0 MSwweGQ1LDB4N2UsMHg1OCwweDZlLDB4MTksCisrCTB4MTksMHg5ZSwweGFmLDB4YzIsMHgyMiww eDU4LDB4NDEsMHg1MCwweDc5LDB4YzIsMHhkOCwweDA0LAorKwkweDI4LDB4ZDQsMHgzOSwweDlh CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhNTEyX2VudHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweGZhLDB4N2YsMHg0NiwweDUx LDB4ODMsMHg2MiwweDk4LDB4MTYsMHg5YSwweDE5LDB4YTIsMHg0OSwKKysJMHhhOSwweGU2LDB4 NGEsMHhkOCwweDg1LDB4ZTcsMHhkNCwweDNiLDB4MmMsMHg4MiwweGM1LDB4ODIsCisrCTB4YmYs MHgxMSwweGY5LDB4OWUsMHhiYywweGQwLDB4MDEsMHhlZQorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9hZGRpdGlvbmFsaW5wdXRy ZXNlZWRbXSA9CisrCXsKKysJMHhiOSwweDEyLDB4ZTAsMHg0ZiwweGY3LDB4YTcsMHhjNCwweGQ4 LDB4ZDAsMHg4ZSwweDk5LDB4MjksCisrCTB4N2MsMHg5YSwweGU5LDB4Y2YsMHhjNCwweDZjLDB4 ZjgsMHhjMywweGE3LDB4NDEsMHg4MywweGQ2LAorKwkweDJlLDB4ZmEsMHhiOCwweDVlLDB4OGUs MHg2YiwweDc4LDB4MjAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGE1MTJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweGQ3LDB4 MDcsMHg1MiwweGI5LDB4ODMsMHgyYywweDAzLDB4NzEsMHhlZSwweGM5LDB4YzAsMHg4NSwKKysJ MHhlMSwweDU3LDB4YjIsMHhjZCwweDNhLDB4ZjAsMHhjOSwweDM0LDB4MjQsMHg0MSwweDFjLDB4 NDIsCisrCTB4OTksMHhiMiwweDg0LDB4ZTksMHgxNywweGQyLDB4NzYsMHg5MgorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9yZXR1 cm5lZGJpdHNbXSA9CisrCXsKKysJMHgzNiwweDE3LDB4NWQsMHg5OCwweDJiLDB4NjUsMHgyNSww eDhlLDB4YzgsMHgyOSwweGRmLDB4MjcsCisrCTB4MDUsMHgzNiwweDI2LDB4MTIsMHg4YSwweDY4 LDB4NzQsMHgyNywweDM3LDB4ZDQsMHg3ZiwweDMyLAorKwkweGIxLDB4MTIsMHhkNiwweDg1LDB4 ODMsMHhlYiwweDJlLDB4YTAsMHhlZCwweDRiLDB4YjUsMHg3YiwKKysJMHg2ZiwweDM5LDB4M2Ms MHg3MSwweDc3LDB4MDIsMHgxMiwweGNjLDB4MmMsMHgzYSwweDhlLDB4NjMsCisrCTB4ZGYsMHg0 YSwweGJkLDB4NmYsMHg2ZSwweDJlLDB4ZWQsMHgwYSwweDg1LDB4YTUsMHgyZiwweGEyLAorKwkw eDY4LDB4ZGUsMHg0MiwweGI1CisrCX07CisrCisrCisrLyogSE1BQyBTSEEtMSBQUiAgKi8KKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJf ZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4MjYsMHg1ZiwweDM2LDB4MTQsMHhmZiwweDNkLDB4 ODMsMHhmYSwweDczLDB4NWUsMHg3NSwweGRjLAorKwkweDJjLDB4MTgsMHgxNywweDFiCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGExX3ByX25vbmNlW10gPQorKwl7CisrCTB4YzgsMHhlMywweDU3LDB4YTUsMHg3YiwweDc0LDB4 ODYsMHg2ZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMV9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg2 ZSwweGRiLDB4MGQsMHhmZSwweDdkLDB4YWMsMHg3OSwweGQwLDB4YTUsMHgzYSwweDQ4LDB4ODUs CisrCTB4ODAsMHhlMiwweDdmLDB4MmEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfYWRkaXRpb25hbGlucHV0W10gPQor Kwl7CisrCTB4MzEsMHhjZCwweDVlLDB4NDMsMHhkYywweGZiLDB4N2EsMHg3OSwweGNhLDB4ODgs MHhkZSwweDFmLAorKwkweGQ3LDB4YmIsMHg0MiwweDA5CisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2VudHJvcHlpbnB1 dHByW10gPQorKwl7CisrCTB4N2MsMHgyMywweDk1LDB4MzgsMHgwMCwweDk1LDB4YzEsMHg3OCww eDFmLDB4OGYsMHhkNywweDYzLAorKwkweDIzLDB4ODcsMHgyYSwweGVkCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2lu dF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhiYiwweDM0LDB4ZTcsMHg5MywweGEzLDB4MDIs MHgyYywweDRhLDB4ZDAsMHg4OSwweGRhLDB4N2YsCisrCTB4ZWQsMHhmNCwweDRjLDB4ZGUsMHgx NywweGVjLDB4ZTUsMHg2YworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7Cisr CTB4NDksMHhiYywweDJkLDB4MmMsMHhiNywweDMyLDB4Y2IsMHgyMCwweGRmLDB4ZjUsMHg3Nyww eDU4LAorKwkweGEwLDB4NGIsMHg5MywweDZlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2VudHJvcHlpbnB1dHByMltd ID0KKysJeworKwkweDNjLDB4YWEsMHhiMCwweDIxLDB4NDIsMHhiMCwweGRkLDB4MzQsMHhmMCww eDE2LDB4N2YsMHgwYywKKysJMHgwZiwweGZmLDB4MmUsMHhhZgorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9yZXR1cm5l ZGJpdHNbXSA9CisrCXsKKysJMHg4ZSwweGNiLDB4YTMsMHg2NCwweGIyLDB4YjgsMHgzMywweDZj LDB4NjQsMHgzYiwweDc4LDB4MTYsCisrCTB4OTksMHgzNSwweGM4LDB4MzAsMHhjYiwweDNlLDB4 YTAsMHhkOAorKwl9OworKworKworKy8qIEhNQUMgU0hBLTEgTm8gUFIgICovCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2VudHJvcHlpbnB1 dFtdID0KKysJeworKwkweDMyLDB4OWEsMHgyYSwweDg3LDB4N2IsMHg4OSwweDdjLDB4ZjYsMHhj YiwweDk1LDB4ZDUsMHg0MCwKKysJMHgxNywweGZlLDB4NDcsMHg3MAorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9ub25jZVtd ID0KKysJeworKwkweDE2LDB4ZDgsMHhlMCwweGM3LDB4NTIsMHhjZiwweDRhLDB4MjUKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTFfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4MzUsMHgzNSwweGE5LDB4YTUs MHg0MCwweGJlLDB4OWIsMHhkMSwweDU2LDB4ZGQsMHg0NCwweDAwLAorKwkweDcyLDB4ZjcsMHhk MywweDVlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGExX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDFiLDB4MmMsMHg4 NCwweDJkLDB4NGEsMHg4OSwweDhmLDB4NjksMHgxOSwweGYxLDB4ZjMsMHhkYiwKKysJMHhiYiww eGUzLDB4YWEsMHhlYQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4Y2Ys MHhmYSwweDdkLDB4NzIsMHgwZiwweGU2LDB4YzcsMHg5NiwweGEwLDB4NjksMHgzMSwweDExLAor KwkweDliLDB4MGIsMHgxYSwweDIwLDB4MWYsMHgzZiwweGFhLDB4ZDEKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfZW50cm9w eWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4OTAsMHg3NSwweDE1LDB4MDQsMHg5NSwweGYxLDB4 YmEsMHg4MSwweDBjLDB4MzcsMHg5NCwweDZmLAorKwkweDg2LDB4NTIsMHg2ZCwweDljCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGExX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDViLDB4NDAsMHhiYSwweDVm LDB4MTcsMHg3MCwweGYwLDB4NGIsMHhkZiwweGM5LDB4OTcsMHg5MiwKKysJMHg3OSwweGM1LDB4 ODIsMHgyOAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMV9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4OTcsMHhjOCww eDgwLDB4OTAsMHhiMywweGFhLDB4NmUsMHg2MCwweGVhLDB4ODMsMHg3YSwweGUzLAorKwkweDhh LDB4Y2EsMHhhNCwweDdmCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3JldHVybmVkYml0c1tdID0KKysJeworKwkweDkwLDB4 YmQsMHgwNSwweDU2LDB4NmQsMHhiNSwweDIyLDB4ZDUsMHhiOSwweDVhLDB4MjksMHgyZCwKKysJ MHhlOSwweDBiLDB4ZTEsMHhhYywweGRlLDB4MjcsMHgwYiwweGIwCisrCX07CisrCisrCisrLyog SE1BQyBTSEEtMjI0IFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDE3LDB4 MzIsMHgyYiwweDJlLDB4NmYsMHgxYiwweDljLDB4NmQsMHgzMSwweGUwLDB4MzQsMHgwNywKKysJ MHhjZiwweGVkLDB4ZjYsMHhiNiwweDVhLDB4NzYsMHg0YywweGJjLDB4NjIsMHg4NSwweDAxLDB4 OTAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTIyNF9wcl9ub25jZVtdID0KKysJeworKwkweDM4LDB4YmYsMHg1ZiwweDIwLDB4 YjMsMHg2OCwweDJmLDB4NDMsMHg2MSwweDA1LDB4OGYsMHgyMworKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX3BlcnNv bmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweGMwLDB4YzksMHg0NSwweGFjLDB4OGQsMHgy NywweDc3LDB4MDgsMHgwYiwweDE3LDB4NmQsMHhlZCwKKysJMHhjMSwweDdkLDB4ZDUsMHgwNyww eDlkLDB4NmUsMHhmOCwweDIzLDB4MmEsMHgyMiwweDEzLDB4YmQKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9hZGRp dGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHhhNCwweDNjLDB4ZTcsMHgzYiwweGVhLDB4MTksMHg0 NSwweDMyLDB4YzIsMHg4MywweDZkLDB4MjEsCisrCTB4OGEsMHhjMCwweGVlLDB4NjcsMHg0NSww eGRlLDB4MTMsMHg3ZCwweDlkLDB4NjEsMHgwMCwweDNiCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfZW50cm9weWlu cHV0cHJbXSA9CisrCXsKKysJMHgxNSwweDA1LDB4NzQsMHg0YSwweDdmLDB4OGQsMHg1YywweDYw LDB4MTYsMHhlNSwweDdiLDB4YWQsCisrCTB4ZjUsMHg0MSwweDhmLDB4NTUsMHg2MCwweGM0LDB4 MDksMHhlZSwweDFlLDB4MTEsMHg4MSwweGFiCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfaW50X3JldHVybmVkYml0 c1tdID0KKysJeworKwkweDZmLDB4ZjUsMHg5YSwweGUyLDB4NTQsMHg1MywweDMwLDB4M2QsMHg1 YSwweDI3LDB4MjksMHgzOCwKKysJMHgyNywweGYyLDB4MGQsMHgwNSwweGU5LDB4MjYsMHhjYiww eDE2LDB4YzMsMHg1MSwweDVmLDB4MTMsCisrCTB4NDEsMHhmZSwweDk5LDB4ZjIKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIy NF9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4NzMsMHg4MSwweDg4LDB4ODQsMHg4 ZiwweGVkLDB4NmYsMHgxMCwweDlmLDB4OTMsMHhiZiwweDE3LAorKwkweDM1LDB4N2MsMHhlZiww eGQ1LDB4OGQsMHgyNiwweGE2LDB4N2EsMHhlOCwweDA5LDB4MzYsMHg0ZgorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3By X2VudHJvcHlpbnB1dHByMltdID0KKysJeworKwkweGU2LDB4Y2YsMHhjZiwweDdlLDB4MTIsMHhl NSwweDQzLDB4ZDIsMHgzOCwweGQ4LDB4MjQsMHg2ZiwKKysJMHg1YSwweDM3LDB4NjgsMHhiZiww eDRmLDB4YTAsMHhmZiwweGQ1LDB4NjEsMHg4YSwweDkzLDB4ZTAKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9yZXR1 cm5lZGJpdHNbXSA9CisrCXsKKysJMHhhZiwweGY5LDB4ZDgsMHgxOSwweDkxLDB4MzAsMHg4Miww eDZmLDB4YTksMHgxZSwweDlkLDB4ZDcsCisrCTB4ZjMsMHg1MCwweGUwLDB4YzcsMHhkNSwweDY0 LDB4OTYsMHg3ZCwweDRjLDB4NGQsMHg3OCwweDAzLAorKwkweDZkLDB4ZDgsMHg5ZSwweDcyCisr CX07CisrCisrCisrLyogSE1BQyBTSEEtMjI0IE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2VudHJvcHlpbnB1dFtdID0K KysJeworKwkweDExLDB4ODIsMHhmZCwweGQ5LDB4NDIsMHhmNCwweGZhLDB4YzgsMHhmMiwweDQx LDB4ZTYsMHg1NCwKKysJMHgwMSwweGFlLDB4MjIsMHg2ZSwweGM2LDB4YWYsMHhhZiwweGQwLDB4 YTYsMHhiMiwweGUyLDB4NmQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9ub25jZVtdID0KKysJeworKwkweGE5LDB4NDgs MHhkNywweDkyLDB4MzksMHg3ZSwweDJhLDB4ZGMsMHgzMCwweDFmLDB4MGUsMHgyYgorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh MjI0X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDExLDB4ZDUsMHhmNCwweGJk LDB4NjcsMHg4YywweDMxLDB4Y2YsMHhhMywweDNmLDB4MWUsMHg2YiwKKysJMHhhOCwweDA3LDB4 MDIsMHgwYiwweGM4LDB4MmUsMHg2YywweDY0LDB4NDEsMHg1YiwweGM4LDB4MzcKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIy NF9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg2OCwweDE4LDB4YzIsMHgwNiwweGViLDB4 M2UsMHgwNCwweDk1LDB4NDQsMHg1ZSwweGZiLDB4ZTYsCisrCTB4NDEsMHhjMSwweDVjLDB4Y2Ms MHg0MCwweDJmLDB4YjcsMHhkMiwweDBmLDB4ZjMsMHg2YiwweGU3CisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfaW50X3Jl dHVybmVkYml0c1tdID0KKysJeworKwkweDdmLDB4NDUsMHhjNywweDVkLDB4MzIsMHhlNiwweDE3 LDB4NjAsMHhiYSwweGRjLDB4YjgsMHg0MiwKKysJMHgxYiwweDljLDB4ZjEsMHhmYSwweDNiLDB4 NGQsMHgyOSwweDU0LDB4YzYsMHg5MCwweGZmLDB4NWMsCisrCTB4Y2QsMHhkNiwweGE5LDB4Y2MK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTIyNF9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHhjNCwweDhlLDB4Mzcs MHg5NSwweDY5LDB4NTMsMHgyOCwweGQ3LDB4MzcsMHhiYiwweDcwLDB4OTUsCisrCTB4MWMsMHgw NywweDFkLDB4ZDksMHhiNywweGU2LDB4MWIsMHhiYiwweGZlLDB4NDEsMHhlYiwweGM5CisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGEyMjRfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4NTMsMHgxNywweGExLDB4 NmEsMHhmYSwweDc3LDB4NDcsMHhiMCwweDk1LDB4NTYsMHg5YSwweDIwLAorKwkweDU3LDB4ZGUs MHg1YywweDg5LDB4OWYsMHg3ZiwweGUyLDB4ZGUsMHgxNywweDNhLDB4NTAsMHgyMworKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh MjI0X2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHgzYSwweDMyLDB4ZjksMHg4NSwweDBj LDB4YzEsMHhlZCwweDc2LDB4MmQsMHhkZiwweDQwLDB4YzMsCisrCTB4MDYsMHgyMiwweDY2LDB4 ZDQsMHg5YSwweDlhLDB4ZmYsMHg1YSwweDdlLDB4N2EsMHhmMywweDk2CisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcmV0 dXJuZWRiaXRzW10gPQorKwl7CisrCTB4NDMsMHhiNCwweDU3LDB4NWMsMHgzOCwweDI1LDB4OWQs MHhhZSwweGVjLDB4OTYsMHhkMSwweDg1LAorKwkweDNhLDB4ODQsMHg4ZCwweGZlLDB4NjgsMHhk NSwweDBlLDB4NWMsMHg4ZiwweDY1LDB4YTUsMHg0ZSwKKysJMHg0NSwweDg0LDB4YTgsMHg5NAor Kwl9OworKworKworKy8qIEhNQUMgU0hBLTI1NiBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9lbnRyb3B5aW5wdXRbXSA9 CisrCXsKKysJMHg0ZCwweGIwLDB4NDMsMHhkOCwweDM0LDB4NGIsMHgxMCwweDcwLDB4YjEsMHg4 YiwweGVkLDB4ZWEsCisrCTB4MDcsMHg5MiwweDlmLDB4NmMsMHg3OSwweDMxLDB4YWYsMHg4MSww eDI5LDB4ZWIsMHg2ZSwweGNhLAorKwkweDMyLDB4NDgsMHgyOCwweGU3LDB4MDIsMHg1ZCwweGE2 LDB4YTYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTI1Nl9wcl9ub25jZVtdID0KKysJeworKwkweDNhLDB4YWUsMHgxNSwweGE5 LDB4OTksMHhkYywweGU0LDB4NjcsMHgzNCwweDNiLDB4NzAsMHgxNSwKKysJMHhhYSwweGQzLDB4 MzAsMHg5YQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMjU2X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkw eDEzLDB4MWQsMHgyNCwweDA0LDB4YjAsMHgxOCwweDgxLDB4MTUsMHgyMSwweDUxLDB4MmEsMHgy NCwKKysJMHg1MiwweDYxLDB4YmUsMHg2NCwweDgyLDB4NmIsMHg1NSwweDJmLDB4ZTIsMHhmMSww eDQwLDB4N2QsCisrCTB4NzEsMHhkOCwweDAxLDB4ODYsMHgxNSwweGI3LDB4OGIsMHhiNQorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMjU2X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDhmLDB4YTYsMHg1NCwweDVm LDB4YjEsMHhkMCwweGQ4LDB4YzMsMHhlNywweDBjLDB4MTUsMHhhOSwKKysJMHgyMywweDZlLDB4 ZmUsMHhmYiwweDkzLDB4ZjcsMHgzYSwweGJkLDB4NTksMHgwMSwweGZhLDB4MTgsCisrCTB4OGUs MHhlOSwweDFhLDB4YTksMHg3OCwweGZjLDB4NzksMHgwYgorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2VudHJvcHlp bnB1dHByW10gPQorKwl7CisrCTB4Y2YsMHgyNCwweGI5LDB4ZWIsMHhiMywweGQ0LDB4Y2QsMHgx NywweDM3LDB4MzgsMHg3NSwweDc5LAorKwkweDE1LDB4Y2IsMHgyZCwweDc1LDB4NTEsMHhmMSww eGNjLDB4YWEsMHgzMiwweGE0LDB4YTcsMHgzNiwKKysJMHg3YywweDVjLDB4ZTQsMHg0NywweGYx LDB4M2UsMHgxZCwweGU1CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJewor KwkweDUyLDB4NDIsMHhmYSwweGViLDB4ODUsMHhlMCwweDMwLDB4MjIsMHg3OSwweDAwLDB4MTYs MHhiMiwKKysJMHg4OCwweDJmLDB4MTQsMHg2YSwweGI3LDB4ZmMsMHhiNywweDUzLDB4ZGMsMHg0 YSwweDEyLDB4ZWYsCisrCTB4NTQsMHhkNiwweDMzLDB4ZTksMHgyMCwweGQ2LDB4ZmQsMHg1Ngor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMjU2X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHhmNCwweGY2LDB4NDks MHhhMSwweDJkLDB4NjQsMHgyYiwweDMwLDB4NTgsMHhmOCwweGJkLDB4YjgsCisrCTB4NzUsMHhl YiwweGJiLDB4NWUsMHgxYywweDliLDB4ODEsMHg2YSwweGRhLDB4MTQsMHg4NiwweDZlLAorKwkw eGQwLDB4ZGEsMHgxOCwweGI3LDB4ODgsMHhmYiwweDU5LDB4ZjMKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9lbnRy b3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHgyMSwweGNkLDB4NmUsMHg0NiwweGFkLDB4OTksMHgw NywweDE3LDB4YjQsMHgzZCwweDc2LDB4MGEsCisrCTB4ZmYsMHg1YiwweDUyLDB4NTAsMHg3OCww eGRmLDB4MWYsMHgyNCwweDA2LDB4MGQsMHgzZiwweDc0LAorKwkweGE5LDB4YzksMHgzNywweGNm LDB4ZDgsMHgyNiwweDI1LDB4OTEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsK KysJMHhhNywweGFmLDB4MmYsMHgyOSwweGUwLDB4M2EsMHg3MiwweDk1LDB4OTYsMHgxYywweGE5 LDB4ZjAsCisrCTB4NGEsMHgxNywweDRkLDB4NjYsMHgwNiwweDEwLDB4YmYsMHgzOSwweDg5LDB4 ODgsMHhiOCwweDkxLAorKwkweDM3LDB4MTgsMHg5OSwweGNmLDB4OGMsMHg1MywweDNiLDB4N2UK KysJfTsKKysKKysKKysvKiBITUFDIFNIQS0yNTYgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfZW50cm9weWlucHV0W10g PQorKwl7CisrCTB4OTYsMHhiNywweDUzLDB4MjIsMHgxZSwweDUyLDB4MmEsMHg5NiwweGIxLDB4 MTUsMHgzYywweDM1LAorKwkweDVhLDB4OGIsMHhkMywweDRhLDB4YTYsMHg2YywweDgzLDB4MGEs MHg3ZCwweGEzLDB4MjMsMHgzZCwKKysJMHg0MywweGExLDB4MDcsMHgyYywweDJkLDB4ZTMsMHg4 MSwweGNjCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGEyNTZfbm9uY2VbXSA9CisrCXsKKysJMHhmMSwweGFjLDB4OTcsMHhjYiww eDVlLDB4MDYsMHg0OCwweGQyLDB4OTQsMHhiZSwweDE1LDB4MmUsCisrCTB4YzcsMHhmYywweGMy LDB4MDEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTI1Nl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg5OCww eGM1LDB4MWUsMHgzNSwweDVlLDB4ODksMHgwZCwweGNlLDB4NjQsMHg2ZCwweDE4LDB4YTcsCisr CTB4NWEsMHhjNiwweGYzLDB4ZTcsMHhkNiwweDllLDB4YzAsMHhlYSwweGI3LDB4M2EsMHg4ZCww eDY1LAorKwkweGI4LDB4ZWIsMHgxMCwweGQ3LDB4NTcsMHgxOCwweGEwLDB4MzIKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1 Nl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHgxYiwweDEwLDB4YWYsMHhhYywweGQwLDB4 NjUsMHg5NSwweGFkLDB4MDQsMHhhZCwweDAzLDB4MWMsCisrCTB4ZTAsMHg0MCwweGQ2LDB4M2Us MHgxYywweDQ2LDB4NTMsMHgzOSwweDdjLDB4ZTIsMHhiYywweGRhLAorKwkweDhjLDB4YTIsMHgz MywweGE3LDB4OWEsMHgyNiwweGQzLDB4MjcKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9pbnRfcmV0dXJuZWRiaXRzW10g PQorKwl7CisrCTB4YmEsMHg2MSwweDBlLDB4NTUsMHhmZSwweDExLDB4OGEsMHg5ZSwweDBmLDB4 ODAsMHhkZiwweDFkLAorKwkweDAzLDB4MGEsMHhmZSwweDE1LDB4OTQsMHgyOCwweDRiLDB4YmEs MHhmNCwweDlmLDB4NTEsMHgyNSwKKysJMHg4OCwweGU1LDB4NGUsMHhmYiwweGFmLDB4Y2UsMHg2 OSwweDkwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGEyNTZfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4NjIsMHg3 ZiwweDFlLDB4NmIsMHhlOCwweDhlLDB4ZTEsMHgzNSwweDdkLDB4OWIsMHg0ZiwweGM3LAorKwkw eGVjLDB4YzgsMHhhYywweGVmLDB4NmIsMHgxMywweDllLDB4MDUsMHg1NiwweGMxLDB4MDgsMHhm OSwKKysJMHgyZiwweDBmLDB4MjcsMHg5YywweGQ0LDB4MTUsMHhlZCwweDJkCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZf YWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4YzcsMHg3NiwweDZlLDB4YTksMHhk MiwweGIyLDB4NzYsMHg0MCwweDgyLDB4MjUsMHgyYywweGIzLAorKwkweDZmLDB4YWMsMHhlOSww eDc0LDB4ZWYsMHg4ZiwweDNjLDB4OGUsMHhjZCwweGYxLDB4YmYsMHhiMywKKysJMHg0OSwweDc3 LDB4MzQsMHg4OCwweDUyLDB4MzYsMHhlNiwweDJlCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfYWRkaXRpb25hbGlucHV0 MltdID0KKysJeworKwkweDhkLDB4YjgsMHgwYywweGQxLDB4YmYsMHg3MCwweGY2LDB4MTksMHhj MywweDQxLDB4ODAsMHg5ZiwKKysJMHhlMSwweGE1LDB4YTQsMHgxZiwweDJjLDB4MjYsMHhiMSww eGU1LDB4ZDgsMHhlYiwweGJlLDB4ZjgsCisrCTB4ZGYsMHg4OCwweDZhLDB4ODksMHhkNiwweDA1 LDB4ZDgsMHg5ZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMjU2X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDQzLDB4MTIs MHgyYSwweDJjLDB4NDAsMHg1MywweDJlLDB4N2MsMHg2NiwweDM0LDB4YWMsMHhjMywKKysJMHg0 MywweGUzLDB4ZTAsMHg2YSwweGZjLDB4ZmEsMHhlYSwweDg3LDB4MjEsMHgxZiwweGUyLDB4MjYs CisrCTB4YzQsMHhmOSwweDA5LDB4OWEsMHgwZCwweDZlLDB4N2YsMHhlMAorKwl9OworKworKwor Ky8qIEhNQUMgU0hBLTM4NCBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHg2 OSwweDgxLDB4OTgsMHg4OCwweDQ0LDB4ZjUsMHhkNiwweDJlLDB4MDAsMHgwOCwweDNiLDB4YzUs CisrCTB4ZmIsMHhkNywweDhlLDB4NmYsMHgyMywweGY4LDB4NmQsMHgwOSwweGQ2LDB4ODUsMHg0 OSwweGQxLAorKwkweGY4LDB4NmQsMHhhNCwweDU4LDB4NTQsMHhmZCwweDg4LDB4YTkKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTM4NF9wcl9ub25jZVtdID0KKysJeworKwkweDZlLDB4MzgsMHg4MSwweGNhLDB4YjcsMHhlOCww eDZlLDB4NjYsMHg0OSwweDhhLDB4YjIsMHg1OSwKKysJMHhlZSwweDE2LDB4YzksMHhkZQorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMzg0X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweGZlLDB4NGMsMHhk OSwweGY0LDB4NzgsMHgzYiwweDA4LDB4NDEsMHg4ZCwweDhmLDB4NTUsMHhjNCwKKysJMHg0Myww eDU2LDB4YjYsMHgxMiwweDM2LDB4NmIsMHgzMCwweGI3LDB4NWUsMHhlMSwweGI5LDB4NDcsCisr CTB4MDQsMHhiMSwweDRlLDB4YTksMHgwMCwweGExLDB4NTIsMHhhMQorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2Fk ZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDg5LDB4ZTksMHhjYywweDhmLDB4MjcsMHgzYyww eDI2LDB4ZDEsMHg5NSwweGM4LDB4N2QsMHgwZiwKKysJMHg1YiwweDFhLDB4ZjAsMHg3OCwweDM5 LDB4NTYsMHg2ZiwweGE0LDB4MjMsMHhlNywweGQxLDB4ZGEsCisrCTB4N2MsMHg2NiwweDMzLDB4 YTAsMHg5MCwweGM5LDB4OTIsMHg4OAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2VudHJvcHlpbnB1dHByW10gPQor Kwl7CisrCTB4YmUsMHgzZCwweDdjLDB4MGQsMHhjYSwweGRhLDB4N2MsMHg0OSwweGI4LDB4MTIs MHgzNiwweGMwLAorKwkweGRiLDB4YWQsMHgzNSwweGE4LDB4YzcsMHgwYiwweDJhLDB4MmMsMHg2 OSwweDZkLDB4MjUsMHg1NiwKKysJMHg2MywweDgyLDB4MTEsMHgzZSwweGE3LDB4MzMsMHg3MCww eDcyCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGEzODRfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDgyLDB4M2Qs MHhlNiwweDU0LDB4ODAsMHg0MiwweGY4LDB4YmEsMHg5MCwweDRmLDB4MDYsMHhhNiwKKysJMHhk MiwweDdmLDB4YmYsMHg3OSwweDdjLDB4MTIsMHg3ZCwweGE2LDB4YTIsMHg2NiwweGU4LDB4YTYs CisrCTB4YzAsMHhkNiwweDRhLDB4NTUsMHhiZiwweGQ4LDB4MGEsMHhjNSwweGY4LDB4MDMsMHg4 OCwweGRkLAorKwkweDhlLDB4ODcsMHhkMSwweDVhLDB4NDgsMHgyNiwweDcyLDB4MmEsMHg4ZSww eGNmLDB4ZWUsMHhiYQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJ MHg4ZiwweGZmLDB4ZDksMHg4NCwweGJiLDB4ODUsMHgzYSwweDY2LDB4YTEsMHgyMSwweGNlLDB4 YjIsCisrCTB4M2EsMHgzYSwweDE3LDB4MjIsMHgxOSwweGFlLDB4YzcsMHhiNiwweDYzLDB4ODEs MHhkNSwweGZmLAorKwkweDBkLDB4YzgsMHhlMSwweGFmLDB4NTcsMHhkMiwweGNiLDB4NjAKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTM4NF9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHhkNywweGZiLDB4YzksMHhl OCwweGUyLDB4ZjIsMHhhYSwweDRjLDB4YjgsMHg1MSwweDJmLDB4ZTEsCisrCTB4MjIsMHhiYSww eGYzLDB4ZGEsMHgwYSwweDE5LDB4NzYsMHg3MSwweDU3LDB4YjIsMHgxZCwweDk0LAorKwkweDA5 LDB4NjksMHg2YywweGQzLDB4OTcsMHg1MSwweDgxLDB4ODcKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9yZXR1cm5l ZGJpdHNbXSA9CisrCXsKKysJMHhlNiwweDE5LDB4MjgsMHhhOCwweDIxLDB4Y2UsMHg1ZSwweGRi LDB4MjQsMHg3OSwweDhjLDB4NzYsCisrCTB4NWQsMHg3MywweGIyLDB4ZGYsMHhhYywweGVmLDB4 ODUsMHhhNywweDNiLDB4MTksMHgwOSwweDhiLAorKwkweDdmLDB4OTgsMHgyOCwweGE5LDB4OTMs MHhkOCwweDdhLDB4YWQsMHg1NSwweDhiLDB4MjQsMHg5ZCwKKysJMHhlNiwweDk4LDB4ZmUsMHg0 NywweGQ1LDB4NDgsMHhjMSwweDIzLDB4ZDgsMHgxZCwweDYyLDB4NzUKKysJfTsKKysKKysKKysv KiBITUFDIFNIQS0zODQgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4YzMs MHg1NiwweDJiLDB4MWQsMHhjMiwweGJiLDB4YTgsMHhmMCwweGFlLDB4MWIsMHgwZCwweGQzLAor KwkweDVhLDB4NmMsMHhkYSwweDU3LDB4OGUsMHhhNSwweDhhLDB4MGQsMHg2YywweDRiLDB4MTgs MHhiMSwKKysJMHgwNCwweDNlLDB4YjQsMHg5OSwweDM1LDB4YzQsMHhjMCwweDVmCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEz ODRfbm9uY2VbXSA9CisrCXsKKysJMHhjNSwweDQ5LDB4MWUsMHg2NiwweDI3LDB4OTIsMHhiZSww eGVjLDB4YjUsMHgxZSwweDRiLDB4YjEsCisrCTB4MzgsMHhlMywweGViLDB4NjIKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4 NF9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHhiZSwweGU3LDB4NmIsMHg1Nyww eGRlLDB4ODgsMHgxMSwweDk2LDB4OWIsMHg2ZSwweGVhLDB4ZTUsCisrCTB4NjMsMHg4MywweDRj LDB4YjYsMHg4ZCwweDY2LDB4YWEsMHgxZiwweDhiLDB4NTQsMHhlNywweDYyLAorKwkweDZkLDB4 NWEsMHhmYywweGJmLDB4OTcsMHhiYSwweGNkLDB4NzcKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9hZGRpdGlvbmFsaW5w dXRbXSA9CisrCXsKKysJMHhlNSwweDI4LDB4NWYsMHg0MywweGY1LDB4ODMsMHg2ZSwweDBhLDB4 ODMsMHg1YywweGUzLDB4ODEsCisrCTB4MDMsMHhmMiwweGY4LDB4NzgsMHgwMCwweDdjLDB4OTUs MHg4NywweDE2LDB4ZDYsMHg2YywweDU4LAorKwkweDMzLDB4NmMsMHg1MywweDM1LDB4MGQsMHg2 NiwweGUzLDB4Y2UKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTM4NF9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZTIs MHgxZiwweGYzLDB4ZGEsMHgwZCwweDE5LDB4OTksMHg4NywweGM0LDB4OTAsMHhhMiwweDMxLAor KwkweGNhLDB4MmEsMHg4OSwweDU4LDB4NDMsMHg0NCwweGI4LDB4ZGUsMHhjZiwweGE0LDB4YmUs MHgzYiwKKysJMHg1MywweDI2LDB4MjIsMHgzMSwweDc2LDB4NDEsMHgyMiwweGI1LDB4YTgsMHg3 MCwweDJmLDB4NGIsCisrCTB4NjQsMHg5NSwweDRkLDB4NDgsMHg5NiwweDM1LDB4ZTYsMHhiZCww eDNjLDB4MzQsMHhkYiwweDFiCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7 CisrCTB4NzcsMHg2MSwweGJhLDB4YmMsMHhmMiwweGMxLDB4ZjMsMHg0YiwweDg2LDB4NjUsMHhm ZCwweDQ4LAorKwkweDBlLDB4M2MsMHgwMiwweDVlLDB4YTIsMHg3YSwweDZiLDB4N2MsMHhlZCww eDIxLDB4NWUsMHhmOSwKKysJMHhjZCwweGNkLDB4NzcsMHgwNywweDJiLDB4YmUsMHhjNSwweDVj CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGEzODRfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4MTgsMHgyNCww eDVmLDB4YzYsMHg4NCwweGQxLDB4NjcsMHhjMywweDlhLDB4MTEsMHhhNSwweDhjLAorKwkweDA3 LDB4MzksMHgyMSwweDgzLDB4NGQsMHgwNCwweGM0LDB4NmEsMHgyOCwweDE5LDB4Y2YsMHg5MiwK KysJMHgyMSwweGQ5LDB4OWUsMHg0MSwweDcyLDB4NmMsMHg5ZSwweDYzCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfYWRk aXRpb25hbGlucHV0MltdID0KKysJeworKwkweDk2LDB4NjcsMHg0MSwweDI4LDB4OWIsMHhiNyww eDkyLDB4OGQsMHg2NCwweDNiLDB4ZTQsMHhjZiwKKysJMHg3ZSwweGFhLDB4MWUsMHhiMSwweDRi LDB4MWQsMHgwOSwweDU2LDB4NjcsMHg5YywweGM2LDB4NmQsCisrCTB4M2IsMHhlOCwweDkxLDB4 OWQsMHhlMSwweDhhLDB4YjcsMHgzMgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3JldHVybmVkYml0c1tdID0KKysJewor KwkweGUzLDB4NTksMHg2MSwweDM4LDB4OTIsMHhlYywweGUyLDB4M2MsMHhmZiwweGI3LDB4ZGIs MHgxOSwKKysJMHgwZiwweDViLDB4OTMsMHg2OCwweDBkLDB4YTQsMHg5NCwweDQwLDB4NzIsMHgw YiwweGUwLDB4ZWQsCisrCTB4NGQsMHhjZCwweDY4LDB4YTAsMHgxZSwweGZlLDB4NjcsMHhiMiww eGZhLDB4MjEsMHg1NiwweDc0LAorKwkweGE0LDB4YWQsMHhjZiwweGI3LDB4NjAsMHg2NiwweDJl LDB4NDAsMHhkZSwweDgyLDB4Y2EsMHhmYgorKwl9OworKworKworKy8qIEhNQUMgU0hBLTUxMiBQ UiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTUxMl9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHhhYSwweDllLDB4NDUsMHg2Nyww eDBlLDB4MDAsMHgyYSwweDY3LDB4OTgsMHhkNiwweGRhLDB4MGIsCisrCTB4MGYsMHgxNywweDdl LDB4YWMsMHhmZCwweDI3LDB4YzQsMHhjYSwweDg0LDB4ZGYsMHhkZSwweGJhLAorKwkweDg1LDB4 ZDksMHhiZSwweDhmLDB4ZjMsMHhmZiwweDkxLDB4NGQKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9ub25jZVtdID0K KysJeworKwkweDhjLDB4NDksMHgyZiwweDU4LDB4MWUsMHg3YSwweGRhLDB4NGIsMHg3ZSwweDhh LDB4MzAsMHg3YiwKKysJMHg4NiwweGVhLDB4YWYsMHhhMgorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX3BlcnNvbmFs aXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDcxLDB4ZTEsMHhiYiwweGFkLDB4YTcsMHg0Yiww eDJlLDB4MzEsMHgzYiwweDBiLDB4ZWMsMHgyNCwKKysJMHg5OSwweDM4LDB4YmMsMHhhYSwweDA1 LDB4NGMsMHg0NiwweDQ0LDB4ZmEsMHhhZCwweDhlLDB4MDIsCisrCTB4YzEsMHg3ZSwweGFkLDB4 ZWMsMHg1NCwweGE2LDB4ZDAsMHhhZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0K KysJeworKwkweDNkLDB4NmUsMHhhNiwweGE4LDB4MjksMHgyYSwweGIyLDB4ZjUsMHg5OCwweDQy LDB4ZTQsMHg5MiwKKysJMHg3OCwweDIyLDB4NjcsMHhmZCwweDFiLDB4MTUsMHgxZSwweDI5LDB4 YWEsMHg3MSwweDNjLDB4M2MsCisrCTB4ZTcsMHgwNSwweDIwLDB4YTksMHgyOSwweGM2LDB4NzUs MHg3MQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhNTEyX3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4YWIsMHhiOSww eDE2LDB4ZDgsMHg1NSwweDM1LDB4NTQsMHhiNywweDk3LDB4M2YsMHg5NCwweGJjLAorKwkweDJm LDB4N2MsMHg3MCwweGM3LDB4ZDAsMHhlZCwweGI3LDB4NGIsMHhmNywweGY2LDB4NmMsMHgwMywK KysJMHgwYywweGIwLDB4MDMsMHhkOCwweGJiLDB4NzEsMHhkOSwweDEwCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJf aW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDhlLDB4ZDMsMHhmZCwweDUyLDB4OWUsMHg4 MywweDA4LDB4NDksMHgxOCwweDZlLDB4MjMsMHg1NiwKKysJMHg1YywweDQ1LDB4OTMsMHgzNCww eDA1LDB4ZTIsMHg5OCwweDhmLDB4MGMsMHhkNCwweDMyLDB4MGMsCisrCTB4ZmQsMHhkYSwweDVm LDB4OTIsMHgzYSwweDhjLDB4ODEsMHhiZCwweGY2LDB4NmMsMHg1NSwweGZkLAorKwkweGI4LDB4 MjAsMHhjZSwweDhkLDB4OTcsMHgyNywweGU4LDB4ZTgsMHhlMCwweGIzLDB4ODUsMHg1MCwKKysJ MHhhMiwweGMyLDB4YjIsMHg5NSwweDFkLDB4NDgsMHhkMywweDdiLDB4NGIsMHg3OCwweDEzLDB4 MzUsCisrCTB4MDUsMHgxNywweGJlLDB4MGQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9hZGRpdGlvbmFsaW5wdXQy W10gPQorKwl7CisrCTB4YzMsMHhmYywweDk1LDB4YWEsMHg2OSwweDA2LDB4YWUsMHg1OSwweDQx LDB4Y2UsMHgyNiwweDA4LAorKwkweDI5LDB4NmQsMHg0NSwweGRhLDB4ZTgsMHhiMywweDZjLDB4 OTUsMHg2MCwweDBmLDB4NzAsMHgyYywKKysJMHgxMCwweGJhLDB4MzgsMHg4YywweGNmLDB4Mjks MHg5OSwweGFhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4M2Is MHg5YSwweDI1LDB4Y2UsMHhkNywweGY5LDB4NWMsMHhkMSwweDNhLDB4M2UsMHhhYSwweDcxLAor KwkweDE0LDB4M2UsMHgxOSwweGU4LDB4Y2UsMHhlNiwweGZlLDB4NTEsMHg4NCwweGU5LDB4MWIs MHhmZSwKKysJMHgzZiwweGE3LDB4ZjIsMHhmZCwweDc2LDB4NWYsMHg2YSwweGU3CisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1 MTJfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4YjcsMHg4MiwweGE5LDB4NTcsMHg4MSww eDY3LDB4NTMsMHhiNSwweGExLDB4ZTksMHgzZCwweDM1LAorKwkweGY5LDB4ZTQsMHg5NywweGJl LDB4YTYsMHhjYSwweGYxLDB4MDEsMHgxMywweDA5LDB4ZTcsMHgyMSwKKysJMHhjMCwweGVkLDB4 OTMsMHg1ZCwweDRiLDB4ZjQsMHhlYiwweDhkLDB4NTMsMHgyNSwweDhhLDB4YzQsCisrCTB4YjEs MHg2ZiwweDZlLDB4MzcsMHhjZCwweDJlLDB4YWMsMHgzOSwweGIyLDB4YjYsMHg5OSwweGEzLAor KwkweDgyLDB4MDAsMHhiMCwweDIxLDB4ZjAsMHhjNywweDJmLDB4NGMsMHg3MywweDkyLDB4ZmQs MHgwMCwKKysJMHhiNiwweGFmLDB4YmMsMHhkMworKwl9OworKworKworKy8qIEhNQUMgU0hBLTUx MiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTUxMl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHg2ZSwweDg1LDB4ZTYsMHgy NSwweDk2LDB4MjksMHhhNywweDUyLDB4NWIsMHg2MCwweGJhLDB4YWEsCisrCTB4ZGUsMHhkYiww eDM2LDB4MGEsMHg1MSwweDlhLDB4MTUsMHhhZSwweDZlLDB4MTgsMHhkMywweGZlLAorKwkweDM5 LDB4YjksMHg0YSwweDk2LDB4ZjgsMHg3NywweGNiLDB4OTUKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9ub25jZVtdID0K KysJeworKwkweGUwLDB4YTYsMHg1ZCwweDA4LDB4YzMsMHg3YywweGFlLDB4MjUsMHgyZSwweDgw LDB4ZDEsMHgzZSwKKysJMHhkOSwweGFmLDB4NDMsMHgzYworKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3BlcnNvbmFsaXph dGlvbnN0cmluZ1tdID0KKysJeworKwkweDUzLDB4OTksMHg1MiwweDVmLDB4MTEsMHhhOSwweDY0 LDB4NjYsMHgyMCwweDVlLDB4MWIsMHg1ZiwKKysJMHg0MiwweGIzLDB4ZjQsMHhkYSwweGVkLDB4 YmIsMHg2MywweGMxLDB4MjMsMHhhZiwweGQwLDB4MDEsCisrCTB4OTAsMHgzYiwweGQwLDB4Nzgs MHhlNCwweDBiLDB4YTcsMHgyMAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJewor KwkweDg1LDB4OTAsMHg4MCwweGQzLDB4OTgsMHhmMSwweDUzLDB4NmQsMHg2OCwweDE1LDB4OGYs MHhlNSwKKysJMHg2MCwweDNmLDB4MTcsMHgyOSwweDU1LDB4OGQsMHgzMywweGIxLDB4NDUsMHg2 NCwweDY0LDB4OGQsCisrCTB4NTAsMHgyMSwweDg5LDB4YWUsMHhmNiwweGZkLDB4MzIsMHg3Mwor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhNTEyX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHgyOCwweDU2LDB4MzAsMHg2 ZiwweGY0LDB4YTEsMHg0OCwweGUwLDB4YzksMHhmNSwweDc1LDB4OTAsCisrCTB4Y2MsMHhmYiww eGRmLDB4ZGYsMHg3MSwweDNkLDB4MGEsMHg5YSwweDAzLDB4NjUsMHgzYiwweDE4LAorKwkweDYx LDB4ZTMsMHhkMSwweGRhLDB4Y2MsMHg0YSwweGZlLDB4NTUsMHgzOCwweGY4LDB4MjEsMHg2YiwK KysJMHhmYSwweDE4LDB4MDEsMHg0MiwweDM5LDB4MmYsMHg5OSwweDUzLDB4MzgsMHgxNSwweDgy LDB4MzQsCisrCTB4YzUsMHg5MywweDkyLDB4YmMsMHg0ZCwweDc1LDB4MWEsMHg1ZiwweDIxLDB4 MjcsMHhjYywweGExLAorKwkweGIxLDB4NTcsMHg2OSwweGU4CisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfZW50cm9weWlu cHV0cmVzZWVkW10gPQorKwl7CisrCTB4OGMsMHg1MiwweDdlLDB4NzcsMHg3MiwweDNmLDB4YTMs MHgwNCwweDk3LDB4MTAsMHg5YiwweDQxLAorKwkweGJkLDB4ZTgsMHhmZiwweDg5LDB4ZWQsMHg4 MCwweGUzLDB4YmQsMHhhYSwweDEyLDB4MmQsMHhjYSwKKysJMHg3NSwweDgyLDB4MzYsMHg3Nyww eDg4LDB4Y2QsMHhhNiwweDczCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQor Kwl7CisrCTB4N2UsMHgzMiwweGUzLDB4NjksMHg2OSwweDA3LDB4MzQsMHhhMiwweDE2LDB4YTIs MHg1ZCwweDFhLAorKwkweDEwLDB4OTEsMHhkMywweGUyLDB4MjEsMHhhMiwweGEzLDB4ZGQsMHhj ZCwweDBjLDB4MDksMHg4NiwKKysJMHgxMSwweGUxLDB4NTAsMHhmZiwweDVjLDB4YjcsMHhlYiww eDVjCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGE1MTJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDdmLDB4NzgsMHg2 NiwweGQ4LDB4ZmIsMHg2NywweGNmLDB4OGQsMHg4YywweDA4LDB4MzAsMHhhNSwKKysJMHhmOCww eDdkLDB4Y2YsMHg0NCwweDU5LDB4Y2UsMHhmOCwweGRmLDB4NTgsMHhkMywweDYwLDB4Y2IsCisr CTB4YTgsMHg2MCwweGI5LDB4MDcsMHhjNCwweGIxLDB4OTUsMHg0OAorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3JldHVy bmVkYml0c1tdID0KKysJeworKwkweGRmLDB4YTcsMHgzNiwweGQ0LDB4ZGMsMHg1ZCwweDRkLDB4 MzEsMHhhZCwweDY5LDB4NDYsMHg5ZiwKKysJMHhmMSwweDdjLDB4ZDcsMHgzYiwweDRmLDB4NTUs MHhmMiwweGQ3LDB4YjksMHg5ZCwweGFkLDB4N2EsCisrCTB4NzksMHgwOCwweDU5LDB4YTUsMHhk YywweDc0LDB4ZjUsMHg5YiwweDczLDB4ZDIsMHgxMywweDI1LAorKwkweDBiLDB4ODEsMHgwOCww eDA4LDB4MjUsMHhmYiwweDM5LDB4ZjIsMHhmMCwweGEzLDB4YTQsMHg4ZCwKKysJMHhlZiwweDA1 LDB4OWUsMHhiOCwweGM3LDB4NTIsMHhlNCwweDBlLDB4NDIsMHhhYSwweDdjLDB4NzksCisrCTB4 YzIsMHhkNiwweGZkLDB4YTUKKysJfTsKKysKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2NyeXB0 by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlw cy9maXBzX2RzYV9zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvZmlw c19kc2Ffc2VsZnRlc3QuYy5maXBzCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTYyOTIyNTQwICswMTAw CisrKysgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYwkyMDE1 LTAxLTA5IDA5OjUxOjUxLjU2MjkyMjU0MCArMDEwMAorQEAgLTAsMCArMSwxOTMgQEAKKysvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor KyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24u CisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICog NC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0 IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3Bl bnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1h eSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgor KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJl ZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xs b3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisr ICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1Qg YGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pF Q1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs CisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgImZpcHNf bG9jbC5oIgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBkc2FfdGVzdF8yMDQ4X3BbXSA9IHsKKysJMHhhOCwweDUzLDB4NzgsMHhkOCwweGZk LDB4M2YsMHg4ZCwweDcyLDB4ZWMsMHg3NCwweDE4LDB4MDgsCisrCTB4MGQsMHhhMiwweDEzLDB4 MTcsMHhlNCwweDNlLDB4YzQsMHhiNiwweDJiLDB4YTgsMHhjOCwweDYyLAorKwkweDNiLDB4N2Us MHg0ZCwweDA0LDB4NDQsMHgxZCwweGQxLDB4YTAsMHg2NSwweDg2LDB4NjIsMHg1OSwKKysJMHg2 NCwweDkzLDB4Y2EsMHg4ZSwweDllLDB4OGYsMHhiYiwweDdlLDB4MzQsMHhhYSwweGRkLDB4YjYs CisrCTB4MmUsMHg1ZCwweDY3LDB4YjYsMHhkMCwweDlhLDB4NmUsMHg2MSwweGI3LDB4NjksMHhl NywweGMzLAorKwkweDUyLDB4YWEsMHgyYiwweDEwLDB4ZTIsMHgwYywweGEwLDB4NjMsMHg2OSww eDYzLDB4YjUsMHg1MiwKKysJMHgzZSwweDg2LDB4NDcsMHgwZCwweGVjLDB4YmIsMHhlZCwweGEw LDB4MjcsMHhlNywweDk3LDB4ZTcsCisrCTB4YjYsMHg3NiwweDM1LDB4ZDQsMHhkNCwweDljLDB4 MzAsMHg3MCwweDBlLDB4NzQsMHhhZiwweDhhLAorKwkweDBmLDB4ZjEsMHg1NiwweGE4LDB4MDEs MHhhZiwweDU3LDB4YTIsMHg2ZSwweDcwLDB4NzgsMHhmMSwKKysJMHhkOCwweDJmLDB4NzQsMHg5 MCwweDhlLDB4Y2IsMHg2ZCwweDA3LDB4ZTcsMHgwYiwweDM1LDB4MDMsCisrCTB4ZWUsMHhkOSww eDRmLDB4YTMsMHgyYywweGYxLDB4N2EsMHg3ZiwweGMzLDB4ZDYsMHhjZiwweDQwLAorKwkweGRj LDB4N2IsMHgwMCwweDgzLDB4MGUsMHg2YSwweDI1LDB4NjYsMHhkYywweDA3LDB4M2UsMHgzNCwK KysJMHgzMywweDEyLDB4NTEsMHg3YywweDZhLDB4YTUsMHgxNSwweDJiLDB4NGIsMHhmZSwweGNk LDB4MmUsCisrCTB4NTUsMHgxZiwweGVlLDB4MzQsMHg2MywweDE4LDB4YTEsMHg1MywweDQyLDB4 M2MsMHg5OSwweDZiLAorKwkweDBkLDB4NWQsMHhjYiwweDkxLDB4MDIsMHhhZSwweGRkLDB4Mzgs MHg3OSwweDg2LDB4MTYsMHhmMSwKKysJMHhmMSwweGUwLDB4ZDYsMHhjNCwweDAzLDB4NTIsMHg1 YiwweDFmLDB4OWIsMHgzZCwweDRkLDB4YzcsCisrCTB4NjYsMHhkZSwweDJkLDB4ZmMsMHg0YSww eDU2LDB4ZDcsMHhiOCwweGJhLDB4NTksMHg2MywweGQ2LAorKwkweDBmLDB4M2UsMHgxNiwweDMx LDB4ODgsMHg3MCwweGFkLDB4NDMsMHg2OSwweDUyLDB4ZTUsMHg1NywKKysJMHg2NSwweDM3LDB4 NGUsMHhhYiwweDg1LDB4ZTgsMHhlYywweDE3LDB4ZDYsMHhiOSwweGE0LDB4NTQsCisrCTB4N2Is MHg5YiwweDVmLDB4MjcsMHg1MiwweGYzLDB4MTAsMHg1YiwweGU4LDB4MDksMHhiMiwweDNhLAor KwkweDJjLDB4OGQsMHg3NCwweDY5LDB4ZGIsMHgwMiwweGUyLDB4NGQsMHg1OSwweDIzLDB4OTQs MHhhNywKKysJMHhkYiwweGEwLDB4NjksMHhlOQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgZHNhX3Rlc3RfMjA0OF9xW10gPSB7CisrCTB4ZDIsMHg3NywweDA0LDB4NGUsMHg1 MCwweGY1LDB4YTQsMHhlMywweGY1LDB4MTAsMHhhNSwweDBhLAorKwkweDBiLDB4ODQsMHhmZCww eGZmLDB4YmMsMHhhMCwweDQ3LDB4ZWQsMHgyNywweDYwLDB4MjAsMHg1NiwKKysJMHg3NCwweDQx LDB4YTAsMHhhNQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3Rf MjA0OF9nW10gPSB7CisrCTB4MTMsMHhkNywweDU0LDB4ZTIsMHgxZiwweGQyLDB4NDEsMHg2NSww eDVkLDB4YTgsMHg5MSwweGM1LAorKwkweDIyLDB4YTYsMHg1YSwweDcyLDB4YTgsMHg5YiwweGRj LDB4NjQsMHhlYywweDliLDB4NTQsMHhhOCwKKysJMHgyMSwweGVkLDB4NGEsMHg4OSwweDhiLDB4 NDksMHgwZSwweDBjLDB4NGYsMHhjYiwweDcyLDB4MTksCisrCTB4MmEsMHg0YSwweDIwLDB4ZjUs MHg0MSwweGYzLDB4ZjIsMHg5MiwweDUzLDB4OTksMHhmMCwweGJhLAorKwkweGVjLDB4ZjksMHgy OSwweGFhLDB4ZmIsMHhmNywweDlkLDB4ZmUsMHg0MywweDMyLDB4MzksMHgzYiwKKysJMHgzMiww eGNkLDB4MmUsMHgyZiwweGNmLDB4MjcsMHgyZiwweDMyLDB4YTYsMHgyNywweDQzLDB4NGEsCisr CTB4MGQsMHhmMiwweDQyLDB4YjcsMHg1YiwweDQxLDB4NGQsMHhmMywweDcyLDB4MTIsMHgxZSww eDUzLAorKwkweGE1LDB4NTMsMHhmMiwweDIyLDB4ZjgsMHgzNiwweGIwLDB4MDAsMHhmMCwweDE2 LDB4NDgsMHg1YiwKKysJMHg2YiwweGQwLDB4ODksMHg4NCwweDUxLDB4ODAsMHgxZCwweGNkLDB4 OGQsMHhlNiwweDRjLDB4ZDUsCisrCTB4MzYsMHg1NiwweDk2LDB4ZmYsMHhjNSwweDMyLDB4ZDUs MHgyOCwweGM1LDB4MDYsMHg2MiwweDBhLAorKwkweDk0LDB4MmEsMHgwMywweDA1LDB4MDQsMHg2 ZCwweDhmLDB4MTgsMHg3NiwweDM0LDB4MWYsMHgxZSwKKysJMHg1NywweDBiLDB4YzMsMHg5Nyww eDRiLDB4YTYsMHhiOSwweGE0LDB4MzgsMHhlOSwweDcwLDB4MjMsCisrCTB4MDIsMHhhMiwweGU2 LDB4ZTYsMHg3YiwweGZkLDB4MDYsMHhkMywweDJiLDB4YzYsMHg3OSwweDk2LAorKwkweDIyLDB4 NzEsMHhkNywweGI0LDB4MGMsMHhkNywweDJmLDB4MzgsMHg2ZSwweDY0LDB4ZTAsMHhkNywKKysJ MHhlZiwweDg2LDB4Y2EsMHg4YywweGE1LDB4ZDEsMHg0MiwweDI4LDB4ZGMsMHgyYSwweDRmLDB4 MTYsCisrCTB4ZTMsMHgxOCwweDk4LDB4ODYsMHhiNSwweDk5LDB4MDYsMHg3NCwweGY0LDB4MjAs MHgwZiwweDNhLAorKwkweDRjLDB4ZjYsMHg1YSwweDNmLDB4MGQsMHhkYiwweGExLDB4ZmEsMHg2 NywweDJkLDB4ZmYsMHgyZiwKKysJMHg1ZSwweDE0LDB4M2QsMHgxMCwweGU0LDB4ZTksMHg3YSww eGU4LDB4NGYsMHg2ZCwweGEwLDB4OTUsCisrCTB4MzUsMHhkNSwweGI5LDB4ZGYsMHgyNSwweDkx LDB4ODEsMHhhNywweDliLDB4NjMsMHhiMCwweDY5LAorKwkweGU5LDB4NDksMHg5NywweDJiLDB4 MDIsMHhiYSwweDM2LDB4YjMsMHg1OCwweDZhLDB4YWIsMHg3ZSwKKysJMHg0NSwweGYzLDB4MjIs MHhmOCwweDJlLDB4NGUsMHg4NSwweGNhLDB4M2EsMHhiOCwweDU1LDB4OTEsCisrCTB4YjMsMHhj MiwweGE5LDB4NjYKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0 XzIwNDhfcHViX2tleVtdID0geworKwkweDI0LDB4NTIsMHhmMywweGNjLDB4YmUsMHg5ZSwweGQ1 LDB4Y2EsMHg3ZCwweGM3LDB4NGMsMHg2MCwKKysJMHgyYiwweDk5LDB4MjIsMHg2ZSwweDhmLDB4 MmYsMHhhYiwweDM4LDB4ZTcsMHhkNywweGRkLDB4ZmIsCisrCTB4NzUsMHg1MywweDliLDB4MTcs MHgxNSwweDVlLDB4OWYsMHhjZiwweGQxLDB4YWIsMHhhNSwweDY0LAorKwkweGViLDB4ODUsMHgz NSwweGQ4LDB4MTIsMHhjOSwweGMyLDB4ZGMsMHhmOSwweDcyLDB4ODQsMHg0NCwKKysJMHgxYiww eGM0LDB4ODIsMHgyNCwweDM2LDB4MjQsMHhjNywweGY0LDB4NTcsMHg1OCwweDBjLDB4MWMsCisr CTB4MzgsMHhhNSwweDdjLDB4NDYsMHhjNCwweDU3LDB4MzksMHgyNCwweDcwLDB4ZWQsMHhiNSww eDJjLAorKwkweGI1LDB4YTYsMHhlMCwweDNmLDB4ZTYsMHgyOCwweDdiLDB4YjYsMHhmNCwweDlh LDB4NDIsMHhhMiwKKysJMHgwNiwweDVhLDB4MDUsMHg0ZiwweDAzLDB4MDgsMHgzOSwweGRmLDB4 MWYsMHhkMywweDE0LDB4OWMsCisrCTB4NGMsMHhhMCwweDUzLDB4MWQsMHhkOCwweGNhLDB4OGEs MHhhYSwweDljLDB4YzcsMHgzMywweDcxLAorKwkweDkzLDB4MzgsMHg3MywweDQ4LDB4MzMsMHg2 MSwweDE4LDB4MjIsMHg0NSwweDQ1LDB4ZTgsMHg4YywKKysJMHg4MCwweGZmLDB4ZDgsMHg3Niww eDVkLDB4NzQsMHgzNiwweDAzLDB4MzMsMHhjYywweGFiLDB4OTksCisrCTB4NzIsMHg3NywweDli LDB4NjUsMHgyNSwweGE2LDB4NWIsMHhkZCwweDBkLDB4MTAsMHhjNiwweDc1LAorKwkweGMxLDB4 MDksMHhiYiwweGQzLDB4ZTUsMHhiZSwweDRkLDB4NzIsMHhlZiwweDZlLDB4YmEsMHg2ZSwKKysJ MHg0MywweDhkLDB4NTIsMHgyNiwweDIzLDB4N2QsMHhiOCwweDg4LDB4MzcsMHg5YywweDVmLDB4 Y2MsCisrCTB4NDcsMHhhMywweDg0LDB4N2YsMHhmNiwweDM3LDB4MTEsMHhiYSwweGVkLDB4NmQs MHgwMywweGFmLAorKwkweGU4LDB4MWUsMHg2OSwweDRhLDB4NDEsMHgzYiwweDY4LDB4MGIsMHhk MywweDhhLDB4YjQsMHg5MCwKKysJMHgzZiwweDgzLDB4NzAsMHhhNywweDA3LDB4ZWYsMHg1NSww eDFkLDB4NDksMHg0MSwweDAyLDB4NmQsCisrCTB4OTUsMHg3OSwweGQ2LDB4OTEsMHhkZSwweDhl LDB4ZGEsMHhhMSwweDYxLDB4MDUsMHhlYiwweDlkLAorKwkweGJhLDB4M2MsMHgyZiwweDRjLDB4 MWIsMHhlYywweDUwLDB4ODIsMHg3NSwweGFhLDB4MDIsMHgwNywKKysJMHhlMiwweDUxLDB4YjUs MHhlYywweGNiLDB4MjgsMHg2YSwweDRiLDB4MDEsMHhkNCwweDQ5LDB4ZDMsCisrCTB4MGEsMHhj YiwweDY3LDB4MzcsMHgxNywweGEwLDB4ZDIsMHhmYiwweDNiLDB4NTAsMHhjOCwweDkzLAorKwkw eGY3LDB4ZGEsMHhiMSwweDRmCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBk c2FfdGVzdF8yMDQ4X3ByaXZfa2V5W10gPSB7CisrCTB4MGMsMHg0YiwweDMwLDB4ODksMHhkMSww eGI4LDB4NjIsMHhjYiwweDNjLDB4NDMsMHg2NCwweDkxLAorKwkweGYwLDB4OTEsMHg1NCwweDcw LDB4YzUsMHgyNywweDk2LDB4ZTMsMHhhYywweGJlLDB4ZTgsMHgwMCwKKysJMHhlYywweDU1LDB4 ZjYsMHhjYworK307CisrCisrc3RhdGljIGludCBjb3JydXB0X2RzYTsKKysKKyt2b2lkIEZJUFNf Y29ycnVwdF9kc2EoKQorKyAgICB7CisrICAgIGNvcnJ1cHRfZHNhID0gMTsKKysgICAgfQorKwor K2ludCBGSVBTX3NlbGZ0ZXN0X2RzYSgpCisrCXsKKysJRFNBICpkc2EgPSBOVUxMOworKwlFVlBf UEtFWSAqcGsgPSBOVUxMOworKwlpbnQgcmV0ID0gMDsKKysKKysJZHNhID0gRFNBX25ldygpOwor KworKwlpZihkc2EgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKworKwlmaXBzX2xvYWRfa2V5X2Nv bXBvbmVudChkc2EsIHAsIGRzYV90ZXN0XzIwNDgpOworKwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVu dChkc2EsIHEsIGRzYV90ZXN0XzIwNDgpOworKwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2Es IGcsIGRzYV90ZXN0XzIwNDgpOworKwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIHB1Yl9r ZXksIGRzYV90ZXN0XzIwNDgpOworKwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIHByaXZf a2V5LCBkc2FfdGVzdF8yMDQ4KTsKKysKKysJaWYgKGNvcnJ1cHRfZHNhKQorKwkJQk5fc2V0X2Jp dChkc2EtPnB1Yl9rZXksIDIwNDcpOworKworKwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBO VUxMKQorKwkJZ290byBlcnI7CisrCisrCUVWUF9QS0VZX2Fzc2lnbl9EU0EocGssIGRzYSk7Cisr CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBOVUxMLCAwLAorKwkJCQkJTlVM TCwgMCwgRVZQX3NoYTI1NigpLCAwLAorKwkJCQkJIkRTQSBTSEEyNTYiKSkKKysJCWdvdG8gZXJy OworKwlyZXQgPSAxOworKworKwllcnI6CisrCWlmIChwaykKKysJCUVWUF9QS0VZX2ZyZWUocGsp OworKwllbHNlIGlmIChkc2EpCisrCQlEU0FfZnJlZShkc2EpOworKwlyZXR1cm4gcmV0OworKwl9 CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9maXBzX2VuYy5j LmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvZmlwc19lbmMuYworLS0tIG9wZW5zc2wt MS4wLjFrL2NyeXB0by9maXBzL2ZpcHNfZW5jLmMuZmlwcwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU2 MjkyMjU0MCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHNfZW5jLmMJ MjAxNS0wMS0wOSAwOTo1MTo1MS41NjI5MjI1NDAgKzAxMDAKK0BAIC0wLDAgKzEsMTkxIEBACisr LyogZmlwZS9ldnAvZmlwc19lbmMuYyAqLworKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVy aWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisr ICoKKysgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKysg KiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisrICogVGhlIGltcGxlbWVudGF0 aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorKyAq IAorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVy Y2lhbCB1c2UgYXMgbG9uZyBhcworKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhl YXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFwcGx5IHRvIGFsbCBjb2Rl IGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisrICogbGhh c2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1 bWVudGF0aW9uCisrICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVk IGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIg aXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqIAorKyAqIENvcHlyaWdodCBy ZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGlu CisrICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorKyAqIElmIHRoaXMgcGFja2Fn ZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmli dXRpb24KKysgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2Vk LgorKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHBy b2dyYW0gc3RhcnR1cCBvcgorKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFs KSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorKyAqIAorKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisrICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4gdGhlCisrICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKysgKiAzLiBBbGwgYWR2 ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29m dHdhcmUKKysgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdy aXR0ZW4gYnkKKysgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorKyAqICAg IFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMg ZnJvbSB0aGUgbGlicmFyeQorKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGlj IHJlbGF0ZWQgOi0pLgorKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmlj IGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorKyAqICAgIHRoZSBhcHBzIGRp cmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRn ZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5 IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKysgKiAKKysgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorKyAqIEFOWSBFWFBSRVNT IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisrICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKysgKiBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTAorKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisrICogT1IgU0VSVklDRVM7IExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULCBTVFJJQ1QKKysgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisrICogT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgor KyAqIFNVQ0ggREFNQUdFLgorKyAqIAorKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24g dGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisrICogZGVyaXZh dGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5u b3Qgc2ltcGx5IGJlCisrICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRp b24gbGljZW5jZQorKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisrICov CisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KKysKKytjb25zdCBFVlBfQ0lQSEVSICpGSVBTX2dldF9jaXBoZXJieW5p ZChpbnQgbmlkKQorKwl7CisrCXN3aXRjaCAobmlkKQorKwkJeworKwkJY2FzZSBOSURfYWVzXzEy OF9jYmM6CisrCQlyZXR1cm4gRVZQX2Flc18xMjhfY2JjKCk7CisrCisrCQljYXNlIE5JRF9hZXNf MTI4X2NjbToKKysJCXJldHVybiBFVlBfYWVzXzEyOF9jY20oKTsKKysKKysJCWNhc2UgTklEX2Fl c18xMjhfY2ZiMToKKysJCXJldHVybiBFVlBfYWVzXzEyOF9jZmIxKCk7CisrCisrCQljYXNlIE5J RF9hZXNfMTI4X2NmYjEyODoKKysJCXJldHVybiBFVlBfYWVzXzEyOF9jZmIxMjgoKTsKKysKKysJ CWNhc2UgTklEX2Flc18xMjhfY2ZiODoKKysJCXJldHVybiBFVlBfYWVzXzEyOF9jZmI4KCk7Cisr CisrCQljYXNlIE5JRF9hZXNfMTI4X2N0cjoKKysJCXJldHVybiBFVlBfYWVzXzEyOF9jdHIoKTsK KysKKysJCWNhc2UgTklEX2Flc18xMjhfZWNiOgorKwkJcmV0dXJuIEVWUF9hZXNfMTI4X2VjYigp OworKworKwkJY2FzZSBOSURfYWVzXzEyOF9nY206CisrCQlyZXR1cm4gRVZQX2Flc18xMjhfZ2Nt KCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTI4X29mYjEyODoKKysJCXJldHVybiBFVlBfYWVzXzEy OF9vZmIoKTsKKysKKysJCWNhc2UgTklEX2Flc18xMjhfeHRzOgorKwkJcmV0dXJuIEVWUF9hZXNf MTI4X3h0cygpOworKworKwkJY2FzZSBOSURfYWVzXzE5Ml9jYmM6CisrCQlyZXR1cm4gRVZQX2Fl c18xOTJfY2JjKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTkyX2NjbToKKysJCXJldHVybiBFVlBf YWVzXzE5Ml9jY20oKTsKKysKKysJCWNhc2UgTklEX2Flc18xOTJfY2ZiMToKKysJCXJldHVybiBF VlBfYWVzXzE5Ml9jZmIxKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTkyX2NmYjEyODoKKysJCXJl dHVybiBFVlBfYWVzXzE5Ml9jZmIxMjgoKTsKKysKKysJCWNhc2UgTklEX2Flc18xOTJfY2ZiODoK KysJCXJldHVybiBFVlBfYWVzXzE5Ml9jZmI4KCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTkyX2N0 cjoKKysJCXJldHVybiBFVlBfYWVzXzE5Ml9jdHIoKTsKKysKKysJCWNhc2UgTklEX2Flc18xOTJf ZWNiOgorKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2VjYigpOworKworKwkJY2FzZSBOSURfYWVzXzE5 Ml9nY206CisrCQlyZXR1cm4gRVZQX2Flc18xOTJfZ2NtKCk7CisrCisrCQljYXNlIE5JRF9hZXNf MTkyX29mYjEyODoKKysJCXJldHVybiBFVlBfYWVzXzE5Ml9vZmIoKTsKKysKKysJCWNhc2UgTklE X2Flc18yNTZfY2JjOgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2NiYygpOworKworKwkJY2FzZSBO SURfYWVzXzI1Nl9jY206CisrCQlyZXR1cm4gRVZQX2Flc18yNTZfY2NtKCk7CisrCisrCQljYXNl IE5JRF9hZXNfMjU2X2NmYjE6CisrCQlyZXR1cm4gRVZQX2Flc18yNTZfY2ZiMSgpOworKworKwkJ Y2FzZSBOSURfYWVzXzI1Nl9jZmIxMjg6CisrCQlyZXR1cm4gRVZQX2Flc18yNTZfY2ZiMTI4KCk7 CisrCisrCQljYXNlIE5JRF9hZXNfMjU2X2NmYjg6CisrCQlyZXR1cm4gRVZQX2Flc18yNTZfY2Zi OCgpOworKworKwkJY2FzZSBOSURfYWVzXzI1Nl9jdHI6CisrCQlyZXR1cm4gRVZQX2Flc18yNTZf Y3RyKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMjU2X2VjYjoKKysJCXJldHVybiBFVlBfYWVzXzI1 Nl9lY2IoKTsKKysKKysJCWNhc2UgTklEX2Flc18yNTZfZ2NtOgorKwkJcmV0dXJuIEVWUF9hZXNf MjU2X2djbSgpOworKworKwkJY2FzZSBOSURfYWVzXzI1Nl9vZmIxMjg6CisrCQlyZXR1cm4gRVZQ X2Flc18yNTZfb2ZiKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMjU2X3h0czoKKysJCXJldHVybiBF VlBfYWVzXzI1Nl94dHMoKTsKKysKKysJCWNhc2UgTklEX2Rlc19lZGVfZWNiOgorKwkJcmV0dXJu IEVWUF9kZXNfZWRlKCk7CisrCisrCQljYXNlIE5JRF9kZXNfZWRlM19lY2I6CisrCQlyZXR1cm4g RVZQX2Rlc19lZGUzKCk7CisrCisrCQljYXNlIE5JRF9kZXNfZWRlM19jYmM6CisrCQlyZXR1cm4g RVZQX2Rlc19lZGUzX2NiYygpOworKworKwkJY2FzZSBOSURfZGVzX2VkZTNfY2ZiMToKKysJCXJl dHVybiBFVlBfZGVzX2VkZTNfY2ZiMSgpOworKworKwkJY2FzZSBOSURfZGVzX2VkZTNfY2ZiNjQ6 CisrCQlyZXR1cm4gRVZQX2Rlc19lZGUzX2NmYjY0KCk7CisrCisrCQljYXNlIE5JRF9kZXNfZWRl M19jZmI4OgorKwkJcmV0dXJuIEVWUF9kZXNfZWRlM19jZmI4KCk7CisrCisrCQljYXNlIE5JRF9k ZXNfZWRlM19vZmI2NDoKKysJCXJldHVybiBFVlBfZGVzX2VkZTNfb2ZiKCk7CisrCisrCQljYXNl IE5JRF9kZXNfZWRlX2NiYzoKKysJCXJldHVybiBFVlBfZGVzX2VkZV9jYmMoKTsKKysKKysJCWNh c2UgTklEX2Rlc19lZGVfY2ZiNjQ6CisrCQlyZXR1cm4gRVZQX2Rlc19lZGVfY2ZiNjQoKTsKKysK KysJCWNhc2UgTklEX2Rlc19lZGVfb2ZiNjQ6CisrCQlyZXR1cm4gRVZQX2Rlc19lZGVfb2ZiKCk7 CisrCisrCQlkZWZhdWx0OgorKwkJcmV0dXJuIE5VTEw7CisrCisrCQl9CisrCX0KKysKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHMuaC5maXBzIG9wZW5zc2wtMS4wLjFr L2NyeXB0by9maXBzL2ZpcHMuaAorLS0tIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHMu aC5maXBzCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTYyOTIyNTQwICswMTAwCisrKysgb3BlbnNzbC0x LjAuMWsvY3J5cHRvL2ZpcHMvZmlwcy5oCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTYyOTIyNTQwICsw MTAwCitAQCAtMCwwICsxLDI3OSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChj KSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisr ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisr ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNv ZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8v d3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtp dCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lv biwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoK KysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNh bGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIg bmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3Bl blNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdo YXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQg KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJF U1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMg QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK KysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBB TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAor KyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNp bmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRv Lmg+CisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2Vy cm9yIEZJUFMgaXMgZGlzYWJsZWQuCisrI2VuZGlmCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUwor KworKyNpZmRlZiAgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKytzdHJ1 Y3QgZHNhX3N0OworK3N0cnVjdCByc2Ffc3Q7Cisrc3RydWN0IGV2cF9wa2V5X3N0OworK3N0cnVj dCBlbnZfbWRfc3Q7Cisrc3RydWN0IGVudl9tZF9jdHhfc3Q7Cisrc3RydWN0IGV2cF9jaXBoZXJf c3Q7Cisrc3RydWN0IGV2cF9jaXBoZXJfY3R4X3N0OworK3N0cnVjdCBkaF9tZXRob2Q7Cisrc3Ry dWN0IENNQUNfQ1RYX3N0OworK3N0cnVjdCBobWFjX2N0eF9zdDsKKysKKytpbnQgRklQU19tb2R1 bGVfbW9kZV9zZXQoaW50IG9ub2ZmLCBjb25zdCBjaGFyICphdXRoKTsKKytpbnQgRklQU19tb2R1 bGVfbW9kZSh2b2lkKTsKKytjb25zdCB2b2lkICpGSVBTX3JhbmRfY2hlY2sodm9pZCk7CisraW50 IEZJUFNfc2VsZnRlc3Qodm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQpOwor K3ZvaWQgRklQU19jb3JydXB0X3NoYTEodm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3Rfc2hhMSh2 b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9zaGEyKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0 X2Flcyh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9hZXNfY2NtKHZvaWQpOworK2ludCBGSVBT X3NlbGZ0ZXN0X2Flc19nY20odm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfYWVzX3h0cyh2b2lk KTsKKytpbnQgRklQU19zZWxmdGVzdF9hZXModm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfZGVz KHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2Rlcyh2b2lkKTsKKyt2b2lkIEZJUFNfY29ycnVw dF9yc2Eodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbih2b2lkKTsKKytpbnQg RklQU19zZWxmdGVzdF9yc2Eodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfZHNhKHZvaWQpOwor K3ZvaWQgRklQU19jb3JydXB0X2RzYV9rZXlnZW4odm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3Rf ZHNhKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X3JuZyh2b2lkKTsKKyt2b2lkIEZJUFNfcm5n X3N0aWNrKHZvaWQpOworK3ZvaWQgRklQU194OTMxX3N0aWNrKGludCBvbm9mZik7Cisrdm9pZCBG SVBTX2RyYmdfc3RpY2soaW50IG9ub2ZmKTsKKytpbnQgRklQU19zZWxmdGVzdF9ybmcodm9pZCk7 CisraW50IEZJUFNfc2VsZnRlc3RfeDkzMSh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9obWFj KHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2RyYmcodm9pZCk7CisraW50IEZJUFNfc2VsZnRl c3RfZHJiZ19hbGwodm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfY21hYyh2b2lkKTsKKysKKyt2 b2lkIEZJUFNfZ2V0X3RpbWV2ZWModW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nICpw Y3RyKTsKKysKKysjZGVmaW5lIEZJUFNfRVJST1JfSUdOT1JFRChhbGcpIE9wZW5TU0xEaWUoX19G SUxFX18sIF9fTElORV9fLCBcCisrCQlhbGcgIiBwcmV2aW91cyBGSVBTIGZvcmJpZGRlbiBhbGdv cml0aG0gZXJyb3IgaWdub3JlZCIpOworKworK2ludCBmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qo c3RydWN0IGV2cF9wa2V5X3N0ICpwa2V5LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRicywg aW50IHRic2xlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICprYXQsIHVuc2lnbmVkIGludCBr YXRsZW4sCisrCQkJY29uc3Qgc3RydWN0IGVudl9tZF9zdCAqZGlnZXN0LCB1bnNpZ25lZCBpbnQg bWRfZmxhZ3MsCisrCQkJY29uc3QgY2hhciAqZmFpbF9zdHIpOworKworK2ludCBmaXBzX2NpcGhl cl90ZXN0KHN0cnVjdCBldnBfY2lwaGVyX2N0eF9zdCAqY3R4LAorKwkJCWNvbnN0IHN0cnVjdCBl dnBfY2lwaGVyX3N0ICpjaXBoZXIsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorKwkJ CWNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWlu dGV4dCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0LAorKwkJCWludCBsZW4p OworKworK3ZvaWQgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCh2b2lkKTsKKysKKytjb25zdCBzdHJ1 Y3QgZW52X21kX3N0ICpGSVBTX2dldF9kaWdlc3RieW5pZChpbnQgbmlkKTsKKysKKytjb25zdCBz dHJ1Y3QgZXZwX2NpcGhlcl9zdCAqRklQU19nZXRfY2lwaGVyYnluaWQoaW50IG5pZCk7CisrCisr CisrLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KKysvKiBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBh dXRvIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcworKyAqIG1h ZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IGlz IG5leHQgcnVuLgorKyAqLworK3ZvaWQgRVJSX2xvYWRfRklQU19zdHJpbmdzKHZvaWQpOworKwor Ky8qIEVycm9yIGNvZGVzIGZvciB0aGUgRklQUyBmdW5jdGlvbnMuICovCisrCisrLyogRnVuY3Rp b24gY29kZXMuICovCisrI2RlZmluZSBGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMJCQkgMTAw CisrI2RlZmluZSBGSVBTX0ZfREhfSU5JVAkJCQkJIDE0OAorKyNkZWZpbmUgRklQU19GX0RSQkdf UkVTRUVECQkJCSAxNjIKKysjZGVmaW5lIEZJUFNfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTgkJCSAx MDEKKysjZGVmaW5lIEZJUFNfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTjIJCQkgMTA3CisrI2RlZmlu ZSBGSVBTX0ZfRFNBX0RPX1NJR04JCQkJIDEwMgorKyNkZWZpbmUgRklQU19GX0RTQV9ET19WRVJJ RlkJCQkJIDEwMworKyNkZWZpbmUgRklQU19GX0VDREhfQ09NUFVURV9LRVkJCQkJIDE2MworKyNk ZWZpbmUgRklQU19GX0VDRFNBX0RPX1NJR04JCQkJIDE2NAorKyNkZWZpbmUgRklQU19GX0VDRFNB X0RPX1ZFUklGWQkJCQkgMTY1CisrI2RlZmluZSBGSVBTX0ZfRUNfS0VZX0dFTkVSQVRFX0tFWQkJ CSAxNjYKKysjZGVmaW5lIEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWAkJCSAxMjQKKysjZGVmaW5l IEZJUFNfRl9FVlBfRElHRVNUSU5JVF9FWAkJCSAxMjUKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NI RUNLX0RTQQkJCQkgMTA0CisrI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19EU0FfUFJORwkJCSAx NTEKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0VDCQkJCSAxNDIKKysjZGVmaW5lIEZJUFNf Rl9GSVBTX0NIRUNLX0VDX1BSTkcJCQkgMTUyCisrI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19J TkNPUkVfRklOR0VSUFJJTlQJCSAxMDUKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX1JTQQkJ CQkgMTA2CisrI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19SU0FfUFJORwkJCSAxNTAKKysjZGVm aW5lIEZJUFNfRl9GSVBTX0NJUEhFUgkJCQkgMTYwCisrI2RlZmluZSBGSVBTX0ZfRklQU19DSVBI RVJJTklUCQkJCSAxNDMKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NJUEhFUl9DVFhfQ1RSTAkJCSAx NjEKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RJR0VTVEZJTkFMCQkJCSAxNTgKKysjZGVmaW5lIEZJ UFNfRl9GSVBTX0RJR0VTVElOSVQJCQkJIDEyOAorKyNkZWZpbmUgRklQU19GX0ZJUFNfRElHRVNU VVBEQVRFCQkJIDE1OQorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19CWVRFUwkJCQkgMTMxCisr I2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX0NIRUNLCQkJCSAxNDYKKysjZGVmaW5lIEZJUFNfRl9G SVBTX0RSQkdfQ1BSTkdfVEVTVAkJCSAxMzIKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfRVJS T1JfQ0hFQ0sJCQkgMTM2CisrI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX0dFTkVSQVRFCQkJIDEz NAorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19JTklUCQkJCSAxMzUKKysjZGVmaW5lIEZJUFNf Rl9GSVBTX0RSQkdfSU5TVEFOVElBVEUJCQkgMTM4CisrI2RlZmluZSBGSVBTX0ZfRklQU19EUkJH X05FVwkJCQkgMTM5CisrI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX1JFU0VFRAkJCQkgMTQwCisr I2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQJCQkgMTQxCisrI2RlZmluZSBGSVBT X0ZfRklQU19EU0FfQ0hFQ0sJCS8qIHVudXNlZCAqLwkgMTA3CisrI2RlZmluZSBGSVBTX0ZfRklQ U19EU0FfU0lHTl9ESUdFU1QJCQkgMTU0CisrI2RlZmluZSBGSVBTX0ZfRklQU19EU0FfVkVSSUZZ X0RJR0VTVAkJCSAxNTUKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0dFVF9FTlRST1BZCQkJCSAxNDcK KysjZGVmaW5lIEZJUFNfRl9GSVBTX01PREVfU0VUCQkvKiB1bnVzZWQgKi8JIDEwOAorKyNkZWZp bmUgRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VUCQkJIDEwOAorKyNkZWZpbmUgRklQU19GX0ZJ UFNfUEtFWV9TSUdOQVRVUkVfVEVTVAkJCSAxMDkKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRf QURECQkJCSAxMzcKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfQllURVMJCQkJIDEyMgorKyNk ZWZpbmUgRklQU19GX0ZJUFNfUkFORF9QU0VVRE9fQllURVMJCQkgMTY3CisrI2RlZmluZSBGSVBT X0ZfRklQU19SQU5EX1NFRUQJCQkJIDE2OAorKyNkZWZpbmUgRklQU19GX0ZJUFNfUkFORF9TRVRf TUVUSE9ECQkJIDEyNgorKyNkZWZpbmUgRklQU19GX0ZJUFNfUkFORF9TVEFUVVMJCQkJIDEyNwor KyNkZWZpbmUgRklQU19GX0ZJUFNfUlNBX1NJR05fRElHRVNUCQkJIDE1NgorKyNkZWZpbmUgRklQ U19GX0ZJUFNfUlNBX1ZFUklGWV9ESUdFU1QJCQkgMTU3CisrI2RlZmluZSBGSVBTX0ZfRklQU19T RUxGVEVTVF9BRVMJCQkgMTEwCisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfQ0NN CQkJIDE0NQorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0dDTQkJCSAxMjkKKysj ZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19YVFMJCQkgMTQ0CisrI2RlZmluZSBGSVBT X0ZfRklQU19TRUxGVEVTVF9DTUFDCQkJIDEzMAorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRF U1RfREVTCQkJIDExMQorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfRFNBCQkJIDExMgor KyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfRUNEU0EJCQkgMTMzCisrI2RlZmluZSBGSVBT X0ZfRklQU19TRUxGVEVTVF9ITUFDCQkJIDExMworKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRF U1RfUk5HCS8qIHVudXNlZCAqLwkgMTE0CisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9T SEExCQkJIDExNQorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfWDkzMQkJCSAxMTQKKysj ZGVmaW5lIEZJUFNfRl9GSVBTX1NFVF9QUk5HX0tFWQkJCSAxNTMKKysjZGVmaW5lIEZJUFNfRl9I QVNIX0ZJTkFMCQkJCSAxMjMKKysjZGVmaW5lIEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4JCQkg MTE2CisrI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9JTklUCQkJCSAxNDkKKysjZGVmaW5lIEZJUFNf Rl9SU0FfRUFZX1BSSVZBVEVfREVDUllQVAkJCSAxMTcKKysjZGVmaW5lIEZJUFNfRl9SU0FfRUFZ X1BSSVZBVEVfRU5DUllQVAkJCSAxMTgKKysjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19E RUNSWVBUCQkJIDExOQorKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQJCQkg MTIwCisrI2RlZmluZSBGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYCQkJIDEyMQorKyNk ZWZpbmUgRklQU19GX1NTTEVBWV9SQU5EX0JZVEVTCS8qIHVudXNlZCAqLwkgMTIyCisrCisrLyog UmVhc29uIGNvZGVzLiAqLworKyNkZWZpbmUgRklQU19SX0FERElUSU9OQUxfSU5QVVRfRVJST1Jf VU5ERVRFQ1RFRAkgMTUwCisrI2RlZmluZSBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9O RwkJIDEyNQorKyNkZWZpbmUgRklQU19SX0FMUkVBRFlfSU5TVEFOVElBVEVECQkJIDEzNAorKyNk ZWZpbmUgRklQU19SX0FVVEhFTlRJQ0FUSU9OX0ZBSUxVUkUJCQkgMTUxCisrI2RlZmluZSBGSVBT X1JfQ0FOTk9UX1JFQURfRVhFCQkvKiB1bnVzZWQgKi8JIDEwMworKyNkZWZpbmUgRklQU19SX0NB Tk5PVF9SRUFEX0VYRV9ESUdFU1QJLyogdW51c2VkICovCSAxMDQKKysjZGVmaW5lIEZJUFNfUl9D T05UUkFESUNUSU5HX0VWSURFTkNFCQkJIDExNAorKyNkZWZpbmUgRklQU19SX0RSQkdfTk9UX0lO SVRJQUxJU0VECQkJIDE1MgorKyNkZWZpbmUgRklQU19SX0RSQkdfU1RVQ0sJCQkJIDEwMworKyNk ZWZpbmUgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRAkJCSAxMDQKKysjZGVmaW5lIEZJ UFNfUl9FTlRST1BZX05PVF9SRVFVRVNURURfRk9SX1JFU0VFRAkJIDEwNQorKyNkZWZpbmUgRklQ U19SX0VOVFJPUFlfU09VUkNFX1NUVUNLCQkJIDE0MgorKyNkZWZpbmUgRklQU19SX0VSUk9SX0lO SVRJQUxJU0lOR19EUkJHCQkJIDExNQorKyNkZWZpbmUgRklQU19SX0VSUk9SX0lOU1RBTlRJQVRJ TkdfRFJCRwkJCSAxMjcKKysjZGVmaW5lIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0FERElUSU9O QUxfSU5QVVQJIDEyNAorKyNkZWZpbmUgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWQkJ CSAxMjIKKysjZGVmaW5lIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX05PTkNFCQkJIDE0MAorKyNk ZWZpbmUgRklQU19SX0VYRV9ESUdFU1RfRE9FU19OT1RfTUFUQ0ggICAvKiB1bnVzZWQgKi8JIDEw NQorKyNkZWZpbmUgRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENICQkgMTEwCisrI2Rl ZmluZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfTk9OUElDX1JFTE9DQVRFRCAx MTEKKysjZGVmaW5lIEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSF9TRUdNRU5UX0FM SUFTSU5HIDExMgorKyNkZWZpbmUgRklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NFVAkJCSAxMDIK KysjZGVmaW5lIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRAkJCSAxMDYKKysjZGVmaW5lIEZJ UFNfUl9GVU5DVElPTl9FUlJPUgkJCQkgMTE2CisrI2RlZmluZSBGSVBTX1JfR0VORVJBVEVfRVJS T1IJCQkJIDEzNworKyNkZWZpbmUgRklQU19SX0dFTkVSQVRFX0VSUk9SX1VOREVURUNURUQJCSAx MTgKKysjZGVmaW5lIEZJUFNfUl9JTlNUQU5USUFURV9FUlJPUgkJCSAxMTkKKysjZGVmaW5lIEZJ UFNfUl9JTlNVRkZJQ0lFTlRfU0VDVVJJVFlfU1RSRU5HVEgJCSAxMjAKKysjZGVmaW5lIEZJUFNf Ul9JTlRFUk5BTF9FUlJPUgkJCQkgMTIxCisrI2RlZmluZSBGSVBTX1JfSU5WQUxJRF9LRVlfTEVO R1RICQkJIDEwOQorKyNkZWZpbmUgRklQU19SX0lOVkFMSURfUEFSQU1FVEVSUwkJCSAxNDQKKysj ZGVmaW5lIEZJUFNfUl9JTl9FUlJPUl9TVEFURQkJCQkgMTIzCisrI2RlZmluZSBGSVBTX1JfS0VZ X1RPT19TSE9SVAkJCQkgMTA4CisrI2RlZmluZSBGSVBTX1JfTk9OQ0VfRVJST1JfVU5ERVRFQ1RF RAkJCSAxNDkKKysjZGVmaW5lIEZJUFNfUl9OT05fRklQU19NRVRIT0QJCQkJIDEwMAorKyNkZWZp bmUgRklQU19SX05PUFJfVEVTVDFfRkFJTFVSRQkJCSAxNDUKKysjZGVmaW5lIEZJUFNfUl9OT1BS X1RFU1QyX0ZBSUxVUkUJCQkgMTQ2CisrI2RlZmluZSBGSVBTX1JfTk9UX0lOU1RBTlRJQVRFRAkJ CQkgMTI2CisrI2RlZmluZSBGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQJCQkgMTA3CisrI2Rl ZmluZSBGSVBTX1JfUEVSU09OQUxJU0FUSU9OX0VSUk9SX1VOREVURUNURUQJCSAxMjgKKysjZGVm aW5lIEZJUFNfUl9QRVJTT05BTElTQVRJT05fU1RSSU5HX1RPT19MT05HCQkgMTI5CisrI2RlZmlu ZSBGSVBTX1JfUFJOR19TVFJFTkdUSF9UT09fTE9XCQkJIDE0MworKyNkZWZpbmUgRklQU19SX1BS X1RFU1QxX0ZBSUxVUkUJCQkJIDE0NworKyNkZWZpbmUgRklQU19SX1BSX1RFU1QyX0ZBSUxVUkUJ CQkJIDE0OAorKyNkZWZpbmUgRklQU19SX1JFUVVFU1RfTEVOR1RIX0VSUk9SX1VOREVURUNURUQJ CSAxMzAKKysjZGVmaW5lIEZJUFNfUl9SRVFVRVNUX1RPT19MQVJHRV9GT1JfRFJCRwkJIDEzMQor KyNkZWZpbmUgRklQU19SX1JFU0VFRF9DT1VOVEVSX0VSUk9SCQkJIDEzMgorKyNkZWZpbmUgRklQ U19SX1JFU0VFRF9FUlJPUgkJCQkgMTMzCisrI2RlZmluZSBGSVBTX1JfUlNBX0RFQ1JZUFRfRVJS T1IJLyogdW51c2VkICovCSAxMTUKKysjZGVmaW5lIEZJUFNfUl9SU0FfRU5DUllQVF9FUlJPUgkv KiB1bnVzZWQgKi8JIDExNgorKyNkZWZpbmUgRklQU19SX1NFTEZURVNUX0ZBSUxFRAkJCQkgMTAx CisrI2RlZmluZSBGSVBTX1JfU0VMRlRFU1RfRkFJTFVSRQkJCQkgMTM1CisrI2RlZmluZSBGSVBT X1JfU1RSRU5HVEhfRVJST1JfVU5ERVRFQ1RFRAkJIDEzNgorKyNkZWZpbmUgRklQU19SX1RFU1Rf RkFJTFVSRQkJCQkgMTE3CisrI2RlZmluZSBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUgkJCSAx NDEKKysjZGVmaW5lIEZJUFNfUl9VTklOU1RBTlRJQVRFX1pFUk9JU0VfRVJST1IJCSAxMzgKKysj ZGVmaW5lIEZJUFNfUl9VTlNVUFBPUlRFRF9EUkJHX1RZUEUJCQkgMTM5CisrI2RlZmluZSBGSVBT X1JfVU5TVVBQT1JURURfUExBVEZPUk0JCQkgMTEzCisrCisrI2lmZGVmICBfX2NwbHVzcGx1cwor K30KKysjZW5kaWYKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBz L2ZpcHNfaG1hY19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvZmlw c19obWFjX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9maXBzX2ht YWNfc2VsZnRlc3QuYy5maXBzCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTYzOTIyNTYyICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMJMjAxNS0w MS0wOSAwOTo1MTo1MS41NjM5MjI1NjIgKzAxMDAKK0BAIC0wLDAgKzEsMTM3IEBACisrLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysg KiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgor KyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQu IFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBu b3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5z c2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkg Ik9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysg KiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRp c3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93 aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAq CisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBg QVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBP U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNU IE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAor KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+CisrI2VuZGlmCisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKworKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKyt0eXBlZGVmIHN0cnVjdCB7CisrCWNvbnN0IEVWUF9NRCAqKCphbGcpKHZv aWQpOworKwljb25zdCBjaGFyICprZXksICppdjsKKysJdW5zaWduZWQgY2hhciBrYXZhbFtFVlBf TUFYX01EX1NJWkVdOworK30gSE1BQ19LQVQ7CisrCisrc3RhdGljIGNvbnN0IEhNQUNfS0FUIHZl Y3RvcltdID0geworKyAgICB7CUVWUF9zaGExLAorKwkvKiBmcm9tIGh0dHA6Ly9jc3JjLm5pc3Qu Z292L3B1YmxpY2F0aW9ucy9maXBzL2ZpcHMxOTgvZmlwcy0xOThhLnBkZiAqLworKwkiMDEyMzQ1 Njc4OTo7PD0+P0BBQkMiLAorKwkiU2FtcGxlICMyIiwKKysJeyAweDA5LDB4MjIsMHhkMywweDQw LDB4NWYsMHhhYSwweDNkLDB4MTksCisrCSAgMHg0ZiwweDgyLDB4YTQsMHg1OCwweDMwLDB4NzMs MHg3ZCwweDVjLAorKwkgIDB4YzYsMHhjNywweDVkLDB4MjQgfQorKyAgICB9LAorKyAgICB7CUVW UF9zaGEyMjQsCisrCS8qIGp1c3Qga2VlcCBleHRlbmRpbmcgdGhlIGFib3ZlLi4uICovCisrCSIw MTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCisrCSJTYW1wbGUgIzIiLAorKwl7IDB4ZGQsMHhlZiwweDBh LDB4NDAsMHhjYiwweDdkLDB4NTAsMHhmYiwKKysJICAweDZlLDB4ZTYsMHhjZSwweGExLDB4MjAs MHhiYSwweDI2LDB4YWEsCisrCSAgMHgwOCwweGYzLDB4MDcsMHg3NSwweDg3LDB4YjgsMHhhZCww eDFiLAorKwkgIDB4OGMsMHg4ZCwweDEyLDB4YzcgfQorKyAgICB9LAorKyAgICB7CUVWUF9zaGEy NTYsCisrCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCisrCSJTYW1wbGUgIzIiLAorKwl7IDB4Yjgs MHhmMiwweDBkLDB4YjUsMHg0MSwweGVhLDB4NDMsMHgwOSwKKysJICAweGNhLDB4NGUsMHhhOSww eDM4LDB4MGMsMHhkMCwweGU4LDB4MzQsCisrCSAgMHhmNywweDFmLDB4YmUsMHg5MSwweDc0LDB4 YTIsMHg2MSwweDM4LAorKwkgIDB4MGQsMHhjMSwweDdlLDB4YWUsMHg2YSwweDM0LDB4NTEsMHhk OSB9CisrICAgIH0sCisrICAgIHsJRVZQX3NoYTM4NCwKKysJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJD IiwKKysJIlNhbXBsZSAjMiIsCisrCXsgMHgwOCwweGJjLDB4YjAsMHhkYSwweDQ5LDB4MWUsMHg4 NywweGFkLAorKwkgIDB4OWEsMHgxZCwweDZhLDB4Y2UsMHgyMywweGM1LDB4MGIsMHhmNiwKKysJ ICAweGI3LDB4MTgsMHgwNiwweGE1LDB4NzcsMHhjZCwweDQ5LDB4MDQsCisrCSAgMHg4OSwweGYx LDB4ZTYsMHgyMywweDQ0LDB4NTEsMHg1MSwweDlmLAorKwkgIDB4ODUsMHg1NiwweDgwLDB4Nzks MHgwYywweGJkLDB4NGQsMHg1MCwKKysJICAweGE0LDB4NWYsMHgyOSwweGUzLDB4OTMsMHhmMCww eGU4LDB4N2YgfQorKyAgICB9LAorKyAgICB7CUVWUF9zaGE1MTIsCisrCSIwMTIzNDU2Nzg5Ojs8 PT4/QEFCQyIsCisrCSJTYW1wbGUgIzIiLAorKwl7IDB4ODAsMHg5ZCwweDQ0LDB4MDUsMHg3Yyww eDViLDB4OTUsMHg0MSwKKysJICAweDA1LDB4YmQsMHgwNCwweDEzLDB4MTYsMHhkYiwweDBmLDB4 YWMsCisrCSAgMHg0NCwweGQ1LDB4YTQsMHhkNSwweGQwLDB4ODksMHgyYiwweGQwLAorKwkgIDB4 NGUsMHg4NiwweDY0LDB4MTIsMHhjMCwweDkwLDB4NzcsMHg2OCwKKysJICAweGYxLDB4ODcsMHhi NywweDdjLDB4NGYsMHhhZSwweDJjLDB4MmYsCisrCSAgMHgyMSwweGE1LDB4YjUsMHg2NSwweDlh LDB4NGYsMHg0YiwweGE3LAorKwkgIDB4NDcsMHgwMiwweGEzLDB4ZGUsMHg5YiwweDUxLDB4ZjEs MHg0NSwKKysJICAweGJkLDB4NGYsMHgyNSwweDI3LDB4NDIsMHg5OCwweDk5LDB4MDUgfQorKyAg ICB9LAorK307CisrCisraW50IEZJUFNfc2VsZnRlc3RfaG1hYygpCisrICAgIHsKKysgICAgaW50 IG47CisrICAgIHVuc2lnbmVkIGludCAgICBvdXRsZW47CisrICAgIHVuc2lnbmVkIGNoYXIgICBv dXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAgY29uc3QgRVZQX01EICAgKm1kOworKyAgICBjb25z dCBITUFDX0tBVCAqdDsKKysKKysgICAgZm9yKG49MCx0PXZlY3RvcjsgbjxzaXplb2YodmVjdG9y KS9zaXplb2YodmVjdG9yWzBdKTsgbisrLHQrKykKKysJeworKwltZCA9ICgqdC0+YWxnKSgpOwor KwlITUFDKG1kLHQtPmtleSxzdHJsZW4odC0+a2V5KSwKKysJCShjb25zdCB1bnNpZ25lZCBjaGFy ICopdC0+aXYsc3RybGVuKHQtPml2KSwKKysJCW91dCwmb3V0bGVuKTsKKysKKysJaWYobWVtY21w KG91dCx0LT5rYXZhbCxvdXRsZW4pKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfRklQ U19TRUxGVEVTVF9ITUFDLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwkgICAgcmV0dXJuIDA7 CisrCSAgICB9CisrCX0KKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysjZW5kaWYKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHNfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAu MWsvY3J5cHRvL2ZpcHMvZmlwc19sb2NsLmgKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlw cy9maXBzX2xvY2wuaC5maXBzCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTYzOTIyNTYyICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvZmlwc19sb2NsLmgJMjAxNS0wMS0wOSAwOTo1 MTo1MS41NjM5MjI1NjIgKzAxMDAKK0BAIC0wLDAgKzEsNzEgQEAKKysvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor KyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy 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 ICoKKysgKi8KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrI2lmZGVmICBfX2NwbHVzcGx1 cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorKworKyNkZWZpbmUgRklQU19NQVhfQ0lQSEVSX1RF U1RfU0laRQkzMgorKyNkZWZpbmUgZmlwc19sb2FkX2tleV9jb21wb25lbnQoa2V5LCBjb21wLCBw cmUpIFwKKysJa2V5LT5jb21wID0gQk5fYmluMmJuKHByZSMjXyMjY29tcCwgc2l6ZW9mKHByZSMj XyMjY29tcCksIGtleS0+Y29tcCk7IFwKKysJaWYgKCFrZXktPmNvbXApIFwKKysJCWdvdG8gZXJy CisrCisrI2RlZmluZSBmaXBzX3Bvc3Rfc3RhcnRlZChpZCwgc3ViaWQsIGV4KSAxCisrI2RlZmlu ZSBmaXBzX3Bvc3Rfc3VjY2VzcyhpZCwgc3ViaWQsIGV4KSAxCisrI2RlZmluZSBmaXBzX3Bvc3Rf ZmFpbGVkKGlkLCBzdWJpZCwgZXgpIDEKKysjZGVmaW5lIGZpcHNfcG9zdF9jb3JydXB0KGlkLCBz dWJpZCwgZXgpIDEKKysjZGVmaW5lIGZpcHNfcG9zdF9zdGF0dXMoKSAxCisrCisrI2lmZGVmICBf X2NwbHVzcGx1cworK30KKysjZW5kaWYKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFr L2NyeXB0by9maXBzL2ZpcHNfbWQuYy5maXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2Zp cHNfbWQuYworLS0tIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHNfbWQuYy5maXBzCTIw MTUtMDEtMDkgMDk6NTE6NTEuNTYzOTIyNTYyICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWsvY3J5 cHRvL2ZpcHMvZmlwc19tZC5jCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTYzOTIyNTYyICswMTAwCitA QCAtMCwwICsxLDE0NSBAQAorKy8qIGZpcHMvZXZwL2ZpcHNfbWQuYyAqLworKy8qIENvcHlyaWdo dCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorKyAqIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVu dGF0aW9uIHdyaXR0ZW4KKysgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisr ICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBO ZXRzY2FwZXMgU1NMLgorKyAqIAorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJj aWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworKyAqIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAq IGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUg UkM0LCBSU0EsCisrICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBj b2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisrICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3Ry aWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworKyAqIGV4Y2Vw dCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAq IAorKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENv cHlyaWdodCBub3RpY2VzIGluCisrICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgor KyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91 bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKysgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBv ZiB0aGUgbGlicmFyeSB1c2VkLgorKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4 dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorKyAqIGluIGRvY3VtZW50YXRpb24g KG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorKyAqIAorKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKysgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisrICogICAgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv bi4KKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKysgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9n cmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKysgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0 c29mdC5jb20pIgorKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBv dXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorKyAqICAgIGJlaW5nIHVzZWQgYXJl IG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFu eSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAor KyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5j bHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKysgKiAK KysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFO RAorKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisrICogQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUKKysgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisrICogT1Ig U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKysgKiBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisr ICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI RSBQT1NTSUJJTElUWSBPRgorKyAqIFNVQ0ggREFNQUdFLgorKyAqIAorKyAqIFRoZSBsaWNlbmNl IGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJz aW9uIG9yCisrICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBp LmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisrICogY29waWVkIGFuZCBwdXQgdW5kZXIg YW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJs aWMgTGljZW5jZS5dCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDE5 OTgtMjAwMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgor KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgor KyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBz b2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xr aXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv dXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Np b24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAq CisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBj YWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWly IG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9w ZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3 aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVu dDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBS RVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JT IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU CisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK KysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KysgKgorKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdy aXR0ZW4gYnkgRXJpYyBZb3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24gKHRqaEBjcnlw dHNvZnQuY29tKS4KKysgKgorKyAqLworKworKy8qIE1pbmltYWwgc3RhbmRhbG9uZSBGSVBTIHZl cnNpb25zIG9mIERpZ2VzdCBvcGVyYXRpb25zICovCisrCisrI2RlZmluZSBPUEVOU1NMX0ZJUFNB UEkKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysKKytjb25z dCBFVlBfTUQgKkZJUFNfZ2V0X2RpZ2VzdGJ5bmlkKGludCBuaWQpCisrCXsKKysJc3dpdGNoIChu aWQpCisrCQl7CisrCQljYXNlIE5JRF9zaGExOgorKwkJcmV0dXJuIEVWUF9zaGExKCk7CisrCisr CQljYXNlIE5JRF9zaGEyMjQ6CisrCQlyZXR1cm4gRVZQX3NoYTIyNCgpOworKworKwkJY2FzZSBO SURfc2hhMjU2OgorKwkJcmV0dXJuIEVWUF9zaGEyNTYoKTsKKysKKysJCWNhc2UgTklEX3NoYTM4 NDoKKysJCXJldHVybiBFVlBfc2hhMzg0KCk7CisrCisrCQljYXNlIE5JRF9zaGE1MTI6CisrCQly ZXR1cm4gRVZQX3NoYTUxMigpOworKworKwkJZGVmYXVsdDoKKysJCXJldHVybiBOVUxMOworKwkJ fQorKwl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYy5m aXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jCistLS0gb3BlbnNzbC0x LjAuMWsvY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMuZmlwcwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU2 MzkyMjU2MiArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHNfcG9zdC5j CTIwMTUtMDEtMDkgMDk6NTE6NTEuNTYzOTIyNTYyICswMTAwCitAQCAtMCwwICsxLDIwNSBAQAor Ky8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2pl Y3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgor KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1 dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBm ZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUg Zm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoK KysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3Qi IG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4g cGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAg ICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBu b3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0 dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICog Ni4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhl IGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcv KSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJP SkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysg KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wg UFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVT RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBP RiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCisr CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4K KysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGxpbWl0cy5oPgorKworKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysKKysvKiBQb3dlciBvbiBzZWxmIHRlc3QgKFBPU1QpIHN1cHBvcnQgZnVu Y3Rpb25zICovCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlICJmaXBz X2xvY2wuaCIKKysKKysvKiBSdW4gYWxsIHNlbGZ0ZXN0cyAqLworK2ludCBGSVBTX3NlbGZ0ZXN0 KHZvaWQpCisrCXsKKysJaW50IHJ2ID0gMTsKKysJaWYgKCFGSVBTX3NlbGZ0ZXN0X2RyYmcoKSkK KysJCXJ2ID0gMDsKKysJaWYgKCFGSVBTX3NlbGZ0ZXN0X3g5MzEoKSkKKysJCXJ2ID0gMDsKKysg ICAgCWlmICghRklQU19zZWxmdGVzdF9zaGExKCkpCisrCQlydiA9IDA7CisrICAgIAlpZiAoIUZJ UFNfc2VsZnRlc3Rfc2hhMigpKQorKwkJcnYgPSAwOworKwlpZiAoIUZJUFNfc2VsZnRlc3RfaG1h YygpKQorKwkJcnYgPSAwOworKwlpZiAoIUZJUFNfc2VsZnRlc3RfY21hYygpKQorKwkJcnYgPSAw OworKwlpZiAoIUZJUFNfc2VsZnRlc3RfYWVzKCkpCisrCQlydiA9IDA7CisrCWlmICghRklQU19z ZWxmdGVzdF9hZXNfY2NtKCkpCisrCQlydiA9IDA7CisrCWlmICghRklQU19zZWxmdGVzdF9hZXNf Z2NtKCkpCisrCQlydiA9IDA7CisrCWlmICghRklQU19zZWxmdGVzdF9hZXNfeHRzKCkpCisrCQly diA9IDA7CisrCWlmICghRklQU19zZWxmdGVzdF9kZXMoKSkKKysJCXJ2ID0gMDsKKysJaWYgKCFG SVBTX3NlbGZ0ZXN0X3JzYSgpKQorKwkJcnYgPSAwOworKwlpZiAoIUZJUFNfc2VsZnRlc3RfZHNh KCkpCisrCQlydiA9IDA7CisrCXJldHVybiBydjsKKysJfQorKworKy8qIEdlbmVyYWxpemVkIHB1 YmxpYyBrZXkgdGVzdCByb3V0aW5lLiBTaWducyBhbmQgdmVyaWZpZXMgdGhlIGRhdGEKKysgKiBz dXBwbGllZCBpbiB0YnMgdXNpbmcgbWVzYWdlIGRpZ2VzdCBtZCBhbmQgc2V0dGluZyBvcHRpb24g ZGlnZXN0CisrICogZmxhZ3MgbWRfZmxhZ3MuIElmIHRoZSAna2F0JyBwYXJhbWV0ZXIgaXMgbm90 IE5VTEwgaXQgd2lsbAorKyAqIGFkZGl0aW9uYWxseSBjaGVjayB0aGUgc2lnbmF0dXJlIG1hdGNo ZXMgaXQ6IGEga25vd24gYW5zd2VyIHRlc3QKKysgKiBUaGUgc3RyaW5nICJmYWlsX3N0ciIgaXMg dXNlZCBmb3IgaWRlbnRpZmljYXRpb24gcHVycG9zZXMgaW4gY2FzZQorKyAqIG9mIGZhaWx1cmUu IElmICJwa2V5IiBpcyBOVUxMIGp1c3QgcGVyZm9ybSBhIG1lc3NhZ2UgZGlnZXN0IGNoZWNrLgor KyAqLworKworK2ludCBmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QoRVZQX1BLRVkgKnBrZXksCisr CQkJY29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBpbnQgdGJzbGVuLAorKwkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmthdCwgdW5zaWduZWQgaW50IGthdGxlbiwKKysJCQljb25zdCBFVlBfTUQgKmRp Z2VzdCwgdW5zaWduZWQgaW50IG1kX2ZsYWdzLAorKwkJCWNvbnN0IGNoYXIgKmZhaWxfc3RyKQor Kwl7CQorKwlpbnQgcmV0ID0gMDsKKysJdW5zaWduZWQgY2hhciBzaWd0bXBbMjU2XSwgKnNpZyA9 IHNpZ3RtcDsKKysJdW5zaWduZWQgaW50IHNpZ2xlbjsKKysJRVZQX01EX0NUWCBtY3R4OworKwlF VlBfTURfQ1RYX2luaXQoJm1jdHgpOworKworKwlpZiAoZGlnZXN0ID09IE5VTEwpCisrCQlkaWdl c3QgPSBFVlBfc2hhMjU2KCk7CisrCisrCWlmICgocGtleS0+dHlwZSA9PSBFVlBfUEtFWV9SU0Ep CisrCQkmJiAoUlNBX3NpemUocGtleS0+cGtleS5yc2EpID4gc2l6ZW9mKHNpZ3RtcCkpKQorKwkJ eworKwkJc2lnID0gT1BFTlNTTF9tYWxsb2MoUlNBX3NpemUocGtleS0+cGtleS5yc2EpKTsKKysJ CWlmICghc2lnKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJF X1RFU1QsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworKwkJCXJldHVybiAwOworKwkJCX0KKysJCX0K KysKKysJaWYgKHRic2xlbiA9PSAtMSkKKysJCXRic2xlbiA9IHN0cmxlbigoY2hhciAqKXRicyk7 CisrCisrCWlmIChtZF9mbGFncykKKysJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZtY3R4LCBtZF9m bGFncyk7CisrCisrCWlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBkaWdlc3QsIE5VTEwpKQor KwkJZ290byBlcnJvcjsKKysJaWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgdGJzLCB0YnNsZW4p KQorKwkJZ290byBlcnJvcjsKKysJaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBzaWcsICZzaWds ZW4sIHBrZXkpKQorKwkJZ290byBlcnJvcjsKKysKKysJaWYgKGthdCAmJiAoKHNpZ2xlbiAhPSBr YXRsZW4pIHx8IG1lbWNtcChrYXQsIHNpZywga2F0bGVuKSkpCisrCQlnb3RvIGVycm9yOworKwor KwlpZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBkaWdlc3QsIE5VTEwpKQorKwkJZ290byBl cnJvcjsKKysJaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCB0YnMsIHRic2xlbikpCisrCQln b3RvIGVycm9yOworKwlyZXQgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIHNpZywgc2lnbGVuLCBw a2V5KTsKKysKKysJZXJyb3I6CisrCWlmIChzaWcgIT0gc2lndG1wKQorKwkJT1BFTlNTTF9mcmVl KHNpZyk7CisrCUVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7CisrCWlmIChyZXQgIT0gMSkKKysJ CXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVCxGSVBTX1JfVEVT VF9GQUlMVVJFKTsKKysJCWlmIChmYWlsX3N0cikKKysJCQlFUlJfYWRkX2Vycm9yX2RhdGEoMiwg IlR5cGU9IiwgZmFpbF9zdHIpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCXJldHVybiAxOworKwl9 CisrCisrLyogR2VuZXJhbGl6ZWQgc3ltbWV0cmljIGNpcGhlciB0ZXN0IHJvdXRpbmUuIEVuY3J5 cHQgZGF0YSwgdmVyaWZ5IHJlc3VsdAorKyAqIGFnYWluc3Qga25vd24gYW5zd2VyLCBkZWNyeXB0 IGFuZCBjb21wYXJlIHdpdGggb3JpZ2luYWwgcGxhaW50ZXh0LgorKyAqLworKworK2ludCBmaXBz X2NpcGhlcl90ZXN0KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhl ciwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisrCQkJY29uc3QgdW5zaWduZWQgY2hh ciAqaXYsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LAorKwkJCWNvbnN0IHVu c2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsCisrCQkJaW50IGxlbikKKysJeworKwl1bnNpZ25lZCBj aGFyIHBsdG1wW0ZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkVdOworKwl1bnNpZ25lZCBjaGFyIGNp dG1wW0ZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkVdOworKworKwlPUEVOU1NMX2Fzc2VydChsZW4g PD0gRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRSk7CisrCW1lbXNldChwbHRtcCwgMCwgRklQU19N QVhfQ0lQSEVSX1RFU1RfU0laRSk7CisrCW1lbXNldChjaXRtcCwgMCwgRklQU19NQVhfQ0lQSEVS X1RFU1RfU0laRSk7CisrCisrCWlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVM TCwga2V5LCBpdiwgMSkgPD0gMCkKKysJCXJldHVybiAwOworKwlpZiAoRVZQX0NpcGhlcihjdHgs IGNpdG1wLCBwbGFpbnRleHQsIGxlbikgPD0gMCkKKysJCXJldHVybiAwOworKwlpZiAobWVtY21w KGNpdG1wLCBjaXBoZXJ0ZXh0LCBsZW4pKQorKwkJcmV0dXJuIDA7CisrCWlmIChFVlBfQ2lwaGVy SW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwga2V5LCBpdiwgMCkgPD0gMCkKKysJCXJldHVybiAw OworKwlpZiAoRVZQX0NpcGhlcihjdHgsIHBsdG1wLCBjaXRtcCwgbGVuKSA8PSAwKQorKwkJcmV0 dXJuIDA7CisrCWlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4dCwgbGVuKSkKKysJCXJldHVybiAw OworKwlyZXR1cm4gMTsKKysJfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvY3J5 cHRvL2ZpcHMvZmlwc19yYW5kLmMuZmlwcyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9maXBz X3JhbmQuYworLS0tIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jLmZpcHMJ MjAxNS0wMS0wOSAwOTo1MTo1MS41NjQ5MjI1ODUgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9j cnlwdG8vZmlwcy9maXBzX3JhbmQuYwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU2NDkyMjU4NSArMDEw MAorQEAgLTAsMCArMSw0NTcgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykg MjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAq ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0 d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQi IGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3Jz ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQK KysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24s IHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisr ICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxs ZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5h bWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5T U0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0 c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoK KysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0ICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNT RUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisr ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysg KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysvKgor KyAqIFRoaXMgaXMgYSBGSVBTIGFwcHJvdmVkIEFFUyBQUk5HIGJhc2VkIG9uIEFOU0kgWDkuMzEg QS4yLjQuCisrICovCisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgImVf b3MuaCIKKysKKysvKiBJZiB3ZSBkb24ndCBkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCwg c3RydWN0IHRpbWV2YWwgd29uJ3QKKysgICBiZSBkZWZpbmVkIGFuZCBnZXR0aW1lb2ZkYXkoKSB3 b24ndCBiZSBkZWNsYXJlZCB3aXRoIHN0cmljdCBjb21waWxlcnMKKysgICBsaWtlIERFQyBDIGlu IEFOU0kgQyBtb2RlLiAgKi8KKysjaWZuZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKysjZGVm aW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgMQorKyNlbmRpZgorKworKyNpbmNsdWRlIDxvcGVu c3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaWYgIShkZWZpbmVk KE9QRU5TU0xfU1lTX1dJTjMyKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpKQorKyMg aW5jbHVkZSA8c3lzL3RpbWUuaD4KKysjZW5kaWYKKysjaWYgZGVmaW5lZChPUEVOU1NMX1NZU19W WFdPUktTKQorKyMgaW5jbHVkZSA8dGltZS5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxhc3NlcnQu aD4KKysjaWZuZGVmIE9QRU5TU0xfU1lTX1dJTjMyCisrIyBpZmRlZiBPUEVOU1NMX1VOSVNURAor KyMgIGluY2x1ZGUgT1BFTlNTTF9VTklTVEQKKysjIGVsc2UKKysjICBpbmNsdWRlIDx1bmlzdGQu aD4KKysjIGVuZGlmCisrI2VuZGlmCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisrCisrI2lmZGVmIE9QRU5T U0xfRklQUworKworK3ZvaWQgKk9QRU5TU0xfc3RkZXJyKHZvaWQpOworKworKyNkZWZpbmUgQUVT X0JMT0NLX0xFTkdUSAkxNgorKworKworKy8qIEFFUyBGSVBTIFBSTkcgaW1wbGVtZW50YXRpb24g Ki8KKysKKyt0eXBlZGVmIHN0cnVjdCAKKysJeworKwlpbnQgc2VlZGVkOworKwlpbnQga2V5ZWQ7 CisrCWludCB0ZXN0X21vZGU7CisrCWludCBzZWNvbmQ7CisrCWludCBlcnJvcjsKKysJdW5zaWdu ZWQgbG9uZyBjb3VudGVyOworKwlBRVNfS0VZIGtzOworKwlpbnQgdnBvczsKKysJLyogVGVtcG9y YXJ5IHN0b3JhZ2UgZm9yIGtleSBpZiBpdCBlcXVhbHMgc2VlZCBsZW5ndGggKi8KKysJdW5zaWdu ZWQgY2hhciB0bXBfa2V5W0FFU19CTE9DS19MRU5HVEhdOworKwl1bnNpZ25lZCBjaGFyIFZbQUVT X0JMT0NLX0xFTkdUSF07CisrCXVuc2lnbmVkIGNoYXIgRFRbQUVTX0JMT0NLX0xFTkdUSF07Cisr CXVuc2lnbmVkIGNoYXIgbGFzdFtBRVNfQkxPQ0tfTEVOR1RIXTsKKysJfSBGSVBTX1BSTkdfQ1RY OworKworK3N0YXRpYyBGSVBTX1BSTkdfQ1RYIHNjdHg7CisrCisrc3RhdGljIGludCBmaXBzX3By bmdfZmFpbCA9IDA7CisrCisrdm9pZCBGSVBTX3g5MzFfc3RpY2soaW50IG9ub2ZmKQorKwl7Cisr CWZpcHNfcHJuZ19mYWlsID0gb25vZmY7CisrCX0KKysKKyt2b2lkIEZJUFNfcm5nX3N0aWNrKHZv aWQpCisrCXsKKysJRklQU194OTMxX3N0aWNrKDEpOworKwl9CisrCisrc3RhdGljIHZvaWQgZmlw c19yYW5kX3BybmdfcmVzZXQoRklQU19QUk5HX0NUWCAqY3R4KQorKwl7CisrCWN0eC0+c2VlZGVk ID0gMDsKKysJY3R4LT5rZXllZCA9IDA7CisrCWN0eC0+dGVzdF9tb2RlID0gMDsKKysJY3R4LT5j b3VudGVyID0gMDsKKysJY3R4LT5zZWNvbmQgPSAwOworKwljdHgtPmVycm9yID0gMDsKKysJY3R4 LT52cG9zID0gMDsKKysJT1BFTlNTTF9jbGVhbnNlKGN0eC0+ViwgQUVTX0JMT0NLX0xFTkdUSCk7 CisrCU9QRU5TU0xfY2xlYW5zZSgmY3R4LT5rcywgc2l6ZW9mKEFFU19LRVkpKTsKKysJfQorKwkK KysKKytzdGF0aWMgaW50IGZpcHNfc2V0X3Bybmdfa2V5KEZJUFNfUFJOR19DVFggKmN0eCwKKysJ CQljb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pCisrCXsKKysJ aWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBT X1NFVF9QUk5HX0tFWSwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCQlyZXR1cm4gMDsKKysJ CX0KKysJaWYgKGtleWxlbiAhPSAxNiAmJiBrZXlsZW4gIT0gMjQgJiYga2V5bGVuICE9IDMyKQor KwkJeworKwkJLyogZXJyb3I6IGludmFsaWQga2V5IHNpemUgKi8KKysJCXJldHVybiAwOworKwkJ fQorKwlBRVNfc2V0X2VuY3J5cHRfa2V5KGtleSwga2V5bGVuIDw8IDMsICZjdHgtPmtzKTsKKysJ aWYgKGtleWxlbiA9PSAxNikKKysJCXsKKysJCW1lbWNweShjdHgtPnRtcF9rZXksIGtleSwgMTYp OworKwkJY3R4LT5rZXllZCA9IDI7CisrCQl9CisrCWVsc2UKKysJCWN0eC0+a2V5ZWQgPSAxOwor KwljdHgtPnNlZWRlZCA9IDA7CisrCWN0eC0+c2Vjb25kID0gMDsKKysJcmV0dXJuIDE7CisrCX0K KysKKytzdGF0aWMgaW50IGZpcHNfc2V0X3Bybmdfc2VlZChGSVBTX1BSTkdfQ1RYICpjdHgsCisr CQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZCwgdW5zaWduZWQgaW50IHNlZWRsZW4pCisrCXsK KysJdW5zaWduZWQgaW50IGk7CisrCWlmICghY3R4LT5rZXllZCkKKysJCXJldHVybiAwOworKwkv KiBJbiB0ZXN0IG1vZGUgc2VlZCBpcyBqdXN0IHN1cHBsaWVkIGRhdGEgKi8KKysJaWYgKGN0eC0+ dGVzdF9tb2RlKQorKwkJeworKwkJaWYgKHNlZWRsZW4gIT0gQUVTX0JMT0NLX0xFTkdUSCkKKysJ CQlyZXR1cm4gMDsKKysJCW1lbWNweShjdHgtPlYsIHNlZWQsIEFFU19CTE9DS19MRU5HVEgpOwor KwkJY3R4LT5zZWVkZWQgPSAxOworKwkJcmV0dXJuIDE7CisrCQl9CisrCS8qIE91dHNpZGUgdGVz dCBtb2RlIFhPUiBzdXBwbGllZCBkYXRhIHdpdGggZXhpc3Rpbmcgc2VlZCAqLworKwlmb3IgKGkg PSAwOyBpIDwgc2VlZGxlbjsgaSsrKQorKwkJeworKwkJY3R4LT5WW2N0eC0+dnBvcysrXSBePSBz ZWVkW2ldOworKwkJaWYgKGN0eC0+dnBvcyA9PSBBRVNfQkxPQ0tfTEVOR1RIKQorKwkJCXsKKysJ CQljdHgtPnZwb3MgPSAwOworKwkJCS8qIFNwZWNpYWwgY2FzZSBpZiBmaXJzdCBzZWVkIGFuZCBr ZXkgbGVuZ3RoIGVxdWFscworKyAJCQkgKiBibG9jayBzaXplIGNoZWNrIGtleSBhbmQgc2VlZCBk byBub3QgbWF0Y2guCisrIAkJCSAqLyAKKysJCQlpZiAoY3R4LT5rZXllZCA9PSAyKQorKwkJCQl7 CisrCQkJCWlmICghbWVtY21wKGN0eC0+dG1wX2tleSwgY3R4LT5WLCAxNikpCisrCQkJCQl7Cisr CQkJCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1NFVF9QUk5HX1NFRUQsCisrCQkJCQkJUkFORF9SX1BS TkdfU0VFRF9NVVNUX05PVF9NQVRDSF9LRVkpOworKwkJCQkJcmV0dXJuIDA7CisrCQkJCQl9Cisr CQkJCU9QRU5TU0xfY2xlYW5zZShjdHgtPnRtcF9rZXksIDE2KTsKKysJCQkJY3R4LT5rZXllZCA9 IDE7CisrCQkJCX0KKysJCQljdHgtPnNlZWRlZCA9IDE7CisrCQkJfQorKwkJfQorKwlyZXR1cm4g MTsKKysJfQorKworK3N0YXRpYyBpbnQgZmlwc19zZXRfdGVzdF9tb2RlKEZJUFNfUFJOR19DVFgg KmN0eCkKKysJeworKwlpZiAoY3R4LT5rZXllZCkKKysJCXsKKysJCVJBTkRlcnIoUkFORF9GX0ZJ UFNfU0VUX1RFU1RfTU9ERSxSQU5EX1JfUFJOR19LRVlFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0K KysJY3R4LT50ZXN0X21vZGUgPSAxOworKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBGSVBTX3g5 MzFfdGVzdF9tb2RlKHZvaWQpCisrCXsKKysJcmV0dXJuIGZpcHNfc2V0X3Rlc3RfbW9kZSgmc2N0 eCk7CisrCX0KKysKKytpbnQgRklQU19yYW5kX3Rlc3RfbW9kZSh2b2lkKQorKwl7CisrCXJldHVy biBmaXBzX3NldF90ZXN0X21vZGUoJnNjdHgpOworKwl9CisrCisrCisraW50IEZJUFNfeDkzMV9z ZXRfZHQodW5zaWduZWQgY2hhciAqZHQpCisrCXsKKysJaWYgKCFzY3R4LnRlc3RfbW9kZSkKKysJ CXsKKysJCVJBTkRlcnIoUkFORF9GX0ZJUFNfWDkzMV9TRVRfRFQsUkFORF9SX05PVF9JTl9URVNU X01PREUpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCW1lbWNweShzY3R4LkRULCBkdCwgQUVTX0JM T0NLX0xFTkdUSCk7CisrCXJldHVybiAxOworKwl9CisrCisraW50IEZJUFNfcmFuZF9zZXRfZHQo dW5zaWduZWQgY2hhciAqZHQpCisrCXsKKysJaWYgKCFzY3R4LnRlc3RfbW9kZSkKKysJCXsKKysJ CVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORF9TRVRfRFQsUkFORF9SX05PVF9JTl9URVNUX01PREUp OworKwkJcmV0dXJuIDA7CisrCQl9CisrCW1lbWNweShzY3R4LkRULCBkdCwgQUVTX0JMT0NLX0xF TkdUSCk7CisrCXJldHVybiAxOworKwl9CisrCisrdm9pZCBGSVBTX2dldF90aW1ldmVjKHVuc2ln bmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyAqcGN0cikKKysJeworKyNpZmRlZiBPUEVOU1NM X1NZU19XSU4zMgorKwlGSUxFVElNRSBmdDsKKysjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZY V09SS1MpCisrICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgdHM7CisrI2Vsc2UKKysJc3RydWN0IHRp bWV2YWwgdHY7CisrI2VuZGlmCisrCisrI2lmbmRlZiBHRVRQSURfSVNfTUVBTklOR0xFU1MKKysJ dW5zaWduZWQgbG9uZyBwaWQ7CisrI2VuZGlmCisrCisrI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMy CisrCUdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKCZmdCk7CisrCWJ1ZlswXSA9ICh1bnNpZ25lZCBj aGFyKSAoZnQuZHdIaWdoRGF0ZVRpbWUgJiAweGZmKTsKKysJYnVmWzFdID0gKHVuc2lnbmVkIGNo YXIpICgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4gOCkgJiAweGZmKTsKKysJYnVmWzJdID0gKHVuc2ln bmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4gMTYpICYgMHhmZik7CisrCWJ1ZlszXSA9 ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3SGlnaERhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOworKwli dWZbNF0gPSAodW5zaWduZWQgY2hhcikgKGZ0LmR3TG93RGF0ZVRpbWUgJiAweGZmKTsKKysJYnVm WzVdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dEYXRlVGltZSA+PiA4KSAmIDB4ZmYpOwor KwlidWZbNl0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0xvd0RhdGVUaW1lID4+IDE2KSAmIDB4 ZmYpOworKwlidWZbN10gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0xvd0RhdGVUaW1lID4+IDI0 KSAmIDB4ZmYpOworKyNlbGlmIGRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykKKysJY2xvY2tf Z2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRzKTsKKysJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIp ICh0cy50dl9zZWMgJiAweGZmKTsKKysJYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZf c2VjID4+IDgpICYgMHhmZik7CisrCWJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHRzLnR2X3Nl YyA+PiAxNikgJiAweGZmKTsKKysJYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfc2Vj ID4+IDI0KSAmIDB4ZmYpOworKwlidWZbNF0gPSAodW5zaWduZWQgY2hhcikgKHRzLnR2X25zZWMg JiAweGZmKTsKKysJYnVmWzVdID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfbnNlYyA+PiA4KSAm IDB4ZmYpOworKwlidWZbNl0gPSAodW5zaWduZWQgY2hhcikgKCh0cy50dl9uc2VjID4+IDE2KSAm IDB4ZmYpOworKwlidWZbN10gPSAodW5zaWduZWQgY2hhcikgKCh0cy50dl9uc2VjID4+IDI0KSAm IDB4ZmYpOworKyNlbHNlCisrCWdldHRpbWVvZmRheSgmdHYsTlVMTCk7CisrCWJ1ZlswXSA9ICh1 bnNpZ25lZCBjaGFyKSAodHYudHZfc2VjICYgMHhmZik7CisrCWJ1ZlsxXSA9ICh1bnNpZ25lZCBj aGFyKSAoKHR2LnR2X3NlYyA+PiA4KSAmIDB4ZmYpOworKwlidWZbMl0gPSAodW5zaWduZWQgY2hh cikgKCh0di50dl9zZWMgPj4gMTYpICYgMHhmZik7CisrCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFy KSAoKHR2LnR2X3NlYyA+PiAyNCkgJiAweGZmKTsKKysJYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIp ICh0di50dl91c2VjICYgMHhmZik7CisrCWJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2 X3VzZWMgPj4gOCkgJiAweGZmKTsKKysJYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZf dXNlYyA+PiAxNikgJiAweGZmKTsKKysJYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZf dXNlYyA+PiAyNCkgJiAweGZmKTsKKysjZW5kaWYKKysJYnVmWzhdID0gKHVuc2lnbmVkIGNoYXIp ICgqcGN0ciAmIDB4ZmYpOworKwlidWZbOV0gPSAodW5zaWduZWQgY2hhcikgKCgqcGN0ciA+PiA4 KSAmIDB4ZmYpOworKwlidWZbMTBdID0gKHVuc2lnbmVkIGNoYXIpICgoKnBjdHIgPj4gMTYpICYg MHhmZik7CisrCWJ1ZlsxMV0gPSAodW5zaWduZWQgY2hhcikgKCgqcGN0ciA+PiAyNCkgJiAweGZm KTsKKysKKysJKCpwY3RyKSsrOworKworKworKyNpZm5kZWYgR0VUUElEX0lTX01FQU5JTkdMRVNT CisrCXBpZD0odW5zaWduZWQgbG9uZylnZXRwaWQoKTsKKysJYnVmWzEyXSA9ICh1bnNpZ25lZCBj aGFyKSAocGlkICYgMHhmZik7CisrCWJ1ZlsxM10gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4g OCkgJiAweGZmKTsKKysJYnVmWzE0XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiAxNikgJiAw eGZmKTsKKysJYnVmWzE1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiAyNCkgJiAweGZmKTsK KysjZW5kaWYKKysgICAgfQorKworK3N0YXRpYyBpbnQgZmlwc19yYW5kKEZJUFNfUFJOR19DVFgg KmN0eCwKKysJCQl1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGludCBvdXRsZW4pCisrCXsK KysJdW5zaWduZWQgY2hhciBSW0FFU19CTE9DS19MRU5HVEhdLCBJW0FFU19CTE9DS19MRU5HVEhd OworKwl1bnNpZ25lZCBjaGFyIHRtcFtBRVNfQkxPQ0tfTEVOR1RIXTsKKysJaW50IGk7CisrCWlm IChjdHgtPmVycm9yKQorKwkJeworKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9Q Uk5HX0VSUk9SKTsKKysJCXJldHVybiAwOworKwkJfQorKwlpZiAoIWN0eC0+a2V5ZWQpCisrCQl7 CisrCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX05PX0tFWV9TRVQpOworKwkJcmV0 dXJuIDA7CisrCQl9CisrCWlmICghY3R4LT5zZWVkZWQpCisrCQl7CisrCQlSQU5EZXJyKFJBTkRf Rl9GSVBTX1JBTkQsUkFORF9SX1BSTkdfTk9UX1NFRURFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0K KysJZm9yICg7OykKKysJCXsKKysJCWlmICghY3R4LT50ZXN0X21vZGUpCisrCQkJRklQU19nZXRf dGltZXZlYyhjdHgtPkRULCAmY3R4LT5jb3VudGVyKTsKKysJCUFFU19lbmNyeXB0KGN0eC0+RFQs IEksICZjdHgtPmtzKTsKKysJCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfTEVOR1RIOyBpKysp CisrCQkJdG1wW2ldID0gSVtpXSBeIGN0eC0+VltpXTsKKysJCUFFU19lbmNyeXB0KHRtcCwgUiwg JmN0eC0+a3MpOworKwkJZm9yIChpID0gMDsgaSA8IEFFU19CTE9DS19MRU5HVEg7IGkrKykKKysJ CQl0bXBbaV0gPSBSW2ldIF4gSVtpXTsKKysJCUFFU19lbmNyeXB0KHRtcCwgY3R4LT5WLCAmY3R4 LT5rcyk7CisrCQkvKiBDb250aW51b3VzIFBSTkcgdGVzdCAqLworKwkJaWYgKGN0eC0+c2Vjb25k KQorKwkJCXsKKysJCQlpZiAoZmlwc19wcm5nX2ZhaWwpCisrCQkJCW1lbWNweShjdHgtPmxhc3Qs IFIsIEFFU19CTE9DS19MRU5HVEgpOworKwkJCWlmICghbWVtY21wKFIsIGN0eC0+bGFzdCwgQUVT X0JMT0NLX0xFTkdUSCkpCisrCQkJCXsKKysJICAgIAkJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFO RCxSQU5EX1JfUFJOR19TVFVDSyk7CisrCQkJCWN0eC0+ZXJyb3IgPSAxOworKwkJCQlmaXBzX3Nl dF9zZWxmdGVzdF9mYWlsKCk7CisrCQkJCXJldHVybiAwOworKwkJCQl9CisrCQkJfQorKwkJbWVt Y3B5KGN0eC0+bGFzdCwgUiwgQUVTX0JMT0NLX0xFTkdUSCk7CisrCQlpZiAoIWN0eC0+c2Vjb25k KQorKwkJCXsKKysJCQljdHgtPnNlY29uZCA9IDE7CisrCQkJaWYgKCFjdHgtPnRlc3RfbW9kZSkK KysJCQkJY29udGludWU7CisrCQkJfQorKworKwkJaWYgKG91dGxlbiA8PSBBRVNfQkxPQ0tfTEVO R1RIKQorKwkJCXsKKysJCQltZW1jcHkob3V0LCBSLCBvdXRsZW4pOworKwkJCWJyZWFrOworKwkJ CX0KKysKKysJCW1lbWNweShvdXQsIFIsIEFFU19CTE9DS19MRU5HVEgpOworKwkJb3V0ICs9IEFF U19CTE9DS19MRU5HVEg7CisrCQlvdXRsZW4gLT0gQUVTX0JMT0NLX0xFTkdUSDsKKysJCX0KKysJ cmV0dXJuIDE7CisrCX0KKysKKysKKytpbnQgRklQU194OTMxX3NldF9rZXkoY29uc3QgdW5zaWdu ZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuKQorKwl7CisrCWludCByZXQ7CisrCUNSWVBUT193X2xv Y2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldCA9IGZpcHNfc2V0X3Bybmdfa2V5KCZzY3R4LCBr ZXksIGtleWxlbik7CisrCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0 dXJuIHJldDsKKysJfQorKworK2ludCBGSVBTX3JhbmRfc2V0X2tleShjb25zdCB1bnNpZ25lZCBj aGFyICprZXksIEZJUFNfUkFORF9TSVpFX1Qga2V5bGVuKQorKwl7CisrCXJldHVybiBGSVBTX3g5 MzFfc2V0X2tleShrZXksIGtleWxlbik7CisrCX0KKysKKytpbnQgRklQU194OTMxX3NlZWQoY29u c3Qgdm9pZCAqc2VlZCwgaW50IHNlZWRsZW4pCisrCXsKKysJaW50IHJldDsKKysJQ1JZUFRPX3df bG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0ID0gZmlwc19zZXRfcHJuZ19zZWVkKCZzY3R4 LCBzZWVkLCBzZWVkbGVuKTsKKysJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwor KwlyZXR1cm4gcmV0OworKwl9CisrCisrCisraW50IEZJUFNfeDkzMV9ieXRlcyh1bnNpZ25lZCBj aGFyICpvdXQsIGludCBjb3VudCkKKysJeworKwlpbnQgcmV0OworKwlDUllQVE9fd19sb2NrKENS WVBUT19MT0NLX1JBTkQpOworKwlyZXQgPSBmaXBzX3JhbmQoJnNjdHgsIG91dCwgY291bnQpOwor KwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldHVybiByZXQ7CisrCX0K KysKKytpbnQgRklQU194OTMxX3N0YXR1cyh2b2lkKQorKwl7CisrCWludCByZXQ7CisrCUNSWVBU T19yX2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldCA9IHNjdHguc2VlZGVkOworKwlDUllQ VE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKyt2 b2lkIEZJUFNfeDkzMV9yZXNldCh2b2lkKQorKwl7CisrCUNSWVBUT193X2xvY2soQ1JZUFRPX0xP Q0tfUkFORCk7CisrCWZpcHNfcmFuZF9wcm5nX3Jlc2V0KCZzY3R4KTsKKysJQ1JZUFRPX3dfdW5s b2NrKENSWVBUT19MT0NLX1JBTkQpOworKwl9CisrCisrc3RhdGljIGludCBmaXBzX2RvX3JhbmRf c2VlZChjb25zdCB2b2lkICpzZWVkLCBpbnQgc2VlZGxlbikKKysJeworKwlGSVBTX3g5MzFfc2Vl ZChzZWVkLCBzZWVkbGVuKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNf ZG9fcmFuZF9hZGQoY29uc3Qgdm9pZCAqc2VlZCwgaW50IHNlZWRsZW4sCisrCQkJCQlkb3VibGUg YWRkX2VudHJvcHkpCisrCXsKKysJRklQU194OTMxX3NlZWQoc2VlZCwgc2VlZGxlbik7CisrCXJl dHVybiAxOworKwl9CisrCisrc3RhdGljIGNvbnN0IFJBTkRfTUVUSE9EIHJhbmRfeDkzMV9tZXRo PQorKyAgICB7CisrICAgIGZpcHNfZG9fcmFuZF9zZWVkLAorKyAgICBGSVBTX3g5MzFfYnl0ZXMs CisrICAgIEZJUFNfeDkzMV9yZXNldCwKKysgICAgZmlwc19kb19yYW5kX2FkZCwKKysgICAgRklQ U194OTMxX2J5dGVzLAorKyAgICBGSVBTX3g5MzFfc3RhdHVzCisrICAgIH07CisrCisrY29uc3Qg UkFORF9NRVRIT0QgKkZJUFNfeDkzMV9tZXRob2Qodm9pZCkKKyt7CisrICByZXR1cm4gJnJhbmRf eDkzMV9tZXRoOworK30KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2NyeXB0 by9maXBzL2ZpcHNfcmFuZC5oLmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvZmlwc19y YW5kLmgKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaC5maXBzCTIw MTUtMDEtMDkgMDk6NTE6NTEuNTY0OTIyNTg1ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWsvY3J5 cHRvL2ZpcHMvZmlwc19yYW5kLmgJMjAxNS0wMS0wOSAwOTo1MTo1MS41NjQ5MjI1ODUgKzAxMDAK K0BAIC0wLDAgKzEsMTQ1IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIw MDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK KysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAg ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdh cmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cu b3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBh bmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Cisr ICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBw bGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAq IDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVk ICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1l cyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NM IFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNv ZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6Cisr ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0 cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VE IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAq IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ Q0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICog T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2lmbmRl ZiBIRUFERVJfRklQU19SQU5EX0gKKysjZGVmaW5lIEhFQURFUl9GSVBTX1JBTkRfSAorKworKyNp bmNsdWRlIDxvcGVuc3NsL2Flcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrCisrI2lm ZGVmIE9QRU5TU0xfRklQUworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsK KysjZW5kaWYKKysKKytpbnQgRklQU194OTMxX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAq a2V5LCBpbnQga2V5bGVuKTsKKytpbnQgRklQU194OTMxX3NlZWQoY29uc3Qgdm9pZCAqYnVmLCBp bnQgbnVtKTsKKytpbnQgRklQU194OTMxX2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IG91 dGxlbik7CisrCisraW50IEZJUFNfeDkzMV90ZXN0X21vZGUodm9pZCk7Cisrdm9pZCBGSVBTX3g5 MzFfcmVzZXQodm9pZCk7CisraW50IEZJUFNfeDkzMV9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQp OworKworK2ludCBGSVBTX3g5MzFfc3RhdHVzKHZvaWQpOworKworK2NvbnN0IFJBTkRfTUVUSE9E ICpGSVBTX3g5MzFfbWV0aG9kKHZvaWQpOworKworK3R5cGVkZWYgc3RydWN0IGRyYmdfY3R4X3N0 IERSQkdfQ1RYOworKy8qIERSQkcgZXh0ZXJuYWwgZmxhZ3MgKi8KKysvKiBGbGFnIGZvciBDVFIg bW9kZSBvbmx5OiB1c2UgZGVyaXZhdGlvbiBmdW5jdGlvbiBjdHJfZGYgKi8KKysjZGVmaW5lCURS QkdfRkxBR19DVFJfVVNFX0RGCQkweDEKKysvKiBQUk5HIGlzIGluIHRlc3Qgc3RhdGUgKi8KKysj ZGVmaW5lCURSQkdfRkxBR19URVNUCQkJMHgyCisrCisrRFJCR19DVFggKkZJUFNfZHJiZ19uZXco aW50IHR5cGUsIHVuc2lnbmVkIGludCBmbGFncyk7CisraW50IEZJUFNfZHJiZ19pbml0KERSQkdf Q1RYICpkY3R4LCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKKytpbnQgRklQU19kcmJn X2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpw ZXJzLCBzaXplX3QgcGVyc2xlbik7CisraW50IEZJUFNfZHJiZ19yZXNlZWQoRFJCR19DVFggKmRj dHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKTsKKytpbnQgRklQ U19kcmJnX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVf dCBvdXRsZW4sCisrCQkJaW50IHByZWRpY3Rpb25fcmVzaXN0YW5jZSwKKysJCQljb25zdCB1bnNp Z25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbik7CisrCisraW50IEZJUFNfZHJiZ191bmlu c3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4KTsKKyt2b2lkIEZJUFNfZHJiZ19mcmVlKERSQkdfQ1RY ICpkY3R4KTsKKysKKytpbnQgRklQU19kcmJnX3NldF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgs CisrCXNpemVfdCAoKmdldF9lbnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoq cG91dCwKKysJCQkJaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbiks CisrCXZvaWQgKCpjbGVhbnVwX2VudHJvcHkpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIg Km91dCwgc2l6ZV90IG9sZW4pLAorKwlzaXplX3QgZW50cm9weV9ibG9ja2xlbiwKKysJc2l6ZV90 ICgqZ2V0X25vbmNlKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysJCQkJ aW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbiksCisrCXZvaWQgKCpj bGVhbnVwX25vbmNlKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBv bGVuKSk7CisrCisraW50IEZJUFNfZHJiZ19zZXRfcmFuZF9jYWxsYmFja3MoRFJCR19DVFggKmRj dHgsCisrCXNpemVfdCAoKmdldF9hZGluKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoq cG91dCksCisrCXZvaWQgKCpjbGVhbnVwX2FkaW4pKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNo YXIgKm91dCwgc2l6ZV90IG9sZW4pLAorKwlpbnQgKCpyYW5kX3NlZWRfY2IpKERSQkdfQ1RYICpj dHgsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSksCisrCWludCAoKnJhbmRfYWRkX2NiKShEUkJH X0NUWCAqY3R4LAorKwkJCQljb25zdCB2b2lkICpidWYsIGludCBudW0sIGRvdWJsZSBlbnRyb3B5 KSk7CisrCisrdm9pZCAqRklQU19kcmJnX2dldF9hcHBfZGF0YShEUkJHX0NUWCAqY3R4KTsKKyt2 b2lkIEZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoRFJCR19DVFggKmN0eCwgdm9pZCAqYXBwX2RhdGEp OworK3NpemVfdCBGSVBTX2RyYmdfZ2V0X2Jsb2NrbGVuZ3RoKERSQkdfQ1RYICpkY3R4KTsKKytp bnQgRklQU19kcmJnX2dldF9zdHJlbmd0aChEUkJHX0NUWCAqZGN0eCk7Cisrdm9pZCBGSVBTX2Ry Ymdfc2V0X2NoZWNrX2ludGVydmFsKERSQkdfQ1RYICpkY3R4LCBpbnQgaW50ZXJ2YWwpOworK3Zv aWQgRklQU19kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwoRFJCR19DVFggKmRjdHgsIGludCBpbnRl cnZhbCk7CisrCisraW50IEZJUFNfZHJiZ19oZWFsdGhfY2hlY2soRFJCR19DVFggKmRjdHgpOwor KworK0RSQkdfQ1RYICpGSVBTX2dldF9kZWZhdWx0X2RyYmcodm9pZCk7CisrY29uc3QgUkFORF9N RVRIT0QgKkZJUFNfZHJiZ19tZXRob2Qodm9pZCk7CisrCisrCisraW50IEZJUFNfcmFuZF9zZXRf bWV0aG9kKGNvbnN0IFJBTkRfTUVUSE9EICptZXRoKTsKKytjb25zdCBSQU5EX01FVEhPRCAqRklQ U19yYW5kX2dldF9tZXRob2Qodm9pZCk7CisrCisrdm9pZCBGSVBTX3JhbmRfc2V0X2JpdHMoaW50 IG5iaXRzKTsKKysKKytpbnQgRklQU19yYW5kX3N0cmVuZ3RoKHZvaWQpOworKworKy8qIDEuMC4w IGNvbXBhdCBmdW5jdGlvbnMgKi8KKytpbnQgRklQU19yYW5kX3NldF9rZXkoY29uc3QgdW5zaWdu ZWQgY2hhciAqa2V5LCBGSVBTX1JBTkRfU0laRV9UIGtleWxlbik7CisraW50IEZJUFNfcmFuZF9z ZWVkKGNvbnN0IHZvaWQgKmJ1ZiwgRklQU19SQU5EX1NJWkVfVCBudW0pOworK2ludCBGSVBTX3Jh bmRfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBGSVBTX1JBTkRfU0laRV9UIG91dGxlbik7Cisr aW50IEZJUFNfcmFuZF90ZXN0X21vZGUodm9pZCk7Cisrdm9pZCBGSVBTX3JhbmRfcmVzZXQodm9p ZCk7CisraW50IEZJUFNfcmFuZF9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpOworK2ludCBGSVBT X3JhbmRfc3RhdHVzKHZvaWQpOworK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfbWV0aG9k KHZvaWQpOworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrI2VuZGlmCisr I2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNs LmguZmlwcyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNsLmgKKy0tLSBv cGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNsLmguZmlwcwkyMDE1LTAxLTA5 IDA5OjUxOjUxLjU2NDkyMjU4NSArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBz L2ZpcHNfcmFuZF9sY2wuaAkyMDE1LTAxLTA5IDA5OjUxOjUxLjU2NDkyMjU4NSArMDEwMAorQEAg LTAsMCArMSwyMTkgQEAKKysvKiBmaXBzL3JhbmQvZmlwc19yYW5kX2xjbC5oICovCisrLyogV3Jp 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 KysgKi8KKysKKyt0eXBlZGVmIHN0cnVjdCBkcmJnX2hhc2hfY3R4X3N0IERSQkdfSEFTSF9DVFg7 CisrdHlwZWRlZiBzdHJ1Y3QgZHJiZ19obWFjX2N0eF9zdCBEUkJHX0hNQUNfQ1RYOworK3R5cGVk ZWYgc3RydWN0IGRyYmdfY3RyX2N0eF9zdCBEUkJHX0NUUl9DVFg7CisrCisrLyogODg4IGJpdHMg ZnJvbSAxMC4xIHRhYmxlIDIgKi8KKysjZGVmaW5lIEhBU0hfUFJOR19NQVhfU0VFRExFTgkxMTEK KysKKytzdHJ1Y3QgZHJiZ19oYXNoX2N0eF9zdAorKwl7CisrCWNvbnN0IEVWUF9NRCAqbWQ7Cisr CUVWUF9NRF9DVFggbWN0eDsKKysJdW5zaWduZWQgY2hhciBWW0hBU0hfUFJOR19NQVhfU0VFRExF Tl07CisrCXVuc2lnbmVkIGNoYXIgQ1tIQVNIX1BSTkdfTUFYX1NFRURMRU5dOworKwkvKiBUZW1w b3JhcnkgdmFsdWUgc3RvcmFnZTogc2hvdWxkIGFsd2F5cyBleGNlZWQgbWF4IGRpZ2VzdCBsZW5n dGggKi8KKysJdW5zaWduZWQgY2hhciB2dG1wW0hBU0hfUFJOR19NQVhfU0VFRExFTl07CisrCX07 CisrCisrc3RydWN0IGRyYmdfaG1hY19jdHhfc3QKKysJeworKwljb25zdCBFVlBfTUQgKm1kOwor KwlITUFDX0NUWCBoY3R4OworKwl1bnNpZ25lZCBjaGFyIEtbRVZQX01BWF9NRF9TSVpFXTsKKysJ dW5zaWduZWQgY2hhciBWW0VWUF9NQVhfTURfU0laRV07CisrCX07CisrCisrc3RydWN0IGRyYmdf Y3RyX2N0eF9zdAorKwl7CisrCUFFU19LRVkga3M7CisrCXNpemVfdCBrZXlsZW47CisrCXVuc2ln bmVkIGNoYXIgS1szMl07CisrCXVuc2lnbmVkIGNoYXIgVlsxNl07CisrCS8qIFRlbXAgdmFyaWFi bGVzIHVzZWQgYnkgZGVyaXZhdGlvbiBmdW5jdGlvbiAqLworKwlBRVNfS0VZIGRmX2tzOworKwlB RVNfS0VZIGRmX2t4a3M7CisrCS8qIFRlbXBvcmFyeSBibG9jayBzdG9yYWdlIHVzZWQgYnkgY3Ry X2RmICovCisrCXVuc2lnbmVkIGNoYXIgYmx0bXBbMTZdOworKwlzaXplX3QgYmx0bXBfcG9zOwor Kwl1bnNpZ25lZCBjaGFyIEtYWzQ4XTsKKysJfTsKKysKKysvKiBEUkJHIGludGVybmFsIGZsYWdz ICovCisrCisrLyogRnVuY3Rpb25zIHNob3VsZG4ndCBjYWxsIGVyciBsaWJyYXJ5ICovCisrI2Rl ZmluZQlEUkJHX0ZMQUdfTk9FUlIJCQkweDEKKysvKiBDdXN0b20gcmVzZWVkIGNoZWNraW5nICov CisrI2RlZmluZQlEUkJHX0NVU1RPTV9SRVNFRUQJCTB4MgorKworKy8qIERSQkcgc3RhdHVzIHZh bHVlcyAqLworKy8qIG5vdCBpbml0aWFsaXNlZCAqLworKyNkZWZpbmUgRFJCR19TVEFUVVNfVU5J TklUSUFMSVNFRAkwCisrLyogb2sgYW5kIHJlYWR5IHRvIGdlbmVyYXRlIHJhbmRvbSBiaXRzICov CisrI2RlZmluZSBEUkJHX1NUQVRVU19SRUFEWQkJMQorKy8qIHJlc2VlZCByZXF1aXJlZCAqLwor KyNkZWZpbmUgRFJCR19TVEFUVVNfUkVTRUVECQkyCisrLyogZmF0YWwgZXJyb3IgY29uZGl0aW9u ICovCisrI2RlZmluZSBEUkJHX1NUQVRVU19FUlJPUgkJMworKworKy8qIEEgZGVmYXVsdCBtYXhp bXVtIGxlbmd0aDogbGFyZ2VyIHRoYW4gYW55IHJlYXNvbmFibGUgdmFsdWUgdXNlZCBpbiBwcmF0 aWNlICovCisrCisrI2RlZmluZSBEUkJHX01BWF9MRU5HVEgJCQkweDdmZmZmZmYwCisrLyogTWF4 aW11bSBEUkJHIGJsb2NrIGxlbmd0aDogYWxsIG1kIHNpemVzIGFyZSBiaWdnZXIgdGhhbiBjaXBo ZXIgYmxvY2tzIHNpemVzCisrICogc28gdXNlIG1heCBkaWdlc3QgbGVuZ3RoLgorKyAqLworKyNk ZWZpbmUgRFJCR19NQVhfQkxPQ0sJCQlFVlBfTUFYX01EX1NJWkUKKysKKysjZGVmaW5lIERSQkdf SEVBTFRIX0lOVEVSVkFMCQkoMSA8PCAyNCkKKysKKysvKiBEUkJHIGNvbnRleHQgc3RydWN0dXJl ICovCisrCisrc3RydWN0IGRyYmdfY3R4X3N0CisrCXsKKysJLyogRmlyc3QgdHlwZXMgY29tbW9u IHRvIGFsbCBpbXBsZW1lbnRhdGlvbnMgKi8KKysJLyogRFJCRyB0eXBlOiBhIE5JRCBmb3IgdGhl IHVuZGVybHlpbmcgYWxnb3JpdGhtICovCisrCWludCB0eXBlOworKwkvKiBWYXJpb3VzIGV4dGVy bmFsIGZsYWdzICovCisrCXVuc2lnbmVkIGludCB4ZmxhZ3M7CisrCS8qIFZhcmlvdXMgaW50ZXJu YWwgdXNlIG9ubHkgZmxhZ3MgKi8KKysJdW5zaWduZWQgaW50IGlmbGFnczsKKysJLyogVXNlZCBm b3IgcGVyaW9kaWMgaGVhbHRoIGNoZWNrcyAqLworKwlpbnQgaGVhbHRoX2NoZWNrX2NudCwgaGVh bHRoX2NoZWNrX2ludGVydmFsOworKworKwkvKiBUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJl IHNldHVwIGJ5IG1lY2hhbmlzbSBkcmJnX2luaXQoKSBjYWxsICovCisrCWludCBzdHJlbmd0aDsK KysJc2l6ZV90IGJsb2NrbGVuZ3RoOworKwlzaXplX3QgbWF4X3JlcXVlc3Q7CisrCisrCXNpemVf dCBtaW5fZW50cm9weSwgbWF4X2VudHJvcHk7CisrCXNpemVfdCBtaW5fbm9uY2UsIG1heF9ub25j ZTsKKysJc2l6ZV90IG1heF9wZXJzLCBtYXhfYWRpbjsKKysJdW5zaWduZWQgaW50IHJlc2VlZF9j b3VudGVyOworKwl1bnNpZ25lZCBpbnQgcmVzZWVkX2ludGVydmFsOworKwlzaXplX3Qgc2VlZGxl bjsKKysJaW50IHN0YXR1czsKKysJLyogQXBwbGljYXRpb24gZGF0YTogdHlwaWNhbGx5IHVzZWQg YnkgdGVzdCBnZXRfZW50cm9weSAqLworKwl2b2lkICphcHBfZGF0YTsKKysJLyogSW1wbGVtZW50 YXRpb24gc3BlY2lmaWMgc3RydWN0dXJlcyAqLworKwl1bmlvbiAKKysJCXsKKysJCURSQkdfSEFT SF9DVFggaGFzaDsKKysJCURSQkdfSE1BQ19DVFggaG1hYzsKKysJCURSQkdfQ1RSX0NUWCAgY3Ry OworKwkJfSBkOworKwkvKiBJbml0aWFsaWFzZSBQUk5HIGFuZCBzZXR1cCBjYWxsYmFja3MgYmVs b3cgKi8KKysJaW50ICgqaW5pdCkoRFJCR19DVFggKmN0eCwgaW50IG5pZCwgaW50IHNlY3VyaXR5 LCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworKwkvKiBJbnRhbnRpYXRlIFBSTkcgKi8KKysJaW50ICgq aW5zdGFudGlhdGUpKERSQkdfQ1RYICpjdHgsCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVu dCwgc2l6ZV90IGVudGxlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVf dCBub25jZWxlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGVycywgc2l6ZV90IHBlcnNs ZW4pOworKwkvKiByZXNlZWQgKi8KKysJaW50ICgqcmVzZWVkKShEUkJHX0NUWCAqY3R4LAorKwkJ CQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRsZW4sCisrCQkJCWNvbnN0IHVu c2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKTsKKysJLyogZ2VuZXJhdCBvdXRwdXQg Ki8KKysJaW50ICgqZ2VuZXJhdGUpKERSQkdfQ1RYICpjdHgsCisrCQkJCXVuc2lnbmVkIGNoYXIg Km91dCwgc2l6ZV90IG91dGxlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6 ZV90IGFkaW5sZW4pOworKwkvKiB1bmluc3RhbnRpYXRlICovCisrCWludCAoKnVuaW5zdGFudGlh dGUpKERSQkdfQ1RYICpjdHgpOworKworKwkvKiBFbnRyb3B5IHNvdXJjZSBibG9jayBsZW5ndGgg Ki8KKysJc2l6ZV90IGVudHJvcHlfYmxvY2tsZW47CisrCisrCS8qIGVudHJvcHkgZ2F0aGVyaW5n IGZ1bmN0aW9uICovCisrCXNpemVfdCAoKmdldF9lbnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1bnNp Z25lZCBjaGFyICoqcG91dCwKKysJCQkJaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXpl X3QgbWF4X2xlbik7CisrCS8qIEluZGljYXRlcyB3ZSBoYXZlIGZpbmlzaGVkIHdpdGggZW50cm9w eSBidWZmZXIgKi8KKysJdm9pZCAoKmNsZWFudXBfZW50cm9weSkoRFJCR19DVFggKmN0eCwgdW5z aWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbik7CisrCisrCS8qIG5vbmNlIGdhdGhlcmluZyBm dW5jdGlvbiAqLworKwlzaXplX3QgKCpnZXRfbm9uY2UpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVk IGNoYXIgKipwb3V0LAorKwkJCQlpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBt YXhfbGVuKTsKKysJLyogSW5kaWNhdGVzIHdlIGhhdmUgZmluaXNoZWQgd2l0aCBub25jZSBidWZm ZXIgKi8KKysJdm9pZCAoKmNsZWFudXBfbm9uY2UpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNo YXIgKm91dCwgc2l6ZV90IG9sZW4pOworKworKwkvKiBDb250aW51b3VzIHJhbmRvbSBudW1iZXIg dGVzdCB0ZW1wb3JhcnkgYXJlYSAqLworKwkvKiBMYXN0IGJsb2NrICovCQorKwl1bnNpZ25lZCBj aGFyIGxiW0VWUF9NQVhfTURfU0laRV07CisrCS8qIHNldCBpZiBsYiBpcyB2YWxpZCAqLworKwlp bnQgbGJfdmFsaWQ7CisrCisrCS8qIENhbGxiYWNrcyB1c2VkIHdoZW4gY2FsbGVkIHRocm91Z2gg UkFORCBpbnRlcmZhY2UgKi8KKysJLyogR2V0IGFueSBhZGRpdGlvbmFsIGlucHV0IGZvciBnZW5l cmF0ZSAqLworKwlzaXplX3QgKCpnZXRfYWRpbikoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hh ciAqKnBvdXQpOworKwl2b2lkICgqY2xlYW51cF9hZGluKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25l ZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKTsKKysJLyogQ2FsbGJhY2sgZm9yIFJBTkRfc2VlZCgp LCBSQU5EX2FkZCgpICovCisrCWludCAoKnJhbmRfc2VlZF9jYikoRFJCR19DVFggKmN0eCwgY29u c3Qgdm9pZCAqYnVmLCBpbnQgbnVtKTsKKysJaW50ICgqcmFuZF9hZGRfY2IpKERSQkdfQ1RYICpj dHgsCisrCQkJCWNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSwgZG91YmxlIGVudHJvcHkpOworKwl9 OworKworKworK2ludCBmaXBzX2RyYmdfY3RyX2luaXQoRFJCR19DVFggKmRjdHgpOworK2ludCBm aXBzX2RyYmdfaGFzaF9pbml0KERSQkdfQ1RYICpkY3R4KTsKKytpbnQgZmlwc19kcmJnX2htYWNf aW5pdChEUkJHX0NUWCAqZGN0eCk7CisraW50IGZpcHNfZHJiZ19rYXQoRFJCR19DVFggKmRjdHgs IGludCBuaWQsIHVuc2lnbmVkIGludCBmbGFncyk7CisraW50IGZpcHNfZHJiZ19jcHJuZ190ZXN0 KERSQkdfQ1RYICpkY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpvdXQpOworKworK2NvbnN0IHN0 cnVjdCBlbnZfbWRfc3QgKkZJUFNfZ2V0X2RpZ2VzdGJ5bmlkKGludCBuaWQpOworKworK2NvbnN0 IHN0cnVjdCBldnBfY2lwaGVyX3N0ICpGSVBTX2dldF9jaXBoZXJieW5pZChpbnQgbmlkKTsKKysK KysjZGVmaW5lIEZJUFNfZGlnZXN0aW5pdCBFVlBfRGlnZXN0SW5pdAorKyNkZWZpbmUgRklQU19k aWdlc3R1cGRhdGUgRVZQX0RpZ2VzdFVwZGF0ZQorKyNkZWZpbmUgRklQU19kaWdlc3RmaW5hbCBF VlBfRGlnZXN0RmluYWwKKysjZGVmaW5lIE1fRVZQX01EX3NpemUgRVZQX01EX3NpemUKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9saWIuYy5maXBzIG9wZW5z c2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9saWIuYworLS0tIG9wZW5zc2wtMS4wLjFr L2NyeXB0by9maXBzL2ZpcHNfcmFuZF9saWIuYy5maXBzCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTY1 OTIyNjA4ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xp Yi5jCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTY1OTIyNjA4ICswMTAwCitAQCAtMCwwICsxLDE5MSBA QAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFBy 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 WSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0 by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19y YW5kLmg+CisrI2luY2x1ZGUgImVfb3MuaCIKKysKKysvKiBGSVBTIEFQSSBmb3IgUFJORyB1c2Uu IFNpbWlsYXIgdG8gUkFORCBmdW5jdGlvbmFsaXR5IGJ1dCB3aXRob3V0CisrICogRU5HSU5FIGFu ZCBhZGRpdGlvbmFsIGNoZWNraW5nIGZvciBub24tRklQUyByYW5kIG1ldGhvZHMuCisrICovCisr Cisrc3RhdGljIGNvbnN0IFJBTkRfTUVUSE9EICpmaXBzX3JhbmRfbWV0aCA9IE5VTEw7Cisrc3Rh dGljIGludCBmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9IDA7Cisrc3RhdGljIGludCBmaXBzX3Jh bmRfYml0cyA9IDA7CisrCisrLyogQWxsb3dzIGFwcGxpY2F0aW9uIHRvIG92ZXJyaWRlIG51bWJl ciBvZiBiaXRzIGFuZCB1c2VzIG5vbi1GSVBTIG1ldGhvZHMgKi8KKyt2b2lkIEZJUFNfcmFuZF9z ZXRfYml0cyhpbnQgbmJpdHMpCisrCXsKKysJZmlwc19yYW5kX2JpdHMgPSBuYml0czsKKysJfQor KworK2ludCBGSVBTX3JhbmRfc2V0X21ldGhvZChjb25zdCBSQU5EX01FVEhPRCAqbWV0aCkKKysJ eworKwlpZiAoIWZpcHNfcmFuZF9iaXRzKQorKwkJeworKwkJaWYgKG1ldGggPT0gRklQU19kcmJn X21ldGhvZCgpKQorKwkJCWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID0gMTsKKysJCWVsc2UgaWYg KG1ldGggPT0gRklQU194OTMxX21ldGhvZCgpKQorKwkJCWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRo ID0gMjsKKysJCWVsc2UKKysJCQl7CisrCQkJZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPSAwOwor KwkJCWlmIChGSVBTX21vZHVsZV9tb2RlKCkpCisrCQkJCXsKKysJCQkJRklQU2VycihGSVBTX0Zf RklQU19SQU5EX1NFVF9NRVRIT0QsCisrCQkJCQkJRklQU19SX05PTl9GSVBTX01FVEhPRCk7Cisr CQkJCXJldHVybiAwOworKwkJCQl9CisrCQkJfQorKwkJfQorKwlmaXBzX3JhbmRfbWV0aCA9IG1l dGg7CisrCXJldHVybiAxOworKwl9CisrCisrY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9n ZXRfbWV0aG9kKHZvaWQpCisrCXsKKysJcmV0dXJuIGZpcHNfcmFuZF9tZXRoOworKwl9CisrCisr Y29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9tZXRob2Qodm9pZCkKKysJeworKwlyZXR1cm4g RklQU19yYW5kX2dldF9tZXRob2QoKTsKKysJfQorKworK3ZvaWQgRklQU19yYW5kX3Jlc2V0KHZv aWQpCisrCXsKKysJaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5jbGVhbnVw KQorKwkJZmlwc19yYW5kX21ldGgtPmNsZWFudXAoKTsKKysJfQorKworK2ludCBGSVBTX3JhbmRf c2VlZChjb25zdCB2b2lkICpidWYsIEZJUFNfUkFORF9TSVpFX1QgbnVtKQorKwl7CisrCWlmICgh Zmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgpKQorKwkJeworKwkJ RklQU2VycihGSVBTX0ZfRklQU19SQU5EX1NFRUQsIEZJUFNfUl9OT05fRklQU19NRVRIT0QpOwor KwkJcmV0dXJuIDA7CisrCQl9CisrCWlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0 aC0+c2VlZCkKKysJCWZpcHNfcmFuZF9tZXRoLT5zZWVkKGJ1ZixudW0pOworKwlyZXR1cm4gMTsK KysJfQorKworK3ZvaWQgRklQU19yYW5kX2FkZChjb25zdCB2b2lkICpidWYsIGludCBudW0sIGRv dWJsZSBlbnRyb3B5KQorKwl7CisrCWlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQ U19tb2R1bGVfbW9kZSgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19SQU5EX0FERCwg RklQU19SX05PTl9GSVBTX01FVEhPRCk7CisrCQlyZXR1cm47CisrCQl9CisrCWlmIChmaXBzX3Jh bmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+YWRkKQorKwkJZmlwc19yYW5kX21ldGgtPmFkZChi dWYsbnVtLGVudHJvcHkpOworKwl9CisrCisraW50IEZJUFNfcmFuZF9ieXRlcyh1bnNpZ25lZCBj aGFyICpidWYsIEZJUFNfUkFORF9TSVpFX1QgbnVtKQorKwl7CisrCWlmICghZmlwc19hcHByb3Zl ZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgpKQorKwkJeworKwkJRklQU2VycihGSVBT X0ZfRklQU19SQU5EX0JZVEVTLCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJCXJldHVybiAw OworKwkJfQorKwlpZiAoZmlwc19yYW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgtPmJ5dGVzKQor KwkJcmV0dXJuIGZpcHNfcmFuZF9tZXRoLT5ieXRlcyhidWYsbnVtKTsKKysJcmV0dXJuIDA7Cisr CX0KKysKKytpbnQgRklQU19yYW5kX3BzZXVkb19ieXRlcyh1bnNpZ25lZCBjaGFyICpidWYsIGlu dCBudW0pCisrCXsKKysJaWYgKCFmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21vZHVs ZV9tb2RlKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfUFNFVURPX0JZVEVT LCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJCXJldHVybiAwOworKwkJfQorKwlpZiAoZmlw c19yYW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgtPnBzZXVkb3JhbmQpCisrCQlyZXR1cm4gZmlw c19yYW5kX21ldGgtPnBzZXVkb3JhbmQoYnVmLG51bSk7CisrCXJldHVybiAtMTsKKysJfQorKwor K2ludCBGSVBTX3JhbmRfc3RhdHVzKHZvaWQpCisrCXsKKysJaWYgKCFmaXBzX2FwcHJvdmVkX3Jh bmRfbWV0aCAmJiBGSVBTX21vZHVsZV9tb2RlKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9G SVBTX1JBTkRfU1RBVFVTLCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJCXJldHVybiAwOwor KwkJfQorKwlpZiAoZmlwc19yYW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgtPnN0YXR1cykKKysJ CXJldHVybiBmaXBzX3JhbmRfbWV0aC0+c3RhdHVzKCk7CisrCXJldHVybiAwOworKwl9CisrCisr LyogUmV0dXJuIGluc3RhbnRpYXRlZCBzdHJlbmd0aCBvZiBQUk5HLiBGb3IgRFJCRyB0aGlzIGlz IGFuIGludGVybmFsCisrICogcGFyYW1ldGVyLiBGb3IgWDkuMzEgUFJORyBpdCBpcyA4MCBiaXRz IChmcm9tIFNQODAwLTEzMSkuIEFueSBvdGhlcgorKyAqIHR5cGUgb2YgUFJORyBpcyBub3QgYXBw cm92ZWQgYW5kIHJldHVybnMgMCBpbiBGSVBTIG1vZGUgYW5kIG1heGltdW0KKysgKiAyNTYgb3V0 c2lkZSBGSVBTIG1vZGUuCisrICovCisrCisraW50IEZJUFNfcmFuZF9zdHJlbmd0aCh2b2lkKQor Kwl7CisrCWlmIChmaXBzX3JhbmRfYml0cykKKysJCXJldHVybiBmaXBzX3JhbmRfYml0czsKKysJ aWYgKGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID09IDEpCisrCQlyZXR1cm4gRklQU19kcmJnX2dl dF9zdHJlbmd0aChGSVBTX2dldF9kZWZhdWx0X2RyYmcoKSk7CisrCWVsc2UgaWYgKGZpcHNfYXBw cm92ZWRfcmFuZF9tZXRoID09IDIpCisrCQlyZXR1cm4gODA7CisrCWVsc2UgaWYgKGZpcHNfYXBw cm92ZWRfcmFuZF9tZXRoID09IDApCisrCQl7CisrCQlpZiAoRklQU19tb2R1bGVfbW9kZSgpKQor KwkJCXJldHVybiAwOworKwkJZWxzZQorKwkJCXJldHVybiAyNTY7CisrCQl9CisrCXJldHVybiAw OworKwl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2Vs ZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVz dC5jCistLS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMu ZmlwcwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU2NTkyMjYwOCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjFrL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jCTIwMTUtMDEtMDkgMDk6NTE6NTEu NTY1OTIyNjA4ICswMTAwCitAQCAtMCwwICsxLDE4MyBAQAorKy8qID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICog Q29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysg KgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdt ZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9w ZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8K KysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0 ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNz bC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBt YXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBl YXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lv biBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9m IGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFj a25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFO WQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICog QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgor KyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIK KysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrCisrCisrdHlwZWRlZiBzdHJ1Y3QKKysJewor Kwl1bnNpZ25lZCBjaGFyIERUWzE2XTsKKysJdW5zaWduZWQgY2hhciBWWzE2XTsKKysJdW5zaWdu ZWQgY2hhciBSWzE2XTsKKysJfSBBRVNfUFJOR19UVjsKKysKKysvKiBUaGUgZm9sbG93aW5nIHRl c3QgdmVjdG9ycyBhcmUgdGFrZW4gZGlyZWN0bHkgZnJvbSB0aGUgUkdOVlMgc3BlYyAqLworKwor K3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xMjhfa2V5WzE2XSA9CisrCQl7MHhmMywweGIxLDB4 NjYsMHg2ZCwweDEzLDB4NjAsMHg3MiwweDQyLAorKwkJIDB4ZWQsMHgwNiwweDFjLDB4YWIsMHhi OCwweGQ0LDB4NjIsMHgwMn07CisrCisrc3RhdGljIEFFU19QUk5HX1RWIGFlc18xMjhfdHYgPSAK KysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4 ZmEsMHg2MiwKKysJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4Zjl9LAor KwkJCQkvKiBWICovCisrCQl7MHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8q IFIgKi8KKysJCXsweDU5LDB4NTMsMHgxZSwweGQxLDB4M2IsMHhiMCwweGMwLDB4NTUsCisrCQkg MHg4NCwweDc5LDB4NjYsMHg4NSwweGMxLDB4MmYsMHg3NiwweDQxfQorKwl9OworKworK3N0YXRp YyB1bnNpZ25lZCBjaGFyIGFlc18xOTJfa2V5WzI0XSA9CisrCQl7MHgxNSwweGQ4LDB4NzgsMHgw ZCwweDYyLDB4ZDMsMHgyNSwweDZlLAorKwkJIDB4NDQsMHg2NCwweDEwLDB4MTMsMHg2MCwweDJi LDB4YTksMHhiYywKKysJCSAweDRhLDB4ZmIsMHhjYSwweGViLDB4NGMsMHg4YiwweDk5LDB4M2J9 OworKworK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMTkyX3R2ID0gCisrCXsKKysJCQkJLyogRFQg Ki8KKysJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCisrCQkgMHhi ZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweDRifSwKKysJCQkJLyogViAqLworKwkJ ezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHgxNyww eDA3LDB4ZDUsMHgyOCwweDE5LDB4NzksMHgxZSwweGVmLAorKwkJIDB4YTUsMHgwYywweGJmLDB4 MjUsMHhlNSwweDU2LDB4YjQsMHg5M30KKysJfTsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBh ZXNfMjU2X2tleVszMl0gPQorKwkJezB4NmQsMHgxNCwweDA2LDB4NmMsMHhiNiwweGQ4LDB4MjEs MHgyZCwKKysJCSAweDgyLDB4OGQsMHhmYSwweGYyLDB4N2EsMHgwMywweGI3LDB4OWYsCisrCQkg MHgwYywweGM3LDB4M2UsMHhjZCwweDc2LDB4ZWIsMHhlZSwweGI1LAorKwkJIDB4MjEsMHgwNSww eDhjLDB4NGYsMHgzMSwweDdhLDB4ODAsMHhiYn07CisrCisrc3RhdGljIEFFU19QUk5HX1RWIGFl c18yNTZfdHYgPQorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHhkYSwweDNhLDB4NDEsMHhlYyww eDFkLDB4YTMsMHhiMCwweGQ1LAorKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4 OWUsMHg4OH0sCisrCQkJCS8qIFYgKi8KKysJCXsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw fSwKKysJCQkJLyogUiAqLworKwkJezB4MzUsMHhjNywweGVmLDB4YTcsMHg3OCwweDRkLDB4Mjks MHhiYywKKysJCSAweDgyLDB4NzksMHg5OSwweGZiLDB4ZDAsMHhiMywweDNiLDB4NzJ9CisrCX07 CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfcm5nKCkKKysgICAgeworKyAgICBhZXNfMTkyX3R2LlZb MF0rKzsKKysgICAgfQorKworKyNkZWZpbmUgZmlwc194OTMxX3Rlc3Qoa2V5LCB0dikgXAorKwlk b194OTMxX3Rlc3Qoa2V5LCBzaXplb2Yga2V5LCAmdHYpCisrCisrc3RhdGljIGludCBkb194OTMx X3Rlc3QodW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLAorKwkJCUFFU19QUk5HX1RWICp0 dikKKysJeworKwl1bnNpZ25lZCBjaGFyIFJbMTZdLCBWWzE2XTsKKysJaW50IHJ2ID0gMTsKKysJ bWVtY3B5KFYsIHR2LT5WLCBzaXplb2YoVikpOworKwlpZiAoIUZJUFNfeDkzMV9zZXRfa2V5KGtl eSwga2V5bGVuKSkKKysJCXJldHVybiAwOworKwlpZiAoIWZpcHNfcG9zdF9zdGFydGVkKEZJUFNf VEVTVF9YOTMxLCBrZXlsZW4sIE5VTEwpKQorKwkJcmV0dXJuIDE7CisrCWlmICghZmlwc19wb3N0 X2NvcnJ1cHQoRklQU19URVNUX1g5MzEsIGtleWxlbiwgTlVMTCkpCisrCQlWWzBdKys7CisrCUZJ UFNfeDkzMV9zZWVkKFYsIDE2KTsKKysJRklQU194OTMxX3NldF9kdCh0di0+RFQpOworKwlGSVBT X3g5MzFfYnl0ZXMoUiwgMTYpOworKwlpZiAobWVtY21wKFIsIHR2LT5SLCAxNikpCisrCQl7Cisr CQlmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9YOTMxLCBrZXlsZW4sIE5VTEwpOworKwkJcnYg PSAwOworKwkJfQorKwllbHNlIGlmICghZmlwc19wb3N0X3N1Y2Nlc3MoRklQU19URVNUX1g5MzEs IGtleWxlbiwgTlVMTCkpCisrCQlyZXR1cm4gMDsKKysJcmV0dXJuIHJ2OworKwl9CisrCisraW50 IEZJUFNfc2VsZnRlc3RfeDkzMSgpCisrCXsKKysJaW50IHJ2ID0gMTsKKysJRklQU194OTMxX3Jl c2V0KCk7CisrCWlmICghRklQU194OTMxX3Rlc3RfbW9kZSgpKQorKwkJeworKwkJRklQU2VycihG SVBTX0ZfRklQU19TRUxGVEVTVF9YOTMxLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0 dXJuIDA7CisrCQl9CisrCWlmICghZmlwc194OTMxX3Rlc3QoYWVzXzEyOF9rZXksYWVzXzEyOF90 dikpCisrCQlydiA9IDA7CisrCWlmICghZmlwc194OTMxX3Rlc3QoYWVzXzE5Ml9rZXksIGFlc18x OTJfdHYpKQorKwkJcnYgPSAwOworKwlpZiAoIWZpcHNfeDkzMV90ZXN0KGFlc18yNTZfa2V5LCBh ZXNfMjU2X3R2KSkKKysJCXJ2ID0gMDsKKysJRklQU194OTMxX3Jlc2V0KCk7CisrCWlmICghcnYp CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1g5MzEsRklQU19SX1NFTEZURVNUX0ZB SUxFRCk7CisrCXJldHVybiBydjsKKysJfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X3JuZyh2b2lk KQorKwl7CisrCXJldHVybiBGSVBTX3NlbGZ0ZXN0X3g5MzEoKTsKKysJfQorKworKyNlbmRpZgor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jLmZpcHMg b3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jCistLS0gb3BlbnNzbC0x LjAuMWsvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jLmZpcHMJMjAxNS0wMS0wOSAwOTo1MTo1 MS41NjU5MjI2MDggKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9maXBzX3Jh bmR0ZXN0LmMJMjAxNS0wMS0wOSAwOTo1MTo1MS41NjU5MjI2MDggKzAxMDAKK0BAIC0wLDAgKzEs MjUwIEBACisrLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0 c29mdC5jb20pCisrICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFRoaXMgcGFja2Fn ZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorKyAqIGJ5IEVyaWMgWW91bmcgKGVh eUBjcnlwdHNvZnQuY29tKS4KKysgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28g YXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisrICogCisrICogVGhpcyBsaWJyYXJ5 IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFz CisrICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxv d2luZyBjb25kaXRpb25zCisrICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0 cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKysgKiBsaGFzaCwgREVTLCBldGMuLCBjb2Rl OyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKysgKiBpbmNs dWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJp Z2h0IHRlcm1zCisrICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhA Y3J5cHRzb2Z0LmNvbSkuCisrICogCisrICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydz LCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKysgKiB0aGUgY29kZSBhcmUg bm90IHRvIGJlIHJlbW92ZWQuCisrICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9k dWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorKyAqIGFzIHRoZSBh dXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisrICogVGhpcyBjYW4gYmUg aW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisr ICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhl IHBhY2thZ2UuCisrICogCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1l dDoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0 aGUKKysgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorKyAqICAgIG11c3Qg ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorKyAqICAgICBF cmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisrICogICAgVGhlIHdvcmQgJ2NyeXB0b2dy YXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Cisr ICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisrICog NC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0 aXZlIHRoZXJlb2YpIGZyb20gCisrICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlv biBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNy eXB0c29mdC5jb20pIgorKyAqIAorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJ QyBZT1VORyBgYEFTIElTJycgQU5ECisrICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UKKysgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisrICogREFN QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMKKysgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorKyAq IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB UklTSU5HIElOIEFOWSBXQVkKKysgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisrICogU1VDSCBEQU1BR0UuCisr ICogCisrICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1Ymxp Y2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKysgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBj YW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKysgKiBj b3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisrICogW2lu Y2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKysgKi8KKysvKiA9PT09PT09PT09PT09 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 ICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+Cisr I2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKworKyNpbmNsdWRlICJl X29zLmgiCisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIFJBTkQgc3VwcG9ydFxuIik7Cisr ICAgIHJldHVybigwKTsKKyt9CisrCisrI2Vsc2UKKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIK KysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrCisrdHlwZWRlZiBzdHJ1Y3QKKysJeworKwl1 bnNpZ25lZCBjaGFyIERUWzE2XTsKKysJdW5zaWduZWQgY2hhciBWWzE2XTsKKysJdW5zaWduZWQg Y2hhciBSWzE2XTsKKysJfSBBRVNfUFJOR19NQ1Q7CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzEyOF9tY3Rfa2V5WzE2XSA9CisrCXsweDlmLDB4NWIsMHg1MSwweDIwLDB4MGIs MHhmMywweDM0LDB4YjUsCisrCSAweGQ4LDB4MmIsMHhlOCwweGMzLDB4NzIsMHg1NSwweGM4LDB4 NDh9OworKworK3N0YXRpYyBjb25zdCBBRVNfUFJOR19NQ1QgYWVzXzEyOF9tY3RfdHYgPSB7Cisr CQkJLyogRFQgKi8KKysJezB4NjMsMHg3NiwweGJiLDB4ZTUsMHgyOSwweDAyLDB4YmEsMHgzYiwK KysJIDB4NjcsMHhjOSwweDI1LDB4ZmEsMHg3MCwweDFmLDB4MTEsMHhhY30sCisrCQkJLyogViAq LworKwl7MHg1NywweDJjLDB4OGUsMHg3NiwweDg3LDB4MjYsMHg0NywweDk3LAorKwkgMHg3ZSww eDc0LDB4ZmIsMHhkZCwweGM0LDB4OTUsMHgwMSwweGQxfSwKKysJCQkvKiBSICovCisrCXsweDQ4 LDB4ZTksMHhiZCwweDBkLDB4MDYsMHhlZSwweDE4LDB4ZmIsCisrCSAweGU0LDB4NTcsMHg5MCww eGQ1LDB4YzMsMHhmYywweDliLDB4NzN9CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMTkyX21jdF9rZXlbMjRdID0KKysJezB4YjcsMHg2YywweDM0LDB4ZDEsMHgwOSww eDY3LDB4YWIsMHg3MywKKysJIDB4NGQsMHg1YSwweGQ1LDB4MzQsMHg5OCwweDE2LDB4MGIsMHg5 MSwKKysJIDB4YmMsMHgzNSwweDUxLDB4MTYsMHg2YiwweGFlLDB4OTMsMHg4YX07CisrCisrc3Rh dGljIGNvbnN0IEFFU19QUk5HX01DVCBhZXNfMTkyX21jdF90diA9IHsKKysJCQkvKiBEVCAqLwor Kwl7MHg4NCwweGNlLDB4MjIsMHg3ZCwweDkxLDB4NWEsMHhhMywweGM5LAorKwkgMHg4NCwweDNj LDB4MGEsMHhiMywweGE5LDB4NjMsMHgxNSwweDUyfSwKKysJCQkvKiBWICovCisrCXsweGI2LDB4 YWYsMHhlNiwweDhmLDB4OTksMHg5ZSwweDkwLDB4NjQsCisrCSAweGRkLDB4YzcsMHg3YSwweGMx LDB4YmIsMHg5MCwweDNhLDB4NmR9LAorKwkJCS8qIFIgKi8KKysJezB4ZmMsMHg4NSwweDYwLDB4 OWEsMHgyOSwweDZmLDB4ZWYsMHgyMSwKKysJIDB4ZGQsMHg4NiwweDIwLDB4MzIsMHg4YSwweDI5 LDB4NmYsMHg0N30KKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZf bWN0X2tleVszMl0gPQorKwl7MHg5YiwweDA1LDB4YzgsMHg2OCwweGZmLDB4NDcsMHhmOCwweDNh LAorKwkgMHhhNiwweDNhLDB4YTgsMHhjYiwweDRlLDB4NzEsMHhiMiwweGUwLAorKwkgMHhiOCww eDdlLDB4ZjEsMHgzNywweGI2LDB4YjQsMHhmNiwweDZkLAorKwkgMHg4NiwweDMyLDB4ZmMsMHgx ZiwweDVlLDB4MWQsMHgxZSwweDUwfTsKKysKKytzdGF0aWMgY29uc3QgQUVTX1BSTkdfTUNUIGFl c18yNTZfbWN0X3R2ID0geworKwkJCS8qIERUICovCisrCXsweDMxLDB4NmUsMHgzNSwweDlhLDB4 YjEsMHg0NCwweGYwLDB4ZWUsCisrCSAweDYyLDB4NmQsMHgwNCwweDQ2LDB4ZTAsMHhhMywweDky LDB4NGN9LAorKwkJCS8qIFYgKi8KKysJezB4NGYsMHhjZCwweGMxLDB4ODcsMHg4MiwweDFmLDB4 NGQsMHhhMSwKKysJIDB4M2UsMHgwZSwweDU2LDB4NDQsMHg1OSwweGU4LDB4ODMsMHhjYX0sCisr CQkJLyogUiAqLworKwl7MHhjOCwweDg3LDB4YzIsMHg2MSwweDViLDB4ZDAsMHhiOSwweGUxLAor KwkgMHhlNywweGYzLDB4OGIsMHhkNywweDViLDB4ZDUsMHhmMSwweDhkfQorK307CisrCisrc3Rh dGljIHZvaWQgZHVtcChjb25zdCB1bnNpZ25lZCBjaGFyICpiLGludCBuKQorKyAgICB7CisrICAg IHdoaWxlKG4tLSA+IDApCisrCXsKKysJcHJpbnRmKCIgJTAyeCIsKmIrKyk7CisrCX0KKysgICAg fQorKworK3N0YXRpYyB2b2lkIGNvbXBhcmUoY29uc3QgdW5zaWduZWQgY2hhciAqcmVzdWx0LGNv bnN0IHVuc2lnbmVkIGNoYXIgKmV4cGVjdGVkLAorKwkJICAgIGludCBuKQorKyAgICB7CisrICAg IGludCBpOworKworKyAgICBmb3IoaT0wIDsgaSA8IG4gOyArK2kpCisrCWlmKHJlc3VsdFtpXSAh PSBleHBlY3RlZFtpXSkKKysJICAgIHsKKysJICAgIHB1dHMoIlJhbmRvbSB0ZXN0IGZhaWxlZCwg Z290OiIpOworKwkgICAgZHVtcChyZXN1bHQsbik7CisrCSAgICBwdXRzKCJcbiAgICAgICAgICAg ICAgIGV4cGVjdGVkOiIpOworKwkgICAgZHVtcChleHBlY3RlZCxuKTsKKysJICAgIHB1dGNoYXIo J1xuJyk7CisrCSAgICBFWElUKDEpOworKwkgICAgfQorKyAgICB9CisrCisrCisrc3RhdGljIHZv aWQgcnVuX3Rlc3QoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLAorKwkJCQkJ CQljb25zdCBBRVNfUFJOR19NQ1QgKnR2KQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIgYnVm WzE2XSwgZHRbMTZdOworKyAgICBpbnQgaSwgajsKKysgICAgRklQU194OTMxX3Jlc2V0KCk7Cisr ICAgIEZJUFNfeDkzMV90ZXN0X21vZGUoKTsKKysgICAgRklQU194OTMxX3NldF9rZXkoa2V5LCBr ZXlsZW4pOworKyAgICBGSVBTX3g5MzFfc2VlZCh0di0+ViwgMTYpOworKyAgICBtZW1jcHkoZHQs IHR2LT5EVCwgMTYpOworKyAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykKKysJeworKyAg ICAJRklQU194OTMxX3NldF9kdChkdCk7CisrCUZJUFNfeDkzMV9ieXRlcyhidWYsIDE2KTsKKysJ LyogSW5jcmVtZW50IERUICovCisrCWZvciAoaiA9IDE1OyBqID49IDA7IGotLSkKKysJCXsKKysJ CWR0W2pdKys7CisrCQlpZiAoZHRbal0pCisrCQkJYnJlYWs7CisrCQl9CisrCX0KKysKKysgICAg Y29tcGFyZShidWYsdHYtPlIsIDE2KTsKKysgICAgfQorKworK2ludCBtYWluKCkKKysJeworKwly dW5fdGVzdChhZXNfMTI4X21jdF9rZXksIDE2LCAmYWVzXzEyOF9tY3RfdHYpOworKwlwcmludGYo IkZJUFMgUFJORyB0ZXN0IDEgZG9uZVxuIik7CisrCXJ1bl90ZXN0KGFlc18xOTJfbWN0X2tleSwg MjQsICZhZXNfMTkyX21jdF90dik7CisrCXByaW50ZigiRklQUyBQUk5HIHRlc3QgMiBkb25lXG4i KTsKKysJcnVuX3Rlc3QoYWVzXzI1Nl9tY3Rfa2V5LCAzMiwgJmFlc18yNTZfbWN0X3R2KTsKKysJ cHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAzIGRvbmVcbiIpOworKwlyZXR1cm4gMDsKKysJfQorKwor KyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2Vs ZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0 LmMKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jLmZp cHMJMjAxNS0wMS0wOSAwOTo1MTo1MS41NjY5MjI2MzAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4x ay9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTY2 OTIyNjMwICswMTAwCitAQCAtMCwwICsxLDQ0NCBAQAorKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29w eXJpZ2h0IChjKSAyMDAzLTIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0Ogor KyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4g QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAi T3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0 bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVu c3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFw cGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNz aW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMg b2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAg YWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQg QU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRT IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysg KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAq CisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2Vu ZGlmCisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29u Zi5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBuW10gPQorKyJceDAwXHhCQlx4RjhceDJGXHgwOVx4MDZceDgyXHhDRVx4OUNceDIzXHgz OFx4QUNceDJCXHg5RFx4QThceDcxIgorKyJceEY3XHgzNlx4OERceDA3XHhFRVx4RDRceDEwXHg0 M1x4QTRceDQwXHhENlx4QjZceEYwXHg3NFx4NTRceEY1IgorKyJceDFGXHhCOFx4REZceEJBXHhB Rlx4MDNceDVDXHgwMlx4QUJceDYxXHhFQVx4NDhceENFXHhFQlx4NkZceENEIgorKyJceDQ4XHg3 Nlx4RURceDUyXHgwRFx4NjBceEUxXHhFQ1x4NDZceDE5XHg3MVx4OURceDhBXHg1Qlx4OEJceDgw IgorKyJceDdGXHhBRlx4QjhceEUwXHhBM1x4REZceEM3XHgzN1x4NzJceDNFXHhFNlx4QjRceEI3 XHhEOVx4M0FceDI1IgorKyJceDg0XHhFRVx4NkFceDY0XHg5RFx4MDZceDA5XHg1M1x4NzRceDg4 XHgzNFx4QjJceDQ1XHg0NVx4OThceDM5IgorKyJceDRFXHhFMFx4QUFceEIxXHgyRFx4N0JceDYx XHhBNVx4MUZceDUyXHg3QVx4OUFceDQxXHhGNlx4QzFceDY4IgorKyJceDdGXHhFMlx4NTNceDcy XHg5OFx4Q0FceDJBXHg4Rlx4NTlceDQ2XHhGOFx4RTVceEZEXHgwOVx4MURceEJEIgorKyJceENC IjsKKysKKytzdGF0aWMgaW50IGNvcnJ1cHRfcnNhOworKworK3N0YXRpYyBpbnQgc2V0cnNha2V5 KFJTQSAqa2V5KQorKyAgICB7CisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVbXSA9 ICJceDExIjsKKysKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZFtdID0KKysiXHgw MFx4QTVceERBXHhGQ1x4NTNceDQxXHhGQVx4RjJceDg5XHhDNFx4QjlceDg4XHhEQlx4MzBceEMx XHhDRCIKKysiXHhGOFx4M0ZceDMxXHgyNVx4MUVceDA2XHg2OFx4QjRceDI3XHg4NFx4ODFceDM4 XHgwMVx4NTdceDk2XHg0MSIKKysiXHhCMlx4OTRceDEwXHhCM1x4QzdceDk5XHg4RFx4NkJceEM0 XHg2NVx4NzRceDVFXHg1Q1x4MzlceDI2XHg2OSIKKysiXHhENlx4ODdceDBEXHhBMlx4QzBceDgy XHhBOVx4MzlceEUzXHg3Rlx4RENceEI4XHgyRVx4QzlceDNFXHhEQSIKKysiXHhDOVx4N0ZceEYz XHhBRFx4NTlceDUwXHhBQ1x4Q0ZceEJDXHgxMVx4MUNceDc2XHhGMVx4QTlceDUyXHg5NCIKKysi XHg0NFx4RTVceDZBXHhBRlx4NjhceEM1XHg2Q1x4MDlceDJDXHhEM1x4OERceEMzXHhCRVx4RjVc eEQyXHgwQSIKKysiXHg5M1x4OTlceDI2XHhFRFx4NEZceDc0XHhBMVx4M0VceEREXHhGQlx4RTFc eEExXHhDRVx4Q0NceDQ4XHg5NCIKKysiXHhBRlx4OTRceDI4XHhDMlx4QjdceEI4XHg4OFx4M0Zc eEU0XHg0Nlx4M0FceDRCXHhDOFx4NUJceDFDXHhCMyIKKysiXHhDMSI7CisrCisrICAgIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHBbXSA9CisrIlx4MDBceEVFXHhDRlx4QUVceDgxXHhCMVx4 QjlceEIzXHhDOVx4MDhceDgxXHgwQlx4MTBceEExXHhCNVx4NjAiCisrIlx4MDFceDk5XHhFQlx4 OUZceDQ0XHhBRVx4RjRceEZEXHhBNFx4OTNceEI4XHgxQVx4OUVceDNEXHg4NFx4RjYiCisrIlx4 MzJceDEyXHg0RVx4RjBceDIzXHg2RVx4NURceDFFXHgzQlx4N0VceDI4XHhGQVx4RTdceEFBXHgw NFx4MEEiCisrIlx4MkRceDVCXHgyNVx4MjFceDc2XHg0NVx4OURceDFGXHgzOVx4NzVceDQxXHhC QVx4MkFceDU4XHhGQlx4NjUiCisrIlx4OTkiOworKworKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBxW10gPQorKyJceDAwXHhDOVx4N0ZceEIxXHhGMFx4MjdceEY0XHg1M1x4RjZceDM0 XHgxMlx4MzNceEVBXHhBQVx4RDFceEQ5IgorKyJceDM1XHgzRlx4NkNceDQyXHhEMFx4ODhceDY2 XHhCMVx4RDBceDVBXHgwRlx4MjBceDM1XHgwMlx4OEJceDlEIgorKyJceDg2XHg5OFx4NDBceEI0 XHgxNlx4NjZceEI0XHgyRVx4OTJceEVBXHgwRFx4QTNceEI0XHgzMlx4MDRceEI1IgorKyJceENG XHhDRVx4MzNceDUyXHg1Mlx4NERceDA0XHgxNlx4QTVceEE0XHg0MVx4RTdceDAwXHhBRlx4NDZc eDE1IgorKyJceDAzIjsKKysKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZG1wMVtd ID0KKysiXHg1NFx4NDlceDRDXHhBNlx4M0VceEJBXHgwM1x4MzdceEU0XHhFMlx4NDBceDIzXHhG Q1x4RDZceDlBXHg1QSIKKysiXHhFQlx4MDdceEREXHhEQ1x4MDFceDgzXHhBNFx4RDBceEFDXHg5 Qlx4NTRceEIwXHg1MVx4RjJceEIxXHgzRSIKKysiXHhEOVx4NDlceDA5XHg3NVx4RUFceEI3XHg3 NFx4MTRceEZGXHg1OVx4QzFceEY3XHg2OVx4MkVceDlBXHgyRSIKKysiXHgyMFx4MkJceDM4XHhG Q1x4OTFceDBBXHg0N1x4NDFceDc0XHhBRFx4QzlceDNDXHgxRlx4NjdceEM5XHg4MSI7CisrCisr ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRtcTFbXSA9CisrIlx4NDdceDFFXHgwMlx4 OTBceEZGXHgwQVx4RjBceDc1XHgwM1x4NTFceEI3XHhGOFx4NzhceDg2XHg0Q1x4QTkiCisrIlx4 NjFceEFEXHhCRFx4M0FceDhBXHg3RVx4OTlceDFDXHg1Q1x4MDVceDU2XHhBOVx4NENceDMxXHg0 Nlx4QTciCisrIlx4RjlceDgwXHgzRlx4OEZceDZGXHg4QVx4RTNceDQyXHhFOVx4MzFceEZEXHg4 QVx4RTRceDdBXHgyMlx4MEQiCisrIlx4MUJceDk5XHhBNFx4OTVceDg0XHg5OFx4MDdceEZFXHgz OVx4RjlceDI0XHg1QVx4OThceDM2XHhEQVx4M0QiOworKyAgICAKKysgICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaXFtcFtdID0KKysiXHgwMFx4QjBceDZDXHg0Rlx4REFceEJCXHg2M1x4 MDFceDE5XHg4RFx4MjZceDVCXHhEQlx4QUVceDk0XHgyMyIKKysiXHhCM1x4ODBceEYyXHg3MVx4 RjdceDM0XHg1M1x4ODhceDUwXHg5M1x4MDdceDdGXHhDRFx4MzlceEUyXHgxMSIKKysiXHg5Rlx4 QzlceDg2XHgzMlx4MTVceDRGXHg1OFx4ODNceEIxXHg2N1x4QTlceDY3XHhCRlx4NDBceDJCXHg0 RSIKKysiXHg5RVx4MkVceDBGXHg5Nlx4NTZceEU2XHg5OFx4RUFceDM2XHg2Nlx4RURceEZCXHgy NVx4NzlceDgwXHgzOSIKKysiXHhGNyI7CisrCisrICAgIGtleS0+biA9IEJOX2JpbjJibihuLCBz aXplb2YobiktMSwga2V5LT5uKTsKKysgICAgaWYgKGNvcnJ1cHRfcnNhKQorKwlCTl9zZXRfYml0 KGtleS0+biwgMTAyNCk7CisrICAgIGtleS0+ZSA9IEJOX2JpbjJibihlLCBzaXplb2YoZSktMSwg a2V5LT5lKTsKKysgICAga2V5LT5kID0gQk5fYmluMmJuKGQsIHNpemVvZihkKS0xLCBrZXktPmQp OworKyAgICBrZXktPnAgPSBCTl9iaW4yYm4ocCwgc2l6ZW9mKHApLTEsIGtleS0+cCk7CisrICAg IGtleS0+cSA9IEJOX2JpbjJibihxLCBzaXplb2YocSktMSwga2V5LT5xKTsKKysgICAga2V5LT5k bXAxID0gQk5fYmluMmJuKGRtcDEsIHNpemVvZihkbXAxKS0xLCBrZXktPmRtcDEpOworKyAgICBr ZXktPmRtcTEgPSBCTl9iaW4yYm4oZG1xMSwgc2l6ZW9mKGRtcTEpLTEsIGtleS0+ZG1xMSk7Cisr ICAgIGtleS0+aXFtcCA9IEJOX2JpbjJibihpcW1wLCBzaXplb2YoaXFtcCktMSwga2V5LT5pcW1w KTsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKyt2b2lkIEZJUFNfY29ycnVwdF9yc2EoKQor KyAgICB7CisrICAgIGNvcnJ1cHRfcnNhID0gMTsKKysgICAgfQorKworKy8qIEtub3duIEFuc3dl ciBUZXN0IChLQVQpIGRhdGEgZm9yIHRoZSBhYm92ZSBSU0EgcHJpdmF0ZSBrZXkgc2lnbmluZwor KyAqIGthdF90YnMuCisrICovCisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X3Ri c1tdID0gIk9wZW5TU0wgRklQUyAxNDAtMiBQdWJsaWMgS2V5IFJTQSBLQVQiOworKworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTFbXSA9IHsKKysgIDB4MkQsIDB4 QUYsIDB4NkUsIDB4QzIsIDB4OTgsIDB4RkIsIDB4OEEsIDB4QTEsIDB4QjksIDB4NDYsIDB4REEs IDB4MEYsCisrICAweDAxLCAweDFFLCAweDM3LCAweDkzLCAweEMyLCAweDU1LCAweDI3LCAweEU0 LCAweDFELCAweEQyLCAweDkwLCAweEJCLAorKyAgMHhGNCwgMHhCRiwgMHg0QSwgMHg3NCwgMHgz OSwgMHg1MSwgMHhCQiwgMHhFOCwgMHgwQywgMHhCNywgMHhGOCwgMHhEMywKKysgIDB4RDEsIDB4 REYsIDB4RTcsIDB4QkUsIDB4ODAsIDB4MDUsIDB4QzMsIDB4QjUsIDB4QzcsIDB4ODMsIDB4RDUs IDB4NEMsCisrICAweDdGLCAweDQ5LCAweEZCLCAweDNGLCAweDI5LCAweDlCLCAweEUxLCAweDEy LCAweDUxLCAweDYwLCAweEQwLCAweEE3LAorKyAgMHgwRCwgMHhBOSwgMHgyOCwgMHg1NiwgMHg3 MywgMHhEOSwgMHgwNywgMHhFMywgMHg1RSwgMHgzRiwgMHg5QiwgMHhGNSwKKysgIDB4QjYsIDB4 RjMsIDB4RjIsIDB4NUUsIDB4NzQsIDB4QzksIDB4ODMsIDB4ODEsIDB4NDcsIDB4RjAsIDB4QzUs IDB4NDUsCisrICAweDBBLCAweEU5LCAweDhFLCAweDM4LCAweEQ3LCAweDE4LCAweEM2LCAweDJB LCAweDBGLCAweEY4LCAweEI3LCAweDMxLAorKyAgMHhENiwgMHg1NSwgMHhFNCwgMHg2NiwgMHg3 OCwgMHg4MSwgMHhENCwgMHhFNiwgMHhEQiwgMHg5RiwgMHhCQSwgMHhFOCwKKysgIDB4MjMsIDB4 QjUsIDB4N0YsIDB4REMsIDB4MDgsIDB4RUEsIDB4RDUsIDB4MjYsIDB4MUUsIDB4MjAsIDB4MjUs IDB4ODQsCisrICAweDI2LCAweEM2LCAweDc5LCAweEM5LCAweDlCLCAweDNELCAweDdFLCAweEE5 CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEyMjRb XSA9IHsKKysgIDB4MzksIDB4NEEsIDB4NkEsIDB4MjAsIDB4QkMsIDB4RTksIDB4MzMsIDB4RUQs IDB4RUYsIDB4QzUsIDB4NTgsIDB4QTcsCisrICAweEZFLCAweDgxLCAweEM0LCAweDM2LCAweDUw LCAweDlBLCAweDJDLCAweDgyLCAweDk4LCAweDA4LCAweDk1LCAweEZBLAorKyAgMHhCMSwgMHg5 RSwgMHhEMiwgMHg1NSwgMHg2MSwgMHg4NywgMHgyMSwgMHg1OSwgMHg4NywgMHg3QiwgMHgxRiwg MHg1NywKKysgIDB4MzAsIDB4OUQsIDB4MEQsIDB4NEEsIDB4MDYsIDB4RUIsIDB4NTIsIDB4Mzcs IDB4NTUsIDB4NTQsIDB4MUMsIDB4ODksCisrICAweDgzLCAweDc1LCAweDU5LCAweDY1LCAweDY0 LCAweDkwLCAweDJFLCAweDE2LCAweENDLCAweDg2LCAweDA1LCAweEVFLAorKyAgMHhCMSwgMHhF NiwgMHg3QiwgMHhCQSwgMHgxNiwgMHg3NSwgMHgwRCwgMHgwQywgMHg2NCwgMHgwQiwgMHhBQiwg MHgyMiwKKysgIDB4MTUsIDB4NzgsIDB4NkIsIDB4NkYsIDB4QTQsIDB4RkIsIDB4NzcsIDB4NDAs IDB4NjQsIDB4NjIsIDB4RDEsIDB4QjUsCisrICAweDM3LCAweDFFLCAweEUwLCAweDNELCAweEE4 LCAweEY5LCAweEQyLCAweEJELCAweEFBLCAweDM4LCAweDI0LCAweDQ5LAorKyAgMHg1OCwgMHhE MiwgMHg3NCwgMHg4NSwgMHhGNCwgMHhCNSwgMHg5MywgMHg4RSwgMHhGNSwgMHgwMywgMHhFQSwg MHgyRCwKKysgIDB4QzgsIDB4NTIsIDB4RkEsIDB4Q0YsIDB4N0UsIDB4MzUsIDB4QjAsIDB4NkEs IDB4QUYsIDB4OTUsIDB4QzAsIDB4MDAsCisrICAweDU0LCAweDc2LCAweDNELCAweDBDLCAweDlD LCAweEIyLCAweEVFLCAweEMwCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBr YXRfUlNBX1BTU19TSEEyNTZbXSA9IHsKKysgIDB4NkQsIDB4M0QsIDB4QkUsIDB4OEYsIDB4NjAs IDB4NkQsIDB4MjUsIDB4MTQsIDB4RjAsIDB4MzEsIDB4RTMsIDB4ODksCisrICAweDAwLCAweDk3 LCAweEZBLCAweDk5LCAweDcxLCAweDI4LCAweEU1LCAweDEwLCAweDI1LCAweDlBLCAweEYzLCAw eDhGLAorKyAgMHg3QiwgMHhDNSwgMHhBOCwgMHg0QSwgMHg3NCwgMHg1MSwgMHgzNiwgMHhFMiwg MHg4RCwgMHg3RCwgMHg3MywgMHgyOCwKKysgIDB4QzEsIDB4NzcsIDB4QzYsIDB4MjcsIDB4OTcs IDB4MDAsIDB4OEIsIDB4MDAsIDB4QTMsIDB4OTYsIDB4NzMsIDB4NEUsCisrICAweDdELCAweDJF LCAweDJDLCAweDM0LCAweDY4LCAweDhDLCAweDhFLCAweERGLCAweDlELCAweDQ5LCAweDQ3LCAw eDA1LAorKyAgMHhBQiwgMHhGNSwgMHgwMSwgMHhENiwgMHg4MSwgMHg0NywgMHg3MCwgMHhGNSwg MHgxRCwgMHg2RCwgMHgyNiwgMHhCQSwKKysgIDB4MkYsIDB4N0EsIDB4NTQsIDB4NTMsIDB4NEUs IDB4RUQsIDB4NzEsIDB4RDksIDB4NUEsIDB4RjMsIDB4REEsIDB4QjYsCisrICAweDBCLCAweDQ3 LCAweDM0LCAweEFGLCAweDkwLCAweERDLCAweEM4LCAweEQ5LCAweDZGLCAweDU2LCAweENELCAw eDlGLAorKyAgMHgyMSwgMHhCNywgMHg3RSwgMHhBRCwgMHg3QywgMHgyRiwgMHg3NSwgMHg1MCwg MHg0NywgMHgxMiwgMHhFNCwgMHg2RCwKKysgIDB4NUYsIDB4QjcsIDB4MDEsIDB4REYsIDB4QzMs IDB4MTEsIDB4NkMsIDB4QTksIDB4OUUsIDB4NDksIDB4QjksIDB4RjYsCisrICAweDcyLCAweEY0 LCAweEY2LCAweEVGLCAweDg4LCAweDFFLCAweDJELCAweDFDCisrfTsKKysKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEzODRbXSA9IHsKKysgIDB4NDAsIDB4RkIs IDB4QTEsIDB4MjEsIDB4RjQsIDB4QjIsIDB4NDAsIDB4OUEsIDB4QjQsIDB4MzEsIDB4QTgsIDB4 RjIsCisrICAweEVDLCAweDFDLCAweEM0LCAweEM4LCAweDdDLCAweDIyLCAweDY1LCAweDlDLCAw eDU3LCAweDQ1LCAweENELCAweDVFLAorKyAgMHg4NiwgMHgwMCwgMHhGNywgMHgyNSwgMHg3OCwg MHhERSwgMHhEQywgMHg3QSwgMHg3MSwgMHg0NCwgMHg5QSwgMHhDRCwKKysgIDB4QUEsIDB4MjUs IDB4RjQsIDB4QjIsIDB4RkMsIDB4RjAsIDB4NzUsIDB4RDksIDB4MkYsIDB4NzgsIDB4MjMsIDB4 N0YsCisrICAweDZGLCAweDAyLCAweEVGLCAweEMxLCAweEFGLCAweEE2LCAweDI4LCAweDE2LCAw eDMxLCAweERDLCAweDQyLCAweDZDLAorKyAgMHhCMiwgMHg0NCwgMHhFNSwgMHg0RCwgMHg2Niwg MHhBMiwgMHhFNiwgMHg3MSwgMHhGMywgMHhBQywgMHg0RiwgMHhGQiwKKysgIDB4OTEsIDB4Q0Es IDB4RjUsIDB4NzAsIDB4RUYsIDB4NkIsIDB4OUQsIDB4QTQsIDB4RUYsIDB4RDksIDB4M0QsIDB4 MkYsCisrICAweDNBLCAweEJFLCAweDg5LCAweDM4LCAweDU5LCAweDAxLCAweEJBLCAweERBLCAw eDMyLCAweEFELCAweDQyLCAweDg5LAorKyAgMHg5OCwgMHg4QiwgMHgzOSwgMHg0NCwgMHhGMCwg MHhGQywgMHgzOCwgMHhBQywgMHg4NywgMHgxRiwgMHhDQSwgMHg2RiwKKysgIDB4NDgsIDB4RjYs IDB4QUUsIDB4RDcsIDB4NDUsIDB4RUUsIDB4QUUsIDB4ODgsIDB4MEUsIDB4NjAsIDB4RjQsIDB4 NTUsCisrICAweDQ4LCAweDQ0LCAweEVFLCAweDFGLCAweDkwLCAweDE4LCAweDRCLCAweEYxCisr fTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEE1MTJbXSA9 IHsKKysgIDB4MDcsIDB4MUUsIDB4RDgsIDB4RDUsIDB4MDUsIDB4RTgsIDB4RTYsIDB4RTYsIDB4 NTcsIDB4QUUsIDB4NjMsIDB4OEMsCisrICAweEM2LCAweDgzLCAweEI3LCAweEEwLCAweDU5LCAw eEJCLCAweEYyLCAweEM2LCAweDhGLCAweDEyLCAweDUzLCAweDlBLAorKyAgMHg5QiwgMHg1NCwg MHg5RSwgMHhCMywgMHhDMSwgMHgxRCwgMHgyMywgMHg0RCwgMHg1MSwgMHhFRCwgMHg5RSwgMHhE RCwKKysgIDB4NEIsIDB4RjMsIDB4NDYsIDB4OUIsIDB4NkIsIDB4RjYsIDB4N0MsIDB4MjQsIDB4 NjAsIDB4NzksIDB4MjMsIDB4MzksCisrICAweDAxLCAweDFDLCAweDUxLCAweENCLCAweEQ4LCAw eEU5LCAweDlBLCAweDAxLCAweDY3LCAweDVGLCAweEZFLCAweEQ3LAorKyAgMHg3QywgMHhFMywg MHg3RiwgMHhFRCwgMHhEQiwgMHg4NywgMHhCQiwgMHhGMCwgMHgzRCwgMHg3OCwgMHg1NSwgMHg2 MSwKKysgIDB4NTcsIDB4RTMsIDB4MEYsIDB4RTMsIDB4RDIsIDB4OUQsIDB4MEMsIDB4MkEsIDB4 MjAsIDB4QjAsIDB4ODUsIDB4MTMsCisrICAweEM1LCAweDQ3LCAweDM0LCAweDBELCAweDMyLCAw eDE1LCAweEM4LCAweEFFLCAweDlBLCAweDZBLCAweDM5LCAweDYzLAorKyAgMHgyRCwgMHg2MCwg MHhGNSwgMHg0QywgMHhERiwgMHg4QSwgMHg0OCwgMHg0QiwgMHhCRiwgMHhGNCwgMHhBOCwgMHhG RSwKKysgIDB4NzYsIDB4RjIsIDB4MzIsIDB4MUIsIDB4OUMsIDB4N0MsIDB4Q0EsIDB4RkUsIDB4 N0YsIDB4ODAsIDB4QzIsIDB4ODgsCisrICAweDVDLCAweDk3LCAweDcwLCAweEI0LCAweDI2LCAw eEM5LCAweDE0LCAweDhCCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRf UlNBX1NIQTFbXSA9IHsKKysgIDB4NzEsIDB4RUUsIDB4MUEsIDB4QzAsIDB4RkUsIDB4MDEsIDB4 OTMsIDB4NTQsIDB4NzksIDB4NUMsIDB4RjIsIDB4NEMsCisrICAweDRBLCAweEZELCAweDFBLCAw eDA1LCAweDhGLCAweDY0LCAweEIxLCAweDZELCAweDYxLCAweDMzLCAweDhELCAweDlCLAorKyAg MHhFNywgMHhGRCwgMHg2MCwgMHhBMywgMHg4MywgMHhCNSwgMHhBMywgMHg1MSwgMHg1NSwgMHg3 NywgMHg5MCwgMHhDRiwKKysgIDB4REMsIDB4MjIsIDB4MzcsIDB4OEUsIDB4RDAsIDB4RTEsIDB4 QUUsIDB4MDksIDB4RTMsIDB4M0QsIDB4MUUsIDB4RjgsCisrICAweDgwLCAweEQxLCAweDhCLCAw eEMyLCAweEVDLCAweDBBLCAweEQ3LCAweDZCLCAweDg4LCAweDhCLCAweDhCLCAweEExLAorKyAg MHgyMCwgMHgyMiwgMHhCRSwgMHg1OSwgMHg1QiwgMHhFMCwgMHgyMywgMHgyNCwgMHhBMSwgMHg0 OSwgMHgzMCwgMHhCQSwKKysgIDB4QTksIDB4OUUsIDB4RTgsIDB4QjEsIDB4OEEsIDB4NjIsIDB4 MTYsIDB4QkYsIDB4NEUsIDB4Q0EsIDB4MkUsIDB4NEUsCisrICAweEJDLCAweDI5LCAweEE4LCAw eDY3LCAweDEzLCAweEI3LCAweDlGLCAweDFELCAweDA0LCAweDQ0LCAweEU1LCAweDVGLAorKyAg MHgzNSwgMHgwNywgMHgxMSwgMHhCQywgMHhFRCwgMHgxOSwgMHgzNywgMHgyMSwgMHhDRiwgMHgy MywgMHg0OCwgMHgxRiwKKysgIDB4NzIsIDB4MDUsIDB4REUsIDB4RTYsIDB4RTgsIDB4N0YsIDB4 MzMsIDB4OEEsIDB4NzYsIDB4NEIsIDB4MkYsIDB4OTUsCisrICAweERGLCAweEYxLCAweDVGLCAw eDg0LCAweDgwLCAweEQ5LCAweDQ2LCAweEI0CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBrYXRfUlNBX1NIQTIyNFtdID0geworKyAgMHg2MiwgMHhBQSwgMHg3OSwgMHhBOSwg MHgxOCwgMHgwRSwgMHg1RiwgMHg4QywgMHhCQiwgMHhCNywgMHgxNSwgMHhGOSwKKysgIDB4MjUs IDB4QkIsIDB4RkEsIDB4RDQsIDB4M0EsIDB4MzQsIDB4RUQsIDB4OUUsIDB4QTAsIDB4QTksIDB4 MTgsIDB4OEQsCisrICAweDVCLCAweDU1LCAweDlBLCAweDdFLCAweDFFLCAweDA4LCAweDA4LCAw eDYwLCAweEM1LCAweDFBLCAweEM1LCAweDg5LAorKyAgMHgwOCwgMHhFMiwgMHgxQiwgMHhCRCwg MHg2MiwgMHg1MCwgMHgxNywgMHg3NiwgMHgzMCwgMHgyQywgMHg5RSwgMHhDRCwKKysgIDB4QTQs IDB4MDIsIDB4QUQsIDB4QjEsIDB4NkQsIDB4NDQsIDB4NkQsIDB4RDUsIDB4QzYsIDB4NDUsIDB4 NDEsIDB4RTUsCisrICAweEVFLCAweDFGLCAweDhELCAweDdFLCAweDA4LCAweDE2LCAweEE2LCAw eEUxLCAweDVFLCAweDBCLCAweEE5LCAweENDLAorKyAgMHhEQiwgMHg1OSwgMHg1NSwgMHg4Nywg MHgwOSwgMHgyNSwgMHg3MCwgMHg4NiwgMHg4NCwgMHgwMiwgMHhDNiwgMHgzQiwKKysgIDB4MEIs IDB4NDQsIDB4NEMsIDB4NDYsIDB4OTUsIDB4RjQsIDB4RjgsIDB4NUEsIDB4OTEsIDB4MjgsIDB4 M0UsIDB4QjIsCisrICAweDU4LCAweDJFLCAweDA2LCAweDQ1LCAweDQ5LCAweEUwLCAweDkyLCAw eEUyLCAweEMwLCAweDY2LCAweEU2LCAweDM1LAorKyAgMHhEOSwgMHg3OSwgMHg3RiwgMHgxNywg MHg1RSwgMHgwMiwgMHg3MywgMHgwNCwgMHg3NywgMHg4MiwgMHhFNiwgMHhEQywKKysgIDB4NDAs IDB4MjEsIDB4ODksIDB4OEIsIDB4MzcsIDB4M0UsIDB4MUUsIDB4OEQKKyt9OworKworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMjU2W10gPSB7CisrICAweDBELCAweDU1 LCAweEUyLCAweEFBLCAweDgxLCAweERCLCAweDhFLCAweDgyLCAweDA1LCAweDE3LCAweEE1LCAw eDIzLAorKyAgMHhFNywgMHgzQiwgMHgxRCwgMHhBRiwgMHhGQiwgMHg4QywgMHhEMCwgMHg4MSwg MHgyMCwgMHg3QiwgMHhBQSwgMHgyMywKKysgIDB4OTIsIDB4ODcsIDB4OEMsIDB4RDEsIDB4NTMs IDB4ODUsIDB4MTYsIDB4REMsIDB4QkUsIDB4QUQsIDB4NkYsIDB4MzUsCisrICAweDk4LCAweDJE LCAweDY5LCAweDg0LCAweEJGLCAweEQ5LCAweDhBLCAweDAxLCAweDE3LCAweDU4LCAweEIyLCAw eDZFLAorKyAgMHgyQywgMHg0NCwgMHg5QiwgMHg5MCwgMHhGMSwgMHhGQiwgMHg1MSwgMHhFOCwg MHg2QSwgMHg5MCwgMHgyRCwgMHgxOCwKKysgIDB4MEUsIDB4QzAsIDB4OTAsIDB4MTAsIDB4MjQs IDB4QTksIDB4MUQsIDB4QjMsIDB4NTgsIDB4N0EsIDB4OTEsIDB4MzAsCisrICAweEJFLCAweDIy LCAweEM3LCAweEQzLCAweEVDLCAweEMzLCAweDA5LCAweDVELCAweEJGLCAweEUyLCAweDgwLCAw eDNBLAorKyAgMHg3QywgMHg4NSwgMHhCNCwgMHhCQywgMHhEMSwgMHhFOSwgMHhGMCwgMHg1Qywg MHhERSwgMHg4MSwgMHhBNiwgMHgzOCwKKysgIDB4QjgsIDB4NDIsIDB4QkIsIDB4ODYsIDB4QzUs IDB4OUQsIDB4Q0UsIDB4N0MsIDB4MkMsIDB4RUUsIDB4RDEsIDB4REEsCisrICAweDI3LCAweDQ4 LCAweDJCLCAweEY1LCAweEFCLCAweEI5LCAweEY3LCAweDgwLCAweEQxLCAweDkwLCAweDI3LCAw eDkwLAorKyAgMHhCRCwgMHg0NCwgMHg5NywgMHg2MCwgMHhDRCwgMHg1NywgMHhDMCwgMHg3QQor K307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEzODRbXSA9IHsK KysgIDB4MUQsIDB4RTMsIDB4NkEsIDB4REQsIDB4MjcsIDB4NEMsIDB4QzAsIDB4QTUsIDB4Mjcs IDB4RUYsIDB4RTYsIDB4MUYsCisrICAweEQyLCAweDkxLCAweDY4LCAweDU5LCAweDA0LCAweEFF LCAweEJELCAweDk5LCAweDYzLCAweDU2LCAweDQ3LCAweEM3LAorKyAgMHg2RiwgMHgyMiwgMHgx NiwgMHg0OCwgMHhEMCwgMHhGOSwgMHgxOCwgMHhBOSwgMHhDQSwgMHhGQSwgMHg1RCwgMHg1QywK KysgIDB4QTcsIDB4NjUsIDB4NTIsIDB4OEEsIDB4QzgsIDB4NDQsIDB4N0UsIDB4ODYsIDB4NUQs IDB4QTksIDB4QTYsIDB4NTUsCisrICAweDY1LCAweDNFLCAweEQ5LCAweDJELCAweDAyLCAweDM4 LCAweEE4LCAweDc5LCAweDI4LCAweDdGLCAweEI2LCAweENGLAorKyAgMHg4MiwgMHhERCwgMHg3 RSwgMHg1NSwgMHhFMSwgMHhCMSwgMHhCQywgMHhFMiwgMHgxOSwgMHgyQiwgMHgzMCwgMHhDMiwK KysgIDB4MUIsIDB4MkIsIDB4QjAsIDB4ODIsIDB4NDYsIDB4QUMsIDB4NEIsIDB4RDEsIDB4RTIs IDB4N0QsIDB4RUIsIDB4OEMsCisrICAweEZGLCAweDk1LCAweEU5LCAweDZBLCAweDFDLCAweDNE LCAweDRELCAweEJGLCAweDhGLCAweDhCLCAweDlDLCAweENELAorKyAgMHhFQSwgMHg4NSwgMHhF RSwgMHgwMCwgMHhEQywgMHgxQywgMHhBNywgMHhFQiwgMHhEMCwgMHg4RiwgMHg5OSwgMHhGMSwK KysgIDB4MTYsIDB4MjgsIDB4MjQsIDB4NjQsIDB4MDQsIDB4MzksIDB4MkQsIDB4NTgsIDB4MUUs IDB4MzcsIDB4REMsIDB4MDQsCisrICAweEJELCAweDMxLCAweEEyLCAweDJGLCAweEIzLCAweDM1 LCAweDU2LCAweEJGCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNB X1NIQTUxMltdID0geworKyAgMHg2OSwgMHg1MiwgMHgxQiwgMHg1MSwgMHg1RSwgMHgwNiwgMHhD QSwgMHg5QiwgMHgxNiwgMHg1MSwgMHg1RCwgMHhDRiwKKysgIDB4NDksIDB4MjUsIDB4NEEsIDB4 QTEsIDB4NkEsIDB4NzcsIDB4NEMsIDB4MzYsIDB4NDAsIDB4RjgsIDB4QjIsIDB4OUEsCisrICAw eDE1LCAweEVBLCAweDVDLCAweEU1LCAweEU2LCAweDgyLCAweEUwLCAweDg2LCAweDgyLCAweDZC LCAweDMyLCAweEYxLAorKyAgMHgwNCwgMHhDMSwgMHg1QSwgMHgxQSwgMHhFRCwgMHgxRSwgMHg5 QSwgMHhCNiwgMHg0QywgMHg1NCwgMHg5RiwgMHhEOCwKKysgIDB4OEQsIDB4Q0MsIDB4QUMsIDB4 OEEsIDB4QkIsIDB4OUMsIDB4ODIsIDB4M0YsIDB4QTYsIDB4NTMsIDB4NjIsIDB4QjUsCisrICAw eDgwLCAweEUyLCAweEJDLCAweERELCAweDY3LCAweDJCLCAweEQ5LCAweDNGLCAweEU0LCAweDc1 LCAweDkyLCAweDZCLAorKyAgMHhBRiwgMHg2MiwgMHg3QywgMHg1MiwgMHhGMCwgMHhFRSwgMHgz MywgMHhERiwgMHgxQiwgMHgxRCwgMHg0NywgMHhFNiwKKysgIDB4NTksIDB4NTYsIDB4QTUsIDB4 QjksIDB4NUMsIDB4RTYsIDB4NzcsIDB4NzgsIDB4MTYsIDB4NjMsIDB4ODQsIDB4MDUsCisrICAw eDZGLCAweDBFLCAweDJCLCAweDMxLCAweDlELCAweEY3LCAweDdGLCAweEIyLCAweDY0LCAweDcx LCAweEUwLCAweDJELAorKyAgMHgzRSwgMHg2MiwgMHhDRSwgMHhCNSwgMHgzRiwgMHg4OCwgMHhE RiwgMHgyRCwgMHhBQiwgMHg5OCwgMHg2NSwgMHg5MSwKKysgIDB4REYsIDB4NzAsIDB4MTQsIDB4 QTUsIDB4M0YsIDB4MzYsIDB4QUIsIDB4ODQKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGthdF9SU0FfWDkzMV9TSEExW10gPSB7CisrICAweDg2LCAweEI0LCAweDE4LCAweEJB LCAweEQxLCAweDgwLCAweEI2LCAweDdDLCAweDQyLCAweDQ1LCAweDRELCAweERGLAorKyAgMHhF OSwgMHgyRCwgMHhFMSwgMHg4MywgMHg1RiwgMHhCNSwgMHgyRiwgMHhDOSwgMHhDRCwgMHhDNCwg MHhCMiwgMHg3NSwKKysgIDB4ODAsIDB4QTQsIDB4RjEsIDB4NEEsIDB4RTcsIDB4ODMsIDB4MTIs IDB4MUUsIDB4MUUsIDB4MTQsIDB4QjgsIDB4QUMsCisrICAweDM1LCAweEUyLCAweEFBLCAweDBC LCAweDVDLCAweEY4LCAweDM4LCAweDRELCAweDA0LCAweEVFLCAweEE5LCAweDk3LAorKyAgMHg3 MCwgMHhGQiwgMHg1RSwgMHhFNywgMHhCNywgMHhFMywgMHg2MiwgMHgyMywgMHg0QiwgMHgzOCwg MHhCRSwgMHhENiwKKysgIDB4NTMsIDB4MTUsIDB4RjcsIDB4REYsIDB4ODcsIDB4QjQsIDB4MEUs IDB4Q0MsIDB4QjEsIDB4MUEsIDB4MTEsIDB4MTksCisrICAweEVFLCAweDUxLCAweENDLCAweDky LCAweERELCAweEJDLCAweDYzLCAweDI5LCAweDYzLCAweDBDLCAweDU5LCAweEQ3LAorKyAgMHg2 RiwgMHg0QywgMHgzQywgMHgzNywgMHg1QiwgMHgzNywgMHgwMywgMHg2MSwgMHg3RCwgMHgyNCwg MHgxQywgMHg5OSwKKysgIDB4NDgsIDB4QUYsIDB4ODIsIDB4RkUsIDB4MzIsIDB4NDEsIDB4OUIs IDB4QjIsIDB4REIsIDB4RUEsIDB4RUQsIDB4NzYsCisrICAweDhFLCAweDZFLCAweENBLCAweDdF LCAweDRFLCAweDE0LCAweEJBLCAweDMwLCAweDg0LCAweDFDLCAweEIzLCAweDY3LAorKyAgMHhB MywgMHgyOSwgMHg4MCwgMHg3MCwgMHg1NCwgMHg2OCwgMHg3RCwgMHg0OQorK307CisrCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTI1NltdID0geworKyAgMHg3 RSwgMHhBMiwgMHg3NywgMHhGRSwgMHhCOCwgMHg1NCwgMHg4QSwgMHhDNywgMHg3RiwgMHg2NCwg MHg1NCwgMHg4OSwKKysgIDB4RTUsIDB4NTIsIDB4MTUsIDB4OEUsIDB4NTIsIDB4OTYsIDB4NEUs IDB4QTYsIDB4NTgsIDB4OTIsIDB4MUMsIDB4REQsCisrICAweEVBLCAweEEyLCAweDJELCAweDVD LCAweEQxLCAweDYyLCAweDAwLCAweDQ5LCAweDA1LCAweDk1LCAweDczLCAweENGLAorKyAgMHgx NiwgMHg3NiwgMHg2OCwgMHhGNiwgMHhDNiwgMHg1RSwgMHg4MCwgMHhCOCwgMHhCOCwgMHg3Qiwg MHhDOCwgMHg5QiwKKysgIDB4QzYsIDB4NTMsIDB4ODgsIDB4MjYsIDB4MjAsIDB4ODgsIDB4NzMs IDB4QjYsIDB4MTMsIDB4QjgsIDB4RjAsIDB4NEIsCisrICAweDAwLCAweDg1LCAweEYzLCAweERE LCAweDA3LCAweDUwLCAweEVCLCAweDIwLCAweEM0LCAweDM4LCAweDBFLCAweDk4LAorKyAgMHhB RCwgMHg0RSwgMHg0OSwgMHgyQywgMHhENywgMHg2NSwgMHhBNSwgMHgxOSwgMHgwRSwgMHg1OSwg MHgwMSwgMHhFQywKKysgIDB4N0UsIDB4NzUsIDB4ODksIDB4NjksIDB4MkUsIDB4NjMsIDB4NzYs IDB4ODUsIDB4NDYsIDB4OEQsIDB4QTAsIDB4OEMsCisrICAweDMzLCAweDFELCAweDgyLCAweDhD LCAweDAzLCAweEVBLCAweDY5LCAweDg4LCAweDM1LCAweEExLCAweDQyLCAweEJELAorKyAgMHgy MSwgMHhFRCwgMHg4RCwgMHhCQywgMHhCQywgMHhEQiwgMHgzMCwgMHhGRiwgMHg4NiwgMHhGMCwg MHg1QiwgMHhEQywKKysgIDB4RTMsIDB4RTIsIDB4RTgsIDB4MEEsIDB4MEEsIDB4MjksIDB4OTQs IDB4ODAKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9T SEEzODRbXSA9IHsKKysgIDB4NUMsIDB4N0QsIDB4OTYsIDB4MzUsIDB4RUMsIDB4N0UsIDB4MTEs IDB4MzgsIDB4QkIsIDB4N0IsIDB4RUMsIDB4N0IsCisrICAweEYyLCAweDgyLCAweDhFLCAweDk5 LCAweEJELCAweEVGLCAweEQ4LCAweEFFLCAweEQ3LCAweDM5LCAweDM3LCAweENCLAorKyAgMHhF NiwgMHg0RiwgMHg1RSwgMHgwQSwgMHgxMywgMHhFNCwgMHgyRSwgMHg0MCwgMHhCOSwgMHhCRSwg MHgyRSwgMHhFMywKKysgIDB4RUYsIDB4NzgsIDB4ODMsIDB4MTgsIDB4NDQsIDB4MzUsIDB4OUMs IDB4OEUsIDB4RDcsIDB4NEEsIDB4NjMsIDB4RjYsCisrICAweDU3LCAweEMyLCAweEIwLCAweDA4 LCAweDUxLCAweDczLCAweENGLCAweENBLCAweDk5LCAweDY2LCAweEVFLCAweDMxLAorKyAgMHhE OCwgMHg2OSwgMHhFOSwgMHhBQiwgMHgxMywgMHgyNywgMHg3QiwgMHg0MSwgMHgxRSwgMHg2RCwg MHg4RCwgMHhGMSwKKysgIDB4M0UsIDB4OUMsIDB4MzUsIDB4OTUsIDB4NTgsIDB4REQsIDB4MkIs IDB4RDUsIDB4QTAsIDB4NjAsIDB4NDEsIDB4NzksCisrICAweDI0LCAweDIyLCAweEU0LCAweEI3 LCAweEJGLCAweDQ3LCAweDUzLCAweEY2LCAweDM0LCAweEQ1LCAweDdDLCAweEZGLAorKyAgMHgw RSwgMHgwOSwgMHhFRSwgMHgyRSwgMHhFMiwgMHgzNywgMHhCOSwgMHhERSwgMHhDNSwgMHgxMiwg MHg0NCwgMHgzNSwKKysgIDB4RUYsIDB4MDEsIDB4RTYsIDB4NUUsIDB4MzksIDB4MzEsIDB4MkQs IDB4NzEsIDB4QTUsIDB4REMsIDB4QzYsIDB4NkQsCisrICAweEUyLCAweENELCAweDg1LCAweERC LCAweDczLCAweDgyLCAweDY1LCAweDI4CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBrYXRfUlNBX1g5MzFfU0hBNTEyW10gPSB7CisrICAweEE2LCAweDY1LCAweEEyLCAweDc3 LCAweDRGLCAweEIzLCAweDg2LCAweENCLCAweDY0LCAweDNBLCAweEMxLCAweDYzLAorKyAgMHhG QywgMHhBMSwgMHhBQSwgMHhDQiwgMHg5QiwgMHg3OSwgMHhERCwgMHg0QiwgMHhFMSwgMHhEOSwg MHhEQSwgMHhBQywKKysgIDB4RTcsIDB4NDcsIDB4MDksIDB4QjIsIDB4MTEsIDB4NEIsIDB4OEEs IDB4QUEsIDB4MDUsIDB4OUUsIDB4NzcsIDB4RDcsCisrICAweDNBLCAweEJELCAweDVFLCAweDUz LCAweDA5LCAweDRBLCAweEU2LCAweDBGLCAweDVFLCAweEY5LCAweDE0LCAweDI4LAorKyAgMHhB MCwgMHg5OSwgMHg3NCwgMHg2NCwgMHg3MCwgMHg0RSwgMHhGMiwgMHhFMywgMHhGQSwgMHhDNywg MHhGOCwgMHhDNSwKKysgIDB4NkUsIDB4MkIsIDB4NzksIDB4OTYsIDB4MEQsIDB4MEMsIDB4Qzgs IDB4MTAsIDB4MzQsIDB4NTMsIDB4RDIsIDB4QUYsCisrICAweDE3LCAweDBFLCAweEUwLCAweEJG LCAweDc5LCAweEY2LCAweDA0LCAweDcyLCAweDEwLCAweEUwLCAweEY2LCAweEQwLAorKyAgMHhD RSwgMHg4QSwgMHg2RiwgMHhBMSwgMHg5NSwgMHg4OSwgMHhCRiwgMHg1OCwgMHg4RiwgMHg0Niwg MHg1RiwgMHgwOSwKKysgIDB4OUYsIDB4MDksIDB4Q0EsIDB4ODQsIDB4MTUsIDB4ODUsIDB4RTAs IDB4RUQsIDB4MDQsIDB4MkQsIDB4RkIsIDB4N0MsCisrICAweDM2LCAweDM1LCAweDIxLCAweDMx LCAweEMzLCAweEZELCAweDkyLCAweDQyLCAweDExLCAweDMwLCAweDcxLCAweDFCLAorKyAgMHg2 MCwgMHg4MywgMHgxOCwgMHg4OCwgMHhBMywgMHhGNSwgMHg1OSwgMHhDMworK307CisrCisrCisr aW50IEZJUFNfc2VsZnRlc3RfcnNhKCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJUlNBICprZXk7 CisrCUVWUF9QS0VZICpwayA9IE5VTEw7CisrCisrCWlmICgoa2V5PVJTQV9uZXcoKSkgPT0gTlVM TCkKKysJCWdvdG8gZXJyOworKwlzZXRyc2FrZXkoa2V5KTsKKysJaWYgKChwaz1FVlBfUEtFWV9u ZXcoKSkgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKworKwlFVlBfUEtFWV9hc3NpZ25fUlNBKHBr LCBrZXkpOworKworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywg c2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9TSEExLCBzaXplb2Yoa2F0X1JTQV9T SEExKSwKKysJCQkJRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJ IlJTQSBTSEExIFBLQ1MjMSIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25h dHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNB X1NIQTIyNCwgc2l6ZW9mKGthdF9SU0FfU0hBMjI0KSwKKysJCQkJRVZQX3NoYTIyNCgpLCBFVlBf TURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAorKwkJCQkiUlNBIFNIQTIyNCBQS0NTIzEiKSkKKysJCWdv dG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6 ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9TSEEyNTYsIHNpemVvZihrYXRfUlNBX1NI QTI1NiksCisrCQkJCUVWUF9zaGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJ CQkJIlJTQSBTSEEyNTYgUEtDUyMxIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlf c2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWth dF9SU0FfU0hBMzg0LCBzaXplb2Yoa2F0X1JTQV9TSEEzODQpLAorKwkJCQlFVlBfc2hhMzg0KCks IEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCisrCQkJCSJSU0EgU0hBMzg0IFBLQ1MjMSIpKQor KwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJz LCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1NIQTUxMiwgc2l6ZW9mKGthdF9S U0FfU0hBNTEyKSwKKysJCQkJRVZQX3NoYTUxMigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1Mx LAorKwkJCQkiUlNBIFNIQTUxMiBQS0NTIzEiKSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIWZp cHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwK KysJCQkJa2F0X1JTQV9QU1NfU0hBMSwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTEpLAorKwkJCQlF VlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKKysJCQkJIlJTQSBTSEExIFBTUyIp KQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRf dGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1BTU19TSEEyMjQsIHNpemVv ZihrYXRfUlNBX1BTU19TSEEyMjQpLAorKwkJCQlFVlBfc2hhMjI0KCksIEVWUF9NRF9DVFhfRkxB R19QQURfUFNTLAorKwkJCQkiUlNBIFNIQTIyNCBQU1MiKSkKKysJCWdvdG8gZXJyOworKwlpZiAo IWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0g MSwKKysJCQkJa2F0X1JTQV9QU1NfU0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMjU2KSwK KysJCQkJRVZQX3NoYTI1NigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKKysJCQkJIlJTQSBT SEEyNTYgUFNTIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfUFNTX1NI QTM4NCwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTM4NCksCisrCQkJCUVWUF9zaGEzODQoKSwgRVZQ X01EX0NUWF9GTEFHX1BBRF9QU1MsCisrCQkJCSJSU0EgU0hBMzg0IFBTUyIpKQorKwkJZ290byBl cnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yo a2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1BTU19TSEE1MTIsIHNpemVvZihrYXRfUlNBX1BT U19TSEE1MTIpLAorKwkJCQlFVlBfc2hhNTEyKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAor KwkJCQkiUlNBIFNIQTUxMiBQU1MiKSkKKysJCWdvdG8gZXJyOworKworKworKwlpZiAoIWZpcHNf cGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJ CQlrYXRfUlNBX1g5MzFfU0hBMSwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEExKSwKKysJCQlFVlBf c2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsCisrCQkJIlJTQSBTSEExIFg5MzEiKSkK KysJCWdvdG8gZXJyOworKwkvKiBOQjogU0hBMjI0IG5vdCBzdXBwb3J0ZWQgaW4gWDkuMzEgKi8K KysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRf dGJzKSAtIDEsCisrCQkJa2F0X1JTQV9YOTMxX1NIQTI1Niwgc2l6ZW9mKGthdF9SU0FfWDkzMV9T SEEyNTYpLAorKwkJCUVWUF9zaGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAorKwkJ CSJSU0EgU0hBMjU2IFg5MzEiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQlrYXRfUlNB X1g5MzFfU0hBMzg0LCBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTM4NCksCisrCQkJRVZQX3NoYTM4 NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsCisrCQkJIlJTQSBTSEEzODQgWDkzMSIpKQor KwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJz LCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCWthdF9SU0FfWDkzMV9TSEE1MTIsIHNpemVvZihr YXRfUlNBX1g5MzFfU0hBNTEyKSwKKysJCQlFVlBfc2hhNTEyKCksIEVWUF9NRF9DVFhfRkxBR19Q QURfWDkzMSwKKysJCQkiUlNBIFNIQTUxMiBYOTMxIikpCisrCQlnb3RvIGVycjsKKysKKysKKysJ cmV0ID0gMTsKKysKKysJZXJyOgorKwlpZiAocGspCisrCQlFVlBfUEtFWV9mcmVlKHBrKTsKKysJ ZWxzZSBpZiAoa2V5KQorKwkJUlNBX2ZyZWUoa2V5KTsKKysJcmV0dXJuIHJldDsKKysJfQorKwor KyNlbmRpZiAvKiBkZWYgT1BFTlNTTF9GSVBTICovCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9j cnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jLmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2Zp cHMvZmlwc19yc2FfeDkzMWcuYworLS0tIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHNf cnNhX3g5MzFnLmMuZmlwcwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU2NjkyMjYzMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMJMjAxNS0wMS0wOSAw OTo1MTo1MS41NjY5MjI2MzAgKzAxMDAKK0BAIC0wLDAgKzEsMjgyIEBACisrLyogY3J5cHRvL3Jz YS9yc2FfZ2VuLmMgKi8KKysvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChl 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 dWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8dGltZS5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KKysKKytleHRlcm4gaW50IGZpcHNfY2hlY2tfcnNhKFJTQSAqcnNhKTsK KysjZW5kaWYKKysKKysvKiBYOS4zMSBSU0Ega2V5IGRlcml2YXRpb24gYW5kIGdlbmVyYXRpb24g Ki8KKysKKytpbnQgUlNBX1g5MzFfZGVyaXZlX2V4KFJTQSAqcnNhLCBCSUdOVU0gKnAxLCBCSUdO VU0gKnAyLCBCSUdOVU0gKnExLCBCSUdOVU0gKnEyLAorKwkJCWNvbnN0IEJJR05VTSAqWHAxLCBj b25zdCBCSUdOVU0gKlhwMiwgY29uc3QgQklHTlVNICpYcCwKKysJCQljb25zdCBCSUdOVU0gKlhx MSwgY29uc3QgQklHTlVNICpYcTIsIGNvbnN0IEJJR05VTSAqWHEsCisrCQkJY29uc3QgQklHTlVN ICplLCBCTl9HRU5DQiAqY2IpCisrCXsKKysJQklHTlVNICpyMD1OVUxMLCpyMT1OVUxMLCpyMj1O VUxMLCpyMz1OVUxMOworKwlCTl9DVFggKmN0eD1OVUxMLCpjdHgyPU5VTEw7CisrCisrCWlmICgh cnNhKSAKKysJCWdvdG8gZXJyOworKworKwljdHggPSBCTl9DVFhfbmV3KCk7CisrCWlmICghY3R4 KSAKKysJCWdvdG8gZXJyOworKwlCTl9DVFhfc3RhcnQoY3R4KTsKKysKKysJcjAgPSBCTl9DVFhf Z2V0KGN0eCk7CisrCXIxID0gQk5fQ1RYX2dldChjdHgpOworKwlyMiA9IEJOX0NUWF9nZXQoY3R4 KTsKKysJcjMgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCisrCWlmIChyMyA9PSBOVUxMKQorKwkJZ290 byBlcnI7CisrCWlmICghcnNhLT5lKQorKwkJeworKwkJcnNhLT5lID0gQk5fZHVwKGUpOworKwkJ aWYgKCFyc2EtPmUpCisrCQkJZ290byBlcnI7CisrCQl9CisrCWVsc2UKKysJCWUgPSByc2EtPmU7 CisrCisrCS8qIElmIG5vdCBhbGwgcGFyYW1ldGVycyBwcmVzZW50IG9ubHkgY2FsY3VsYXRlIHdo YXQgd2UgY2FuLgorKwkgKiBUaGlzIGFsbG93cyB0ZXN0IHByb2dyYW1zIHRvIG91dHB1dCBzZWxl Y3RpdmUgcGFyYW1ldGVycy4KKysJICovCisrCisrCWlmIChYcCAmJiAhcnNhLT5wKQorKwkJewor KwkJcnNhLT5wID0gQk5fbmV3KCk7CisrCQlpZiAoIXJzYS0+cCkKKysJCQlnb3RvIGVycjsKKysK KysJCWlmICghQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgocnNhLT5wLCBwMSwgcDIsCisrCQkJCQlY cCwgWHAxLCBYcDIsIGUsIGN0eCwgY2IpKQorKwkJCWdvdG8gZXJyOworKwkJfQorKworKwlpZiAo WHEgJiYgIXJzYS0+cSkKKysJCXsKKysJCXJzYS0+cSA9IEJOX25ldygpOworKwkJaWYgKCFyc2Et PnEpCisrCQkJZ290byBlcnI7CisrCQlpZiAoIUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KHJzYS0+ cSwgcTEsIHEyLAorKwkJCQkJWHEsIFhxMSwgWHEyLCBlLCBjdHgsIGNiKSkKKysJCQlnb3RvIGVy cjsKKysJCX0KKysKKysJaWYgKCFyc2EtPnAgfHwgIXJzYS0+cSkKKysJCXsKKysJCUJOX0NUWF9l bmQoY3R4KTsKKysJCUJOX0NUWF9mcmVlKGN0eCk7CisrCQlyZXR1cm4gMjsKKysJCX0KKysKKysJ LyogU2luY2UgYm90aCBwcmltZXMgYXJlIHNldCB3ZSBjYW4gbm93IGNhbGN1bGF0ZSBhbGwgcmVt YWluaW5nIAorKwkgKiBjb21wb25lbnRzLgorKwkgKi8KKysKKysJLyogY2FsY3VsYXRlIG4gKi8K KysJcnNhLT5uPUJOX25ldygpOworKwlpZiAocnNhLT5uID09IE5VTEwpCisrCQlnb3RvIGVycjsK KysJaWYgKCFCTl9tdWwocnNhLT5uLHJzYS0+cCxyc2EtPnEsY3R4KSkKKysJCWdvdG8gZXJyOwor KworKwkvKiBjYWxjdWxhdGUgZCAqLworKwlpZiAoIUJOX3N1YihyMSxyc2EtPnAsQk5fdmFsdWVf b25lKCkpKQorKwkJZ290byBlcnI7CS8qIHAtMSAqLworKwlpZiAoIUJOX3N1YihyMixyc2EtPnEs Qk5fdmFsdWVfb25lKCkpKQorKwkJZ290byBlcnI7CS8qIHEtMSAqLworKwlpZiAoIUJOX211bChy MCxyMSxyMixjdHgpKQorKwkJZ290byBlcnI7CS8qIChwLTEpKHEtMSkgKi8KKysKKysJaWYgKCFC Tl9nY2QocjMsIHIxLCByMiwgY3R4KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIUJOX2Rpdihy MCwgTlVMTCwgcjAsIHIzLCBjdHgpKQorKwkJZ290byBlcnI7CS8qIExDTSgocC0xKShxLTEpKSAq LworKworKwljdHgyID0gQk5fQ1RYX25ldygpOworKwlpZiAoIWN0eDIpCisrCQlnb3RvIGVycjsK KysKKysJcnNhLT5kPUJOX21vZF9pbnZlcnNlKE5VTEwscnNhLT5lLHIwLGN0eDIpOwkvKiBkICov CisrCWlmIChyc2EtPmQgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKworKwkvKiBjYWxjdWxhdGUg ZCBtb2QgKHAtMSkgKi8KKysJcnNhLT5kbXAxPUJOX25ldygpOworKwlpZiAocnNhLT5kbXAxID09 IE5VTEwpCisrCQlnb3RvIGVycjsKKysJaWYgKCFCTl9tb2QocnNhLT5kbXAxLHJzYS0+ZCxyMSxj dHgpKQorKwkJZ290byBlcnI7CisrCisrCS8qIGNhbGN1bGF0ZSBkIG1vZCAocS0xKSAqLworKwly c2EtPmRtcTE9Qk5fbmV3KCk7CisrCWlmIChyc2EtPmRtcTEgPT0gTlVMTCkKKysJCWdvdG8gZXJy OworKwlpZiAoIUJOX21vZChyc2EtPmRtcTEscnNhLT5kLHIyLGN0eCkpCisrCQlnb3RvIGVycjsK KysKKysJLyogY2FsY3VsYXRlIGludmVyc2Ugb2YgcSBtb2QgcCAqLworKwlyc2EtPmlxbXA9Qk5f bW9kX2ludmVyc2UoTlVMTCxyc2EtPnEscnNhLT5wLGN0eDIpOworKworKwllcnI6CisrCWlmIChj dHgpCisrCQl7CisrCQlCTl9DVFhfZW5kKGN0eCk7CisrCQlCTl9DVFhfZnJlZShjdHgpOworKwkJ fQorKwlpZiAoY3R4MikKKysJCUJOX0NUWF9mcmVlKGN0eDIpOworKwkvKiBJZiB0aGlzIGlzIHNl dCBhbGwgY2FsbHMgc3VjY2Vzc2Z1bCAqLworKwlpZiAocnNhICYmIHJzYS0+aXFtcCAhPSBOVUxM KQorKwkJcmV0dXJuIDE7CisrCisrCXJldHVybiAwOworKworKwl9CisrCisraW50IFJTQV9YOTMx X2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIGNvbnN0IEJJR05VTSAqZSwgQk5f R0VOQ0IgKmNiKQorKwl7CisrCWludCBvayA9IDA7CisrCUJJR05VTSAqWHAgPSBOVUxMLCAqWHEg PSBOVUxMOworKwlCTl9DVFggKmN0eCA9IE5VTEw7CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUwor KwlpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxM T1cpICYmIAorKwkJKGJpdHMgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQor KwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYLEZJ UFNfUl9LRVlfVE9PX1NIT1JUKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKworKwlpZiAo Yml0cyAmIDB4ZmYpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5F UkFURV9LRVlfRVgsRklQU19SX0lOVkFMSURfS0VZX0xFTkdUSCk7CisrCSAgICByZXR1cm4gMDsK KysJICAgIH0KKysKKysJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJICAgIHsKKysJICAg IEZJUFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBTX1JfRklQU19TRUxG VEVTVF9GQUlMRUQpOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9CisrI2VuZGlmCisrCisrCWN0 eCA9IEJOX0NUWF9uZXcoKTsKKysJaWYgKCFjdHgpCisrCQlnb3RvIGVycm9yOworKworKwlCTl9D VFhfc3RhcnQoY3R4KTsKKysJWHAgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCVhxID0gQk5fQ1RYX2dl dChjdHgpOworKwlpZiAoIUJOX1g5MzFfZ2VuZXJhdGVfWHBxKFhwLCBYcSwgYml0cywgY3R4KSkK KysJCWdvdG8gZXJyb3I7CisrCisrCXJzYS0+cCA9IEJOX25ldygpOworKwlyc2EtPnEgPSBCTl9u ZXcoKTsKKysJaWYgKCFyc2EtPnAgfHwgIXJzYS0+cSkKKysJCWdvdG8gZXJyb3I7CisrCisrCS8q IEdlbmVyYXRlIHR3byBwcmltZXMgZnJvbSBYcCwgWHEgKi8KKysKKysJaWYgKCFCTl9YOTMxX2dl bmVyYXRlX3ByaW1lX2V4KHJzYS0+cCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgWHAsCisrCQkJ CQllLCBjdHgsIGNiKSkKKysJCWdvdG8gZXJyb3I7CisrCisrCWlmICghQk5fWDkzMV9nZW5lcmF0 ZV9wcmltZV9leChyc2EtPnEsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIFhxLAorKwkJCQkJZSwg Y3R4LCBjYikpCisrCQlnb3RvIGVycm9yOworKworKwkvKiBTaW5jZSByc2EtPnAgYW5kIHJzYS0+ cSBhcmUgdmFsaWQgdGhpcyBjYWxsIHdpbGwganVzdCBkZXJpdmUKKysJICogcmVtYWluaW5nIFJT QSBjb21wb25lbnRzLgorKwkgKi8KKysKKysJaWYgKCFSU0FfWDkzMV9kZXJpdmVfZXgocnNhLCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorKwkJCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM LCBOVUxMLCBlLCBjYikpCisrCQlnb3RvIGVycm9yOworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysJaWYoIWZpcHNfY2hlY2tfcnNhKHJzYSkpCisrCSAgICBnb3RvIGVycm9yOworKyNlbmRpZgor KworKwlvayA9IDE7CisrCisrCWVycm9yOgorKwlpZiAoY3R4KQorKwkJeworKwkJQk5fQ1RYX2Vu ZChjdHgpOworKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKKysJCX0KKysKKysJaWYgKG9rKQorKwkJcmV0 dXJuIDE7CisrCisrCXJldHVybiAwOworKworKwl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9j cnlwdG8vZmlwcy9maXBzX3NoYV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5cHRv L2ZpcHMvZmlwc19zaGFfc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBz L2ZpcHNfc2hhX3NlbGZ0ZXN0LmMuZmlwcwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU2NjkyMjYzMCAr MDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMJ MjAxNS0wMS0wOSAwOTo1MTo1MS41NjY5MjI2MzAgKzAxMDAKK0BAIC0wLDAgKzEsMTQwIEBACisr LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVj dC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisr ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0 aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZl YXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgor KyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIg bXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAg IG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5v ciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0 ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2 LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUg Zm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9K RUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAq IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQ Uk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+CisrI2VuZGlmCisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvc2hhLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworK3N0YXRpYyBjb25z dCBjaGFyIHRlc3RbXVs2MF09CisrICAgIHsKKysgICAgIiIsCisrICAgICJhYmMiLAorKyAgICAi YWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEi CisrICAgIH07CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmV0W11bU0hBX0RJR0VT VF9MRU5HVEhdPQorKyAgICB7CisrICAgIHsgMHhkYSwweDM5LDB4YTMsMHhlZSwweDVlLDB4NmIs MHg0YiwweDBkLDB4MzIsMHg1NSwKKysgICAgICAweGJmLDB4ZWYsMHg5NSwweDYwLDB4MTgsMHg5 MCwweGFmLDB4ZDgsMHgwNywweDA5IH0sCisrICAgIHsgMHhhOSwweDk5LDB4M2UsMHgzNiwweDQ3 LDB4MDYsMHg4MSwweDZhLDB4YmEsMHgzZSwKKysgICAgICAweDI1LDB4NzEsMHg3OCwweDUwLDB4 YzIsMHg2YywweDljLDB4ZDAsMHhkOCwweDlkIH0sCisrICAgIHsgMHg4NCwweDk4LDB4M2UsMHg0 NCwweDFjLDB4M2IsMHhkMiwweDZlLDB4YmEsMHhhZSwKKysgICAgICAweDRhLDB4YTEsMHhmOSww eDUxLDB4MjksMHhlNSwweGU1LDB4NDYsMHg3MCwweGYxIH0sCisrICAgIH07CisrCisrc3RhdGlj IGludCBjb3JydXB0X3NoYTsKKysKKyt2b2lkIEZJUFNfY29ycnVwdF9zaGExKCkKKysgICAgewor KyAgICBjb3JydXB0X3NoYSA9IDE7CisrICAgIH0KKysKKytpbnQgRklQU19zZWxmdGVzdF9zaGEx KCkKKysgICAgeworKyAgICBpbnQgbjsKKysKKysgICAgZm9yKG49MCA7IG48c2l6ZW9mKHRlc3Qp L3NpemVvZih0ZXN0WzBdKSA7ICsrbikKKysJeworKwl1bnNpZ25lZCBjaGFyIG1kW1NIQV9ESUdF U1RfTEVOR1RIXTsKKysKKysJRVZQX0RpZ2VzdCh0ZXN0W25dLHN0cmxlbih0ZXN0W25dKStjb3Jy dXB0X3NoYSxtZCwgTlVMTCwgRVZQX3NoYTEoKSwgTlVMTCk7CisrCWlmKG1lbWNtcChtZCxyZXRb bl0sc2l6ZW9mIG1kKSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRF U1RfU0hBMSxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAgIHJldHVybiAwOworKwkgICAg fQorKwl9CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgbXNnX3NoYTI1NltdID0geyAweGZhLCAweDQ4LCAweDU5LCAweDJhLCAweGUxLCAweGFl LCAweDFmLCAweDMwLAorKwkJCQkJICAgIDB4ZmMgfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBkaWdfc2hhMjU2W10gPSB7IDB4ZjcsIDB4MjYsIDB4ZDgsIDB4OTgsIDB4NDcsIDB4OTEs IDB4NjgsIDB4NWIsCisrCQkJCQkgICAgMHg5ZSwgMHgzOSwgMHhiMiwgMHg1OCwgMHhiYiwgMHg3 NSwgMHhiZiwgMHgwMSwKKysJCQkJCSAgICAweDE3LCAweDBjLCAweDg0LCAweDAwLCAweDAxLCAw eDdhLCAweDk0LCAweDgzLAorKwkJCQkJICAgIDB4ZjMsIDB4MGIsIDB4MTUsIDB4ODQsIDB4NGIs IDB4NjksIDB4ODgsIDB4OGEgfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtc2df c2hhNTEyW10gPSB7IDB4MzcsIDB4ZDEsIDB4MzUsIDB4OWQsIDB4MTgsIDB4NDEsIDB4ZTksIDB4 YjcsCisrCQkJCQkgICAgMHg2ZCwgMHg5YSwgMHgxMywgMHhkYSwgMHg1ZiwgMHhmMywgMHhiZCB9 OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRpZ19zaGE1MTJbXSA9IHsgMHgxMSwgMHgx MywgMHhjNCwgMHgxOSwgMHhlZCwgMHgyYiwgMHgxZCwgMHgxNiwKKysJCQkJCSAgICAweDExLCAw eGViLCAweDliLCAweGJlLCAweGYwLCAweDdmLCAweGNmLCAweDQ0LAorKwkJCQkJICAgIDB4OGIs IDB4ZDcsIDB4NTcsIDB4YmQsIDB4OGQsIDB4YTksIDB4MjUsIDB4YjAsCisrCQkJCQkgICAgMHg0 NywgMHgyNSwgMHhkNiwgMHg2YywgMHg5YSwgMHg1NCwgMHg3ZiwgMHg4ZiwKKysJCQkJCSAgICAw eDBiLCAweDUzLCAweDFhLCAweDEwLCAweDY4LCAweDMyLCAweDAzLCAweDM4LAorKwkJCQkJICAg IDB4ODIsIDB4YzQsIDB4ODcsIDB4YzQsIDB4ZWEsIDB4MGUsIDB4ZDEsIDB4MDQsCisrCQkJCQkg ICAgMHhhOSwgMHg5OCwgMHhjMSwgMHgwNSwgMHhhMywgMHhmMywgMHhmOCwgMHhiMSwKKysJCQkJ CSAgICAweGFmLCAweGJjLCAweGQ5LCAweDc4LCAweDdlLCAweGVlLCAweDNkLCAweDQzIH07Cisr CisraW50IEZJUFNfc2VsZnRlc3Rfc2hhMih2b2lkKQorKwl7CisrCXVuc2lnbmVkIGNoYXIgbWRb U0hBNTEyX0RJR0VTVF9MRU5HVEhdOworKworKwlFVlBfRGlnZXN0KG1zZ19zaGEyNTYsIHNpemVv Zihtc2dfc2hhMjU2KSwgbWQsIE5VTEwsIEVWUF9zaGEyNTYoKSwgTlVMTCk7CisrCWlmKG1lbWNt cChkaWdfc2hhMjU2LCBtZCwgc2l6ZW9mKGRpZ19zaGEyNTYpKSkKKysJCXsKKysJCUZJUFNlcnIo RklQU19GX0ZJUFNfTU9ERV9TRVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJu IDA7CisrCQl9CisrCisrCUVWUF9EaWdlc3QobXNnX3NoYTUxMiwgc2l6ZW9mKG1zZ19zaGE1MTIp LCBtZCwgTlVMTCwgRVZQX3NoYTUxMigpLCBOVUxMKTsKKysJaWYobWVtY21wKGRpZ19zaGE1MTIs IG1kLCBzaXplb2YoZGlnX3NoYTUxMikpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19N T0RFX1NFVCwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysK KysJcmV0dXJuIDE7CisrCX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2Ny eXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9obWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4xay9jcnlw dG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfaG1hYy5jCistLS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRv L2ZpcHMvZmlwc19zdGFuZGFsb25lX2htYWMuYy5maXBzCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTY3 OTIyNjUzICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFs b25lX2htYWMuYwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU2NzkyMjY1MyArMDEwMAorQEAgLTAsMCAr MSwyMzYgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3Bl blNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAg ICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRp c3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9y Zy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNT TCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3Rl IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250 YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wi CisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQg cHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4K KysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3Qg cmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9w ZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBP cGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICog TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK KysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9T U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8u aD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKworKyNpZm5kZWYgRklQU0NBTklTVEVSX08KKytpbnQg RklQU19zZWxmdGVzdF9mYWlsZWQoKSB7IHJldHVybiAwOyB9Cisrdm9pZCBGSVBTX3NlbGZ0ZXN0 X2NoZWNrKCkge30KKysjZW5kaWYKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IGJuX211 bF9tb250X2ZwdTY0KEJOX1VMT05HICpycCwgY29uc3QgQk5fVUxPTkcgKmFwLCBjb25zdCBCTl9V TE9ORyAqYnAsIGNvbnN0IEJOX1VMT05HICpucCwgY29uc3QgQk5fVUxPTkcgKm4wLCBpbnQgbnVt KSB7IHJldHVybiAwOyB9OworK2ludCBibl9tdWxfbW9udF9pbnQoQk5fVUxPTkcgKnJwLCBjb25z dCBCTl9VTE9ORyAqYXAsIGNvbnN0IEJOX1VMT05HICpicCwgY29uc3QgQk5fVUxPTkcgKm5wLCBj b25zdCBCTl9VTE9ORyAqbjAsIGludCBudW0pIHsgcmV0dXJuIDA7IH07CisrCisrI2lmCWRlZmlu ZWQoX19pMzg2KSAgIHx8IGRlZmluZWQoX19pMzg2X18pICAgfHwgZGVmaW5lZChfTV9JWDg2KSB8 fCBcCisrCWRlZmluZWQoX19JTlRFTF9fKSB8fCBcCisrCWRlZmluZWQoX194ODZfNjQpIHx8IGRl ZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfTV9BTUQ2NCkgfHwgZGVmaW5lZChfTV9YNjQp CisrCisrdW5zaWduZWQgaW50ICBPUEVOU1NMX2lhMzJjYXBfUFsyXTsKKyt1bnNpZ25lZCBsb25n ICpPUEVOU1NMX2lhMzJjYXBfbG9jKHZvaWQpCisreyAgIGlmIChzaXplb2YobG9uZyk9PTQpCisr CS8qCisrCSAqIElmIDMyLWJpdCBhcHBsaWNhdGlvbiBwdWxscyBhZGRyZXNzIG9mIE9QRU5TU0xf aWEzMmNhcF9QWzBdCisrCSAqIGNsZWFyIHNlY29uZCBlbGVtZW50IHRvIG1haW50YWluIHRoZSBp bGx1c2lvbiB0aGF0IHZlY3RvcgorKwkgKiBpcyAzMi1iaXQuCisrCSAqLworKwlPUEVOU1NMX2lh MzJjYXBfUFsxXT0wOworKyAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcgKilPUEVOU1NMX2lhMzJj YXBfUDsKKyt9CisrCisrI2lmIGRlZmluZWQoT1BFTlNTTF9DUFVJRF9PQkopICYmICFkZWZpbmVk KE9QRU5TU0xfTk9fQVNNKSAmJiAhZGVmaW5lZChJMzg2X09OTFkpCisrI2RlZmluZSBPUEVOU1NM X0NQVUlEX1NFVFVQCisrI2lmIGRlZmluZWQoX1dJTjMyKQorK3R5cGVkZWYgdW5zaWduZWQgX19p bnQ2NCBJQTMyQ0FQOworKyNlbHNlCisrdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgSUEzMkNB UDsKKysjZW5kaWYKKyt2b2lkIE9QRU5TU0xfY3B1aWRfc2V0dXAodm9pZCkKKyt7IHN0YXRpYyBp bnQgdHJpZ2dlcj0wOworKyAgSUEzMkNBUCBPUEVOU1NMX2lhMzJfY3B1aWQodm9pZCk7CisrICBJ QTMyQ0FQIHZlYzsKKysgIGNoYXIgKmVudjsKKysKKysgICAgaWYgKHRyaWdnZXIpCXJldHVybjsK KysKKysgICAgdHJpZ2dlcj0xOworKyAgICBpZiAoKGVudj1nZXRlbnYoIk9QRU5TU0xfaWEzMmNh cCIpKSkgeworKwlpbnQgb2ZmID0gKGVudlswXT09J34nKT8xOjA7CisrI2lmIGRlZmluZWQoX1dJ TjMyKQorKwlpZiAoIXNzY2FuZihlbnYrb2ZmLCIlSTY0aSIsJnZlYykpIHZlYyA9IHN0cnRvdWwo ZW52K29mZixOVUxMLDApOworKyNlbHNlCisrCWlmICghc3NjYW5mKGVuditvZmYsIiVsbGkiLChs b25nIGxvbmcgKikmdmVjKSkgdmVjID0gc3RydG91bChlbnYrb2ZmLE5VTEwsMCk7CisrI2VuZGlm CisrCWlmIChvZmYpIHZlYyA9IE9QRU5TU0xfaWEzMl9jcHVpZCgpJn52ZWM7CisrICAgIH0KKysg ICAgZWxzZQorKwl2ZWMgPSBPUEVOU1NMX2lhMzJfY3B1aWQoKTsKKysKKysgICAgLyoKKysgICAg ICogfCgxPDwxMCkgc2V0cyBhIHJlc2VydmVkIGJpdCB0byBzaWduYWwgdGhhdCB2YXJpYWJsZQor KyAgICAgKiB3YXMgaW5pdGlhbGl6ZWQgYWxyZWFkeS4uLiBUaGlzIGlzIHRvIGF2b2lkIGludGVy ZmVyZW5jZQorKyAgICAgKiB3aXRoIGNwdWlkIHNuaXBwZXRzIGluIEVMRiAuaW5pdCBzZWdtZW50 LgorKyAgICAgKi8KKysgICAgT1BFTlNTTF9pYTMyY2FwX1BbMF0gPSAodW5zaWduZWQgaW50KXZl Y3woMTw8MTApOworKyAgICBPUEVOU1NMX2lhMzJjYXBfUFsxXSA9ICh1bnNpZ25lZCBpbnQpKHZl Yz4+MzIpOworK30KKysjZW5kaWYKKysKKysjZWxzZQorK3Vuc2lnbmVkIGxvbmcgKk9QRU5TU0xf aWEzMmNhcF9sb2Modm9pZCkgeyByZXR1cm4gTlVMTDsgfQorKyNlbmRpZgorK2ludCBPUEVOU1NM X05PTlBJQ19yZWxvY2F0ZWQgPSAwOworKyNpZiAhZGVmaW5lZChPUEVOU1NMX0NQVUlEX1NFVFVQ KSAmJiAhZGVmaW5lZChPUEVOU1NMX0NQVUlEX09CSikKKyt2b2lkIE9QRU5TU0xfY3B1aWRfc2V0 dXAodm9pZCkge30KKysjZW5kaWYKKysKKytzdGF0aWMgdm9pZCBobWFjX2luaXQoU0hBMjU2X0NU WCAqbWRfY3R4LFNIQTI1Nl9DVFggKm9fY3R4LAorKwkJICAgICAgY29uc3QgY2hhciAqa2V5KQor KyAgICB7CisrICAgIHNpemVfdCBsZW49c3RybGVuKGtleSk7CisrICAgIGludCBpOworKyAgICB1 bnNpZ25lZCBjaGFyIGtleW1kW0hNQUNfTUFYX01EX0NCTE9DS107CisrICAgIHVuc2lnbmVkIGNo YXIgcGFkW0hNQUNfTUFYX01EX0NCTE9DS107CisrCisrICAgIGlmIChsZW4gPiBTSEFfQ0JMT0NL KQorKwl7CisrCVNIQTI1Nl9Jbml0KG1kX2N0eCk7CisrCVNIQTI1Nl9VcGRhdGUobWRfY3R4LGtl eSxsZW4pOworKwlTSEEyNTZfRmluYWwoa2V5bWQsbWRfY3R4KTsKKysJbGVuPVNIQTI1Nl9ESUdF U1RfTEVOR1RIOworKwl9CisrICAgIGVsc2UKKysJbWVtY3B5KGtleW1kLGtleSxsZW4pOworKyAg ICBtZW1zZXQoJmtleW1kW2xlbl0sJ1wwJyxITUFDX01BWF9NRF9DQkxPQ0stbGVuKTsKKysKKysg ICAgZm9yKGk9MCA7IGkgPCBITUFDX01BWF9NRF9DQkxPQ0sgOyBpKyspCisrCXBhZFtpXT0weDM2 XmtleW1kW2ldOworKyAgICBTSEEyNTZfSW5pdChtZF9jdHgpOworKyAgICBTSEEyNTZfVXBkYXRl KG1kX2N0eCxwYWQsU0hBMjU2X0NCTE9DSyk7CisrCisrICAgIGZvcihpPTAgOyBpIDwgSE1BQ19N QVhfTURfQ0JMT0NLIDsgaSsrKQorKwlwYWRbaV09MHg1Y15rZXltZFtpXTsKKysgICAgU0hBMjU2 X0luaXQob19jdHgpOworKyAgICBTSEEyNTZfVXBkYXRlKG9fY3R4LHBhZCxTSEEyNTZfQ0JMT0NL KTsKKysgICAgfQorKworK3N0YXRpYyB2b2lkIGhtYWNfZmluYWwodW5zaWduZWQgY2hhciAqbWQs U0hBMjU2X0NUWCAqbWRfY3R4LFNIQTI1Nl9DVFggKm9fY3R4KQorKyAgICB7CisrICAgIHVuc2ln bmVkIGNoYXIgYnVmW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKKysKKysgICAgU0hBMjU2X0ZpbmFs KGJ1ZixtZF9jdHgpOworKyAgICBTSEEyNTZfVXBkYXRlKG9fY3R4LGJ1ZixzaXplb2YgYnVmKTsK KysgICAgU0hBMjU2X0ZpbmFsKG1kLG9fY3R4KTsKKysgICAgfQorKworKyNlbmRpZgorKworK2lu dCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQorKyAgICB7CisrI2lmZGVmIE9QRU5TU0xfRklQ UworKyAgICBzdGF0aWMgY2hhciBrZXlbXT0ib3Jib0RlSklUSVRlanNpcnBBRE9OaXZpcnBVa3Zh clAiOworKyAgICBpbnQgbixiaW5hcnk9MDsKKysKKysgICAgaWYoYXJnYyA8IDIpCisrCXsKKysJ ZnByaW50ZihzdGRlcnIsIiVzIFs8ZmlsZT5dK1xuIixhcmd2WzBdKTsKKysJZXhpdCgxKTsKKysJ fQorKworKyAgICBuPTE7CisrICAgIGlmICghc3RyY21wKGFyZ3Zbbl0sIi1iaW5hcnkiKSkKKysJ eworKwluKys7CisrCWJpbmFyeT0xOwkvKiBlbWl0IGJpbmFyeSBmaW5nZXJwcmludC4uLiAqLwor Kwl9CisrCisrICAgIGZvcig7IG4gPCBhcmdjIDsgKytuKQorKwl7CisrCUZJTEUgKmY9Zm9wZW4o YXJndltuXSwicmIiKTsKKysJU0hBMjU2X0NUWCBtZF9jdHgsb19jdHg7CisrCXVuc2lnbmVkIGNo YXIgbWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOworKwlpbnQgaTsKKysKKysJaWYoIWYpCisrCSAg ICB7CisrCSAgICBwZXJyb3IoYXJndltuXSk7CisrCSAgICBleGl0KDIpOworKwkgICAgfQorKwor KwlobWFjX2luaXQoJm1kX2N0eCwmb19jdHgsa2V5KTsKKysJZm9yKCA7IDsgKQorKwkgICAgewor KwkgICAgY2hhciBidWZbMTAyNF07CisrCSAgICBzaXplX3QgbD1mcmVhZChidWYsMSxzaXplb2Yg YnVmLGYpOworKworKwkgICAgaWYobCA9PSAwKQorKwkJeworKwkJaWYoZmVycm9yKGYpKQorKwkJ ICAgIHsKKysJCSAgICBwZXJyb3IoYXJndltuXSk7CisrCQkgICAgZXhpdCgzKTsKKysJCSAgICB9 CisrCQllbHNlCisrCQkgICAgYnJlYWs7CisrCQl9CisrCSAgICBTSEEyNTZfVXBkYXRlKCZtZF9j dHgsYnVmLGwpOworKwkgICAgfQorKwlobWFjX2ZpbmFsKG1kLCZtZF9jdHgsJm9fY3R4KTsKKysK KysJaWYgKGJpbmFyeSkKKysJICAgIHsKKysJICAgIGZ3cml0ZShtZCxTSEEyNTZfRElHRVNUX0xF TkdUSCwxLHN0ZG91dCk7CisrCSAgICBicmVhazsJLyogLi4uIGZvciBzaW5nbGUoISkgZmlsZSAq LworKwkgICAgfQorKworKy8qCXByaW50ZigiSE1BQy1TSEExKCVzKT0gIixhcmd2W25dKTsgKi8K KysJZm9yKGk9MCA7IGkgPCBTSEEyNTZfRElHRVNUX0xFTkdUSCA7ICsraSkKKysJICAgIHByaW50 ZigiJTAyeCIsbWRbaV0pOworKwlwcmludGYoIlxuIik7CisrCX0KKysjZW5kaWYKKysgICAgcmV0 dXJuIDA7CisrICAgIH0KKysKKysKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBz L2ZpcHNfdGVzdF9zdWl0ZS5jLmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvZmlwc190 ZXN0X3N1aXRlLmMKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3Vp dGUuYy5maXBzCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTY3OTIyNjUzICswMTAwCisrKysgb3BlbnNz bC0xLjAuMWsvY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMJMjAxNS0wMS0wOSAwOTo1MTo1 MS41Njc5MjI2NTMgKzAxMDAKK0BAIC0wLDAgKzEsNTg4IEBACisrLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysg KiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisrICoKKysgKgorKyAqIFRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBhcyBhIHRlc3Qg ZHJpdmVyIGZvciB0aGUgRklQUy0xNDAgdGVzdGluZworKyAqIGxhYiBwZXJmb3JtaW5nIEZJUFMt MTQwIHZhbGlkYXRpb24uICBJdCBkZW1vbnN0cmF0ZXMgdGhlIHVzZSBvZiB0aGUKKysgKiBPcGVu U1NMIGxpYnJhcnkgaXRvIHBlcmZvcm0gYSB2YXJpZXR5IG9mIGNvbW1vbiBjcnlwdG9ncmFwaGlj CisrICogZnVuY3Rpb25zLiAgQSBwb3dlci11cCBzZWxmIHRlc3QgaXMgZGVtb25zdHJhdGVkIGJ5 IGRlbGliZXJhdGVseQorKyAqIHBvaW50aW5nIHRvIGFuIGludmFsaWQgZXhlY3V0YWJsZSBoYXNo CisrICoKKysgKiBDb250cmlidXRlZCBieSBTdGV2ZSBNYXJxdWVzcy4KKysgKgorKyAqLworKyNp bmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8Y3R5cGUu aD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2Flcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2RoLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2Vyci5oPgorKworKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv cmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorKworKworKyNpZm5kZWYgT1BFTlNT TF9GSVBTCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKysgICAgeworKyAgICBw cmludGYoIk5vIEZJUFMgc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKysgICAgfQorKyNl bHNlCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlICJmaXBzX3V0bC5o IgorKworKy8qIEFFUzogZW5jcnlwdCBhbmQgZGVjcnlwdCBrbm93biBwbGFpbnRleHQsIHZlcmlm eSByZXN1bHQgbWF0Y2hlcyBvcmlnaW5hbCBwbGFpbnRleHQKKysqLworK3N0YXRpYyBpbnQgRklQ U19hZXNfdGVzdCh2b2lkKQorKwl7CisrCWludCByZXQgPSAwOworKwl1bnNpZ25lZCBjaGFyIHBs dG1wWzE2XTsKKysJdW5zaWduZWQgY2hhciBjaXRtcFsxNl07CisrCXVuc2lnbmVkIGNoYXIga2V5 WzE2XSA9IHsgMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTZ9OworKwl1bnNp Z25lZCBjaGFyIHBsYWludGV4dFsxNl0gPSAiZXRhb25yaXNoZGxjdSI7CisrCUVWUF9DSVBIRVJf Q1RYIGN0eDsKKysJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysJaWYgKEVWUF9DaXBoZXJJ bml0X2V4KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMSkgPD0gMCkK KysJCWdvdG8gZXJyOworKwlFVlBfQ2lwaGVyKCZjdHgsIGNpdG1wLCBwbGFpbnRleHQsIDE2KTsK KysJaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLE5VTEwsIGtl eSwgTlVMTCwgMCkgPD0gMCkKKysJCWdvdG8gZXJyOworKwlFVlBfQ2lwaGVyKCZjdHgsIHBsdG1w LCBjaXRtcCwgMTYpOworKwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIDE2KSkKKysJCWdv dG8gZXJyOworKwlyZXQgPSAxOworKwllcnI6CisrCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0 eCk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKytzdGF0aWMgaW50IEZJUFNfZGVzM190ZXN0KHZv aWQpCisrCXsKKysJaW50IHJldCA9IDA7CisrCXVuc2lnbmVkIGNoYXIgcGx0bXBbOF07CisrCXVu c2lnbmVkIGNoYXIgY2l0bXBbOF07CisrICAgIAl1bnNpZ25lZCBjaGFyIGtleVtdID0geyAxLDIs Myw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwKKysJCSAgICAgICAgICAg ICAgMTksMjAsMjEsMjIsMjMsMjR9OworKyAgICAJdW5zaWduZWQgY2hhciBwbGFpbnRleHRbXSA9 IHsgJ2UnLCAndCcsICdhJywgJ28nLCAnbicsICdyJywgJ2knLCAncycgfTsKKysJRVZQX0NJUEhF Ul9DVFggY3R4OworKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKwlpZiAoRVZQX0NpcGhl ckluaXRfZXgoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMSkgPD0g MCkKKysJCWdvdG8gZXJyOworKwlFVlBfQ2lwaGVyKCZjdHgsIGNpdG1wLCBwbGFpbnRleHQsIDgp OworKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLE5VTEws IGtleSwgTlVMTCwgMCkgPD0gMCkKKysJCWdvdG8gZXJyOworKwlFVlBfQ2lwaGVyKCZjdHgsIHBs dG1wLCBjaXRtcCwgOCk7CisrCWlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4dCwgOCkpCisrCQln b3RvIGVycjsKKysJcmV0ID0gMTsKKysJZXJyOgorKwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZj dHgpOworKwlyZXR1cm4gcmV0OworKwl9CisrCisrLyoKKysgKiBEU0E6IGdlbmVyYXRlIGtleXMg YW5kIHNpZ24sIHZlcmlmeSBpbnB1dCBwbGFpbnRleHQuCisrICovCisrc3RhdGljIGludCBGSVBT X2RzYV90ZXN0KGludCBiYWQpCisrICAgIHsKKysgICAgRFNBICpkc2EgPSBOVUxMOworKyAgICBF VlBfUEtFWSBwazsKKysgICAgdW5zaWduZWQgY2hhciBkZ3N0W10gPSAiZXRhb25yaXNoZGxjIjsK KysgICAgdW5zaWduZWQgY2hhciBidWZbNjBdOworKyAgICB1bnNpZ25lZCBpbnQgc2xlbjsKKysg ICAgaW50IHIgPSAwOworKyAgICBFVlBfTURfQ1RYIG1jdHg7CisrCisrICAgIEVSUl9jbGVhcl9l cnJvcigpOworKyAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOworKyAgICBkc2EgPSBEU0FfbmV3 KCk7CisrICAgIGlmICghZHNhKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKCFEU0FfZ2VuZXJhdGVf cGFyYW1ldGVyc19leChkc2EsIDEwMjQsTlVMTCwwLE5VTEwsTlVMTCxOVUxMKSkKKysJZ290byBl bmQ7CisrICAgIGlmICghRFNBX2dlbmVyYXRlX2tleShkc2EpKQorKwlnb3RvIGVuZDsKKysgICAg aWYgKGJhZCkKKysJICAgIEJOX2FkZF93b3JkKGRzYS0+cHViX2tleSwgMSk7CisrCisrICAgIHBr LnR5cGUgPSBFVlBfUEtFWV9EU0E7CisrICAgIHBrLnBrZXkuZHNhID0gZHNhOworKworKyAgICBp ZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCisrCWdvdG8gZW5k OworKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBkZ3N0LCBzaXplb2YoZGdzdCkgLSAx KSkKKysJZ290byBlbmQ7CisrICAgIGlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgYnVmLCAmc2xl biwgJnBrKSkKKysJZ290byBlbmQ7CisrCisrICAgIGlmICghRVZQX1ZlcmlmeUluaXRfZXgoJm1j dHgsIEVWUF9kc3MxKCksIE5VTEwpKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKCFFVlBfVmVyaWZ5 VXBkYXRlKCZtY3R4LCBkZ3N0LCBzaXplb2YoZGdzdCkgLSAxKSkKKysJZ290byBlbmQ7CisrICAg IHIgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIGJ1Ziwgc2xlbiwgJnBrKTsKKysgICAgZW5kOgor KyAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOworKyAgICBpZiAoZHNhKQorKyAgCSAgRFNB X2ZyZWUoZHNhKTsKKysgICAgaWYgKHIgIT0gMSkKKysJcmV0dXJuIDA7CisrICAgIHJldHVybiAx OworKyAgICB9CisrCisrLyoKKysgKiBSU0E6IGdlbmVyYXRlIGtleXMgYW5kIHNpZ24sIHZlcmlm eSBpbnB1dCBwbGFpbnRleHQuCisrICovCisrc3RhdGljIGludCBGSVBTX3JzYV90ZXN0KGludCBi YWQpCisrICAgIHsKKysgICAgUlNBICprZXk7CisrICAgIHVuc2lnbmVkIGNoYXIgaW5wdXRfcHRl eHRbXSA9ICJldGFvbnJpc2hkbGMiOworKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyNTZdOworKyAg ICB1bnNpZ25lZCBpbnQgc2xlbjsKKysgICAgQklHTlVNICpibjsKKysgICAgRVZQX01EX0NUWCBt Y3R4OworKyAgICBFVlBfUEtFWSBwazsKKysgICAgaW50IHIgPSAwOworKworKyAgICBFUlJfY2xl YXJfZXJyb3IoKTsKKysgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKKysgICAga2V5ID0gUlNB X25ldygpOworKyAgICBibiA9IEJOX25ldygpOworKyAgICBpZiAoIWtleSB8fCAhYm4pCisrCXJl dHVybiAwOworKyAgICBCTl9zZXRfd29yZChibiwgNjU1MzcpOworKyAgICBpZiAoIVJTQV9nZW5l cmF0ZV9rZXlfZXgoa2V5LCAxMDI0LGJuLE5VTEwpKQorKwlyZXR1cm4gMDsKKysgICAgQk5fZnJl ZShibik7CisrICAgIGlmIChiYWQpCisrCSAgICBCTl9hZGRfd29yZChrZXktPm4sIDEpOworKwor KyAgICBway50eXBlID0gRVZQX1BLRVlfUlNBOworKyAgICBway5wa2V5LnJzYSA9IGtleTsKKysK KysgICAgaWYgKCFFVlBfU2lnbkluaXRfZXgoJm1jdHgsIEVWUF9zaGExKCksIE5VTEwpKQorKwln b3RvIGVuZDsKKysgICAgaWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgaW5wdXRfcHRleHQsIHNp emVvZihpbnB1dF9wdGV4dCkgLSAxKSkKKysJZ290byBlbmQ7CisrICAgIGlmICghRVZQX1NpZ25G aW5hbCgmbWN0eCwgYnVmLCAmc2xlbiwgJnBrKSkKKysJZ290byBlbmQ7CisrCisrICAgIGlmICgh RVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9zaGExKCksIE5VTEwpKQorKwlnb3RvIGVuZDsK KysgICAgaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBpbnB1dF9wdGV4dCwgc2l6ZW9mKGlu cHV0X3B0ZXh0KSAtIDEpKQorKwlnb3RvIGVuZDsKKysgICAgciA9IEVWUF9WZXJpZnlGaW5hbCgm bWN0eCwgYnVmLCBzbGVuLCAmcGspOworKyAgICBlbmQ6CisrICAgIEVWUF9NRF9DVFhfY2xlYW51 cCgmbWN0eCk7CisrICAgIGlmIChrZXkpCisrICAJICAgIFJTQV9mcmVlKGtleSk7CisrICAgIGlm IChyICE9IDEpCisrCXJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIFNI QTE6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtu b3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNf c2hhMV90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEFfRElHRVNU X0xFTkdUSF0gPQorKyAgICAgICAgeyAweDExLCAweGYxLCAweDlhLCAweDNhLCAweGVjLCAweDFh LCAweDFlLCAweDhlLCAweDY1LCAweGQ0LCAweDlhLCAweDM4LCAweDBjLCAweDhiLCAweDFlLCAw eDJjLCAweGU4LCAweGIzLCAweGM1LCAweDE4IH07CisrICAgIHVuc2lnbmVkIGNoYXIgc3RyW10g PSAiZXRhb25yaXNoZCI7CisrCisrICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hBX0RJR0VTVF9MRU5H VEhdOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFFVlBfRGlnZXN0KHN0 cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5VTEwsIEVWUF9zaGExKCksIE5VTEwpKSByZXR1cm4gMDsK KysgICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1kKSkpCisrICAgICAgICByZXR1cm4g MDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBTSEEyNTY6IGdlbmVyYXRlIGhhc2gg b2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0 ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfc2hhMjU2X3Rlc3QoKQorKyAg ICB7CisrICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQTI1Nl9ESUdFU1RfTEVOR1RIXSA9Cisr CXsweGY1LCAweDUzLCAweGNkLCAweGI4LCAweGNmLCAweDEsIDB4ZWUsIDB4MTcsIDB4OWIsIDB4 OTMsIDB4YzksIDB4NjgsIDB4YzAsIDB4ZWEsIDB4NDAsIDB4OTEsCisrCSAweDYsIDB4ZWMsIDB4 OGUsIDB4MTEsIDB4OTYsIDB4YzgsIDB4NWQsIDB4MWMsIDB4YWYsIDB4NjQsIDB4MjIsIDB4ZTYs IDB4NTAsIDB4NGYsIDB4NDcsIDB4NTd9OworKyAgICB1bnNpZ25lZCBjaGFyIHN0cltdID0gImV0 YW9ucmlzaGQiOworKworKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQTI1Nl9ESUdFU1RfTEVOR1RI XTsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghRVZQX0RpZ2VzdChzdHIs c2l6ZW9mKHN0cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hhMjU2KCksIE5VTEwpKSByZXR1cm4gMDsK KysgICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1kKSkpCisrICAgICAgICByZXR1cm4g MDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBTSEE1MTI6IGdlbmVyYXRlIGhhc2gg b2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0 ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfc2hhNTEyX3Rlc3QoKQorKyAg ICB7CisrICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQTUxMl9ESUdFU1RfTEVOR1RIXSA9Cisr CXsweDk5LCAweGM5LCAweGU5LCAweDViLCAweDg4LCAweGQ0LCAweDc4LCAweDg4LCAweGRmLCAw eDg4LCAweDVmLCAweDk0LCAweDcxLCAweDY0LCAweDI4LCAweGNhLAorKwkgMHgxNiwgMHgxZiwg MHgzZCwgMHhmNCwgMHgxZiwgMHhmMywgMHgwZiwgMHhjNSwgMHgwMywgMHg5OSwgMHhiMiwgMHhk MCwgMHhlNywgMHgwYiwgMHg5NCwgMHg0YSwKKysJIDB4NDUsIDB4ZDIsIDB4NmMsIDB4NGYsIDB4 MjAsIDB4MDYsIDB4ZWYsIDB4NzEsIDB4YTksIDB4MjUsIDB4N2YsIDB4MjQsIDB4YjEsIDB4ZDks IDB4NDAsIDB4MjIsCisrCSAweDQ5LCAweDU0LCAweDEwLCAweGMyLCAweDIyLCAweDlkLCAweDI3 LCAweGZlLCAweGJkLCAweGQ2LCAweGQ2LCAweGViLCAweDJkLCAweDQyLCAweDFkLCAweGEzfTsK KysgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFvbnJpc2hkIjsKKysKKysgICAgdW5zaWdu ZWQgY2hhciBtZFtTSEE1MTJfRElHRVNUX0xFTkdUSF07CisrCisrICAgIEVSUl9jbGVhcl9lcnJv cigpOworKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNpemVvZihzdHIpIC0gMSxtZCwgTlVMTCwg RVZQX3NoYTUxMigpLCBOVUxMKSkgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAobWQsZGlnZXN0 LHNpemVvZihtZCkpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9 CisrCisrLyogSE1BQy1TSEExOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBh bmQgY29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisr c3RhdGljIGludCBGSVBTX2htYWNfc2hhMV90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBj aGFyIGtleVtdID0gImV0YW9ucmlzaGQiOworKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2Ft cGxlIHRleHQiOworKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQor Kwl7MHg3MywgMHhmNywgMHhhMCwgMHg0OCwgMHhmOCwgMHg5NCwgMHhlZCwgMHhkZCwgMHgwYSwg MHhlYSwgMHhlYSwgMHg1NiwgMHgxYiwgMHg2MSwgMHgyZSwgMHg3MCwKKysJIDB4YjIsIDB4ZmIs IDB4ZWMsIDB4YzZ9OworKworKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVd OworKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsK KysgICAgaWYgKCFITUFDKEVWUF9zaGExKCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2 KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91 dGxlbikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysv KiBITUFDLVNIQTIyNDogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNv bXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRp YyBpbnQgRklQU19obWFjX3NoYTIyNF90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFy IGtleVtdID0gImV0YW9ucmlzaGQiOworKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxl IHRleHQiOworKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQorKwl7 MHg3NSwgMHg1OCwgMHhkNSwgMHhiZCwgMHg1NSwgMHg2ZCwgMHg4NywgMHgwZiwgMHg3NSwgMHhm ZiwgMHhiZSwgMHgxYywgMHhiMiwgMHhmMCwgMHgyMCwgMHgzNSwKKysJIDB4ZTUsIDB4NjIsIDB4 NDksIDB4YjYsIDB4OTQsIDB4YjksIDB4ZmMsIDB4NjUsIDB4MzQsIDB4MzMsIDB4M2EsIDB4MTl9 OworKworKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICB1bnNp Z25lZCBpbnQgb3V0bGVuOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFI TUFDKEVWUF9zaGEyMjQoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZv dXRsZW4pKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKKysg ICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIEhNQUMtU0hB MjU2OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBr bm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBT X2htYWNfc2hhMjU2X3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAi ZXRhb25yaXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7Cisr ICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9CisrCXsweGU5LCAweDE3 LCAweGMxLCAweDdiLCAweDRjLCAweDZiLCAweDc3LCAweGRhLCAweGQyLCAweDMwLCAweDM2LCAw eDAyLCAweGY1LCAweDcyLCAweDMzLCAweDg3LAorKwkgMHg5ZiwgMHhjNiwgMHg2ZSwgMHg3Yiwg MHg3ZSwgMHhhOCwgMHhlYSwgMHhhYSwgMHg5ZiwgMHhiYSwgMHhlZSwgMHg1MSwgMHhmZiwgMHhk YSwgMHgyNCwgMHhmNH07CisrCisrICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0la RV07CisrICAgIHVuc2lnbmVkIGludCBvdXRsZW47CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigp OworKyAgICBpZiAoIUhNQUMoRVZQX3NoYTI1NigpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVv ZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG91dCxrYXZh bCxvdXRsZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9Cisr CisrLyogSE1BQy1TSEEzODQ6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFu ZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytz dGF0aWMgaW50IEZJUFNfaG1hY19zaGEzODRfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQg Y2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKKysgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNh bXBsZSB0ZXh0IjsKKysgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0K KysJezB4YjIsIDB4OWQsIDB4NDAsIDB4NTgsIDB4MzIsIDB4YzQsIDB4ZTMsIDB4MzEsIDB4YjYs IDB4NjMsIDB4MDgsIDB4MjYsIDB4OTksIDB4ZWYsIDB4M2IsIDB4MTAsCisrCSAweGUyLCAweGRm LCAweGY4LCAweGZmLCAweGM2LCAweGUxLCAweDAzLCAweDI5LCAweDgxLCAweDJhLCAweDFiLCAw eGFjLCAweGIwLCAweDA3LCAweDM5LCAweDA4LAorKwkgMHhmMywgMHg5MSwgMHgzNSwgMHgxMSwg MHg3NiwgMHhkNiwgMHg0YywgMHgyMCwgMHhmYiwgMHg0ZCwgMHhjMywgMHhmMywgMHhiOCwgMHg5 YiwgMHg4OCwgMHgxY307CisrCisrICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0la RV07CisrICAgIHVuc2lnbmVkIGludCBvdXRsZW47CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigp OworKyAgICBpZiAoIUhNQUMoRVZQX3NoYTM4NCgpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVv ZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG91dCxrYXZh bCxvdXRsZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9Cisr CisrLyogSE1BQy1TSEE1MTI6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFu ZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytz dGF0aWMgaW50IEZJUFNfaG1hY19zaGE1MTJfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQg Y2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKKysgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNh bXBsZSB0ZXh0IjsKKysgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0K KysJezB4Y2QsIDB4M2UsIDB4YjksIDB4NTEsIDB4YjgsIDB4YmMsIDB4N2YsIDB4OWEsIDB4MjMs IDB4YWYsIDB4ZjMsIDB4NzcsIDB4NTksIDB4ODUsIDB4YTksIDB4ZTYsCisrCSAweGY3LCAweGQx LCAweDUxLCAweDk2LCAweDE3LCAweGUwLCAweDkyLCAweGQ4LCAweGE2LCAweDNiLCAweGMxLCAw eGFkLCAweDdlLCAweDI0LCAweGNhLCAweGIxLAorKwkgMHhkNywgMHg3OSwgMHgwYSwgMHhhNSwg MHhlYSwgMHgyYywgMHgwMiwgMHg1OCwgMHgwYiwgMHhhNiwgMHg1MiwgMHg2YiwgMHg2MSwgMHg3 ZiwgMHhlYiwgMHg5YywKKysJIDB4NDcsIDB4ODYsIDB4NWQsIDB4NzQsIDB4MmIsIDB4ODgsIDB4 ZGYsIDB4ZWUsIDB4NDYsIDB4NjksIDB4OTYsIDB4M2QsIDB4YTYsIDB4ZDksIDB4MmEsIDB4NTN9 OworKworKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICB1bnNp Z25lZCBpbnQgb3V0bGVuOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFI TUFDKEVWUF9zaGE1MTIoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZv dXRsZW4pKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKKysg ICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKworKy8qIERIOiBn ZW5lcmF0ZSBzaGFyZWQgcGFyYW1ldGVycworKyovCisrc3RhdGljIGludCBkaF90ZXN0KCkKKysg ICAgeworKyAgICBESCAqZGg7CisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBkaCA9IEZJ UFNfZGhfbmV3KCk7CisrICAgIGlmICghZGgpCisrCXJldHVybiAwOworKyAgICBpZiAoIURIX2dl bmVyYXRlX3BhcmFtZXRlcnNfZXgoZGgsIDEwMjQsIDIsIE5VTEwpKQorKwlyZXR1cm4gMDsKKysg ICAgRklQU19kaF9mcmVlKGRoKTsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBaZXJv aXplCisrKi8KKytzdGF0aWMgaW50IFplcm9pemUoKQorKyAgICB7CisrICAgIFJTQSAqa2V5Owor KyAgICBCSUdOVU0gKmJuOworKyAgICB1bnNpZ25lZCBjaGFyIHVzZXJrZXlbMTZdID0gCisrCXsg MHg0OCwgMHg1MCwgMHhmMCwgMHhhMywgMHgzYSwgMHhlZCwgMHhkMywgMHhhZiwgMHg2ZSwgMHg0 NywgMHg3ZiwgMHg4MywgMHgwMiwgMHhiMSwgMHgwOSwgMHg2OCB9OworKyAgICBpbnQgaSwgbjsK KysKKysgICAga2V5ID0gRklQU19yc2FfbmV3KCk7CisrICAgIGJuID0gQk5fbmV3KCk7CisrICAg IGlmICgha2V5IHx8ICFibikKKysJcmV0dXJuIDA7CisrICAgIEJOX3NldF93b3JkKGJuLCA2NTUz Nyk7CisrICAgIGlmICghUlNBX2dlbmVyYXRlX2tleV9leChrZXksIDEwMjQsYm4sTlVMTCkpCisr CXJldHVybiAwOworKyAgICBCTl9mcmVlKGJuKTsKKysgICAgCisrICAgIG4gPSBCTl9udW1fYnl0 ZXMoa2V5LT5kKTsKKysgICAgcHJpbnRmKCIgR2VuZXJhdGVkICVkIGJ5dGUgUlNBIHByaXZhdGUg a2V5XG4iLCBuKTsKKysgICAgcHJpbnRmKCJcdEJOIGtleSBiZWZvcmUgb3ZlcndyaXRpbmc6XG4i KTsKKysgICAgZG9fYm5fcHJpbnQoc3Rkb3V0LCBrZXktPmQpOworKyAgICBCTl9yYW5kKGtleS0+ ZCxuKjgsLTEsMCk7CisrICAgIHByaW50ZigiXHRCTiBrZXkgYWZ0ZXIgb3ZlcndyaXRpbmc6XG4i KTsKKysgICAgZG9fYm5fcHJpbnQoc3Rkb3V0LCBrZXktPmQpOworKworKyAgICBwcmludGYoIlx0 Y2hhciBidWZmZXIga2V5IGJlZm9yZSBvdmVyd3JpdGluZzogXG5cdFx0Iik7CisrICAgIGZvcihp ID0gMDsgaSA8IHNpemVvZih1c2Vya2V5KTsgaSsrKSBwcmludGYoIiUwMngiLCB1c2Vya2V5W2ld KTsKKysgICAgICAgIHByaW50ZigiXG4iKTsKKysgICAgUkFORF9ieXRlcyh1c2Vya2V5LCBzaXpl b2YgdXNlcmtleSk7CisrICAgIHByaW50ZigiXHRjaGFyIGJ1ZmZlciBrZXkgYWZ0ZXIgb3Zlcndy aXRpbmc6IFxuXHRcdCIpOworKyAgICBmb3IoaSA9IDA7IGkgPCBzaXplb2YodXNlcmtleSk7IGkr KykgcHJpbnRmKCIlMDJ4IiwgdXNlcmtleVtpXSk7CisrICAgICAgICBwcmludGYoIlxuIik7Cisr CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrc3RhdGljIGludCBFcnJvcjsKKytjb25zdCBj aGFyICogRmFpbChjb25zdCBjaGFyICptc2cpCisrICAgIHsKKysgICAgZG9fcHJpbnRfZXJyb3Jz KCk7CisrICAgIEVycm9yKys7CisrICAgIHJldHVybiBtc2c7IAorKyAgICB9CisrCisraW50IG1h aW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCisrICAgIHsKKysKKysgICAgaW50IGRvX2NvcnJ1cHRf cnNhX2tleWdlbiA9IDAsIGRvX2NvcnJ1cHRfZHNhX2tleWdlbiA9IDA7CisrICAgIGludCBiYWRf cnNhID0gMCwgYmFkX2RzYSA9IDA7CisrICAgIGludCBkb19ybmdfc3RpY2sgPSAwOworKyAgICBp bnQgbm9fZXhpdCA9IDA7CisrCisrICAgIHByaW50ZigiXHRGSVBTLW1vZGUgdGVzdCBhcHBsaWNh dGlvblxuXG4iKTsKKysKKysgICAgLyogTG9hZCBlbnRyb3B5IGZyb20gZXh0ZXJuYWwgZmlsZSwg aWYgYW55ICovCisrICAgIFJBTkRfbG9hZF9maWxlKCIucm5kIiwgMTAyNCk7CisrCisrICAgIGlm IChhcmd2WzFdKSB7CisrICAgICAgICAvKiBDb3JydXB0ZWQgS0FUIHRlc3RzICovCisrICAgICAg ICBpZiAoIXN0cmNtcChhcmd2WzFdLCAiYWVzIikpIHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1 cHRfYWVzKCk7CisrICAgICAgICAgICAgcHJpbnRmKCJBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9u IHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAo YXJndlsxXSwgImRlcyIpKSB7CisrICAgICAgICAgICAgRklQU19jb3JydXB0X2RlcygpOworKyAg ICAgICAgICAgIHByaW50ZigiREVTMy1FQ0IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHdpdGggY29y cnVwdGVkIEtBVC4uLlxuIik7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwg ImRzYSIpKSB7CisrICAgICAgICAgICAgRklQU19jb3JydXB0X2RzYSgpOworKyAgICAgICAgICAg IHByaW50ZigiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRo IGNvcnJ1cHRlZCBLQVQuLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3Zb MV0sICJyc2EiKSkgeworKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9yc2EoKTsKKysgICAgICAg ICAgICBwcmludGYoIlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24g d2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChh cmd2WzFdLCAicnNha2V5IikpIHsKKysgICAgICAgICAgICBwcmludGYoIlJTQSBrZXkgZ2VuZXJh dGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Li4uXG4iKTsK KysJICAgIGJhZF9yc2EgPSAxOworKwkgICAgbm9fZXhpdCA9IDE7CisrICAgICAgICB9IGVsc2Ug aWYgKCFzdHJjbXAoYXJndlsxXSwgInJzYWtleWdlbiIpKSB7CisrCSAgICBkb19jb3JydXB0X3Jz YV9rZXlnZW4gPSAxOworKwkgICAgbm9fZXhpdCA9IDE7CisrICAgICAgICAgICAgcHJpbnRmKCJS U0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVk IGtleWdlbi4uLlxuIik7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRz YWtleSIpKSB7CisrICAgICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNp Z25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleS4uLlxuIik7CisrCSAgICBiYWRf ZHNhID0gMTsKKysJICAgIG5vX2V4aXQgPSAxOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21w KGFyZ3ZbMV0sICJkc2FrZXlnZW4iKSkgeworKwkgICAgZG9fY29ycnVwdF9kc2Ffa2V5Z2VuID0g MTsKKysJICAgIG5vX2V4aXQgPSAxOworKyAgICAgICAgICAgIHByaW50ZigiRFNBIGtleSBnZW5l cmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXlnZW4uLi5c biIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJzaGExIikpIHsKKysg ICAgICAgICAgICBGSVBTX2NvcnJ1cHRfc2hhMSgpOworKyAgICAgICAgICAgIHByaW50ZigiU0hB LTEgaGFzaCB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOworKwl9IGVsc2UgaWYgKCFzdHJjbXAo YXJndlsxXSwgInJuZyIpKSB7CisrCSAgICBGSVBTX2NvcnJ1cHRfcm5nKCk7CisrCX0gZWxzZSBp ZiAoIXN0cmNtcChhcmd2WzFdLCAicm5nc3RpY2siKSkgeworKwkgICAgZG9fcm5nX3N0aWNrID0g MTsKKysJICAgIG5vX2V4aXQgPSAxOworKwkgICAgcHJpbnRmKCJSTkcgdGVzdCB3aXRoIHN0dWNr IGNvbnRpbnVvdXMgdGVzdC4uLlxuIik7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAg IHByaW50ZigiQmFkIGFyZ3VtZW50IFwiJXNcIlxuIiwgYXJndlsxXSk7CisrICAgICAgICAgICAg ZXhpdCgxKTsKKysgICAgICAgIH0KKysJaWYgKCFub19leGl0KSB7CisrICAgICAgICAJaWYgKCFG SVBTX21vZGVfc2V0KDEpKSB7CisrIAkJICAgIGRvX3ByaW50X2Vycm9ycygpOworKyAgICAgICAg CSAgICBwcmludGYoIlBvd2VyLXVwIHNlbGYgdGVzdCBmYWlsZWRcbiIpOworKwkJICAgIGV4aXQo MSk7CisrCQl9CisrICAgICAgICAJcHJpbnRmKCJQb3dlci11cCBzZWxmIHRlc3Qgc3VjY2Vzc2Z1 bFxuIik7CisrICAgICAgICAJZXhpdCgwKTsKKysJfQorKyAgICB9CisrCisrICAgIC8qIE5vbi1B cHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbgorKyAgICAqLworKyAgICBwcmludGYoIjEu IE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbiB0ZXN0Li4uXG4iKTsKKysgICAg cHJpbnRmKCJcdGEuIEluY2x1ZGVkIGFsZ29yaXRobSAoRC1IKS4uLiIpOworKyAgICBwcmludGYo IGRoX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisr ICAgIC8qIFBvd2VyLXVwIHNlbGYgdGVzdAorKyAgICAqLworKyAgICBFUlJfY2xlYXJfZXJyb3Io KTsKKysgICAgcHJpbnRmKCIyLiBBdXRvbWF0aWMgcG93ZXItdXAgc2VsZiB0ZXN0Li4uIik7Cisr ICAgIGlmICghRklQU19tb2RlX3NldCgxKSkKKysJeworKwlkb19wcmludF9lcnJvcnMoKTsKKysg ICAgICAgIHByaW50ZihGYWlsKCJGQUlMRUQhXG4iKSk7CisrCWV4aXQoMSk7CisrCX0KKysgICAg cHJpbnRmKCJzdWNjZXNzZnVsXG4iKTsKKysgICAgaWYgKGRvX2NvcnJ1cHRfZHNhX2tleWdlbikK KysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbigpOworKyAgICBpZiAoZG9fY29y cnVwdF9yc2Ffa2V5Z2VuKQorKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuKCk7 CisrICAgIGlmIChkb19ybmdfc3RpY2spCisrICAgICAgICAgICAgRklQU19ybmdfc3RpY2soKTsK KysKKysgICAgLyogQUVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorKyAgICAqLworKyAgICBwcmlu dGYoIjMuIEFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKKysgICAgcHJpbnRmKCBGSVBT X2Flc190ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKwor KyAgICAvKiBSU0Ega2V5IGdlbmVyYXRpb24gYW5kIGVuY3J5cHRpb24vZGVjcnlwdGlvbgorKyAg ICAqLworKyAgICBwcmludGYoIjQuIFJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgZW5jcnlwdGlvbi9k ZWNyeXB0aW9uLi4uIik7CisrICAgIHByaW50ZiggRklQU19yc2FfdGVzdChiYWRfcnNhKSA/ICJz dWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIERFUy1DQkMg ZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisrICAgICovCisrICAgIHByaW50ZigiNS4gREVTLUVDQiBl bmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2RlczNfdGVzdCgp ID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogRFNB IGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbgorKyAgICAqLworKyAgICBw cmludGYoIjYuIERTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24uLi4i KTsKKysgICAgcHJpbnRmKCBGSVBTX2RzYV90ZXN0KGJhZF9kc2EpID8gInN1Y2Nlc3NmdWxcbiIg OiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogU0hBLTEgaGFzaAorKyAgICAqLwor KyAgICBwcmludGYoIjdhLiBTSEEtMSBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19zaGEx X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAg IC8qIFNIQS0yNTYgaGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdiLiBTSEEtMjU2IGhhc2gu Li4iKTsKKysgICAgcHJpbnRmKCBGSVBTX3NoYTI1Nl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6 ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBTSEEtNTEyIGhhc2gKKysgICAgKi8K KysgICAgcHJpbnRmKCI3Yy4gU0hBLTUxMiBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19z aGE1MTJfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysK KysgICAgLyogSE1BQy1TSEEtMSBoYXNoCisrICAgICovCisrICAgIHByaW50ZigiN2QuIEhNQUMt U0hBLTEgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGExX3Rlc3QoKSA/ICJz dWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIEhNQUMtU0hB LTIyNCBoYXNoCisrICAgICovCisrICAgIHByaW50ZigiN2UuIEhNQUMtU0hBLTIyNCBoYXNoLi4u Iik7CisrICAgIHByaW50ZiggRklQU19obWFjX3NoYTIyNF90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxu IiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBITUFDLVNIQS0yNTYgaGFzaAor KyAgICAqLworKyAgICBwcmludGYoIjdmLiBITUFDLVNIQS0yNTYgaGFzaC4uLiIpOworKyAgICBw cmludGYoIEZJUFNfaG1hY19zaGEyNTZfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgi RkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogSE1BQy1TSEEtMzg0IGhhc2gKKysgICAgKi8KKysg ICAgcHJpbnRmKCI3Zy4gSE1BQy1TSEEtMzg0IGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBT X2htYWNfc2hhMzg0X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIp ICk7CisrCisrICAgIC8qIEhNQUMtU0hBLTUxMiBoYXNoCisrICAgICovCisrICAgIHByaW50Zigi N2guIEhNQUMtU0hBLTUxMiBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19obWFjX3NoYTUx Ml90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAg ICAvKiBOb24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24KKysgICAgKi8KKysgICAg cHJpbnRmKCI4LiBOb24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24gdGVzdC4uLlxu Iik7CisrICAgIHByaW50ZigiXHRhLiBJbmNsdWRlZCBhbGdvcml0aG0gKEQtSCkuLi4iKTsKKysg ICAgcHJpbnRmKCBkaF90ZXN0KCkgPyAic3VjY2Vzc2Z1bCBhcyBleHBlY3RlZFxuIgorKwkgICAg OiBGYWlsKCJmYWlsZWQgSU5DT1JSRUNUTFkhXG4iKSApOworKworKyAgICAvKiBaZXJvaXphdGlv bgorKyAgICAqLworKyAgICBwcmludGYoIjkuIFplcm8taXphdGlvbi4uLlxuIik7CisrICAgIHBy aW50ZiggWmVyb2l6ZSgpID8gIlx0c3VjY2Vzc2Z1bCBhcyBleHBlY3RlZFxuIgorKwkgICAgOiBG YWlsKCJcdGZhaWxlZCBJTkNPUlJFQ1RMWSFcbiIpICk7CisrCisrICAgIHByaW50ZigiXG5BbGwg dGVzdHMgY29tcGxldGVkIHdpdGggJWQgZXJyb3JzXG4iLCBFcnJvcik7CisrICAgIHJldHVybiBF cnJvciA/IDEgOiAwOworKyAgICB9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4x ay9jcnlwdG8vZmlwcy9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9maXBzL01h a2VmaWxlCistLS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRvL2ZpcHMvTWFrZWZpbGUuZmlwcwkyMDE1 LTAxLTA5IDA5OjUxOjUxLjU2ODkyMjY3NSArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0 by9maXBzL01ha2VmaWxlCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTY4OTIyNjc1ICswMTAwCitAQCAt MCwwICsxLDM0MSBAQAorKyMKKysjIE9wZW5TU0wvY3J5cHRvL2ZpcHMvTWFrZWZpbGUKKysjCisr CisrRElSPQlmaXBzCisrVE9QPQkuLi8uLgorK0NDPQljYworK0lOQ0xVREVTPQorK0NGTEFHPS1n CisrTUFLRUZJTEU9CU1ha2VmaWxlCisrQVI9CQlhciByCisrCisrQ0ZMQUdTPSAkKElOQ0xVREVT KSAkKENGTEFHKQorKworK0dFTkVSQUw9TWFrZWZpbGUKKytURVNUPWZpcHNfdGVzdF9zdWl0ZS5j IGZpcHNfcmFuZHRlc3QuYworK0FQUFM9CisrCisrUFJPR1JBTT0gZmlwc19zdGFuZGFsb25lX2ht YWMKKytFWEU9ICQoUFJPR1JBTSkkKEVYRV9FWFQpCisrCisrTElCPSQoVE9QKS9saWJjcnlwdG8u YQorK0xJQlNSQz1maXBzX2Flc19zZWxmdGVzdC5jIGZpcHNfZGVzX3NlbGZ0ZXN0LmMgZmlwc19o bWFjX3NlbGZ0ZXN0LmMgZmlwc19yYW5kX3NlbGZ0ZXN0LmMgXAorKyAgICBmaXBzX3JzYV9zZWxm dGVzdC5jIGZpcHNfc2hhX3NlbGZ0ZXN0LmMgZmlwcy5jIGZpcHNfZHNhX3NlbGZ0ZXN0LmMgIGZp cHNfcmFuZC5jIFwKKysgICAgZmlwc19yc2FfeDkzMWcuYyBmaXBzX3Bvc3QuYyBmaXBzX2RyYmdf Y3RyLmMgZmlwc19kcmJnX2hhc2guYyBmaXBzX2RyYmdfaG1hYy5jIFwKKysgICAgZmlwc19kcmJn X2xpYi5jIGZpcHNfZHJiZ19yYW5kLmMgZmlwc19kcmJnX3NlbGZ0ZXN0LmMgZmlwc19yYW5kX2xp Yi5jIFwKKysgICAgZmlwc19jbWFjX3NlbGZ0ZXN0LmMgZmlwc19lbmMuYyBmaXBzX21kLmMKKysK KytMSUJPQko9Zmlwc19hZXNfc2VsZnRlc3QubyBmaXBzX2Rlc19zZWxmdGVzdC5vIGZpcHNfaG1h Y19zZWxmdGVzdC5vIGZpcHNfcmFuZF9zZWxmdGVzdC5vIFwKKysgICAgZmlwc19yc2Ffc2VsZnRl c3QubyBmaXBzX3NoYV9zZWxmdGVzdC5vIGZpcHMubyBmaXBzX2RzYV9zZWxmdGVzdC5vICBmaXBz X3JhbmQubyBcCisrICAgIGZpcHNfcnNhX3g5MzFnLm8gZmlwc19wb3N0Lm8gZmlwc19kcmJnX2N0 ci5vIGZpcHNfZHJiZ19oYXNoLm8gZmlwc19kcmJnX2htYWMubyBcCisrICAgIGZpcHNfZHJiZ19s aWIubyBmaXBzX2RyYmdfcmFuZC5vIGZpcHNfZHJiZ19zZWxmdGVzdC5vIGZpcHNfcmFuZF9saWIu byBcCisrICAgIGZpcHNfY21hY19zZWxmdGVzdC5vIGZpcHNfZW5jLm8gZmlwc19tZC5vCisrCisr TElCQ1JZUFRPPS1MLi4gLWxjcnlwdG8KKysKKytTUkM9ICQoTElCU1JDKSBmaXBzX3N0YW5kYWxv bmVfaG1hYy5jCisrCisrRVhIRUFERVI9IGZpcHMuaCBmaXBzX3JhbmQuaAorK0hFQURFUj0JJChF WEhFQURFUikKKysKKytBTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQorKworK3Rv cDoKKysJKGNkIC4uLy4uOyAkKE1BS0UpIERJUlM9Y3J5cHRvIFNESVJTPSQoRElSKSBzdWJfYWxs KQorKworK2FsbDoJbGliIGV4ZQorKworK2xpYjoJJChMSUJPQkopCisrCSQoQVIpICQoTElCKSAk KExJQk9CSikKKysJJChSQU5MSUIpICQoTElCKSB8fCBlY2hvIE5ldmVyIG1pbmQuCisrCUB0b3Vj aCBsaWIKKysKKytleGU6CSQoRVhFKQorKworK2ZpbGVzOgorKwkkKFBFUkwpICQoVE9QKS91dGls L2ZpbGVzLnBsIE1ha2VmaWxlID4+ICQoVE9QKS9NSU5GTworKworK2xpbmtzOgorKwlAJChQRVJM KSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhIRUFERVIp CisrCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkKKysJ QCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQorKworK2lu c3RhbGw6CisrCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3Ag TWFrZWZpbGUuLi4KKysJQGhlYWRlcmxpc3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4gJCRoZWFk ZXJsaXN0IDsgXAorKwlkbyAgXAorKwkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxM VE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpOyBcCisrCWNobW9kIDY0NCAkKElOU1RBTExfUFJFRklY KSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaSApOyBcCisrCWRvbmU7CisrCisrdGFn czoKKysJY3RhZ3MgJChTUkMpCisrCisrdGVzdHM6CisrCisrbGludDoKKysJbGludCAtRExJTlQg JChJTkNMVURFUykgJChTUkMpPmZsdWZmCisrCisrZGVwZW5kOgorKwlAWyAtbiAiJChNQUtFREVQ RU5EKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdXBwZXIgTWFrZWZpbGUuLi4KKysJJChNQUtFREVQ RU5EKSAtLSAkKENGTEFHKSAkKElOQ0xVREVTKSAkKERFUEZMQUcpIC0tICQoUFJPR1MpICQoTElC U1JDKQorKworK2RjbGVhbjoKKysJJChQRVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERFTEVURSBU SElTIExJTkUvKSB7cHJpbnQ7IGV4aXQoMCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxlLm5ldwor KwltdiAtZiBNYWtlZmlsZS5uZXcgJChNQUtFRklMRSkKKysKKytjbGVhbjoKKysJcm0gLWYgKi5v ICoub2JqIGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKKysKKysk KEVYRSk6ICQoUFJPR1JBTSkubworKwlGSVBTX1NIQV9BU009IiI7IGZvciBpIGluICQoU0hBMV9B U01fT0JKKSBzaGEyNTYubzsgZG8gRklQU19TSEFfQVNNPSIkJEZJUFNfU0hBX0FTTSAuLi9zaGEv JCRpIiA7IGRvbmU7IFwKKysJZm9yIGkgaW4gJChDUFVJRF9PQkopOyBkbyBGSVBTX1NIQV9BU009 IiQkRklQU19TSEFfQVNNIC4uLyQkaSIgOyBkb25lOyBcCisrCSQoQ0MpIC1vICRAICQoQ0ZMQUdT KSAkKFBST0dSQU0pLm8gJCRGSVBTX1NIQV9BU00KKysKKysjIERPIE5PVCBERUxFVEUgVEhJUyBM SU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCisrCisrZmlwcy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorK2ZpcHMubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8u aAorK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Zp cHNfcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKKytmaXBzLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytm aXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2xjb25mLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns di5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZmlwcy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAorK2ZpcHMubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z dGFjay5oCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzLmMg Zmlwc19sb2NsLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAor K2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqX21hYy5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29iamVjdHMuaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3NsY29uZi5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2x2LmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3NzbF90eXAuaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zYWZlc3RhY2suaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zdGFjay5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5 bWhhY2tzLmggZmlwc19hZXNfc2VsZnRlc3QuYworK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlw c19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19k ZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vyci5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX2Rlc19zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2Rlc19zZWxmdGVzdC5jCisrZmlwc19kcmJn X2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2FzbjEuaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrZmlwc19k cmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9maXBzX3JhbmQuaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19kcmJnX2N0ci5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19kcmJnX2N0ci5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKKytmaXBz X2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfZHJi Z19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N5bWhhY2tzLmgKKytmaXBzX2RyYmdfY3RyLm86IGZpcHNfZHJiZ19jdHIuYyBmaXBzX3Jh bmRfbGNsLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBz X2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXZwLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Zmlwcy5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFu ZC5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCisrZmlwc19kcmJnX2hh c2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19kcmJnX2hhc2gu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2RyYmdfaGFzaC5jCisrZmlwc19kcmJn X2hhc2gubzogZmlwc19yYW5kX2xjbC5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBzX2RyYmdf aG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2NyeXB0by5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3My LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9maXBzX3JhbmQuaAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfZHJiZ19o bWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2RyYmdfaG1hYy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfZHJiZ19obWFjLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19kcmJnX2htYWMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQu aAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAor K2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19k cmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kcmJnX2ht YWMuYworK2ZpcHNfZHJiZ19obWFjLm86IGZpcHNfcmFuZF9sY2wuaAorK2ZpcHNfZHJiZ19saWIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24x LmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfZHJiZ19s aWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9m aXBzLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisr Zmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19k cmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfZHJi Z19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX2RyYmdfbGli Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9yYW5kLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3Rh Y2suaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKKytmaXBzX2RyYmdfbGliLm86IGZpcHNfZHJi Z19saWIuYyBmaXBzX2xvY2wuaCBmaXBzX3JhbmRfbGNsLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAor K2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytmaXBzX2RyYmdfcmFu ZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Zp cHMuaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQu aAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29iamVjdHMuaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3NsY29uZi5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2x2LmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90 eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCisrZmlwc19kcmJnX3JhbmQubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2RyYmdfcmFuZC5jCisrZmlwc19kcmJnX3JhbmQubzog Zmlwc19yYW5kX2xjbC5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisrZmlwc19kcmJnX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX2RyYmdfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5o CisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvaG1hYy5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29iamVjdHMuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvcmFuZC5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc3RhY2suaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc3ltaGFja3MuaCBmaXBzX2RyYmdfc2VsZnRlc3QuYworK2ZpcHNfZHJiZ19zZWxmdGVzdC5v OiBmaXBzX2RyYmdfc2VsZnRlc3QuaCBmaXBzX2xvY2wuaCBmaXBzX3JhbmRfbGNsLmgKKytmaXBz X2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfZHNhX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZV9vczIuaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisr Zmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2Zp cHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBz X2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2Zp cHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlw c19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBz X2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBz X2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfZHNh X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHNhX3Nl bGZ0ZXN0LmMKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiBmaXBzX2xvY2wuaAorK2ZpcHNfaG1hY19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9iaW8uaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Y3J5cHRvLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vf b3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5o CisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKKytm aXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBz X2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNf aG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19o bWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlw c19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlw c19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZmlw c19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2Zp cHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNf aG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2ht YWNfc2VsZnRlc3QuYworK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19wb3N0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9v czIuaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2V2cC5oCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9m aXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCisrZmlwc19wb3N0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgK KytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3NsY29uZi5oCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZmlwc19wb3N0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCisr Zmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3ltaGFja3MuaCBmaXBzX2xvY2wuaCBmaXBzX3Bvc3QuYworK2ZpcHNfcmFuZC5vOiAuLi8uLi9l X29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oCisrZmlwc19yYW5kLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19y YW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZV9vczIuaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCisrZmlwc19yYW5k Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xo YXNoLmgKKytmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZmlwc19yYW5k Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Nh ZmVzdGFjay5oCisrZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCisrZmlwc19yYW5kLm86IGZpcHNfbG9jbC5o IGZpcHNfcmFuZC5jCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Flcy5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfcmFuZF9saWIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5o CisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2V2cC5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAorK2ZpcHNfcmFuZF9s aWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv bGhhc2guaAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMu aAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2Zp cHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBz X3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19yYW5k X2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvcmFuZC5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2Fm ZXN0YWNrLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCisrZmlwc19yYW5kX2xpYi5vOiBmaXBz X3JhbmRfbGliLmMKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBzX3JhbmRfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytm aXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9obWFjLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2xoYXNoLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29ial9tYWMuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3NsY29uZi5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3Nsdi5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vc3NsX3R5cC5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9yYW5kLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3NhZmVzdGFjay5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zdGFjay5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z eW1oYWNrcy5oIGZpcHNfbG9jbC5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IGZpcHNfcmFuZF9z ZWxmdGVzdC5jCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Fz bjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgK KytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfcnNh X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19yc2Ffc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfcnNhX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX3JzYV9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfcnNhX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19yc2Ffc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX3JzYV9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfcnNhX3NlbGZ0ZXN0LmMKKytmaXBzX3Jz YV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9iaW8uaAorK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2Zp cHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3Nsdi5oCisrZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29z c2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCisrZmlwc19yc2FfeDkzMWcubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19yc2FfeDkzMWcubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX3JzYV94OTMxZy5jCisrZmlwc19zaGFfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YmlvLmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRv LmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNf c2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19zaGFf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfc2hhX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX3NoYV9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfc2hhX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19zaGFfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX3NoYV9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX3NoYV9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N0YWNrLmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3lt aGFja3MuaCBmaXBzX3NoYV9zZWxmdGVzdC5jCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9jcnlw dG8vaG1hYy9obWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vaG1hYy9obWFjLmMKKy0t LSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vaG1hYy9obWFjLmMuZmlwcwkyMDE1LTAxLTA4IDE1OjAw OjM2LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9obWFjL2htYWMu YwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU2ODkyMjY3NSArMDEwMAorQEAgLTgxLDExICs4MSw2IEBA IGludCBITUFDX0luaXRfZXgoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm8KKyAJCQlFVlBlcnIoRVZQ X0ZfSE1BQ19JTklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7CisgCQkJcmV0dXJuIDA7 CisgCQkJfQorLQkJLyogT3RoZXIgYWxnb3JpdGhtIGJsb2NraW5nIHdpbGwgYmUgZG9uZSBpbiBG SVBTX2NtYWNfaW5pdCwKKy0JCSAqIHZpYSBGSVBTX2htYWNfaW5pdF9leCgpLgorLQkJICovCist CQlpZiAoIWltcGwgJiYgIWN0eC0+aV9jdHguZW5naW5lKQorLQkJCXJldHVybiBGSVBTX2htYWNf aW5pdF9leChjdHgsIGtleSwgbGVuLCBtZCwgTlVMTCk7CisgCQl9CisgI2VuZGlmCisgCitAQCAt OTksNiArOTQsMTMgQEAgaW50IEhNQUNfSW5pdF9leChITUFDX0NUWCAqY3R4LCBjb25zdCB2bwor IAorIAlpZiAoa2V5ICE9IE5VTEwpCisgCQl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJaWYg KEZJUFNfbW9kZSgpICYmICEobWQtPmZsYWdzICYgRVZQX01EX0ZMQUdfRklQUykKKysJCSYmICgh KGN0eC0+bWRfY3R4LmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKQorKwkJ IHx8ICEoY3R4LT5pX2N0eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykK KysJCSB8fCAhKGN0eC0+b19jdHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxM T1cpKSkKKysJCQlnb3RvIGVycjsKKysjZW5kaWYKKyAJCXJlc2V0PTE7CisgCQlqPUVWUF9NRF9i bG9ja19zaXplKG1kKTsKKyAJCU9QRU5TU0xfYXNzZXJ0KGogPD0gKGludClzaXplb2YoY3R4LT5r ZXkpKTsKK0BAIC0xNTUsMTAgKzE1Nyw2IEBAIGludCBITUFDX0luaXQoSE1BQ19DVFggKmN0eCwg Y29uc3Qgdm9pZAorIAorIGludCBITUFDX1VwZGF0ZShITUFDX0NUWCAqY3R4LCBjb25zdCB1bnNp Z25lZCBjaGFyICpkYXRhLCBzaXplX3QgbGVuKQorIAl7CistI2lmZGVmIE9QRU5TU0xfRklQUwor LQlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+aV9jdHguZW5naW5lKQorLQkJcmV0dXJuIEZJUFNf aG1hY191cGRhdGUoY3R4LCBkYXRhLCBsZW4pOworLSNlbmRpZgorIAlyZXR1cm4gRVZQX0RpZ2Vz dFVwZGF0ZSgmY3R4LT5tZF9jdHgsZGF0YSxsZW4pOworIAl9CisgCitAQCAtMTY2LDEwICsxNjQs NiBAQCBpbnQgSE1BQ19GaW5hbChITUFDX0NUWCAqY3R4LCB1bnNpZ25lZCBjCisgCXsKKyAJdW5z aWduZWQgaW50IGk7CisgCXVuc2lnbmVkIGNoYXIgYnVmW0VWUF9NQVhfTURfU0laRV07CistI2lm ZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+aV9jdHguZW5naW5l KQorLQkJcmV0dXJuIEZJUFNfaG1hY19maW5hbChjdHgsIG1kLCBsZW4pOworLSNlbmRpZgorIAor IAlpZiAoIUVWUF9EaWdlc3RGaW5hbF9leCgmY3R4LT5tZF9jdHgsYnVmLCZpKSkKKyAJCWdvdG8g ZXJyOworQEAgLTIwOSwxMyArMjAzLDYgQEAgaW50IEhNQUNfQ1RYX2NvcHkoSE1BQ19DVFggKmRj dHgsIEhNQUNfQworIAorIHZvaWQgSE1BQ19DVFhfY2xlYW51cChITUFDX0NUWCAqY3R4KQorIAl7 CistI2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+aV9jdHgu ZW5naW5lKQorLQkJeworLQkJRklQU19obWFjX2N0eF9jbGVhbnVwKGN0eCk7CistCQlyZXR1cm47 CistCQl9CistI2VuZGlmCisgCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4LT5pX2N0eCk7CisgCUVW UF9NRF9DVFhfY2xlYW51cCgmY3R4LT5vX2N0eCk7CisgCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4 LT5tZF9jdHgpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL21kYzIvbWRjMmRnc3Qu Yy5maXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMKKy0tLSBvcGVuc3Ns LTEuMC4xay9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jLmZpcHMJMjAxNS0wMS0wOCAxNTowMDozNi4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vbWRjMi9tZGMyZGdzdC5j CTIwMTUtMDEtMDkgMDk6NTE6NTEuNTY4OTIyNjc1ICswMTAwCitAQCAtNzYsNyArNzYsNyBAQAor IAkJCSooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpPj4yNEwpJjB4ZmYpKQorIAorIHN0YXRp YyB2b2lkIG1kYzJfYm9keShNREMyX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNp emVfdCBsZW4pOworLWZpcHNfbWRfaW5pdChNREMyKQorK25vbmZpcHNfbWRfaW5pdChNREMyKQor IAl7CisgCWMtPm51bT0wOworIAljLT5wYWRfdHlwZT0xOworZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWsvY3J5cHRvL21kMi9tZDJfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL21kMi9t ZDJfZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRvL21kMi9tZDJfZGdzdC5jLmZpcHMJ MjAxNS0wMS0wOCAxNTowMDozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9j cnlwdG8vbWQyL21kMl9kZ3N0LmMJMjAxNS0wMS0wOSAwOTo1MTo1MS41Njg5MjI2NzUgKzAxMDAK K0BAIC02Miw2ICs2MiwxMSBAQAorICNpbmNsdWRlIDxvcGVuc3NsL21kMi5oPgorICNpbmNsdWRl IDxvcGVuc3NsL29wZW5zc2x2Lmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2lm ZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysK KysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyAKKyBjb25zdCBjaGFyIE1EMl92ZXJzaW9uW109 Ik1EMiIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorQEAgLTExNiw3ICsxMjEsNyBAQCBjb25z dCBjaGFyICpNRDJfb3B0aW9ucyh2b2lkKQorIAkJcmV0dXJuKCJtZDIoaW50KSIpOworIAl9Cisg CistZmlwc19tZF9pbml0KE1EMikKKytub25maXBzX21kX2luaXQoTUQyKQorIAl7CisgCWMtPm51 bT0wOworIAltZW1zZXQoYy0+c3RhdGUsMCxzaXplb2YgYy0+c3RhdGUpOworZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWsvY3J5cHRvL21kNC9tZDRfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5 cHRvL21kNC9tZDRfZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRvL21kNC9tZDRfZGdz dC5jLmZpcHMJMjAxNS0wMS0wOCAxNTowMDozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4xay9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMJMjAxNS0wMS0wOSAwOTo1MTo1MS41Njk5MjI2 OTggKzAxMDAKK0BAIC03MSw3ICs3MSw3IEBAIGNvbnN0IGNoYXIgTUQ0X3ZlcnNpb25bXT0iTUQ0 IiBPUEVOU1NMX1YKKyAjZGVmaW5lIElOSVRfREFUQV9DICh1bnNpZ25lZCBsb25nKTB4OThiYWRj ZmVMCisgI2RlZmluZSBJTklUX0RBVEFfRCAodW5zaWduZWQgbG9uZykweDEwMzI1NDc2TAorIAor LWZpcHNfbWRfaW5pdChNRDQpCisrbm9uZmlwc19tZF9pbml0KE1ENCkKKyAJeworIAltZW1zZXQg KGMsMCxzaXplb2YoKmMpKTsKKyAJYy0+QT1JTklUX0RBVEFfQTsKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjFrL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9t ZDUvbWQ1X2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYy5m aXBzCTIwMTUtMDEtMDggMTU6MDA6MzYuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAu MWsvY3J5cHRvL21kNS9tZDVfZGdzdC5jCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTY5OTIyNjk4ICsw MTAwCitAQCAtNzEsNyArNzEsNyBAQCBjb25zdCBjaGFyIE1ENV92ZXJzaW9uW109Ik1ENSIgT1BF TlNTTF9WCisgI2RlZmluZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAor ICNkZWZpbmUgSU5JVF9EQVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKKyAKKy1maXBz X21kX2luaXQoTUQ1KQorK25vbmZpcHNfbWRfaW5pdChNRDUpCisgCXsKKyAJbWVtc2V0IChjLDAs c2l6ZW9mKCpjKSk7CisgCWMtPkE9SU5JVF9EQVRBX0E7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4x ay9jcnlwdG8vb19maXBzLmMuZmlwcyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vb19maXBzLmMKKy0t LSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vb19maXBzLmMuZmlwcwkyMDE1LTAxLTA4IDE1OjAwOjM2 LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9vX2ZpcHMuYwkyMDE1 LTAxLTA5IDA5OjUxOjUxLjU2OTkyMjY5OCArMDEwMAorQEAgLTc5LDYgKzc5LDggQEAgaW50IEZJ UFNfbW9kZV9zZXQoaW50IHIpCisgI2lmbmRlZiBGSVBTX0FVVEhfVVNFUl9QQVNTCisgI2RlZmlu ZSBGSVBTX0FVVEhfVVNFUl9QQVNTCSJEZWZhdWx0IEZJUFMgQ3J5cHRvIFVzZXIgUGFzc3dvcmQi CisgI2VuZGlmCisrCWlmIChyICYmIEZJUFNfbW9kdWxlX21vZGUoKSkgLyogY2FuIGJlIGltcGxp Y2l0bHkgaW5pdGlhbGl6ZWQgYnkgT1BFTlNTTF9pbml0KCkgKi8KKysJCXJldHVybiAxOworIAlp ZiAoIUZJUFNfbW9kdWxlX21vZGVfc2V0KHIsIEZJUFNfQVVUSF9VU0VSX1BBU1MpKQorIAkJcmV0 dXJuIDA7CisgCWlmIChyKQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL29faW5pdC5j LmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL29faW5pdC5jCistLS0gb3BlbnNzbC0xLjAuMWsv Y3J5cHRvL29faW5pdC5jLmZpcHMJMjAxNC0xMC0xNSAxNTo0OToxNS4wMDAwMDAwMDAgKzAyMDAK KysrKyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vb19pbml0LmMJMjAxNS0wMS0wOSAwOTo1MTo1MS41 Njk5MjI2OTggKzAxMDAKK0BAIC01NSwyOCArNTUsNjggQEAKKyAjaW5jbHVkZSA8ZV9vcy5oPgor ICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorICNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVk ZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2luY2x1ZGUgPGZjbnRs Lmg+CisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRl IDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisgI2luY2x1ZGUgPG9wZW5z c2wvcmFuZC5oPgorKworKyNkZWZpbmUgRklQU19NT0RFX1NXSVRDSF9GSUxFICIvcHJvYy9zeXMv Y3J5cHRvL2ZpcHNfZW5hYmxlZCIKKysKKytzdGF0aWMgdm9pZCBpbml0X2ZpcHNfbW9kZSh2b2lk KQorKwl7CisrCWNoYXIgYnVmWzJdID0gIjAiOworKwlpbnQgZmQ7CisrCQorKwlpZiAoZ2V0ZW52 KCJPUEVOU1NMX0ZPUkNFX0ZJUFNfTU9ERSIpICE9IE5VTEwpCisrCQl7CisrCQlidWZbMF0gPSAn MSc7CisrCQl9CisrCWVsc2UgaWYgKChmZCA9IG9wZW4oRklQU19NT0RFX1NXSVRDSF9GSUxFLCBP X1JET05MWSkpID49IDApCisrCQl7CisrCQl3aGlsZSAocmVhZChmZCwgYnVmLCBzaXplb2YoYnVm KSkgPCAwICYmIGVycm5vID09IEVJTlRSKTsKKysJCWNsb3NlKGZkKTsKKysJCX0KKysJLyogRmFp bHVyZSByZWFkaW5nIHRoZSBmaXBzIG1vZGUgc3dpdGNoIGZpbGUgbWVhbnMganVzdCBub3QKKysJ ICogc3dpdGNoaW5nIGludG8gRklQUyBtb2RlLiBXZSB3b3VsZCBicmVhayB0b28gbWFueSB0aGlu Z3MKKysJICogb3RoZXJ3aXNlLiAKKysJICovCisrCQorKwlpZiAoYnVmWzBdID09ICcxJykKKysJ CXsKKysJCUZJUFNfbW9kZV9zZXQoMSk7CisrCQl9CisrCX0KKyAjZW5kaWYKKyAKKyAvKiBQZXJm b3JtIGFueSBlc3NlbnRpYWwgT3BlblNTTCBpbml0aWFsaXphdGlvbiBvcGVyYXRpb25zLgorICAq IEN1cnJlbnRseSBvbmx5IHNldHMgRklQUyBjYWxsYmFja3MKKyAgKi8KKyAKKy12b2lkIE9QRU5T U0xfaW5pdCh2b2lkKQorK3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCkKKyAJeworIAlz dGF0aWMgaW50IGRvbmUgPSAwOworIAlpZiAoZG9uZSkKKyAJCXJldHVybjsKKyAJZG9uZSA9IDE7 CisgI2lmZGVmIE9QRU5TU0xfRklQUworLQlGSVBTX3NldF9sb2NraW5nX2NhbGxiYWNrcyhDUllQ VE9fbG9jaywgQ1JZUFRPX2FkZF9sb2NrKTsKKy0JRklQU19zZXRfZXJyb3JfY2FsbGJhY2tzKEVS Ul9wdXRfZXJyb3IsIEVSUl9hZGRfZXJyb3JfdmRhdGEpOworLQlGSVBTX3NldF9tYWxsb2NfY2Fs bGJhY2tzKENSWVBUT19tYWxsb2MsIENSWVBUT19mcmVlKTsKKyAJUkFORF9pbml0X2ZpcHMoKTsK KysJaW5pdF9maXBzX21vZGUoKTsKKysJaWYgKCFGSVBTX21vZGUoKSkKKysJCXsKKysJCS8qIENs ZWFuIHVwIHByZW1hdHVyZWx5IHNldCBkZWZhdWx0IHJhbmQgbWV0aG9kICovCisrCQlSQU5EX3Nl dF9yYW5kX21ldGhvZChOVUxMKTsKKysJCX0KKyAjZW5kaWYKKyAjaWYgMAorIAlmcHJpbnRmKHN0 ZGVyciwgIkNhbGxlZCBPUEVOU1NMX2luaXRcbiIpOworICNlbmRpZgorIAl9CisgCisrdm9pZCBP UEVOU1NMX2luaXQodm9pZCkKKysJeworKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOworKwl9Citk aWZmIC11cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbi5maXBzIG9wZW5z c2wtMS4wLjFrL2NyeXB0by9vcGVuc3NsY29uZi5oLmluCistLS0gb3BlbnNzbC0xLjAuMWsvY3J5 cHRvL29wZW5zc2xjb25mLmguaW4uZmlwcwkyMDE1LTAxLTA4IDE1OjAwOjM2LjAwMDAwMDAwMCAr MDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9vcGVuc3NsY29uZi5oLmluCTIwMTUtMDEt MDkgMDk6NTE6NTEuNTY5OTIyNjk4ICswMTAwCitAQCAtMSw1ICsxLDIwIEBACisgLyogY3J5cHRv L29wZW5zc2xjb25mLmguaW4gKi8KKyAKKysjaWZkZWYgT1BFTlNTTF9ET0lOR19NQUtFREVQRU5E CisrCisrLyogSW5jbHVkZSBhbnkgc3ltYm9scyBoZXJlIHRoYXQgaGF2ZSB0byBiZSBleHBsaWNp dGx5IHNldCB0byBlbmFibGUgYSBmZWF0dXJlCisrICogdGhhdCBzaG91bGQgYmUgdmlzaWJsZSB0 byBtYWtlZGVwZW5kLgorKyAqCisrICogW091ciAibWFrZSBkZXBlbmQiIGRvZXNuJ3QgYWN0dWFs bHkgbG9vayBhdCB0aGlzLCB3ZSB1c2UgYWN0dWFsIGJ1aWxkIHNldHRpbmdzCisrICogaW5zdGVh ZDsgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgdG8gcmVtb3ZlIHN1YmRpcmVjdG9yaWVzIHdpdGgg ZGlzYWJsZWQgYWxnb3JpdGhtcy5dCisrICovCisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysj ZGVmaW5lIE9QRU5TU0xfRklQUworKyNlbmRpZgorKworKyNlbmRpZgorKworIC8qIEdlbmVyYXRl IDgwMzg2IGNvZGU/ICovCisgI3VuZGVmIEkzODZfT05MWQorIAorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWsvY3J5cHRvL3JhbmQvbWRfcmFuZC5jLmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL3Jh bmQvbWRfcmFuZC5jCistLS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRvL3JhbmQvbWRfcmFuZC5jLmZp cHMJMjAxNS0wMS0wOCAxNTowMDozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4x ay9jcnlwdG8vcmFuZC9tZF9yYW5kLmMJMjAxNS0wMS0wOSAwOTo1MTo1MS41NzA5MjI3MjEgKzAx MDAKK0BAIC0zOTEsNyArMzkxLDEwIEBAIGludCBzc2xlYXlfcmFuZF9ieXRlcyh1bnNpZ25lZCBj aGFyICpidWYKKyAJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQyKTsKKyAJY3J5cHRv X2xvY2tfcmFuZCA9IDE7CisgCistCWlmICghaW5pdGlhbGl6ZWQpCisrCS8qIGFsd2F5cyBwb2xs IGZvciBleHRlcm5hbCBlbnRyb3B5IGluIEZJUFMgbW9kZSwgZHJiZyBwcm92aWRlcyB0aGUgCisr CSAqIGV4cGFuc2lvbgorKwkgKi8KKysJaWYgKCFpbml0aWFsaXplZCB8fCBGSVBTX21vZHVsZV9t b2RlKCkpIAorIAkJeworIAkJUkFORF9wb2xsKCk7CisgCQlpbml0aWFsaXplZCA9IDE7CitkaWZm IC11cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8vcmFuZC9yYW5kLmguZmlwcyBvcGVuc3NsLTEuMC4x ay9jcnlwdG8vcmFuZC9yYW5kLmgKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vcmFuZC9yYW5k LmguZmlwcwkyMDE1LTAxLTA5IDA5OjUxOjUxLjAyMDkxMDI4MiArMDEwMAorKysrIG9wZW5zc2wt MS4wLjFrL2NyeXB0by9yYW5kL3JhbmQuaAkyMDE1LTAxLTA5IDA5OjUxOjUxLjU3MDkyMjcyMSAr MDEwMAorQEAgLTEzMywxNiArMTMzLDM0IEBAIHZvaWQgRVJSX2xvYWRfUkFORF9zdHJpbmdzKHZv aWQpOworIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgUkFORCBmdW5jdGlvbnMuICovCisgCisgLyog RnVuY3Rpb24gY29kZXMuICovCisrI2RlZmluZSBSQU5EX0ZfRU5HX1JBTkRfR0VUX1JBTkRfTUVU SE9ECQkJIDEwOAorKyNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORAkJCQkgMTAzCisrI2RlZmluZSBS QU5EX0ZfRklQU19SQU5EX0JZVEVTCQkJCSAxMDIKKysjZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkRf U0VUX0RUCQkJCSAxMDYKKysjZGVmaW5lIFJBTkRfRl9GSVBTX1g5MzFfU0VUX0RUCQkJCSAxMDYK KysjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9EVAkJCQkgMTA0CisrI2RlZmluZSBSQU5EX0ZfRklQ U19TRVRfUFJOR19TRUVECQkJIDEwNworKyNkZWZpbmUgUkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9E RQkJCSAxMDUKKyAjZGVmaW5lIFJBTkRfRl9SQU5EX0dFVF9SQU5EX01FVEhPRAkJCSAxMDEKKy0j ZGVmaW5lIFJBTkRfRl9SQU5EX0lOSVRfRklQUwkJCQkgMTAyCisrI2RlZmluZSBSQU5EX0ZfUkFO RF9JTklUX0ZJUFMJCQkJIDEwOQorICNkZWZpbmUgUkFORF9GX1NTTEVBWV9SQU5EX0JZVEVTCQkJ IDEwMAorIAorIC8qIFJlYXNvbiBjb2Rlcy4gKi8KKy0jZGVmaW5lIFJBTkRfUl9EVUFMX0VDX0RS QkdfRElTQUJMRUQJCQkgMTA0CistI2RlZmluZSBSQU5EX1JfRVJST1JfSU5JVElBTElTSU5HX0RS QkcJCQkgMTAyCistI2RlZmluZSBSQU5EX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHCQkJIDEw MworLSNkZWZpbmUgUkFORF9SX05PX0ZJUFNfUkFORE9NX01FVEhPRF9TRVQJCSAxMDEKKysjZGVm aW5lIFJBTkRfUl9EVUFMX0VDX0RSQkdfRElTQUJMRUQJCQkgMTE0CisrI2RlZmluZSBSQU5EX1Jf RVJST1JfSU5JVElBTElTSU5HX0RSQkcJCQkgMTEyCisrI2RlZmluZSBSQU5EX1JfRVJST1JfSU5T VEFOVElBVElOR19EUkJHCQkJIDExMworKyNkZWZpbmUgUkFORF9SX05PTl9GSVBTX01FVEhPRAkJ CQkgMTA1CisrI2RlZmluZSBSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERQkJCQkgMTA2CisrI2RlZmlu ZSBSQU5EX1JfTk9fRklQU19SQU5ET01fTUVUSE9EX1NFVAkJIDExMQorKyNkZWZpbmUgUkFORF9S X05PX0tFWV9TRVQJCQkJIDEwNworKyNkZWZpbmUgUkFORF9SX1BSTkdfQVNLSU5HX0ZPUl9UT09f TVVDSAkJCSAxMDEKKysjZGVmaW5lIFJBTkRfUl9QUk5HX0VSUk9SCQkJCSAxMDgKKysjZGVmaW5l IFJBTkRfUl9QUk5HX0tFWUVECQkJCSAxMDkKKysjZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9SRUtF WUVECQkJCSAxMDIKKysjZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9SRVNFRURFRAkJCSAxMDMKKyAj ZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9TRUVERUQJCQkJIDEwMAorKyNkZWZpbmUgUkFORF9SX1BS TkdfU0VFRF9NVVNUX05PVF9NQVRDSF9LRVkJCSAxMTAKKysjZGVmaW5lIFJBTkRfUl9QUk5HX1NU VUNLCQkJCSAxMDQKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCisgfQorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWsvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5 cHRvL3JpcGVtZC9ybWRfZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRvL3JpcGVtZC9y bWRfZGdzdC5jLmZpcHMJMjAxNS0wMS0wOCAxNTowMDozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBv cGVuc3NsLTEuMC4xay9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMJMjAxNS0wMS0wOSAwOTo1MTo1 MS41NzA5MjI3MjEgKzAxMDAKK0BAIC03MCw3ICs3MCw3IEBAIGNvbnN0IGNoYXIgUk1EMTYwX3Zl cnNpb25bXT0iUklQRS1NRDE2MCIKKyAgICAgIHZvaWQgcmlwZW1kMTYwX2Jsb2NrKFJJUEVNRDE2 MF9DVFggKmMsIHVuc2lnbmVkIGxvbmcgKnAsc2l6ZV90IG51bSk7CisgIyAgZW5kaWYKKyAKKy1m aXBzX21kX2luaXQoUklQRU1EMTYwKQorK25vbmZpcHNfbWRfaW5pdChSSVBFTUQxNjApCisgCXsK KyAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMtPkE9UklQRU1EMTYwX0E7CitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8vcnNhL3JzYV9jcnB0LmMuZmlwcyBvcGVuc3NsLTEuMC4x ay9jcnlwdG8vcnNhL3JzYV9jcnB0LmMKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vcnNhL3Jz YV9jcnB0LmMuZmlwcwkyMDE1LTAxLTA4IDE1OjAwOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjFrL2NyeXB0by9yc2EvcnNhX2NycHQuYwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU3 MDkyMjcyMSArMDEwMAorQEAgLTkwLDEwICs5MCw5IEBAIGludCBSU0FfcHJpdmF0ZV9lbmNyeXB0 KGludCBmbGVuLCBjb25zdAorIAkgICAgIFJTQSAqcnNhLCBpbnQgcGFkZGluZykKKyAJeworICNp ZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFn cyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQorLQkJCSYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFH X05PTl9GSVBTX0FMTE9XKSkKKysJaWYoRklQU19tb2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNB X0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorIAkJeworLQkJUlNBZXJyKFJTQV9GX1JTQV9QUklWQVRF X0VOQ1JZUFQsIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QpOworKwkJUlNBZXJyKFJTQV9GX1JT QV9QUklWQVRFX0VOQ1JZUFQsIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01P REUpOworIAkJcmV0dXJuIC0xOworIAkJfQorICNlbmRpZgorQEAgLTExOCwxMCArMTE3LDkgQEAg aW50IFJTQV9wdWJsaWNfZGVjcnlwdChpbnQgZmxlbiwgY29uc3QgdQorIAkgICAgIFJTQSAqcnNh LCBpbnQgcGFkZGluZykKKyAJeworICNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9k ZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQorLQkJCSYm ICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKysJaWYoRklQU19tb2Rl KCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorIAkJeworLQkJ UlNBZXJyKFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhP RCk7CisrCQlSU0FlcnIoUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9PUEVSQVRJT05f Tk9UX0FMTE9XRURfSU5fRklQU19NT0RFKTsKKyAJCXJldHVybiAtMTsKKyAJCX0KKyAjZW5kaWYK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9yc2EvcnNhX2VheS5jLmZpcHMgb3BlbnNz bC0xLjAuMWsvY3J5cHRvL3JzYS9yc2FfZWF5LmMKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8v cnNhL3JzYV9lYXkuYy5maXBzCTIwMTUtMDEtMDggMTU6MDA6MzYuMDAwMDAwMDAwICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL3JzYS9yc2FfZWF5LmMJMjAxNS0wMS0wOSAwOTo1MTo1 MS41NzE5MjI3NDMgKzAxMDAKK0BAIC0xMTQsNiArMTE0LDEwIEBACisgI2luY2x1ZGUgPG9wZW5z c2wvYm4uaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9y YW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUwor KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKyAKKyAjaWZuZGVmIFJTQV9OVUxM CisgCitAQCAtMTM4LDcgKzE0Miw3IEBAIHN0YXRpYyBSU0FfTUVUSE9EIHJzYV9wa2NzMV9lYXlf bWV0aD17CisgCUJOX21vZF9leHBfbW9udCwgLyogWFhYIHByb2JhYmx5IHdlIHNob3VsZCBub3Qg dXNlIE1vbnRnb21lcnkgaWYgIGUgPT0gMyAqLworIAlSU0FfZWF5X2luaXQsCisgCVJTQV9lYXlf ZmluaXNoLAorLQkwLCAvKiBmbGFncyAqLworKwlSU0FfRkxBR19GSVBTX01FVEhPRCwgLyogZmxh Z3MgKi8KKyAJTlVMTCwKKyAJMCwgLyogcnNhX3NpZ24gKi8KKyAJMCwgLyogcnNhX3ZlcmlmeSAq LworQEAgLTE1OCw2ICsxNjIsMjQgQEAgc3RhdGljIGludCBSU0FfZWF5X3B1YmxpY19lbmNyeXB0 KGludCBmbAorIAl1bnNpZ25lZCBjaGFyICpidWY9TlVMTDsKKyAJQk5fQ1RYICpjdHg9TlVMTDsK KyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfbW9kZSgpKQorKwkJeworKwkJaWYg KEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX1JTQV9F QVlfUFVCTElDX0VOQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCQlnb3Rv IGVycjsKKysJCQl9CisrCisrCQlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNf QUxMT1cpCisrCQkJJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01J Tl9NT0RVTFVTX0JJVFMpKQorKwkJCXsKKysJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNf RU5DUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCQlyZXR1cm4gLTE7CisrCQkJ fQorKwkJfQorKyNlbmRpZgorKworIAlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5TU0xf UlNBX01BWF9NT0RVTFVTX0JJVFMpCisgCQl7CisgCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJM SUNfRU5DUllQVCwgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UpOworQEAgLTM2MSw2ICszODMsMjQg QEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZW5jcnlwdChpbnQgZgorIAlCSUdOVU0gKnVu YmxpbmQgPSBOVUxMOworIAlCTl9CTElORElORyAqYmxpbmRpbmcgPSBOVUxMOworIAorKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJeworKwkJaWYoRklQU19zZWxm dGVzdF9mYWlsZWQoKSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QUklWQVRF X0VOQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCQlyZXR1cm4gLTE7Cisr CQkJfQorKworKwkJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQor KwkJCSYmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxV U19CSVRTKSkKKysJCQl7CisrCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBU LCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJCXJldHVybiAtMTsKKysJCQl9CisrCQl9 CisrI2VuZGlmCisrCisgCWlmICgoY3R4PUJOX0NUWF9uZXcoKSkgPT0gTlVMTCkgZ290byBlcnI7 CisgCUJOX0NUWF9zdGFydChjdHgpOworIAlmICAgPSBCTl9DVFhfZ2V0KGN0eCk7CitAQCAtNTA0 LDYgKzU0NCwyNCBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9kZWNyeXB0KGludCBmCisg CUJJR05VTSAqdW5ibGluZCA9IE5VTEw7CisgCUJOX0JMSU5ESU5HICpibGluZGluZyA9IE5VTEw7 CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkpCisrCQl7CisrCQlp ZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9SU0Ff RUFZX1BSSVZBVEVfREVDUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJCXJl dHVybiAtMTsKKysJCQl9CisrCisrCQlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJ UFNfQUxMT1cpCisrCQkJJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBT X01JTl9NT0RVTFVTX0JJVFMpKQorKwkJCXsKKysJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QUklW QVRFX0RFQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQkJcmV0dXJuIC0xOwor KwkJCX0KKysJCX0KKysjZW5kaWYKKysKKyAJaWYoKGN0eCA9IEJOX0NUWF9uZXcoKSkgPT0gTlVM TCkgZ290byBlcnI7CisgCUJOX0NUWF9zdGFydChjdHgpOworIAlmICAgPSBCTl9DVFhfZ2V0KGN0 eCk7CitAQCAtNjM5LDYgKzY5NywyNCBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2RlY3J5 cHQoaW50IGZsCisgCXVuc2lnbmVkIGNoYXIgKmJ1Zj1OVUxMOworIAlCTl9DVFggKmN0eD1OVUxM OworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJeworKwkJ aWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfUlNB X0VBWV9QVUJMSUNfREVDUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJCWdv dG8gZXJyOworKwkJCX0KKysKKysJCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQ U19BTExPVykKKysJCQkmJiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNf TUlOX01PRFVMVVNfQklUUykpCisrCQkJeworKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJ Q19ERUNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJCXJldHVybiAtMTsKKysJ CQl9CisrCQl9CisrI2VuZGlmCisrCisgCWlmIChCTl9udW1fYml0cyhyc2EtPm4pID4gT1BFTlNT TF9SU0FfTUFYX01PRFVMVVNfQklUUykKKyAJCXsKKyAJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BV QkxJQ19ERUNSWVBULCBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7CitAQCAtODk3LDYgKzk3Myw5 IEBAIGVycjoKKyAKKyBzdGF0aWMgaW50IFJTQV9lYXlfaW5pdChSU0EgKnJzYSkKKyAJeworKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAly c2EtPmZsYWdzfD1SU0FfRkxBR19DQUNIRV9QVUJMSUN8UlNBX0ZMQUdfQ0FDSEVfUFJJVkFURTsK KyAJcmV0dXJuKDEpOworIAl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8vcnNhL3Jz YV9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9yc2EvcnNhX2Vyci5jCistLS0gb3Bl bnNzbC0xLjAuMWsvY3J5cHRvL3JzYS9yc2FfZXJyLmMuZmlwcwkyMDE1LTAxLTA4IDE1OjAwOjM2 LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9yc2EvcnNhX2Vyci5j CTIwMTUtMDEtMDkgMDk6NTE6NTEuNTcxOTIyNzQzICswMTAwCitAQCAtMTIxLDYgKzEyMSw4IEBA IHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgUlNBX3N0cl9mdW5jdHNbXT0KKyB7RVJSX0ZVTkMoUlNB X0ZfUlNBX1BVQkxJQ19FTkNSWVBUKSwJIlJTQV9wdWJsaWNfZW5jcnlwdCJ9LAorIHtFUlJfRlVO QyhSU0FfRl9SU0FfUFVCX0RFQ09ERSksCSJSU0FfUFVCX0RFQ09ERSJ9LAorIHtFUlJfRlVOQyhS U0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcpLAkiUlNBX3NldHVwX2JsaW5kaW5nIn0sCisre0VSUl9G VU5DKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QpLAkiUlNBX3NldF9kZWZhdWx0X21ldGhv ZCJ9LAorK3tFUlJfRlVOQyhSU0FfRl9SU0FfU0VUX01FVEhPRCksCSJSU0Ffc2V0X21ldGhvZCJ9 LAorIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0lHTiksCSJSU0Ffc2lnbiJ9LAorIHtFUlJfRlVOQyhS U0FfRl9SU0FfU0lHTl9BU04xX09DVEVUX1NUUklORyksCSJSU0Ffc2lnbl9BU04xX09DVEVUX1NU UklORyJ9LAorIHtFUlJfRlVOQyhSU0FfRl9SU0FfVkVSSUZZKSwJIlJTQV92ZXJpZnkifSwKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9yc2EvcnNhX2dlbi5jLmZpcHMgb3BlbnNzbC0x LjAuMWsvY3J5cHRvL3JzYS9yc2FfZ2VuLmMKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vcnNh L3JzYV9nZW4uYy5maXBzCTIwMTUtMDEtMDggMTU6MDA6MzYuMDAwMDAwMDAwICswMTAwCisrKysg b3BlbnNzbC0xLjAuMWsvY3J5cHRvL3JzYS9yc2FfZ2VuLmMJMjAxNS0wMS0wOSAwOTo1MTo1MS41 NzE5MjI3NDMgKzAxMDAKK0BAIC02OSw2ICs2OSw3OCBAQAorICNpbmNsdWRlIDxvcGVuc3NsL3Jz YS5oPgorICNpZmRlZiBPUEVOU1NMX0ZJUFMKKyAjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrCisr c3RhdGljIGludCBmaXBzX3JzYV9wYWlyd2lzZV9mYWlsID0gMDsKKysKKyt2b2lkIEZJUFNfY29y cnVwdF9yc2Ffa2V5Z2VuKHZvaWQpCisrCXsKKysJZmlwc19yc2FfcGFpcndpc2VfZmFpbCA9IDE7 CisrCX0KKysKKytpbnQgZmlwc19jaGVja19yc2EoUlNBICpyc2EpCisrCXsKKysJY29uc3QgdW5z aWduZWQgY2hhciB0YnNbXSA9ICJSU0EgUGFpcndpc2UgQ2hlY2sgRGF0YSI7CisrCXVuc2lnbmVk IGNoYXIgKmN0YnVmID0gTlVMTCwgKnB0YnVmID0gTlVMTDsKKysJaW50IGxlbiwgcmV0ID0gMDsK KysJRVZQX1BLRVkgKnBrOworKworKwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQor KwkJZ290byBlcnI7CisrCisrCUVWUF9QS0VZX3NldDFfUlNBKHBrLCByc2EpOworKworKwkvKiBQ ZXJmb3JtIHBhaXJ3aXNlIGNvbnNpc3RlbmN5IHNpZ25hdHVyZSB0ZXN0ICovCisrCWlmICghZmlw c19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAorKwkJCU5VTEwsIDAsIEVWUF9zaGEx KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsIE5VTEwpCisrCQl8fCAhZmlwc19wa2V5X3Np Z25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAorKwkJCU5VTEwsIDAsIEVWUF9zaGExKCksIEVWUF9N RF9DVFhfRkxBR19QQURfWDkzMSwgTlVMTCkKKysJCXx8ICFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3QocGssIHRicywgLTEsCisrCQkJTlVMTCwgMCwgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFH X1BBRF9QU1MsIE5VTEwpKQorKwkJZ290byBlcnI7CisrCS8qIE5vdyBwZXJmb3JtIHBhaXJ3aXNl IGNvbnNpc3RlbmN5IGVuY3J5cHQvZGVjcnlwdCB0ZXN0ICovCisrCWN0YnVmID0gT1BFTlNTTF9t YWxsb2MoUlNBX3NpemUocnNhKSk7CisrCWlmICghY3RidWYpCisrCQlnb3RvIGVycjsKKysKKysJ bGVuID0gUlNBX3B1YmxpY19lbmNyeXB0KHNpemVvZih0YnMpIC0gMSwgdGJzLCBjdGJ1ZiwgcnNh LCBSU0FfUEtDUzFfUEFERElORyk7CisrCWlmIChsZW4gPD0gMCkKKysJCWdvdG8gZXJyOworKwkv KiBDaGVjayBjaXBoZXJ0ZXh0IGRvZXNuJ3QgbWF0Y2ggcGxhaW50ZXh0ICovCisrCWlmICgobGVu ID09IChzaXplb2YodGJzKSAtIDEpKSAmJiAhbWVtY21wKHRicywgY3RidWYsIGxlbikpCisrCQln b3RvIGVycjsKKysJcHRidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShyc2EpKTsKKysKKysJ aWYgKCFwdGJ1ZikKKysJCWdvdG8gZXJyOworKwlsZW4gPSBSU0FfcHJpdmF0ZV9kZWNyeXB0KGxl biwgY3RidWYsIHB0YnVmLCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsKKysJaWYgKGxlbiAhPSAo c2l6ZW9mKHRicykgLSAxKSkKKysJCWdvdG8gZXJyOworKwlpZiAobWVtY21wKHB0YnVmLCB0YnMs IGxlbikpCisrCQlnb3RvIGVycjsKKysKKysJcmV0ID0gMTsKKysKKysJaWYgKCFwdGJ1ZikKKysJ CWdvdG8gZXJyOworKwkKKysJZXJyOgorKwlpZiAocmV0ID09IDApCisrCQl7CisrCQlmaXBzX3Nl dF9zZWxmdGVzdF9mYWlsKCk7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0NIRUNLX1JTQSxGSVBT X1JfUEFJUldJU0VfVEVTVF9GQUlMRUQpOworKwkJfQorKworKwlpZiAoY3RidWYpCisrCQlPUEVO U1NMX2ZyZWUoY3RidWYpOworKwlpZiAocHRidWYpCisrCQlPUEVOU1NMX2ZyZWUocHRidWYpOwor KwlpZiAocGspCisrCQlFVlBfUEtFWV9mcmVlKHBrKTsKKysKKysJcmV0dXJuIHJldDsKKysJfQor ICNlbmRpZgorIAorIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLCBpbnQg Yml0cywgQklHTlVNICplX3ZhbHVlLCBCTl9HRU5DQiAqY2IpOworQEAgLTgxLDcgKzE1Myw3IEBA IHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLAorIGludCBSU0FfZ2VuZXJh dGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVNICplX3ZhbHVlLCBCTl9HRU5DQiAq Y2IpCisgCXsKKyAjaWZkZWYgT1BFTlNTTF9GSVBTCistCWlmIChGSVBTX21vZGUoKSAmJiAhKHJz YS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkKKysJaWYgKEZJUFNfbW9kdWxl X21vZGUoKSAmJiAhKHJzYS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkKKyAJ CQkmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCisgCQl7CisgCQlS U0FlcnIoUlNBX0ZfUlNBX0dFTkVSQVRFX0tFWV9FWCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhP RCk7CitAQCAtOTAsMTAgKzE2Miw2IEBAIGludCBSU0FfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNh LCBpbnQgYmkKKyAjZW5kaWYKKyAJaWYocnNhLT5tZXRoLT5yc2Ffa2V5Z2VuKQorIAkJcmV0dXJu IHJzYS0+bWV0aC0+cnNhX2tleWdlbihyc2EsIGJpdHMsIGVfdmFsdWUsIGNiKTsKKy0jaWZkZWYg T1BFTlNTTF9GSVBTCistCWlmIChGSVBTX21vZGUoKSkKKy0JCXJldHVybiBGSVBTX3JzYV9nZW5l cmF0ZV9rZXlfZXgocnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7CistI2VuZGlmCisgCXJldHVybiBy c2FfYnVpbHRpbl9rZXlnZW4ocnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7CisgCX0KKyAKK0BAIC0x MDUsNiArMTczLDIzIEBAIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLAor IAlpbnQgYml0c3AsYml0c3Esb2s9IC0xLG49MDsKKyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZHVsZV9tb2RlKCkpCisrCQl7CisrCQlp ZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkgICAgCXsKKysJCSAgICBGSVBTZXJyKEZJUFNf Rl9SU0FfQlVJTFRJTl9LRVlHRU4sRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAg IAlyZXR1cm4gMDsKKysJICAgIAl9CisrCisrCQlpZiAoYml0cyA8IE9QRU5TU0xfUlNBX0ZJUFNf TUlOX01PRFVMVVNfQklUUykKKysJCSAgICB7CisrCQkgICAgRklQU2VycihGSVBTX0ZfUlNBX0JV SUxUSU5fS0VZR0VOLEZJUFNfUl9LRVlfVE9PX1NIT1JUKTsKKysJCSAgICByZXR1cm4gMDsKKysJ CSAgICB9CisrCQl9CisrI2VuZGlmCisrCisgCWN0eD1CTl9DVFhfbmV3KCk7CisgCWlmIChjdHgg PT0gTlVMTCkgZ290byBlcnI7CisgCUJOX0NUWF9zdGFydChjdHgpOworQEAgLTIxNiw2ICszMDEs MTcgQEAgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsCisgCQlwID0gcnNh LT5wOworIAlpZiAoIUJOX21vZF9pbnZlcnNlKHJzYS0+aXFtcCxyc2EtPnEscCxjdHgpKSBnb3Rv IGVycjsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZHVsZV9tb2RlKCkp CisrCQl7CisrCQlpZiAoZmlwc19yc2FfcGFpcndpc2VfZmFpbCkKKysJCQlCTl9hZGRfd29yZChy c2EtPm4sIDEpOworKworKwkJaWYoIWZpcHNfY2hlY2tfcnNhKHJzYSkpCisrCQkgICAgZ290byBl cnI7CisrCQl9CisrI2VuZGlmCisrCisgCW9rPTE7CisgZXJyOgorIAlpZiAob2sgPT0gLTEpCitk aWZmIC11cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8vcnNhL3JzYS5oLmZpcHMgb3BlbnNzbC0xLjAu MWsvY3J5cHRvL3JzYS9yc2EuaAorLS0tIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9yc2EvcnNhLmgu ZmlwcwkyMDE1LTAxLTA5IDA5OjUxOjUxLjE1NTkxMzMzNSArMDEwMAorKysrIG9wZW5zc2wtMS4w LjFrL2NyeXB0by9yc2EvcnNhLmgJMjAxNS0wMS0wOSAwOTo1MTo1MS41NzI5MjI3NjYgKzAxMDAK K0BAIC0xNjQsNiArMTY0LDggQEAgc3RydWN0IHJzYV9zdAorICMgZGVmaW5lIE9QRU5TU0xfUlNB X01BWF9NT0RVTFVTX0JJVFMJMTYzODQKKyAjZW5kaWYKKyAKKysjZGVmaW5lIE9QRU5TU0xfUlNB X0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0CisrCisgI2lmbmRlZiBPUEVOU1NMX1JTQV9TTUFM TF9NT0RVTFVTX0JJVFMKKyAjIGRlZmluZSBPUEVOU1NMX1JTQV9TTUFMTF9NT0RVTFVTX0JJVFMJ MzA3MgorICNlbmRpZgorQEAgLTI5MCw2ICsyOTIsMTEgQEAgUlNBICoJUlNBX2dlbmVyYXRlX2tl eShpbnQgYml0cywgdW5zaWduZQorIAorIC8qIE5ldyB2ZXJzaW9uICovCisgaW50CVJTQV9nZW5l cmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7 CisraW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0EgKnJzYSwgQklHTlVNICpwMSwgQklHTlVNICpw MiwgQklHTlVNICpxMSwgQklHTlVNICpxMiwKKysJCQljb25zdCBCSUdOVU0gKlhwMSwgY29uc3Qg QklHTlVNICpYcDIsIGNvbnN0IEJJR05VTSAqWHAsCisrCQkJY29uc3QgQklHTlVNICpYcTEsIGNv bnN0IEJJR05VTSAqWHEyLCBjb25zdCBCSUdOVU0gKlhxLAorKwkJCWNvbnN0IEJJR05VTSAqZSwg Qk5fR0VOQ0IgKmNiKTsKKytpbnQgUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBp bnQgYml0cywgY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOworIAorIGludAlSU0FfY2hl Y2tfa2V5KGNvbnN0IFJTQSAqKTsKKyAJLyogbmV4dCA0IHJldHVybiAtMSBvbiBlcnJvciAqLwor QEAgLTQ4Nyw3ICs0OTQsNyBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOworICNk ZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX05PTkUJCQkgMTA3CisgI2RlZmluZSBSU0FfRl9S U0FfUEFERElOR19BRERfUEtDUzFfT0FFUAkJIDEyMQorICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJ TkdfQUREX1BLQ1MxX1BTUwkJCSAxMjUKKy0jZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9Q S0NTMV9QU1NfTUdGMQkJIDE0OAorKyNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1Mx X1BTU19NR0YxCQkgMTU4CisgI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfVFlQ RV8xCQkgMTA4CisgI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfVFlQRV8yCQkg MTA5CisgI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfU1NMVjIzCQkJIDExMAorQEAgLTUw MCwyMCArNTA3LDIyIEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7CisgI2RlZmlu ZSBSU0FfRl9SU0FfUEFERElOR19DSEVDS19YOTMxCQkJIDEyOAorICNkZWZpbmUgUlNBX0ZfUlNB X1BSSU5UCQkJCQkgMTE1CisgI2RlZmluZSBSU0FfRl9SU0FfUFJJTlRfRlAJCQkJIDExNgorLSNk ZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfREVDUllQVAkJCSAxNTAKKy0jZGVmaW5lIFJTQV9GX1JT QV9QUklWQVRFX0VOQ1JZUFQJCQkgMTUxCisrI2RlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9ERUNS WVBUCQkJIDE1NworKyNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVAkJCSAxNDgKKyAj ZGVmaW5lIFJTQV9GX1JTQV9QUklWX0RFQ09ERQkJCQkgMTM3CisgI2RlZmluZSBSU0FfRl9SU0Ff UFJJVl9FTkNPREUJCQkJIDEzOAorLSNkZWZpbmUgUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUCQkJ IDE1MgorKyNkZWZpbmUgUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUCQkJIDE0OQorICNkZWZpbmUg UlNBX0ZfUlNBX1BVQkxJQ19FTkNSWVBUCQkJIDE1MworICNkZWZpbmUgUlNBX0ZfUlNBX1BVQl9E RUNPREUJCQkJIDEzOQorICNkZWZpbmUgUlNBX0ZfUlNBX1NFVFVQX0JMSU5ESU5HCQkJIDEzNgor KyNkZWZpbmUgUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRAkJCSAxNTAKKysjZGVmaW5lIFJT QV9GX1JTQV9TRVRfTUVUSE9ECQkJCSAxNTEKKyAjZGVmaW5lIFJTQV9GX1JTQV9TSUdOCQkJCQkg MTE3CisgI2RlZmluZSBSU0FfRl9SU0FfU0lHTl9BU04xX09DVEVUX1NUUklORwkJIDExOAorICNk ZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWQkJCQkgMTE5CisgI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZ X0FTTjFfT0NURVRfU1RSSU5HCQkgMTIwCisgI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZX1BLQ1Mx X1BTUwkJCSAxMjYKKy0jZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNTX01HRjEJCQkg MTQ5CisrI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZX1BLQ1MxX1BTU19NR0YxCQkJIDE1MgorIAor IC8qIFJlYXNvbiBjb2Rlcy4gKi8KKyAjZGVmaW5lIFJTQV9SX0FMR09SSVRITV9NSVNNQVRDSAkJ CSAxMDAKK0BAIC01NDIsMjEgKzU1MSwyMiBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZv aWQpOworICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9NR0YxX01ECQkJCSAxNTYKKyAjZGVmaW5lIFJT QV9SX0lOVkFMSURfUEFERElORwkJCQkgMTM4CisgI2RlZmluZSBSU0FfUl9JTlZBTElEX1BBRERJ TkdfTU9ERQkJCSAxNDEKKy0jZGVmaW5lIFJTQV9SX0lOVkFMSURfUFNTX1BBUkFNRVRFUlMJCQkg MTQ5CisrI2RlZmluZSBSU0FfUl9JTlZBTElEX1BTU19QQVJBTUVURVJTCQkJIDE1NworICNkZWZp bmUgUlNBX1JfSU5WQUxJRF9QU1NfU0FMVExFTgkJCSAxNDYKKy0jZGVmaW5lIFJTQV9SX0lOVkFM SURfU0FMVF9MRU5HVEgJCQkgMTUwCisrI2RlZmluZSBSU0FfUl9JTlZBTElEX1NBTFRfTEVOR1RI CQkJIDE1OAorICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9UUkFJTEVSCQkJCSAxMzkKKyAjZGVmaW5l IFJTQV9SX0lOVkFMSURfWDkzMV9ESUdFU1QJCQkgMTQyCisgI2RlZmluZSBSU0FfUl9JUU1QX05P VF9JTlZFUlNFX09GX1EJCQkgMTI2CisgI2RlZmluZSBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwJ CQkgMTIwCisgI2RlZmluZSBSU0FfUl9MQVNUX09DVEVUX0lOVkFMSUQJCQkgMTM0CisgI2RlZmlu ZSBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRQkJCQkgMTA1CistI2RlZmluZSBSU0FfUl9OT05fRklQ U19SU0FfTUVUSE9ECQkJIDE1NworKyNkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRAkJ CSAxNDkKKysjZGVmaW5lIFJTQV9SX05PTl9GSVBTX01FVEhPRAkJCQkgMTQ5CisgI2RlZmluZSBS U0FfUl9OT19QVUJMSUNfRVhQT05FTlQJCQkgMTQwCisgI2RlZmluZSBSU0FfUl9OVUxMX0JFRk9S RV9CTE9DS19NSVNTSU5HCQkJIDExMworICNkZWZpbmUgUlNBX1JfTl9ET0VTX05PVF9FUVVBTF9Q X1EJCQkgMTI3CisgI2RlZmluZSBSU0FfUl9PQUVQX0RFQ09ESU5HX0VSUk9SCQkJIDEyMQorLSNk ZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERQkgMTU4CisrI2Rl ZmluZSBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFCSAxNTAKKyAjZGVm aW5lIFJTQV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUJIDE0OAor ICNkZWZpbmUgUlNBX1JfUEFERElOR19DSEVDS19GQUlMRUQJCQkgMTE0CisgI2RlZmluZSBSU0Ff Ul9QS0NTX0RFQ09ESU5HX0VSUk9SCQkJIDE1OQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvY3J5 cHRvL3JzYS9yc2FfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vcnNhL3JzYV9saWIu YworLS0tIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9yc2EvcnNhX2xpYi5jLmZpcHMJMjAxNS0wMS0w OCAxNTowMDozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vcnNh L3JzYV9saWIuYwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU3MjkyMjc2NiArMDEwMAorQEAgLTg0LDYg Kzg0LDEzIEBAIFJTQSAqUlNBX25ldyh2b2lkKQorIAorIHZvaWQgUlNBX3NldF9kZWZhdWx0X21l dGhvZChjb25zdCBSU0FfTUVUSE9EICptZXRoKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUwor KwlpZiAoRklQU19tb2RlKCkgJiYgIShtZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9E KSkKKysJCXsKKysJCVJTQWVycihSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVUSE9ELCBSU0FfUl9O T05fRklQU19NRVRIT0QpOworKwkJcmV0dXJuOworKwkJfQorKyNlbmRpZgorIAlkZWZhdWx0X1JT QV9tZXRoID0gbWV0aDsKKyAJfQorIAorQEAgLTkxLDE4ICs5OCwxMSBAQCBjb25zdCBSU0FfTUVU SE9EICpSU0FfZ2V0X2RlZmF1bHRfbWV0aG9kCisgCXsKKyAJaWYgKGRlZmF1bHRfUlNBX21ldGgg PT0gTlVMTCkKKyAJCXsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCQlpZiAoRklQU19tb2RlKCkp CistCQkJcmV0dXJuIEZJUFNfcnNhX3BrY3MxX3NzbGVheSgpOworLQkJZWxzZQorLQkJCXJldHVy biBSU0FfUEtDUzFfU1NMZWF5KCk7CistI2Vsc2UKKyAjaWZkZWYgUlNBX05VTEwKKyAJCWRlZmF1 bHRfUlNBX21ldGg9UlNBX251bGxfbWV0aG9kKCk7CisgI2Vsc2UKKyAJCWRlZmF1bHRfUlNBX21l dGg9UlNBX1BLQ1MxX1NTTGVheSgpOworICNlbmRpZgorLSNlbmRpZgorIAkJfQorIAorIAlyZXR1 cm4gZGVmYXVsdF9SU0FfbWV0aDsKK0BAIC0xMTgsNiArMTE4LDEzIEBAIGludCBSU0Ffc2V0X21l dGhvZChSU0EgKnJzYSwgY29uc3QgUlNBX00KKyAJLyogTkI6IFRoZSBjYWxsZXIgaXMgc3BlY2lm aWNhbGx5IHNldHRpbmcgYSBtZXRob2QsIHNvIGl0J3Mgbm90IHVwIHRvIHVzCisgCSAqIHRvIGRl YWwgd2l0aCB3aGljaCBFTkdJTkUgaXQgY29tZXMgZnJvbS4gKi8KKyAJY29uc3QgUlNBX01FVEhP RCAqbXRtcDsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSAmJiAhKG1l dGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQorKwkJeworKwkJUlNBZXJyKFJTQV9G X1JTQV9TRVRfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0QpOworKwkJcmV0dXJuIDA7Cisr CQl9CisrI2VuZGlmCisgCW10bXAgPSByc2EtPm1ldGg7CisgCWlmIChtdG1wLT5maW5pc2gpIG10 bXAtPmZpbmlzaChyc2EpOworICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKK0BAIC0xNzAsNiAr MTc3LDE4IEBAIFJTQSAqUlNBX25ld19tZXRob2QoRU5HSU5FICplbmdpbmUpCisgCQkJfQorIAkJ fQorICNlbmRpZgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmICEo cmV0LT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkKKysJCXsKKysJCVJTQWVy cihSU0FfRl9SU0FfTkVXX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysjaWZuZGVm IE9QRU5TU0xfTk9fRU5HSU5FCisrCQlpZiAocmV0LT5lbmdpbmUpCisrCQkJRU5HSU5FX2Zpbmlz aChyZXQtPmVuZ2luZSk7CisrI2VuZGlmCisrCQlPUEVOU1NMX2ZyZWUocmV0KTsKKysJCXJldHVy biBOVUxMOworKwkJfQorKyNlbmRpZgorIAorIAlyZXQtPnBhZD0wOworIAlyZXQtPnZlcnNpb249 MDsKK0BAIC0xODgsNyArMjA3LDcgQEAgUlNBICpSU0FfbmV3X21ldGhvZChFTkdJTkUgKmVuZ2lu ZSkKKyAJcmV0LT5ibGluZGluZz1OVUxMOworIAlyZXQtPm10X2JsaW5kaW5nPU5VTEw7CisgCXJl dC0+YmlnbnVtX2RhdGE9TlVMTDsKKy0JcmV0LT5mbGFncz1yZXQtPm1ldGgtPmZsYWdzICYgflJT QV9GTEFHX05PTl9GSVBTX0FMTE9XOworKwlyZXQtPmZsYWdzPXJldC0+bWV0aC0+ZmxhZ3M7Cisg CWlmICghQ1JZUFRPX25ld19leF9kYXRhKENSWVBUT19FWF9JTkRFWF9SU0EsIHJldCwgJnJldC0+ ZXhfZGF0YSkpCisgCQl7CisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWsvY3J5cHRvL3JzYS9yc2FfcG1ldGguYy5maXBzIG9wZW5zc2wtMS4wLjFrL2Ny eXB0by9yc2EvcnNhX3BtZXRoLmMKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vcnNhL3JzYV9w bWV0aC5jLmZpcHMJMjAxNS0wMS0wOCAxNTowMDozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4xay9jcnlwdG8vcnNhL3JzYV9wbWV0aC5jCTIwMTUtMDEtMDkgMDk6NTE6NTEuNTcy OTIyNzY2ICswMTAwCitAQCAtMjA2LDIyICsyMDYsNiBAQCBzdGF0aWMgaW50IHBrZXlfcnNhX3Np Z24oRVZQX1BLRVlfQ1RYICpjCisgCQkJCQlSU0FfUl9JTlZBTElEX0RJR0VTVF9MRU5HVEgpOwor IAkJCXJldHVybiAtMTsKKyAJCQl9CistI2lmZGVmIE9QRU5TU0xfRklQUworLQkJaWYgKHJldCA+ IDApCistCQkJeworLQkJCXVuc2lnbmVkIGludCBzbGVuOworLQkJCXJldCA9IEZJUFNfcnNhX3Np Z25fZGlnZXN0KHJzYSwgdGJzLCB0YnNsZW4sIHJjdHgtPm1kLAorLQkJCQkJCQlyY3R4LT5wYWRf bW9kZSwKKy0JCQkJCQkJcmN0eC0+c2FsdGxlbiwKKy0JCQkJCQkJcmN0eC0+bWdmMW1kLAorLQkJ CQkJCQlzaWcsICZzbGVuKTsKKy0JCQlpZiAocmV0ID4gMCkKKy0JCQkJKnNpZ2xlbiA9IHNsZW47 CistCQkJZWxzZQorLQkJCQkqc2lnbGVuID0gMDsKKy0JCQlyZXR1cm4gcmV0OworLQkJCX0KKy0j ZW5kaWYKKyAKKyAJCWlmIChFVlBfTURfdHlwZShyY3R4LT5tZCkgPT0gTklEX21kYzIpCisgCQkJ eworQEAgLTM1NCwxOSArMzM4LDYgQEAgc3RhdGljIGludCBwa2V5X3JzYV92ZXJpZnkoRVZQX1BL RVlfQ1RYCisgI2VuZGlmCisgCWlmIChyY3R4LT5tZCkKKyAJCXsKKy0jaWZkZWYgT1BFTlNTTF9G SVBTCistCQlpZiAocnYgPiAwKQorLQkJCXsKKy0JCQlyZXR1cm4gRklQU19yc2FfdmVyaWZ5X2Rp Z2VzdChyc2EsCistCQkJCQkJCXRicywgdGJzbGVuLAorLQkJCQkJCQlyY3R4LT5tZCwKKy0JCQkJ CQkJcmN0eC0+cGFkX21vZGUsCistCQkJCQkJCXJjdHgtPnNhbHRsZW4sCistCQkJCQkJCXJjdHgt Pm1nZjFtZCwKKy0JCQkJCQkJc2lnLCBzaWdsZW4pOworLQkJCQkJCQkKKy0JCQl9CistI2VuZGlm CisgCQlpZiAocmN0eC0+cGFkX21vZGUgPT0gUlNBX1BLQ1MxX1BBRERJTkcpCisgCQkJcmV0dXJu IFJTQV92ZXJpZnkoRVZQX01EX3R5cGUocmN0eC0+bWQpLCB0YnMsIHRic2xlbiwKKyAJCQkJCXNp Zywgc2lnbGVuLCByc2EpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL3JzYS9yc2Ff c2lnbi5jLmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jCistLS0gb3Bl bnNzbC0xLjAuMWsvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jLmZpcHMJMjAxNS0wMS0wOCAxNTowMDoz Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vcnNhL3JzYV9zaWdu LmMJMjAxNS0wMS0wOSAwOTo1MTo1MS41NzI5MjI3NjYgKzAxMDAKK0BAIC0xMzgsNyArMTM4LDgg QEAgaW50IFJTQV9zaWduKGludCB0eXBlLCBjb25zdCB1bnNpZ25lZCBjaAorIAkJaTJkX1g1MDlf U0lHKCZzaWcsJnApOworIAkJcz10bXBzOworIAl9CistCWk9UlNBX3ByaXZhdGVfZW5jcnlwdChp LHMsc2lncmV0LHJzYSxSU0FfUEtDUzFfUEFERElORyk7CisrCS8qIE5COiBjYWxsIHVuZGVybHlp bmcgbWV0aG9kIGRpcmVjdGx5IHRvIGF2b2lkIEZJUFMgYmxvY2tpbmcgKi8KKysJaSA9IHJzYS0+ bWV0aC0+cnNhX3ByaXZfZW5jID8gcnNhLT5tZXRoLT5yc2FfcHJpdl9lbmMoaSxzLHNpZ3JldCxy c2EsUlNBX1BLQ1MxX1BBRERJTkcpIDogMDsKKyAJaWYgKGkgPD0gMCkKKyAJCXJldD0wOworIAll bHNlCitAQCAtMTk3LDggKzE5OCw4IEBAIGludCBpbnRfcnNhX3ZlcmlmeShpbnQgZHR5cGUsIGNv bnN0IHVuc2kKKyAKKyAJaWYoKGR0eXBlID09IE5JRF9tZDVfc2hhMSkgJiYgcm0pCisgCQl7Cist CQlpID0gUlNBX3B1YmxpY19kZWNyeXB0KChpbnQpc2lnbGVuLAorLQkJCQkJc2lnYnVmLHJtLHJz YSxSU0FfUEtDUzFfUEFERElORyk7CisrCQlpID0gcnNhLT5tZXRoLT5yc2FfcHViX2RlYyA/IHJz YS0+bWV0aC0+cnNhX3B1Yl9kZWMoKGludClzaWdsZW4sCisrCQkJCQlzaWdidWYscm0scnNhLFJT QV9QS0NTMV9QQURESU5HKSA6IDA7CisgCQlpZiAoaSA8PSAwKQorIAkJCXJldHVybiAwOworIAkJ KnBybV9sZW4gPSBpOworQEAgLTIxNSw3ICsyMTYsOCBAQCBpbnQgaW50X3JzYV92ZXJpZnkoaW50 IGR0eXBlLCBjb25zdCB1bnNpCisgCQkJUlNBZXJyKFJTQV9GX0lOVF9SU0FfVkVSSUZZLFJTQV9S X0lOVkFMSURfTUVTU0FHRV9MRU5HVEgpOworIAkJCWdvdG8gZXJyOworIAl9CistCWk9UlNBX3B1 YmxpY19kZWNyeXB0KChpbnQpc2lnbGVuLHNpZ2J1ZixzLHJzYSxSU0FfUEtDUzFfUEFERElORyk7 CisrCS8qIE5COiBjYWxsIHVuZGVybHlpbmcgbWV0aG9kIGRpcmVjdGx5IHRvIGF2b2lkIEZJUFMg YmxvY2tpbmcgKi8KKysJaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMgPyByc2EtPm1ldGgtPnJz YV9wdWJfZGVjKChpbnQpc2lnbGVuLHNpZ2J1ZixzLHJzYSxSU0FfUEtDUzFfUEFERElORykgOiAw OworIAorIAlpZiAoaSA8PSAwKSBnb3RvIGVycjsKKyAJLyogT2RkYmFsbCBNREMyIGNhc2U6IHNp Z25hdHVyZSBjYW4gYmUgT0NURVQgU1RSSU5HLgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvY3J5 cHRvL3NoYS9zaGEuaC5maXBzIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9zaGEvc2hhLmgKKy0tLSBv cGVuc3NsLTEuMC4xay9jcnlwdG8vc2hhL3NoYS5oLmZpcHMJMjAxNS0wMS0wOSAwOTo1MTo1MC45 Mzk5MDg0NTAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vc2hhL3NoYS5oCTIwMTUt MDEtMDkgMDk6NTE6NTEuNTczOTIyNzg5ICswMTAwCitAQCAtMTE2LDkgKzExNiw2IEBAIHVuc2ln bmVkIGNoYXIgKlNIQShjb25zdCB1bnNpZ25lZCBjaGFyICoKKyB2b2lkIFNIQV9UcmFuc2Zvcm0o U0hBX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisgI2VuZGlmCisgI2lmbmRl ZiBPUEVOU1NMX05PX1NIQTEKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistaW50IHByaXZhdGVfU0hB MV9Jbml0KFNIQV9DVFggKmMpOworLSNlbmRpZgorIGludCBTSEExX0luaXQoU0hBX0NUWCAqYyk7 CisgaW50IFNIQTFfVXBkYXRlKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBs ZW4pOworIGludCBTSEExX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEFfQ1RYICpjKTsKK0BA IC0xNDEsMTAgKzEzOCw2IEBAIHR5cGVkZWYgc3RydWN0IFNIQTI1NnN0YXRlX3N0CisgCX0gU0hB MjU2X0NUWDsKKyAKKyAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMjU2CistI2lmZGVmIE9QRU5TU0xf RklQUworLWludCBwcml2YXRlX1NIQTIyNF9Jbml0KFNIQTI1Nl9DVFggKmMpOworLWludCBwcml2 YXRlX1NIQTI1Nl9Jbml0KFNIQTI1Nl9DVFggKmMpOworLSNlbmRpZgorIGludCBTSEEyMjRfSW5p dChTSEEyNTZfQ1RYICpjKTsKKyBpbnQgU0hBMjI0X1VwZGF0ZShTSEEyNTZfQ1RYICpjLCBjb25z dCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKKyBpbnQgU0hBMjI0X0ZpbmFsKHVuc2lnbmVkIGNo YXIgKm1kLCBTSEEyNTZfQ1RYICpjKTsKK0BAIC0xOTIsMTAgKzE4NSw2IEBAIHR5cGVkZWYgc3Ry dWN0IFNIQTUxMnN0YXRlX3N0CisgI2VuZGlmCisgCisgI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUx MgorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy1pbnQgcHJpdmF0ZV9TSEEzODRfSW5pdChTSEE1MTJf Q1RYICpjKTsKKy1pbnQgcHJpdmF0ZV9TSEE1MTJfSW5pdChTSEE1MTJfQ1RYICpjKTsKKy0jZW5k aWYKKyBpbnQgU0hBMzg0X0luaXQoU0hBNTEyX0NUWCAqYyk7CisgaW50IFNIQTM4NF9VcGRhdGUo U0hBNTEyX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CisgaW50IFNIQTM4 NF9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBNTEyX0NUWCAqYyk7CitkaWZmIC11cCBvcGVu c3NsLTEuMC4xay9jcnlwdG8vc2hhL3NoYV9sb2NsLmguZmlwcyBvcGVuc3NsLTEuMC4xay9jcnlw dG8vc2hhL3NoYV9sb2NsLmgKKy0tLSBvcGVuc3NsLTEuMC4xay9jcnlwdG8vc2hhL3NoYV9sb2Ns LmguZmlwcwkyMDE1LTAxLTA5IDA5OjUxOjUwLjk0MjkwODUxOCArMDEwMAorKysrIG9wZW5zc2wt MS4wLjFrL2NyeXB0by9zaGEvc2hhX2xvY2wuaAkyMDE1LTAxLTA5IDA5OjUxOjUxLjU3MzkyMjc4 OSArMDEwMAorQEAgLTEyMywxMSArMTIzLDE0IEBAIHZvaWQgc2hhMV9ibG9ja19kYXRhX29yZGVy IChTSEFfQ1RYICpjLAorICNkZWZpbmUgSU5JVF9EQVRBX2g0IDB4YzNkMmUxZjBVTAorIAorICNp ZmRlZiBTSEFfMAorLWZpcHNfbWRfaW5pdChTSEEpCisrbm9uZmlwc19tZF9pbml0KFNIQSkKKyAj ZWxzZQorIGZpcHNfbWRfaW5pdF9jdHgoU0hBMSwgU0hBKQorICNlbmRpZgorIAl7CisrI2lmIGRl ZmluZWQoU0hBXzEpICYmIGRlZmluZWQoT1BFTlNTTF9GSVBTKQorKwlGSVBTX3NlbGZ0ZXN0X2No ZWNrKCk7CisrI2VuZGlmCisgCW1lbXNldCAoYywwLHNpemVvZigqYykpOworIAljLT5oMD1JTklU X0RBVEFfaDA7CisgCWMtPmgxPUlOSVRfREFUQV9oMTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFr L2NyeXB0by9zaGEvc2hhMjU2LmMuZmlwcyBvcGVuc3NsLTEuMC4xay9jcnlwdG8vc2hhL3NoYTI1 Ni5jCistLS0gb3BlbnNzbC0xLjAuMWsvY3J5cHRvL3NoYS9zaGEyNTYuYy5maXBzCTIwMTUtMDEt MDggMTU6MDA6MzYuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL3No YS9zaGEyNTYuYwkyMDE1LTAxLTA5IDA5OjUxOjUxLjU3MzkyMjc4OSArMDEwMAorQEAgLTEyLDEy ICsxMiwxOSBAQAorIAorICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorICNpbmNsdWRlIDxv cGVuc3NsL3NoYS5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKyAKKyBj b25zdCBjaGFyIFNIQTI1Nl92ZXJzaW9uW109IlNIQS0yNTYiIE9QRU5TU0xfVkVSU0lPTl9QVEVY VDsKKyAKKyBmaXBzX21kX2luaXRfY3R4KFNIQTIyNCwgU0hBMjU2KQorIAl7CisrI2lmZGVmIE9Q RU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCW1lbXNldCAo YywwLHNpemVvZigqYykpOworIAljLT5oWzBdPTB4YzEwNTllZDhVTDsJYy0+aFsxXT0weDM2N2Nk NTA3VUw7CisgCWMtPmhbMl09MHgzMDcwZGQxN1VMOwljLT5oWzNdPTB4ZjcwZTU5MzlVTDsKK0BA IC0yOSw2ICszNiw5IEBAIGZpcHNfbWRfaW5pdF9jdHgoU0hBMjI0LCBTSEEyNTYpCisgCisgZmlw c19tZF9pbml0KFNIQTI1NikKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxm dGVzdF9jaGVjaygpOworKyNlbmRpZgorIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKKyAJYy0+ aFswXT0weDZhMDllNjY3VUw7CWMtPmhbMV09MHhiYjY3YWU4NVVMOworIAljLT5oWzJdPTB4M2M2 ZWYzNzJVTDsJYy0+aFszXT0weGE1NGZmNTNhVUw7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9j cnlwdG8vc2hhL3NoYTUxMi5jLmZpcHMgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL3NoYS9zaGE1MTIu YworLS0tIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9zaGEvc2hhNTEyLmMuZmlwcwkyMDE1LTAxLTA4 IDE1OjAwOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0by9zaGEv c2hhNTEyLmMJMjAxNS0wMS0wOSAwOTo1MTo1MS41NzM5MjI3ODkgKzAxMDAKK0BAIC01LDYgKzUs MTAgQEAKKyAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorICAqLworICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xj b25mLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K KysjZW5kaWYKKysKKyAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9Q RU5TU0xfTk9fU0hBNTEyKQorIC8qCisgICogSU1QTEVNRU5UQVRJT04gTk9URVMuCitAQCAtNjEs NiArNjUsOSBAQCBjb25zdCBjaGFyIFNIQTUxMl92ZXJzaW9uW109IlNIQS01MTIiIE9QCisgCisg Zmlwc19tZF9pbml0X2N0eChTSEEzODQsIFNIQTUxMikKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAljLT5oWzBdPVU2NCgweGNi YmI5ZDVkYzEwNTllZDgpOworIAljLT5oWzFdPVU2NCgweDYyOWEyOTJhMzY3Y2Q1MDcpOworIAlj LT5oWzJdPVU2NCgweDkxNTkwMTVhMzA3MGRkMTcpOworQEAgLTc3LDYgKzg0LDkgQEAgZmlwc19t ZF9pbml0X2N0eChTSEEzODQsIFNIQTUxMikKKyAKKyBmaXBzX21kX2luaXQoU0hBNTEyKQorIAl7 CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlm CisgCWMtPmhbMF09VTY0KDB4NmEwOWU2NjdmM2JjYzkwOCk7CisgCWMtPmhbMV09VTY0KDB4YmI2 N2FlODU4NGNhYTczYik7CisgCWMtPmhbMl09VTY0KDB4M2M2ZWYzNzJmZTk0ZjgyYik7CitkaWZm IC11cCBvcGVuc3NsLTEuMC4xay9jcnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jLmZpcHMgb3BlbnNz bC0xLjAuMWsvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjFrL2Ny eXB0by93aHJscG9vbC93cF9kZ3N0LmMuZmlwcwkyMDE1LTAxLTA4IDE1OjAwOjM2LjAwMDAwMDAw MCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMJMjAx NS0wMS0wOSAwOTo1MTo1MS41NzQ5MjI4MTEgKzAxMDAKK0BAIC01NSw3ICs1NSw3IEBACisgI2lu Y2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorIAorLWZpcHNf bWRfaW5pdChXSElSTFBPT0wpCisrbm9uZmlwc19tZF9pbml0KFdISVJMUE9PTCkKKyAJeworIAlt ZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKKyAJcmV0dXJuKDEpOworZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWsvTWFrZWZpbGUub3JnLmZpcHMgb3BlbnNzbC0xLjAuMWsvTWFrZWZpbGUub3JnCistLS0g b3BlbnNzbC0xLjAuMWsvTWFrZWZpbGUub3JnLmZpcHMJMjAxNS0wMS0wOSAwOTo1MTo1MS4yNzI5 MTU5ODEgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9NYWtlZmlsZS5vcmcJMjAxNS0wMS0wOSAw OTo1MTo1MS41NzQ5MjI4MTEgKzAxMDAKK0BAIC0xMzYsNiArMTM2LDkgQEAgRklQU0NBTkxJQj0K KyAKKyBCQVNFQUREUj0KKyAKKysjIE5vbi1lbXB0eSBpZiBGSVBTIGVuYWJsZWQKKytGSVBTPQor KworIERJUlM9ICAgY3J5cHRvIHNzbCBlbmdpbmVzIGFwcHMgdGVzdCB0b29scworIEVOR0RJUlM9 IGNjZ29zdAorIFNITElCRElSUz0gY3J5cHRvIHNzbAorQEAgLTE0OCw3ICsxNTEsNyBAQCBTRElS Uz0gIFwKKyAJYm4gZWMgcnNhIGRzYSBlY2RzYSBkaCBlY2RoIGRzbyBlbmdpbmUgXAorIAlidWZm ZXIgYmlvIHN0YWNrIGxoYXNoIHJhbmQgZXJyIFwKKyAJZXZwIGFzbjEgcGVtIHg1MDkgeDUwOXYz IGNvbmYgdHh0X2RiIHBrY3M3IHBrY3MxMiBjb21wIG9jc3AgdWkga3JiNSBcCistCWNtcyBwcXVl dWUgdHMganBha2Ugc3JwIHN0b3JlIGNtYWMKKysJY21zIHBxdWV1ZSB0cyBqcGFrZSBzcnAgc3Rv cmUgY21hYyBmaXBzCisgIyBrZWVwIGluIG1pbmQgdGhhdCB0aGUgYWJvdmUgbGlzdCBpcyBhZGp1 c3RlZCBieSAuL0NvbmZpZ3VyZQorICMgYWNjb3JkaW5nIHRvIG5vLXh4eCBhcmd1bWVudHMuLi4K KyAKK0BAIC0yMzcsNiArMjQwLDcgQEAgQlVJTERFTlY9CVBMQVRGT1JNPSckKFBMQVRGT1JNKScg UFJPQ0VTUworIAkJRklQU0xJQkRJUj0nJHtGSVBTTElCRElSfScJCQlcCisgCQlGSVBTRElSPSck e0ZJUFNESVJ9JwkJCQlcCisgCQlGSVBTQ0FOTElCPSIkJHtGSVBTQ0FOTElCOi0kKEZJUFNDQU5M SUIpfSIJXAorKwkJRklQUz0iJCR7RklQUzotJChGSVBTKX0iCVwKKyAJCVRISVM9JCR7VEhJUzot JEB9IE1BS0VGSUxFPU1ha2VmaWxlIE1BS0VPVkVSUklERVM9CisgIyBNQUtFT1ZFUlJJREVTPSBl ZmZlY3RpdmVseSAiZXF1YWxpemVzIiBHTlUtaXNoIGFuZCBTeXNWLWlzaCBtYWtlIGZsYXZvcnMs CisgIyB3aGljaCBpbiB0dXJuIGVsaW1pbmF0ZXMgYW1iaWd1aXRpZXMgaW4gdmFyaWFibGUgdHJl YXRtZW50IHdpdGggLWUuCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9zc2wvZDFfc3J2ci5jLmZp cHMgb3BlbnNzbC0xLjAuMWsvc3NsL2QxX3NydnIuYworLS0tIG9wZW5zc2wtMS4wLjFrL3NzbC9k MV9zcnZyLmMuZmlwcwkyMDE1LTAxLTA4IDE1OjAwOjU2LjAwMDAwMDAwMCArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjFrL3NzbC9kMV9zcnZyLmMJMjAxNS0wMS0wOSAwOTo1MTo1MS41NzQ5MjI4MTEg KzAxMDAKK0BAIC0xNDAyLDYgKzE0MDIsOCBAQCBpbnQgZHRsczFfc2VuZF9zZXJ2ZXJfa2V5X2V4 Y2hhbmdlKFNTTCAqCisgCQkJCWo9MDsKKyAJCQkJZm9yIChudW09MjsgbnVtID4gMDsgbnVtLS0p CisgCQkJCQl7CisrCQkJCQlFVlBfTURfQ1RYX3NldF9mbGFncygmbWRfY3R4LAorKwkJCQkJCQkJ RVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKKyAJCQkJCUVWUF9EaWdlc3RJbml0X2V4 KCZtZF9jdHgsKG51bSA9PSAyKQorIAkJCQkJCT9zLT5jdHgtPm1kNTpzLT5jdHgtPnNoYTEsIE5V TEwpOworIAkJCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmbWRfY3R4LCYocy0+czMtPmNsaWVudF9yYW5k b21bMF0pLFNTTDNfUkFORE9NX1NJWkUpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvc3NsL3Nz bF9hbGdzLmMuZmlwcyBvcGVuc3NsLTEuMC4xay9zc2wvc3NsX2FsZ3MuYworLS0tIG9wZW5zc2wt MS4wLjFrL3NzbC9zc2xfYWxncy5jLmZpcHMJMjAxNS0wMS0wOCAxNTowMDozNi4wMDAwMDAwMDAg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9zc2wvc3NsX2FsZ3MuYwkyMDE1LTAxLTA5IDA5OjUx OjUxLjU3NTkyMjgzNCArMDEwMAorQEAgLTY0LDYgKzY0LDEyIEBACisgaW50IFNTTF9saWJyYXJ5 X2luaXQodm9pZCkKKyAJeworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJT1BFTlNTTF9pbml0 X2xpYnJhcnkoKTsKKysJaWYgKCFGSVBTX21vZGUoKSkKKysJCXsKKysjZW5kaWYKKysKKyAjaWZu ZGVmIE9QRU5TU0xfTk9fREVTCisgCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfY2JjKCkpOworIAlF VlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfY2JjKCkpOworQEAgLTEzNyw2ICsxNDMsNTAgQEAg aW50IFNTTF9saWJyYXJ5X2luaXQodm9pZCkKKyAJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYSgpKTsK KyAJRVZQX2FkZF9kaWdlc3QoRVZQX2RzcygpKTsKKyAjZW5kaWYKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCQl9CisrCWVsc2UKKysJCXsKKysjaWZuZGVmIE9QRU5TU0xfTk9fREVTCisrCUVWUF9h ZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7CisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NM X05PX0FFUworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jYmMoKSk7CisrCUVWUF9hZGRf Y2lwaGVyKEVWUF9hZXNfMTkyX2NiYygpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZf Y2JjKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9nY20oKSk7CisrCUVWUF9hZGRf Y2lwaGVyKEVWUF9hZXNfMjU2X2djbSgpKTsKKysjZW5kaWYKKysjaWZuZGVmIE9QRU5TU0xfTk9f TUQ1CisrCS8qIG5lZWRlZCBldmVuIGluIHRoZSBGSVBTIG1vZGUgZm9yIFRMUyBNQUMgKi8KKysJ RVZQX2FkZF9kaWdlc3QoRVZQX21kNSgpKTsKKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1 LCJzc2wyLW1kNSIpOworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9tZDUsInNzbDMtbWQ1Iik7 CisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX1NIQQorKwlFVlBfYWRkX2RpZ2VzdChFVlBf c2hhMSgpKTsgLyogUlNBIHdpdGggc2hhMSAqLworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9z aGExLCJzc2wzLXNoYTEiKTsKKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMVdpdGhSU0FF bmNyeXB0aW9uLFNOX3NoYTFXaXRoUlNBKTsKKysjZW5kaWYKKysjaWZuZGVmIE9QRU5TU0xfTk9f U0hBMjU2CisrCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyMjQoKSk7CisrCUVWUF9hZGRfZGlnZXN0 KEVWUF9zaGEyNTYoKSk7CisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgorKwlF VlBfYWRkX2RpZ2VzdChFVlBfc2hhMzg0KCkpOworKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhNTEy KCkpOworKyNlbmRpZgorKyNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQo T1BFTlNTTF9OT19EU0EpCisrCUVWUF9hZGRfZGlnZXN0KEVWUF9kc3MxKCkpOyAvKiBEU0Egd2l0 aCBzaGExICovCisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLFNOX2RzYVdp dGhTSEExXzIpOworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwiRFNTMSIp OworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwiZHNzMSIpOworKyNlbmRp ZgorKyNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQorKwlFVlBfYWRkX2RpZ2VzdChFVlBfZWNkc2Eo KSk7CisrI2VuZGlmCisrCQl9CisrI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0NPTVAKKyAJ LyogVGhpcyB3aWxsIGluaXRpYWxpc2UgdGhlIGJ1aWx0LWluIGNvbXByZXNzaW9uIGFsZ29yaXRo bXMuCisgCSAgIFRoZSB2YWx1ZSByZXR1cm5lZCBpcyBhIFNUQUNLX09GKFNTTF9DT01QKSwgYnV0 IHRoYXQgY2FuCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMWstcGFkbG9jazY0LnBhdGNoIGIv b3BlbnNzbC0xLjAuMWstcGFkbG9jazY0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLmU3MGMwYmYKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuc3NsLTEuMC4xay1wYWRs b2NrNjQucGF0Y2gKQEAgLTAsMCArMSwxOTcgQEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2Vu Z2luZXMvZV9wYWRsb2NrLmMucGFkbG9jazY0IG9wZW5zc2wtMS4wLjFrL2VuZ2luZXMvZV9wYWRs b2NrLmMKKy0tLSBvcGVuc3NsLTEuMC4xay9lbmdpbmVzL2VfcGFkbG9jay5jLnBhZGxvY2s2NAky MDE1LTAxLTA4IDE1OjAwOjU2LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2Vu Z2luZXMvZV9wYWRsb2NrLmMJMjAxNS0wMS0wOSAxMDoxODo1NS41Nzk2NTA5OTIgKzAxMDAKK0BA IC0xMDEsNyArMTAxLDEwIEBACisgICAgY29tcGlsZXIgY2hvaWNlIGlzIGxpbWl0ZWQgdG8gR0ND IGFuZCBNaWNyb3NvZnQgQy4gKi8KKyAjdW5kZWYgQ09NUElMRV9IV19QQURMT0NLCisgI2lmICFk ZWZpbmVkKEkzODZfT05MWSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19JTkxJTkVfQVNNKQorLSMg aWYgKGRlZmluZWQoX19HTlVDX18pICYmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9f aTM4NikpKSB8fCBcCisrIyBpZiAoZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18+PTIgJiYg XAorKwkoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2kzODYpIHx8IFwKKysJIGRlZmlu ZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX3g4Nl82NCkpIFwKKysgICAgICkgfHwgXAorICAg ICAgKGRlZmluZWQoX01TQ19WRVIpICYmIGRlZmluZWQoX01fSVg4NikpCisgIyAgZGVmaW5lIENP TVBJTEVfSFdfUEFETE9DSworICMgZW5kaWYKK0BAIC0xMzcsNyArMTQwLDcgQEAgdm9pZCBFTkdJ TkVfbG9hZF9wYWRsb2NrICh2b2lkKQorICMgZW5kaWYKKyAjZWxpZiBkZWZpbmVkKF9fR05VQ19f KQorICMgaWZuZGVmIGFsbG9jYQorLSMgIGRlZmluZSBhbGxvY2EocykgX19idWlsdGluX2FsbG9j YShzKQorKyMgIGRlZmluZSBhbGxvY2EocykgX19idWlsdGluX2FsbG9jYSgocykpCisgIyBlbmRp ZgorICNlbmRpZgorIAorQEAgLTMwNCw2ICszMDcsNyBAQCBzdGF0aWMgdm9sYXRpbGUgc3RydWN0 IHBhZGxvY2tfY2lwaGVyX2RhCisgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBf X0dOVUNfXz49MgorKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9faTM4NikKKyAv KgorICAqIEFzIGZvciBleGNlc3NpdmUgInB1c2ggJWVieCIvInBvcCAlZWJ4IiBmb3VuZCBhbGwg b3Zlci4KKyAgKiBXaGVuIGdlbmVyYXRpbmcgcG9zaXRpb24taW5kZXBlbmRlbnQgY29kZSBHQ0Mg d29uJ3QgbGV0CitAQCAtMzgzLDIzICszODcsNiBAQCBwYWRsb2NrX2F2YWlsYWJsZSh2b2lkKQor IAlyZXR1cm4gcGFkbG9ja191c2VfYWNlICsgcGFkbG9ja191c2Vfcm5nOworIH0KKyAKKy0jaWZu ZGVmIE9QRU5TU0xfTk9fQUVTCistI2lmbmRlZiBBRVNfQVNNCistLyogT3VyIG93biBodG9ubCgp L250b2hsKCkgKi8KKy1zdGF0aWMgaW5saW5lIHZvaWQKKy1wYWRsb2NrX2Jzd2FwbChBRVNfS0VZ ICprcykKKy17CistCXNpemVfdCBpID0gc2l6ZW9mKGtzLT5yZF9rZXkpL3NpemVvZihrcy0+cmRf a2V5WzBdKTsKKy0JdW5zaWduZWQgaW50ICprZXkgPSBrcy0+cmRfa2V5OworLQorLQl3aGlsZSAo aS0tKSB7CistCQlhc20gdm9sYXRpbGUgKCJic3dhcGwgJTAiIDogIityIigqa2V5KSk7CistCQlr ZXkrKzsKKy0JfQorLX0KKy0jZW5kaWYKKy0jZW5kaWYKKy0KKyAvKiBGb3JjZSBrZXkgcmVsb2Fk IGZyb20gbWVtb3J5IHRvIHRoZSBDUFUgbWljcm9jb2RlLgorICAgIExvYWRpbmcgRUZMQUdTIGZy b20gdGhlIHN0YWNrIGNsZWFycyBFRkxBR1NbMzBdIAorICAgIHdoaWNoIGRvZXMgdGhlIHRyaWNr LiAqLworQEAgLTQ1NywxMiArNDQ0LDEyOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKm5hbWUoc2l6 ZV90IGNudCwJCVwKKyAJCTogImVkeCIsICJjYyIsICJtZW1vcnkiKTsJXAorIAlyZXR1cm4gaXY7 CQkJCVwKKyB9CisrI2VuZGlmCisrCisrI2VsaWYgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZp bmVkKF9feDg2XzY0KQorKworKy8qIExvYWQgc3VwcG9ydGVkIGZlYXR1cmVzIG9mIHRoZSBDUFUg dG8gc2VlIGlmCisrICAgdGhlIFBhZExvY2sgaXMgYXZhaWxhYmxlLiAqLworK3N0YXRpYyBpbnQK KytwYWRsb2NrX2F2YWlsYWJsZSh2b2lkKQorK3sKKysJY2hhciB2ZW5kb3Jfc3RyaW5nWzE2XTsK KysJdW5zaWduZWQgaW50IGVheCwgZWR4OworIAorKwkvKiBBcmUgd2UgcnVubmluZyBvbiB0aGUg Q2VudGF1ciAoVklBKSBDUFU/ICovCisrCWVheCA9IDB4MDAwMDAwMDA7CisrCXZlbmRvcl9zdHJp bmdbMTJdID0gMDsKKysJYXNtIHZvbGF0aWxlICgKKysJCSJjcHVpZFxuIgorKwkJIm1vdmwJJSVl YngsKCUxKVxuIgorKwkJIm1vdmwJJSVlZHgsNCglMSlcbiIKKysJCSJtb3ZsCSUlZWN4LDgoJTEp XG4iCisrCQk6ICIrYSIoZWF4KSA6ICJyIih2ZW5kb3Jfc3RyaW5nKSA6ICJyYngiLCAicmN4Iiwg InJkeCIpOworKwlpZiAoc3RyY21wKHZlbmRvcl9zdHJpbmcsICJDZW50YXVySGF1bHMiKSAhPSAw KQorKwkJcmV0dXJuIDA7CisrCisrCS8qIENoZWNrIGZvciBDZW50YXVyIEV4dGVuZGVkIEZlYXR1 cmUgRmxhZ3MgcHJlc2VuY2UgKi8KKysJZWF4ID0gMHhDMDAwMDAwMDsKKysJYXNtIHZvbGF0aWxl ICgiY3B1aWQiCisrCQk6ICIrYSIoZWF4KSA6IDogInJieCIsICJyY3giLCAicmR4Iik7CisrCWlm IChlYXggPCAweEMwMDAwMDAxKQorKwkJcmV0dXJuIDA7CisrCisrCS8qIFJlYWQgdGhlIENlbnRh dXIgRXh0ZW5kZWQgRmVhdHVyZSBGbGFncyAqLworKwllYXggPSAweEMwMDAwMDAxOworKwlhc20g dm9sYXRpbGUgKCJjcHVpZCIKKysJCTogIithIihlYXgpLCAiPWQiKGVkeCkgOiA6ICJyYngiLCAi cmN4Iik7CisrCisrCS8qIEZpbGwgdXAgc29tZSBmbGFncyAqLworKwlwYWRsb2NrX3VzZV9hY2Ug PSAoKGVkeCAmICgweDM8PDYpKSA9PSAoMHgzPDw2KSk7CisrCXBhZGxvY2tfdXNlX3JuZyA9ICgo ZWR4ICYgKDB4Mzw8MikpID09ICgweDM8PDIpKTsKKysKKysJcmV0dXJuIHBhZGxvY2tfdXNlX2Fj ZSArIHBhZGxvY2tfdXNlX3JuZzsKKyt9CisrCisrLyogRm9yY2Uga2V5IHJlbG9hZCBmcm9tIG1l bW9yeSB0byB0aGUgQ1BVIG1pY3JvY29kZS4KKysgICBMb2FkaW5nIEVGTEFHUyBmcm9tIHRoZSBz dGFjayBjbGVhcnMgRUZMQUdTWzMwXSAKKysgICB3aGljaCBkb2VzIHRoZSB0cmljay4gKi8KKytz dGF0aWMgaW5saW5lIHZvaWQKKytwYWRsb2NrX3JlbG9hZF9rZXkodm9pZCkKKyt7CisrCWFzbSB2 b2xhdGlsZSAoInB1c2hmcTsgcG9wZnEiKTsKKyt9CisrCisrI2lmbmRlZiBPUEVOU1NMX05PX0FF UworKy8qCisrICogVGhpcyBpcyBoZXVyaXN0aWMga2V5IGNvbnRleHQgdHJhY2luZy4gQXQgZmly c3Qgb25lCisrICogYmVsaWV2ZXMgdGhhdCBvbmUgc2hvdWxkIHVzZSBhdG9taWMgc3dhcCBpbnN0 cnVjdGlvbnMsCisrICogYnV0IGl0J3Mgbm90IGFjdHVhbGx5IG5lY2Vzc2FyeS4gUG9pbnQgaXMg dGhhdCBpZgorKyAqIHBhZGxvY2tfc2F2ZWRfY29udGV4dCB3YXMgY2hhbmdlZCBieSBhbm90aGVy IHRocmVhZAorKyAqIGFmdGVyIHdlJ3ZlIHJlYWQgaXQgYW5kIGJlZm9yZSB3ZSBjb21wYXJlIGl0 IHdpdGggY2RhdGEsCisrICogb3VyIGtleSAqc2hhbGwqIGJlIHJlbG9hZGVkIHVwb24gdGhyZWFk IGNvbnRleHQgc3dpdGNoCisrICogYW5kIHdlIGFyZSB0aGVyZWZvcmUgc2V0IGluIGVpdGhlciBj YXNlLi4uCisrICovCisrc3RhdGljIGlubGluZSB2b2lkCisrcGFkbG9ja192ZXJpZnlfY29udGV4 dChzdHJ1Y3QgcGFkbG9ja19jaXBoZXJfZGF0YSAqY2RhdGEpCisreworKwlhc20gdm9sYXRpbGUg KAorKwkicHVzaGZxXG4iCisrIglidGwJJDMwLCglJXJzcClcbiIKKysiCWpuYwkxZlxuIgorKyIJ Y21wcQklMiwlMVxuIgorKyIJamUJMWZcbiIKKysiCXBvcGZxXG4iCisrIglzdWJxCSQ4LCUlcnNw XG4iCisrIjE6CWFkZHEJJDgsJSVyc3BcbiIKKysiCW1vdnEJJTIsJTAiCisrCToiK20iKHBhZGxv Y2tfc2F2ZWRfY29udGV4dCkKKysJOiAiciIocGFkbG9ja19zYXZlZF9jb250ZXh0KSwgInIiKGNk YXRhKSA6ICJjYyIpOworK30KKysKKysvKiBUZW1wbGF0ZSBmb3IgcGFkbG9ja194Y3J5cHRfKiBt b2RlcyAqLworKy8qIEJJRyBGQVQgV0FSTklORzogCisrICogCVRoZSBvZmZzZXRzIHVzZWQgd2l0 aCAnbGVhbCcgaW5zdHJ1Y3Rpb25zCisrICogCWRlc2NyaWJlIGl0ZW1zIG9mIHRoZSAncGFkbG9j a19jaXBoZXJfZGF0YScKKysgKiAJc3RydWN0dXJlLgorKyAqLworKyNkZWZpbmUgUEFETE9DS19Y Q1JZUFRfQVNNKG5hbWUscmVwX3hjcnlwdCkJXAorK3N0YXRpYyBpbmxpbmUgdm9pZCAqbmFtZShz aXplX3QgY250LAkJXAorKwlzdHJ1Y3QgcGFkbG9ja19jaXBoZXJfZGF0YSAqY2RhdGEsCVwKKysJ dm9pZCAqb3V0LCBjb25zdCB2b2lkICppbnApIAkJXAorK3sJdm9pZCAqaXY7IAkJCQlcCisrCWFz bSB2b2xhdGlsZSAoICJsZWFxCTE2KCUwKSwlJXJkeFxuIglcCisrCQkiCWxlYXEJMzIoJTApLCUl cmJ4XG4iCVwKKysJCQlyZXBfeGNyeXB0ICJcbiIJCVwKKysJCTogIj1hIihpdiksICI9YyIoY250 KSwgIj1EIihvdXQpLCAiPVMiKGlucCkgXAorKwkJOiAiMCIoY2RhdGEpLCAiMSIoY250KSwgIjIi KG91dCksICIzIihpbnApICBcCisrCQk6ICJyYngiLCAicmR4IiwgImNjIiwgIm1lbW9yeSIpOwlc CisrCXJldHVybiBpdjsJCQkJXAorK30KKysjZW5kaWYKKysKKysjZW5kaWYJLyogY3B1ICovCisr CisrI2lmbmRlZiBPUEVOU1NMX05PX0FFUworIC8qIEdlbmVyYXRlIGFsbCBmdW5jdGlvbnMgd2l0 aCBhcHByb3ByaWF0ZSBvcGNvZGVzICovCisgUEFETE9DS19YQ1JZUFRfQVNNKHBhZGxvY2tfeGNy eXB0X2VjYiwgIi5ieXRlIDB4ZjMsMHgwZiwweGE3LDB4YzgiKQkvKiByZXAgeGNyeXB0ZWNiICov CisgUEFETE9DS19YQ1JZUFRfQVNNKHBhZGxvY2tfeGNyeXB0X2NiYywgIi5ieXRlIDB4ZjMsMHgw ZiwweGE3LDB4ZDAiKQkvKiByZXAgeGNyeXB0Y2JjICovCisgUEFETE9DS19YQ1JZUFRfQVNNKHBh ZGxvY2tfeGNyeXB0X2NmYiwgIi5ieXRlIDB4ZjMsMHgwZiwweGE3LDB4ZTAiKQkvKiByZXAgeGNy eXB0Y2ZiICovCisgUEFETE9DS19YQ1JZUFRfQVNNKHBhZGxvY2tfeGNyeXB0X29mYiwgIi5ieXRl IDB4ZjMsMHgwZiwweGE3LDB4ZTgiKQkvKiByZXAgeGNyeXB0b2ZiICovCisrCisrI2lmbmRlZiBB RVNfQVNNCisrLyogT3VyIG93biBodG9ubCgpL250b2hsKCkgKi8KKytzdGF0aWMgaW5saW5lIHZv aWQKKytwYWRsb2NrX2Jzd2FwbChBRVNfS0VZICprcykKKyt7CisrCXNpemVfdCBpID0gc2l6ZW9m KGtzLT5yZF9rZXkpL3NpemVvZihrcy0+cmRfa2V5WzBdKTsKKysJdW5zaWduZWQgaW50ICprZXkg PSBrcy0+cmRfa2V5OworKworKwl3aGlsZSAoaS0tKSB7CisrCQlhc20gdm9sYXRpbGUgKCJic3dh cGwgJTAiIDogIityIigqa2V5KSk7CisrCQlrZXkrKzsKKysJfQorK30KKysjZW5kaWYKKyAjZW5k aWYKKyAKKyAvKiBUaGUgUk5HIGNhbGwgaXRzZWxmICovCitAQCAtNDkzLDggKzU5Nyw4IEBAIHBh ZGxvY2tfeHN0b3JlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGludAorIHN0YXRpYyBpbmxpbmUgdW5z aWduZWQgY2hhciAqCisgcGFkbG9ja19tZW1jcHkodm9pZCAqZHN0LGNvbnN0IHZvaWQgKnNyYyxz aXplX3QgbikKKyB7CistCWxvbmcgICAgICAgKmQ9ZHN0OworLQljb25zdCBsb25nICpzPXNyYzsK KysJc2l6ZV90ICAgICAgICpkPWRzdDsKKysJY29uc3Qgc2l6ZV90ICpzPXNyYzsKKyAKKyAJbiAv PSBzaXplb2YoKmQpOworIAlkbyB7ICpkKysgPSAqcysrOyB9IHdoaWxlICgtLW4pOwoKZGlmZiAt LWdpdCBhL29wZW5zc2wtMS4wLjFrLXRydXN0ZWQtZmlyc3QucGF0Y2ggYi9vcGVuc3NsLTEuMC4x ay10cnVzdGVkLWZpcnN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjhkM2YyM2EKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuc3NsLTEuMC4xay10cnVzdGVkLWZpcnN0 LnBhdGNoCkBAIC0wLDAgKzEsMzMwIEBACitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9hcHBzL2Fw cHMuYy50cnVzdGVkLWZpcnN0IG9wZW5zc2wtMS4wLjFrL2FwcHMvYXBwcy5jCistLS0gb3BlbnNz bC0xLjAuMWsvYXBwcy9hcHBzLmMudHJ1c3RlZC1maXJzdAkyMDE1LTAxLTA4IDE1OjAwOjM2LjAw MDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2FwcHMvYXBwcy5jCTIwMTUtMDEtMDkg MTA6MTk6NDUuNDc2Nzc5NDU2ICswMTAwCitAQCAtMjM2NSw2ICsyMzY1LDggQEAgaW50IGFyZ3Nf dmVyaWZ5KGNoYXIgKioqcGFyZ3MsIGludCAqcGFyZworIAkJZmxhZ3MgfD0gWDUwOV9WX0ZMQUdf Tk9USUZZX1BPTElDWTsKKyAJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItY2hlY2tfc3Nfc2lnIikp CisgCQlmbGFncyB8PSBYNTA5X1ZfRkxBR19DSEVDS19TU19TSUdOQVRVUkU7CisrCWVsc2UgaWYg KCFzdHJjbXAoYXJnLCAiLXRydXN0ZWRfZmlyc3QiKSkKKysJCWZsYWdzIHw9IFg1MDlfVl9GTEFH X1RSVVNURURfRklSU1Q7CisgCWVsc2UKKyAJCXJldHVybiAwOworIAorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWsvYXBwcy9jbXMuYy50cnVzdGVkLWZpcnN0IG9wZW5zc2wtMS4wLjFrL2FwcHMvY21z LmMKKy0tLSBvcGVuc3NsLTEuMC4xay9hcHBzL2Ntcy5jLnRydXN0ZWQtZmlyc3QJMjAxNS0wMS0w OCAxNTowMDozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9hcHBzL2Ntcy5j CTIwMTUtMDEtMDkgMTA6MTk6NDUuNDc2Nzc5NDU2ICswMTAwCitAQCAtNjQyLDYgKzY0Miw3IEBA IGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCUJJT19wcmludGYgKGJpb19lcnIs ICItdGV4dCAgICAgICAgICBpbmNsdWRlIG9yIGRlbGV0ZSB0ZXh0IE1JTUUgaGVhZGVyc1xuIik7 CisgCQlCSU9fcHJpbnRmIChiaW9fZXJyLCAiLUNBcGF0aCBkaXIgICAgdHJ1c3RlZCBjZXJ0aWZp Y2F0ZXMgZGlyZWN0b3J5XG4iKTsKKyAJCUJJT19wcmludGYgKGJpb19lcnIsICItQ0FmaWxlIGZp bGUgICB0cnVzdGVkIGNlcnRpZmljYXRlcyBmaWxlXG4iKTsKKysJCUJJT19wcmludGYgKGJpb19l cnIsICItdHJ1c3RlZF9maXJzdCB1c2UgdHJ1c3RlZCBjZXJ0aWZpY2F0ZXMgZmlyc3Qgd2hlbiBi dWlsZGluZyB0aGUgdHJ1c3QgY2hhaW5cbiIpOworIAkJQklPX3ByaW50ZiAoYmlvX2VyciwgIi1j cmxfY2hlY2sgICAgIGNoZWNrIHJldm9jYXRpb24gc3RhdHVzIG9mIHNpZ25lcidzIGNlcnRpZmlj YXRlIHVzaW5nIENSTHNcbiIpOworIAkJQklPX3ByaW50ZiAoYmlvX2VyciwgIi1jcmxfY2hlY2tf YWxsIGNoZWNrIHJldm9jYXRpb24gc3RhdHVzIG9mIHNpZ25lcidzIGNlcnRpZmljYXRlIGNoYWlu IHVzaW5nIENSTHNcbiIpOworICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjFrL2FwcHMvb2NzcC5jLnRydXN0ZWQtZmlyc3Qgb3BlbnNzbC0xLjAuMWsvYXBw cy9vY3NwLmMKKy0tLSBvcGVuc3NsLTEuMC4xay9hcHBzL29jc3AuYy50cnVzdGVkLWZpcnN0CTIw MTUtMDEtMDkgMTA6MTk6NDUuNDc3Nzc5NDc4ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWsvYXBw cy9vY3NwLmMJMjAxNS0wMS0wOSAxMDoyMDo1Ny43MjY0MTM0NDAgKzAxMDAKK0BAIC02MDUsNiAr NjA1LDcgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJQklPX3ByaW50ZiAo YmlvX2VyciwgIi1wYXRoICAgICAgICAgICAgICAgIHBhdGggdG8gdXNlIGluIE9DU1AgcmVxdWVz dFxuIik7CisgCQlCSU9fcHJpbnRmIChiaW9fZXJyLCAiLUNBcGF0aCBkaXIgICAgICAgICAgdHJ1 c3RlZCBjZXJ0aWZpY2F0ZXMgZGlyZWN0b3J5XG4iKTsKKyAJCUJJT19wcmludGYgKGJpb19lcnIs ICItQ0FmaWxlIGZpbGUgICAgICAgICB0cnVzdGVkIGNlcnRpZmljYXRlcyBmaWxlXG4iKTsKKysJ CUJJT19wcmludGYgKGJpb19lcnIsICItdHJ1c3RlZF9maXJzdCAgICAgICB1c2UgdHJ1c3RlZCBj ZXJ0aWZpY2F0ZXMgZmlyc3Qgd2hlbiBidWlsZGluZyB0aGUgdHJ1c3QgY2hhaW5cbiIpOworIAkJ QklPX3ByaW50ZiAoYmlvX2VyciwgIi1WQWZpbGUgZmlsZSAgICAgICAgIHZhbGlkYXRvciBjZXJ0 aWZpY2F0ZXMgZmlsZVxuIik7CisgCQlCSU9fcHJpbnRmIChiaW9fZXJyLCAiLXZhbGlkaXR5X3Bl cmlvZCBuICAgbWF4aW11bSB2YWxpZGl0eSBkaXNjcmVwYW5jeSBpbiBzZWNvbmRzXG4iKTsKKyAJ CUJJT19wcmludGYgKGJpb19lcnIsICItc3RhdHVzX2FnZSBuICAgICAgICBtYXhpbXVtIHN0YXR1 cyBhZ2UgaW4gc2Vjb25kc1xuIik7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9hcHBzL3NfY2xp ZW50LmMudHJ1c3RlZC1maXJzdCBvcGVuc3NsLTEuMC4xay9hcHBzL3NfY2xpZW50LmMKKy0tLSBv cGVuc3NsLTEuMC4xay9hcHBzL3NfY2xpZW50LmMudHJ1c3RlZC1maXJzdAkyMDE1LTAxLTA5IDEw OjE5OjQ1LjQzODc3ODU5NiArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2FwcHMvc19jbGllbnQu YwkyMDE1LTAxLTA5IDEwOjE5OjQ1LjQ3Nzc3OTQ3OCArMDEwMAorQEAgLTI5OSw2ICsyOTksNyBA QCBzdGF0aWMgdm9pZCBzY191c2FnZSh2b2lkKQorIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtcGFz cyBhcmcgICAgIC0gcHJpdmF0ZSBrZXkgZmlsZSBwYXNzIHBocmFzZSBzb3VyY2VcbiIpOworIAlC SU9fcHJpbnRmKGJpb19lcnIsIiAtQ0FwYXRoIGFyZyAgIC0gUEVNIGZvcm1hdCBkaXJlY3Rvcnkg b2YgQ0Enc1xuIik7CisgCUJJT19wcmludGYoYmlvX2VyciwiIC1DQWZpbGUgYXJnICAgLSBQRU0g Zm9ybWF0IGZpbGUgb2YgQ0Enc1xuIik7CisrCUJJT19wcmludGYoYmlvX2VyciwiIC10cnVzdGVk X2ZpcnN0IC0gVXNlIHRydXN0ZWQgQ0EncyBmaXJzdCB3aGVuIGJ1aWxkaW5nIHRoZSB0cnVzdCBj aGFpblxuIik7CisgCUJJT19wcmludGYoYmlvX2VyciwiIC1yZWNvbm5lY3QgICAgLSBEcm9wIGFu ZCByZS1tYWtlIHRoZSBjb25uZWN0aW9uIHdpdGggdGhlIHNhbWUgU2Vzc2lvbi1JRFxuIik7Cisg CUJJT19wcmludGYoYmlvX2VyciwiIC1wYXVzZSAgICAgICAgLSBzbGVlcCgxKSBhZnRlciBlYWNo IHJlYWQoMikgYW5kIHdyaXRlKDIpIHN5c3RlbSBjYWxsXG4iKTsKKyAJQklPX3ByaW50ZihiaW9f ZXJyLCIgLXByZXhpdCAgICAgICAtIHByaW50IHNlc3Npb24gaW5mb3JtYXRpb24gZXZlbiBvbiBj b25uZWN0aW9uIGZhaWx1cmVcbiIpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvYXBwcy9zbWlt ZS5jLnRydXN0ZWQtZmlyc3Qgb3BlbnNzbC0xLjAuMWsvYXBwcy9zbWltZS5jCistLS0gb3BlbnNz bC0xLjAuMWsvYXBwcy9zbWltZS5jLnRydXN0ZWQtZmlyc3QJMjAxNS0wMS0wOCAxNTowMDozNi4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9hcHBzL3NtaW1lLmMJMjAxNS0wMS0w OSAxMDoxOTo0NS40Nzc3Nzk0NzggKzAxMDAKK0BAIC00NzksNiArNDc5LDcgQEAgaW50IE1BSU4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJQklPX3ByaW50ZiAoYmlvX2VyciwgIi10ZXh0ICAg ICAgICAgIGluY2x1ZGUgb3IgZGVsZXRlIHRleHQgTUlNRSBoZWFkZXJzXG4iKTsKKyAJCUJJT19w cmludGYgKGJpb19lcnIsICItQ0FwYXRoIGRpciAgICB0cnVzdGVkIGNlcnRpZmljYXRlcyBkaXJl Y3RvcnlcbiIpOworIAkJQklPX3ByaW50ZiAoYmlvX2VyciwgIi1DQWZpbGUgZmlsZSAgIHRydXN0 ZWQgY2VydGlmaWNhdGVzIGZpbGVcbiIpOworKwkJQklPX3ByaW50ZiAoYmlvX2VyciwgIi10cnVz dGVkX2ZpcnN0IHVzZSB0cnVzdGVkIGNlcnRpZmljYXRlcyBmaXJzdCB3aGVuIGJ1aWxkaW5nIHRo ZSB0cnVzdCBjaGFpblxuIik7CisgCQlCSU9fcHJpbnRmIChiaW9fZXJyLCAiLWNybF9jaGVjayAg ICAgY2hlY2sgcmV2b2NhdGlvbiBzdGF0dXMgb2Ygc2lnbmVyJ3MgY2VydGlmaWNhdGUgdXNpbmcg Q1JMc1xuIik7CisgCQlCSU9fcHJpbnRmIChiaW9fZXJyLCAiLWNybF9jaGVja19hbGwgY2hlY2sg cmV2b2NhdGlvbiBzdGF0dXMgb2Ygc2lnbmVyJ3MgY2VydGlmaWNhdGUgY2hhaW4gdXNpbmcgQ1JM c1xuIik7CisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWsvYXBwcy9zX3NlcnZlci5jLnRydXN0ZWQtZmlyc3Qgb3BlbnNzbC0xLjAuMWsvYXBwcy9zX3Nl cnZlci5jCistLS0gb3BlbnNzbC0xLjAuMWsvYXBwcy9zX3NlcnZlci5jLnRydXN0ZWQtZmlyc3QJ MjAxNS0wMS0wOSAxMDoxOTo0NS40NDU3Nzg3NTUgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9h cHBzL3Nfc2VydmVyLmMJMjAxNS0wMS0wOSAxMDoxOTo0NS40Nzg3Nzk1MDEgKzAxMDAKK0BAIC01 MDIsNiArNTAyLDcgQEAgc3RhdGljIHZvaWQgc3ZfdXNhZ2Uodm9pZCkKKyAJQklPX3ByaW50Zihi aW9fZXJyLCIgLXN0YXRlICAgICAgICAtIFByaW50IHRoZSBTU0wgc3RhdGVzXG4iKTsKKyAJQklP X3ByaW50ZihiaW9fZXJyLCIgLUNBcGF0aCBhcmcgICAtIFBFTSBmb3JtYXQgZGlyZWN0b3J5IG9m IENBJ3NcbiIpOworIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtQ0FmaWxlIGFyZyAgIC0gUEVNIGZv cm1hdCBmaWxlIG9mIENBJ3NcbiIpOworKwlCSU9fcHJpbnRmKGJpb19lcnIsIiAtdHJ1c3RlZF9m aXJzdCAtIFVzZSB0cnVzdGVkIENBJ3MgZmlyc3Qgd2hlbiBidWlsZGluZyB0aGUgdHJ1c3QgY2hh aW5cbiIpOworIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtbm9jZXJ0ICAgICAgIC0gRG9uJ3QgdXNl IGFueSBjZXJ0aWZpY2F0ZXMgKEFub24tREgpXG4iKTsKKyAJQklPX3ByaW50ZihiaW9fZXJyLCIg LWNpcGhlciBhcmcgICAtIHBsYXkgd2l0aCAnb3BlbnNzbCBjaXBoZXJzJyB0byBzZWUgd2hhdCBn b2VzIGhlcmVcbiIpOworIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtc2VydmVycHJlZiAgIC0gVXNl IHNlcnZlcidzIGNpcGhlciBwcmVmZXJlbmNlc1xuIik7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4x ay9hcHBzL3NfdGltZS5jLnRydXN0ZWQtZmlyc3Qgb3BlbnNzbC0xLjAuMWsvYXBwcy9zX3RpbWUu YworLS0tIG9wZW5zc2wtMS4wLjFrL2FwcHMvc190aW1lLmMudHJ1c3RlZC1maXJzdAkyMDE1LTAx LTA5IDEwOjE5OjQ1LjM5MTc3NzUzNCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFrL2FwcHMvc190 aW1lLmMJMjAxNS0wMS0wOSAxMDoxOTo0NS40Nzg3Nzk1MDEgKzAxMDAKK0BAIC0xNzksNiArMTc5 LDcgQEAgc3RhdGljIHZvaWQgc190aW1lX3VzYWdlKHZvaWQpCisgICAgICAgICAgICAgICAgIGZp bGUgaWYgbm90IHNwZWNpZmllZCBieSB0aGlzIG9wdGlvblxuXAorIC1DQXBhdGggYXJnICAgLSBQ RU0gZm9ybWF0IGRpcmVjdG9yeSBvZiBDQSdzXG5cCisgLUNBZmlsZSBhcmcgICAtIFBFTSBmb3Jt YXQgZmlsZSBvZiBDQSdzXG5cCisrLXRydXN0ZWRfZmlyc3QgLSBVc2UgdHJ1c3RlZCBDQSdzIGZp cnN0IHdoZW4gYnVpbGRpbmcgdGhlIHRydXN0IGNoYWluXG5cCisgLWNpcGhlciAgICAgICAtIHBy ZWZlcnJlZCBjaXBoZXIgdG8gdXNlLCBwbGF5IHdpdGggJ29wZW5zc2wgY2lwaGVycydcblxuIjsK KyAKKyAJcHJpbnRmKCAidXNhZ2U6IHNfdGltZSA8YXJncz5cblxuIiApOworZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMWsvYXBwcy90cy5jLnRydXN0ZWQtZmlyc3Qgb3BlbnNzbC0xLjAuMWsvYXBwcy90 cy5jCistLS0gb3BlbnNzbC0xLjAuMWsvYXBwcy90cy5jLnRydXN0ZWQtZmlyc3QJMjAxNS0wMS0w OSAxMDoxOTo0NS40MzU3Nzg1MjkgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9hcHBzL3RzLmMJ MjAxNS0wMS0wOSAxMDoxOTo0NS40Nzg3Nzk1MDEgKzAxMDAKK0BAIC0zODMsNyArMzgzLDcgQEAg aW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJICAgInRzIC12ZXJpZnkgWy1kYXRh IGZpbGVfdG9faGFzaF0gWy1kaWdlc3QgZGlnZXN0X2J5dGVzXSAiCisgCQkgICAiWy1xdWVyeWZp bGUgcmVxdWVzdC50c3FdICIKKyAJCSAgICItaW4gcmVzcG9uc2UudHNyIFstdG9rZW5faW5dICIK Ky0JCSAgICItQ0FwYXRoIGNhX3BhdGggLUNBZmlsZSBjYV9maWxlLnBlbSAiCisrCQkgICAiLUNB cGF0aCBjYV9wYXRoIC1DQWZpbGUgY2FfZmlsZS5wZW0gLXRydXN0ZWRfZmlyc3QiCisgCQkgICAi LXVudHJ1c3RlZCBjZXJ0X2ZpbGUucGVtXG4iKTsKKyAgY2xlYW51cDoKKyAJLyogQ2xlYW4gdXAu ICovCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xay9hcHBzL3ZlcmlmeS5jLnRydXN0ZWQtZmlyc3Qg b3BlbnNzbC0xLjAuMWsvYXBwcy92ZXJpZnkuYworLS0tIG9wZW5zc2wtMS4wLjFrL2FwcHMvdmVy aWZ5LmMudHJ1c3RlZC1maXJzdAkyMDE1LTAxLTA4IDE1OjAwOjM2LjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjFrL2FwcHMvdmVyaWZ5LmMJMjAxNS0wMS0wOSAxMDoxOTo0NS40Nzg3 Nzk1MDEgKzAxMDAKK0BAIC0yMzcsNyArMjM3LDcgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQorIAorIGVuZDoKKyAJaWYgKHJldCA9PSAxKSB7CistCQlCSU9fcHJpbnRmKGJpb19l cnIsInVzYWdlOiB2ZXJpZnkgWy12ZXJib3NlXSBbLUNBcGF0aCBwYXRoXSBbLUNBZmlsZSBmaWxl XSBbLXB1cnBvc2UgcHVycG9zZV0gWy1jcmxfY2hlY2tdIik7CisrCQlCSU9fcHJpbnRmKGJpb19l cnIsInVzYWdlOiB2ZXJpZnkgWy12ZXJib3NlXSBbLUNBcGF0aCBwYXRoXSBbLUNBZmlsZSBmaWxl XSBbLXRydXN0ZWRfZmlyc3RdIFstcHVycG9zZSBwdXJwb3NlXSBbLWNybF9jaGVja10iKTsKKyAJ CUJJT19wcmludGYoYmlvX2VyciwiIFstYXR0aW1lIHRpbWVzdGFtcF0iKTsKKyAjaWZuZGVmIE9Q RU5TU0xfTk9fRU5HSU5FCisgCQlCSU9fcHJpbnRmKGJpb19lcnIsIiBbLWVuZ2luZSBlXSIpOwor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvY3J5cHRvL3g1MDkveDUwOV92ZnkuYy50cnVzdGVkLWZp cnN0IG9wZW5zc2wtMS4wLjFrL2NyeXB0by94NTA5L3g1MDlfdmZ5LmMKKy0tLSBvcGVuc3NsLTEu MC4xay9jcnlwdG8veDUwOS94NTA5X3ZmeS5jLnRydXN0ZWQtZmlyc3QJMjAxNS0wMS0wOSAxMDox OTo0NS40NDM3Nzg3MTAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9jcnlwdG8veDUwOS94NTA5 X3ZmeS5jCTIwMTUtMDEtMDkgMTA6MTk6NDUuNDc5Nzc5NTI0ICswMTAwCitAQCAtMjA3LDYgKzIw NywyMSBAQCBpbnQgWDUwOV92ZXJpZnlfY2VydChYNTA5X1NUT1JFX0NUWCAqY3R4CisgCisgCQkv KiBJZiB3ZSBhcmUgc2VsZiBzaWduZWQsIHdlIGJyZWFrICovCisgCQlpZiAoY3R4LT5jaGVja19p c3N1ZWQoY3R4LCB4LHgpKSBicmVhazsKKysJCS8qIElmIGFza2VkIHNlZSBpZiB3ZSBjYW4gZmlu ZCBpc3N1ZXIgaW4gdHJ1c3RlZCBzdG9yZSBmaXJzdCAqLworKwkJaWYgKGN0eC0+cGFyYW0tPmZs YWdzICYgWDUwOV9WX0ZMQUdfVFJVU1RFRF9GSVJTVCkKKysJCQl7CisrCQkJb2sgPSBjdHgtPmdl dF9pc3N1ZXIoJnh0bXAsIGN0eCwgeCk7CisrCQkJaWYgKG9rIDwgMCkKKysJCQkJcmV0dXJuIG9r OworKwkJCS8qIElmIHN1Y2Nlc3NmdWwgZm9yIG5vdyBmcmVlIHVwIGNlcnQgc28gaXQKKysJCQkg KiB3aWxsIGJlIHBpY2tlZCB1cCBhZ2FpbiBsYXRlci4KKysJCQkgKi8KKysJCQlpZiAob2sgPiAw KQorKwkJCQl7CisrCQkJCVg1MDlfZnJlZSh4dG1wKTsKKysJCQkJYnJlYWs7CisrCQkJCX0KKysJ CQl9CisgCisgCQkvKiBJZiB3ZSB3ZXJlIHBhc3NlZCBhIGNlcnQgY2hhaW4sIHVzZSBpdCBmaXJz dCAqLworIAkJaWYgKGN0eC0+dW50cnVzdGVkICE9IE5VTEwpCitkaWZmIC11cCBvcGVuc3NsLTEu MC4xay9jcnlwdG8veDUwOS94NTA5X3ZmeS5oLnRydXN0ZWQtZmlyc3Qgb3BlbnNzbC0xLjAuMWsv Y3J5cHRvL3g1MDkveDUwOV92ZnkuaAorLS0tIG9wZW5zc2wtMS4wLjFrL2NyeXB0by94NTA5L3g1 MDlfdmZ5LmgudHJ1c3RlZC1maXJzdAkyMDE1LTAxLTA5IDEwOjE5OjQ1LjI2Njc3NDcwNiArMDEw MAorKysrIG9wZW5zc2wtMS4wLjFrL2NyeXB0by94NTA5L3g1MDlfdmZ5LmgJMjAxNS0wMS0wOSAx MDoxOTo0NS40Nzk3Nzk1MjQgKzAxMDAKK0BAIC0zODksNiArMzg5LDggQEAgdm9pZCBYNTA5X1NU T1JFX0NUWF9zZXRfZGVwdGgoWDUwOV9TVE9SRQorICNkZWZpbmUgWDUwOV9WX0ZMQUdfVVNFX0RF TFRBUwkJCTB4MjAwMAorIC8qIENoZWNrIHNlbGZzaWduZWQgQ0Egc2lnbmF0dXJlICovCisgI2Rl ZmluZSBYNTA5X1ZfRkxBR19DSEVDS19TU19TSUdOQVRVUkUJCTB4NDAwMAorKy8qIFVzZSB0cnVz dGVkIHN0b3JlIGZpcnN0ICovCisrI2RlZmluZSBYNTA5X1ZfRkxBR19UUlVTVEVEX0ZJUlNUCQkw eDgwMDAKKyAKKyAKKyAjZGVmaW5lIFg1MDlfVlBfRkxBR19ERUZBVUxUCQkJMHgxCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xay9kb2MvYXBwcy9jbXMucG9kLnRydXN0ZWQtZmlyc3Qgb3BlbnNzbC0x LjAuMWsvZG9jL2FwcHMvY21zLnBvZAorLS0tIG9wZW5zc2wtMS4wLjFrL2RvYy9hcHBzL2Ntcy5w b2QudHJ1c3RlZC1maXJzdAkyMDE1LTAxLTA4IDE1OjAwOjM2LjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjFrL2RvYy9hcHBzL2Ntcy5wb2QJMjAxNS0wMS0wOSAxMDoxOTo0NS40Nzk3 Nzk1MjQgKzAxMDAKK0BAIC0zNSw2ICszNSw3IEBAIEI8b3BlbnNzbD4gQjxjbXM+CisgW0I8LXBy aW50Pl0KKyBbQjwtQ0FmaWxlIGZpbGU+XQorIFtCPC1DQXBhdGggZGlyPl0KKytbQjwtdHJ1c3Rl ZF9maXJzdD5dCisgW0I8LW1kIGRpZ2VzdD5dCisgW0I8LVtjaXBoZXJdPl0KKyBbQjwtbm9pbnRl cm4+XQorQEAgLTI0Myw2ICsyNDQsMTIgQEAgQjwtdmVyaWZ5Pi4gVGhpcyBkaXJlY3RvcnkgbXVz dCBiZSBhIHN0YQorIGlzIGEgaGFzaCBvZiBlYWNoIHN1YmplY3QgbmFtZSAodXNpbmcgQjx4NTA5 IC1oYXNoPikgc2hvdWxkIGJlIGxpbmtlZAorIHRvIGVhY2ggY2VydGlmaWNhdGUuCisgCisrPWl0 ZW0gQjwtdHJ1c3RlZF9maXJzdD4KKysKKytVc2UgY2VydGlmaWNhdGVzIGluIENBIGZpbGUgb3Ig Q0EgZGlyZWN0b3J5IGJlZm9yZSB1bnRydXN0ZWQgY2VydGlmaWNhdGVzCisrZnJvbSB0aGUgbWVz c2FnZSB3aGVuIGJ1aWxkaW5nIHRoZSB0cnVzdCBjaGFpbiB0byB2ZXJpZnkgY2VydGlmaWNhdGVz LgorK1RoaXMgaXMgbWFpbmx5IHVzZWZ1bCBpbiBlbnZpcm9ubWVudHMgd2l0aCBCcmlkZ2UgQ0Eg b3IgQ3Jvc3MtQ2VydGlmaWVkIENBcy4KKysKKyA9aXRlbSBCPC1tZCBkaWdlc3Q+CisgCisgZGln ZXN0IGFsZ29yaXRobSB0byB1c2Ugd2hlbiBzaWduaW5nIG9yIHJlc2lnbmluZy4gSWYgbm90IHBy ZXNlbnQgdGhlbiB0aGUKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2RvYy9hcHBzL29jc3AucG9k LnRydXN0ZWQtZmlyc3Qgb3BlbnNzbC0xLjAuMWsvZG9jL2FwcHMvb2NzcC5wb2QKKy0tLSBvcGVu c3NsLTEuMC4xay9kb2MvYXBwcy9vY3NwLnBvZC50cnVzdGVkLWZpcnN0CTIwMTUtMDEtMDkgMTA6 MTk6NDUuNDM2Nzc4NTUxICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWsvZG9jL2FwcHMvb2NzcC5w b2QJMjAxNS0wMS0wOSAxMDoxOTo0NS40Nzk3Nzk1MjQgKzAxMDAKK0BAIC0yOSw2ICsyOSw3IEBA IEI8b3BlbnNzbD4gQjxvY3NwPgorIFtCPC1wYXRoPl0KKyBbQjwtQ0FwYXRoIGRpcj5dCisgW0I8 LUNBZmlsZSBmaWxlPl0KKytbQjwtdHJ1c3RlZF9maXJzdD5dCisgW0I8LVZBZmlsZSBmaWxlPl0K KyBbQjwtdmFsaWRpdHlfcGVyaW9kIG4+XQorIFtCPC1zdGF0dXNfYWdlIG4+XQorQEAgLTE0Miw2 ICsxNDMsMTMgQEAgY29ubmVjdGlvbiB0aW1lb3V0IHRvIHRoZSBPQ1NQIHJlc3BvbmRlcgorIGZp bGUgb3IgcGF0aG5hbWUgY29udGFpbmluZyB0cnVzdGVkIENBIGNlcnRpZmljYXRlcy4gVGhlc2Ug YXJlIHVzZWQgdG8gdmVyaWZ5CisgdGhlIHNpZ25hdHVyZSBvbiB0aGUgT0NTUCByZXNwb25zZS4K KyAKKys9aXRlbSBCPC10cnVzdGVkX2ZpcnN0PgorKworK1VzZSBjZXJ0aWZpY2F0ZXMgaW4gQ0Eg ZmlsZSBvciBDQSBkaXJlY3Rvcnkgb3ZlciBjZXJ0aWZpY2F0ZXMgcHJvdmlkZWQKKytpbiB0aGUg cmVzcG9uc2Ugb3IgcmVzaWRpbmcgaW4gb3RoZXIgY2VydGlmaWNhdGVzIGZpbGUgd2hlbiBidWls ZGluZyB0aGUgdHJ1c3QKKytjaGFpbiB0byB2ZXJpZnkgcmVzcG9uZGVyIGNlcnRpZmljYXRlLgor K1RoaXMgaXMgbWFpbmx5IHVzZWZ1bCBpbiBlbnZpcm9ubWVudHMgd2l0aCBCcmlkZ2UgQ0Egb3Ig Q3Jvc3MtQ2VydGlmaWVkIENBcy4KKysKKyA9aXRlbSBCPC12ZXJpZnlfb3RoZXIgZmlsZT4KKyAK KyBmaWxlIGNvbnRhaW5pbmcgYWRkaXRpb25hbCBjZXJ0aWZpY2F0ZXMgdG8gc2VhcmNoIHdoZW4g YXR0ZW1wdGluZyB0byBsb2NhdGUKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2RvYy9hcHBzL3Nf Y2xpZW50LnBvZC50cnVzdGVkLWZpcnN0IG9wZW5zc2wtMS4wLjFrL2RvYy9hcHBzL3NfY2xpZW50 LnBvZAorLS0tIG9wZW5zc2wtMS4wLjFrL2RvYy9hcHBzL3NfY2xpZW50LnBvZC50cnVzdGVkLWZp cnN0CTIwMTUtMDEtMDkgMTA6MTk6NDUuNDUxNzc4ODkwICswMTAwCisrKysgb3BlbnNzbC0xLjAu MWsvZG9jL2FwcHMvc19jbGllbnQucG9kCTIwMTUtMDEtMDkgMTA6MTk6NDUuNDc5Nzc5NTI0ICsw MTAwCitAQCAtMTksNiArMTksNyBAQCBCPG9wZW5zc2w+IEI8c19jbGllbnQ+CisgW0I8LXBhc3Mg YXJnPl0KKyBbQjwtQ0FwYXRoIGRpcmVjdG9yeT5dCisgW0I8LUNBZmlsZSBmaWxlbmFtZT5dCisr W0I8LXRydXN0ZWRfZmlyc3Q+XQorIFtCPC1yZWNvbm5lY3Q+XQorIFtCPC1wYXVzZT5dCisgW0I8 LXNob3djZXJ0cz5dCitAQCAtMTIxLDcgKzEyMiw3IEBAIGFsc28gdXNlZCB3aGVuIGJ1aWxkaW5n IHRoZSBjbGllbnQgY2VydGkKKyBBIGZpbGUgY29udGFpbmluZyB0cnVzdGVkIGNlcnRpZmljYXRl cyB0byB1c2UgZHVyaW5nIHNlcnZlciBhdXRoZW50aWNhdGlvbgorIGFuZCB0byB1c2Ugd2hlbiBh dHRlbXB0aW5nIHRvIGJ1aWxkIHRoZSBjbGllbnQgY2VydGlmaWNhdGUgY2hhaW4uCisgCistPWl0 ZW0gQjwtcHVycG9zZSwgLWlnbm9yZV9jcml0aWNhbCwgLWlzc3Vlcl9jaGVja3MsIC1jcmxfY2hl Y2ssIC1jcmxfY2hlY2tfYWxsLCAtcG9saWN5X2NoZWNrLCAtZXh0ZW5kZWRfY3JsLCAteDUwOV9z dHJpY3QsIC1wb2xpY3kgLWNoZWNrX3NzX3NpZz4KKys9aXRlbSBCPC1wdXJwb3NlLCAtaWdub3Jl X2NyaXRpY2FsLCAtaXNzdWVyX2NoZWNrcywgLWNybF9jaGVjaywgLWNybF9jaGVja19hbGwsIC1w b2xpY3lfY2hlY2ssIC1leHRlbmRlZF9jcmwsIC14NTA5X3N0cmljdCwgLXBvbGljeSAtY2hlY2tf c3Nfc2lnLCAtdHJ1c3RlZF9maXJzdD4KKyAKKyBTZXQgdmFyaW91cyBjZXJ0aWZpY2F0ZSBjaGFp biB2YWxpYWRpdGlvbiBvcHRpb24uIFNlZSB0aGUKKyBMPEI8dmVyaWZ5Pnx2ZXJpZnkoMSk+IG1h bnVhbCBwYWdlIGZvciBkZXRhaWxzLgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWsvZG9jL2FwcHMv c21pbWUucG9kLnRydXN0ZWQtZmlyc3Qgb3BlbnNzbC0xLjAuMWsvZG9jL2FwcHMvc21pbWUucG9k CistLS0gb3BlbnNzbC0xLjAuMWsvZG9jL2FwcHMvc21pbWUucG9kLnRydXN0ZWQtZmlyc3QJMjAx NS0wMS0wOCAxNTowMDozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xay9kb2Mv YXBwcy9zbWltZS5wb2QJMjAxNS0wMS0wOSAxMDoxOTo0NS40Nzk3Nzk1MjQgKzAxMDAKK0BAIC0x NSw2ICsxNSw5IEBAIEI8b3BlbnNzbD4gQjxzbWltZT4KKyBbQjwtcGs3b3V0Pl0KKyBbQjwtW2Np cGhlcl0+XQorIFtCPC1pbiBmaWxlPl0KKytbQjwtQ0FmaWxlIGZpbGU+XQorK1tCPC1DQXBhdGgg ZGlyPl0KKytbQjwtdHJ1c3RlZF9maXJzdD5dCisgW0I8LWNlcnRmaWxlIGZpbGU+XQorIFtCPC1z aWduZXIgZmlsZT5dCisgW0I8LXJlY2lwICBmaWxlPl0KK0BAIC0xNDYsNiArMTQ5LDEyIEBAIEI8 LXZlcmlmeT4uIFRoaXMgZGlyZWN0b3J5IG11c3QgYmUgYSBzdGEKKyBpcyBhIGhhc2ggb2YgZWFj aCBzdWJqZWN0IG5hbWUgKHVzaW5nIEI8eDUwOSAtaGFzaD4pIHNob3VsZCBiZSBsaW5rZWQKKyB0 byBlYWNoIGNlcnRpZmljYXRlLgorIAorKz1pdGVtIEI8LXRydXN0ZWRfZmlyc3Q+CisrCisrVXNl IGNlcnRpZmljYXRlcyBpbiBDQSBmaWxlIG9yIENBIGRpcmVjdG9yeSBvdmVyIGNlcnRpZmljYXRl cyBwcm92aWRlZAorK2luIHRoZSBtZXNzYWdlIHdoZW4gYnVpbGRpbmcgdGhlIHRydXN0IGNoYWlu IHRvIHZlcmlmeSBhIGNlcnRpZmljYXRlLgorK1RoaXMgaXMgbWFpbmx5IHVzZWZ1bCBpbiBlbnZp cm9ubWVudHMgd2l0aCBCcmlkZ2UgQ0Egb3IgQ3Jvc3MtQ2VydGlmaWVkIENBcy4KKysKKyA9aXRl bSBCPC1tZCBkaWdlc3Q+CisgCisgZGlnZXN0IGFsZ29yaXRobSB0byB1c2Ugd2hlbiBzaWduaW5n IG9yIHJlc2lnbmluZy4gSWYgbm90IHByZXNlbnQgdGhlbiB0aGUKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjFrL2RvYy9hcHBzL3Nfc2VydmVyLnBvZC50cnVzdGVkLWZpcnN0IG9wZW5zc2wtMS4wLjFr L2RvYy9hcHBzL3Nfc2VydmVyLnBvZAorLS0tIG9wZW5zc2wtMS4wLjFrL2RvYy9hcHBzL3Nfc2Vy dmVyLnBvZC50cnVzdGVkLWZpcnN0CTIwMTUtMDEtMDkgMTA6MTk6NDUuNDUxNzc4ODkwICswMTAw CisrKysgb3BlbnNzbC0xLjAuMWsvZG9jL2FwcHMvc19zZXJ2ZXIucG9kCTIwMTUtMDEtMDkgMTA6 MTk6NDUuNDc5Nzc5NTI0ICswMTAwCitAQCAtMzMsNiArMzMsNyBAQCBCPG9wZW5zc2w+IEI8c19z ZXJ2ZXI+CisgW0I8LXN0YXRlPl0KKyBbQjwtQ0FwYXRoIGRpcmVjdG9yeT5dCisgW0I8LUNBZmls ZSBmaWxlbmFtZT5dCisrW0I8LXRydXN0ZWRfZmlyc3Q+XQorIFtCPC1ub2NlcnQ+XQorIFtCPC1j aXBoZXIgY2lwaGVybGlzdD5dCisgW0I8LXNlcnZlcnByZWY+XQorQEAgLTE3OCw2ICsxNzksMTIg QEAgYW5kIHRvIHVzZSB3aGVuIGF0dGVtcHRpbmcgdG8gYnVpbGQgdGhlCisgaXMgYWxzbyB1c2Vk IGluIHRoZSBsaXN0IG9mIGFjY2VwdGFibGUgY2xpZW50IENBcyBwYXNzZWQgdG8gdGhlIGNsaWVu dCB3aGVuCisgYSBjZXJ0aWZpY2F0ZSBpcyByZXF1ZXN0ZWQuCisgCisrPWl0ZW0gQjwtdHJ1c3Rl ZF9maXJzdD4KKysKKytVc2UgY2VydGlmaWNhdGVzIGluIENBIGZpbGUgb3IgQ0EgZGlyZWN0b3J5 IGJlZm9yZSBvdGhlciBjZXJ0aWZpY2F0ZXMgCisrd2hlbiBidWlsZGluZyB0aGUgdHJ1c3QgY2hh aW4gdG8gdmVyaWZ5IGNsaWVudCBjZXJ0aWZpY2F0ZXMuCisrVGhpcyBpcyBtYWlubHkgdXNlZnVs IGluIGVudmlyb25tZW50cyB3aXRoIEJyaWRnZSBDQSBvciBDcm9zcy1DZXJ0aWZpZWQgQ0FzLgor KworID1pdGVtIEI8LXN0YXRlPgorIAorIHByaW50cyBvdXQgdGhlIFNTTCBzZXNzaW9uIHN0YXRl cy4KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2RvYy9hcHBzL3NfdGltZS5wb2QudHJ1c3RlZC1m aXJzdCBvcGVuc3NsLTEuMC4xay9kb2MvYXBwcy9zX3RpbWUucG9kCistLS0gb3BlbnNzbC0xLjAu MWsvZG9jL2FwcHMvc190aW1lLnBvZC50cnVzdGVkLWZpcnN0CTIwMTUtMDEtMDggMTU6MDA6MzYu MDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWsvZG9jL2FwcHMvc190aW1lLnBvZAky MDE1LTAxLTA5IDEwOjE5OjQ1LjQ4MDc3OTU0NiArMDEwMAorQEAgLTE0LDYgKzE0LDcgQEAgQjxv cGVuc3NsPiBCPHNfdGltZT4KKyBbQjwta2V5IGZpbGVuYW1lPl0KKyBbQjwtQ0FwYXRoIGRpcmVj dG9yeT5dCisgW0I8LUNBZmlsZSBmaWxlbmFtZT5dCisrW0I8LXRydXN0ZWRfZmlyc3Q+XQorIFtC PC1yZXVzZT5dCisgW0I8LW5ldz5dCisgW0I8LXZlcmlmeSBkZXB0aD5dCitAQCAtNzYsNiArNzcs MTIgQEAgYWxzbyB1c2VkIHdoZW4gYnVpbGRpbmcgdGhlIGNsaWVudCBjZXJ0aQorIEEgZmlsZSBj b250YWluaW5nIHRydXN0ZWQgY2VydGlmaWNhdGVzIHRvIHVzZSBkdXJpbmcgc2VydmVyIGF1dGhl bnRpY2F0aW9uCisgYW5kIHRvIHVzZSB3aGVuIGF0dGVtcHRpbmcgdG8gYnVpbGQgdGhlIGNsaWVu dCBjZXJ0aWZpY2F0ZSBjaGFpbi4KKyAKKys9aXRlbSBCPC10cnVzdGVkX2ZpcnN0PgorKworK1Vz ZSBjZXJ0aWZpY2F0ZXMgaW4gQ0EgZmlsZSBvciBDQSBkaXJlY3Rvcnkgb3ZlciB0aGUgY2VydGlm aWNhdGVzIHByb3ZpZGVkCisrYnkgdGhlIHNlcnZlciB3aGVuIGJ1aWxkaW5nIHRoZSB0cnVzdCBj aGFpbiB0byB2ZXJpZnkgc2VydmVyIGNlcnRpZmljYXRlLgorK1RoaXMgaXMgbWFpbmx5IHVzZWZ1 bCBpbiBlbnZpcm9ubWVudHMgd2l0aCBCcmlkZ2UgQ0Egb3IgQ3Jvc3MtQ2VydGlmaWVkIENBcy4K KysKKyA9aXRlbSBCPC1uZXc+CisgCisgcGVyZm9ybXMgdGhlIHRpbWluZyB0ZXN0IHVzaW5nIGEg bmV3IHNlc3Npb24gSUQgZm9yIGVhY2ggY29ubmVjdGlvbi4KK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjFrL2RvYy9hcHBzL3RzLnBvZC50cnVzdGVkLWZpcnN0IG9wZW5zc2wtMS4wLjFrL2RvYy9hcHBz L3RzLnBvZAorLS0tIG9wZW5zc2wtMS4wLjFrL2RvYy9hcHBzL3RzLnBvZC50cnVzdGVkLWZpcnN0 CTIwMTQtMTAtMTUgMTU6NDk6MTUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWsv ZG9jL2FwcHMvdHMucG9kCTIwMTUtMDEtMDkgMTA6MTk6NDUuNDgwNzc5NTQ2ICswMTAwCitAQCAt NDYsNiArNDYsNyBAQCBCPC12ZXJpZnk+CisgW0I8LXRva2VuX2luPl0KKyBbQjwtQ0FwYXRoPiB0 cnVzdGVkX2NlcnRfcGF0aF0KKyBbQjwtQ0FmaWxlPiB0cnVzdGVkX2NlcnRzLnBlbV0KKytbQjwt dHJ1c3RlZF9maXJzdD5dCisgW0I8LXVudHJ1c3RlZD4gY2VydF9maWxlLnBlbV0KKyAKKyA9aGVh ZDEgREVTQ1JJUFRJT04KK0BAIC0zMjQsNiArMzI1LDEyIEBAIEw8dmVyaWZ5KDEpfHZlcmlmeSgx KT4gZm9yIGFkZGl0aW9uYWwgZGUKKyBvciBCPC1DQXBhdGg+IG11c3QgYmUgc3BlY2lmaWVkLgor IChPcHRpb25hbCkKKyAKKys9aXRlbSBCPC10cnVzdGVkX2ZpcnN0PgorKworK1VzZSBjZXJ0aWZp Y2F0ZXMgaW4gQ0EgZmlsZSBvciBDQSBkaXJlY3RvcnkgYmVmb3JlIG90aGVyIGNlcnRpZmljYXRl cworK3doZW4gYnVpbGRpbmcgdGhlIHRydXN0IGNoYWluIHRvIHZlcmlmeSBjZXJ0aWZpY2F0ZXMu CisrVGhpcyBpcyBtYWlubHkgdXNlZnVsIGluIGVudmlyb25tZW50cyB3aXRoIEJyaWRnZSBDQSBv ciBDcm9zcy1DZXJ0aWZpZWQgQ0FzLgorKworID1pdGVtIEI8LXVudHJ1c3RlZD4gY2VydF9maWxl LnBlbQorIAorIFNldCBvZiBhZGRpdGlvbmFsIHVudHJ1c3RlZCBjZXJ0aWZpY2F0ZXMgaW4gUEVN IGZvcm1hdCB3aGljaCBtYXkgYmUKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFrL2RvYy9hcHBzL3Zl cmlmeS5wb2QudHJ1c3RlZC1maXJzdCBvcGVuc3NsLTEuMC4xay9kb2MvYXBwcy92ZXJpZnkucG9k CistLS0gb3BlbnNzbC0xLjAuMWsvZG9jL2FwcHMvdmVyaWZ5LnBvZC50cnVzdGVkLWZpcnN0CTIw MTUtMDEtMDggMTU6MDA6MzYuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWsvZG9j L2FwcHMvdmVyaWZ5LnBvZAkyMDE1LTAxLTA5IDEwOjE5OjQ1LjQ4MDc3OTU0NiArMDEwMAorQEAg LTksNiArOSw3IEBAIHZlcmlmeSAtIFV0aWxpdHkgdG8gdmVyaWZ5IGNlcnRpZmljYXRlcy4KKyBC PG9wZW5zc2w+IEI8dmVyaWZ5PgorIFtCPC1DQXBhdGggZGlyZWN0b3J5Pl0KKyBbQjwtQ0FmaWxl IGZpbGU+XQorK1tCPC10cnVzdGVkX2ZpcnN0Pl0KKyBbQjwtcHVycG9zZSBwdXJwb3NlPl0KKyBb QjwtcG9saWN5IGFyZz5dCisgW0I8LWlnbm9yZV9jcml0aWNhbD5dCitAQCAtNTYsNiArNTcsMTIg QEAgaW4gUEVNIGZvcm1hdCBjb25jYXRlbmF0ZWQgdG9nZXRoZXIuCisgQSBmaWxlIG9mIHVudHJ1 c3RlZCBjZXJ0aWZpY2F0ZXMuIFRoZSBmaWxlIHNob3VsZCBjb250YWluIG11bHRpcGxlIGNlcnRp ZmljYXRlcworIGluIFBFTSBmb3JtYXQgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyLgorIAorKz1pdGVt IEI8LXRydXN0ZWRfZmlyc3Q+CisrCisrVXNlIGNlcnRpZmljYXRlcyBpbiBDQSBmaWxlIG9yIENB IGRpcmVjdG9yeSBiZWZvcmUgdGhlIGNlcnRpZmljYXRlcyBpbiB0aGUgdW50cnVzdGVkCisrZmls ZSB3aGVuIGJ1aWxkaW5nIHRoZSB0cnVzdCBjaGFpbiB0byB2ZXJpZnkgY2VydGlmaWNhdGVzLgor K1RoaXMgaXMgbWFpbmx5IHVzZWZ1bCBpbiBlbnZpcm9ubWVudHMgd2l0aCBCcmlkZ2UgQ0Egb3Ig Q3Jvc3MtQ2VydGlmaWVkIENBcy4KKysKKyA9aXRlbSBCPC1wdXJwb3NlIHB1cnBvc2U+CisgCisg VGhlIGludGVuZGVkIHVzZSBmb3IgdGhlIGNlcnRpZmljYXRlLiBJZiB0aGlzIG9wdGlvbiBpcyBu b3Qgc3BlY2lmaWVkLAoKZGlmZiAtLWdpdCBhL29wZW5zc2wuc3BlYyBiL29wZW5zc2wuc3BlYwpp bmRleCAyNWM2ZjliLi5iYWMxMDFiIDEwMDY0NAotLS0gYS9vcGVuc3NsLnNwZWMKKysrIGIvb3Bl bnNzbC5zcGVjCkBAIC0yMiw4ICsyMiw4IEBACiAKIFN1bW1hcnk6IFV0aWxpdGllcyBmcm9tIHRo ZSBnZW5lcmFsIHB1cnBvc2UgY3J5cHRvZ3JhcGh5IGxpYnJhcnkgd2l0aCBUTFMgaW1wbGVtZW50 YXRpb24KIE5hbWU6IG9wZW5zc2wKLVZlcnNpb246IDEuMC4xagotUmVsZWFzZTogMyV7P2Rpc3R9 CitWZXJzaW9uOiAxLjAuMWsKK1JlbGVhc2U6IDElez9kaXN0fQogRXBvY2g6IDEKICMgV2UgaGF2 ZSB0byByZW1vdmUgY2VydGFpbiBwYXRlbnRlZCBhbGdvcml0aG1zIGZyb20gdGhlIG9wZW5zc2wg c291cmNlCiAjIHRhcmJhbGwgd2l0aCB0aGUgaG9iYmxlLW9wZW5zc2wgc2NyaXB0IHdoaWNoIGlz IGluY2x1ZGVkIGJlbG93LgpAQCAtNTgsMTEgKzU4LDExIEBAIFBhdGNoMzM6IG9wZW5zc2wtMS4w LjAtYmV0YTQtY2EtZGlyLnBhdGNoCiBQYXRjaDM0OiBvcGVuc3NsLTAuOS42LXg1MDkucGF0Y2gK IFBhdGNoMzU6IG9wZW5zc2wtMC45LjhqLXZlcnNpb24tYWRkLWVuZ2luZXMucGF0Y2gKIFBhdGNo Mzk6IG9wZW5zc2wtMS4wLjFoLWlwdjYtYXBwcy5wYXRjaAotUGF0Y2g0MDogb3BlbnNzbC0xLjAu MWotZmlwcy5wYXRjaAorUGF0Y2g0MDogb3BlbnNzbC0xLjAuMWstZmlwcy5wYXRjaAogUGF0Y2g0 NTogb3BlbnNzbC0xLjAuMWUtZW52LXpsaWIucGF0Y2gKIFBhdGNoNDc6IG9wZW5zc2wtMS4wLjAt YmV0YTUtcmVhZG1lLXdhcm5pbmcucGF0Y2gKIFBhdGNoNDk6IG9wZW5zc2wtMS4wLjFpLWFsZ28t ZG9jLnBhdGNoCi1QYXRjaDUwOiBvcGVuc3NsLTEuMC4xLWJldGEyLWR0bHMxLWFiaS5wYXRjaAor UGF0Y2g1MDogb3BlbnNzbC0xLjAuMWstZHRsczEtYWJpLnBhdGNoCiBQYXRjaDUxOiBvcGVuc3Ns LTEuMC4xZS12ZXJzaW9uLnBhdGNoCiBQYXRjaDU2OiBvcGVuc3NsLTEuMC4wYy1yc2EteDkzMS5w YXRjaAogUGF0Y2g1ODogb3BlbnNzbC0xLjAuMS1iZXRhMi1maXBzLW1kNS1hbGxvdy5wYXRjaApA QCAtNzUsNyArNzUsNyBAQCBQYXRjaDY5OiBvcGVuc3NsLTEuMC4xYy1kaC0xMDI0LnBhdGNoCiBQ YXRjaDcwOiBvcGVuc3NsLTEuMC4xai1maXBzLWVjLnBhdGNoCiBQYXRjaDcxOiBvcGVuc3NsLTEu MC4xaS1tYW5maXgucGF0Y2gKIFBhdGNoNzI6IG9wZW5zc2wtMS4wLjFlLWZpcHMtY3Rvci5wYXRj aAotUGF0Y2g3Mzogb3BlbnNzbC0xLjAuMWUtZWNjLXN1aXRlYi5wYXRjaAorUGF0Y2g3Mzogb3Bl bnNzbC0xLjAuMWstZWNjLXN1aXRlYi5wYXRjaAogUGF0Y2g3NDogb3BlbnNzbC0xLjAuMWUtbm8t bWQ1LXZlcmlmeS5wYXRjaAogUGF0Y2g3NTogb3BlbnNzbC0xLjAuMWUtY29tcGF0LXN5bWJvbHMu cGF0Y2gKIFBhdGNoNzY6IG9wZW5zc2wtMS4wLjFpLW5ldy1maXBzLXJlcXMucGF0Y2gKQEAgLTg1 LDEwICs4NSwxMCBAQCBQYXRjaDkyOiBvcGVuc3NsLTEuMC4xaC1zeXN0ZW0tY2lwaGVybGlzdC5w YXRjaAogUGF0Y2g5Mzogb3BlbnNzbC0xLjAuMWgtZGlzYWJsZS1zc2x2MnYzLnBhdGNoCiAjIEJh Y2twb3J0ZWQgZml4ZXMgaW5jbHVkaW5nIHNlY3VyaXR5IGZpeGVzCiBQYXRjaDgwOiBvcGVuc3Ns LTEuMC4xai1ldnAtd3JhcC5wYXRjaAotUGF0Y2g4MTogb3BlbnNzbC0xLjAuMS1iZXRhMi1wYWRs b2NrNjQucGF0Y2gKLVBhdGNoODQ6IG9wZW5zc2wtMS4wLjFpLXRydXN0ZWQtZmlyc3QucGF0Y2gK K1BhdGNoODE6IG9wZW5zc2wtMS4wLjFrLXBhZGxvY2s2NC5wYXRjaAorUGF0Y2g4NDogb3BlbnNz bC0xLjAuMWstdHJ1c3RlZC1maXJzdC5wYXRjaAogUGF0Y2g4NTogb3BlbnNzbC0xLjAuMWUtYXJt LXVzZS1lbGYtYXV4di1jYXBzLnBhdGNoCi1QYXRjaDg5OiBvcGVuc3NsLTEuMC4xai1lcGhlbWVy YWwta2V5LXNpemUucGF0Y2gKK1BhdGNoODk6IG9wZW5zc2wtMS4wLjFrLWVwaGVtZXJhbC1rZXkt c2l6ZS5wYXRjaAogCiBMaWNlbnNlOiBPcGVuU1NMCiBHcm91cDogU3lzdGVtIEVudmlyb25tZW50 L0xpYnJhcmllcwpAQCAtNDc4LDYgKzQ3OCw5IEBAIHJtIC1yZiAkUlBNX0JVSUxEX1JPT1QvJXtf bGliZGlyfS9maXBzY2FuaXN0ZXIuKgogJXBvc3R1biBsaWJzIC1wIC9zYmluL2xkY29uZmlnCiAK ICVjaGFuZ2Vsb2cKKyogRnJpIEphbiAgOSAyMDE1IFRvbcOhxaEgTXLDoXogPHRtcmF6QHJlZGhh dC5jb20+IDEuMC4xay0xCistIG5ldyB1cHN0cmVhbSByZWxlYXNlIGZpeGluZyBtdWx0aXBsZSBz ZWN1cml0eSBpc3N1ZXMKKwogKiBUaHUgTm92IDIwIDIwMTQgVG9tw6HFoSBNcsOheiA8dG1yYXpA cmVkaGF0LmNvbT4gMS4wLjFqLTMKIC0gZGlzYWJsZSBTU0x2MyBieSBkZWZhdWx0IGFnYWluICht YWlsIHNlcnZlcnMgYW5kIHBvc3NpYmx5CiAgIExEQVAgc2VydmVycyBzaG91bGQgcHJvYmFibHkg YWxsb3cgaXQgZXhwbGljaXRseSBmb3IgbGVnYWN5CgpkaWZmIC0tZ2l0IGEvc291cmNlcyBiL3Nv dXJjZXMKaW5kZXggNjE1ZTFhYS4uMTFkMjEyMSAxMDA2NDQKLS0tIGEvc291cmNlcworKysgYi9z b3VyY2VzCkBAIC0xICsxIEBACi1kNmViYTA0NGY2MTQ1OTZmOTRiYTI3YTkwYmUyYjVkZSAgb3Bl bnNzbC0xLjAuMWotaG9iYmxlZC50YXIueHoKK2MyNzJhZmY4NWFkZTQ5NmUzZWNhOTZhNDFhNDlh MDZmICBvcGVuc3NsLTEuMC4xay1ob2JibGVkLnRhci54ego=